| Index: include/core/SkPath.h
|
| ===================================================================
|
| --- include/core/SkPath.h (revision 11888)
|
| +++ include/core/SkPath.h (working copy)
|
| @@ -93,7 +93,7 @@
|
| void toggleInverseFillType() {
|
| fFillType ^= 2;
|
| GEN_ID_INC;
|
| - }
|
| + }
|
|
|
| enum Convexity {
|
| kUnknown_Convexity,
|
| @@ -106,11 +106,7 @@
|
| * then this function will attempt to compute the convexity (and cache the result).
|
| */
|
| Convexity getConvexity() const {
|
| - if (kUnknown_Convexity != fConvexity) {
|
| - return static_cast<Convexity>(fConvexity);
|
| - } else {
|
| - return this->internalGetConvexity();
|
| - }
|
| + return static_cast<Convexity>(fPathRef->getConvexity());
|
| }
|
|
|
| /**
|
| @@ -119,7 +115,9 @@
|
| * ComputeConvexity and cache its return value if the current setting is
|
| * kUnknown.
|
| */
|
| - Convexity getConvexityOrUnknown() const { return (Convexity)fConvexity; }
|
| + Convexity getConvexityOrUnknown() const {
|
| + return static_cast<Convexity>(fPathRef->getConvexityOrUnknown());
|
| + }
|
|
|
| /**
|
| * Store a convexity setting in the path. There is no automatic check to
|
| @@ -162,7 +160,7 @@
|
| * optimization for performance and so some paths that are in
|
| * fact ovals can report false.
|
| */
|
| - bool isOval(SkRect* rect) const;
|
| + bool isOval(SkRect* rect) const { return fPathRef->isOval(rect); }
|
|
|
| /** Clear any lines and curves from the path, making it empty. This frees up
|
| internal storage associated with those segments.
|
| @@ -457,8 +455,8 @@
|
| @param dy3 The amount to add to the y-coordinate of the last point on
|
| this contour, to specify the end point of a cubic curve
|
| */
|
| - void rCubicTo(SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2,
|
| - SkScalar x3, SkScalar y3);
|
| + void rCubicTo(SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2,
|
| + SkScalar x3, SkScalar y3);
|
|
|
| /** Append the specified arc to the path as a new contour. If the start of
|
| the path is different from the path's current last point, then an
|
| @@ -472,8 +470,8 @@
|
| treated mod 360.
|
| @param forceMoveTo If true, always begin a new contour with the arc
|
| */
|
| - void arcTo(const SkRect& oval, SkScalar startAngle, SkScalar sweepAngle,
|
| - bool forceMoveTo);
|
| + void arcTo(const SkRect& oval, SkScalar startAngle, SkScalar sweepAngle,
|
| + bool forceMoveTo);
|
|
|
| /** Append a line and arc to the current path. This is the same as the
|
| PostScript call "arct".
|
| @@ -552,7 +550,17 @@
|
| * the dir parameter. If the direction was determined, it is cached to make
|
| * subsequent calls return quickly.
|
| */
|
| - bool cheapComputeDirection(Direction* dir) const;
|
| + bool cheapComputeDirection(Direction* dir) const {
|
| + bool result;
|
| + if (NULL != dir) {
|
| + int intDir = *dir;
|
| + result = fPathRef->cheapComputeDirection(&intDir);
|
| + *dir = static_cast<Direction>(intDir);
|
| + } else {
|
| + result = fPathRef->cheapComputeDirection(NULL);
|
| + }
|
| + return result;
|
| + }
|
|
|
| /**
|
| * Returns true if the path's direction can be computed via
|
| @@ -789,7 +797,7 @@
|
| * set if the path contains 1 or more segments of that type.
|
| * Returns 0 for an empty path (no segments).
|
| */
|
| - uint32_t getSegmentMasks() const { return fSegmentMask; }
|
| + uint32_t getSegmentMasks() const { return fPathRef->getSegmentMasks(); }
|
|
|
| enum Verb {
|
| kMove_Verb, //!< iter.next returns 1 point
|
| @@ -814,8 +822,10 @@
|
| public:
|
| Iter();
|
| Iter(const SkPath&, bool forceClose);
|
| + Iter(const SkPathRef*, bool forceClose);
|
|
|
| void setPath(const SkPath&, bool forceClose);
|
| + void setPathRef(const SkPathRef*, bool forceClose);
|
|
|
| /** Return the next verb in this iteration of the path. When all
|
| segments have been visited, return kDone_Verb.
|
| @@ -932,26 +942,21 @@
|
| enum SerializationOffsets {
|
| #ifndef DELETE_THIS_CODE_WHEN_SKPS_ARE_REBUILT_AT_V14_AND_ALL_OTHER_INSTANCES_TOO
|
| kNewFormat_SerializationShift = 28, // requires 1 bit
|
| -#endif
|
| - kDirection_SerializationShift = 26, // requires 2 bits
|
| -#ifndef DELETE_THIS_CODE_WHEN_SKPS_ARE_REBUILT_AT_V14_AND_ALL_OTHER_INSTANCES_TOO
|
| - // rename to kUnused_SerializationShift
|
| + kOldDirection_SerializationShift = 26, // requires 2 bits
|
| kOldIsFinite_SerializationShift = 25, // 1 bit
|
| -#endif
|
| - kIsOval_SerializationShift = 24, // requires 1 bit
|
| - kConvexity_SerializationShift = 16, // requires 8 bits
|
| + kOldIsOval_SerializationShift = 24, // requires 1 bit
|
| + kOldConvexity_SerializationShift = 16, // requires 8 bits
|
| +#endif
|
| + // TODO: make this shift be 0
|
| kFillType_SerializationShift = 8, // requires 8 bits
|
| - kSegmentMask_SerializationShift = 0 // requires 4 bits
|
| +#ifndef DELETE_THIS_CODE_WHEN_SKPS_ARE_REBUILT_AT_V14_AND_ALL_OTHER_INSTANCES_TOO
|
| + kOldSegmentMask_SerializationShift = 0 // requires 4 bits
|
| +#endif
|
| };
|
|
|
| SkAutoTUnref<SkPathRef> fPathRef;
|
|
|
| - int fLastMoveToIndex;
|
| uint8_t fFillType;
|
| - uint8_t fSegmentMask;
|
| - mutable uint8_t fConvexity;
|
| - mutable uint8_t fDirection;
|
| - mutable SkBool8 fIsOval;
|
| #ifdef SK_BUILD_FOR_ANDROID
|
| uint32_t fGenerationID;
|
| const SkPath* fSourcePath;
|
| @@ -984,18 +989,8 @@
|
| */
|
| void reversePathTo(const SkPath&);
|
|
|
| - // called before we add points for lineTo, quadTo, cubicTo, checking to see
|
| - // if we need to inject a leading moveTo first
|
| - //
|
| - // SkPath path; path.lineTo(...); <--- need a leading moveTo(0, 0)
|
| - // SkPath path; ... path.close(); path.lineTo(...) <-- need a moveTo(previous moveTo)
|
| - //
|
| - inline void injectMoveToIfNeeded();
|
| -
|
| inline bool hasOnlyMoveTos() const;
|
|
|
| - Convexity internalGetConvexity() const;
|
| -
|
| bool isRectContour(bool allowPartial, int* currVerb, const SkPoint** pts,
|
| bool* isClosed, Direction* direction) const;
|
|
|
| @@ -1007,18 +1002,10 @@
|
| return fPathRef->hasComputedBounds();
|
| }
|
|
|
| -
|
| - // 'rect' needs to be sorted
|
| - void setBounds(const SkRect& rect) {
|
| - fPathRef->setBounds(rect);
|
| - }
|
| -
|
| #ifndef DELETE_THIS_CODE_WHEN_SKPS_ARE_REBUILT_AT_V14_AND_ALL_OTHER_INSTANCES_TOO
|
| friend class SkPathRef; // just for SerializationOffsets
|
| #endif
|
| friend class SkAutoPathBoundsUpdate;
|
| - friend class SkAutoDisableOvalCheck;
|
| - friend class SkAutoDisableDirectionCheck;
|
| friend class SkBench_AddPathTest; // perf test pathTo/reversePathTo
|
| };
|
|
|
|
|