diff options
author | crupest <crupest@outlook.com> | 2020-06-28 22:17:14 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2020-06-28 22:17:14 +0800 |
commit | 427bd31059fcdca5806a149238e91173667953c1 (patch) | |
tree | dec0794e8445040f8b177aaa29e0600380e5420f /include/cru/ui/render | |
parent | 26da84f59396075118ee769654471159e1f49980 (diff) | |
download | cru-427bd31059fcdca5806a149238e91173667953c1.tar.gz cru-427bd31059fcdca5806a149238e91173667953c1.tar.bz2 cru-427bd31059fcdca5806a149238e91173667953c1.zip |
...
Diffstat (limited to 'include/cru/ui/render')
-rw-r--r-- | include/cru/ui/render/BorderRenderObject.hpp | 4 | ||||
-rw-r--r-- | include/cru/ui/render/CanvasRenderObject.hpp | 4 | ||||
-rw-r--r-- | include/cru/ui/render/LayoutRenderObject.hpp | 13 | ||||
-rw-r--r-- | include/cru/ui/render/RenderObject.hpp | 13 | ||||
-rw-r--r-- | include/cru/ui/render/ScrollRenderObject.hpp | 7 | ||||
-rw-r--r-- | include/cru/ui/render/TextRenderObject.hpp | 4 | ||||
-rw-r--r-- | include/cru/ui/render/WindowRenderObject.hpp | 2 |
7 files changed, 22 insertions, 25 deletions
diff --git a/include/cru/ui/render/BorderRenderObject.hpp b/include/cru/ui/render/BorderRenderObject.hpp index 6c33473a..db989453 100644 --- a/include/cru/ui/render/BorderRenderObject.hpp +++ b/include/cru/ui/render/BorderRenderObject.hpp @@ -62,11 +62,11 @@ class BorderRenderObject : public RenderObject { void SetBorderStyle(const BorderStyle& style); - void Draw(platform::graph::IPainter* painter) override; - RenderObject* HitTest(const Point& point) override; protected: + void OnDrawCore(platform::graph::IPainter* painter) override; + Size OnMeasureCore(const MeasureRequirement& requirement, const MeasureSize& preferred_size) override; void OnLayoutCore() override; diff --git a/include/cru/ui/render/CanvasRenderObject.hpp b/include/cru/ui/render/CanvasRenderObject.hpp index 323b4800..3216f08c 100644 --- a/include/cru/ui/render/CanvasRenderObject.hpp +++ b/include/cru/ui/render/CanvasRenderObject.hpp @@ -15,8 +15,6 @@ class CanvasRenderObject : public RenderObject { ~CanvasRenderObject(); public: - void Draw(platform::graph::IPainter* painter) override; - RenderObject* HitTest(const Point& point) override; Size GetDesiredSize() const { return desired_size_; } @@ -24,6 +22,8 @@ class CanvasRenderObject : public RenderObject { IEvent<CanvasPaintEventArgs>* PaintEvent() { return &paint_event_; } protected: + void OnDrawContent(platform::graph::IPainter* painter) override; + Size OnMeasureContent(const MeasureRequirement& requirement, const MeasureSize& preferred_size) override; void OnLayoutContent(const Rect& content_rect) override; diff --git a/include/cru/ui/render/LayoutRenderObject.hpp b/include/cru/ui/render/LayoutRenderObject.hpp index 1eb9a816..b46ba0d0 100644 --- a/include/cru/ui/render/LayoutRenderObject.hpp +++ b/include/cru/ui/render/LayoutRenderObject.hpp @@ -35,8 +35,6 @@ class LayoutRenderObject : public RenderObject { return this->child_layout_data_[position]; } - void Draw(platform::graph::IPainter* painter) override; - RenderObject* HitTest(const Point& point) override; protected: @@ -48,17 +46,6 @@ class LayoutRenderObject : public RenderObject { }; template <typename TChildLayoutData> -void LayoutRenderObject<TChildLayoutData>::Draw( - platform::graph::IPainter* painter) { - for (const auto child : GetChildren()) { - auto offset = child->GetOffset(); - platform::graph::util::WithTransform( - painter, platform::Matrix::Translation(offset.x, offset.y), - [child](auto p) { child->Draw(p); }); - } -} - -template <typename TChildLayoutData> RenderObject* LayoutRenderObject<TChildLayoutData>::HitTest( const Point& point) { const auto& children = GetChildren(); diff --git a/include/cru/ui/render/RenderObject.hpp b/include/cru/ui/render/RenderObject.hpp index 09f140db..2d9cd817 100644 --- a/include/cru/ui/render/RenderObject.hpp +++ b/include/cru/ui/render/RenderObject.hpp @@ -121,7 +121,7 @@ class RenderObject : public Object { // This will set offset of this render object and call OnLayoutCore. void Layout(const Point& offset); - virtual void Draw(platform::graph::IPainter* painter) = 0; + void Draw(platform::graph::IPainter* painter); // Param point must be relative the lefttop of render object including margin. // Add offset before pass point to children. @@ -145,6 +145,17 @@ class RenderObject : public Object { // default is to invalidate both layout and paint virtual void OnRemoveChild(RenderObject* removed_child, Index position); + // Draw all children with offset. + void DefaultDrawChildren(platform::graph::IPainter* painter); + + // Draw all children with translation of content rect lefttop. + void DefaultDrawContent(platform::graph::IPainter* painter); + + // Call DefaultDrawContent. Then call DefaultDrawChildren. + virtual void OnDrawCore(platform::graph::IPainter* painter); + + virtual void OnDrawContent(platform::graph::IPainter* painter); + // Size measure including margin and padding. Please reduce margin and padding // or other custom things and pass the result content measure requirement and // preferred size to OnMeasureContent. Return value must not be negative and diff --git a/include/cru/ui/render/ScrollRenderObject.hpp b/include/cru/ui/render/ScrollRenderObject.hpp index 9799c0d9..43e6d7f9 100644 --- a/include/cru/ui/render/ScrollRenderObject.hpp +++ b/include/cru/ui/render/ScrollRenderObject.hpp @@ -13,8 +13,6 @@ class ScrollRenderObject : public RenderObject { ~ScrollRenderObject() override = default; - void Draw(platform::graph::IPainter* painter) override; - RenderObject* HitTest(const Point& point) override; // Return the coerced scroll offset. @@ -23,11 +21,14 @@ class ScrollRenderObject : public RenderObject { Point GetRawScrollOffset() const { return scroll_offset_; } protected: + void OnDrawCore(platform::graph::IPainter* painter) override; + // Logic: // If available size is bigger than child's preferred size, then child's // preferred size is taken. // If not, all available size is taken while forming a scroll area. - Size OnMeasureContent(const MeasureRequirement& requirement, const MeasureSize& preferred_size) override; + Size OnMeasureContent(const MeasureRequirement& requirement, + const MeasureSize& preferred_size) override; void OnLayoutContent(const Rect& content_rect) override; private: diff --git a/include/cru/ui/render/TextRenderObject.hpp b/include/cru/ui/render/TextRenderObject.hpp index efa8c2b8..26c8db40 100644 --- a/include/cru/ui/render/TextRenderObject.hpp +++ b/include/cru/ui/render/TextRenderObject.hpp @@ -72,11 +72,11 @@ class TextRenderObject : public RenderObject { float GetCaretWidth() const { return caret_width_; } void SetCaretWidth(float width); - void Draw(platform::graph::IPainter* painter) override; - RenderObject* HitTest(const Point& point) override; protected: + void OnDrawContent(platform::graph::IPainter* painter) override; + // See remarks of this class. Size OnMeasureContent(const MeasureRequirement& requirement, const MeasureSize& preferred_size) override; diff --git a/include/cru/ui/render/WindowRenderObject.hpp b/include/cru/ui/render/WindowRenderObject.hpp index d64a216d..4c254f42 100644 --- a/include/cru/ui/render/WindowRenderObject.hpp +++ b/include/cru/ui/render/WindowRenderObject.hpp @@ -11,8 +11,6 @@ class WindowRenderObject : public RenderObject { WindowRenderObject& operator=(WindowRenderObject&& other) = delete; ~WindowRenderObject() override = default; - void Draw(platform::graph::IPainter* painter) override; - RenderObject* HitTest(const Point& point) override; protected: |