aboutsummaryrefslogtreecommitdiff
path: root/src/ui/render/render_object.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/render/render_object.cpp')
-rw-r--r--src/ui/render/render_object.cpp99
1 files changed, 97 insertions, 2 deletions
diff --git a/src/ui/render/render_object.cpp b/src/ui/render/render_object.cpp
index 7b430f06..78445bf1 100644
--- a/src/ui/render/render_object.cpp
+++ b/src/ui/render/render_object.cpp
@@ -87,6 +87,9 @@ namespace cru::ui::render
render_target->SetTransform(matrix);
}
+ const MatrixRenderObject::MatrixApplier MatrixRenderObject::append_applier(ApplyAppendMatrix);
+ const MatrixRenderObject::MatrixApplier MatrixRenderObject::set_applier(ApplySetMatrix);
+
MatrixRenderObject::MatrixRenderObject(const D2D1_MATRIX_3X2_F& matrix, MatrixApplier applier)
: matrix_(matrix), applier_(std::move(applier))
{
@@ -128,6 +131,98 @@ namespace cru::ui::render
SetMatrix(D2D1::Matrix3x2F::Translation(offset_x_, offset_y_));
}
- const MatrixRenderObject::MatrixApplier MatrixRenderObject::append_applier(ApplyAppendMatrix);
- const MatrixRenderObject::MatrixApplier MatrixRenderObject::set_applier(ApplySetMatrix);
+ void StrokeRenderObject::SetStrokeWidth(const float new_stroke_width)
+ {
+ if (stroke_width_ == new_stroke_width)
+ return;
+
+ stroke_width_ = new_stroke_width;
+ InvalidateRenderHost();
+ }
+
+ void StrokeRenderObject::SetBrush(Microsoft::WRL::ComPtr<ID2D1Brush> new_brush)
+ {
+ if (brush_ == new_brush)
+ return;
+
+ brush_ = std::move(new_brush);
+ InvalidateRenderHost();
+ }
+
+ void StrokeRenderObject::SetStrokeStyle(Microsoft::WRL::ComPtr<ID2D1StrokeStyle> new_stroke_style)
+ {
+ if (stroke_style_ == new_stroke_style)
+ return;
+
+ stroke_style_ = std::move(new_stroke_style);
+ InvalidateRenderHost();
+ }
+
+ void FillRenderObject::SetBrush(Microsoft::WRL::ComPtr<ID2D1Brush> new_brush)
+ {
+ if (brush_ == new_brush)
+ return;
+
+ brush_ = std::move(new_brush);
+ InvalidateRenderHost();
+ }
+
+ void RoundedRectangleRenderObject::SetRect(const Rect& rect)
+ {
+ 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();
+ }
+
+ void RoundedRectangleStrokeRenderObject::Draw(ID2D1RenderTarget* render_target)
+ {
+ const auto brush = GetBrush();
+ if (brush != nullptr)
+ render_target->DrawRoundedRectangle(GetRoundedRect(), GetBrush().Get(), GetStrokeWidth());
+ }
+
+ void CustomDrawHandlerRenderObject::SetDrawHandler(DrawHandler new_draw_handler)
+ {
+ if (draw_handler_ == nullptr && new_draw_handler == nullptr)
+ return;
+
+ draw_handler_ = std::move(new_draw_handler);
+ InvalidateRenderHost;
+ }
+
+ void CustomDrawHandlerRenderObject::Draw(ID2D1RenderTarget * render_target)
+ {
+ if (draw_handler_ != nullptr)
+ draw_handler_(render_target);
+ }
}