From 47053829c322c43032244937cb63f9da178b852d Mon Sep 17 00:00:00 2001 From: crupest Date: Tue, 3 Mar 2020 20:22:36 +0800 Subject: Write canvas render object layout logic. --- include/cru/ui/render/canvas_render_object.hpp | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'include/cru/ui/render/canvas_render_object.hpp') diff --git a/include/cru/ui/render/canvas_render_object.hpp b/include/cru/ui/render/canvas_render_object.hpp index 5fea8755..e3388014 100644 --- a/include/cru/ui/render/canvas_render_object.hpp +++ b/include/cru/ui/render/canvas_render_object.hpp @@ -21,6 +21,9 @@ class CanvasPaintEventArgs { Rect paint_rect_; }; +// The measure logic for `CanvasRenderObject` is that you set a desired size by +// `SetDesiredSize` (not `SetPreferredSize`) and it will compare desired size +// and available size and use the smaller one (by `Min`). class CanvasRenderObject : public RenderObject { public: CanvasRenderObject(); @@ -35,6 +38,12 @@ class CanvasRenderObject : public RenderObject { RenderObject* HitTest(const Point& point) override; + Size GetDesiredSize() const { return desired_size_; } + + // Set the desired size. This is the content size excluding padding and + // margin. + void SetDesiredSize(const Size& new_size) { desired_size_ = new_size; } + IEvent* PaintEvent() { return &paint_event_; } protected: @@ -42,6 +51,8 @@ class CanvasRenderObject : public RenderObject { void OnLayoutContent(const Rect& content_rect) override; private: + Size desired_size_{}; + Event paint_event_; }; } // namespace cru::ui::render -- cgit v1.2.3