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

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

Issue 1107353004: align top and bounds computations (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: clean up code 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/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 23 matching lines...) Expand all
34 bool* done, bool* sortable); 34 bool* done, bool* sortable);
35 SkOpAngle* activeAngleInner(SkOpSpanBase* start, SkOpSpanBase** startPtr, 35 SkOpAngle* activeAngleInner(SkOpSpanBase* start, SkOpSpanBase** startPtr,
36 SkOpSpanBase** endPtr, bool* done, bool* sortable); 36 SkOpSpanBase** endPtr, bool* done, bool* sortable);
37 SkOpAngle* activeAngleOther(SkOpSpanBase* start, SkOpSpanBase** startPtr, 37 SkOpAngle* activeAngleOther(SkOpSpanBase* start, SkOpSpanBase** startPtr,
38 SkOpSpanBase** endPtr, bool* done, bool* sortable); 38 SkOpSpanBase** endPtr, bool* done, bool* sortable);
39 bool activeOp(SkOpSpanBase* start, SkOpSpanBase* end, int xorMiMask, int xor SuMask, 39 bool activeOp(SkOpSpanBase* start, SkOpSpanBase* end, int xorMiMask, int xor SuMask,
40 SkPathOp op); 40 SkPathOp op);
41 bool activeOp(int xorMiMask, int xorSuMask, SkOpSpanBase* start, SkOpSpanBas e* end, SkPathOp op, 41 bool activeOp(int xorMiMask, int xorSuMask, SkOpSpanBase* start, SkOpSpanBas e* end, SkPathOp op,
42 int* sumMiWinding, int* sumSuWinding); 42 int* sumMiWinding, int* sumSuWinding);
43 43
44 SkPoint activeLeftTop(SkOpSpanBase** firstT); 44 SkDPoint activeLeftTop(SkOpSpanBase** firstT);
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);
51 fBounds.setConicBounds(pts, weight); 51 SkDCurve curve;
52 curve.fConic.set(pts, weight);
53 curve.setConicBounds(pts, weight, 0, 1, &fBounds);
52 return this; 54 return this;
53 } 55 }
54 56
55 SkOpSegment* addCubic(SkPoint pts[4], SkOpContour* parent) { 57 SkOpSegment* addCubic(SkPoint pts[4], SkOpContour* parent) {
56 init(pts, 1, parent, SkPath::kCubic_Verb); 58 init(pts, 1, parent, SkPath::kCubic_Verb);
57 fBounds.setCubicBounds(pts, 1); 59 SkDCurve curve;
60 curve.fCubic.set(pts);
61 curve.setCubicBounds(pts, 1, 0, 1, &fBounds);
58 return this; 62 return this;
59 } 63 }
60 64
61 void addCurveTo(const SkOpSpanBase* start, const SkOpSpanBase* end, SkPathWr iter* path, 65 void addCurveTo(const SkOpSpanBase* start, const SkOpSpanBase* end, SkPathWr iter* path,
62 bool active) const; 66 bool active) const;
63 67
64 SkOpAngle* addEndSpan(SkChunkAlloc* allocator) { 68 SkOpAngle* addEndSpan(SkChunkAlloc* allocator) {
65 SkOpAngle* angle = SkOpTAllocator<SkOpAngle>::Allocate(allocator); 69 SkOpAngle* angle = SkOpTAllocator<SkOpAngle>::Allocate(allocator);
66 angle->set(&fTail, fTail.prev()); 70 angle->set(&fTail, fTail.prev());
67 fTail.setFromAngle(angle); 71 fTail.setFromAngle(angle);
(...skipping 13 matching lines...) Expand all
81 85
82 SkOpAngle* addStartSpan(SkChunkAlloc* allocator) { 86 SkOpAngle* addStartSpan(SkChunkAlloc* allocator) {
83 SkOpAngle* angle = SkOpTAllocator<SkOpAngle>::Allocate(allocator); 87 SkOpAngle* angle = SkOpTAllocator<SkOpAngle>::Allocate(allocator);
84 angle->set(&fHead, fHead.next()); 88 angle->set(&fHead, fHead.next());
85 fHead.setToAngle(angle); 89 fHead.setToAngle(angle);
86 return angle; 90 return angle;
87 } 91 }
88 92
89 SkOpSegment* addQuad(SkPoint pts[3], SkOpContour* parent) { 93 SkOpSegment* addQuad(SkPoint pts[3], SkOpContour* parent) {
90 init(pts, 1, parent, SkPath::kQuad_Verb); 94 init(pts, 1, parent, SkPath::kQuad_Verb);
91 fBounds.setQuadBounds(pts, 1); 95 SkDCurve curve;
96 curve.fQuad.set(pts);
97 curve.setQuadBounds(pts, 1, 0, 1, &fBounds);
92 return this; 98 return this;
93 } 99 }
94 100
95 SkOpPtT* addT(double t, AllowAlias , SkChunkAlloc* ); 101 SkOpPtT* addT(double t, AllowAlias , SkChunkAlloc* );
96 102
97 void align(); 103 void align();
98 static bool BetweenTs(const SkOpSpanBase* lesser, double testT, const SkOpSp anBase* greater); 104 static bool BetweenTs(const SkOpSpanBase* lesser, double testT, const SkOpSp anBase* greater);
99 105
100 const SkPathOpsBounds& bounds() const { 106 const SkPathOpsBounds& bounds() const {
101 return fBounds; 107 return fBounds;
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 } 361 }
356 362
357 SkOpSpanBase* tail() { 363 SkOpSpanBase* tail() {
358 return &fTail; 364 return &fTail;
359 } 365 }
360 366
361 static double TAtMid(const SkOpSpanBase* start, const SkOpSpanBase* end, dou ble mid) { 367 static double TAtMid(const SkOpSpanBase* start, const SkOpSpanBase* end, dou ble mid) {
362 return start->t() * (1 - mid) + end->t() * mid; 368 return start->t() * (1 - mid) + end->t() * mid;
363 } 369 }
364 370
371 SkDPoint top(const SkOpSpanBase* start, const SkOpSpanBase* end, double* top T) const;
372
365 void undoneSpan(SkOpSpanBase** start, SkOpSpanBase** end); 373 void undoneSpan(SkOpSpanBase** start, SkOpSpanBase** end);
366 int updateOppWinding(const SkOpSpanBase* start, const SkOpSpanBase* end) con st; 374 int updateOppWinding(const SkOpSpanBase* start, const SkOpSpanBase* end) con st;
367 int updateOppWinding(const SkOpAngle* angle) const; 375 int updateOppWinding(const SkOpAngle* angle) const;
368 int updateOppWindingReverse(const SkOpAngle* angle) const; 376 int updateOppWindingReverse(const SkOpAngle* angle) const;
369 int updateWinding(const SkOpSpanBase* start, const SkOpSpanBase* end) const; 377 int updateWinding(const SkOpSpanBase* start, const SkOpSpanBase* end) const;
370 int updateWinding(const SkOpAngle* angle) const; 378 int updateWinding(const SkOpAngle* angle) const;
371 int updateWindingReverse(const SkOpAngle* angle) const; 379 int updateWindingReverse(const SkOpAngle* angle) const;
372 380
373 static bool UseInnerWinding(int outerWinding, int innerWinding); 381 static bool UseInnerWinding(int outerWinding, int innerWinding);
374 382
(...skipping 23 matching lines...) Expand all
398 SkScalar fWeight; 406 SkScalar fWeight;
399 int fCount; // number of spans (one for a non-intersecting segment) 407 int fCount; // number of spans (one for a non-intersecting segment)
400 int fDoneCount; // number of processed spans (zero initially) 408 int fDoneCount; // number of processed spans (zero initially)
401 SkPath::Verb fVerb; 409 SkPath::Verb fVerb;
402 SkDCubic::CubicType fCubicType; 410 SkDCubic::CubicType fCubicType;
403 bool fVisited; // used by missing coincidence check 411 bool fVisited; // used by missing coincidence check
404 SkDEBUGCODE(int fID); 412 SkDEBUGCODE(int fID);
405 }; 413 };
406 414
407 #endif 415 #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