experimental start to arcs
git-svn-id: http://skia.googlecode.com/svn/trunk@8665 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/core/SkGeometry.cpp b/src/core/SkGeometry.cpp
index 0d4a9c7..1198cfa 100644
--- a/src/core/SkGeometry.cpp
+++ b/src/core/SkGeometry.cpp
@@ -1380,3 +1380,36 @@
matrix.mapPoints(quadPoints, pointCount);
return pointCount;
}
+
+///////////////////////////////////////////////////////////////////////////////
+
+static SkScalar eval_ratquad(const SkScalar src[], SkScalar w, SkScalar t) {
+ SkASSERT(src);
+ SkASSERT(t >= 0 && t <= SK_Scalar1);
+
+ SkScalar src2w = SkScalarMul(src[2], w);
+ SkScalar C = src[0];
+ SkScalar A = src[4] - 2 * src2w + C;
+ SkScalar B = 2 * (src2w - C);
+ SkScalar numer = SkScalarMulAdd(SkScalarMulAdd(A, t, B), t, C);
+
+ B = 2 * (w - SK_Scalar1);
+ C = SK_Scalar1;
+ A = -B;
+ SkScalar denom = SkScalarMulAdd(SkScalarMulAdd(A, t, B), t, C);
+
+ return SkScalarDiv(numer, denom);
+}
+
+void SkRationalQuad::evalAt(SkScalar t, SkPoint* pt) const {
+ SkASSERT(t >= 0 && t <= SK_Scalar1);
+
+ if (pt) {
+ pt->set(eval_ratquad(&fPts[0].fX, fW, t),
+ eval_ratquad(&fPts[0].fY, fW, t));
+ }
+}
+
+void SkRationalQuad::chopAt(SkScalar t, SkRationalQuad dst[2]) const {
+}
+