diff options
Diffstat (limited to 'src/core/SkRegion_path.cpp')
-rw-r--r-- | src/core/SkRegion_path.cpp | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/core/SkRegion_path.cpp b/src/core/SkRegion_path.cpp index 80149a3836..0a5a401809 100644 --- a/src/core/SkRegion_path.cpp +++ b/src/core/SkRegion_path.cpp @@ -216,25 +216,36 @@ void SkRgnBuilder::copyToRgn(SkRegion::RunType runs[]) const { *runs = SkRegion::kRunTypeSentinel; } -static int count_path_runtype_values(const SkPath& path, int* itop, int* ibot) { +static unsigned verb_to_initial_last_index(unsigned verb) { static const uint8_t gPathVerbToInitialLastIndex[] = { 0, // kMove_Verb 1, // kLine_Verb 2, // kQuad_Verb + 2, // kConic_Verb 3, // kCubic_Verb 0, // kClose_Verb 0 // kDone_Verb }; + SkASSERT((unsigned)verb < SK_ARRAY_COUNT(gPathVerbToInitialLastIndex)); + return gPathVerbToInitialLastIndex[verb]; +} +static unsigned verb_to_max_edges(unsigned verb) { static const uint8_t gPathVerbToMaxEdges[] = { 0, // kMove_Verb 1, // kLine_Verb 2, // kQuad_VerbB + 2, // kConic_VerbB 3, // kCubic_Verb 0, // kClose_Verb 0 // kDone_Verb }; + SkASSERT((unsigned)verb < SK_ARRAY_COUNT(gPathVerbToMaxEdges)); + return gPathVerbToMaxEdges[verb]; +} + +static int count_path_runtype_values(const SkPath& path, int* itop, int* ibot) { SkPath::Iter iter(path, true); SkPoint pts[4]; SkPath::Verb verb; @@ -244,9 +255,9 @@ static int count_path_runtype_values(const SkPath& path, int* itop, int* ibot) { SkScalar bot = SkIntToScalar(SK_MinS16); while ((verb = iter.next(pts, false)) != SkPath::kDone_Verb) { - maxEdges += gPathVerbToMaxEdges[verb]; + maxEdges += verb_to_max_edges(verb); - int lastIndex = gPathVerbToInitialLastIndex[verb]; + int lastIndex = verb_to_initial_last_index(verb); if (lastIndex > 0) { for (int i = 1; i <= lastIndex; i++) { if (top > pts[i].fY) { |