OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2009 The Android Open Source Project | 3 * Copyright 2009 The Android Open Source Project |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 | 8 |
9 | 9 |
10 #include "SkEdgeClipper.h" | 10 #include "SkEdgeClipper.h" |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
141 SkASSERT(pts[0].fX <= pts[1].fX); | 141 SkASSERT(pts[0].fX <= pts[1].fX); |
142 SkASSERT(pts[1].fX <= pts[2].fX); | 142 SkASSERT(pts[1].fX <= pts[2].fX); |
143 | 143 |
144 // Now chop in X has needed, and record the segments | 144 // Now chop in X has needed, and record the segments |
145 | 145 |
146 if (pts[2].fX <= clip.fLeft) { // wholly to the left | 146 if (pts[2].fX <= clip.fLeft) { // wholly to the left |
147 this->appendVLine(clip.fLeft, pts[0].fY, pts[2].fY, reverse); | 147 this->appendVLine(clip.fLeft, pts[0].fY, pts[2].fY, reverse); |
148 return; | 148 return; |
149 } | 149 } |
150 if (pts[0].fX >= clip.fRight) { // wholly to the right | 150 if (pts[0].fX >= clip.fRight) { // wholly to the right |
151 this->appendVLine(clip.fRight, pts[0].fY, pts[2].fY, reverse); | 151 if (!this->canCullToTheRight()) { |
| 152 this->appendVLine(clip.fRight, pts[0].fY, pts[2].fY, reverse); |
| 153 } |
152 return; | 154 return; |
153 } | 155 } |
154 | 156 |
155 SkScalar t; | 157 SkScalar t; |
156 SkPoint tmp[5]; // for SkChopQuadAt | 158 SkPoint tmp[5]; // for SkChopQuadAt |
157 | 159 |
158 // are we partially to the left | 160 // are we partially to the left |
159 if (pts[0].fX < clip.fLeft) { | 161 if (pts[0].fX < clip.fLeft) { |
160 if (chopMonoQuadAtX(pts, clip.fLeft, &t)) { | 162 if (chopMonoQuadAtX(pts, clip.fLeft, &t)) { |
161 SkChopQuadAt(pts, tmp, t); | 163 SkChopQuadAt(pts, tmp, t); |
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
343 reverse = !reverse; | 345 reverse = !reverse; |
344 } | 346 } |
345 | 347 |
346 // Now chop in X has needed, and record the segments | 348 // Now chop in X has needed, and record the segments |
347 | 349 |
348 if (pts[3].fX <= clip.fLeft) { // wholly to the left | 350 if (pts[3].fX <= clip.fLeft) { // wholly to the left |
349 this->appendVLine(clip.fLeft, pts[0].fY, pts[3].fY, reverse); | 351 this->appendVLine(clip.fLeft, pts[0].fY, pts[3].fY, reverse); |
350 return; | 352 return; |
351 } | 353 } |
352 if (pts[0].fX >= clip.fRight) { // wholly to the right | 354 if (pts[0].fX >= clip.fRight) { // wholly to the right |
353 this->appendVLine(clip.fRight, pts[0].fY, pts[3].fY, reverse); | 355 if (!this->canCullToTheRight()) { |
| 356 this->appendVLine(clip.fRight, pts[0].fY, pts[3].fY, reverse); |
| 357 } |
354 return; | 358 return; |
355 } | 359 } |
356 | 360 |
357 // are we partially to the left | 361 // are we partially to the left |
358 if (pts[0].fX < clip.fLeft) { | 362 if (pts[0].fX < clip.fLeft) { |
359 SkScalar t; | 363 SkScalar t; |
360 if (chopMonoCubicAtX(pts, clip.fLeft, &t)) { | 364 if (chopMonoCubicAtX(pts, clip.fLeft, &t)) { |
361 SkPoint tmp[7]; | 365 SkPoint tmp[7]; |
362 SkChopCubicAt(pts, tmp, t); | 366 SkChopCubicAt(pts, tmp, t); |
363 this->appendVLine(clip.fLeft, tmp[0].fY, tmp[3].fY, reverse); | 367 this->appendVLine(clip.fLeft, tmp[0].fY, tmp[3].fY, reverse); |
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
522 assert_monotonic(&pts[0].fY, count); | 526 assert_monotonic(&pts[0].fY, count); |
523 } | 527 } |
524 } | 528 } |
525 | 529 |
526 void sk_assert_monotonic_x(const SkPoint pts[], int count) { | 530 void sk_assert_monotonic_x(const SkPoint pts[], int count) { |
527 if (count > 1) { | 531 if (count > 1) { |
528 assert_monotonic(&pts[0].fX, count); | 532 assert_monotonic(&pts[0].fX, count); |
529 } | 533 } |
530 } | 534 } |
531 #endif | 535 #endif |
OLD | NEW |