diff options
author | 杨宇千 <crupest@outlook.com> | 2019-09-15 17:06:34 +0800 |
---|---|---|
committer | 杨宇千 <crupest@outlook.com> | 2019-09-15 17:06:34 +0800 |
commit | 574e69fb379cd54fc3034fe45a155e770435b97d (patch) | |
tree | 96fab3a1db66fa974a135e777778e56a861745bc /include/cru/ui/render/border_render_object.hpp | |
parent | 55d98d3259e9f3e184ad6323d1d49d298bd1723b (diff) | |
download | cru-574e69fb379cd54fc3034fe45a155e770435b97d.tar.gz cru-574e69fb379cd54fc3034fe45a155e770435b97d.tar.bz2 cru-574e69fb379cd54fc3034fe45a155e770435b97d.zip |
...
Diffstat (limited to 'include/cru/ui/render/border_render_object.hpp')
-rw-r--r-- | include/cru/ui/render/border_render_object.hpp | 55 |
1 files changed, 26 insertions, 29 deletions
diff --git a/include/cru/ui/render/border_render_object.hpp b/include/cru/ui/render/border_render_object.hpp index 69372eb8..5c147df5 100644 --- a/include/cru/ui/render/border_render_object.hpp +++ b/include/cru/ui/render/border_render_object.hpp @@ -33,48 +33,41 @@ struct CornerRadius { }; struct BorderStyle { - std::shared_ptr<platform::graph::Brush> brush; - Thickness thickness; - CornerRadius corner_radius; + std::shared_ptr<platform::graph::Brush> brush{}; + Thickness thickness{}; + CornerRadius corner_radius{}; }; class BorderRenderObject : public RenderObject { public: - explicit BorderRenderObject(std::shared_ptr<platform::graph::Brush> brush); + BorderRenderObject(); BorderRenderObject(const BorderRenderObject& other) = delete; BorderRenderObject(BorderRenderObject&& other) = delete; BorderRenderObject& operator=(const BorderRenderObject& other) = delete; BorderRenderObject& operator=(BorderRenderObject&& other) = delete; - ~BorderRenderObject() override = default; + ~BorderRenderObject() override; - bool IsEnabled() const { return is_enabled_; } - void SetEnabled(bool enabled) { is_enabled_ = enabled; } + bool IsBorderEnabled() const { return is_border_enabled_; } + void SetBorderEnabled(bool enabled) { is_border_enabled_ = enabled; } - std::shared_ptr<platform::graph::Brush> GetBrush() const { - return style_.brush; - } - void SetBrush(std::shared_ptr<platform::graph::Brush> new_brush) { - style_.brush = std::move(new_brush); + BorderStyle* GetBorderStyle() { + return &border_style_; } - Thickness GetBorderWidth() const { return style_.thickness; } - // Remember to call Refresh after set shape properties. - void SetBorderWidth(const Thickness& thickness) { - style_.thickness = thickness; + std::shared_ptr<platform::graph::Brush> GetForegroundBrush() { + return foreground_brush_; } - CornerRadius GetCornerRadius() const { return style_.corner_radius; } - // Remember to call Refresh after set shape properties. - void SetCornerRadius(const CornerRadius& new_corner_radius) { - style_.corner_radius = new_corner_radius; + void SetForegroundBrush(std::shared_ptr<platform::graph::Brush> brush) { + foreground_brush_ = std::move(brush); } - BorderStyle GetStyle() const { - return style_; + std::shared_ptr<platform::graph::Brush> GetBackgroundBrush() { + return foreground_brush_; } - // Remember to call Refresh after set shape properties. - void SetStyle(BorderStyle newStyle) { - style_ = std::move(newStyle); + + void SetBackgroundBrush(std::shared_ptr<platform::graph::Brush> brush) { + foreground_brush_ = std::move(brush); } void Refresh() { RecreateGeometry(); } @@ -101,13 +94,17 @@ class BorderRenderObject : public RenderObject { void RecreateGeometry(); private: - bool is_enabled_ = false; + bool is_border_enabled_ = false; + BorderStyle border_style_; - BorderStyle style_; + std::shared_ptr<platform::graph::Brush> foreground_brush_; + std::shared_ptr<platform::graph::Brush> background_brush_; // The ring. Used for painting. - std::shared_ptr<platform::graph::Geometry> geometry_ = nullptr; + std::unique_ptr<platform::graph::Geometry> geometry_; + // Area including inner area of the border. Used for painting foreground and background. + std::unique_ptr<platform::graph::Geometry> border_inner_geometry_; // Area including border ring and inner area. Used for hit test. - std::shared_ptr<platform::graph::Geometry> border_outer_geometry_ = nullptr; + std::unique_ptr<platform::graph::Geometry> border_outer_geometry_; }; } // namespace cru::ui::render |