aboutsummaryrefslogtreecommitdiff
path: root/include/cru/platform/win/win_geometry.hpp
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2019-04-01 15:28:07 +0800
committercrupest <crupest@outlook.com>2019-04-01 15:28:07 +0800
commit3e89aa733587043645f5fda72596e4ff3cd21d2a (patch)
tree7daadddf1073f537bb580a0cdf77208cf26e6271 /include/cru/platform/win/win_geometry.hpp
parent8ca0873597eb05a2f120d3ea107660abcff4533c (diff)
downloadcru-3e89aa733587043645f5fda72596e4ff3cd21d2a.tar.gz
cru-3e89aa733587043645f5fda72596e4ff3cd21d2a.tar.bz2
cru-3e89aa733587043645f5fda72596e4ff3cd21d2a.zip
...
Diffstat (limited to 'include/cru/platform/win/win_geometry.hpp')
-rw-r--r--include/cru/platform/win/win_geometry.hpp45
1 files changed, 45 insertions, 0 deletions
diff --git a/include/cru/platform/win/win_geometry.hpp b/include/cru/platform/win/win_geometry.hpp
new file mode 100644
index 00000000..e8ab7796
--- /dev/null
+++ b/include/cru/platform/win/win_geometry.hpp
@@ -0,0 +1,45 @@
+#pragma once
+#include "win_pre_config.hpp"
+
+#include "../geometry.hpp"
+
+namespace cru::platform::win {
+class WinGeometryBuilder : public Object, public virtual GeometryBuilder {
+ public:
+ explicit WinGeometryBuilder(Microsoft::WRL::ComPtr<ID2D1PathGeometry> geometry);
+ WinGeometryBuilder(const WinGeometryBuilder& other) = delete;
+ WinGeometryBuilder(WinGeometryBuilder&& other) = delete;
+ WinGeometryBuilder& operator=(const WinGeometryBuilder& other) = delete;
+ WinGeometryBuilder& operator=(WinGeometryBuilder&& other) = delete;
+ ~WinGeometryBuilder() override;
+
+ bool IsValid() override { return geometry_ != nullptr; }
+ 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 CloseFigure(bool close) override;
+ Geometry* Build() override;
+
+ private:
+ Microsoft::WRL::ComPtr<ID2D1PathGeometry> geometry_;
+ Microsoft::WRL::ComPtr<ID2D1GeometrySink> geometry_sink_;
+};
+
+class WinGeometry : public Object, public virtual Geometry {
+ 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;
+
+ bool FillContains(const ui::Point& point) override;
+
+ ID2D1PathGeometry* GetNative() const { return geometry_.Get(); }
+
+ private:
+ Microsoft::WRL::ComPtr<ID2D1PathGeometry> geometry_;
+};
+} // namespace cru::platform::win