| Index: src/core/SkPath.cpp
|
| ===================================================================
|
| --- src/core/SkPath.cpp (revision 9702)
|
| +++ src/core/SkPath.cpp (working copy)
|
| @@ -219,68 +219,75 @@
|
| #else
|
| : fPathRef(SkPathRef::CreateEmpty())
|
| #endif
|
| - , fFillType(kWinding_FillType)
|
| - , fBoundsIsDirty(true) {
|
| +#ifdef SK_BUILD_FOR_ANDROID
|
| + , fGenerationID(0)
|
| +#endif
|
| +{
|
| + this->resetFields();
|
| +}
|
| +
|
| +void SkPath::resetFields() {
|
| + //fPathRef is assumed to have been emptied by the caller.
|
| + fLastMoveToIndex = INITIAL_LASTMOVETOINDEX_VALUE;
|
| + fFillType = kWinding_FillType;
|
| + fSegmentMask = 0;
|
| + fBoundsIsDirty = true;
|
| fConvexity = kUnknown_Convexity;
|
| fDirection = kUnknown_Direction;
|
| - fSegmentMask = 0;
|
| - fLastMoveToIndex = INITIAL_LASTMOVETOINDEX_VALUE;
|
| + fIsFinite = false;
|
| fIsOval = false;
|
| - fIsFinite = false; // gets computed when we know our bounds
|
| #ifdef SK_BUILD_FOR_ANDROID
|
| - fGenerationID = 0;
|
| + GEN_ID_INC;
|
| fSourcePath = NULL;
|
| #endif
|
| }
|
|
|
| -SkPath::SkPath(const SkPath& src)
|
| +SkPath::SkPath(const SkPath& that)
|
| #if SK_DEBUG_PATH_REF
|
| : fPathRef(this)
|
| +#else
|
| + : fPathRef(SkRef(that.fPathRef.get()))
|
| #endif
|
| -{
|
| - SkDEBUGCODE(src.validate();)
|
| - src.fPathRef.get()->ref();
|
| - fPathRef.reset(src.fPathRef.get());
|
| - fBounds = src.fBounds;
|
| - fFillType = src.fFillType;
|
| - fBoundsIsDirty = src.fBoundsIsDirty;
|
| - fConvexity = src.fConvexity;
|
| - fDirection = src.fDirection;
|
| - fIsFinite = src.fIsFinite;
|
| - fSegmentMask = src.fSegmentMask;
|
| - fLastMoveToIndex = src.fLastMoveToIndex;
|
| - fIsOval = src.fIsOval;
|
| #ifdef SK_BUILD_FOR_ANDROID
|
| - fGenerationID = src.fGenerationID;
|
| - fSourcePath = NULL;
|
| + , fGenerationID(0)
|
| #endif
|
| +{
|
| + this->copyFields(that);
|
| + SkDEBUGCODE(that.validate();)
|
| }
|
|
|
| SkPath::~SkPath() {
|
| SkDEBUGCODE(this->validate();)
|
| }
|
|
|
| -SkPath& SkPath::operator=(const SkPath& src) {
|
| - SkDEBUGCODE(src.validate();)
|
| +SkPath& SkPath::operator=(const SkPath& that) {
|
| + SkDEBUGCODE(that.validate();)
|
|
|
| - if (this != &src) {
|
| - src.fPathRef.get()->ref();
|
| - fPathRef.reset(src.fPathRef.get());
|
| - fBounds = src.fBounds;
|
| - fFillType = src.fFillType;
|
| - fBoundsIsDirty = src.fBoundsIsDirty;
|
| - fConvexity = src.fConvexity;
|
| - fDirection = src.fDirection;
|
| - fIsFinite = src.fIsFinite;
|
| - fSegmentMask = src.fSegmentMask;
|
| - fLastMoveToIndex = src.fLastMoveToIndex;
|
| - fIsOval = src.fIsOval;
|
| - GEN_ID_INC;
|
| + if (this != &that) {
|
| + fPathRef.reset(SkRef(that.fPathRef.get()));
|
| + this->copyFields(that);
|
| }
|
| SkDEBUGCODE(this->validate();)
|
| return *this;
|
| }
|
|
|
| +void SkPath::copyFields(const SkPath& that) {
|
| + //fPathRef is assumed to have been set by the caller.
|
| + fBounds = that.fBounds;
|
| + fLastMoveToIndex = that.fLastMoveToIndex;
|
| + fFillType = that.fFillType;
|
| + fSegmentMask = that.fSegmentMask;
|
| + fBoundsIsDirty = that.fBoundsIsDirty;
|
| + fConvexity = that.fConvexity;
|
| + fDirection = that.fDirection;
|
| + fIsFinite = that.fIsFinite;
|
| + fIsOval = that.fIsOval;
|
| +#ifdef SK_BUILD_FOR_ANDROID
|
| + GEN_ID_INC;
|
| + fSourcePath = NULL;
|
| +#endif
|
| +}
|
| +
|
| SK_API bool operator==(const SkPath& a, const SkPath& b) {
|
| // note: don't need to look at isConvex or bounds, since just comparing the
|
| // raw data is sufficient.
|
| @@ -294,21 +301,22 @@
|
| *a.fPathRef.get() == *b.fPathRef.get());
|
| }
|
|
|
| -void SkPath::swap(SkPath& other) {
|
| - SkASSERT(&other != NULL);
|
| +void SkPath::swap(SkPath& that) {
|
| + SkASSERT(&that != NULL);
|
|
|
| - if (this != &other) {
|
| - SkTSwap<SkRect>(fBounds, other.fBounds);
|
| - fPathRef.swap(&other.fPathRef);
|
| - SkTSwap<uint8_t>(fFillType, other.fFillType);
|
| - SkTSwap<uint8_t>(fBoundsIsDirty, other.fBoundsIsDirty);
|
| - SkTSwap<uint8_t>(fConvexity, other.fConvexity);
|
| - SkTSwap<uint8_t>(fDirection, other.fDirection);
|
| - SkTSwap<uint8_t>(fSegmentMask, other.fSegmentMask);
|
| - SkTSwap<int>(fLastMoveToIndex, other.fLastMoveToIndex);
|
| - SkTSwap<SkBool8>(fIsOval, other.fIsOval);
|
| - SkTSwap<SkBool8>(fIsFinite, other.fIsFinite);
|
| + if (this != &that) {
|
| + fPathRef.swap(&that.fPathRef);
|
| + SkTSwap<SkRect>(fBounds, that.fBounds);
|
| + SkTSwap<int>(fLastMoveToIndex, that.fLastMoveToIndex);
|
| + SkTSwap<uint8_t>(fFillType, that.fFillType);
|
| + SkTSwap<uint8_t>(fSegmentMask, that.fSegmentMask);
|
| + SkTSwap<uint8_t>(fBoundsIsDirty, that.fBoundsIsDirty);
|
| + SkTSwap<uint8_t>(fConvexity, that.fConvexity);
|
| + SkTSwap<uint8_t>(fDirection, that.fDirection);
|
| + SkTSwap<SkBool8>(fIsFinite, that.fIsFinite);
|
| + SkTSwap<SkBool8>(fIsOval, that.fIsOval);
|
| GEN_ID_INC;
|
| + GEN_ID_PTR_INC(&that);
|
| }
|
| }
|
|
|
| @@ -411,25 +419,14 @@
|
| SkDEBUGCODE(this->validate();)
|
|
|
| fPathRef.reset(SkPathRef::CreateEmpty());
|
| - GEN_ID_INC;
|
| - fBoundsIsDirty = true;
|
| - fConvexity = kUnknown_Convexity;
|
| - fDirection = kUnknown_Direction;
|
| - fSegmentMask = 0;
|
| - fLastMoveToIndex = INITIAL_LASTMOVETOINDEX_VALUE;
|
| - fIsOval = false;
|
| + this->resetFields();
|
| }
|
|
|
| void SkPath::rewind() {
|
| SkDEBUGCODE(this->validate();)
|
|
|
| SkPathRef::Rewind(&fPathRef);
|
| - GEN_ID_INC;
|
| - fConvexity = kUnknown_Convexity;
|
| - fBoundsIsDirty = true;
|
| - fSegmentMask = 0;
|
| - fLastMoveToIndex = INITIAL_LASTMOVETOINDEX_VALUE;
|
| - fIsOval = false;
|
| + this->resetFields();
|
| }
|
|
|
| bool SkPath::isEmpty() const {
|
|
|