diff --git a/src/azure-c.cpp b/src/azure-c.cpp index 1f47545..ba2df7c 100644 --- a/src/azure-c.cpp +++ b/src/azure-c.cpp @@ -619,6 +619,16 @@ AzPathBuilderBezierTo(AzPathBuilderRef aPathBuilder, gfxPathBuilder->BezierTo(*gfxControlPoint1, *gfxControlPoint2, *gfxControlPoint3); } +extern "C" void +AzPathBuilderQuadraticBezierTo(AzPathBuilderRef aPathBuilder, + const AzPoint *aControlPoint, + const AzPoint *aEndPoint) { + gfx::PathBuilder *gfxPathBuilder = static_cast(aPathBuilder); + const gfx::Point *gfxControlPoint = reinterpret_cast(aControlPoint); + const gfx::Point *gfxEndPoint = reinterpret_cast(aEndPoint); + gfxPathBuilder->QuadraticBezierTo(*gfxControlPoint, *gfxEndPoint); +} + extern "C" void AzPathBuilderClose(AzPathBuilderRef aPathBuilder) { gfx::PathBuilder *gfxPathBuilder = static_cast(aPathBuilder); diff --git a/src/azure-c.h b/src/azure-c.h index d3d5d7b..9b3e86d 100644 --- a/src/azure-c.h +++ b/src/azure-c.h @@ -441,6 +441,9 @@ void AzPathBuilderBezierTo(AzPathBuilderRef aPathBuilder, const AzPoint *aControlPoint1, const AzPoint *aControlPoint2, const AzPoint *aControlPoint3); +void AzPathBuilderQuadraticBezierTo(AzPathBuilderRef aPathBuilder, + const AzPoint *aCP, + const AzPoint *aEndPoint); void AzPathBuilderClose(AzPathBuilderRef aPathBuilder); AzPathRef AzPathBuilderFinish(AzPathBuilderRef aPathBuilder); diff --git a/src/azure.rs b/src/azure.rs index 3db9152..2fb1fc0 100644 --- a/src/azure.rs +++ b/src/azure.rs @@ -584,6 +584,10 @@ pub fn AzPathBuilderBezierTo(aPathBuilder: AzPathBuilderRef, aControlPoint2: *const AzPoint, aControlPoint3: *const AzPoint); +pub fn AzPathBuilderQuadraticBezierTo(aPathBuilder: AzPathBuilderRef, + aControlPoint: *const AzPoint, + aEndPoint: *const AzPoint); + pub fn AzPathBuilderClose(aPathBuilder: AzPathBuilderRef); pub fn AzPathBuilderFinish(aPathBuilder: AzPathBuilderRef) -> AzPathRef; diff --git a/src/azure_hl.rs b/src/azure_hl.rs index b587089..11fae3e 100644 --- a/src/azure_hl.rs +++ b/src/azure_hl.rs @@ -50,7 +50,8 @@ use azure::{AzFilterNodeSetSourceSurfaceInput, AzReleaseFilterNode, AzDrawTarget use azure::{AzFilterNodeSetColorAttribute, AzFilterNodeSetFloatAttribute}; use azure::{AzFilterNodeSetMatrix5x4Attribute, AzFilterNodeSetFilterNodeInput}; use azure::{AzFilterNodeSetFloatArrayAttribute, AzFilterNodeSetBoolAttribute}; -use azure::{AzDrawTargetDrawFilter, AzFilterNodeRef, AzFilterType, AzPathBuilderBezierTo}; +use azure::{AzDrawTargetDrawFilter, AzFilterNodeRef, AzFilterType}; +use azure::{AzPathBuilderBezierTo, AzPathBuilderQuadraticBezierTo}; use azure::{AzPathBuilderClose}; use geom::matrix2d::Matrix2D; @@ -984,6 +985,17 @@ impl PathBuilder { } } + /// Adds a quadratic Bézier curve to the current figure. + pub fn quadratic_curve_to(&self, + control_point: &Point2D, + end_point: &Point2D) { + unsafe { + AzPathBuilderQuadraticBezierTo(self.azure_path_builder, + &control_point.as_azure_point(), + &end_point.as_azure_point()) + } + } + /// Adds a cubic Bézier curve to the current figure. pub fn bezier_curve_to(&self, control_point_1: &Point2D,