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 | |
parent | 26da84f59396075118ee769654471159e1f49980 (diff) | |
download | cru-427bd31059fcdca5806a149238e91173667953c1.tar.gz cru-427bd31059fcdca5806a149238e91173667953c1.tar.bz2 cru-427bd31059fcdca5806a149238e91173667953c1.zip |
...
Diffstat (limited to 'include/cru')
-rw-r--r-- | include/cru/ui/Base.hpp | 8 | ||||
-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 |
8 files changed, 26 insertions, 29 deletions
diff --git a/include/cru/ui/Base.hpp b/include/cru/ui/Base.hpp index b9ce0c88..c59d1b60 100644 --- a/include/cru/ui/Base.hpp +++ b/include/cru/ui/Base.hpp @@ -243,18 +243,18 @@ struct BorderStyle { class CanvasPaintEventArgs { public: CanvasPaintEventArgs(platform::graph::IPainter* painter, - const Rect& paint_rect) - : painter_(painter), paint_rect_(paint_rect) {} + const Size& paint_size) + : painter_(painter), paint_size_(paint_size) {} CRU_DEFAULT_COPY(CanvasPaintEventArgs) CRU_DEFAULT_MOVE(CanvasPaintEventArgs) ~CanvasPaintEventArgs() = default; platform::graph::IPainter* GetPainter() const { return painter_; } - Rect GetPaintRect() const { return paint_rect_; } + Size GetPaintSize() const { return paint_size_; } private: platform::graph::IPainter* painter_; - Rect paint_rect_; + Size paint_size_; }; enum class FlexDirection { 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: |