aboutsummaryrefslogtreecommitdiff
path: root/src/ui/render/render_object.hpp
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2018-12-10 23:29:54 +0800
committercrupest <crupest@outlook.com>2018-12-10 23:29:54 +0800
commit769a4db24b64a2baf20960858ae24461328e5b7a (patch)
treeffdd7e84d820dae71fe2af801d5f8d57e93072b1 /src/ui/render/render_object.hpp
parent4219992207b524e23a426e753589001b6f7a24d0 (diff)
downloadcru-769a4db24b64a2baf20960858ae24461328e5b7a.tar.gz
cru-769a4db24b64a2baf20960858ae24461328e5b7a.tar.bz2
cru-769a4db24b64a2baf20960858ae24461328e5b7a.zip
...
Diffstat (limited to 'src/ui/render/render_object.hpp')
-rw-r--r--src/ui/render/render_object.hpp164
1 files changed, 154 insertions, 10 deletions
diff --git a/src/ui/render/render_object.hpp b/src/ui/render/render_object.hpp
index 675a1759..6603728d 100644
--- a/src/ui/render/render_object.hpp
+++ b/src/ui/render/render_object.hpp
@@ -7,6 +7,7 @@
#include "base.hpp"
#include "ui/ui_base.hpp"
+#include "ui/d2d_util.hpp"
namespace cru::ui::render
{
@@ -193,11 +194,154 @@ namespace cru::ui::render
float offset_y_;
};
- class BorderRenderObject; //TODO!
- class FillGeometryRenderObject; //TODO!
+ class StrokeRenderObject : public virtual RenderObject
+ {
+ protected:
+ StrokeRenderObject() = default;
+ public:
+ StrokeRenderObject(const StrokeRenderObject& other) = delete;
+ StrokeRenderObject(StrokeRenderObject&& other) = delete;
+ StrokeRenderObject& operator=(const StrokeRenderObject& other) = delete;
+ StrokeRenderObject& operator=(StrokeRenderObject&& other) = delete;
+ ~StrokeRenderObject() override = default;
+
+ float GetStrokeWidth() const
+ {
+ return stroke_width_;
+ }
+
+ void SetStrokeWidth(float new_stroke_width);
+
+ Microsoft::WRL::ComPtr<ID2D1Brush> GetBrush() const
+ {
+ return brush_;
+ }
+
+ void SetBrush(Microsoft::WRL::ComPtr<ID2D1Brush> new_brush);
+
+ Microsoft::WRL::ComPtr<ID2D1StrokeStyle> GetStrokeStyle() const
+ {
+ return stroke_style_;
+ }
+
+ void SetStrokeStyle(Microsoft::WRL::ComPtr<ID2D1StrokeStyle> new_stroke_style);
+
+ private:
+ float stroke_width_ = 1.0f;
+ Microsoft::WRL::ComPtr<ID2D1Brush> brush_ = nullptr;
+ Microsoft::WRL::ComPtr<ID2D1StrokeStyle> stroke_style_ = nullptr;
+ };
+
+
+ class FillRenderObject : public virtual RenderObject
+ {
+ protected:
+ FillRenderObject() = default;
+ public:
+ FillRenderObject(const FillRenderObject& other) = delete;
+ FillRenderObject(FillRenderObject&& other) = delete;
+ FillRenderObject& operator=(const FillRenderObject& other) = delete;
+ FillRenderObject& operator=(FillRenderObject&& other) = delete;
+ ~FillRenderObject() override = default;
+
+ Microsoft::WRL::ComPtr<ID2D1Brush> GetBrush() const
+ {
+ return brush_;
+ }
+
+ void SetBrush(Microsoft::WRL::ComPtr<ID2D1Brush> new_brush);
+
+ private:
+ Microsoft::WRL::ComPtr<ID2D1Brush> brush_ = nullptr;
+ };
+
+
+ class RoundedRectangleRenderObject : public virtual RenderObject
+ {
+ 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
+ {
+ 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);
+ };
+
+
+ class RoundedRectangleStrokeRenderObject final : public StrokeRenderObject, public RoundedRectangleRenderObject
+ {
+ public:
+ RoundedRectangleStrokeRenderObject() = default;
+ RoundedRectangleStrokeRenderObject(const RoundedRectangleStrokeRenderObject& other) = delete;
+ RoundedRectangleStrokeRenderObject(RoundedRectangleStrokeRenderObject&& other) = delete;
+ RoundedRectangleStrokeRenderObject& operator=(const RoundedRectangleStrokeRenderObject& other) = delete;
+ RoundedRectangleStrokeRenderObject& operator=(RoundedRectangleStrokeRenderObject&& other) = delete;
+ ~RoundedRectangleStrokeRenderObject() override = default;
+
+ protected:
+ void Draw(ID2D1RenderTarget* render_target) override;
+ };
+
+
+ class CustomDrawHandlerRenderObject : public RenderObject
+ {
+ public:
+ using DrawHandler = std::function<void(ID2D1RenderTarget*)>;
+
+ CustomDrawHandlerRenderObject() = default;
+ CustomDrawHandlerRenderObject(const CustomDrawHandlerRenderObject& other) = delete;
+ CustomDrawHandlerRenderObject& operator=(const CustomDrawHandlerRenderObject& other) = delete;
+ CustomDrawHandlerRenderObject(CustomDrawHandlerRenderObject&& other) = delete;
+ CustomDrawHandlerRenderObject& operator=(CustomDrawHandlerRenderObject&& other) = delete;
+ ~CustomDrawHandlerRenderObject() override = default;
+
+ DrawHandler GetDrawHandler() const
+ {
+ return draw_handler_;
+ }
+
+ void SetDrawHandler(DrawHandler new_draw_handler);
+
+ protected:
+ void Draw(ID2D1RenderTarget* render_target) override;
+
+ private:
+ DrawHandler draw_handler_{};
+ };
- class CustomDrawHandlerRenderObject; //TODO!
class ContainerRenderObject; //TODO!
@@ -215,7 +359,7 @@ namespace cru::ui::render
// |
// ContainerRO
// / |
- // BorderRO OffsetRO (padding offset)
+ // StrokeRO (border) OffsetRO (padding offset)
// / | \
// / | \
// / | \
@@ -224,7 +368,7 @@ namespace cru::ui::render
// / | \
// ContainerRO (background) | ContainerRO (foreground, symmetrical to background)
// / \ | / \
- // GeometryFillRO CustomDrawHandlerRO | GeometryFillRO CustomDrawHandlerRO
+ // FillRO CustomDrawHandlerRO | FillRO CustomDrawHandlerRO
// |
// OffsetRO (content offset)
// |
@@ -247,13 +391,13 @@ namespace cru::ui::render
~ControlRenderObject() override = default;
- D2D1_MATRIX_3X2_F GetControlTransform() const;
- Microsoft::WRL::ComPtr<ID2D1Geometry> GetControlClip() const;
+ MatrixRenderObject* GetControlTransformRenderObject() const;
+ ClipRenderObject* GetControlClipRenderObject() const;
- Point GetBorderOffset() const;
- BorderRenderObject* GetBorderRenderObject() const;
+ OffsetRenderObject* GetBorderOffsetRenderObject() const;
+ RoundedRectangleStrokeRenderObject* GetBorderRenderObject() const;
- Point GetPaddingOffset() const;
+ OffsetRenderObject* GetPaddingOffsetRenderObject() const;
Microsoft::WRL::ComPtr<ID2D1Geometry> GetPaddingGeometry() const;
Point GetContentOffset() const;