From c0c0106cf47fdff397756913b8646541f3bb9928 Mon Sep 17 00:00:00 2001 From: Yuqian Yang Date: Thu, 11 Dec 2025 23:51:58 +0800 Subject: Add paint invalid area. --- src/ui/render/BorderRenderObject.cpp | 47 ++++++++++++++---------------------- 1 file changed, 18 insertions(+), 29 deletions(-) (limited to 'src/ui/render/BorderRenderObject.cpp') diff --git a/src/ui/render/BorderRenderObject.cpp b/src/ui/render/BorderRenderObject.cpp index 080bcc4f..1fc120f1 100644 --- a/src/ui/render/BorderRenderObject.cpp +++ b/src/ui/render/BorderRenderObject.cpp @@ -5,7 +5,6 @@ #include "cru/platform/graphics/Geometry.h" #include "cru/platform/graphics/Painter.h" #include "cru/platform/gui/UiApplication.h" -#include "cru/ui/DebugFlags.h" #include "cru/ui/render/RenderObject.h" #include @@ -80,15 +79,24 @@ RenderObject* BorderRenderObject::HitTest(const Point& point) { } } -void BorderRenderObject::Draw(platform::graphics::IPainter* painter) { - if constexpr (debug_flags::draw) { - CruLogDebug( - kLogTag, "BorderRenderObject draw, background: {}, foreground: {}.", - background_brush_ == nullptr ? "NONE" - : background_brush_->GetDebugString(), - foreground_brush_ == nullptr ? "NONE" - : foreground_brush_->GetDebugString()); +Size BorderRenderObject::OnMeasureContent( + const MeasureRequirement& requirement) { + if (auto child = GetChild()) { + child->Measure(requirement); + return child->GetMeasureResultSize(); + } else { + return requirement.suggest.GetSizeOr0(); + } +} + +void BorderRenderObject::OnLayoutContent(const Rect& content_rect) { + if (auto child = GetChild()) { + child->Layout(content_rect.GetLeftTop()); } +} + +void BorderRenderObject::OnDraw(RenderObjectDrawContext& context) { + auto painter = context.painter; if (background_brush_ != nullptr) painter->FillGeometry(border_inner_geometry_.get(), @@ -103,10 +111,7 @@ void BorderRenderObject::Draw(platform::graphics::IPainter* painter) { } if (auto child = GetChild()) { - painter->PushState(); - painter->ConcatTransform(Matrix::Translation(child->GetOffset())); - child->Draw(painter); - painter->PopState(); + context.DrawChild(child); } if (foreground_brush_ != nullptr) @@ -114,22 +119,6 @@ void BorderRenderObject::Draw(platform::graphics::IPainter* painter) { foreground_brush_.get()); } -Size BorderRenderObject::OnMeasureContent( - const MeasureRequirement& requirement) { - if (auto child = GetChild()) { - child->Measure(requirement); - return child->GetMeasureResultSize(); - } else { - return requirement.suggest.GetSizeOr0(); - } -} - -void BorderRenderObject::OnLayoutContent(const Rect& content_rect) { - if (auto child = GetChild()) { - child->Layout(content_rect.GetLeftTop()); - } -} - void BorderRenderObject::OnResize(const Size& new_size) { RecreateGeometry(); } Thickness BorderRenderObject::GetTotalSpaceThickness() { -- cgit v1.2.3