diff options
author | 2017-11-08 11:44:31 -0500 | |
---|---|---|
committer | 2017-11-08 18:25:17 +0000 | |
commit | df429f3beac1c191289ba1e3bd918bf84df57bf5 (patch) | |
tree | 65f7f049b218ef8984d054524c05dd3fcea392a3 /src/core/SkPath.cpp | |
parent | 21ad53fd8839af82bcb11da6ab3e256ee7752f2b (diff) |
move parts of SkPoint to SkPointPriv
Move specialized SkPoint methods to SkPointPriv.
Use constexpr and inline initialization where possible.
R=reed@google.com,bsalomon@google.com
Bug: skia: 6898
Change-Id: I01ec5186f010f2dc80c068c70d9cc352f3221338
Reviewed-on: https://skia-review.googlesource.com/68700
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Ravi Mistry <rmistry@google.com>
Diffstat (limited to 'src/core/SkPath.cpp')
-rw-r--r-- | src/core/SkPath.cpp | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/src/core/SkPath.cpp b/src/core/SkPath.cpp index a053c767dc..1b443b2f46 100644 --- a/src/core/SkPath.cpp +++ b/src/core/SkPath.cpp @@ -14,6 +14,7 @@ #include "SkMatrixPriv.h" #include "SkPathPriv.h" #include "SkPathRef.h" +#include "SkPointPriv.h" #include "SkRRect.h" static float poly_eval(float A, float B, float C, float t) { @@ -2408,7 +2409,7 @@ struct Convexicator { ++fPtCount; } else { SkVector vec = pt - fCurrPt; - SkScalar lengthSqd = vec.lengthSqd(); + SkScalar lengthSqd = SkPointPriv::LengthSqd(vec); if (!SkScalarIsFinite(lengthSqd)) { fIsFinite = false; } else if (lengthSqd) { @@ -2470,8 +2471,10 @@ struct Convexicator { } } - if (!SkScalarNearlyZero(fLastVec.lengthSqd(), SK_ScalarNearlyZero*SK_ScalarNearlyZero) && - !SkScalarNearlyZero(curVec.lengthSqd(), SK_ScalarNearlyZero*SK_ScalarNearlyZero) && + if (!SkScalarNearlyZero(SkPointPriv::LengthSqd(fLastVec), + SK_ScalarNearlyZero*SK_ScalarNearlyZero) && + !SkScalarNearlyZero(SkPointPriv::LengthSqd(curVec), + SK_ScalarNearlyZero*SK_ScalarNearlyZero) && fLastVec.dot(curVec) < 0.0f) { return kBackwards_DirChange; } @@ -3352,7 +3355,7 @@ bool SkPath::contains(SkScalar x, SkScalar y) const { if (tangents.count() > oldCount) { int last = tangents.count() - 1; const SkVector& tangent = tangents[last]; - if (SkScalarNearlyZero(tangent.lengthSqd())) { + if (SkScalarNearlyZero(SkPointPriv::LengthSqd(tangent))) { tangents.remove(last); } else { for (int index = 0; index < last; ++index) { @@ -3601,3 +3604,21 @@ DONE: max.store((SkPoint*)&bounds.fRight); return bounds; } + +bool SkPath::IsLineDegenerate(const SkPoint& p1, const SkPoint& p2, bool exact) { + return exact ? p1 == p2 : SkPointPriv::EqualsWithinTolerance(p1, p2); +} + +bool SkPath::IsQuadDegenerate(const SkPoint& p1, const SkPoint& p2, + const SkPoint& p3, bool exact) { + return exact ? p1 == p2 && p2 == p3 : SkPointPriv::EqualsWithinTolerance(p1, p2) && + SkPointPriv::EqualsWithinTolerance(p2, p3); +} + +bool SkPath::IsCubicDegenerate(const SkPoint& p1, const SkPoint& p2, + const SkPoint& p3, const SkPoint& p4, bool exact) { + return exact ? p1 == p2 && p2 == p3 && p3 == p4 : + SkPointPriv::EqualsWithinTolerance(p1, p2) && + SkPointPriv::EqualsWithinTolerance(p2, p3) && + SkPointPriv::EqualsWithinTolerance(p3, p4); +} |