aboutsummaryrefslogtreecommitdiff
path: root/src/ui/render/render_object.cpp
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2020-03-03 23:36:45 +0800
committercrupest <crupest@outlook.com>2020-03-03 23:36:45 +0800
commit0dcf8e686b93cca54a424affe0455d0a97d6c2ef (patch)
tree744897a3b6a29f6142f1943dab5d9957e670919b /src/ui/render/render_object.cpp
parent47053829c322c43032244937cb63f9da178b852d (diff)
downloadcru-0dcf8e686b93cca54a424affe0455d0a97d6c2ef.tar.gz
cru-0dcf8e686b93cca54a424affe0455d0a97d6c2ef.tar.bz2
cru-0dcf8e686b93cca54a424affe0455d0a97d6c2ef.zip
...
Diffstat (limited to 'src/ui/render/render_object.cpp')
-rw-r--r--src/ui/render/render_object.cpp21
1 files changed, 21 insertions, 0 deletions
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);
}