add build option to revert hairline-clipping fix from 3366
authorreed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Tue, 13 Mar 2012 17:29:54 +0000 (17:29 +0000)
committerreed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Tue, 13 Mar 2012 17:29:54 +0000 (17:29 +0000)
git-svn-id: http://skia.googlecode.com/svn/trunk@3376 2bbb7eff-a529-9590-31e7-b0007b416f81

src/core/SkScan_Antihair.cpp

index 8084d0c..a6f592a 100644 (file)
 #include "SkRasterClip.h"
 #include "SkFDot6.h"
 
+// Define this in your Makefile if you want the old behavior, which may draw
+// outside of the clip (but retains the old images if that is important).
+//#define SK_IGNORE_HAIRLINE_CLIP_FIX
+
 /*  Our attempt to compute the worst case "bounds" for the horizontal and
     vertical cases has some numerical bug in it, and we sometimes undervalue
     our extends. The bug is that when this happens, we will set the clip to
@@ -271,10 +275,17 @@ static void do_anti_hairline(SkFDot6 x0, SkFDot6 y0, SkFDot6 x1, SkFDot6 y1,
                 istart = clip->fLeft;
                 scaleStart = 64;
             }
+#ifdef SK_IGNORE_HAIRLINE_CLIP_FIX
+            if (istop > clip->fRight) {
+                istop = clip->fRight;
+                scaleStop = 64;
+            }
+#else
             if (istop >= clip->fRight) {
                 istop = clip->fRight;
                 scaleStop = 0;  // so we don't draw this last column
             }
+#endif
             SkASSERT(istart <= istop);
             if (istart == istop) {
                 return;
@@ -340,10 +351,17 @@ static void do_anti_hairline(SkFDot6 x0, SkFDot6 y0, SkFDot6 x1, SkFDot6 y1,
                 istart = clip->fTop;
                 scaleStart = 64;
             }
+#ifdef SK_IGNORE_HAIRLINE_CLIP_FIX
+            if (istop > clip->fBottom) {
+                istop = clip->fBottom;
+                scaleStop = 64;  // so we don't draw this last row
+            }
+#else
             if (istop >= clip->fBottom) {
                 istop = clip->fBottom;
                 scaleStop = 0;  // so we don't draw this last row
             }
+#endif
             SkASSERT(istart <= istop);
             if (istart == istop)
                 return;