shape ops work in progress

Complete rewrite of binary logic makes the result
work and much easier to understand.

git-svn-id: http://skia.googlecode.com/svn/trunk@6597 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/experimental/Intersection/op.htm b/experimental/Intersection/op.htm
index 3621af0..f2de8d2 100644
--- a/experimental/Intersection/op.htm
+++ b/experimental/Intersection/op.htm
@@ -373,380 +373,386 @@
 
 <div id="testLine17">
     SkPath path, simple;
-    path.addRect(0, 0, 12, 12, (SkPath::Direction) 0);
-    path.addRect(4, 12, 13, 13, (SkPath::Direction) 0);
+    path.addRect(0, 0, 12, 12, SkPath::kCW_Direction);
+    path.addRect(4, 12, 13, 13, SkPath::kCW_Direction);
     testSimplifyx(path);
 </div>
 
 <div id="testLine19">
     SkPath path, simple;
-    path.addRect(0, 0, 12, 12, (SkPath::Direction) 0);
-    path.addRect(12, 16, 21, 21, (SkPath::Direction) 0);    
+    path.addRect(0, 0, 12, 12, SkPath::kCW_Direction);
+    path.addRect(12, 16, 21, 21, SkPath::kCW_Direction);    
     testSimplifyx(path);
 </div>
 
 <div id="testLine22">
-    path.addRect(0, 12, 12, 12, (SkPath::Direction) 0);
-    path.addRect(4, 12, 13, 13, (SkPath::Direction) 0);
+    path.addRect(0, 12, 12, 12, SkPath::kCW_Direction);
+    path.addRect(4, 12, 13, 13, SkPath::kCW_Direction);
 </div>
 
 <div id="testLine24">
-    path.addRect(0, 18, 12, 12, (SkPath::Direction) 0);
-    path.addRect(4, 12, 13, 13, (SkPath::Direction) 0);
+    path.addRect(0, 18, 12, 12, SkPath::kCW_Direction);
+    path.addRect(4, 12, 13, 13, SkPath::kCW_Direction);
 </div>
 
 <div id="testLine28">
     SkPath path, simple;
-    path.addRect(0, 6, 12, 12, (SkPath::Direction) 0);
-    path.addRect(0, 0, 9, 9, (SkPath::Direction) 0);
+    path.addRect(0, 6, 12, 12, SkPath::kCW_Direction);
+    path.addRect(0, 0, 9, 9, SkPath::kCW_Direction);
     testSimplifyx(path);
 </div>
 
 <div id="testLine29">
     SkPath path, simple;
-    path.addRect(0, 18, 12, 12, (SkPath::Direction) 0);
-    path.addRect(12, 12, 21, 21, (SkPath::Direction) 0);
+    path.addRect(0, 18, 12, 12, SkPath::kCW_Direction);
+    path.addRect(12, 12, 21, 21, SkPath::kCW_Direction);
     testSimplifyx(path);
 </div>
 
 <div id="testLine30">
-    path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
-    path.addRect(0, 0, 12, 12, (SkPath::Direction) 0);
-    path.addRect(4, 4, 13, 13, (SkPath::Direction) 0);
+    path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
+    path.addRect(0, 0, 12, 12, SkPath::kCW_Direction);
+    path.addRect(4, 4, 13, 13, SkPath::kCW_Direction);
 </div>
 
 <div id="testLine31">
-    path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
-    path.addRect(0, 0, 12, 12, (SkPath::Direction) 0);
-    path.addRect(0, 4, 9, 9, (SkPath::Direction) 0);
+    path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
+    path.addRect(0, 0, 12, 12, SkPath::kCW_Direction);
+    path.addRect(0, 4, 9, 9, SkPath::kCW_Direction);
 </div>
 
 <div id="testLine32">
-    path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
-    path.addRect(0, 0, 12, 12, (SkPath::Direction) 0);
-    path.addRect(4, 12, 13, 13, (SkPath::Direction) 0);
+    path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
+    path.addRect(0, 0, 12, 12, SkPath::kCW_Direction);
+    path.addRect(4, 12, 13, 13, SkPath::kCW_Direction);
 </div>
 
 <div id="testLine33">
-    path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
-    path.addRect(0, 0, 12, 12, (SkPath::Direction) 0);
-    path.addRect(4, 16, 13, 13, (SkPath::Direction) 0);
+    path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
+    path.addRect(0, 0, 12, 12, SkPath::kCW_Direction);
+    path.addRect(4, 16, 13, 13, SkPath::kCW_Direction);
 </div>
 
 <div id="testLine34">
