aboutsummaryrefslogtreecommitdiff
path: root/src/ui/render
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/render')
-rw-r--r--src/ui/render/render_object.cpp42
-rw-r--r--src/ui/render/render_object.hpp82
2 files changed, 48 insertions, 76 deletions
diff --git a/src/ui/render/render_object.cpp b/src/ui/render/render_object.cpp
index 3e2e5265..bfa250d6 100644
--- a/src/ui/render/render_object.cpp
+++ b/src/ui/render/render_object.cpp
@@ -60,48 +60,18 @@ namespace cru::ui::render
InvalidateRenderHost();
}
- void RoundedRectangleRenderObject::SetRect(const Rect& rect)
+ namespace details
{
- const auto converted_rect = Convert(rect);
- if (rounded_rect_.rect == converted_rect)
- return;
-
- rounded_rect_.rect = converted_rect;
- InvalidateRenderHost();
- }
-
- void RoundedRectangleRenderObject::SetRadiusX(const float new_radius_x)
- {
- if (rounded_rect_.radiusX == new_radius_x)
- return;
-
- rounded_rect_.radiusX = new_radius_x;
- InvalidateRenderHost();
- }
-
- void RoundedRectangleRenderObject::SetRadiusY(const float new_radius_y)
- {
- if (rounded_rect_.radiusY == new_radius_y)
- return;
-
- rounded_rect_.radiusY = new_radius_y;
- InvalidateRenderHost();
- }
-
- void RoundedRectangleRenderObject::SetRoundedRect(const D2D1_ROUNDED_RECT& new_rounded_rect)
- {
- if (rounded_rect_ == new_rounded_rect)
- return;
-
- rounded_rect_ = new_rounded_rect;
- InvalidateRenderHost();
+ template class ShapeRenderObject<Rect>;
+ template class ShapeRenderObject<RoundedRect>;
+ template class ShapeRenderObject<Ellipse>;
}
void RoundedRectangleStrokeRenderObject::Draw(ID2D1RenderTarget* render_target)
{
const auto brush = GetBrush();
if (brush != nullptr)
- render_target->DrawRoundedRectangle(GetRoundedRect(), GetBrush().Get(), GetStrokeWidth());
+ render_target->DrawRoundedRectangle(Convert(GetShape()), GetBrush().Get(), GetStrokeWidth());
}
void CustomDrawHandlerRenderObject::SetDrawHandler(DrawHandler new_draw_handler)
@@ -110,7 +80,7 @@ namespace cru::ui::render
return;
draw_handler_ = std::move(new_draw_handler);
- InvalidateRenderHost;
+ InvalidateRenderHost();
}
void CustomDrawHandlerRenderObject::Draw(ID2D1RenderTarget* render_target)
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