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

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

Issue 23542056: path ops work in progress (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: verbose + mutex around file number access Created 7 years, 2 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/SkIntersections.h ('k') | src/pathops/SkOpAngle.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 7
8 #include "SkIntersections.h" 8 #include "SkIntersections.h"
9 9
10 int (SkIntersections::*CurveVertical[])(const SkPoint[], SkScalar, SkScalar, SkS calar, bool) = { 10 int (SkIntersections::*CurveVertical[])(const SkPoint[], SkScalar, SkScalar, SkS calar, bool) = {
(...skipping 27 matching lines...) Expand all
38 } 38 }
39 #endif 39 #endif
40 } 40 }
41 SkASSERT(count == count2); 41 SkASSERT(count == count2);
42 return count; 42 return count;
43 } 43 }
44 44
45 int SkIntersections::cubicRay(const SkPoint pts[4], const SkDLine& line) { 45 int SkIntersections::cubicRay(const SkPoint pts[4], const SkDLine& line) {
46 SkDCubic cubic; 46 SkDCubic cubic;
47 cubic.set(pts); 47 cubic.set(pts);
48 fMax = 3;
48 return intersectRay(cubic, line); 49 return intersectRay(cubic, line);
49 } 50 }
50 51
51 void SkIntersections::flip() { 52 void SkIntersections::flip() {
52 for (int index = 0; index < fUsed; ++index) { 53 for (int index = 0; index < fUsed; ++index) {
53 fT[1][index] = 1 - fT[1][index]; 54 fT[1][index] = 1 - fT[1][index];
54 } 55 }
55 } 56 }
56 57
57 int SkIntersections::insert(double one, double two, const SkDPoint& pt) { 58 int SkIntersections::insert(double one, double two, const SkDPoint& pt) {
(...skipping 22 matching lines...) Expand all
80 } 81 }
81 #if ONE_OFF_DEBUG 82 #if ONE_OFF_DEBUG
82 if (pt.roughlyEqual(fPt[index])) { 83 if (pt.roughlyEqual(fPt[index])) {
83 SkDebugf("%s t=%1.9g pts roughly equal\n", __FUNCTION__, one); 84 SkDebugf("%s t=%1.9g pts roughly equal\n", __FUNCTION__, one);
84 } 85 }
85 #endif 86 #endif
86 if (fT[0][index] > one) { 87 if (fT[0][index] > one) {
87 break; 88 break;
88 } 89 }
89 } 90 }
90 SkASSERT(fUsed < 9); 91 if (fUsed >= fMax) {
92 SkASSERT(0); // FIXME : this error, if it is to be handled at runtime i n release, must
93 // be propagated all the way back down to the caller, and return failure.
94 fUsed = 0;
95 return 0;
96 }
91 int remaining = fUsed - index; 97 int remaining = fUsed - index;
92 if (remaining > 0) { 98 if (remaining > 0) {
93 memmove(&fPt[index + 1], &fPt[index], sizeof(fPt[0]) * remaining); 99 memmove(&fPt[index + 1], &fPt[index], sizeof(fPt[0]) * remaining);
94 memmove(&fT[0][index + 1], &fT[0][index], sizeof(fT[0][0]) * remaining); 100 memmove(&fT[0][index + 1], &fT[0][index], sizeof(fT[0][0]) * remaining);
95 memmove(&fT[1][index + 1], &fT[1][index], sizeof(fT[1][0]) * remaining); 101 memmove(&fT[1][index + 1], &fT[1][index], sizeof(fT[1][0]) * remaining);
96 int clearMask = ~((1 << index) - 1); 102 int clearMask = ~((1 << index) - 1);
97 fIsCoincident[0] += fIsCoincident[0] & clearMask; 103 fIsCoincident[0] += fIsCoincident[0] & clearMask;
98 fIsCoincident[1] += fIsCoincident[1] & clearMask; 104 fIsCoincident[1] += fIsCoincident[1] & clearMask;
99 fIsNear += fIsNear & clearMask; 105 fIsNear += fIsNear & clearMask;
100 } 106 }
(...skipping 24 matching lines...) Expand all
125 double val = fT[fSwap][index]; 131 double val = fT[fSwap][index];
126 val *= end - start; 132 val *= end - start;
127 val += start; 133 val += start;
128 fT[fSwap][index] = val; 134 fT[fSwap][index] = val;
129 } 135 }
130 } 136 }
131 137
132 int SkIntersections::quadRay(const SkPoint pts[3], const SkDLine& line) { 138 int SkIntersections::quadRay(const SkPoint pts[3], const SkDLine& line) {
133 SkDQuad quad; 139 SkDQuad quad;
134 quad.set(pts); 140 quad.set(pts);
141 fMax = 2;
135 return intersectRay(quad, line); 142 return intersectRay(quad, line);
136 } 143 }
137 144
138 void SkIntersections::quickRemoveOne(int index, int replace) { 145 void SkIntersections::quickRemoveOne(int index, int replace) {
139 if (index < replace) { 146 if (index < replace) {
140 fT[0][index] = fT[0][replace]; 147 fT[0][index] = fT[0][replace];
141 } 148 }
142 } 149 }
143 150
144 #if 0 151 #if 0
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 quad.set(a); 198 quad.set(a);
192 return vertical(quad, top, bottom, x, flipped); 199 return vertical(quad, top, bottom, x, flipped);
193 } 200 }
194 201
195 int SkIntersections::verticalCubic(const SkPoint a[4], SkScalar top, SkScalar bo ttom, 202 int SkIntersections::verticalCubic(const SkPoint a[4], SkScalar top, SkScalar bo ttom,
196 SkScalar x, bool flipped) { 203 SkScalar x, bool flipped) {
197 SkDCubic cubic; 204 SkDCubic cubic;
198 cubic.set(a); 205 cubic.set(a);
199 return vertical(cubic, top, bottom, x, flipped); 206 return vertical(cubic, top, bottom, x, flipped);
200 } 207 }
OLDNEW
« no previous file with comments | « src/pathops/SkIntersections.h ('k') | src/pathops/SkOpAngle.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698