-    path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
-    path.addRect(0, 6, 12, 12, (SkPath::Direction) 0);
-    path.addRect(4, 12, 13, 13, (SkPath::Direction) 0);
+    path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
+    path.addRect(0, 6, 12, 12, SkPath::kCW_Direction);
+    path.addRect(4, 12, 13, 13, SkPath::kCW_Direction);
 </div>
 
 <div id="testLine35">
-    path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
-    path.addRect(6, 0, 18, 18, (SkPath::Direction) 0);
-    path.addRect(4, 16, 13, 13, (SkPath::Direction) 0);
+    path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
+    path.addRect(6, 0, 18, 18, SkPath::kCW_Direction);
+    path.addRect(4, 16, 13, 13, SkPath::kCW_Direction);
 </div>
 
 <div id="testLine36">
-    path.addRect(0, 10, 20, 20, (SkPath::Direction) 0);
-    path.addRect(6, 12, 18, 18, (SkPath::Direction) 0);
-    path.addRect(4, 16, 13, 13, (SkPath::Direction) 0);
+    path.addRect(0, 10, 20, 20, SkPath::kCW_Direction);
+    path.addRect(6, 12, 18, 18, SkPath::kCW_Direction);
+    path.addRect(4, 16, 13, 13, SkPath::kCW_Direction);
 </div>
 
 <div id="testLine37">
-    path.addRect(0, 20, 20, 20, (SkPath::Direction) 0);
-    path.addRect(18, 24, 30, 30, (SkPath::Direction) 0);
-    path.addRect(0, 0, 9, 9, (SkPath::Direction) 0);
+    path.addRect(0, 20, 20, 20, SkPath::kCW_Direction);
+    path.addRect(18, 24, 30, 30, SkPath::kCW_Direction);
+    path.addRect(0, 0, 9, 9, SkPath::kCW_Direction);
 </div>
 
 <div id="testLine38">
-    path.addRect(10, 0, 30, 30, (SkPath::Direction) 0);
-    path.addRect(6, 12, 18, 18, (SkPath::Direction) 0);
-    path.addRect(12, 12, 21, 21, (SkPath::Direction) 0);
+    path.addRect(10, 0, 30, 30, SkPath::kCW_Direction);
+    path.addRect(6, 12, 18, 18, SkPath::kCW_Direction);
+    path.addRect(12, 12, 21, 21, SkPath::kCW_Direction);
 </div>
 
 <div id="testLine39">
-    path.addRect(10, 0, 30, 30, (SkPath::Direction) 0);
-    path.addRect(12, 6, 24, 24, (SkPath::Direction) 0);
-    path.addRect(12, 4, 21, 21, (SkPath::Direction) 0);
+    path.addRect(10, 0, 30, 30, SkPath::kCW_Direction);
+    path.addRect(12, 6, 24, 24, SkPath::kCW_Direction);
+    path.addRect(12, 4, 21, 21, SkPath::kCW_Direction);
 </div>
 
 <div id="testLine40">
-    path.addRect(10, 0, 30, 30, (SkPath::Direction) 0);
-    path.addRect(12, 18, 24, 24, (SkPath::Direction) 0);
-    path.addRect(4, 16, 13, 13, (SkPath::Direction) 0);
+    path.addRect(10, 0, 30, 30, SkPath::kCW_Direction);
+    path.addRect(12, 18, 24, 24, SkPath::kCW_Direction);
+    path.addRect(4, 16, 13, 13, SkPath::kCW_Direction);
 </div>
 
 <div id="testLine41">
-    path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
-    path.addRect(18, 24, 30, 30, (SkPath::Direction) 0);
-    path.addRect(12, 0, 21, 21, (SkPath::Direction) 0);
+    path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
+    path.addRect(18, 24, 30, 30, SkPath::kCW_Direction);
+    path.addRect(12, 0, 21, 21, SkPath::kCW_Direction);
 </div>
 
 <div id="testLine42">
-    path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
-    path.addRect(0, 0, 12, 12, (SkPath::Direction) 0);
-    path.addRect(8, 16, 17, 17, (SkPath::Direction) 0);
+    path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
+    path.addRect(0, 0, 12, 12, SkPath::kCW_Direction);
+    path.addRect(8, 16, 17, 17, SkPath::kCW_Direction);
 </div>
 
 <div id="testLine43">
