Index: src/core/SkClipStack.cpp |
diff --git a/src/core/SkClipStack.cpp b/src/core/SkClipStack.cpp |
index e5016977c9ed5cfbd43744b35a4db5682d1458d6..7e67ddf2b40fe0fc2566bb1a2413f0f9b70fab29 100644 |
--- a/src/core/SkClipStack.cpp |
+++ b/src/core/SkClipStack.cpp |
@@ -32,7 +32,7 @@ bool SkClipStack::Element::operator== (const Element& element) const { |
case kRRect_Type: |
return fRRect == element.fRRect; |
case kRect_Type: |
- return fRect == element.fRect; |
+ return this->getRect() == element.getRect(); |
case kEmpty_Type: |
return true; |
default: |
@@ -45,7 +45,7 @@ void SkClipStack::Element::invertShapeFillType() { |
switch (fType) { |
case kRect_Type: |
fPath.reset(); |
- fPath.addRect(fRect); |
+ fPath.addRect(this->getRect()); |
fPath.setFillType(SkPath::kInverseEvenOdd_FillType); |
fType = kPath_Type; |
break; |
@@ -91,7 +91,7 @@ void SkClipStack::Element::asPath(SkPath* path) const { |
break; |
case kRect_Type: |
path->reset(); |
- path->addRect(fRect); |
+ path->addRect(this->getRect()); |
break; |
case kRRect_Type: |
path->reset(); |
@@ -108,7 +108,6 @@ void SkClipStack::Element::setEmpty() { |
fFiniteBound.setEmpty(); |
fFiniteBoundType = kNormal_BoundsType; |
fIsIntersectionOfRects = false; |
- fRect.setEmpty(); |
fRRect.setEmpty(); |
fPath.reset(); |
fGenID = kEmptyGenID; |
@@ -143,12 +142,12 @@ bool SkClipStack::Element::rectRectIntersectAllowed(const SkRect& newR, bool new |
return true; |
} |
- if (!SkRect::Intersects(fRect, newR)) { |
+ if (!SkRect::Intersects(this->getRect(), newR)) { |
// The calling code will correctly set the result to the empty clip |
return true; |
} |
- if (fRect.contains(newR)) { |
+ if (this->getRect().contains(newR)) { |
// if the new rect carves out a portion of the old one there is no |
// issue |
return true; |
@@ -343,13 +342,13 @@ void SkClipStack::Element::updateBoundAndGenID(const Element* prior) { |
fIsIntersectionOfRects = false; |
switch (fType) { |
case kRect_Type: |
- fFiniteBound = fRect; |
+ fFiniteBound = this->getRect(); |
fFiniteBoundType = kNormal_BoundsType; |
if (SkRegion::kReplace_Op == fOp || |
(SkRegion::kIntersect_Op == fOp && NULL == prior) || |
(SkRegion::kIntersect_Op == fOp && prior->fIsIntersectionOfRects && |
- prior->rectRectIntersectAllowed(fRect, fDoAA))) { |
+ prior->rectRectIntersectAllowed(this->getRect(), fDoAA))) { |
fIsIntersectionOfRects = true; |
} |
break; |
@@ -632,11 +631,13 @@ void SkClipStack::pushElement(const Element& element) { |
case Element::kRect_Type: |
if (Element::kRect_Type == element.getType()) { |
if (prior->rectRectIntersectAllowed(element.getRect(), element.isAA())) { |
- if (!prior->fRect.intersect(element.getRect())) { |
+ SkRect isectRect; |
+ if (!isectRect.intersect(prior->getRect(), element.getRect())) { |
prior->setEmpty(); |
return; |
} |
+ prior->fRRect.setRect(isectRect); |
prior->fDoAA = element.isAA(); |
Element* priorPrior = (Element*) iter.prev(); |
prior->updateBoundAndGenID(priorPrior); |