From baa7cf141b8121473edceae16c1a20a6d47bd202 Mon Sep 17 00:00:00 2001 From: crupest Date: Thu, 27 Jun 2019 00:18:48 +0800 Subject: ...... --- include/cru/win/graph/direct/geometry.hpp | 48 +++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 include/cru/win/graph/direct/geometry.hpp (limited to 'include/cru/win/graph/direct/geometry.hpp') diff --git a/include/cru/win/graph/direct/geometry.hpp b/include/cru/win/graph/direct/geometry.hpp new file mode 100644 index 00000000..e312f13c --- /dev/null +++ b/include/cru/win/graph/direct/geometry.hpp @@ -0,0 +1,48 @@ +#pragma once +#include "../win_pre_config.hpp" + +#include "cru/platform/graph/geometry.hpp" + +namespace cru::win::graph { +struct IWinNativeFactory; + +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 CloseFigure(bool close) override; + platform::graph::IGeometry* End() override; + bool IsEnded() const override { return geometry_ != nullptr; } + + private: + Microsoft::WRL::ComPtr geometry_; + Microsoft::WRL::ComPtr geometry_sink_; +}; + +class WinGeometry : public Object, public virtual platform::graph::IGeometry { + public: + explicit WinGeometry(Microsoft::WRL::ComPtr 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 geometry_; +}; +} // namespace cru::win::graph -- cgit v1.2.3