From 4ea8be24492f58564ff1b1efe9f7c4673078bcbc Mon Sep 17 00:00:00 2001 From: crupest Date: Tue, 2 Apr 2019 21:01:16 +0800 Subject: ... --- include/cru/platform/painter_util.hpp | 8 ++++++-- include/cru/ui/render/border_render_object.hpp | 25 +++++++++++++++---------- 2 files changed, 21 insertions(+), 12 deletions(-) (limited to 'include') diff --git a/include/cru/platform/painter_util.hpp b/include/cru/platform/painter_util.hpp index fed0c487..5711d099 100644 --- a/include/cru/platform/painter_util.hpp +++ b/include/cru/platform/painter_util.hpp @@ -2,13 +2,17 @@ #include "painter.hpp" #include +#include namespace cru::platform::util { +template inline void WithTransform(Painter* painter, const Matrix& matrix, - const std::function& action) { + const Fn& action) { + static_assert(std::is_invocable_v, + "Action must can be be invoked with painter."); const auto old = painter->GetTransform(); painter->SetTransform(old * matrix); action(painter); painter->SetTransform(old); } -} +} // namespace cru::platform::util diff --git a/include/cru/ui/render/border_render_object.hpp b/include/cru/ui/render/border_render_object.hpp index a96ccf99..35b98948 100644 --- a/include/cru/ui/render/border_render_object.hpp +++ b/include/cru/ui/render/border_render_object.hpp @@ -1,9 +1,12 @@ #pragma once #include "render_object.hpp" +#include + namespace cru::platform { struct Brush; -} +struct Geometry; +} // namespace cru::platform namespace cru::ui::render { struct CornerRadius { @@ -29,18 +32,20 @@ struct CornerRadius { class BorderRenderObject : public RenderObject { public: - explicit BorderRenderObject(platform::Brush* brush); + explicit BorderRenderObject(std::shared_ptr brush); BorderRenderObject(const BorderRenderObject& other) = delete; BorderRenderObject(BorderRenderObject&& other) = delete; BorderRenderObject& operator=(const BorderRenderObject& other) = delete; BorderRenderObject& operator=(BorderRenderObject&& other) = delete; - ~BorderRenderObject() override; + ~BorderRenderObject() override = default; bool IsEnabled() const { return is_enabled_; } void SetEnabled(bool enabled) { is_enabled_ = enabled; } - ID2D1Brush* GetBrush() const { return border_brush_; } - void SetBrush(ID2D1Brush* new_brush); + std::shared_ptr GetBrush() const { return border_brush_; } + void SetBrush(std::shared_ptr new_brush) { + border_brush_ = std::move(new_brush); + } Thickness GetBorderWidth() const { return border_thickness_; } void SetBorderWidth(const Thickness& thickness) { @@ -54,7 +59,7 @@ class BorderRenderObject : public RenderObject { void Refresh() { RecreateGeometry(); } - void Draw(ID2D1RenderTarget* render_target) override; + void Draw(platform::Painter* painter) override; RenderObject* HitTest(const Point& point) override; @@ -78,11 +83,11 @@ class BorderRenderObject : public RenderObject { private: bool is_enabled_ = false; - ID2D1Brush* border_brush_ = nullptr; - Thickness border_thickness_ = Thickness::Zero(); + std::shared_ptr border_brush_ = nullptr; + Thickness border_thickness_{}; CornerRadius corner_radius_{}; - ID2D1Geometry* geometry_ = nullptr; - ID2D1Geometry* border_outer_geometry_ = nullptr; + std::shared_ptr geometry_ = nullptr; + std::shared_ptr border_outer_geometry_ = nullptr; }; } // namespace cru::ui::render -- cgit v1.2.3