| Index: include/core/SkPathRef.h
|
| ===================================================================
|
| --- include/core/SkPathRef.h (revision 12456)
|
| +++ include/core/SkPathRef.h (working copy)
|
| @@ -23,7 +23,7 @@
|
| * Holds the path verbs and points. It is versioned by a generation ID. None of its public methods
|
| * modify the contents. To modify or append to the verbs/points wrap the SkPathRef in an
|
| * SkPathRef::Editor object. Installing the editor resets the generation ID. It also performs
|
| - * copy-on-write if the SkPathRef is shared by multipls SkPaths. The caller passes the Editor's
|
| + * copy-on-write if the SkPathRef is shared by multiple SkPaths. The caller passes the Editor's
|
| * constructor a SkAutoTUnref, which may be updated to point to a new SkPathRef after the editor's
|
| * constructor returns.
|
| *
|
| @@ -100,6 +100,8 @@
|
| */
|
| SkPathRef* pathRef() { return fPathRef; }
|
|
|
| + void setIsOval(bool isOval) { fPathRef->setIsOval(isOval); }
|
| +
|
| private:
|
| SkPathRef* fPathRef;
|
| };
|
| @@ -121,6 +123,24 @@
|
| return SkToBool(fIsFinite);
|
| }
|
|
|
| + /** Returns true if the path is an oval.
|
| + *
|
| + * @param rect returns the bounding rect of this oval. It's a circle
|
| + * if the height and width are the same.
|
| + *
|
| + * @return true if this path is an oval.
|
| + * Tracking whether a path is an oval is considered an
|
| + * optimization for performance and so some paths that are in
|
| + * fact ovals can report false.
|
| + */
|
| + bool isOval(SkRect* rect) const {
|
| + if (fIsOval && NULL != rect) {
|
| + *rect = getBounds();
|
| + }
|
| +
|
| + return SkToBool(fIsOval);
|
| + }
|
| +
|
| bool hasComputedBounds() const {
|
| return !fBoundsIsDirty;
|
| }
|
| @@ -152,7 +172,7 @@
|
| const SkMatrix& matrix);
|
|
|
| static SkPathRef* CreateFromBuffer(SkRBuffer* 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
|
| , bool newFormat, int32_t oldPacked
|
| #endif
|
| );
|
| @@ -237,6 +257,7 @@
|
| private:
|
| enum SerializationOffsets {
|
| kIsFinite_SerializationShift = 25, // requires 1 bit
|
| + kIsOval_SerializationShift = 24, // requires 1 bit
|
| };
|
|
|
| SkPathRef() {
|
| @@ -247,6 +268,7 @@
|
| fPoints = NULL;
|
| fFreeSpace = 0;
|
| fGenerationID = kEmptyGenID;
|
| + fIsOval = false;
|
| SkDEBUGCODE(fEditorsAttached = 0;)
|
| SkDEBUGCODE(this->validate();)
|
| }
|
| @@ -289,6 +311,8 @@
|
| fBoundsIsDirty = true; // this also invalidates fIsFinite
|
| fGenerationID = 0;
|
|
|
| + fIsOval = false;
|
| +
|
| size_t newSize = sizeof(uint8_t) * verbCount + sizeof(SkPoint) * pointCount;
|
| size_t newReserve = sizeof(uint8_t) * reserveVerbs + sizeof(SkPoint) * reservePoints;
|
| size_t minSize = newSize + newReserve;
|
| @@ -394,6 +418,8 @@
|
| */
|
| static void CreateEmptyImpl(SkPathRef** empty);
|
|
|
| + void setIsOval(bool isOval) { fIsOval = isOval; }
|
| +
|
| enum {
|
| kMinSize = 256,
|
| };
|
| @@ -401,6 +427,7 @@
|
| mutable SkRect fBounds;
|
| mutable uint8_t fBoundsIsDirty;
|
| mutable SkBool8 fIsFinite; // only meaningful if bounds are valid
|
| + mutable SkBool8 fIsOval;
|
|
|
| SkPoint* fPoints; // points to begining of the allocation
|
| uint8_t* fVerbs; // points just past the end of the allocation (verbs grow backwards)
|
|
|