diff --git a/src/azure-c.cpp b/src/azure-c.cpp index abe4a94..3282390 100644 --- a/src/azure-c.cpp +++ b/src/azure-c.cpp @@ -529,6 +529,17 @@ AzPathBuilderLineTo(AzPathBuilderRef aPathBuilder, const AzPoint *aPoint) { gfxPathBuilder->LineTo(*gfxPoint); } +extern "C" void AzPathBuilderArc(AzPathBuilderRef aPathBuilder, + const AzPoint *aOrigin, + AzFloat aRadius, + AzFloat aStartAngle, + AzFloat aEndAngle, + bool aAntiClockwise) { + gfx::PathBuilder *gfxPathBuilder = static_cast(aPathBuilder); + const gfx::Point *gfxOrigin = reinterpret_cast(aOrigin); + gfxPathBuilder->Arc(*gfxOrigin, aRadius, aStartAngle, aEndAngle, aAntiClockwise); +} + extern "C" AzPathRef AzPathBuilderFinish(AzPathBuilderRef aPathBuilder) { gfx::PathBuilder *gfxPathBuilder = static_cast(aPathBuilder); diff --git a/src/azure-c.h b/src/azure-c.h index cd0a65b..cdca7a9 100644 --- a/src/azure-c.h +++ b/src/azure-c.h @@ -373,6 +373,17 @@ AzDataSourceSurfaceRef AzSourceSurfaceGetDataSurface(AzSourceSurfaceRef aSurface uint8_t *AzDataSourceSurfaceGetData(AzDataSourceSurfaceRef aSurface); int32_t AzDataSourceSurfaceGetStride(AzDataSourceSurfaceRef aSurface); +AzPathBuilderRef AzCreatePathBuilder(AzDrawTargetRef aDrawTarget); +void AzReleasePathBuilder(AzPathBuilderRef aPathBuilder); +void AzPathBuilderMoveTo(AzPathBuilderRef aPathBuilder, const AzPoint *aPoint); +void AzPathBuilderLineTo(AzPathBuilderRef aPathBuilder, const AzPoint *aPoint); +void AzPathBuilderArc(AzPathBuilderRef aPathBuilder, + const AzPoint *aOrigin, + AzFloat aRadius, + AzFloat aStartAngle, + AzFloat aEndAngle, + bool aAntiClockwise); +AzPathRef AzPathBuilderFinish(AzPathBuilderRef aPathBuilder); /* Factory.h */ diff --git a/src/azure.rs b/src/azure.rs index 2050e2f..c31cf47 100644 --- a/src/azure.rs +++ b/src/azure.rs @@ -402,6 +402,13 @@ pub fn AzPathBuilderMoveTo(aPathBuilder: AzPathBuilderRef, aPoint: *mut AzPoint) pub fn AzPathBuilderLineTo(aPathBuilder: AzPathBuilderRef, aPoint: *mut AzPoint); +pub fn AzPathBuilderArc(aPathBuilder: AzPathBuilderRef, + aOrigin: *const AzPoint, + aRadius: AzFloat, + aStartAngle: AzFloat, + aEndAngle: AzFloat, + aAntiClockwise: bool); + pub fn AzPathBuilderFinish(aPathBuilder: AzPathBuilderRef) -> AzPathRef; pub fn AzReleasePath(aPath: AzPathRef); diff --git a/src/azure_hl.rs b/src/azure_hl.rs index c10dc45..8d6da94 100644 --- a/src/azure_hl.rs +++ b/src/azure_hl.rs @@ -27,7 +27,8 @@ use azure::{AzSourceSurfaceGetDataSurface, AzSourceSurfaceGetFormat}; use azure::{AzSourceSurfaceGetSize, AzCreateSkiaDrawTargetForFBO, AzSkiaGetCurrentGLContext}; use azure::{AzSkiaSharedGLContextMakeCurrent, AzSkiaSharedGLContextStealSurface}; use azure::{AzSkiaSharedGLContextFlush, AzSkiaGrGLSharedSurfaceRef}; -use azure::{AzCreatePathBuilder, AzPathBuilderRef, AzPathBuilderMoveTo, AzPathBuilderLineTo, AzPathBuilderFinish, AzReleasePathBuilder}; +use azure::{AzCreatePathBuilder, AzPathBuilderRef, AzPathBuilderMoveTo, AzPathBuilderLineTo}; +use azure::{AzPathBuilderArc, AzPathBuilderFinish, AzReleasePathBuilder}; use azure::{AzDrawTargetFill, AzPathRef, AzReleasePath, AzDrawTargetPushClip, AzDrawTargetPopClip}; use azure::AzGLNativeContextRef; @@ -749,7 +750,25 @@ impl PathBuilder { } } - pub fn finish(&self) -> Path{ + /// Adds an arc to the current figure. + pub fn arc(&self, + origin: Point2D, + radius: AzFloat, + start_angle: AzFloat, + end_angle: AzFloat, + anticlockwise: bool) { + let origin = origin.as_azure_point(); + unsafe { + AzPathBuilderArc(self.azure_path_builder, + &origin, + radius, + start_angle, + end_angle, + anticlockwise) + } + } + + pub fn finish(&self) -> Path { let az_path = unsafe { AzPathBuilderFinish(self.azure_path_builder) }; Path { azure_path : az_path