diff options
Diffstat (limited to 'include/cru/ui/render')
-rw-r--r-- | include/cru/ui/render/BorderRenderObject.h | 3 | ||||
-rw-r--r-- | include/cru/ui/render/GeometryRenderObject.h | 50 | ||||
-rw-r--r-- | include/cru/ui/render/RenderObject.h | 9 |
3 files changed, 58 insertions, 4 deletions
diff --git a/include/cru/ui/render/BorderRenderObject.h b/include/cru/ui/render/BorderRenderObject.h index a71cd6a0..8de0eea3 100644 --- a/include/cru/ui/render/BorderRenderObject.h +++ b/include/cru/ui/render/BorderRenderObject.h @@ -44,7 +44,8 @@ class CRU_UI_API BorderRenderObject : public SingleChildRenderObject { RenderObject* HitTest(const Point& point) override; void Draw(platform::graphics::IPainter* painter) override; - Thickness GetOuterSpaceThickness() const override; + Thickness GetTotalSpaceThickness() const override; + Thickness GetInnerSpaceThickness() const override; Rect GetPaddingRect() const override; Rect GetContentRect() const override; diff --git a/include/cru/ui/render/GeometryRenderObject.h b/include/cru/ui/render/GeometryRenderObject.h new file mode 100644 index 00000000..6c5702ae --- /dev/null +++ b/include/cru/ui/render/GeometryRenderObject.h @@ -0,0 +1,50 @@ +#pragma once +#include "RenderObject.h" +#include "cru/platform/graphics/Brush.h" +#include "cru/platform/graphics/Geometry.h" + +#include <optional> + +namespace cru::ui::render { +class GeometryRenderObject : public RenderObject { + public: + GeometryRenderObject(); + + CRU_DELETE_COPY(GeometryRenderObject) + CRU_DELETE_MOVE(GeometryRenderObject) + + ~GeometryRenderObject() override; + + public: + void Draw(platform::graphics::IPainter* painter) override; + RenderObject* HitTest(const Point& point) override; + + std::shared_ptr<platform::graphics::IGeometry> GetGeometry() const; + void SetGeometry(std::shared_ptr<platform::graphics::IGeometry> geometry, + std::optional<Rect> view_port = std::nullopt); + + Rect GetViewPort() const; + void SetViewPort(const Rect& view_port); + + std::shared_ptr<platform::graphics::IBrush> GetFillBrush() const; + void SetFillBrush(std::shared_ptr<platform::graphics::IBrush> brush); + + std::shared_ptr<platform::graphics::IBrush> GetStrokeBrush() const; + void SetStrokeBrush(std::shared_ptr<platform::graphics::IBrush> brush); + + float GetStrokeWidth() const; + void SetStrokeWidth(float width); + + protected: + Size OnMeasureContent(const MeasureRequirement& requirement, + const MeasureSize& preferred_size) override; + void OnLayoutContent(const Rect& content_rect) override; + + private: + std::shared_ptr<platform::graphics::IGeometry> geometry_ = nullptr; + Rect view_port_{}; + std::shared_ptr<platform::graphics::IBrush> fill_brush_ = nullptr; + std::shared_ptr<platform::graphics::IBrush> stroke_brush_ = nullptr; + float stroke_width_ = 0; +}; +} // namespace cru::ui::render diff --git a/include/cru/ui/render/RenderObject.h b/include/cru/ui/render/RenderObject.h index e8dc3b17..9f2b69d9 100644 --- a/include/cru/ui/render/RenderObject.h +++ b/include/cru/ui/render/RenderObject.h @@ -32,8 +32,9 @@ namespace cru::ui::render { * void Draw(platform::graphics::IPainter* painter) override; * RenderObject* HitTest(const Point& point) override; * protected: - * Size OnMeasureContent(const MeasureRequirement& requirement) override; - * void OnLayoutContent(const Rect& content_rect) override; + * Size OnMeasureContent(const MeasureRequirement& requirement, const + * MeasureSize& preferred_size) override; void OnLayoutContent(const Rect& + * content_rect) override; */ class CRU_UI_API RenderObject : public Object { CRU_DEFINE_CLASS_LOG_TAG(u"RenderObject") @@ -93,7 +94,9 @@ class CRU_UI_API RenderObject : public Object { // This will set offset of this render object and call OnLayoutCore. void Layout(const Point& offset); - virtual Thickness GetOuterSpaceThickness() const; + virtual Thickness GetTotalSpaceThickness() const; + virtual Thickness GetInnerSpaceThickness() const; + virtual Rect GetPaddingRect() const; virtual Rect GetContentRect() const; |