-    path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
-    path.addRect(6, 24, 18, 18, (SkPath::Direction) 0);
-    path.addRect(0, 32, 9, 36, (SkPath::Direction) 1);
+    path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
+    path.addRect(6, 24, 18, 18, SkPath::kCW_Direction);
+    path.addRect(0, 32, 9, 36, SkPath::kCCW_Direction);
 </div>
 
 <div id="testLine44">
-    path.addRect(10, 40, 30, 30, (SkPath::Direction) 0);
-    path.addRect(18, 0, 30, 30, (SkPath::Direction) 0);
-    path.addRect(18, 32, 27, 36, (SkPath::Direction) 1);
+    path.addRect(10, 40, 30, 30, SkPath::kCW_Direction);
+    path.addRect(18, 0, 30, 30, SkPath::kCW_Direction);
+    path.addRect(18, 32, 27, 36, SkPath::kCCW_Direction);
 </div>
 
 <div id="testLine45">
-    path.addRect(10, 0, 30, 30, (SkPath::Direction) 0);
-    path.addRect(18, 0, 30, 30, (SkPath::Direction) 0);
-    path.addRect(24, 32, 33, 36, (SkPath::Direction) 0);
+    path.addRect(10, 0, 30, 30, SkPath::kCW_Direction);
+    path.addRect(18, 0, 30, 30, SkPath::kCW_Direction);
+    path.addRect(24, 32, 33, 36, SkPath::kCW_Direction);
 </div>
 
 <div id="testLine46">
-    path.addRect(10, 40, 30, 30, (SkPath::Direction) 0);
-    path.addRect(24, 0, 36, 36, (SkPath::Direction) 0);
-    path.addRect(24, 32, 33, 36, (SkPath::Direction) 0);
+    path.addRect(10, 40, 30, 30, SkPath::kCW_Direction);
+    path.addRect(24, 0, 36, 36, SkPath::kCW_Direction);
+    path.addRect(24, 32, 33, 36, SkPath::kCW_Direction);
 </div>
 
 <div id="testLine47">
-    path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
-    path.addRect(0, 0, 12, 12, (SkPath::Direction) 0);
-    path.addRect(0, 0, 9, 9, (SkPath::Direction) 1);
+    path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
+    path.addRect(0, 0, 12, 12, SkPath::kCW_Direction);
+    path.addRect(0, 0, 9, 9, SkPath::kCCW_Direction);
 </div>
 
 <div id="testLine48">
-    path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
-    path.addRect(0, 6, 12, 12, (SkPath::Direction) 0);
-    path.addRect(0, 0, 9, 9, (SkPath::Direction) 1);
+    path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
+    path.addRect(0, 6, 12, 12, SkPath::kCW_Direction);
+    path.addRect(0, 0, 9, 9, SkPath::kCCW_Direction);
 </div>
 
 <div id="testLine49">
-    path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
-    path.addRect(0, 0, 12, 12, (SkPath::Direction) 0);
-    path.addRect(0, 0, 9, 9, (SkPath::Direction) 0);
+    path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
+    path.addRect(0, 0, 12, 12, SkPath::kCW_Direction);
+    path.addRect(0, 0, 9, 9, SkPath::kCW_Direction);
 </div>
 
 <div id="testLine50">
-    path.addRect(10, 30, 30, 30, (SkPath::Direction) 0);
-    path.addRect(24, 20, 36, 30, (SkPath::Direction) 0);
+    path.addRect(10, 30, 30, 30, SkPath::kCW_Direction);
+    path.addRect(24, 20, 36, 30, SkPath::kCW_Direction);
 </div>
 
 <div id="testLine51">
-    path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
-    path.addRect(0, 12, 12, 12, (SkPath::Direction) 0);
-    path.addRect(4, 12, 13, 13, (SkPath::Direction) 1);
+    path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
+    path.addRect(0, 12, 12, 12, SkPath::kCW_Direction);
+    path.addRect(4, 12, 13, 13, SkPath::kCCW_Direction);
 </div>
 
 <div id="testLine52">
