add op(rgn, op)
git-svn-id: http://skia.googlecode.com/svn/trunk@2454 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/core/SkRasterClip.cpp b/src/core/SkRasterClip.cpp
index 0f9d3f9..b6a8926 100644
--- a/src/core/SkRasterClip.cpp
+++ b/src/core/SkRasterClip.cpp
@@ -12,6 +12,12 @@
fIsBW = true;
}
+SkRasterClip::SkRasterClip(const SkIRect& bounds) : fBW(bounds) {
+ fIsBW = true;
+}
+
+SkRasterClip::~SkRasterClip() {}
+
bool SkRasterClip::isEmpty() const {
return fIsBW ? fBW.isEmpty() : fAA.isEmpty();
}
@@ -35,7 +41,7 @@
return false;
}
-bool SkRasterClip::setIRect(const SkIRect& rect) {
+bool SkRasterClip::setRect(const SkIRect& rect) {
fIsBW = true;
fAA.setEmpty();
return fBW.setRect(rect);
@@ -76,6 +82,16 @@
return fIsBW ? fBW.op(rect, op) : fAA.op(rect, op);
}
+bool SkRasterClip::op(const SkRegion& rgn, SkRegion::Op op) {
+ if (fIsBW) {
+ return fBW.op(rgn, op);
+ } else {
+ SkAAClip tmp;
+ tmp.setRegion(rgn);
+ return fAA.op(tmp, op);
+ }
+}
+
bool SkRasterClip::op(const SkRasterClip& clip, SkRegion::Op op) {
if (this->isBW() && clip.isBW()) {
return fBW.op(clip.fBW, op);
@@ -96,6 +112,13 @@
}
}
+const SkRegion& SkRasterClip::forceGetBW() {
+ if (!fIsBW) {
+ fBW.setRect(fAA.getBounds());
+ }
+ return fBW;
+}
+
void SkRasterClip::convertToAA() {
SkASSERT(fIsBW);
fAA.setRegion(fBW);