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

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

Issue 633393002: harden pathops for pathological test (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: exclude new test that asserts in debug Created 6 years, 1 month 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/SkOpContour.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 284 matching lines...) Expand 10 before | Expand all | Expand 10 after
295 void alignSpanState(int start, int end); 295 void alignSpanState(int start, int end);
296 bool betweenTs(int lesser, double testT, int greater) const; 296 bool betweenTs(int lesser, double testT, int greater) const;
297 void blindCancel(const SkCoincidence& coincidence, SkOpSegment* other); 297 void blindCancel(const SkCoincidence& coincidence, SkOpSegment* other);
298 void blindCoincident(const SkCoincidence& coincidence, SkOpSegment* other); 298 void blindCoincident(const SkCoincidence& coincidence, SkOpSegment* other);
299 bool calcAngles(); 299 bool calcAngles();
300 double calcMissingTEnd(const SkOpSegment* ref, double loEnd, double min, dou ble max, 300 double calcMissingTEnd(const SkOpSegment* ref, double loEnd, double min, dou ble max,
301 double hiEnd, const SkOpSegment* other, int thisEnd); 301 double hiEnd, const SkOpSegment* other, int thisEnd);
302 double calcMissingTStart(const SkOpSegment* ref, double loEnd, double min, d ouble max, 302 double calcMissingTStart(const SkOpSegment* ref, double loEnd, double min, d ouble max,
303 double hiEnd, const SkOpSegment* other, int thisEnd ); 303 double hiEnd, const SkOpSegment* other, int thisEnd );
304 void checkDuplicates(); 304 void checkDuplicates();
305 void checkEnds(); 305 bool checkEnds();
306 void checkMultiples(); 306 void checkMultiples();
307 void checkSmall(); 307 void checkSmall();
308 bool checkSmall(int index) const; 308 bool checkSmall(int index) const;
309 void checkTiny(); 309 void checkTiny();
310 int computeSum(int startIndex, int endIndex, SkOpAngle::IncludeType includeT ype); 310 int computeSum(int startIndex, int endIndex, SkOpAngle::IncludeType includeT ype);
311 bool containsPt(const SkPoint& , int index, int endIndex) const; 311 bool containsPt(const SkPoint& , int index, int endIndex) const;
312 int crossedSpanY(const SkPoint& basePt, SkScalar* bestY, double* hitT, bool* hitSomething, 312 int crossedSpanY(const SkPoint& basePt, SkScalar* bestY, double* hitT, bool* hitSomething,
313 double mid, bool opp, bool current) const; 313 double mid, bool opp, bool current) const;
314 bool findCoincidentMatch(const SkOpSpan* span, const SkOpSegment* other, int oStart, int oEnd, 314 bool findCoincidentMatch(const SkOpSpan* span, const SkOpSegment* other, int oStart, int oEnd,
315 int step, SkPoint* startPt, SkPoint* endPt, double* endT) const; 315 int step, SkPoint* startPt, SkPoint* endPt, double* endT) const;
316 SkOpSegment* findNextOp(SkTDArray<SkOpSpan*>* chase, int* nextStart, int* ne xtEnd, 316 SkOpSegment* findNextOp(SkTDArray<SkOpSpan*>* chase, int* nextStart, int* ne xtEnd,
317 bool* unsortable, SkPathOp op, int xorMiMask, int xo rSuMask); 317 bool* unsortable, SkPathOp op, int xorMiMask, int xo rSuMask);
318 SkOpSegment* findNextWinding(SkTDArray<SkOpSpan*>* chase, int* nextStart, in t* nextEnd, 318 SkOpSegment* findNextWinding(SkTDArray<SkOpSpan*>* chase, int* nextStart, in t* nextEnd,
319 bool* unsortable); 319 bool* unsortable);
320 SkOpSegment* findNextXor(int* nextStart, int* nextEnd, bool* unsortable); 320 SkOpSegment* findNextXor(int* nextStart, int* nextEnd, bool* unsortable);
321 int findExactT(double t, const SkOpSegment* ) const; 321 int findExactT(double t, const SkOpSegment* ) const;
322 int findOtherT(double t, const SkOpSegment* ) const; 322 int findOtherT(double t, const SkOpSegment* ) const;
323 int findT(double t, const SkPoint& , const SkOpSegment* ) const; 323 int findT(double t, const SkPoint& , const SkOpSegment* ) const;
324 SkOpSegment* findTop(int* tIndex, int* endIndex, bool* unsortable, bool firs tPass); 324 SkOpSegment* findTop(int* tIndex, int* endIndex, bool* unsortable, bool firs tPass);
325 void fixOtherTIndex(); 325 void fixOtherTIndex();
326 bool inconsistentAngle(int maxWinding, int sumWinding, int oppMaxWinding, in t oppSumWinding,
327 const SkOpAngle* angle) const;
326 void initWinding(int start, int end, SkOpAngle::IncludeType angleIncludeType ); 328 void initWinding(int start, int end, SkOpAngle::IncludeType angleIncludeType );
327 void initWinding(int start, int end, double tHit, int winding, SkScalar hitD x, int oppWind, 329 bool initWinding(int start, int end, double tHit, int winding, SkScalar hitD x, int oppWind,
328 SkScalar hitOppDx); 330 SkScalar hitOppDx);
329 bool isMissing(double startT, const SkPoint& pt) const; 331 bool isMissing(double startT, const SkPoint& pt) const;
330 bool isTiny(const SkOpAngle* angle) const; 332 bool isTiny(const SkOpAngle* angle) const;
331 bool joinCoincidence(SkOpSegment* other, double otherT, const SkPoint& other Pt, int step, 333 bool joinCoincidence(SkOpSegment* other, double otherT, const SkPoint& other Pt, int step,
332 bool cancel); 334 bool cancel);
333 SkOpSpan* markAndChaseDoneBinary(int index, int endIndex); 335 SkOpSpan* markAndChaseDoneBinary(int index, int endIndex);
334 SkOpSpan* markAndChaseDoneUnary(int index, int endIndex); 336 SkOpSpan* markAndChaseDoneUnary(int index, int endIndex);
335 SkOpSpan* markAndChaseWinding(const SkOpAngle* angle, int winding, int oppWi nding); 337 bool markAndChaseWinding(const SkOpAngle* angle, int winding, int oppWinding ,
338 SkOpSpan** lastPtr);
336 SkOpSpan* markAngle(int maxWinding, int sumWinding, int oppMaxWinding, int o ppSumWinding, 339 SkOpSpan* markAngle(int maxWinding, int sumWinding, int oppMaxWinding, int o ppSumWinding,
337 const SkOpAngle* angle); 340 const SkOpAngle* angle);
338 void markDone(int index, int winding); 341 void markDone(int index, int winding);
339 void markDoneBinary(int index); 342 void markDoneBinary(int index);
343 void markDoneFinal(int index);
340 void markDoneUnary(int index); 344 void markDoneUnary(int index);
341 bool nextCandidate(int* start, int* end) const; 345 bool nextCandidate(int* start, int* end) const;
342 int nextSpan(int from, int step) const; 346 int nextSpan(int from, int step) const;
343 void pinT(const SkPoint& pt, double* t); 347 void pinT(const SkPoint& pt, double* t);
344 void setUpWindings(int index, int endIndex, int* sumMiWinding, int* sumSuWin ding, 348 void setUpWindings(int index, int endIndex, int* sumMiWinding, int* sumSuWin ding,
345 int* maxWinding, int* sumWinding, int* oppMaxWinding, int* oppSumWin ding); 349 int* maxWinding, int* sumWinding, int* oppMaxWinding, int* oppSumWin ding);
346 void sortAngles(); 350 void sortAngles();
347 bool subDivide(int start, int end, SkPoint edge[4]) const; 351 bool subDivide(int start, int end, SkPoint edge[4]) const;
348 bool subDivide(int start, int end, SkDCubic* result) const; 352 bool subDivide(int start, int end, SkDCubic* result) const;
349 void undoneSpan(int* start, int* end); 353 void undoneSpan(int* start, int* end);
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
396 const SkOpAngle* activeAngleOther(int index, int* start, int* end, bool* don e, 400 const SkOpAngle* activeAngleOther(int index, int* start, int* end, bool* don e,
397 bool* sortable) const; 401 bool* sortable) const;
398 bool activeOp(int xorMiMask, int xorSuMask, int index, int endIndex, SkPathO p op, 402 bool activeOp(int xorMiMask, int xorSuMask, int index, int endIndex, SkPathO p op,
399 int* sumMiWinding, int* sumSuWinding); 403 int* sumMiWinding, int* sumSuWinding);
400 bool activeWinding(int index, int endIndex, int* sumWinding); 404 bool activeWinding(int index, int endIndex, int* sumWinding);
401 void addCancelOutsides(const SkPoint& startPt, const SkPoint& endPt, SkOpSeg ment* other); 405 void addCancelOutsides(const SkPoint& startPt, const SkPoint& endPt, SkOpSeg ment* other);
402 void addCoinOutsides(const SkPoint& startPt, const SkPoint& endPt, SkOpSegme nt* other); 406 void addCoinOutsides(const SkPoint& startPt, const SkPoint& endPt, SkOpSegme nt* other);
403 SkOpAngle* addSingletonAngleDown(SkOpSegment** otherPtr, SkOpAngle** ); 407 SkOpAngle* addSingletonAngleDown(SkOpSegment** otherPtr, SkOpAngle** );
404 SkOpAngle* addSingletonAngleUp(SkOpSegment** otherPtr, SkOpAngle** ); 408 SkOpAngle* addSingletonAngleUp(SkOpSegment** otherPtr, SkOpAngle** );
405 SkOpAngle* addSingletonAngles(int step); 409 SkOpAngle* addSingletonAngles(int step);
410 void alignRange(int lower, int upper, const SkOpSegment* other, int oLower, int oUpper);
406 void alignSpan(const SkPoint& newPt, double newT, const SkOpSegment* other, double otherT, 411 void alignSpan(const SkPoint& newPt, double newT, const SkOpSegment* other, double otherT,
407 const SkOpSegment* other2, SkOpSpan* oSpan, SkTDArray<Aligned Span>* ); 412 const SkOpSegment* other2, SkOpSpan* oSpan, SkTDArray<Aligned Span>* );
408 bool betweenPoints(double midT, const SkPoint& pt1, const SkPoint& pt2) cons t; 413 bool betweenPoints(double midT, const SkPoint& pt1, const SkPoint& pt2) cons t;
409 void bumpCoincidentBlind(bool binary, int index, int last); 414 void bumpCoincidentBlind(bool binary, int index, int last);
410 bool bumpCoincidentThis(const SkOpSpan& oTest, bool binary, int* index, 415 bool bumpCoincidentThis(const SkOpSpan& oTest, bool binary, int* index,
411 SkTArray<SkPoint, true>* outsideTs); 416 SkTArray<SkPoint, true>* outsideTs);
412 void bumpCoincidentOBlind(int index, int last); 417 void bumpCoincidentOBlind(int index, int last);
413 void bumpCoincidentOther(const SkOpSpan& oTest, int* index, 418 bool bumpCoincidentOther(const SkOpSpan& oTest, int* index,
414 SkTArray<SkPoint, true>* outsideTs); 419 SkTArray<SkPoint, true>* outsideTs, const SkPoint& endPt);
415 bool bumpSpan(SkOpSpan* span, int windDelta, int oppDelta); 420 bool bumpSpan(SkOpSpan* span, int windDelta, int oppDelta);
416 bool calcLoopSpanCount(const SkOpSpan& thisSpan, int* smallCounts); 421 bool calcLoopSpanCount(const SkOpSpan& thisSpan, int* smallCounts);
417 bool checkForSmall(const SkOpSpan* span, const SkPoint& pt, double newT, 422 bool checkForSmall(const SkOpSpan* span, const SkPoint& pt, double newT,
418 int* less, int* more) const; 423 int* less, int* more) const;
419 void checkLinks(const SkOpSpan* , 424 void checkLinks(const SkOpSpan* ,
420 SkTArray<MissingSpan, true>* missingSpans) const; 425 SkTArray<MissingSpan, true>* missingSpans) const;
421 static void CheckOneLink(const SkOpSpan* test, const SkOpSpan* oSpan, 426 static void CheckOneLink(const SkOpSpan* test, const SkOpSpan* oSpan,
422 const SkOpSpan* oFirst, const SkOpSpan* oLast, 427 const SkOpSpan* oFirst, const SkOpSpan* oLast,
423 const SkOpSpan** missingPtr, 428 const SkOpSpan** missingPtr,
424 SkTArray<MissingSpan, true>* missingSpans); 429 SkTArray<MissingSpan, true>* missingSpans);
425 int checkSetAngle(int tIndex) const; 430 int checkSetAngle(int tIndex) const;
426 void checkSmallCoincidence(const SkOpSpan& span, SkTArray<MissingSpan, true> * ); 431 void checkSmallCoincidence(const SkOpSpan& span, SkTArray<MissingSpan, true> * );
427 bool coincidentSmall(const SkPoint& pt, double t, const SkOpSegment* other) const; 432 bool coincidentSmall(const SkPoint& pt, double t, const SkOpSegment* other) const;
428 bool clockwise(int tStart, int tEnd, bool* swap) const; 433 bool clockwise(int tStart, int tEnd, bool* swap) const;
429 static void ComputeOneSum(const SkOpAngle* baseAngle, SkOpAngle* nextAngle, 434 static void ComputeOneSum(const SkOpAngle* baseAngle, SkOpAngle* nextAngle,
430 SkOpAngle::IncludeType ); 435 SkOpAngle::IncludeType );
431 static void ComputeOneSumReverse(const SkOpAngle* baseAngle, SkOpAngle* next Angle, 436 static void ComputeOneSumReverse(const SkOpAngle* baseAngle, SkOpAngle* next Angle,
432 SkOpAngle::IncludeType ); 437 SkOpAngle::IncludeType );
433 bool containsT(double t, const SkOpSegment* other, double otherT) const; 438 bool containsT(double t, const SkOpSegment* other, double otherT) const;
434 bool decrementSpan(SkOpSpan* span); 439 bool decrementSpan(SkOpSpan* span);
435 int findEndSpan(int endIndex) const; 440 int findEndSpan(int endIndex) const;
436 int findStartSpan(int startIndex) const; 441 int findStartSpan(int startIndex) const;
437 int firstActive(int tIndex) const; 442 int firstActive(int tIndex) const;
438 const SkOpSpan& firstSpan(const SkOpSpan& thisSpan) const; 443 const SkOpSpan& firstSpan(const SkOpSpan& thisSpan) const;
439 void init(const SkPoint pts[], SkPath::Verb verb, bool operand, bool evenOdd ); 444 void init(const SkPoint pts[], SkPath::Verb verb, bool operand, bool evenOdd );
440 bool inCoincidentSpan(double t, const SkOpSegment* other) const; 445 bool inCoincidentSpan(double t, const SkOpSegment* other) const;
446 bool inconsistentWinding(const SkOpAngle* , int maxWinding, int oppMaxWindin g) const;
447 bool inconsistentWinding(int min, int maxWinding, int oppMaxWinding) const;
448 bool inconsistentWinding(const char* funName, int tIndex, int winding, int o ppWinding) const;
441 bool inLoop(const SkOpAngle* baseAngle, int spanCount, int* indexPtr) const; 449 bool inLoop(const SkOpAngle* baseAngle, int spanCount, int* indexPtr) const;
442 #if OLD_CHASE 450 #if OLD_CHASE
443 bool isSimple(int end) const; 451 bool isSimple(int end) const;
444 #else 452 #else
445 SkOpSegment* isSimple(int* end, int* step); 453 SkOpSegment* isSimple(int* end, int* step);
446 #endif 454 #endif
447 bool isTiny(int index) const; 455 bool isTiny(int index) const;
448 const SkOpSpan& lastSpan(const SkOpSpan& thisSpan) const; 456 const SkOpSpan& lastSpan(const SkOpSpan& thisSpan) const;
449 void matchWindingValue(int tIndex, double t, bool borrowWind); 457 void matchWindingValue(int tIndex, double t, bool borrowWind);
450 SkOpSpan* markAndChaseDone(int index, int endIndex, int winding); 458 SkOpSpan* markAndChaseDone(int index, int endIndex, int winding);
451 SkOpSpan* markAndChaseDoneBinary(const SkOpAngle* angle, int winding, int op pWinding); 459 SkOpSpan* markAndChaseDoneBinary(const SkOpAngle* angle, int winding, int op pWinding);
452 SkOpSpan* markAndChaseWinding(const SkOpAngle* angle, int winding); 460 bool markAndChaseWinding(const SkOpAngle* angle, int winding, SkOpSpan** las tPtr);
453 SkOpSpan* markAndChaseWinding(int index, int endIndex, int winding); 461 bool markAndChaseWinding(int index, int endIndex, int winding, SkOpSpan** la stPtr);
454 SkOpSpan* markAndChaseWinding(int index, int endIndex, int winding, int oppW inding); 462 bool markAndChaseWinding(int index, int endIndex, int winding, int oppWindin g,
463 SkOpSpan** lastPtr);
455 SkOpSpan* markAngle(int maxWinding, int sumWinding, const SkOpAngle* angle); 464 SkOpSpan* markAngle(int maxWinding, int sumWinding, const SkOpAngle* angle);
456 void markDoneBinary(int index, int winding, int oppWinding); 465 void markDoneBinary(int index, int winding, int oppWinding);
457 SkOpSpan* markAndChaseDoneUnary(const SkOpAngle* angle, int winding); 466 SkOpSpan* markAndChaseDoneUnary(const SkOpAngle* angle, int winding);
458 void markOneDone(const char* funName, int tIndex, int winding); 467 void markOneDone(const char* funName, int tIndex, int winding);
459 void markOneDoneBinary(const char* funName, int tIndex); 468 void markOneDoneBinary(const char* funName, int tIndex);
460 void markOneDoneBinary(const char* funName, int tIndex, int winding, int opp Winding); 469 void markOneDoneBinary(const char* funName, int tIndex, int winding, int opp Winding);
470 void markOneDoneFinal(const char* funName, int tIndex);
461 void markOneDoneUnary(const char* funName, int tIndex); 471 void markOneDoneUnary(const char* funName, int tIndex);
462 SkOpSpan* markOneWinding(const char* funName, int tIndex, int winding); 472 bool markOneWinding(const char* funName, int tIndex, int winding, SkOpSpan** lastPtr);
463 SkOpSpan* markOneWinding(const char* funName, int tIndex, int winding, int o ppWinding); 473 bool markOneWinding(const char* funName, int tIndex, int winding, int oppWin ding,
464 void markWinding(int index, int winding); 474 SkOpSpan** lastPtr);
465 void markWinding(int index, int winding, int oppWinding); 475 bool markWinding(int index, int winding);
476 bool markWinding(int index, int winding, int oppWinding);
466 bool monotonicInY(int tStart, int tEnd) const; 477 bool monotonicInY(int tStart, int tEnd) const;
467 478
468 bool multipleEnds() const { return fTs[count() - 2].fT == 1; } 479 bool multipleEnds() const { return fTs[count() - 2].fT == 1; }
469 bool multipleStarts() const { return fTs[1].fT == 0; } 480 bool multipleStarts() const { return fTs[1].fT == 0; }
470 481
471 SkOpSegment* nextChase(int* index, int* step, int* min, SkOpSpan** last); 482 SkOpSegment* nextChase(int* index, int* step, int* min, SkOpSpan** last) con st;
472 int nextExactSpan(int from, int step) const; 483 int nextExactSpan(int from, int step) const;
484 void resetSpanFlags();
473 bool serpentine(int tStart, int tEnd) const; 485 bool serpentine(int tStart, int tEnd) const;
474 void setCoincidentRange(const SkPoint& startPt, const SkPoint& endPt, SkOpS egment* other); 486 void setCoincidentRange(const SkPoint& startPt, const SkPoint& endPt, SkOpS egment* other);
475 void setFromAngle(int endIndex, SkOpAngle* ); 487 void setFromAngle(int endIndex, SkOpAngle* );
488 void setSpanFlags(const SkPoint& pt, double newT, SkOpSpan* span);
476 void setToAngle(int endIndex, SkOpAngle* ); 489 void setToAngle(int endIndex, SkOpAngle* );
477 void setUpWindings(int index, int endIndex, int* sumMiWinding, 490 void setUpWindings(int index, int endIndex, int* sumMiWinding,
478 int* maxWinding, int* sumWinding); 491 int* maxWinding, int* sumWinding);
479 void subDivideBounds(int start, int end, SkPathOpsBounds* bounds) const; 492 void subDivideBounds(int start, int end, SkPathOpsBounds* bounds) const;
480 static void TrackOutsidePair(SkTArray<SkPoint, true>* outsideTs, const SkPoi nt& endPt, 493 static void TrackOutsidePair(SkTArray<SkPoint, true>* outsideTs, const SkPoi nt& endPt,
481 const SkPoint& startPt); 494 const SkPoint& startPt);
482 static void TrackOutside(SkTArray<SkPoint, true>* outsideTs, const SkPoint& startPt); 495 static void TrackOutside(SkTArray<SkPoint, true>* outsideTs, const SkPoint& startPt);
483 int updateOppWinding(int index, int endIndex) const; 496 int updateOppWinding(int index, int endIndex) const;
484 int updateOppWinding(const SkOpAngle* angle) const; 497 int updateOppWinding(const SkOpAngle* angle) const;
485 int updateWinding(int index, int endIndex) const; 498 int updateWinding(int index, int endIndex) const;
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
520 return value < 0 ? '?' : value <= 9 ? '0' + value : '+'; 533 return value < 0 ? '?' : value <= 9 ? '0' + value : '+';
521 } 534 }
522 #endif 535 #endif
523 // available to testing only 536 // available to testing only
524 void debugConstruct(); 537 void debugConstruct();
525 void debugConstructCubic(SkPoint shortQuad[4]); 538 void debugConstructCubic(SkPoint shortQuad[4]);
526 void debugConstructLine(SkPoint shortQuad[2]); 539 void debugConstructLine(SkPoint shortQuad[2]);
527 void debugConstructQuad(SkPoint shortQuad[3]); 540 void debugConstructQuad(SkPoint shortQuad[3]);
528 void debugReset(); 541 void debugReset();
529 void dumpDPts() const; 542 void dumpDPts() const;
543 void dumpHexPts() const;
530 void dumpSpan(int index) const; 544 void dumpSpan(int index) const;
531 545
532 const SkPoint* fPts; 546 const SkPoint* fPts;
533 SkPathOpsBounds fBounds; 547 SkPathOpsBounds fBounds;
534 // FIXME: can't convert to SkTArray because it uses insert 548 // FIXME: can't convert to SkTArray because it uses insert
535 SkTDArray<SkOpSpan> fTs; // 2+ (always includes t=0 t=1) -- at least (numbe r of spans) + 1 549 SkTDArray<SkOpSpan> fTs; // 2+ (always includes t=0 t=1) -- at least (numbe r of spans) + 1
536 SkOpAngleSet fAngles; // empty or 2+ -- (number of non-zero spans) * 2 550 SkOpAngleSet fAngles; // empty or 2+ -- (number of non-zero spans) * 2
537 // OPTIMIZATION: could pack donespans, verb, operand, xor into 1 int-sized v alue 551 // OPTIMIZATION: could pack donespans, verb, operand, xor into 1 int-sized v alue
538 int fDoneSpans; // quick check that segment is finished 552 int fDoneSpans; // quick check that segment is finished
539 // OPTIMIZATION: force the following to be byte-sized 553 // OPTIMIZATION: force the following to be byte-sized
540 SkPath::Verb fVerb; 554 SkPath::Verb fVerb;
541 bool fLoop; // set if cubic intersects itself 555 bool fLoop; // set if cubic intersects itself
542 bool fMultiples; // set if curve intersects multiple other curves at one in terior point 556 bool fMultiples; // set if curve intersects multiple other curves at one in terior point
543 bool fOperand; 557 bool fOperand;
544 bool fXor; // set if original contour had even-odd fill 558 bool fXor; // set if original contour had even-odd fill
545 bool fOppXor; // set if opposite operand had even-odd fill 559 bool fOppXor; // set if opposite operand had even-odd fill
546 bool fSmall; // set if some span is small 560 bool fSmall; // set if some span is small
547 bool fTiny; // set if some span is tiny 561 bool fTiny; // set if some span is tiny
548 #if defined(SK_DEBUG) || !FORCE_RELEASE 562 #if defined(SK_DEBUG) || !FORCE_RELEASE
549 int fID; 563 int fID;
550 #endif 564 #endif
551 565
552 friend class PathOpsSegmentTester; 566 friend class PathOpsSegmentTester;
553 }; 567 };
554 568
555 #endif 569 #endif
OLDNEW
« no previous file with comments | « src/pathops/SkOpContour.cpp ('k') | src/pathops/SkOpSegment.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698