fix clipping in rasterhandleallocator

BUG=skia:

Change-Id: Ia24c5ae191fd823095cd0c75993cfd0208c98869
Reviewed-on: https://skia-review.googlesource.com/6952
Reviewed-by: Ben Wagner <bungeman@google.com>
Commit-Queue: Mike Reed <reed@google.com>
diff --git a/samplecode/SampleBigGradient.cpp b/samplecode/SampleBigGradient.cpp
index 8bc1f59..becb1ce 100644
--- a/samplecode/SampleBigGradient.cpp
+++ b/samplecode/SampleBigGradient.cpp
@@ -67,6 +67,7 @@
 
     void translate(float x, float y) { fCanvas->translate(x, y); }
     void scale(float s) { fCanvas->scale(s, s); }
+    void clip(const SkRect& r) { fCanvas->clipRect(r); }
 
     void drawOval(const SkRect& r, SkColor c) {
         SkPaint p;
@@ -79,6 +80,8 @@
         p.setColor(c);
         fCanvas->drawRect(r, p);
     }
+
+    SkCanvas* peekCanvas() const { return fCanvas; }
 };
 
 #ifdef SK_BUILD_FOR_MAC
@@ -139,7 +142,7 @@
         
         CGContextRestoreGState(cg);
         CGContextSaveGState(cg);
-        CGContextClearRect(cg, CGRectMake(clip.x(), clip.y(), clip.width(), clip.height()));
+        CGContextClipToRect(cg, CGRectMake(clip.x(), clip.y(), clip.width(), clip.height()));
         CGContextConcatCTM(cg, matrix_to_transform(cg, ctm));
     }
 };
@@ -269,6 +272,8 @@
     }
 
     void doDraw(GraphicsPort* port) {
+        SkAutoCanvasRestore acr(port->peekCanvas(), true);
+
         port->drawRect({0, 0, 256, 256}, SK_ColorRED);
         port->save();
         port->translate(30, 30);
@@ -279,6 +284,9 @@
         port->saveLayer({50, 50, 100, 100}, 0x80);
         port->drawRect({55, 55, 95, 95}, SK_ColorGREEN);
         port->restore();
+
+        port->clip({150, 50, 200, 200});
+        port->drawRect({0, 0, 256, 256}, 0xFFCCCCCC);
     }
 
     void onDrawContent(SkCanvas* canvas) override {