-    path.addRect(0, 30, 20, 20, (SkPath::Direction) 0);
-    path.addRect(6, 20, 18, 30, (SkPath::Direction) 0);
-    path.addRect(32, 0, 36, 41, (SkPath::Direction) 0);
+    path.addRect(0, 30, 20, 20, SkPath::kCW_Direction);
+    path.addRect(6, 20, 18, 30, SkPath::kCW_Direction);
+    path.addRect(32, 0, 36, 41, SkPath::kCW_Direction);
 </div>
 
 <div id="testLine53">
-    path.addRect(10, 30, 30, 30, (SkPath::Direction) 0);
-    path.addRect(12, 20, 24, 30, (SkPath::Direction) 0);
-    path.addRect(12, 32, 21, 36, (SkPath::Direction) 1);
+    path.addRect(10, 30, 30, 30, SkPath::kCW_Direction);
+    path.addRect(12, 20, 24, 30, SkPath::kCW_Direction);
+    path.addRect(12, 32, 21, 36, SkPath::kCCW_Direction);
 </div>
 
 <div id="testLine54">
-    path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
-    path.addRect(6, 0, 18, 18, (SkPath::Direction) 0);
-    path.addRect(8, 4, 17, 17, (SkPath::Direction) 1);
+    path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
+    path.addRect(6, 0, 18, 18, SkPath::kCW_Direction);
+    path.addRect(8, 4, 17, 17, SkPath::kCCW_Direction);
 </div>
 
 <div id="testLine55">
-    path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
-    path.addRect(6, 6, 18, 18, (SkPath::Direction) 0);
-    path.addRect(4, 4, 13, 13, (SkPath::Direction) 1);
+    path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
+    path.addRect(6, 6, 18, 18, SkPath::kCW_Direction);
+    path.addRect(4, 4, 13, 13, SkPath::kCCW_Direction);
 </div>
 
 <div id="testLine56">
-    path.addRect(0, 20, 20, 20, (SkPath::Direction) 0);
-    path.addRect(18, 20, 30, 30, (SkPath::Direction) 0);
-    path.addRect(12, 0, 21, 21, (SkPath::Direction) 1);
+    path.addRect(0, 20, 20, 20, SkPath::kCW_Direction);
+    path.addRect(18, 20, 30, 30, SkPath::kCW_Direction);
+    path.addRect(12, 0, 21, 21, SkPath::kCCW_Direction);
 </div>
 
 <div id="testLine57">
-    path.addRect(20, 0, 40, 40, (SkPath::Direction) 0);
-    path.addRect(20, 0, 30, 40, (SkPath::Direction) 0);
-    path.addRect(12, 0, 21, 21, (SkPath::Direction) 1);
+    path.addRect(20, 0, 40, 40, SkPath::kCW_Direction);
+    path.addRect(20, 0, 30, 40, SkPath::kCW_Direction);
+    path.addRect(12, 0, 21, 21, SkPath::kCCW_Direction);
 </div>
 
 <div id="testLine58">
-    path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
-    path.addRect(0, 0, 12, 12, (SkPath::Direction) 1);
-    path.addRect(0, 12, 9, 9, (SkPath::Direction) 1);
+    path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
+    path.addRect(0, 0, 12, 12, SkPath::kCCW_Direction);
+    path.addRect(0, 12, 9, 9, SkPath::kCCW_Direction);
 </div>
 
 <div id="testLine59">
-    path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
-    path.addRect(6, 6, 18, 18, (SkPath::Direction) 1);
-    path.addRect(4, 4, 13, 13, (SkPath::Direction) 1);
+    path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
+    path.addRect(6, 6, 18, 18, SkPath::kCCW_Direction);
+    path.addRect(4, 4, 13, 13, SkPath::kCCW_Direction);
 </div>
 
 <div id="testLine60">
-    path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
-    path.addRect(6, 12, 18, 18, (SkPath::Direction) 1);
-    path.addRect(4, 12, 13, 13, (SkPath::Direction) 1);
+    path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
+    path.addRect(6, 12, 18, 18, SkPath::kCCW_Direction);
+    path.addRect(4, 12, 13, 13, SkPath::kCCW_Direction);
 </div>
 
 <div id="testLine61">
-    path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
-    path.addRect(12, 0, 24, 24, (SkPath::Direction) 1);
-    path.addRect(12, 0, 21, 21, (SkPath::Direction) 1);
+    path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
+    path.addRect(12, 0, 24, 24, SkPath::kCCW_Direction);
+    path.addRect(12, 0, 21, 21, SkPath::kCCW_Direction);
 </div>
 
 <div id="testLine62">
