aboutsummaryrefslogtreecommitdiff
path: root/src/ui/render/render_object.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/render/render_object.hpp')
-rw-r--r--src/ui/render/render_object.hpp82
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