diff options
Diffstat (limited to 'include/basegfx/polygon/b2dpolygon.hxx')
-rw-r--r-- | include/basegfx/polygon/b2dpolygon.hxx | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/include/basegfx/polygon/b2dpolygon.hxx b/include/basegfx/polygon/b2dpolygon.hxx index 6ef76933eebe..a1766bd09ffb 100644 --- a/include/basegfx/polygon/b2dpolygon.hxx +++ b/include/basegfx/polygon/b2dpolygon.hxx @@ -21,7 +21,7 @@ #define INCLUDED_BASEGFX_POLYGON_B2DPOLYGON_HXX #include <ostream> - +#include <memory> #include <sal/types.h> #include <o3tl/cow_wrapper.hxx> #include <basegfx/vector/b2enums.hxx> @@ -29,6 +29,7 @@ #include <basegfx/basegfxdllapi.h> class ImplB2DPolygon; +class SalGraphicsImpl; namespace basegfx { @@ -37,6 +38,9 @@ namespace basegfx class B2DVector; class B2DHomMatrix; class B2DCubicBezier; + class SystemDependentData; + class SystemDependentDataManager; + typedef std::shared_ptr<SystemDependentData> SystemDependentData_SharedPtr; } namespace basegfx @@ -214,6 +218,26 @@ namespace basegfx /// apply transformation given in matrix form void transform(const basegfx::B2DHomMatrix& rMatrix); + + // exclusive management op's for SystemDependentData at B2DPolygon + template<class T> + std::shared_ptr<T> getSystemDependentData() const + { + return std::static_pointer_cast<T>(getSystemDependantDataInternal(typeid(T).hash_code())); + } + + template<class T, class... Args> + std::shared_ptr<T> addOrReplaceSystemDependentData(SystemDependentDataManager& manager, Args&&... args) const + { + std::shared_ptr<T> r = std::make_shared<T>(manager, std::forward<Args>(args)...); + basegfx::SystemDependentData_SharedPtr r2(r); + addOrReplaceSystemDependentDataInternal(r2); + return r; + } + + private: + void addOrReplaceSystemDependentDataInternal(SystemDependentData_SharedPtr& rData) const; + SystemDependentData_SharedPtr getSystemDependantDataInternal(size_t hash_code) const; }; // typedef for a vector of B2DPolygons |