outset the bounds if we're in hairline before quick-reject in SkDraw.cpp



git-svn-id: http://skia.googlecode.com/svn/trunk@445 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp
index 8fcdfa8..84ce0d2 100644
--- a/samplecode/SampleApp.cpp
+++ b/samplecode/SampleApp.cpp
@@ -254,6 +254,31 @@
     delete fGLCanvas;
 }
 
+static SkBitmap capture_bitmap(SkCanvas* canvas) {
+    SkBitmap bm;
+    const SkBitmap& src = canvas->getDevice()->accessBitmap(false);
+    src.copyTo(&bm, src.config());
+    return bm;
+}
+
+static bool bitmap_diff(SkCanvas* canvas, const SkBitmap& orig,
+                        SkBitmap* diff) {
+    const SkBitmap& src = canvas->getDevice()->accessBitmap(false);
+    
+    SkAutoLockPixels alp0(src);
+    SkAutoLockPixels alp1(orig);
+    for (int y = 0; y < src.height(); y++) {
+        const void* srcP = src.getAddr(0, y);
+        const void* origP = orig.getAddr(0, y);
+        size_t bytes = src.width() * src.bytesPerPixel();
+        if (memcmp(srcP, origP, bytes)) {
+            SkDebugf("---------- difference on line %d\n", y);
+            return true;
+        }
+    }
+    return false;
+}
+
 #define XCLIP_N  8
 #define YCLIP_N  8
 
@@ -262,23 +287,35 @@
     gAnimTime = SkTime::GetMSecs();
 
     if (fNClip) {
-     //   this->INHERITED::draw(canvas);
-     //   SkBitmap orig = capture_bitmap(canvas);
+        this->INHERITED::draw(canvas);
+        SkBitmap orig = capture_bitmap(canvas);
 
         const SkScalar w = this->width();
         const SkScalar h = this->height();
         const SkScalar cw = w / XCLIP_N;
         const SkScalar ch = h / YCLIP_N;
         for (int y = 0; y < YCLIP_N; y++) {
+            SkRect r;
+            r.fTop = y * ch;
+            r.fBottom = (y + 1) * ch;
+            if (y == YCLIP_N - 1) {
+                r.fBottom = h;
+            }
             for (int x = 0; x < XCLIP_N; x++) {
                 SkAutoCanvasRestore acr(canvas, true);
-                SkRect r = {
-                    x * cw, y * ch, (x + 1) * cw, (y + 1) * ch
-                };
+                r.fLeft = x * cw;
+                r.fRight = (x + 1) * cw;
+                if (x == XCLIP_N - 1) {
+                    r.fRight = w;
+                }
                 canvas->clipRect(r);
                 this->INHERITED::draw(canvas);
             }
         }
+        
+        SkBitmap diff;
+        if (bitmap_diff(canvas, orig, &diff)) {
+        }
     } else {
         this->INHERITED::draw(canvas);
     }