aboutsummaryrefslogtreecommitdiff
path: root/include/cru/ui/render
diff options
context:
space:
mode:
Diffstat (limited to 'include/cru/ui/render')
-rw-r--r--include/cru/ui/render/BorderRenderObject.hpp4
-rw-r--r--include/cru/ui/render/CanvasRenderObject.hpp4
-rw-r--r--include/cru/ui/render/LayoutRenderObject.hpp13
-rw-r--r--include/cru/ui/render/RenderObject.hpp13
-rw-r--r--include/cru/ui/render/ScrollRenderObject.hpp7
-rw-r--r--include/cru/ui/render/TextRenderObject.hpp4
-rw-r--r--include/cru/ui/render/WindowRenderObject.hpp2
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: