diff options
Diffstat (limited to 'src/ui/render/render_object.cpp')
-rw-r--r-- | src/ui/render/render_object.cpp | 99 |
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); + } } |