| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2008 The Android Open Source Project | 2 * Copyright 2008 The Android Open Source Project |
| 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 | 7 |
| 8 #include "SkCanvas.h" | 8 #include "SkCanvas.h" |
| 9 #include "SkCanvasDrawable.h" | 9 #include "SkCanvasDrawable.h" |
| 10 #include "SkCanvasPriv.h" | 10 #include "SkCanvasPriv.h" |
| (...skipping 1428 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1439 if (devPath.getBounds().isEmpty()) { | 1439 if (devPath.getBounds().isEmpty()) { |
| 1440 // resetting the path will remove any NaN or other wanky values | 1440 // resetting the path will remove any NaN or other wanky values |
| 1441 // that might upset our scan converter. | 1441 // that might upset our scan converter. |
| 1442 devPath.reset(); | 1442 devPath.reset(); |
| 1443 } | 1443 } |
| 1444 | 1444 |
| 1445 // if we called path.swap() we could avoid a deep copy of this path | 1445 // if we called path.swap() we could avoid a deep copy of this path |
| 1446 fClipStack.clipDevPath(devPath, op, kSoft_ClipEdgeStyle == edgeStyle); | 1446 fClipStack.clipDevPath(devPath, op, kSoft_ClipEdgeStyle == edgeStyle); |
| 1447 | 1447 |
| 1448 if (fAllowSimplifyClip) { | 1448 if (fAllowSimplifyClip) { |
| 1449 devPath.reset(); | 1449 bool clipIsAA = getClipStack()->asPath(&devPath); |
| 1450 devPath.setFillType(SkPath::kInverseEvenOdd_FillType); | 1450 if (clipIsAA) { |
| 1451 const SkClipStack* clipStack = getClipStack(); | 1451 edgeStyle = kSoft_ClipEdgeStyle; |
| 1452 SkClipStack::Iter iter(*clipStack, SkClipStack::Iter::kBottom_IterStart)
; | |
| 1453 const SkClipStack::Element* element; | |
| 1454 while ((element = iter.next())) { | |
| 1455 SkClipStack::Element::Type type = element->getType(); | |
| 1456 SkPath operand; | |
| 1457 if (type != SkClipStack::Element::kEmpty_Type) { | |
| 1458 element->asPath(&operand); | |
| 1459 } | |
| 1460 SkRegion::Op elementOp = element->getOp(); | |
| 1461 if (elementOp == SkRegion::kReplace_Op) { | |
| 1462 devPath = operand; | |
| 1463 } else { | |
| 1464 Op(devPath, operand, (SkPathOp) elementOp, &devPath); | |
| 1465 } | |
| 1466 // if the prev and curr clips disagree about aa -vs- not, favor the
aa request. | |
| 1467 // perhaps we need an API change to avoid this sort of mixed-signals
about | |
| 1468 // clipping. | |
| 1469 if (element->isAA()) { | |
| 1470 edgeStyle = kSoft_ClipEdgeStyle; | |
| 1471 } | |
| 1472 } | 1452 } |
| 1453 |
| 1473 op = SkRegion::kReplace_Op; | 1454 op = SkRegion::kReplace_Op; |
| 1474 } | 1455 } |
| 1475 | 1456 |
| 1476 rasterclip_path(&fMCRec->fRasterClip, this, devPath, op, edgeStyle); | 1457 rasterclip_path(&fMCRec->fRasterClip, this, devPath, op, edgeStyle); |
| 1477 } | 1458 } |
| 1478 | 1459 |
| 1479 void SkCanvas::clipRegion(const SkRegion& rgn, SkRegion::Op op) { | 1460 void SkCanvas::clipRegion(const SkRegion& rgn, SkRegion::Op op) { |
| 1480 this->checkForDeferredSave(); | 1461 this->checkForDeferredSave(); |
| 1481 this->onClipRegion(rgn, op); | 1462 this->onClipRegion(rgn, op); |
| 1482 } | 1463 } |
| (...skipping 1093 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2576 } | 2557 } |
| 2577 | 2558 |
| 2578 if (matrix) { | 2559 if (matrix) { |
| 2579 canvas->concat(*matrix); | 2560 canvas->concat(*matrix); |
| 2580 } | 2561 } |
| 2581 } | 2562 } |
| 2582 | 2563 |
| 2583 SkAutoCanvasMatrixPaint::~SkAutoCanvasMatrixPaint() { | 2564 SkAutoCanvasMatrixPaint::~SkAutoCanvasMatrixPaint() { |
| 2584 fCanvas->restoreToCount(fSaveCount); | 2565 fCanvas->restoreToCount(fSaveCount); |
| 2585 } | 2566 } |
| OLD | NEW |