aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/cru/ui/render/BorderRenderObject.h2
-rw-r--r--src/ui/render/BorderRenderObject.cpp13
2 files changed, 15 insertions, 0 deletions
diff --git a/include/cru/ui/render/BorderRenderObject.h b/include/cru/ui/render/BorderRenderObject.h
index c011cda0..0ceb7091 100644
--- a/include/cru/ui/render/BorderRenderObject.h
+++ b/include/cru/ui/render/BorderRenderObject.h
@@ -46,8 +46,10 @@ class CRU_UI_API BorderRenderObject : public SingleChildRenderObject {
Thickness GetTotalSpaceThickness() override;
Thickness GetInnerSpaceThickness() override;
+ Rect GetBorderRect();
Rect GetPaddingRect() override;
Rect GetContentRect() override;
+ Rect GetRenderRect() override;
protected:
Size OnMeasureContent(const MeasureRequirement& requirement) override;
diff --git a/src/ui/render/BorderRenderObject.cpp b/src/ui/render/BorderRenderObject.cpp
index 144ad787..42cd9576 100644
--- a/src/ui/render/BorderRenderObject.cpp
+++ b/src/ui/render/BorderRenderObject.cpp
@@ -133,6 +133,17 @@ Thickness BorderRenderObject::GetInnerSpaceThickness() {
: RenderObject::GetInnerSpaceThickness();
}
+Rect BorderRenderObject::GetBorderRect() {
+ const auto size = GetSize();
+ Rect rect{Point{}, size};
+ rect = rect.Shrink(GetMargin());
+ 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::GetPaddingRect() {
const auto size = GetSize();
Rect rect{Point{}, size};
@@ -158,6 +169,8 @@ Rect BorderRenderObject::GetContentRect() {
return rect;
}
+Rect BorderRenderObject::GetRenderRect() { return GetBorderRect(); }
+
void BorderRenderObject::RecreateGeometry() {
geometry_.reset();
border_outer_geometry_.reset();