Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1274)

Side by Side Diff: include/core/SkPathRef.h

Issue 2232433002: Use SkNVRefCnt for a couple common types. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: final Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « include/core/SkData.h ('k') | include/core/SkTextBlob.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2012 Google Inc. 3 * Copyright 2012 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 #ifndef SkPathRef_DEFINED 9 #ifndef SkPathRef_DEFINED
10 #define SkPathRef_DEFINED 10 #define SkPathRef_DEFINED
(...skipping 18 matching lines...) Expand all
29 * constructor a SkAutoTUnref, which may be updated to point to a new SkPathRef after the editor's 29 * constructor a SkAutoTUnref, which may be updated to point to a new SkPathRef after the editor's
30 * constructor returns. 30 * constructor returns.
31 * 31 *
32 * The points and verbs are stored in a single allocation. The points are at the begining of the 32 * The points and verbs are stored in a single allocation. The points are at the begining of the
33 * allocation while the verbs are stored at end of the allocation, in reverse or der. Thus the points 33 * allocation while the verbs are stored at end of the allocation, in reverse or der. Thus the points
34 * and verbs both grow into the middle of the allocation until the meet. To acce ss verb i in the 34 * and verbs both grow into the middle of the allocation until the meet. To acce ss verb i in the
35 * verb array use ref.verbs()[~i] (because verbs() returns a pointer just beyond the first 35 * verb array use ref.verbs()[~i] (because verbs() returns a pointer just beyond the first
36 * logical verb or the last verb in memory). 36 * logical verb or the last verb in memory).
37 */ 37 */
38 38
39 class SK_API SkPathRef : public ::SkRefCnt { 39 class SK_API SkPathRef final : public SkNVRefCnt<SkPathRef> {
40 public: 40 public:
41 class Editor { 41 class Editor {
42 public: 42 public:
43 Editor(SkAutoTUnref<SkPathRef>* pathRef, 43 Editor(SkAutoTUnref<SkPathRef>* pathRef,
44 int incReserveVerbs = 0, 44 int incReserveVerbs = 0,
45 int incReservePoints = 0); 45 int incReservePoints = 0);
46 46
47 ~Editor() { SkDEBUGCODE(sk_atomic_dec(&fPathRef->fEditorsAttached);) } 47 ~Editor() { SkDEBUGCODE(sk_atomic_dec(&fPathRef->fEditorsAttached);) }
48 48
49 /** 49 /**
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 236
237 static SkPathRef* CreateFromBuffer(SkRBuffer* buffer); 237 static SkPathRef* CreateFromBuffer(SkRBuffer* buffer);
238 238
239 /** 239 /**
240 * Rollsback a path ref to zero verbs and points with the assumption that th e path ref will be 240 * Rollsback a path ref to zero verbs and points with the assumption that th e path ref will be
241 * repopulated with approximately the same number of verbs and points. A new path ref is created 241 * repopulated with approximately the same number of verbs and points. A new path ref is created
242 * only if necessary. 242 * only if necessary.
243 */ 243 */
244 static void Rewind(SkAutoTUnref<SkPathRef>* pathRef); 244 static void Rewind(SkAutoTUnref<SkPathRef>* pathRef);
245 245
246 virtual ~SkPathRef(); 246 ~SkPathRef();
247 int countPoints() const { SkDEBUGCODE(this->validate();) return fPointCnt; } 247 int countPoints() const { SkDEBUGCODE(this->validate();) return fPointCnt; }
248 int countVerbs() const { SkDEBUGCODE(this->validate();) return fVerbCnt; } 248 int countVerbs() const { SkDEBUGCODE(this->validate();) return fVerbCnt; }
249 int countWeights() const { SkDEBUGCODE(this->validate();) return fConicWeigh ts.count(); } 249 int countWeights() const { SkDEBUGCODE(this->validate();) return fConicWeigh ts.count(); }
250 250
251 /** 251 /**
252 * Returns a pointer one beyond the first logical verb (last verb in memory order). 252 * Returns a pointer one beyond the first logical verb (last verb in memory order).
253 */ 253 */
254 const uint8_t* verbs() const { SkDEBUGCODE(this->validate();) return fVerbs; } 254 const uint8_t* verbs() const { SkDEBUGCODE(this->validate();) return fVerbs; }
255 255
256 /** 256 /**
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after
536 SkBool8 fIsOval; 536 SkBool8 fIsOval;
537 SkBool8 fIsRRect; 537 SkBool8 fIsRRect;
538 // Both the circle and rrect special cases have a notion of direction and st arting point 538 // Both the circle and rrect special cases have a notion of direction and st arting point
539 // The next two variables store that information for either. 539 // The next two variables store that information for either.
540 SkBool8 fRRectOrOvalIsCCW; 540 SkBool8 fRRectOrOvalIsCCW;
541 uint8_t fRRectOrOvalStartIdx; 541 uint8_t fRRectOrOvalStartIdx;
542 uint8_t fSegmentMask; 542 uint8_t fSegmentMask;
543 543
544 friend class PathRefTest_Private; 544 friend class PathRefTest_Private;
545 friend class ForceIsRRect_Private; // unit test isRRect 545 friend class ForceIsRRect_Private; // unit test isRRect
546 typedef SkRefCnt INHERITED;
547 }; 546 };
548 547
549 #endif 548 #endif
OLDNEW
« no previous file with comments | « include/core/SkData.h ('k') | include/core/SkTextBlob.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698