Index: src/core/SkPath.cpp |
=================================================================== |
--- src/core/SkPath.cpp (revision 12456) |
+++ src/core/SkPath.cpp (working copy) |
@@ -42,22 +42,6 @@ |
return SkPath::kDone_Verb == iter.next(pts); |
} |
-class SkAutoDisableOvalCheck { |
-public: |
- SkAutoDisableOvalCheck(SkPath* path) : fPath(path) { |
- fSaved = fPath->fIsOval; |
- } |
- |
- ~SkAutoDisableOvalCheck() { |
- fPath->fIsOval = fSaved; |
- } |
- |
-private: |
- SkPath* fPath; |
- bool fSaved; |
-}; |
-#define SkAutoDisableOvalCheck(...) SK_REQUIRE_LOCAL_VAR(SkAutoDisableOvalCheck) |
- |
class SkAutoDisableDirectionCheck { |
public: |
SkAutoDisableDirectionCheck(SkPath* path) : fPath(path) { |
@@ -84,7 +68,7 @@ |
It also notes if the path was originally degenerate, and if so, sets |
isConvex to true. Thus it can only be used if the contour being added is |
- convex (which is always true since we only allow the addition of rects). |
+ convex. |
*/ |
class SkAutoPathBoundsUpdate { |
public: |
@@ -164,7 +148,6 @@ |
fSegmentMask = 0; |
fConvexity = kUnknown_Convexity; |
fDirection = kUnknown_Direction; |
- fIsOval = false; |
// We don't touch Android's fSourcePath. It's used to track texture garbage collection, so we |
// don't want to muck with it if it's been set to something non-NULL. |
@@ -204,7 +187,6 @@ |
fSegmentMask = that.fSegmentMask; |
fConvexity = that.fConvexity; |
fDirection = that.fDirection; |
- fIsOval = that.fIsOval; |
} |
bool operator==(const SkPath& a, const SkPath& b) { |
@@ -230,7 +212,6 @@ |
SkTSwap<uint8_t>(fSegmentMask, that.fSegmentMask); |
SkTSwap<uint8_t>(fConvexity, that.fConvexity); |
SkTSwap<uint8_t>(fDirection, that.fDirection); |
- SkTSwap<SkBool8>(fIsOval, that.fIsOval); |
#ifdef SK_BUILD_FOR_ANDROID |
SkTSwap<const SkPath*>(fSourcePath, that.fSourcePath); |
#endif |
@@ -631,7 +612,6 @@ |
if (count == 0) { |
this->moveTo(x, y); |
} else { |
- fIsOval = false; |
SkPathRef::Editor ed(&fPathRef); |
ed.atPoint(count-1)->set(x, y); |
} |
@@ -650,7 +630,6 @@ |
do { \ |
fConvexity = kUnknown_Convexity; \ |
fDirection = kUnknown_Direction; \ |
- fIsOval = false; \ |
} while (0) |
void SkPath::incReserve(U16CPU inc) { |
@@ -1263,14 +1242,13 @@ |
We can't simply check isEmpty() in this case, as additional |
moveTo() would mark the path non empty. |
*/ |
- fIsOval = hasOnlyMoveTos(); |
- if (fIsOval) { |
+ bool isOval = hasOnlyMoveTos(); |
+ if (isOval) { |
fDirection = dir; |
} else { |
fDirection = kUnknown_Direction; |
} |
- SkAutoDisableOvalCheck adoc(this); |
SkAutoDisableDirectionCheck addc(this); |
SkAutoPathBoundsUpdate apbu(this, oval); |
@@ -1318,14 +1296,10 @@ |
this->quadTo( R, cy - sy, R, cy ); |
} |
this->close(); |
-} |
-bool SkPath::isOval(SkRect* rect) const { |
- if (fIsOval && rect) { |
- *rect = getBounds(); |
- } |
+ SkPathRef::Editor ed(&fPathRef); |
- return fIsOval; |
+ ed.setIsOval(isOval); |
} |
void SkPath::addCircle(SkScalar x, SkScalar y, SkScalar r, Direction dir) { |
@@ -1459,8 +1433,6 @@ |
void SkPath::addPath(const SkPath& path, const SkMatrix& matrix) { |
SkPathRef::Editor(&fPathRef, path.countVerbs(), path.countPoints()); |
- fIsOval = false; |
- |
RawIter iter(path); |
SkPoint pts[4]; |
Verb verb; |
@@ -1525,8 +1497,6 @@ |
SkPathRef::Editor(&fPathRef, vcount, path.countPoints()); |
- fIsOval = false; |
- |
const uint8_t* verbs = path.fPathRef->verbs(); |
const SkPoint* pts = path.fPathRef->points(); |
const SkScalar* conicWeights = path.fPathRef->conicWeights(); |
@@ -1574,8 +1544,6 @@ |
const uint8_t* verbsEnd = src.fPathRef->verbs(); // points just past the first verb |
const SkScalar* conicWeights = src.fPathRef->conicWeightsEnd(); |
- fIsOval = false; |
- |
bool needMove = true; |
bool needClose = false; |
while (verbs < verbsEnd) { |
@@ -1725,9 +1693,6 @@ |
} |
} |
- // It's an oval only if it stays a rect. |
- dst->fIsOval = fIsOval && matrix.rectStaysRect(); |
- |
SkDEBUGCODE(dst->validate();) |
} |
} |
@@ -2080,14 +2045,16 @@ |
SkWBuffer buffer(storage); |
- int32_t packed = ((fIsOval & 1) << kIsOval_SerializationShift) | |
- (fConvexity << kConvexity_SerializationShift) | |
+ int32_t packed = (fConvexity << kConvexity_SerializationShift) | |
(fFillType << kFillType_SerializationShift) | |
(fSegmentMask << kSegmentMask_SerializationShift) | |
(fDirection << kDirection_SerializationShift) |
#ifndef DELETE_THIS_CODE_WHEN_SKPS_ARE_REBUILT_AT_V14_AND_ALL_OTHER_INSTANCES_TOO |
| (0x1 << kNewFormat_SerializationShift) |
#endif |
+#ifndef DELETE_THIS_CODE_WHEN_SKPS_ARE_REBUILT_AT_V16_AND_ALL_OTHER_INSTANCES_TOO |
+ | (0x1 << kNewFormat2_SerializationShift) |
+#endif |
; |
buffer.write32(packed); |
@@ -2106,17 +2073,16 @@ |
return 0; |
} |
- fIsOval = (packed >> kIsOval_SerializationShift) & 1; |
fConvexity = (packed >> kConvexity_SerializationShift) & 0xFF; |
fFillType = (packed >> kFillType_SerializationShift) & 0xFF; |
fSegmentMask = (packed >> kSegmentMask_SerializationShift) & 0xF; |
fDirection = (packed >> kDirection_SerializationShift) & 0x3; |
-#ifndef DELETE_THIS_CODE_WHEN_SKPS_ARE_REBUILT_AT_V14_AND_ALL_OTHER_INSTANCES_TOO |
- bool newFormat = (packed >> kNewFormat_SerializationShift) & 1; |
+#ifndef DELETE_THIS_CODE_WHEN_SKPS_ARE_REBUILT_AT_V16_AND_ALL_OTHER_INSTANCES_TOO |
+ bool newFormat = (packed >> kNewFormat2_SerializationShift) & 1; |
#endif |
SkPathRef* pathRef = SkPathRef::CreateFromBuffer(&buffer |
-#ifndef DELETE_THIS_CODE_WHEN_SKPS_ARE_REBUILT_AT_V14_AND_ALL_OTHER_INSTANCES_TOO |
+#ifndef DELETE_THIS_CODE_WHEN_SKPS_ARE_REBUILT_AT_V16_AND_ALL_OTHER_INSTANCES_TOO |
, newFormat, packed |
#endif |
); |