aboutsummaryrefslogtreecommitdiff
path: root/include/cru/win/graph/direct/geometry.hpp
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2019-06-27 15:29:13 +0800
committercrupest <crupest@outlook.com>2019-06-27 15:29:13 +0800
commit8c5b05bcfce96495b4ffc4209ab8feda12597729 (patch)
treea0a8bc99d8ffb42dc231696a4e4dfd1e7607eea0 /include/cru/win/graph/direct/geometry.hpp
parentbaa7cf141b8121473edceae16c1a20a6d47bd202 (diff)
downloadcru-8c5b05bcfce96495b4ffc4209ab8feda12597729.tar.gz
cru-8c5b05bcfce96495b4ffc4209ab8feda12597729.tar.bz2
cru-8c5b05bcfce96495b4ffc4209ab8feda12597729.zip
...
Diffstat (limited to 'include/cru/win/graph/direct/geometry.hpp')
-rw-r--r--include/cru/win/graph/direct/geometry.hpp71
1 files changed, 43 insertions, 28 deletions
diff --git a/include/cru/win/graph/direct/geometry.hpp b/include/cru/win/graph/direct/geometry.hpp
index e312f13c..f40db7af 100644
--- a/include/cru/win/graph/direct/geometry.hpp
+++ b/include/cru/win/graph/direct/geometry.hpp
@@ -1,48 +1,63 @@
#pragma once
-#include "../win_pre_config.hpp"
+#include "com_resource.hpp"
+#include "direct_factory.hpp"
+#include "platform_id.hpp"
#include "cru/platform/graph/geometry.hpp"
-namespace cru::win::graph {
-struct IWinNativeFactory;
+namespace cru::platform::graph::win::direct {
+class D2DGeometryBuilder : public GeometryBuilder {
+ public:
+ explicit D2DGeometryBuilder(IDirectFactory* factory);
+
+ D2DGeometryBuilder(const D2DGeometryBuilder& other) = delete;
+ D2DGeometryBuilder& operator=(const D2DGeometryBuilder& other) = delete;
+
+ D2DGeometryBuilder(D2DGeometryBuilder&& other) = delete;
+ D2DGeometryBuilder& operator=(D2DGeometryBuilder&& other) = delete;
+
+ ~D2DGeometryBuilder() override;
+
+ CRU_PLATFORMID_IMPLEMENT_DIRECT
-class WinGeometryBuilder : public Object,
- public virtual platform::graph::IGeometryBuilder {
public:
- explicit WinGeometryBuilder(IWinNativeFactory* factory);
- WinGeometryBuilder(const WinGeometryBuilder& other) = delete;
- WinGeometryBuilder(WinGeometryBuilder&& other) = delete;
- WinGeometryBuilder& operator=(const WinGeometryBuilder& other) = delete;
- WinGeometryBuilder& operator=(WinGeometryBuilder&& other) = delete;
- ~WinGeometryBuilder() override;
-
- void BeginFigure(const ui::Point& point) override;
- void LineTo(const ui::Point& point) override;
- void QuadraticBezierTo(const ui::Point& control_point,
- const ui::Point& end_point) override;
+ void BeginFigure(const Point& point) override;
+ void LineTo(const Point& point) override;
+ void QuadraticBezierTo(const Point& control_point,
+ const Point& end_point) override;
void CloseFigure(bool close) override;
- platform::graph::IGeometry* End() override;
- bool IsEnded() const override { return geometry_ != nullptr; }
+
+ Geometry* Build() override;
+
+ private:
+ bool IsValid() { return geometry_ != nullptr; }
private:
Microsoft::WRL::ComPtr<ID2D1PathGeometry> geometry_;
Microsoft::WRL::ComPtr<ID2D1GeometrySink> geometry_sink_;
};
-class WinGeometry : public Object, public virtual platform::graph::IGeometry {
+class D2DGeometry : public Geometry, public IComResource<ID2D1Geometry> {
public:
- explicit WinGeometry(Microsoft::WRL::ComPtr<ID2D1PathGeometry> geometry);
- WinGeometry(const WinGeometry& other) = delete;
- WinGeometry(WinGeometry&& other) = delete;
- WinGeometry& operator=(const WinGeometry& other) = delete;
- WinGeometry& operator=(WinGeometry&& other) = delete;
- ~WinGeometry() override = default;
+ explicit D2DGeometry(Microsoft::WRL::ComPtr<ID2D1PathGeometry> geometry);
+
+ D2DGeometry(const D2DGeometry& other) = delete;
+ D2DGeometry& operator=(const D2DGeometry& other) = delete;
+
+ D2DGeometry(D2DGeometry&& other) = delete;
+ D2DGeometry& operator=(D2DGeometry&& other) = delete;
+
+ ~D2DGeometry() override = default;
- bool FillContains(const ui::Point& point) override;
+ CRU_PLATFORMID_IMPLEMENT_DIRECT
- ID2D1PathGeometry* GetNative() const { return geometry_.Get(); }
+ public:
+ ID2D1Geometry* GetComInterface() const override { return geometry_.Get(); }
+
+ public:
+ bool FillContains(const Point& point) override;
private:
Microsoft::WRL::ComPtr<ID2D1PathGeometry> geometry_;
};
-} // namespace cru::win::graph
+} // namespace cru::platform::graph::win::direct