From 8ad2966933957ac5d6ff8dcd5e732736fd5e4dc6 Mon Sep 17 00:00:00 2001 From: crupest Date: Sun, 15 May 2022 14:08:06 +0800 Subject: ... --- include/cru/platform/graphics/quartz/Geometry.h | 57 +++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 include/cru/platform/graphics/quartz/Geometry.h (limited to 'include/cru/platform/graphics/quartz/Geometry.h') diff --git a/include/cru/platform/graphics/quartz/Geometry.h b/include/cru/platform/graphics/quartz/Geometry.h new file mode 100644 index 00000000..18e2e25e --- /dev/null +++ b/include/cru/platform/graphics/quartz/Geometry.h @@ -0,0 +1,57 @@ +#pragma once +#include "Resource.h" +#include "cru/platform/graphics/Geometry.h" + +#include + +#include + +namespace cru::platform::graphics::quartz { +class QuartzGeometry : public OsxQuartzResource, public virtual IGeometry { + public: + QuartzGeometry(IGraphicsFactory *graphics_factory, CGPathRef cg_path); + + CRU_DELETE_COPY(QuartzGeometry) + CRU_DELETE_MOVE(QuartzGeometry) + + ~QuartzGeometry() override; + + CGPathRef GetCGPath() const { return cg_path_; } + + bool FillContains(const Point &point) override; + Rect GetBounds() override; + + std::unique_ptr Transform(const Matrix &matrix) override; + std::unique_ptr CreateStrokeGeometry(float width) override; + + private: + CGPathRef cg_path_; +}; + +class QuartzGeometryBuilder : public OsxQuartzResource, + public virtual IGeometryBuilder { + public: + explicit QuartzGeometryBuilder(IGraphicsFactory *graphics_factory); + + CRU_DELETE_COPY(QuartzGeometryBuilder) + CRU_DELETE_MOVE(QuartzGeometryBuilder) + + ~QuartzGeometryBuilder() override; + + Point GetCurrentPosition() override; + + void MoveTo(const Point &point) override; + void LineTo(const Point &point) override; + void CubicBezierTo(const Point &start_control_point, + const Point &end_control_point, + const Point &end_point) override; + void QuadraticBezierTo(const Point &control_point, + const Point &end_point) override; + void CloseFigure(bool close) override; + + std::unique_ptr Build() override; + + private: + CGMutablePathRef cg_mutable_path_; +}; +} // namespace cru::platform::graphics::quartz -- cgit v1.2.3