OLD | NEW |
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 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
271 fSegmentMask = 0; | 271 fSegmentMask = 0; |
272 fIsOval = false; | 272 fIsOval = false; |
273 SkDEBUGCODE(fEditorsAttached = 0;) | 273 SkDEBUGCODE(fEditorsAttached = 0;) |
274 SkDEBUGCODE(this->validate();) | 274 SkDEBUGCODE(this->validate();) |
275 } | 275 } |
276 | 276 |
277 void copy(const SkPathRef& ref, int additionalReserveVerbs, int additionalRe
servePoints); | 277 void copy(const SkPathRef& ref, int additionalReserveVerbs, int additionalRe
servePoints); |
278 | 278 |
279 // Return true if the computed bounds are finite. | 279 // Return true if the computed bounds are finite. |
280 static bool ComputePtBounds(SkRect* bounds, const SkPathRef& ref) { | 280 static bool ComputePtBounds(SkRect* bounds, const SkPathRef& ref) { |
281 int count = ref.countPoints(); | 281 return bounds->setBoundsCheck(ref.points(), ref.countPoints()); |
282 if (count <= 1) { // we ignore just 1 point (moveto) | |
283 bounds->setEmpty(); | |
284 return count ? ref.points()->isFinite() : true; | |
285 } else { | |
286 return bounds->setBoundsCheck(ref.points(), count); | |
287 } | |
288 } | 282 } |
289 | 283 |
290 // called, if dirty, by getBounds() | 284 // called, if dirty, by getBounds() |
291 void computeBounds() const { | 285 void computeBounds() const { |
292 SkDEBUGCODE(this->validate();) | 286 SkDEBUGCODE(this->validate();) |
293 // TODO(mtklein): remove fBoundsIsDirty and fIsFinite, | 287 // TODO(mtklein): remove fBoundsIsDirty and fIsFinite, |
294 // using an inverted rect instead of fBoundsIsDirty and always recalcula
ting fIsFinite. | 288 // using an inverted rect instead of fBoundsIsDirty and always recalcula
ting fIsFinite. |
295 SkASSERT(fBoundsIsDirty); | 289 SkASSERT(fBoundsIsDirty); |
296 | 290 |
297 fIsFinite = ComputePtBounds(&fBounds, *this); | 291 fIsFinite = ComputePtBounds(&fBounds, *this); |
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
450 kEmptyGenID = 1, // GenID reserved for path ref with zero points and zer
o verbs. | 444 kEmptyGenID = 1, // GenID reserved for path ref with zero points and zer
o verbs. |
451 }; | 445 }; |
452 mutable uint32_t fGenerationID; | 446 mutable uint32_t fGenerationID; |
453 SkDEBUGCODE(int32_t fEditorsAttached;) // assert that only one editor in use
at any time. | 447 SkDEBUGCODE(int32_t fEditorsAttached;) // assert that only one editor in use
at any time. |
454 | 448 |
455 friend class PathRefTest_Private; | 449 friend class PathRefTest_Private; |
456 typedef SkRefCnt INHERITED; | 450 typedef SkRefCnt INHERITED; |
457 }; | 451 }; |
458 | 452 |
459 #endif | 453 #endif |
OLD | NEW |