| Index: src/core/SkPathMeasure.cpp
|
| diff --git a/src/core/SkPathMeasure.cpp b/src/core/SkPathMeasure.cpp
|
| index 5c4398527e1c06842798dbf9a88ead2a5ed159b7..d422f6d77a7c1ec24e2c0444430dcef1afc5fdb4 100644
|
| --- a/src/core/SkPathMeasure.cpp
|
| +++ b/src/core/SkPathMeasure.cpp
|
| @@ -61,7 +61,7 @@ static inline int tspan_big_enough(int tspan) {
|
| // so we compare midpoints
|
| #define CHEAP_DIST_LIMIT (SK_Scalar1/2) // just made this value up
|
|
|
| -static bool quad_too_curvy(const SkPoint pts[3]) {
|
| +bool SkPathMeasure::quad_too_curvy(const SkPoint pts[3]) {
|
| // diff = (a/4 + b/2 + c/4) - (a/2 + c/2)
|
| // diff = -a/4 + b/2 - c/4
|
| SkScalar dx = SkScalarHalf(pts[1].fX) -
|
| @@ -70,28 +70,28 @@ static bool quad_too_curvy(const SkPoint pts[3]) {
|
| SkScalarHalf(SkScalarHalf(pts[0].fY + pts[2].fY));
|
|
|
| SkScalar dist = SkMaxScalar(SkScalarAbs(dx), SkScalarAbs(dy));
|
| - return dist > CHEAP_DIST_LIMIT;
|
| + return dist > fTolerance;
|
| }
|
|
|
| #ifndef SK_SUPPORT_LEGACY_CONIC_MEASURE
|
| -static bool conic_too_curvy(const SkPoint& firstPt, const SkPoint& midTPt,
|
| +bool SkPathMeasure::conic_too_curvy(const SkPoint& firstPt, const SkPoint& midTPt,
|
| const SkPoint& lastPt) {
|
| SkPoint midEnds = firstPt + lastPt;
|
| midEnds *= 0.5f;
|
| SkVector dxy = midTPt - midEnds;
|
| SkScalar dist = SkMaxScalar(SkScalarAbs(dxy.fX), SkScalarAbs(dxy.fY));
|
| - return dist > CHEAP_DIST_LIMIT;
|
| + return dist > fTolerance;
|
| }
|
| #endif
|
|
|
| -static bool cheap_dist_exceeds_limit(const SkPoint& pt,
|
| +bool SkPathMeasure::cheap_dist_exceeds_limit(const SkPoint& pt,
|
| SkScalar x, SkScalar y) {
|
| SkScalar dist = SkMaxScalar(SkScalarAbs(x - pt.fX), SkScalarAbs(y - pt.fY));
|
| // just made up the 1/2
|
| - return dist > CHEAP_DIST_LIMIT;
|
| + return dist > fTolerance;
|
| }
|
|
|
| -static bool cubic_too_curvy(const SkPoint pts[4]) {
|
| +bool SkPathMeasure::cubic_too_curvy(const SkPoint pts[4]) {
|
| return cheap_dist_exceeds_limit(pts[1],
|
| SkScalarInterp(pts[0].fX, pts[3].fX, SK_Scalar1/3),
|
| SkScalarInterp(pts[0].fY, pts[3].fY, SK_Scalar1/3))
|
| @@ -529,13 +529,19 @@ static void seg_to(const SkPoint pts[], int segType,
|
|
|
| SkPathMeasure::SkPathMeasure() {
|
| fPath = nullptr;
|
| + fTolerance = CHEAP_DIST_LIMIT;
|
| fLength = -1; // signal we need to compute it
|
| fForceClosed = false;
|
| fFirstPtIndex = -1;
|
| }
|
|
|
| -SkPathMeasure::SkPathMeasure(const SkPath& path, bool forceClosed) {
|
| +SkPathMeasure::SkPathMeasure(const SkPath& path, bool forceClosed, SkScalar resScale) {
|
| fPath = &path;
|
| +#ifdef SK_SUPPORT_LEGACY_DASH_MEASURE
|
| + fTolerance = CHEAP_DIST_LIMIT;
|
| +#else
|
| + fTolerance = CHEAP_DIST_LIMIT * SkScalarInvert(resScale);
|
| +#endif
|
| fLength = -1; // signal we need to compute it
|
| fForceClosed = forceClosed;
|
| fFirstPtIndex = -1;
|
|
|