-    path.addRect(0, 0, 60, 60, (SkPath::Direction) 0);
-    path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
-    path.addRect(0, 12, 12, 12, (SkPath::Direction) 0);
-    path.addRect(4, 12, 13, 13, (SkPath::Direction) 1);
+    path.addRect(0, 0, 60, 60, SkPath::kCW_Direction);
+    path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
+    path.addRect(0, 12, 12, 12, SkPath::kCW_Direction);
+    path.addRect(4, 12, 13, 13, SkPath::kCCW_Direction);
 </div>
 
 <div id="testLine63">
-    path.addRect(0, 0, 60, 60, (SkPath::Direction) 0);
-    path.addRect(0, 10, 20, 20, (SkPath::Direction) 0);
-    path.addRect(0, 6, 12, 12, (SkPath::Direction) 1);
-    path.addRect(0, 32, 9, 36, (SkPath::Direction) 1);
+    path.addRect(0, 0, 60, 60, SkPath::kCW_Direction);
+    path.addRect(0, 10, 20, 20, SkPath::kCW_Direction);
+    path.addRect(0, 6, 12, 12, SkPath::kCCW_Direction);
+    path.addRect(0, 32, 9, 36, SkPath::kCCW_Direction);
 </div>
 
 <div id="testLine64">
-    path.addRect(0, 0, 60, 60, (SkPath::Direction) 0);
-    path.addRect(10, 40, 30, 30, (SkPath::Direction) 0);
-    path.addRect(18, 6, 30, 30, (SkPath::Direction) 0);
+    path.addRect(0, 0, 60, 60, SkPath::kCW_Direction);
+    path.addRect(10, 40, 30, 30, SkPath::kCW_Direction);
+    path.addRect(18, 6, 30, 30, SkPath::kCW_Direction);
 </div>
 
 <div id="testLine65">
-    path.addRect(0, 0, 60, 60, (SkPath::Direction) 0);
-    path.addRect(10, 0, 30, 30, (SkPath::Direction) 0);
-    path.addRect(24, 0, 36, 36, (SkPath::Direction) 0);
-    path.addRect(32, 6, 36, 41, (SkPath::Direction) 1);
+    path.addRect(0, 0, 60, 60, SkPath::kCW_Direction);
+    path.addRect(10, 0, 30, 30, SkPath::kCW_Direction);
+    path.addRect(24, 0, 36, 36, SkPath::kCW_Direction);
+    path.addRect(32, 6, 36, 41, SkPath::kCCW_Direction);
 </div>
 
 <div id="testLine66">
-    path.addRect(0, 0, 60, 60, (SkPath::Direction) 0);
-    path.addRect(0, 30, 20, 20, (SkPath::Direction) 0);
-    path.addRect(12, 20, 24, 30, (SkPath::Direction) 0);
+    path.addRect(0, 0, 60, 60, SkPath::kCW_Direction);
+    path.addRect(0, 30, 20, 20, SkPath::kCW_Direction);
+    path.addRect(12, 20, 24, 30, SkPath::kCW_Direction);
 </div>
 
 <div id="testLine67">
-    path.addRect(0, 0, 60, 60, (SkPath::Direction) 0);
-    path.addRect(10, 40, 30, 30, (SkPath::Direction) 0);
-    path.addRect(24, 20, 36, 30, (SkPath::Direction) 0);
-    path.addRect(32, 0, 36, 41, (SkPath::Direction) 0);
+    path.addRect(0, 0, 60, 60, SkPath::kCW_Direction);
+    path.addRect(10, 40, 30, 30, SkPath::kCW_Direction);
+    path.addRect(24, 20, 36, 30, SkPath::kCW_Direction);
+    path.addRect(32, 0, 36, 41, SkPath::kCW_Direction);
 </div>
 
 <div id="testLine68a">
-    path.addRect(0, 0, 8, 8, (SkPath::Direction) 0);
-    path.addRect(2, 2, 6, 6, (SkPath::Direction) 0);
-    path.addRect(1, 2, 4, 2, (SkPath::Direction) 0);
+    path.addRect(0, 0, 8, 8, SkPath::kCW_Direction);
+    path.addRect(2, 2, 6, 6, SkPath::kCW_Direction);
+    path.addRect(1, 2, 4, 2, SkPath::kCW_Direction);
 </div>
 
 <div id="testLine68b">
