diff options
Diffstat (limited to 'src/ui/render/render_object.hpp')
-rw-r--r-- | src/ui/render/render_object.hpp | 82 |
1 files changed, 42 insertions, 40 deletions
diff --git a/src/ui/render/render_object.hpp b/src/ui/render/render_object.hpp index b6f9f13b..0fbeb8c7 100644 --- a/src/ui/render/render_object.hpp +++ b/src/ui/render/render_object.hpp @@ -119,48 +119,50 @@ namespace cru::ui::render }; - class RoundedRectangleRenderObject : public virtual RenderObject + namespace details { - protected: - RoundedRectangleRenderObject() = default; - public: - RoundedRectangleRenderObject(const RoundedRectangleRenderObject& other) = delete; - RoundedRectangleRenderObject(RoundedRectangleRenderObject&& other) = delete; - RoundedRectangleRenderObject& operator=(const RoundedRectangleRenderObject& other) = delete; - RoundedRectangleRenderObject& operator=(RoundedRectangleRenderObject&& other) = delete; - ~RoundedRectangleRenderObject() override = default; - - Rect GetRect() const - { - return Convert(rounded_rect_.rect); - } - - void SetRect(const Rect& rect); - - float GetRadiusX() const - { - return rounded_rect_.radiusX; - } - - void SetRadiusX(float new_radius_x); - - float GetRadiusY() const - { - return rounded_rect_.radiusY; - } - - void SetRadiusY(float new_radius_y); - - D2D1_ROUNDED_RECT GetRoundedRect() const + template <typename TShapeType> + class ShapeRenderObject : public virtual RenderObject { - return rounded_rect_; - } - - void SetRoundedRect(const D2D1_ROUNDED_RECT& new_rounded_rect); - - private: - D2D1_ROUNDED_RECT rounded_rect_ = D2D1::RoundedRect(D2D1::RectF(), 0.0f, 0.0f); - }; + public: + using ShapeType = TShapeType; + protected: + ShapeRenderObject() = default; + public: + ShapeRenderObject(const ShapeRenderObject& other) = delete; + ShapeRenderObject& operator=(const ShapeRenderObject& other) = delete; + ShapeRenderObject(ShapeRenderObject&& other) = delete; + ShapeRenderObject& operator=(ShapeRenderObject&& other) = delete; + ~ShapeRenderObject() override = default; + + ShapeType GetShape() const + { + return shape_; + } + + void SetShape(const ShapeType& new_shape) + { + if (new_shape == shape_) + return; + + shape_ = new_shape; + InvalidateRenderHost(); + } + + private: + ShapeType shape_; + }; + + + extern template class ShapeRenderObject<Rect>; + extern template class ShapeRenderObject<RoundedRect>; + extern template class ShapeRenderObject<Ellipse>; + } + + + using RectangleRenderObject = details::ShapeRenderObject<Rect>; + using RoundedRectangleRenderObject = details::ShapeRenderObject<RoundedRect>; + using EllipseRenderObject = details::ShapeRenderObject<Ellipse>; class RoundedRectangleStrokeRenderObject final : public StrokeRenderObject, public RoundedRectangleRenderObject |