diff options
| author | crupest <crupest@outlook.com> | 2020-03-03 23:36:45 +0800 |
|---|---|---|
| committer | crupest <crupest@outlook.com> | 2020-03-03 23:36:45 +0800 |
| commit | 0dcf8e686b93cca54a424affe0455d0a97d6c2ef (patch) | |
| tree | 744897a3b6a29f6142f1943dab5d9957e670919b /src/ui/render | |
| parent | 47053829c322c43032244937cb63f9da178b852d (diff) | |
| download | cru-0dcf8e686b93cca54a424affe0455d0a97d6c2ef.tar.gz cru-0dcf8e686b93cca54a424affe0455d0a97d6c2ef.tar.bz2 cru-0dcf8e686b93cca54a424affe0455d0a97d6c2ef.zip | |
...
Diffstat (limited to 'src/ui/render')
| -rw-r--r-- | src/ui/render/render_object.cpp | 21 | ||||
| -rw-r--r-- | src/ui/render/text_render_object.cpp | 13 |
2 files changed, 34 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); } diff --git a/src/ui/render/text_render_object.cpp b/src/ui/render/text_render_object.cpp index 6048f731..d14a46e2 100644 --- a/src/ui/render/text_render_object.cpp +++ b/src/ui/render/text_render_object.cpp @@ -47,6 +47,19 @@ void TextRenderObject::SetFont(std::shared_ptr<platform::graph::IFont> font) { text_layout_->SetFont(std::move(font)); } +std::vector<Rect> TextRenderObject::TextRangeRect(const TextRange& text_range) { + return text_layout_->TextRangeRect(text_range); +} + +Point TextRenderObject::TextSingleRect(int position, bool trailing) { + return text_layout_->TextSingleRect(position, trailing); +} + +platform::graph::TextHitTestResult TextRenderObject::TextHitTest( + const Point& point) { + return text_layout_->HitTest(point); +} + void TextRenderObject::Draw(platform::graph::IPainter* painter) { platform::graph::util::WithTransform( painter, |
