Change getConvexity() to now compute it if the value is set to kUnkown.
Change behavior for degenerate paths: now those return kConvex instead of kUnknown
git-svn-id: http://skia.googlecode.com/svn/trunk@1330 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/core/SkPath.cpp b/src/core/SkPath.cpp
index 68eb35d..ca57237 100644
--- a/src/core/SkPath.cpp
+++ b/src/core/SkPath.cpp
@@ -254,6 +254,12 @@
//////////////////////////////////////////////////////////////////////////////
// Construction methods
+#define DIRTY_AFTER_EDIT \
+ do { \
+ fBoundsIsDirty = true; \
+ fConvexity = kUnknown_Convexity;\
+ } while (0)
+
void SkPath::incReserve(U16CPU inc) {
SkDEBUGCODE(this->validate();)
@@ -278,7 +284,7 @@
pt->set(x, y);
GEN_ID_INC;
- fBoundsIsDirty = true;
+ DIRTY_AFTER_EDIT;
}
void SkPath::rMoveTo(SkScalar x, SkScalar y) {
@@ -298,7 +304,7 @@
*fVerbs.append() = kLine_Verb;
GEN_ID_INC;
- fBoundsIsDirty = true;
+ DIRTY_AFTER_EDIT;
}
void SkPath::rLineTo(SkScalar x, SkScalar y) {
@@ -321,7 +327,7 @@
*fVerbs.append() = kQuad_Verb;
GEN_ID_INC;
- fBoundsIsDirty = true;
+ DIRTY_AFTER_EDIT;
}
void SkPath::rQuadTo(SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2) {
@@ -345,7 +351,7 @@
*fVerbs.append() = kCubic_Verb;
GEN_ID_INC;
- fBoundsIsDirty = true;
+ DIRTY_AFTER_EDIT;
}
void SkPath::rCubicTo(SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2,
@@ -1293,7 +1299,7 @@
buffer.read(fVerbs.begin(), fVerbs.count());
GEN_ID_INC;
- fBoundsIsDirty = true;
+ DIRTY_AFTER_EDIT;
SkDEBUGCODE(this->validate();)
}
@@ -1410,7 +1416,7 @@
// only valid for a single contour
struct Convexicator {
- Convexicator() : fPtCount(0), fConvexity(SkPath::kUnknown_Convexity) {
+ Convexicator() : fPtCount(0), fConvexity(SkPath::kConvex_Convexity) {
fSign = 0;
// warnings
fCurrPt.set(0, 0);
@@ -1472,9 +1478,7 @@
if (0 == fSign) {
fSign = sign;
} else if (sign) {
- if (fSign == sign) {
- fConvexity = SkPath::kConvex_Convexity;
- } else {
+ if (fSign != sign) {
fConvexity = SkPath::kConcave_Convexity;
}
}