diff options
author | crupest <crupest@outlook.com> | 2022-02-27 20:26:17 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2022-02-27 20:26:17 +0800 |
commit | c0817f5494e6a08c0db9e22a7195daedd1a6b4c3 (patch) | |
tree | fe353c2369643c58fd93dca22c6bd4cdf556e75d /include/cru/platform/graphics/Geometry.h | |
parent | afcf935a739c60d9141e2d53fb62e30ff4fc1f80 (diff) | |
download | cru-c0817f5494e6a08c0db9e22a7195daedd1a6b4c3.tar.gz cru-c0817f5494e6a08c0db9e22a7195daedd1a6b4c3.tar.bz2 cru-c0817f5494e6a08c0db9e22a7195daedd1a6b4c3.zip |
...
Diffstat (limited to 'include/cru/platform/graphics/Geometry.h')
-rw-r--r-- | include/cru/platform/graphics/Geometry.h | 39 |
1 files changed, 38 insertions, 1 deletions
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; |