OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2008 The Android Open Source Project | 3 * Copyright 2008 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 "SkCanvas.h" | 10 #include "SkCanvas.h" |
(...skipping 1324 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1335 devPath.setFillType(SkPath::kInverseEvenOdd_FillType); | 1335 devPath.setFillType(SkPath::kInverseEvenOdd_FillType); |
1336 const SkClipStack* clipStack = getClipStack(); | 1336 const SkClipStack* clipStack = getClipStack(); |
1337 SkClipStack::Iter iter(*clipStack, SkClipStack::Iter::kBottom_IterStart)
; | 1337 SkClipStack::Iter iter(*clipStack, SkClipStack::Iter::kBottom_IterStart)
; |
1338 const SkClipStack::Element* element; | 1338 const SkClipStack::Element* element; |
1339 while ((element = iter.next())) { | 1339 while ((element = iter.next())) { |
1340 SkClipStack::Element::Type type = element->getType(); | 1340 SkClipStack::Element::Type type = element->getType(); |
1341 if (type == SkClipStack::Element::kEmpty_Type) { | 1341 if (type == SkClipStack::Element::kEmpty_Type) { |
1342 continue; | 1342 continue; |
1343 } | 1343 } |
1344 SkPath operand; | 1344 SkPath operand; |
1345 if (type == SkClipStack::Element::kRect_Type) { | 1345 element->asPath(&operand); |
1346 operand.addRect(element->getRect()); | |
1347 } else if (type == SkClipStack::Element::kPath_Type) { | |
1348 operand = element->getPath(); | |
1349 } else { | |
1350 SkDEBUGFAIL("Unexpected type."); | |
1351 } | |
1352 SkRegion::Op elementOp = element->getOp(); | 1346 SkRegion::Op elementOp = element->getOp(); |
1353 if (elementOp == SkRegion::kReplace_Op) { | 1347 if (elementOp == SkRegion::kReplace_Op) { |
1354 devPath = operand; | 1348 devPath = operand; |
1355 } else { | 1349 } else { |
1356 Op(devPath, operand, (SkPathOp) elementOp, &devPath); | 1350 Op(devPath, operand, (SkPathOp) elementOp, &devPath); |
1357 } | 1351 } |
1358 // if the prev and curr clips disagree about aa -vs- not, favor the
aa request. | 1352 // if the prev and curr clips disagree about aa -vs- not, favor the
aa request. |
1359 // perhaps we need an API change to avoid this sort of mixed-signals
about | 1353 // perhaps we need an API change to avoid this sort of mixed-signals
about |
1360 // clipping. | 1354 // clipping. |
1361 doAA |= element->isAA(); | 1355 doAA |= element->isAA(); |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1498 void SkCanvas::replayClips(ClipVisitor* visitor) const { | 1492 void SkCanvas::replayClips(ClipVisitor* visitor) const { |
1499 SkClipStack::B2TIter iter(fClipStack); | 1493 SkClipStack::B2TIter iter(fClipStack); |
1500 const SkClipStack::Element* element; | 1494 const SkClipStack::Element* element; |
1501 | 1495 |
1502 static const SkRect kEmpty = { 0, 0, 0, 0 }; | 1496 static const SkRect kEmpty = { 0, 0, 0, 0 }; |
1503 while ((element = iter.next()) != NULL) { | 1497 while ((element = iter.next()) != NULL) { |
1504 switch (element->getType()) { | 1498 switch (element->getType()) { |
1505 case SkClipStack::Element::kPath_Type: | 1499 case SkClipStack::Element::kPath_Type: |
1506 visitor->clipPath(element->getPath(), element->getOp(), element-
>isAA()); | 1500 visitor->clipPath(element->getPath(), element->getOp(), element-
>isAA()); |
1507 break; | 1501 break; |
| 1502 case SkClipStack::Element::kRRect_Type: |
| 1503 visitor->clipRRect(element->getRRect(), element->getOp(), elemen
t->isAA()); |
| 1504 break; |
1508 case SkClipStack::Element::kRect_Type: | 1505 case SkClipStack::Element::kRect_Type: |
1509 visitor->clipRect(element->getRect(), element->getOp(), element-
>isAA()); | 1506 visitor->clipRect(element->getRect(), element->getOp(), element-
>isAA()); |
1510 break; | 1507 break; |
1511 case SkClipStack::Element::kEmpty_Type: | 1508 case SkClipStack::Element::kEmpty_Type: |
1512 visitor->clipRect(kEmpty, SkRegion::kIntersect_Op, false); | 1509 visitor->clipRect(kEmpty, SkRegion::kIntersect_Op, false); |
1513 break; | 1510 break; |
1514 } | 1511 } |
1515 } | 1512 } |
1516 } | 1513 } |
1517 | 1514 |
(...skipping 763 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2281 return *paint; | 2278 return *paint; |
2282 } | 2279 } |
2283 | 2280 |
2284 const SkRegion& SkCanvas::LayerIter::clip() const { return fImpl->getClip(); } | 2281 const SkRegion& SkCanvas::LayerIter::clip() const { return fImpl->getClip(); } |
2285 int SkCanvas::LayerIter::x() const { return fImpl->getX(); } | 2282 int SkCanvas::LayerIter::x() const { return fImpl->getX(); } |
2286 int SkCanvas::LayerIter::y() const { return fImpl->getY(); } | 2283 int SkCanvas::LayerIter::y() const { return fImpl->getY(); } |
2287 | 2284 |
2288 /////////////////////////////////////////////////////////////////////////////// | 2285 /////////////////////////////////////////////////////////////////////////////// |
2289 | 2286 |
2290 SkCanvas::ClipVisitor::~ClipVisitor() { } | 2287 SkCanvas::ClipVisitor::~ClipVisitor() { } |
OLD | NEW |