restore (debugged) cheapComputeDirection



git-svn-id: http://skia.googlecode.com/svn/trunk@3000 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/gm/strokefill.cpp b/gm/strokefill.cpp
index 1fb5470..274c4cd 100644
--- a/gm/strokefill.cpp
+++ b/gm/strokefill.cpp
@@ -10,48 +10,6 @@
 #include "SkPath.h"
 #include "SkTypeface.h"
 
-static void test10(SkCanvas* canvas) {
-    SkPaint paint;
-    const char text[] = "Hello"; // "Hello";
-    const size_t len = sizeof(text) - 1;
-    paint.setAntiAlias(true);
-    paint.setTextSize(SkIntToScalar(100));
-    SkTypeface* hira = SkTypeface::CreateFromName("Hiragino Maru Gothic Pro",
-                                                  SkTypeface::kNormal);
-    paint.setTypeface(hira);
-    SkScalar x = 180;
-    SkScalar y = 88;
-    
-    canvas->drawText(text, len, x, y, paint);
-    paint.setFakeBoldText(true);
-    canvas->drawText(text, len, x, y + 100, paint);
-    paint.setStyle(SkPaint::kStrokeAndFill_Style);
-    paint.setStrokeWidth(5);
-    
-    SkPath path;
-    path.setFillType(SkPath::kWinding_FillType);
-    path.addCircle(x, y + 200, 50, SkPath::kCW_Direction);
-    path.addCircle(x, y + 200, 40, SkPath::kCCW_Direction);
-    canvas->drawPath(path, paint);
-    
-    SkPath path2;
-    path2.setFillType(SkPath::kWinding_FillType);
-    path2.addCircle(x + 120, y + 200, 50, SkPath::kCCW_Direction);
-    path2.addCircle(x + 120, y + 200, 40, SkPath::kCW_Direction);
-    canvas->drawPath(path2, paint);
-    
-    path2.reset();
-    path2.addCircle(x + 240, y + 200, 50, SkPath::kCCW_Direction);
-    canvas->drawPath(path2, paint);
-    SkASSERT(path2.cheapIsDirection(SkPath::kCCW_Direction));
-    
-    path2.reset();
-    SkASSERT(!path2.cheapComputeDirection(NULL));
-    path2.addCircle(x + 360, y + 200, 50, SkPath::kCW_Direction);
-    SkASSERT(path2.cheapIsDirection(SkPath::kCW_Direction));
-    canvas->drawPath(path2, paint);
-}
-
 static void test_path(SkCanvas* canvas, const SkPath& path) {
     SkPaint paint;
     paint.setAntiAlias(true);
@@ -120,8 +78,45 @@
     }
 
     virtual void onDraw(SkCanvas* canvas) {
-    //    test10(canvas);
-    //    test_rev(canvas);
+        SkPaint paint;
+        const char text[] = "Hello"; // "Hello";
+        const size_t len = sizeof(text) - 1;
+        paint.setAntiAlias(true);
+        paint.setTextSize(SkIntToScalar(100));
+        SkTypeface* hira = SkTypeface::CreateFromName("Hiragino Maru Gothic Pro",
+                                                      SkTypeface::kNormal);
+        paint.setTypeface(hira);
+        SkScalar x = 180;
+        SkScalar y = 88;
+        
+        canvas->drawText(text, len, x, y, paint);
+        paint.setFakeBoldText(true);
+        canvas->drawText(text, len, x, y + 100, paint);
+        paint.setStyle(SkPaint::kStrokeAndFill_Style);
+        paint.setStrokeWidth(5);
+        
+        SkPath path;
+        path.setFillType(SkPath::kWinding_FillType);
+        path.addCircle(x, y + 200, 50, SkPath::kCW_Direction);
+        path.addCircle(x, y + 200, 40, SkPath::kCCW_Direction);
+        canvas->drawPath(path, paint);
+        
+        SkPath path2;
+        path2.setFillType(SkPath::kWinding_FillType);
+        path2.addCircle(x + 120, y + 200, 50, SkPath::kCCW_Direction);
+        path2.addCircle(x + 120, y + 200, 40, SkPath::kCW_Direction);
+        canvas->drawPath(path2, paint);
+        
+        path2.reset();
+        path2.addCircle(x + 240, y + 200, 50, SkPath::kCCW_Direction);
+        canvas->drawPath(path2, paint);
+        SkASSERT(path2.cheapIsDirection(SkPath::kCCW_Direction));
+        
+        path2.reset();
+        SkASSERT(!path2.cheapComputeDirection(NULL));
+        path2.addCircle(x + 360, y + 200, 50, SkPath::kCW_Direction);
+        SkASSERT(path2.cheapIsDirection(SkPath::kCW_Direction));
+        canvas->drawPath(path2, paint);
     }
 
 private:
diff --git a/src/core/SkPath.cpp b/src/core/SkPath.cpp
index 960d2ab..50c7c59 100644
--- a/src/core/SkPath.cpp
+++ b/src/core/SkPath.cpp
@@ -1856,6 +1856,7 @@
     const uint8_t* fCurrVerb;
     const uint8_t* fStopVerbs;
     bool fDone;
+    SkDEBUGCODE(int fContourCounter;)
 };
 
 ContourIter::ContourIter(const SkTDArray<uint8_t>& verbs,
@@ -1866,6 +1867,7 @@
     fCurrPt = pts.begin();
     fCurrVerb = verbs.begin();
     fCurrPtCount = 0;
+    SkDEBUGCODE(fContourCounter = 0;)
     this->next();
 }
 
@@ -1887,11 +1889,6 @@
     for (++verbs; verbs < fStopVerbs; ++verbs) {
         switch (*verbs) {
             case SkPath::kMove_Verb:
-                if (ptCount > 1) {
-                    // back up to revisit this Move next time arround, unless
-                    // the prev verb was also Move, which we know if ptCount==1
-                    verbs -= 1;
-                }
                 goto CONTOUR_END;
             case SkPath::kLine_Verb:
                 ptCount += 1;
@@ -1909,6 +1906,7 @@
 CONTOUR_END:
     fCurrPtCount = ptCount;
     fCurrVerb = verbs;
+    SkDEBUGCODE(++fContourCounter;)
 }
 
 static SkScalar cross_prod(const SkPoint& p0, const SkPoint& p1, const SkPoint& p2) {
diff --git a/src/core/SkStroke.cpp b/src/core/SkStroke.cpp
index a7452be..1ec3a57 100644
--- a/src/core/SkStroke.cpp
+++ b/src/core/SkStroke.cpp
@@ -619,15 +619,11 @@
 #endif
 
     if (fDoFill) {
-#if 0 // while I debug this
         if (src.cheapIsDirection(SkPath::kCW_Direction)) {
             dst->reverseAddPath(src);
         } else {
             dst->addPath(src);
         }
-#else
-        dst->addPath(src);
-#endif
     } else {
         //  Seems like we can assume that a 2-point src would always result in
         //  a convex stroke, but testing has proved otherwise.