aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/cru/osx/graphics/quartz/Geometry.h11
-rw-r--r--include/cru/platform/graphics/Geometry.h39
2 files changed, 47 insertions, 3 deletions
diff --git a/include/cru/osx/graphics/quartz/Geometry.h b/include/cru/osx/graphics/quartz/Geometry.h
index 8e42491b..70db8ee2 100644
--- a/include/cru/osx/graphics/quartz/Geometry.h
+++ b/include/cru/osx/graphics/quartz/Geometry.h
@@ -34,11 +34,18 @@ class QuartzGeometryBuilder : public OsxQuartzResource,
~QuartzGeometryBuilder() override;
- void BeginFigure(const Point &point) override;
- void CloseFigure(bool close) 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 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/Geometry.h b/include/cru/platform/graphics/Geometry.h
index 732fc547..d1ebd186 100644
--- a/include/cru/platform/graphics/Geometry.h
+++ b/include/cru/platform/graphics/Geometry.h
@@ -9,10 +9,47 @@ struct CRU_PLATFORM_GRAPHICS_API IGeometry : virtual IGraphicsResource {
// After called Build, calling every method will throw a
struct CRU_PLATFORM_GRAPHICS_API IGeometryBuilder : virtual IGraphicsResource {
- virtual void BeginFigure(const Point& point) = 0;
+ virtual Point GetCurrentPosition() = 0;
+
+ virtual void MoveTo(const Point& point) = 0;
+ void RelativeMoveTo(const Point& offset) {
+ MoveTo(GetCurrentPosition() + offset);
+ }
+
virtual void LineTo(const Point& point) = 0;
+ void RelativeLineTo(const Point& offset) {
+ LineTo(GetCurrentPosition() + offset);
+ }
+
+ virtual void CubicBezierTo(const Point& start_control_point,
+ const Point& end_control_point,
+ const Point& end_point) = 0;
+ void RelativeCubicBezierTo(const Point& start_control_offset,
+ const Point& end_control_offset,
+ const Point& end_offset) {
+ auto current_position = GetCurrentPosition();
+ CubicBezierTo(current_position + start_control_offset,
+ current_position + end_control_offset,
+ current_position + end_offset);
+ }
+
virtual void QuadraticBezierTo(const Point& control_point,
const Point& end_point) = 0;
+ void RelativeQuadraticBezierTo(const Point& control_offset,
+ const Point& end_offset) {
+ auto current_position = GetCurrentPosition();
+ QuadraticBezierTo(current_position + control_offset,
+ current_position + end_offset);
+ }
+
+ virtual void ArcTo(const Point& radius, float angle, bool is_large_arc,
+ bool is_clockwise, const Point& end_point) = 0;
+ void RelativeArcTo(const Point& radius, float angle, bool is_large_arc,
+ bool is_clockwise, const Point& end_offset) {
+ ArcTo(radius, angle, is_large_arc, is_clockwise,
+ GetCurrentPosition() + end_offset);
+ }
+
virtual void CloseFigure(bool close) = 0;
virtual std::unique_ptr<IGeometry> Build() = 0;