diff options
author | crupest <crupest@outlook.com> | 2019-12-12 19:53:17 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2019-12-12 19:53:17 +0800 |
commit | e69911a8b161b81ce3f7b209175766da2b7b3d4b (patch) | |
tree | 76b1f4b6f9f5ad6111578771be783ee456aeb912 /src/win/graph/direct/geometry.cpp | |
parent | 154b5b838edfdcef93cd0a33c013ad7f5f9d7337 (diff) | |
download | cru-e69911a8b161b81ce3f7b209175766da2b7b3d4b.tar.gz cru-e69911a8b161b81ce3f7b209175766da2b7b3d4b.tar.bz2 cru-e69911a8b161b81ce3f7b209175766da2b7b3d4b.zip |
...
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; |