aboutsummaryrefslogtreecommitdiff
path: root/src/ui/render/border_render_object.cpp
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2019-03-24 21:59:29 +0800
committercrupest <crupest@outlook.com>2019-03-24 21:59:29 +0800
commitb506c349b793f723df6da170ffa0f412200e26e9 (patch)
tree59030d1af23c5c72caa2e8956a1687d4e0c6c804 /src/ui/render/border_render_object.cpp
parent475ae9b12867f25f037792ae8b59c27d45119f54 (diff)
downloadcru-b506c349b793f723df6da170ffa0f412200e26e9.tar.gz
cru-b506c349b793f723df6da170ffa0f412200e26e9.tar.bz2
cru-b506c349b793f723df6da170ffa0f412200e26e9.zip
...
Diffstat (limited to 'src/ui/render/border_render_object.cpp')
-rw-r--r--src/ui/render/border_render_object.cpp120
1 files changed, 60 insertions, 60 deletions
diff --git a/src/ui/render/border_render_object.cpp b/src/ui/render/border_render_object.cpp
index 49700869..72cea756 100644
--- a/src/ui/render/border_render_object.cpp
+++ b/src/ui/render/border_render_object.cpp
@@ -36,66 +36,6 @@ void BorderRenderObject::SetBrush(ID2D1Brush* new_brush) {
border_brush_ = new_brush;
}
-void BorderRenderObject::RecreateGeometry() {
- util::SafeRelease(geometry_);
- util::SafeRelease(border_outer_geometry_);
-
- const auto d2d_factory = graph::GraphManager::GetInstance()->GetD2D1Factory();
-
- Microsoft::WRL::ComPtr<ID2D1PathGeometry> geometry;
- ThrowIfFailed(d2d_factory->CreatePathGeometry(&geometry));
-
- Microsoft::WRL::ComPtr<ID2D1PathGeometry> border_outer_geometry;
- ThrowIfFailed(d2d_factory->CreatePathGeometry(&border_outer_geometry));
-
- Microsoft::WRL::ComPtr<ID2D1GeometrySink> sink;
- auto f = [&sink](const Rect& rect, const CornerRadius& corner) {
- sink->BeginFigure(D2D1::Point2F(rect.left + corner.left_top.x, rect.top),
- D2D1_FIGURE_BEGIN_FILLED);
- sink->AddLine(
- D2D1::Point2F(rect.GetRight() - corner.right_top.x, rect.top));
- sink->AddQuadraticBezier(D2D1::QuadraticBezierSegment(
- D2D1::Point2F(rect.GetRight(), rect.top),
- D2D1::Point2F(rect.GetRight(), rect.top + corner.right_top.y)));
- sink->AddLine(D2D1::Point2F(rect.GetRight(),
- rect.GetBottom() - corner.right_bottom.y));
- sink->AddQuadraticBezier(D2D1::QuadraticBezierSegment(
- D2D1::Point2F(rect.GetRight(), rect.GetBottom()),
- D2D1::Point2F(rect.GetRight() - corner.right_bottom.x,
- rect.GetBottom())));
- sink->AddLine(
- D2D1::Point2F(rect.left + corner.left_bottom.x, rect.GetBottom()));
- sink->AddQuadraticBezier(D2D1::QuadraticBezierSegment(
- D2D1::Point2F(rect.left, rect.GetBottom()),
- D2D1::Point2F(rect.left, rect.GetBottom() - corner.left_bottom.y)));
- sink->AddLine(D2D1::Point2F(rect.left, rect.top + corner.left_top.y));
- sink->AddQuadraticBezier(D2D1::QuadraticBezierSegment(
- D2D1::Point2F(rect.left, rect.top),
- D2D1::Point2F(rect.left + corner.left_top.x, rect.top)));
- sink->EndFigure(D2D1_FIGURE_END_CLOSED);
- };
-
- const auto size = GetSize();
- const auto margin = GetMargin();
- const Rect outer_rect{margin.left, margin.top,
- size.width - margin.GetHorizontalTotal(),
- size.height - margin.GetVerticalTotal()};
- ThrowIfFailed(border_outer_geometry->Open(&sink));
- f(outer_rect, corner_radius_);
- ThrowIfFailed(sink->Close());
- sink = nullptr;
-
- const Rect inner_rect = outer_rect.Shrink(border_thickness_);
- ThrowIfFailed(geometry->Open(&sink));
- f(outer_rect, corner_radius_);
- f(inner_rect, corner_radius_);
- ThrowIfFailed(sink->Close());
- sink = nullptr;
-
- geometry_ = geometry.Detach();
- border_outer_geometry_ = border_outer_geometry.Detach();
-}
-
void BorderRenderObject::Draw(ID2D1RenderTarget* render_target) {
render_target->FillGeometry(geometry_, border_brush_);
if (const auto child = GetChild()) {
@@ -231,4 +171,64 @@ void BorderRenderObject::OnLayoutContent(const Rect& content_rect) {
child->Layout(content_rect);
}
}
+
+void BorderRenderObject::RecreateGeometry() {
+ util::SafeRelease(geometry_);
+ util::SafeRelease(border_outer_geometry_);
+
+ const auto d2d_factory = graph::GraphManager::GetInstance()->GetD2D1Factory();
+
+ Microsoft::WRL::ComPtr<ID2D1PathGeometry> geometry;
+ ThrowIfFailed(d2d_factory->CreatePathGeometry(&geometry));
+
+ Microsoft::WRL::ComPtr<ID2D1PathGeometry> border_outer_geometry;
+ ThrowIfFailed(d2d_factory->CreatePathGeometry(&border_outer_geometry));
+
+ Microsoft::WRL::ComPtr<ID2D1GeometrySink> sink;
+ auto f = [&sink](const Rect& rect, const CornerRadius& corner) {
+ sink->BeginFigure(D2D1::Point2F(rect.left + corner.left_top.x, rect.top),
+ D2D1_FIGURE_BEGIN_FILLED);
+ sink->AddLine(
+ D2D1::Point2F(rect.GetRight() - corner.right_top.x, rect.top));
+ sink->AddQuadraticBezier(D2D1::QuadraticBezierSegment(
+ D2D1::Point2F(rect.GetRight(), rect.top),
+ D2D1::Point2F(rect.GetRight(), rect.top + corner.right_top.y)));
+ sink->AddLine(D2D1::Point2F(rect.GetRight(),
+ rect.GetBottom() - corner.right_bottom.y));
+ sink->AddQuadraticBezier(D2D1::QuadraticBezierSegment(
+ D2D1::Point2F(rect.GetRight(), rect.GetBottom()),
+ D2D1::Point2F(rect.GetRight() - corner.right_bottom.x,
+ rect.GetBottom())));
+ sink->AddLine(
+ D2D1::Point2F(rect.left + corner.left_bottom.x, rect.GetBottom()));
+ sink->AddQuadraticBezier(D2D1::QuadraticBezierSegment(
+ D2D1::Point2F(rect.left, rect.GetBottom()),
+ D2D1::Point2F(rect.left, rect.GetBottom() - corner.left_bottom.y)));
+ sink->AddLine(D2D1::Point2F(rect.left, rect.top + corner.left_top.y));
+ sink->AddQuadraticBezier(D2D1::QuadraticBezierSegment(
+ D2D1::Point2F(rect.left, rect.top),
+ D2D1::Point2F(rect.left + corner.left_top.x, rect.top)));
+ sink->EndFigure(D2D1_FIGURE_END_CLOSED);
+ };
+
+ const auto size = GetSize();
+ const auto margin = GetMargin();
+ const Rect outer_rect{margin.left, margin.top,
+ size.width - margin.GetHorizontalTotal(),
+ size.height - margin.GetVerticalTotal()};
+ ThrowIfFailed(border_outer_geometry->Open(&sink));
+ f(outer_rect, corner_radius_);
+ ThrowIfFailed(sink->Close());
+ sink = nullptr;
+
+ const Rect inner_rect = outer_rect.Shrink(border_thickness_);
+ ThrowIfFailed(geometry->Open(&sink));
+ f(outer_rect, corner_radius_);
+ f(inner_rect, corner_radius_);
+ ThrowIfFailed(sink->Close());
+ sink = nullptr;
+
+ geometry_ = geometry.Detach();
+ border_outer_geometry_ = border_outer_geometry.Detach();
+}
} // namespace cru::ui::render