From 0dcf8e686b93cca54a424affe0455d0a97d6c2ef Mon Sep 17 00:00:00 2001 From: crupest Date: Tue, 3 Mar 2020 23:36:45 +0800 Subject: ... --- src/ui/render/render_object.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'src/ui/render/render_object.cpp') diff --git a/src/ui/render/render_object.cpp b/src/ui/render/render_object.cpp index 54c2d1b4..5cce6d0d 100644 --- a/src/ui/render/render_object.cpp +++ b/src/ui/render/render_object.cpp @@ -35,6 +35,27 @@ void RenderObject::RemoveChild(const int position) { OnRemoveChild(removed_child, position); } +Point RenderObject::GetTotalOffset() const { + Point result{}; + const RenderObject* render_object = this; + + while (render_object != nullptr) { + const auto o = render_object->GetOffset(); + result.x += o.x; + result.y += o.y; + render_object = render_object->GetParent(); + } + + return result; +} + +Point RenderObject::FromRootToContent(const Point& point) const { + const auto offset = GetTotalOffset(); + const auto rect = GetContentRect(); + return Point{point.x - (offset.x + rect.left), + point.y - (offset.y + rect.top)}; +} + void RenderObject::Measure(const Size& available_size) { OnMeasureCore(available_size); } -- cgit v1.2.3