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

Side by Side Diff: src/core/SkCanvas.cpp

Issue 163683002: Store SkRRects in SkClipStack (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: fix typo in last upload Created 6 years, 10 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 | Annotate | Revision Log
OLDNEW
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
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
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
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() { }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698