-    path.addRect(0, 0, 8, 8, (SkPath::Direction) 0);
-    path.addRect(2, 2, 6, 6, (SkPath::Direction) 1);
-    path.addRect(1, 2, 4, 2, (SkPath::Direction) 0);
+    path.addRect(0, 0, 8, 8, SkPath::kCW_Direction);
+    path.addRect(2, 2, 6, 6, SkPath::kCCW_Direction);
+    path.addRect(1, 2, 4, 2, SkPath::kCW_Direction);
 </div>
 
 <div id="testLine68c">
-    path.addRect(0, 0, 8, 8, (SkPath::Direction) 1);
-    path.addRect(2, 2, 6, 6, (SkPath::Direction) 0);
-    path.addRect(1, 2, 4, 2, (SkPath::Direction) 0);
+    path.addRect(0, 0, 8, 8, SkPath::kCCW_Direction);
+    path.addRect(2, 2, 6, 6, SkPath::kCW_Direction);
+    path.addRect(1, 2, 4, 2, SkPath::kCW_Direction);
 </div>
 
 <div id="testLine68d">
-    path.addRect(0, 0, 8, 8, (SkPath::Direction) 1);
-    path.addRect(2, 2, 6, 6, (SkPath::Direction) 1);
-    path.addRect(1, 2, 4, 2, (SkPath::Direction) 0);
+    path.addRect(0, 0, 8, 8, SkPath::kCCW_Direction);
+    path.addRect(2, 2, 6, 6, SkPath::kCCW_Direction);
+    path.addRect(1, 2, 4, 2, SkPath::kCW_Direction);
 </div>
 
 <div id="testLine68e">
-    path.addRect(0, 0, 8, 8, (SkPath::Direction) 0);
-    path.addRect(0, 0, 8, 8, (SkPath::Direction) 0);
-    path.addRect(2, 2, 6, 6, (SkPath::Direction) 1);
-    path.addRect(1, 2, 2, 2, (SkPath::Direction) 0);
+    path.addRect(0, 0, 8, 8, SkPath::kCW_Direction);
+    path.addRect(0, 0, 8, 8, SkPath::kCW_Direction);
+    path.addRect(2, 2, 6, 6, SkPath::kCCW_Direction);
+    path.addRect(1, 2, 2, 2, SkPath::kCW_Direction);
 </div>
 
 <div id="testLine68f">
-    path.addRect(0, 0, 8, 8, (SkPath::Direction) 0);
-    path.addRect(2, 2, 6, 6, (SkPath::Direction) 1);
-    path.addRect(2, 2, 6, 6, (SkPath::Direction) 1);
-    path.addRect(1, 2, 2, 2, (SkPath::Direction) 0);
+    path.addRect(0, 0, 8, 8, SkPath::kCW_Direction);
+    path.addRect(2, 2, 6, 6, SkPath::kCCW_Direction);
+    path.addRect(2, 2, 6, 6, SkPath::kCCW_Direction);
+    path.addRect(1, 2, 2, 2, SkPath::kCW_Direction);
 </div>
 
 <div id="testLine69">
-    path.addRect(0, 20, 20, 20, (SkPath::Direction) 0);
-    path.addRect(0, 20, 12, 30, (SkPath::Direction) 0);
-    path.addRect(12, 32, 21, 36, (SkPath::Direction) 0);
+    path.addRect(0, 20, 20, 20, SkPath::kCW_Direction);
+    path.addRect(0, 20, 12, 30, SkPath::kCW_Direction);
+    path.addRect(12, 32, 21, 36, SkPath::kCW_Direction);
 </div>
 
 <div id="testLine70">
-    path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
-    path.addRect(0, 24, 12, 12, (SkPath::Direction) 0);
-    path.addRect(12, 32, 21, 36, (SkPath::Direction) 1);
+    path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
+    path.addRect(0, 24, 12, 12, SkPath::kCW_Direction);
+    path.addRect(12, 32, 21, 36, SkPath::kCCW_Direction);
 </div>
 
 <div id="testLine71">
-    path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
-    path.addRect(12, 0, 24, 24, (SkPath::Direction) 0);
-    path.addRect(12, 32, 21, 36, (SkPath::Direction) 0);
+    path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
+    path.addRect(12, 0, 24, 24, SkPath::kCW_Direction);
+    path.addRect(12, 32, 21, 36, SkPath::kCW_Direction);
 </div>
 
 <div id="testLine72">
