Chromium Code Reviews| Index: src/core/SkPath.cpp |
| diff --git a/src/core/SkPath.cpp b/src/core/SkPath.cpp |
| index 2babe70185d51cabb9059f47c774acd2d1f80d74..dd7066f057b1750ed1ad71585712524e84fda4a7 100644 |
| --- a/src/core/SkPath.cpp |
| +++ b/src/core/SkPath.cpp |
| @@ -2129,7 +2129,8 @@ struct Convexicator { |
| : fPtCount(0) |
| , fConvexity(SkPath::kConvex_Convexity) |
| , fDirection(SkPath::kUnknown_Direction) |
| - , fIsFinite(true) { |
| + , fIsFinite(true) |
| + , fIsCurve(false) { |
| fExpectedDir = kInvalid_DirChange; |
| // warnings |
| fLastPt.set(0, 0); |
| @@ -2193,6 +2194,10 @@ struct Convexicator { |
| return fIsFinite; |
| } |
| + void setCurve(bool isCurve) { |
| + fIsCurve = isCurve; |
| + } |
| + |
| private: |
| void addVec(const SkVector& vec) { |
| SkASSERT(vec.fX || vec.fY); |
| @@ -2213,6 +2218,10 @@ private: |
| case kStraight_DirChange: |
| break; |
| case kBackwards_DirChange: |
| + if (fIsCurve) { |
| + fConvexity = SkPath::kConcave_Convexity; |
| + fDirection = SkPath::kUnknown_Direction; |
| + } |
| fLastVec = vec; |
| break; |
| case kInvalid_DirChange: |
| @@ -2232,6 +2241,7 @@ private: |
| SkPath::Direction fDirection; |
| int fDx, fDy, fSx, fSy; |
| bool fIsFinite; |
| + bool fIsCurve; |
| }; |
| SkPath::Convexity SkPath::internalGetConvexity() const { |
| @@ -2255,13 +2265,20 @@ SkPath::Convexity SkPath::internalGetConvexity() const { |
| return kConcave_Convexity; |
| } |
| pts[1] = pts[0]; |
|
robertphillips
2015/03/02 17:18:44
// fall through ?
caryclark
2015/03/02 17:55:56
Done.
|
| + case kLine_Verb: |
| count = 1; |
| + state.setCurve(false); |
| + break; |
|
robertphillips
2015/03/02 17:18:45
// fall throughs ?
caryclark
2015/03/02 17:55:56
Done.
|
| + case kQuad_Verb: |
| + case kConic_Verb: |
| + case kCubic_Verb: |
| + count = 2 + (kCubic_Verb == verb); |
| + // As an additional enhancement, this could set curve true only |
| + // if the curve is nonlinear |
| + state.setCurve(true); |
| break; |
| - case kLine_Verb: count = 1; break; |
| - case kQuad_Verb: count = 2; break; |
| - case kConic_Verb: count = 2; break; |
| - case kCubic_Verb: count = 3; break; |
| case kClose_Verb: |
| + state.setCurve(false); |
| state.close(); |
| count = 0; |
| break; |