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

Side by Side Diff: src/pathops/SkOpSegment.cpp

Issue 18058007: path ops work in progress (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: try try again Created 7 years, 5 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 | Annotate | Revision Log
« no previous file with comments | « src/pathops/SkOpSegment.h ('k') | src/pathops/SkPathOpsCommon.cpp » ('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 * Copyright 2012 Google Inc. 2 * Copyright 2012 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 #include "SkIntersections.h" 7 #include "SkIntersections.h"
8 #include "SkOpSegment.h" 8 #include "SkOpSegment.h"
9 #include "SkPathWriter.h" 9 #include "SkPathWriter.h"
10 #include "SkTSort.h" 10 #include "SkTSort.h"
(...skipping 843 matching lines...) Expand 10 before | Expand all | Expand 10 after
854 int SkOpSegment::computeSum(int startIndex, int endIndex, bool binary) { 854 int SkOpSegment::computeSum(int startIndex, int endIndex, bool binary) {
855 SkSTArray<SkOpAngle::kStackBasedCount, SkOpAngle, true> angles; 855 SkSTArray<SkOpAngle::kStackBasedCount, SkOpAngle, true> angles;
856 addTwoAngles(startIndex, endIndex, &angles); 856 addTwoAngles(startIndex, endIndex, &angles);
857 buildAngles(endIndex, &angles, false); 857 buildAngles(endIndex, &angles, false);
858 // OPTIMIZATION: check all angles to see if any have computed wind sum 858 // OPTIMIZATION: check all angles to see if any have computed wind sum
859 // before sorting (early exit if none) 859 // before sorting (early exit if none)
860 SkSTArray<SkOpAngle::kStackBasedCount, SkOpAngle*, true> sorted; 860 SkSTArray<SkOpAngle::kStackBasedCount, SkOpAngle*, true> sorted;
861 // FIXME?: Not sure if this sort must be ordered or if the relaxed ordering is OK ... 861 // FIXME?: Not sure if this sort must be ordered or if the relaxed ordering is OK ...
862 bool sortable = SortAngles(angles, &sorted, SkOpSegment::kMustBeOrdered_Sort AngleKind); 862 bool sortable = SortAngles(angles, &sorted, SkOpSegment::kMustBeOrdered_Sort AngleKind);
863 #if DEBUG_SORT 863 #if DEBUG_SORT
864 sorted[0]->segment()->debugShowSort(__FUNCTION__, sorted, 0, 0, 0); 864 sorted[0]->segment()->debugShowSort(__FUNCTION__, sorted, 0, 0, 0, sortable) ;
865 #endif 865 #endif
866 if (!sortable) { 866 if (!sortable) {
867 return SK_MinS32; 867 return SK_MinS32;
868 } 868 }
869 int angleCount = angles.count(); 869 int angleCount = angles.count();
870 const SkOpAngle* angle; 870 const SkOpAngle* angle;
871 const SkOpSegment* base; 871 const SkOpSegment* base;
872 int winding; 872 int winding;
873 int oWinding; 873 int oWinding;
874 int firstIndex = 0; 874 int firstIndex = 0;
(...skipping 14 matching lines...) Expand all
889 bool inner = UseInnerWinding(winding + spanWinding, winding); 889 bool inner = UseInnerWinding(winding + spanWinding, winding);
890 #if DEBUG_WINDING 890 #if DEBUG_WINDING
891 SkDebugf("%s spanWinding=%d winding=%d sign=%d inner=%d result=%d\n", __FUNC TION__, 891 SkDebugf("%s spanWinding=%d winding=%d sign=%d inner=%d result=%d\n", __FUNC TION__,
892 spanWinding, winding, angle->sign(), inner, 892 spanWinding, winding, angle->sign(), inner,
893 inner ? winding + spanWinding : winding); 893 inner ? winding + spanWinding : winding);
894 #endif 894 #endif
895 if (inner) { 895 if (inner) {
896 winding += spanWinding; 896 winding += spanWinding;
897 } 897 }
898 #if DEBUG_SORT 898 #if DEBUG_SORT
899 base->debugShowSort(__FUNCTION__, sorted, firstIndex, winding, oWinding); 899 base->debugShowSort(__FUNCTION__, sorted, firstIndex, winding, oWinding, sor table);
900 #endif 900 #endif
901 int nextIndex = firstIndex + 1; 901 int nextIndex = firstIndex + 1;
902 int lastIndex = firstIndex != 0 ? firstIndex : angleCount; 902 int lastIndex = firstIndex != 0 ? firstIndex : angleCount;
903 winding -= base->spanSign(angle); 903 winding -= base->spanSign(angle);
904 oWinding -= base->oppSign(angle); 904 oWinding -= base->oppSign(angle);
905 do { 905 do {
906 if (nextIndex == angleCount) { 906 if (nextIndex == angleCount) {
907 nextIndex = 0; 907 nextIndex = 0;
908 } 908 }
909 angle = sorted[nextIndex]; 909 angle = sorted[nextIndex];
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
1127 other = endSpan->fOther; 1127 other = endSpan->fOther;
1128 *nextStart = endSpan->fOtherIndex; 1128 *nextStart = endSpan->fOtherIndex;
1129 double startT = other->fTs[*nextStart].fT; 1129 double startT = other->fTs[*nextStart].fT;
1130 *nextEnd = *nextStart; 1130 *nextEnd = *nextStart;
1131 do { 1131 do {
1132 *nextEnd += step; 1132 *nextEnd += step;
1133 } 1133 }
1134 while (precisely_zero(startT - other->fTs[*nextEnd].fT)); 1134 while (precisely_zero(startT - other->fTs[*nextEnd].fT));
1135 SkASSERT(step < 0 ? *nextEnd >= 0 : *nextEnd < other->fTs.count()); 1135 SkASSERT(step < 0 ? *nextEnd >= 0 : *nextEnd < other->fTs.count());
1136 if (other->isTiny(SkMin32(*nextStart, *nextEnd))) { 1136 if (other->isTiny(SkMin32(*nextStart, *nextEnd))) {
1137 *unsortable = true;
1137 return NULL; 1138 return NULL;
1138 } 1139 }
1139 return other; 1140 return other;
1140 } 1141 }
1141 // more than one viable candidate -- measure angles to find best 1142 // more than one viable candidate -- measure angles to find best
1142 SkSTArray<SkOpAngle::kStackBasedCount, SkOpAngle, true> angles; 1143 SkSTArray<SkOpAngle::kStackBasedCount, SkOpAngle, true> angles;
1143 SkASSERT(startIndex - endIndex != 0); 1144 SkASSERT(startIndex - endIndex != 0);
1144 SkASSERT((startIndex - endIndex < 0) ^ (step < 0)); 1145 SkASSERT((startIndex - endIndex < 0) ^ (step < 0));
1145 addTwoAngles(startIndex, end, &angles); 1146 addTwoAngles(startIndex, end, &angles);
1146 buildAngles(end, &angles, true); 1147 buildAngles(end, &angles, true);
1147 SkSTArray<SkOpAngle::kStackBasedCount, SkOpAngle*, true> sorted; 1148 SkSTArray<SkOpAngle::kStackBasedCount, SkOpAngle*, true> sorted;
1148 bool sortable = SortAngles(angles, &sorted, SkOpSegment::kMustBeOrdered_Sort AngleKind); 1149 bool sortable = SortAngles(angles, &sorted, SkOpSegment::kMustBeOrdered_Sort AngleKind);
1149 int angleCount = angles.count(); 1150 int angleCount = angles.count();
1150 int firstIndex = findStartingEdge(sorted, startIndex, end); 1151 int firstIndex = findStartingEdge(sorted, startIndex, end);
1151 SkASSERT(firstIndex >= 0); 1152 SkASSERT(firstIndex >= 0);
1152 #if DEBUG_SORT 1153 #if DEBUG_SORT
1153 debugShowSort(__FUNCTION__, sorted, firstIndex); 1154 debugShowSort(__FUNCTION__, sorted, firstIndex, sortable);
1154 #endif 1155 #endif
1155 if (!sortable) { 1156 if (!sortable) {
1156 *unsortable = true; 1157 *unsortable = true;
1157 return NULL; 1158 return NULL;
1158 } 1159 }
1159 SkASSERT(sorted[firstIndex]->segment() == this); 1160 SkASSERT(sorted[firstIndex]->segment() == this);
1160 #if DEBUG_WINDING 1161 #if DEBUG_WINDING
1161 SkDebugf("%s firstIndex=[%d] sign=%d\n", __FUNCTION__, firstIndex, 1162 SkDebugf("%s firstIndex=[%d] sign=%d\n", __FUNCTION__, firstIndex,
1162 sorted[firstIndex]->sign()); 1163 sorted[firstIndex]->sign());
1163 #endif 1164 #endif
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
1265 SkASSERT(startIndex - endIndex != 0); 1266 SkASSERT(startIndex - endIndex != 0);
1266 SkASSERT((startIndex - endIndex < 0) ^ (step < 0)); 1267 SkASSERT((startIndex - endIndex < 0) ^ (step < 0));
1267 addTwoAngles(startIndex, end, &angles); 1268 addTwoAngles(startIndex, end, &angles);
1268 buildAngles(end, &angles, true); 1269 buildAngles(end, &angles, true);
1269 SkSTArray<SkOpAngle::kStackBasedCount, SkOpAngle*, true> sorted; 1270 SkSTArray<SkOpAngle::kStackBasedCount, SkOpAngle*, true> sorted;
1270 bool sortable = SortAngles(angles, &sorted, SkOpSegment::kMustBeOrdered_Sort AngleKind); 1271 bool sortable = SortAngles(angles, &sorted, SkOpSegment::kMustBeOrdered_Sort AngleKind);
1271 int angleCount = angles.count(); 1272 int angleCount = angles.count();
1272 int firstIndex = findStartingEdge(sorted, startIndex, end); 1273 int firstIndex = findStartingEdge(sorted, startIndex, end);
1273 SkASSERT(firstIndex >= 0); 1274 SkASSERT(firstIndex >= 0);
1274 #if DEBUG_SORT 1275 #if DEBUG_SORT
1275 debugShowSort(__FUNCTION__, sorted, firstIndex); 1276 debugShowSort(__FUNCTION__, sorted, firstIndex, sortable);
1276 #endif 1277 #endif
1277 if (!sortable) { 1278 if (!sortable) {
1278 *unsortable = true; 1279 *unsortable = true;
1279 return NULL; 1280 return NULL;
1280 } 1281 }
1281 SkASSERT(sorted[firstIndex]->segment() == this); 1282 SkASSERT(sorted[firstIndex]->segment() == this);
1282 #if DEBUG_WINDING 1283 #if DEBUG_WINDING
1283 SkDebugf("%s firstIndex=[%d] sign=%d\n", __FUNCTION__, firstIndex, 1284 SkDebugf("%s firstIndex=[%d] sign=%d\n", __FUNCTION__, firstIndex,
1284 sorted[firstIndex]->sign()); 1285 sorted[firstIndex]->sign());
1285 #endif 1286 #endif
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
1393 SkSTArray<SkOpAngle::kStackBasedCount, SkOpAngle, true> angles; 1394 SkSTArray<SkOpAngle::kStackBasedCount, SkOpAngle, true> angles;
1394 SkASSERT(startIndex - endIndex != 0); 1395 SkASSERT(startIndex - endIndex != 0);
1395 SkASSERT((startIndex - endIndex < 0) ^ (step < 0)); 1396 SkASSERT((startIndex - endIndex < 0) ^ (step < 0));
1396 addTwoAngles(startIndex, end, &angles); 1397 addTwoAngles(startIndex, end, &angles);
1397 buildAngles(end, &angles, false); 1398 buildAngles(end, &angles, false);
1398 SkSTArray<SkOpAngle::kStackBasedCount, SkOpAngle*, true> sorted; 1399 SkSTArray<SkOpAngle::kStackBasedCount, SkOpAngle*, true> sorted;
1399 bool sortable = SortAngles(angles, &sorted, SkOpSegment::kMustBeOrdered_Sort AngleKind); 1400 bool sortable = SortAngles(angles, &sorted, SkOpSegment::kMustBeOrdered_Sort AngleKind);
1400 if (!sortable) { 1401 if (!sortable) {
1401 *unsortable = true; 1402 *unsortable = true;
1402 #if DEBUG_SORT 1403 #if DEBUG_SORT
1403 debugShowSort(__FUNCTION__, sorted, findStartingEdge(sorted, startIndex, end), 0, 0); 1404 debugShowSort(__FUNCTION__, sorted, findStartingEdge(sorted, startIndex, end), 0, 0,
1405 sortable);
1404 #endif 1406 #endif
1405 return NULL; 1407 return NULL;
1406 } 1408 }
1407 int angleCount = angles.count(); 1409 int angleCount = angles.count();
1408 int firstIndex = findStartingEdge(sorted, startIndex, end); 1410 int firstIndex = findStartingEdge(sorted, startIndex, end);
1409 SkASSERT(firstIndex >= 0); 1411 SkASSERT(firstIndex >= 0);
1410 #if DEBUG_SORT 1412 #if DEBUG_SORT
1411 debugShowSort(__FUNCTION__, sorted, firstIndex, 0, 0); 1413 debugShowSort(__FUNCTION__, sorted, firstIndex, 0, 0, sortable);
1412 #endif 1414 #endif
1413 SkASSERT(sorted[firstIndex]->segment() == this); 1415 SkASSERT(sorted[firstIndex]->segment() == this);
1414 int nextIndex = firstIndex + 1; 1416 int nextIndex = firstIndex + 1;
1415 int lastIndex = firstIndex != 0 ? firstIndex : angleCount; 1417 int lastIndex = firstIndex != 0 ? firstIndex : angleCount;
1416 const SkOpAngle* foundAngle = NULL; 1418 const SkOpAngle* foundAngle = NULL;
1417 bool foundDone = false; 1419 bool foundDone = false;
1418 SkOpSegment* nextSegment; 1420 SkOpSegment* nextSegment;
1419 int activeCount = 0; 1421 int activeCount = 0;
1420 do { 1422 do {
1421 SkASSERT(nextIndex != firstIndex); 1423 SkASSERT(nextIndex != firstIndex);
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
1647 SkOpSegment* next = angle->segment(); 1649 SkOpSegment* next = angle->segment();
1648 SkPathOpsBounds bounds; 1650 SkPathOpsBounds bounds;
1649 next->subDivideBounds(angle->end(), angle->start(), &bounds); 1651 next->subDivideBounds(angle->end(), angle->start(), &bounds);
1650 if (approximately_greater(top, bounds.fTop)) { 1652 if (approximately_greater(top, bounds.fTop)) {
1651 top = bounds.fTop; 1653 top = bounds.fTop;
1652 first = index; 1654 first = index;
1653 } 1655 }
1654 } 1656 }
1655 SkASSERT(first < SK_MaxS32); 1657 SkASSERT(first < SK_MaxS32);
1656 #if DEBUG_SORT // || DEBUG_SWAP_TOP 1658 #if DEBUG_SORT // || DEBUG_SWAP_TOP
1657 sorted[first]->segment()->debugShowSort(__FUNCTION__, sorted, first, 0, 0); 1659 sorted[first]->segment()->debugShowSort(__FUNCTION__, sorted, first, 0, 0, s ortable);
1658 #endif 1660 #endif
1659 if (onlySortable && !sortable) { 1661 if (onlySortable && !sortable) {
1660 *unsortable = true; 1662 *unsortable = true;
1661 return NULL; 1663 return NULL;
1662 } 1664 }
1663 // skip edges that have already been processed 1665 // skip edges that have already been processed
1664 firstT = first - 1; 1666 firstT = first - 1;
1665 SkOpSegment* leftSegment; 1667 SkOpSegment* leftSegment;
1666 do { 1668 do {
1667 if (++firstT == count) { 1669 if (++firstT == count) {
(...skipping 890 matching lines...) Expand 10 before | Expand all | Expand 10 after
2558 *dx = (*CurveSlopeAtT[SkPathOpsVerbToPoints(fVerb)])(fPts, tHit).fX; 2560 *dx = (*CurveSlopeAtT[SkPathOpsVerbToPoints(fVerb)])(fPts, tHit).fX;
2559 if (fVerb > SkPath::kLine_Verb && approximately_zero(*dx)) { 2561 if (fVerb > SkPath::kLine_Verb && approximately_zero(*dx)) {
2560 *dx = fPts[2].fX - fPts[1].fX - *dx; 2562 *dx = fPts[2].fX - fPts[1].fX - *dx;
2561 } 2563 }
2562 if (*dx == 0) { 2564 if (*dx == 0) {
2563 #if DEBUG_WINDING_AT_T 2565 #if DEBUG_WINDING_AT_T
2564 SkDebugf(" dx=0 winding=SK_MinS32\n"); 2566 SkDebugf(" dx=0 winding=SK_MinS32\n");
2565 #endif 2567 #endif
2566 return SK_MinS32; 2568 return SK_MinS32;
2567 } 2569 }
2570 if (windVal < 0) { // reverse sign if opp contour traveled in reverse
2571 *dx = -*dx;
2572 }
2568 if (winding * *dx > 0) { // if same signs, result is negative 2573 if (winding * *dx > 0) { // if same signs, result is negative
2569 winding += *dx > 0 ? -windVal : windVal; 2574 winding += *dx > 0 ? -windVal : windVal;
2570 } 2575 }
2571 #if DEBUG_WINDING_AT_T 2576 #if DEBUG_WINDING_AT_T
2572 SkDebugf(" dx=%c winding=%d\n", *dx > 0 ? '+' : '-', winding); 2577 SkDebugf(" dx=%c winding=%d\n", *dx > 0 ? '+' : '-', winding);
2573 #endif 2578 #endif
2574 return winding; 2579 return winding;
2575 } 2580 }
2576 2581
2577 int SkOpSegment::windSum(const SkOpAngle* angle) const { 2582 int SkOpSegment::windSum(const SkOpAngle* angle) const {
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
2762 } else { 2767 } else {
2763 SkDebugf("%d", span.fWindSum); 2768 SkDebugf("%d", span.fWindSum);
2764 } 2769 }
2765 SkDebugf(" windValue=%d\n", span.fWindValue); 2770 SkDebugf(" windValue=%d\n", span.fWindValue);
2766 } 2771 }
2767 #endif 2772 #endif
2768 2773
2769 #if DEBUG_SORT || DEBUG_SWAP_TOP 2774 #if DEBUG_SORT || DEBUG_SWAP_TOP
2770 void SkOpSegment::debugShowSort(const char* fun, const SkTArray<SkOpAngle*, true >& angles, 2775 void SkOpSegment::debugShowSort(const char* fun, const SkTArray<SkOpAngle*, true >& angles,
2771 int first, const int contourWinding, 2776 int first, const int contourWinding,
2772 const int oppContourWinding) const { 2777 const int oppContourWinding, bool sortable) cons t {
2773 if (--gDebugSortCount < 0) { 2778 if (--gDebugSortCount < 0) {
2774 return; 2779 return;
2775 } 2780 }
2776 SkASSERT(angles[first]->segment() == this); 2781 SkASSERT(angles[first]->segment() == this);
2777 SkASSERT(angles.count() > 1); 2782 SkASSERT(!sortable || angles.count() > 1);
2778 int lastSum = contourWinding; 2783 int lastSum = contourWinding;
2779 int oppLastSum = oppContourWinding; 2784 int oppLastSum = oppContourWinding;
2780 const SkOpAngle* firstAngle = angles[first]; 2785 const SkOpAngle* firstAngle = angles[first];
2781 int windSum = lastSum - spanSign(firstAngle); 2786 int windSum = lastSum - spanSign(firstAngle);
2782 int oppoSign = oppSign(firstAngle); 2787 int oppoSign = oppSign(firstAngle);
2783 int oppWindSum = oppLastSum - oppoSign; 2788 int oppWindSum = oppLastSum - oppoSign;
2784 #define WIND_AS_STRING(x) char x##Str[12]; if (!valid_wind(x)) strcpy(x##Str , "?"); \ 2789 #define WIND_AS_STRING(x) char x##Str[12]; if (!valid_wind(x)) strcpy(x##Str , "?"); \
2785 else SK_SNPRINTF(x##Str, sizeof(x##Str), "%d", x) 2790 else SK_SNPRINTF(x##Str, sizeof(x##Str), "%d", x)
2786 WIND_AS_STRING(contourWinding); 2791 WIND_AS_STRING(contourWinding);
2787 WIND_AS_STRING(oppContourWinding); 2792 WIND_AS_STRING(oppContourWinding);
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
2871 if (index == angles.count()) { 2876 if (index == angles.count()) {
2872 index = 0; 2877 index = 0;
2873 } 2878 }
2874 if (firstTime) { 2879 if (firstTime) {
2875 firstTime = false; 2880 firstTime = false;
2876 } 2881 }
2877 } while (index != first); 2882 } while (index != first);
2878 } 2883 }
2879 2884
2880 void SkOpSegment::debugShowSort(const char* fun, const SkTArray<SkOpAngle*, true >& angles, 2885 void SkOpSegment::debugShowSort(const char* fun, const SkTArray<SkOpAngle*, true >& angles,
2881 int first) { 2886 int first, bool sortable) {
2882 const SkOpAngle* firstAngle = angles[first]; 2887 const SkOpAngle* firstAngle = angles[first];
2883 const SkOpSegment* segment = firstAngle->segment(); 2888 const SkOpSegment* segment = firstAngle->segment();
2884 int winding = segment->updateWinding(firstAngle); 2889 int winding = segment->updateWinding(firstAngle);
2885 int oppWinding = segment->updateOppWinding(firstAngle); 2890 int oppWinding = segment->updateOppWinding(firstAngle);
2886 debugShowSort(fun, angles, first, winding, oppWinding); 2891 debugShowSort(fun, angles, first, winding, oppWinding, sortable);
2887 } 2892 }
2888 2893
2889 #endif 2894 #endif
2890 2895
2891 #if DEBUG_SHOW_WINDING 2896 #if DEBUG_SHOW_WINDING
2892 int SkOpSegment::debugShowWindingValues(int slotCount, int ofInterest) const { 2897 int SkOpSegment::debugShowWindingValues(int slotCount, int ofInterest) const {
2893 if (!(1 << fID & ofInterest)) { 2898 if (!(1 << fID & ofInterest)) {
2894 return 0; 2899 return 0;
2895 } 2900 }
2896 int sum = 0; 2901 int sum = 0;
2897 SkTArray<char, true> slots(slotCount * 2); 2902 SkTArray<char, true> slots(slotCount * 2);
2898 memset(slots.begin(), ' ', slotCount * 2); 2903 memset(slots.begin(), ' ', slotCount * 2);
2899 for (int i = 0; i < fTs.count(); ++i) { 2904 for (int i = 0; i < fTs.count(); ++i) {
2900 // if (!(1 << fTs[i].fOther->fID & ofInterest)) { 2905 // if (!(1 << fTs[i].fOther->fID & ofInterest)) {
2901 // continue; 2906 // continue;
2902 // } 2907 // }
2903 sum += fTs[i].fWindValue; 2908 sum += fTs[i].fWindValue;
2904 slots[fTs[i].fOther->fID - 1] = as_digit(fTs[i].fWindValue); 2909 slots[fTs[i].fOther->fID - 1] = as_digit(fTs[i].fWindValue);
2905 sum += fTs[i].fOppValue; 2910 sum += fTs[i].fOppValue;
2906 slots[slotCount + fTs[i].fOther->fID - 1] = as_digit(fTs[i].fOppValue); 2911 slots[slotCount + fTs[i].fOther->fID - 1] = as_digit(fTs[i].fOppValue);
2907 } 2912 }
2908 SkDebugf("%s id=%2d %.*s | %.*s\n", __FUNCTION__, fID, slotCount, slots.begi n(), slotCount, 2913 SkDebugf("%s id=%2d %.*s | %.*s\n", __FUNCTION__, fID, slotCount, slots.begi n(), slotCount,
2909 slots.begin() + slotCount); 2914 slots.begin() + slotCount);
2910 return sum; 2915 return sum;
2911 } 2916 }
2912 #endif 2917 #endif
OLDNEW
« no previous file with comments | « src/pathops/SkOpSegment.h ('k') | src/pathops/SkPathOpsCommon.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698