-    path.addRect(0, 0, 60, 60, (SkPath::Direction) 0);
-    path.addRect(10, 40, 30, 30, (SkPath::Direction) 0);
-    path.addRect(6, 20, 18, 30, (SkPath::Direction) 0);
+    path.addRect(0, 0, 60, 60, SkPath::kCW_Direction);
+    path.addRect(10, 40, 30, 30, SkPath::kCW_Direction);
+    path.addRect(6, 20, 18, 30, SkPath::kCW_Direction);
 </div>
 
 <div id="testLine73">
-    path.addRect(0, 0, 60, 60, (SkPath::Direction) 0);
-    path.addRect(0, 40, 20, 20, (SkPath::Direction) 0);
-    path.addRect(0, 20, 12, 30, (SkPath::Direction) 0);
-    path.addRect(0, 0, 9, 9, (SkPath::Direction) 1);
+    path.addRect(0, 0, 60, 60, SkPath::kCW_Direction);
+    path.addRect(0, 40, 20, 20, SkPath::kCW_Direction);
+    path.addRect(0, 20, 12, 30, SkPath::kCW_Direction);
+    path.addRect(0, 0, 9, 9, SkPath::kCCW_Direction);
 </div>
 
 <div id="testLine74">
-    path.addRect(20, 30, 40, 40, (SkPath::Direction) 0);
-    path.addRect(24, 20, 36, 30, (SkPath::Direction) 1);
-    path.addRect(32, 24, 36, 41, (SkPath::Direction) 1);
+    path.addRect(20, 30, 40, 40, SkPath::kCW_Direction);
+    path.addRect(24, 20, 36, 30, SkPath::kCCW_Direction);
+    path.addRect(32, 24, 36, 41, SkPath::kCCW_Direction);
 </div>
 
 <div id="testLine75">
-    path.addRect(0, 0, 60, 60, (SkPath::Direction) 0);
-    path.addRect(10, 0, 30, 30, (SkPath::Direction) 1);
-    path.addRect(18, 0, 30, 30, (SkPath::Direction) 1);
-    path.addRect(12, 0, 21, 21, (SkPath::Direction) 1);
+    path.addRect(0, 0, 60, 60, SkPath::kCW_Direction);
+    path.addRect(10, 0, 30, 30, SkPath::kCCW_Direction);
+    path.addRect(18, 0, 30, 30, SkPath::kCCW_Direction);
+    path.addRect(12, 0, 21, 21, SkPath::kCCW_Direction);
 </div>
 
 <div id="testLine76">
-    path.addRect(36, 0, 66, 60, (SkPath::Direction) 0);
-    path.addRect(10, 20, 40, 30, (SkPath::Direction) 0);
-    path.addRect(24, 20, 36, 30, (SkPath::Direction) 1);
-    path.addRect(32, 6, 36, 41, (SkPath::Direction) 1);
+    path.addRect(36, 0, 66, 60, SkPath::kCW_Direction);
+    path.addRect(10, 20, 40, 30, SkPath::kCW_Direction);
+    path.addRect(24, 20, 36, 30, SkPath::kCCW_Direction);
+    path.addRect(32, 6, 36, 41, SkPath::kCCW_Direction);
 </div>
 
 <div id="testLine77">
-    path.addRect(20, 0, 40, 40, (SkPath::Direction) 0);
-    path.addRect(24, 6, 36, 36, (SkPath::Direction) 1);
-    path.addRect(24, 32, 33, 36, (SkPath::Direction) 1);
+    path.addRect(20, 0, 40, 40, SkPath::kCW_Direction);
+    path.addRect(24, 6, 36, 36, SkPath::kCCW_Direction);
+    path.addRect(24, 32, 33, 36, SkPath::kCCW_Direction);
 </div>
 
 <div id="testLine78">
-    path.addRect(0, 0, 30, 60, (SkPath::Direction) 0);
-    path.addRect(10, 20, 30, 30, (SkPath::Direction) 1);
-    path.addRect(18, 20, 30, 30, (SkPath::Direction) 1);
-    path.addRect(32, 0, 36, 41, (SkPath::Direction) 1);
+    path.addRect(0, 0, 30, 60, SkPath::kCW_Direction);
+    path.addRect(10, 20, 30, 30, SkPath::kCCW_Direction);
+    path.addRect(18, 20, 30, 30, SkPath::kCCW_Direction);
+    path.addRect(32, 0, 36, 41, SkPath::kCCW_Direction);
 </div>
 
 <div id="testLine79">
