From edbdf3d2a166099f5af4dd859258468288919685 Mon Sep 17 00:00:00 2001 From: crupest Date: Wed, 12 Dec 2018 00:40:57 +0800 Subject: ... --- src/ui/render/render_object.cpp | 42 +++------------------ src/ui/render/render_object.hpp | 82 +++++++++++++++++++++-------------------- 2 files changed, 48 insertions(+), 76 deletions(-) (limited to 'src/ui/render') 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; + template class ShapeRenderObject; + template class ShapeRenderObject; } 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 + 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; + extern template class ShapeRenderObject; + extern template class ShapeRenderObject; + } + + + using RectangleRenderObject = details::ShapeRenderObject; + using RoundedRectangleRenderObject = details::ShapeRenderObject; + using EllipseRenderObject = details::ShapeRenderObject; class RoundedRectangleStrokeRenderObject final : public StrokeRenderObject, public RoundedRectangleRenderObject -- cgit v1.2.3