diff options
Diffstat (limited to 'include/cru/ui/render/CanvasRenderObject.h')
-rw-r--r-- | include/cru/ui/render/CanvasRenderObject.h | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/include/cru/ui/render/CanvasRenderObject.h b/include/cru/ui/render/CanvasRenderObject.h new file mode 100644 index 00000000..ca55ebc6 --- /dev/null +++ b/include/cru/ui/render/CanvasRenderObject.h @@ -0,0 +1,36 @@ +#pragma once +#include "RenderObject.h" + +namespace cru::ui::render { +// Layout logic: +// If no preferred size is set. Then (100, 100) is used and then coerced to +// required range. +class CRU_UI_API CanvasRenderObject : public RenderObject { + public: + CanvasRenderObject(); + + CRU_DELETE_COPY(CanvasRenderObject) + CRU_DELETE_MOVE(CanvasRenderObject) + + ~CanvasRenderObject(); + + public: + RenderObject* HitTest(const Point& point) override; + + Size GetDesiredSize() const { return desired_size_; } + + IEvent<CanvasPaintEventArgs>* PaintEvent() { return &paint_event_; } + + protected: + void OnDrawContent(platform::graphics::IPainter* painter) override; + + Size OnMeasureContent(const MeasureRequirement& requirement, + const MeasureSize& preferred_size) override; + void OnLayoutContent(const Rect& content_rect) override; + + private: + Size desired_size_{}; + + Event<CanvasPaintEventArgs> paint_event_; +}; +} // namespace cru::ui::render |