-    path.addRect(0, 36, 60, 30, (SkPath::Direction) 0);
-    path.addRect(10, 30, 40, 30, (SkPath::Direction) 0);
-    path.addRect(0, 20, 12, 30, (SkPath::Direction) 1);
-    path.addRect(0, 32, 9, 36, (SkPath::Direction) 1);
+    path.addRect(0, 36, 60, 30, SkPath::kCW_Direction);
+    path.addRect(10, 30, 40, 30, SkPath::kCW_Direction);
+    path.addRect(0, 20, 12, 30, SkPath::kCCW_Direction);
+    path.addRect(0, 32, 9, 36, SkPath::kCCW_Direction);
+</div>
+
+<div id="testLine81">
+    path.addRect(-1, -1, 3, 3, SkPath::kCW_Direction);
+    path.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
+    path.addRect(1, 1, 2, 2, SkPath::kCCW_Direction);
 </div>
 
 <div id="testDegenerate1">
@@ -990,29 +996,29 @@
 
 <div id="testLine1x">
     path.setFillType(SkPath::kEvenOdd_FillType);
-    path.addRect(0, 0, 12, 12, (SkPath::Direction) 0);
-    path.addRect(4, 0, 13, 13, (SkPath::Direction) 0);
+    path.addRect(0, 0, 12, 12, SkPath::kCW_Direction);
+    path.addRect(4, 0, 13, 13, SkPath::kCW_Direction);
 </div>
 
 <div id="testLine2x">
     path.setFillType(SkPath::kEvenOdd_FillType);
-    path.addRect(0, 20, 20, 20, (SkPath::Direction) 0);
-    path.addRect(0, 20, 12, 30, (SkPath::Direction) 0);
-    path.addRect(12, 0, 21, 21, (SkPath::Direction) 1);
+    path.addRect(0, 20, 20, 20, SkPath::kCW_Direction);
+    path.addRect(0, 20, 12, 30, SkPath::kCW_Direction);
+    path.addRect(12, 0, 21, 21, SkPath::kCCW_Direction);
 </div>
 
 <div id="testLine3x">
     path.setFillType(SkPath::kEvenOdd_FillType);
-    path.addRect(10, 30, 30, 30, (SkPath::Direction) 0);
-    path.addRect(18, 20, 30, 30, (SkPath::Direction) 1);
-    path.addRect(0, 32, 9, 36, (SkPath::Direction) 1);
+    path.addRect(10, 30, 30, 30, SkPath::kCW_Direction);
+    path.addRect(18, 20, 30, 30, SkPath::kCCW_Direction);
+    path.addRect(0, 32, 9, 36, SkPath::kCCW_Direction);
 </div>
 
 <div id="testLine4x">
     path.setFillType(SkPath::kEvenOdd_FillType);
-    path.addRect(10, 30, 30, 30, (SkPath::Direction) 0);
-    path.addRect(24, 20, 36, 30, (SkPath::Direction) 1);
-    path.addRect(0, 32, 9, 36, (SkPath::Direction) 1);
+    path.addRect(10, 30, 30, 30, SkPath::kCW_Direction);
+    path.addRect(24, 20, 36, 30, SkPath::kCCW_Direction);
+    path.addRect(0, 32, 9, 36, SkPath::kCCW_Direction);
 </div>
 
 <div id="testQuadratic1">
@@ -2839,6 +2845,7 @@
 <script type="text/javascript">
 
 var testDivs = [
+    testLine81,
     testQuadratic61,
     testQuadratic60,
     testQuadratic59o,
@@ -3103,6 +3110,7 @@
     for (var r in rectStrs) {
         var rect = rectStrs[r];
         var sideStrs = rect.match(pattern);
+        var ccw = rect.split("kCCW_Direction").length > 1;
         var sides = [];
         for (var wd in sideStrs) {
             var num = parseFloat(sideStrs[wd]);
@@ -3121,7 +3129,7 @@
         var botRight = [];
         botRight.push(sides[2]); botRight.push(sides[3]);
         verbs.push(topLeft);
-        if (sides[4] == 0) {
+        if (!ccw) {
             verbs.push(topRight);
             verbs.push(botRight);
             verbs.push(botLeft);