checkpoint -- more support changes for soft clipping



git-svn-id: http://skia.googlecode.com/svn/trunk@2475 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/core/SkRasterClip.cpp b/src/core/SkRasterClip.cpp
index d5ce395..5588dfb 100644
--- a/src/core/SkRasterClip.cpp
+++ b/src/core/SkRasterClip.cpp
@@ -12,6 +12,15 @@
     fIsBW = true;
 }
 
+SkRasterClip::SkRasterClip(const SkRasterClip& src) {
+    fIsBW = src.fIsBW;
+    if (fIsBW) {
+        fBW = src.fBW;
+    } else {
+        fAA = src.fAA;
+    }
+}
+
 SkRasterClip::SkRasterClip(const SkIRect& bounds) : fBW(bounds) {
     fIsBW = true;
 }
@@ -141,6 +150,32 @@
     }
 }
 
+void SkRasterClip::translate(int dx, int dy, SkRasterClip* dst) const {
+    if (NULL == dst) {
+        return;
+    }
+
+    if (this->isEmpty()) {
+        dst->setEmpty();
+        return;
+    }
+    if (0 == (dx | dy)) {
+        *dst = *this;
+        return;
+    }
+
+    dst->fIsBW = fIsBW;
+    if (fIsBW) {
+        fBW.translate(dx, dy, &dst->fBW);
+        dst->fAA.setEmpty();
+    } else {
+        fAA.translate(dx, dy, &dst->fAA);
+        dst->fBW.setEmpty();
+    }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
 const SkRegion& SkRasterClip::forceGetBW() {
     if (!fIsBW) {
         fBW.setRect(fAA.getBounds());