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

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

Issue 2380163002: Remove soft clip bool from SkCanvas (Closed)
Patch Set: Created 4 years, 2 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 | « include/core/SkCanvas.h ('k') | no next file » | 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 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 "SkBitmapDevice.h" 8 #include "SkBitmapDevice.h"
9 #include "SkCanvas.h" 9 #include "SkCanvas.h"
10 #include "SkCanvasPriv.h" 10 #include "SkCanvasPriv.h"
(...skipping 635 matching lines...) Expand 10 before | Expand all | Expand 10 after
646 } 646 }
647 647
648 SkBaseDevice* SkCanvas::init(SkBaseDevice* device, InitFlags flags) { 648 SkBaseDevice* SkCanvas::init(SkBaseDevice* device, InitFlags flags) {
649 if (device && device->forceConservativeRasterClip()) { 649 if (device && device->forceConservativeRasterClip()) {
650 flags = InitFlags(flags | kConservativeRasterClip_InitFlag); 650 flags = InitFlags(flags | kConservativeRasterClip_InitFlag);
651 } 651 }
652 // Since init() is only called once by our constructors, it is safe to perfo rm this 652 // Since init() is only called once by our constructors, it is safe to perfo rm this
653 // const-cast. 653 // const-cast.
654 *const_cast<bool*>(&fConservativeRasterClip) = SkToBool(flags & kConservativ eRasterClip_InitFlag); 654 *const_cast<bool*>(&fConservativeRasterClip) = SkToBool(flags & kConservativ eRasterClip_InitFlag);
655 655
656 fAllowSoftClip = true;
657 fAllowSimplifyClip = false; 656 fAllowSimplifyClip = false;
658 fDeviceCMDirty = true; 657 fDeviceCMDirty = true;
659 fSaveCount = 1; 658 fSaveCount = 1;
660 fMetaData = nullptr; 659 fMetaData = nullptr;
661 #ifdef SK_EXPERIMENTAL_SHADOWING 660 #ifdef SK_EXPERIMENTAL_SHADOWING
662 fLights = nullptr; 661 fLights = nullptr;
663 #endif 662 #endif
664 663
665 fClipStack.reset(new SkClipStack); 664 fClipStack.reset(new SkClipStack);
666 665
(...skipping 866 matching lines...) Expand 10 before | Expand all | Expand 10 after
1533 } 1532 }
1534 1533
1535 sk_sp<SkLights> SkCanvas::getLights() const { 1534 sk_sp<SkLights> SkCanvas::getLights() const {
1536 return this->fLights; 1535 return this->fLights;
1537 } 1536 }
1538 #endif 1537 #endif
1539 1538
1540 ////////////////////////////////////////////////////////////////////////////// 1539 //////////////////////////////////////////////////////////////////////////////
1541 1540
1542 void SkCanvas::clipRect(const SkRect& rect, ClipOp op, bool doAA) { 1541 void SkCanvas::clipRect(const SkRect& rect, ClipOp op, bool doAA) {
1543 if (!fAllowSoftClip) {
1544 doAA = false;
1545 }
1546
1547 this->checkForDeferredSave(); 1542 this->checkForDeferredSave();
1548 ClipEdgeStyle edgeStyle = doAA ? kSoft_ClipEdgeStyle : kHard_ClipEdgeStyle; 1543 ClipEdgeStyle edgeStyle = doAA ? kSoft_ClipEdgeStyle : kHard_ClipEdgeStyle;
1549 this->onClipRect(rect, op, edgeStyle); 1544 this->onClipRect(rect, op, edgeStyle);
1550 } 1545 }
1551 1546
1552 void SkCanvas::onClipRect(const SkRect& rect, ClipOp op, ClipEdgeStyle edgeStyle ) { 1547 void SkCanvas::onClipRect(const SkRect& rect, ClipOp op, ClipEdgeStyle edgeStyle ) {
1553 const bool isScaleTrans = fMCRec->fMatrix.isScaleTranslate(); 1548 const bool isScaleTrans = fMCRec->fMatrix.isScaleTranslate();
1554 SkRect devR; 1549 SkRect devR;
1555 if (isScaleTrans) { 1550 if (isScaleTrans) {
1556 fMCRec->fMatrix.mapRectScaleTranslate(&devR, rect); 1551 fMCRec->fMatrix.mapRectScaleTranslate(&devR, rect);
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1598 this->onClipRRect(rrect, op, edgeStyle); 1593 this->onClipRRect(rrect, op, edgeStyle);
1599 } 1594 }
1600 } 1595 }
1601 1596
1602 void SkCanvas::onClipRRect(const SkRRect& rrect, ClipOp op, ClipEdgeStyle edgeSt yle) { 1597 void SkCanvas::onClipRRect(const SkRRect& rrect, ClipOp op, ClipEdgeStyle edgeSt yle) {
1603 SkRRect transformedRRect; 1598 SkRRect transformedRRect;
1604 if (rrect.transform(fMCRec->fMatrix, &transformedRRect)) { 1599 if (rrect.transform(fMCRec->fMatrix, &transformedRRect)) {
1605 AutoValidateClip avc(this); 1600 AutoValidateClip avc(this);
1606 1601
1607 fDeviceCMDirty = true; 1602 fDeviceCMDirty = true;
1608 if (!fAllowSoftClip) {
1609 edgeStyle = kHard_ClipEdgeStyle;
1610 }
1611 1603
1612 fClipStack->clipDevRRect(transformedRRect, op, kSoft_ClipEdgeStyle == ed geStyle); 1604 fClipStack->clipDevRRect(transformedRRect, op, kSoft_ClipEdgeStyle == ed geStyle);
1613 1605
1614 fMCRec->fRasterClip.op(transformedRRect, this->getTopLayerBounds(), (SkR egion::Op)op, 1606 fMCRec->fRasterClip.op(transformedRRect, this->getTopLayerBounds(), (SkR egion::Op)op,
1615 kSoft_ClipEdgeStyle == edgeStyle); 1607 kSoft_ClipEdgeStyle == edgeStyle);
1616 fDeviceClipBounds = qr_clip_bounds(fMCRec->fRasterClip.getBounds()); 1608 fDeviceClipBounds = qr_clip_bounds(fMCRec->fRasterClip.getBounds());
1617 return; 1609 return;
1618 } 1610 }
1619 1611
1620 SkPath path; 1612 SkPath path;
(...skipping 25 matching lines...) Expand all
1646 } 1638 }
1647 } 1639 }
1648 1640
1649 this->onClipPath(path, op, edgeStyle); 1641 this->onClipPath(path, op, edgeStyle);
1650 } 1642 }
1651 1643
1652 void SkCanvas::onClipPath(const SkPath& path, ClipOp op, ClipEdgeStyle edgeStyle ) { 1644 void SkCanvas::onClipPath(const SkPath& path, ClipOp op, ClipEdgeStyle edgeStyle ) {
1653 AutoValidateClip avc(this); 1645 AutoValidateClip avc(this);
1654 1646
1655 fDeviceCMDirty = true; 1647 fDeviceCMDirty = true;
1656 if (!fAllowSoftClip) {
1657 edgeStyle = kHard_ClipEdgeStyle;
1658 }
1659 1648
1660 SkPath devPath; 1649 SkPath devPath;
1661 if (fMCRec->fMatrix.isIdentity()) { 1650 if (fMCRec->fMatrix.isIdentity()) {
1662 devPath = path; 1651 devPath = path;
1663 } else { 1652 } else {
1664 path.transform(fMCRec->fMatrix, &devPath); 1653 path.transform(fMCRec->fMatrix, &devPath);
1665 devPath.setIsVolatile(true); 1654 devPath.setIsVolatile(true);
1666 } 1655 }
1667 1656
1668 // Check if the transfomation, or the original path itself 1657 // Check if the transfomation, or the original path itself
(...skipping 1787 matching lines...) Expand 10 before | Expand all | Expand 10 after
3456 const SkCanvas::ClipOp SkCanvas::kXOR_Op; 3445 const SkCanvas::ClipOp SkCanvas::kXOR_Op;
3457 const SkCanvas::ClipOp SkCanvas::kReverseDifference_Op; 3446 const SkCanvas::ClipOp SkCanvas::kReverseDifference_Op;
3458 const SkCanvas::ClipOp SkCanvas::kReplace_Op; 3447 const SkCanvas::ClipOp SkCanvas::kReplace_Op;
3459 3448
3460 static_assert((int)SkRegion::kDifference_Op == (int)kDifference_SkClipOp , ""); 3449 static_assert((int)SkRegion::kDifference_Op == (int)kDifference_SkClipOp , "");
3461 static_assert((int)SkRegion::kIntersect_Op == (int)kIntersect_SkClipOp, ""); 3450 static_assert((int)SkRegion::kIntersect_Op == (int)kIntersect_SkClipOp, "");
3462 static_assert((int)SkRegion::kUnion_Op == (int)kUnion_SkClipOp, "") ; 3451 static_assert((int)SkRegion::kUnion_Op == (int)kUnion_SkClipOp, "") ;
3463 static_assert((int)SkRegion::kXOR_Op == (int)kXOR_SkClipOp, ""); 3452 static_assert((int)SkRegion::kXOR_Op == (int)kXOR_SkClipOp, "");
3464 static_assert((int)SkRegion::kReverseDifference_Op == (int)kReverseDifference_S kClipOp, ""); 3453 static_assert((int)SkRegion::kReverseDifference_Op == (int)kReverseDifference_S kClipOp, "");
3465 static_assert((int)SkRegion::kReplace_Op == (int)kReplace_SkClipOp, " "); 3454 static_assert((int)SkRegion::kReplace_Op == (int)kReplace_SkClipOp, " ");
OLDNEW
« no previous file with comments | « include/core/SkCanvas.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698