diff options
Diffstat (limited to 'src/win/graph/direct/geometry.cpp')
-rw-r--r-- | src/win/graph/direct/geometry.cpp | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/src/win/graph/direct/geometry.cpp b/src/win/graph/direct/geometry.cpp index 470addee..5540edab 100644 --- a/src/win/graph/direct/geometry.cpp +++ b/src/win/graph/direct/geometry.cpp @@ -2,16 +2,22 @@ #include "cru/win/graph/direct/convert_util.hpp" #include "cru/win/graph/direct/exception.hpp" +#include "cru/win/graph/direct/factory.hpp" #include <cassert> namespace cru::platform::graph::win::direct { -D2DGeometryBuilder::D2DGeometryBuilder(IDirectFactory* factory) { - assert(factory); +D2DGeometryBuilder::D2DGeometryBuilder(DirectGraphFactory* factory) + : DirectGraphResource(factory) { ThrowIfFailed(factory->GetD2D1Factory()->CreatePathGeometry(&geometry_)); ThrowIfFailed(geometry_->Open(&geometry_sink_)); } +void D2DGeometryBuilder::CheckValidation() { + if (!IsValid()) + throw ReuseException("The geometry builder is already disposed."); +} + void D2DGeometryBuilder::BeginFigure(const Point& point) { CheckValidation(); geometry_sink_->BeginFigure(Convert(point), D2D1_FIGURE_BEGIN_FILLED); @@ -35,19 +41,19 @@ void D2DGeometryBuilder::CloseFigure(bool close) { : D2D1_FIGURE_END_OPEN); } -Geometry* D2DGeometryBuilder::Build() { +std::unique_ptr<IGeometry> D2DGeometryBuilder::Build() { CheckValidation(); ThrowIfFailed(geometry_sink_->Close()); geometry_sink_ = nullptr; - const auto geometry = new D2DGeometry(std::move(geometry_)); + auto geometry = + std::make_unique<D2DGeometry>(GetDirectFactory(), std::move(geometry_)); geometry_ = nullptr; return geometry; } -D2DGeometry::D2DGeometry(Microsoft::WRL::ComPtr<ID2D1PathGeometry> geometry) { - assert(geometry); - geometry_ = std::move(geometry); -} +D2DGeometry::D2DGeometry(DirectGraphFactory* factory, + Microsoft::WRL::ComPtr<ID2D1PathGeometry> geometry) + : DirectGraphResource(factory), geometry_(std::move(geometry)) {} bool D2DGeometry::FillContains(const Point& point) { BOOL result; |