#pragma once #include "MeasureRequirement.h" #include "RenderObject.h" #include #include #include namespace cru::ui::render { class GeometryRenderObject : public RenderObject { public: static constexpr auto kRenderObjectName = "GeometryRenderObject"; GeometryRenderObject(); public: void Draw(platform::graphics::IPainter* painter) override; RenderObject* HitTest(const Point& point) override; std::shared_ptr GetGeometry(); void SetGeometry(std::shared_ptr geometry, std::optional view_port = std::nullopt); Rect GetViewPort(); void SetViewPort(const Rect& view_port); std::shared_ptr GetFillBrush(); void SetFillBrush(std::shared_ptr brush); std::shared_ptr GetStrokeBrush(); void SetStrokeBrush(std::shared_ptr brush); float GetStrokeWidth(); void SetStrokeWidth(float width); protected: Size OnMeasureContent(const MeasureRequirement& requirement, const MeasureSize& preferred_size) override; void OnLayoutContent(const Rect& content_rect) override; Size OnMeasureContent1(const BoxConstraint& constraint) override; private: std::shared_ptr geometry_ = nullptr; Rect view_port_{}; std::shared_ptr fill_brush_ = nullptr; std::shared_ptr stroke_brush_ = nullptr; float stroke_width_ = 0; }; } // namespace cru::ui::render