aboutsummaryrefslogtreecommitdiff
path: root/include/cru/platform/graphics
diff options
context:
space:
mode:
authorYuqian Yang <crupest@crupest.life>2025-09-21 23:40:30 +0800
committerYuqian Yang <crupest@crupest.life>2025-12-18 23:25:06 +0800
commitc3412099485e06109f83b3105ce6c083c2b65dd1 (patch)
tree3ae2ad9026cf1c3279a6cac00d7726ed684de8db /include/cru/platform/graphics
parent6bbadfc6b1eaf14f68a27cb8e378f5e09ab38de6 (diff)
downloadcru-geo-arc.tar.gz
cru-geo-arc.tar.bz2
cru-geo-arc.zip
HALF WORK!geo-arc
Diffstat (limited to 'include/cru/platform/graphics')
-rw-r--r--include/cru/platform/graphics/Geometry.h16
-rw-r--r--include/cru/platform/graphics/cairo/CairoGeometry.h7
-rw-r--r--include/cru/platform/graphics/quartz/Geometry.h7
3 files changed, 29 insertions, 1 deletions
diff --git a/include/cru/platform/graphics/Geometry.h b/include/cru/platform/graphics/Geometry.h
index ef661f2a..92338750 100644
--- a/include/cru/platform/graphics/Geometry.h
+++ b/include/cru/platform/graphics/Geometry.h
@@ -63,6 +63,22 @@ struct CRU_PLATFORM_GRAPHICS_API IGeometry : virtual IGraphicsResource {
* virtual so it can override them.
*/
struct CRU_PLATFORM_GRAPHICS_API IGeometryBuilder : virtual IGraphicsResource {
+ private:
+ constexpr static auto kLogTag = "cru::platform::graphics::IGeometryBuilder";
+
+ public:
+ struct ArcInfo {
+ Point center;
+ // In radian.
+ float start_angle;
+ // In radian.
+ float end_angle;
+ };
+
+ static ArcInfo CalculateArcInfo(const Point& start_point, const Point& radius,
+ float angle, bool is_large_arc,
+ bool is_clockwise, const Point& end_point);
+
virtual Point GetCurrentPosition() = 0;
virtual void MoveTo(const Point& point) = 0;
diff --git a/include/cru/platform/graphics/cairo/CairoGeometry.h b/include/cru/platform/graphics/cairo/CairoGeometry.h
index 1d69ebf2..7d2b1bcd 100644
--- a/include/cru/platform/graphics/cairo/CairoGeometry.h
+++ b/include/cru/platform/graphics/cairo/CairoGeometry.h
@@ -31,6 +31,10 @@ class CRU_PLATFORM_GRAPHICS_CAIRO_API CairoGeometry : public CairoResource,
class CRU_PLATFORM_GRAPHICS_CAIRO_API CairoGeometryBuilder
: public CairoResource,
public virtual IGeometryBuilder {
+ private:
+ constexpr static auto kLogTag =
+ "cru::platform::graphics::cairo::CairoGeometryBuilder";
+
public:
explicit CairoGeometryBuilder(CairoGraphicsFactory* factory);
~CairoGeometryBuilder() override;
@@ -45,7 +49,8 @@ class CRU_PLATFORM_GRAPHICS_CAIRO_API CairoGeometryBuilder
const Point& end_point) override;
void QuadraticBezierTo(const Point& control_point,
const Point& end_point) override;
-
+ void ArcTo(const Point& radius, float angle, bool is_large_arc,
+ bool is_clockwise, const Point& end_point) override;
void CloseFigure(bool close) override;
std::unique_ptr<IGeometry> Build() override;
diff --git a/include/cru/platform/graphics/quartz/Geometry.h b/include/cru/platform/graphics/quartz/Geometry.h
index e13d268e..631aa56f 100644
--- a/include/cru/platform/graphics/quartz/Geometry.h
+++ b/include/cru/platform/graphics/quartz/Geometry.h
@@ -26,6 +26,10 @@ class QuartzGeometry : public OsxQuartzResource, public virtual IGeometry {
class QuartzGeometryBuilder : public OsxQuartzResource,
public virtual IGeometryBuilder {
+ private:
+ constexpr static auto kLogTag =
+ "cru::platform::graphics::quartz::QuartzGeometryBuilder";
+
public:
explicit QuartzGeometryBuilder(IGraphicsFactory* graphics_factory);
@@ -43,6 +47,9 @@ class QuartzGeometryBuilder : public OsxQuartzResource,
const Point& end_point) override;
void QuadraticBezierTo(const Point& control_point,
const Point& end_point) override;
+ void ArcTo(const Point& radius, float angle, bool is_large_arc,
+ bool is_clockwise, const Point& end_point) override;
+
void CloseFigure(bool close) override;
std::unique_ptr<IGeometry> Build() override;