aboutsummaryrefslogtreecommitdiff
path: root/src/ui/render/BorderRenderObject.cpp
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2020-06-25 16:31:23 +0800
committercrupest <crupest@outlook.com>2020-06-25 16:31:23 +0800
commitce0ae2c3727f83f1943d528b006eec94ad80ece9 (patch)
tree809b8a755aabf60c04118b2b81c4de4b8fc6eb89 /src/ui/render/BorderRenderObject.cpp
parent01b97f7e819f88f01fa0b327dfa2c2aabfa81657 (diff)
downloadcru-ce0ae2c3727f83f1943d528b006eec94ad80ece9.tar.gz
cru-ce0ae2c3727f83f1943d528b006eec94ad80ece9.tar.bz2
cru-ce0ae2c3727f83f1943d528b006eec94ad80ece9.zip
...
Diffstat (limited to 'src/ui/render/BorderRenderObject.cpp')
-rw-r--r--src/ui/render/BorderRenderObject.cpp37
1 files changed, 31 insertions, 6 deletions
diff --git a/src/ui/render/BorderRenderObject.cpp b/src/ui/render/BorderRenderObject.cpp
index fbc3c65f..ad0c6455 100644
--- a/src/ui/render/BorderRenderObject.cpp
+++ b/src/ui/render/BorderRenderObject.cpp
@@ -27,7 +27,7 @@ void BorderRenderObject::Draw(platform::graph::IPainter* painter) {
painter->FillGeometry(geometry_.get(), border_brush_.get());
}
}
- if (const auto child = GetChild()) {
+ if (const auto child = GetSingleChild()) {
auto offset = child->GetOffset();
platform::graph::util::WithTransform(
painter, platform::Matrix::Translation(offset.x, offset.y),
@@ -48,7 +48,7 @@ void BorderRenderObject::SetBorderStyle(const BorderStyle& style) {
}
RenderObject* BorderRenderObject::HitTest(const Point& point) {
- if (const auto child = GetChild()) {
+ if (const auto child = GetSingleChild()) {
auto offset = child->GetOffset();
Point p{point.x - offset.x, point.y - offset.y};
const auto result = child->HitTest(p);
@@ -90,7 +90,7 @@ Size BorderRenderObject::OnMeasureCore(const MeasureRequirement& requirement) {
MeasureRequirement content_requirement = requirement;
- if (!requirement.max_width.IsInfinate()) {
+ if (!requirement.max_width.IsNotSpecify()) {
const auto max_width = requirement.max_width.GetLength();
if (coerced_space_size.width > max_width) {
log::Warn(
@@ -101,7 +101,7 @@ Size BorderRenderObject::OnMeasureCore(const MeasureRequirement& requirement) {
content_requirement.max_width = max_width - coerced_space_size.width;
}
- if (!requirement.max_height.IsInfinate()) {
+ if (!requirement.max_height.IsNotSpecify()) {
const auto max_height = requirement.max_height.GetLength();
if (coerced_space_size.height > max_height) {
log::Warn(
@@ -160,7 +160,7 @@ void BorderRenderObject::OnLayoutCore(const Size& size) {
Size BorderRenderObject::OnMeasureContent(
const MeasureRequirement& requirement) {
- const auto child = GetChild();
+ const auto child = GetSingleChild();
if (child) {
child->Measure(requirement);
return child->GetMeasuredSize();
@@ -170,7 +170,7 @@ Size BorderRenderObject::OnMeasureContent(
}
void BorderRenderObject::OnLayoutContent(const Rect& content_rect) {
- const auto child = GetChild();
+ const auto child = GetSingleChild();
if (child) {
child->Layout(content_rect);
}
@@ -178,6 +178,31 @@ void BorderRenderObject::OnLayoutContent(const Rect& content_rect) {
void BorderRenderObject::OnAfterLayout() { RecreateGeometry(); }
+Rect BorderRenderObject::GetPaddingRect() const {
+ const auto size = GetSize();
+ Rect rect{Point{}, size};
+ rect = rect.Shrink(GetMargin());
+ if (is_border_enabled_) rect = rect.Shrink(border_thickness_);
+ rect.left = std::min(rect.left, size.width);
+ rect.top = std::min(rect.top, size.height);
+ rect.width = std::max(rect.width, 0.0f);
+ rect.height = std::max(rect.height, 0.0f);
+ return rect;
+}
+
+Rect BorderRenderObject::GetContentRect() const {
+ const auto size = GetSize();
+ Rect rect{Point{}, size};
+ rect = rect.Shrink(GetMargin());
+ if (is_border_enabled_) rect = rect.Shrink(border_thickness_);
+ rect = rect.Shrink(GetPadding());
+ rect.left = std::min(rect.left, size.width);
+ rect.top = std::min(rect.top, size.height);
+ rect.width = std::max(rect.width, 0.0f);
+ rect.height = std::max(rect.height, 0.0f);
+ return rect;
+}
+
void BorderRenderObject::RecreateGeometry() {
geometry_.reset();
border_outer_geometry_.reset();