diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/cru/platform/exception.hpp | 11 | ||||
-rw-r--r-- | include/cru/win/graph/direct/geometry.hpp | 7 |
2 files changed, 16 insertions, 2 deletions
diff --git a/include/cru/platform/exception.hpp b/include/cru/platform/exception.hpp index 6dae08c5..b1e505e0 100644 --- a/include/cru/platform/exception.hpp +++ b/include/cru/platform/exception.hpp @@ -6,6 +6,15 @@ namespace cru::platform { class PlatformException : public std::runtime_error { public: - using runtime_error::runtime_error; // inherent constructors + using runtime_error::runtime_error; // inherit constructors +}; + +// This exception is throwed when a resource has been disposed and not usable +// again. +// For example, calling Build twice on a GeometryBuild will lead to this +// exception. +class ReuseException : public std::runtime_error { + public: + using runtime_error::runtime_error; // inherit constructors }; } // namespace cru::platform diff --git a/include/cru/win/graph/direct/geometry.hpp b/include/cru/win/graph/direct/geometry.hpp index f40db7af..1ee60247 100644 --- a/include/cru/win/graph/direct/geometry.hpp +++ b/include/cru/win/graph/direct/geometry.hpp @@ -3,6 +3,7 @@ #include "direct_factory.hpp" #include "platform_id.hpp" +#include "cru/platform/exception.hpp" #include "cru/platform/graph/geometry.hpp" namespace cru::platform::graph::win::direct { @@ -16,7 +17,7 @@ class D2DGeometryBuilder : public GeometryBuilder { D2DGeometryBuilder(D2DGeometryBuilder&& other) = delete; D2DGeometryBuilder& operator=(D2DGeometryBuilder&& other) = delete; - ~D2DGeometryBuilder() override; + ~D2DGeometryBuilder() override = default; CRU_PLATFORMID_IMPLEMENT_DIRECT @@ -31,6 +32,10 @@ class D2DGeometryBuilder : public GeometryBuilder { private: bool IsValid() { return geometry_ != nullptr; } + void CheckValidation() { + if (!IsValid()) + throw ReuseException("The geometry builder is already disposed."); + } private: Microsoft::WRL::ComPtr<ID2D1PathGeometry> geometry_; |