aboutsummaryrefslogtreecommitdiff
path: root/include/cru/ui
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2020-03-03 00:02:12 +0800
committercrupest <crupest@outlook.com>2020-03-03 00:02:12 +0800
commitebb8f7beba71fc0d3cd81f60559e4005e05e48d5 (patch)
tree82c565e00279b3c4a9df213ec2a41ab3ccb4529a /include/cru/ui
parente429ec11ebfcc5ce858d375d31a08285c8b30695 (diff)
downloadcru-ebb8f7beba71fc0d3cd81f60559e4005e05e48d5.tar.gz
cru-ebb8f7beba71fc0d3cd81f60559e4005e05e48d5.tar.bz2
cru-ebb8f7beba71fc0d3cd81f60559e4005e05e48d5.zip
Add canvas render object.
Diffstat (limited to 'include/cru/ui')
-rw-r--r--include/cru/ui/render/canvas_render_object.hpp43
-rw-r--r--include/cru/ui/render/render_object.hpp1
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: