| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2008 The Android Open Source Project | 3 * Copyright 2008 The Android Open Source Project |
| 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 | 9 |
| 10 #include "SkPathMeasure.h" | 10 #include "SkPathMeasure.h" |
| 11 #include "SkGeometry.h" | 11 #include "SkGeometry.h" |
| 12 #include "SkPath.h" | 12 #include "SkPath.h" |
| 13 #include "SkTSearch.h" | 13 #include "SkTSearch.h" |
| 14 | 14 |
| 15 // these must be 0,1,2,3 since they are in our 2-bit field | 15 // these must be 0,1,2,3 since they are in our 2-bit field |
| 16 enum { | 16 enum { |
| 17 kLine_SegType, | 17 kLine_SegType, |
| 18 kQuad_SegType, | 18 kQuad_SegType, |
| 19 kCubic_SegType, | 19 kCubic_SegType, |
| 20 kConic_SegType, | 20 kConic_SegType, |
| 21 }; | 21 }; |
| 22 | 22 |
| 23 #ifdef SK_SUPPORT_LEGACY_PATH_MEASURE_TVALUE |
| 23 #define kMaxTValue 32767 | 24 #define kMaxTValue 32767 |
| 25 #else |
| 26 #define kMaxTValue 0x3FFFFFFF |
| 27 #endif |
| 24 | 28 |
| 25 static inline SkScalar tValue2Scalar(int t) { | 29 static inline SkScalar tValue2Scalar(int t) { |
| 26 SkASSERT((unsigned)t <= kMaxTValue); | 30 SkASSERT((unsigned)t <= kMaxTValue); |
| 31 #ifdef SK_SUPPORT_LEGACY_PATH_MEASURE_TVALUE |
| 27 return t * 3.05185e-5f; // t / 32767 | 32 return t * 3.05185e-5f; // t / 32767 |
| 33 #else |
| 34 const SkScalar kMaxTReciprocal = 1.0f / kMaxTValue; |
| 35 return t * kMaxTReciprocal; |
| 36 #endif |
| 28 } | 37 } |
| 29 | 38 |
| 30 SkScalar SkPathMeasure::Segment::getScalarT() const { | 39 SkScalar SkPathMeasure::Segment::getScalarT() const { |
| 31 return tValue2Scalar(fTValue); | 40 return tValue2Scalar(fTValue); |
| 32 } | 41 } |
| 33 | 42 |
| 34 const SkPathMeasure::Segment* SkPathMeasure::NextSegment(const Segment* seg) { | 43 const SkPathMeasure::Segment* SkPathMeasure::NextSegment(const Segment* seg) { |
| 35 unsigned ptIndex = seg->fPtIndex; | 44 unsigned ptIndex = seg->fPtIndex; |
| 36 | 45 |
| 37 do { | 46 do { |
| (...skipping 586 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 624 | 633 |
| 625 for (int i = 0; i < fSegments.count(); i++) { | 634 for (int i = 0; i < fSegments.count(); i++) { |
| 626 const Segment* seg = &fSegments[i]; | 635 const Segment* seg = &fSegments[i]; |
| 627 SkDebugf("pathmeas: seg[%d] distance=%g, point=%d, t=%g, type=%d\n", | 636 SkDebugf("pathmeas: seg[%d] distance=%g, point=%d, t=%g, type=%d\n", |
| 628 i, seg->fDistance, seg->fPtIndex, seg->getScalarT(), | 637 i, seg->fDistance, seg->fPtIndex, seg->getScalarT(), |
| 629 seg->fType); | 638 seg->fType); |
| 630 } | 639 } |
| 631 } | 640 } |
| 632 | 641 |
| 633 #endif | 642 #endif |
| OLD | NEW |