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);