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

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

Issue 1140813002: deal more consistently with unsortable edges (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: fix linux warning Created 5 years, 7 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
« no previous file with comments | « src/pathops/SkOpCoincidence.cpp ('k') | src/pathops/SkOpSegment.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 #ifndef SkOpSegment_DEFINE 7 #ifndef SkOpSegment_DEFINE
8 #define SkOpSegment_DEFINE 8 #define SkOpSegment_DEFINE
9 9
10 #include "SkOpAngle.h" 10 #include "SkOpAngle.h"
(...skipping 15 matching lines...) Expand all
26 enum AllowAlias { 26 enum AllowAlias {
27 kAllowAlias, 27 kAllowAlias,
28 kNoAlias 28 kNoAlias
29 }; 29 };
30 30
31 bool operator<(const SkOpSegment& rh) const { 31 bool operator<(const SkOpSegment& rh) const {
32 return fBounds.fTop < rh.fBounds.fTop; 32 return fBounds.fTop < rh.fBounds.fTop;
33 } 33 }
34 34
35 SkOpAngle* activeAngle(SkOpSpanBase* start, SkOpSpanBase** startPtr, SkOpSpa nBase** endPtr, 35 SkOpAngle* activeAngle(SkOpSpanBase* start, SkOpSpanBase** startPtr, SkOpSpa nBase** endPtr,
36 bool* done, bool* sortable); 36 bool* done);
37 SkOpAngle* activeAngleInner(SkOpSpanBase* start, SkOpSpanBase** startPtr, 37 SkOpAngle* activeAngleInner(SkOpSpanBase* start, SkOpSpanBase** startPtr,
38 SkOpSpanBase** endPtr, bool* done, bool* sortable); 38 SkOpSpanBase** endPtr, bool* done);
39 SkOpAngle* activeAngleOther(SkOpSpanBase* start, SkOpSpanBase** startPtr, 39 SkOpAngle* activeAngleOther(SkOpSpanBase* start, SkOpSpanBase** startPtr,
40 SkOpSpanBase** endPtr, bool* done, bool* sortable); 40 SkOpSpanBase** endPtr, bool* done);
41 bool activeOp(SkOpSpanBase* start, SkOpSpanBase* end, int xorMiMask, int xor SuMask, 41 bool activeOp(SkOpSpanBase* start, SkOpSpanBase* end, int xorMiMask, int xor SuMask,
42 SkPathOp op); 42 SkPathOp op);
43 bool activeOp(int xorMiMask, int xorSuMask, SkOpSpanBase* start, SkOpSpanBas e* end, SkPathOp op, 43 bool activeOp(int xorMiMask, int xorSuMask, SkOpSpanBase* start, SkOpSpanBas e* end, SkPathOp op,
44 int* sumMiWinding, int* sumSuWinding); 44 int* sumMiWinding, int* sumSuWinding);
45 45
46 bool activeWinding(SkOpSpanBase* start, SkOpSpanBase* end); 46 bool activeWinding(SkOpSpanBase* start, SkOpSpanBase* end);
47 bool activeWinding(SkOpSpanBase* start, SkOpSpanBase* end, int* sumWinding); 47 bool activeWinding(SkOpSpanBase* start, SkOpSpanBase* end, int* sumWinding);
48 48
49 SkOpSegment* addConic(SkPoint pts[3], SkScalar weight, SkOpContour* parent) { 49 SkOpSegment* addConic(SkPoint pts[3], SkScalar weight, SkOpContour* parent) {
50 init(pts, weight, parent, SkPath::kConic_Verb); 50 init(pts, weight, parent, SkPath::kConic_Verb);
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
103 return fBounds; 103 return fBounds;
104 } 104 }
105 105
106 void bumpCount() { 106 void bumpCount() {
107 ++fCount; 107 ++fCount;
108 } 108 }
109 109
110 void calcAngles(SkChunkAlloc*); 110 void calcAngles(SkChunkAlloc*);
111 void checkAngleCoin(SkOpCoincidence* coincidences, SkChunkAlloc* allocator); 111 void checkAngleCoin(SkOpCoincidence* coincidences, SkChunkAlloc* allocator);
112 void checkNearCoincidence(SkOpAngle* ); 112 void checkNearCoincidence(SkOpAngle* );
113 bool collapsed() const;
113 static void ComputeOneSum(const SkOpAngle* baseAngle, SkOpAngle* nextAngle, 114 static void ComputeOneSum(const SkOpAngle* baseAngle, SkOpAngle* nextAngle,
114 SkOpAngle::IncludeType ); 115 SkOpAngle::IncludeType );
115 static void ComputeOneSumReverse(SkOpAngle* baseAngle, SkOpAngle* nextAngle, 116 static void ComputeOneSumReverse(SkOpAngle* baseAngle, SkOpAngle* nextAngle,
116 SkOpAngle::IncludeType ); 117 SkOpAngle::IncludeType );
117 int computeSum(SkOpSpanBase* start, SkOpSpanBase* end, SkOpAngle::IncludeTyp e includeType); 118 int computeSum(SkOpSpanBase* start, SkOpSpanBase* end, SkOpAngle::IncludeTyp e includeType);
118 119
119 SkOpContour* contour() const { 120 SkOpContour* contour() const {
120 return fContour; 121 return fContour;
121 } 122 }
122 123
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
299 } 300 }
300 301
301 void setNext(SkOpSegment* next) { 302 void setNext(SkOpSegment* next) {
302 fNext = next; 303 fNext = next;
303 } 304 }
304 305
305 void setPrev(SkOpSegment* prev) { 306 void setPrev(SkOpSegment* prev) {
306 fPrev = prev; 307 fPrev = prev;
307 } 308 }
308 309
309 bool setVisited() { 310 void setVisited() {
310 if (fVisited) { 311 fVisited = true;
311 return false;
312 }
313 return (fVisited = true);
314 } 312 }
315 313
316 void setUpWinding(SkOpSpanBase* start, SkOpSpanBase* end, int* maxWinding, i nt* sumWinding) { 314 void setUpWinding(SkOpSpanBase* start, SkOpSpanBase* end, int* maxWinding, i nt* sumWinding) {
317 int deltaSum = SpanSign(start, end); 315 int deltaSum = SpanSign(start, end);
318 *maxWinding = *sumWinding; 316 *maxWinding = *sumWinding;
319 *sumWinding -= deltaSum; 317 *sumWinding -= deltaSum;
320 } 318 }
321 319
322 void setUpWindings(SkOpSpanBase* start, SkOpSpanBase* end, int* sumMiWinding , 320 void setUpWindings(SkOpSpanBase* start, SkOpSpanBase* end, int* sumMiWinding ,
323 int* maxWinding, int* sumWinding); 321 int* maxWinding, int* sumWinding);
(...skipping 30 matching lines...) Expand all
354 int updateWinding(SkOpSpanBase* start, SkOpSpanBase* end); 352 int updateWinding(SkOpSpanBase* start, SkOpSpanBase* end);
355 int updateWinding(SkOpAngle* angle); 353 int updateWinding(SkOpAngle* angle);
356 int updateWindingReverse(const SkOpAngle* angle); 354 int updateWindingReverse(const SkOpAngle* angle);
357 355
358 static bool UseInnerWinding(int outerWinding, int innerWinding); 356 static bool UseInnerWinding(int outerWinding, int innerWinding);
359 357
360 SkPath::Verb verb() const { 358 SkPath::Verb verb() const {
361 return fVerb; 359 return fVerb;
362 } 360 }
363 361
362 // look for two different spans that point to the same opposite segment
363 bool visited() {
364 if (!fVisited) {
365 fVisited = true;
366 return false;
367 }
368 return true;
369 }
370
364 SkScalar weight() const { 371 SkScalar weight() const {
365 return fWeight; 372 return fWeight;
366 } 373 }
367 374
368 SkOpSpan* windingSpanAtT(double tHit); 375 SkOpSpan* windingSpanAtT(double tHit);
369 int windSum(const SkOpAngle* angle) const; 376 int windSum(const SkOpAngle* angle) const;
370 377
371 SkPoint* writablePt(bool end) { 378 SkPoint* writablePt(bool end) {
372 return &fPts[end ? SkPathOpsVerbToPoints(fVerb) : 0]; 379 return &fPts[end ? SkPathOpsVerbToPoints(fVerb) : 0];
373 } 380 }
(...skipping 10 matching lines...) Expand all
384 int fCount; // number of spans (one for a non-intersecting segment) 391 int fCount; // number of spans (one for a non-intersecting segment)
385 int fDoneCount; // number of processed spans (zero initially) 392 int fDoneCount; // number of processed spans (zero initially)
386 SkPath::Verb fVerb; 393 SkPath::Verb fVerb;
387 SkDCubic::CubicType fCubicType; 394 SkDCubic::CubicType fCubicType;
388 bool fTopsFound; 395 bool fTopsFound;
389 bool fVisited; // used by missing coincidence check 396 bool fVisited; // used by missing coincidence check
390 SkDEBUGCODE(int fID); 397 SkDEBUGCODE(int fID);
391 }; 398 };
392 399
393 #endif 400 #endif
OLDNEW
« no previous file with comments | « src/pathops/SkOpCoincidence.cpp ('k') | src/pathops/SkOpSegment.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698