diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/cru/ui/render/canvas_render_object.hpp | 43 | ||||
-rw-r--r-- | include/cru/ui/render/render_object.hpp | 1 |
2 files changed, 44 insertions, 0 deletions
diff --git a/include/cru/ui/render/canvas_render_object.hpp b/include/cru/ui/render/canvas_render_object.hpp new file mode 100644 index 00000000..fea68576 --- /dev/null +++ b/include/cru/ui/render/canvas_render_object.hpp @@ -0,0 +1,43 @@ +#pragma once +#include "render_object.hpp" + +#include "cru/common/event.hpp" + +namespace cru::ui::render { +class CanvasPaintEventArgs { + public: + CanvasPaintEventArgs(platform::graph::IPainter* painter, + const Rect& paint_rect) + : painter_(painter), paint_rect_(paint_rect) {} + CRU_DEFAULT_COPY(CanvasPaintEventArgs) + CRU_DEFAULT_MOVE(CanvasPaintEventArgs) + ~CanvasPaintEventArgs() = default; + + platform::graph::IPainter* GetPainter() const { return painter_; } + Rect GetPaintRect() const { return paint_rect_; } + + private: + platform::graph::IPainter* painter_; + Rect paint_rect_; +}; + +class CanvasRenderObject : public RenderObject { + public: + CanvasRenderObject(); + + CRU_DELETE_COPY(CanvasRenderObject) + CRU_DELETE_MOVE(CanvasRenderObject) + + ~CanvasRenderObject(); + + public: + void Draw(platform::graph::IPainter* painter) override; + + RenderObject* HitTest(const Point& point) override; + + IEvent<CanvasPaintEventArgs>* PaintEvent() { return &paint_event_; } + + private: + Event<CanvasPaintEventArgs> paint_event_; +}; +} // namespace cru::ui::render diff --git a/include/cru/ui/render/render_object.hpp b/include/cru/ui/render/render_object.hpp index 73543aa3..b0a65819 100644 --- a/include/cru/ui/render/render_object.hpp +++ b/include/cru/ui/render/render_object.hpp @@ -116,6 +116,7 @@ class RenderObject : public Object { virtual void OnAfterLayout(); static void NotifyAfterLayoutRecursive(RenderObject* render_object); + Rect GetPaddingRect() const; Rect GetContentRect() const; private: |