diff --git a/tests/PathOpsSimplifyTest.cpp b/tests/PathOpsSimplifyTest.cpp
index 9d8e6b6..3771141 100644
--- a/tests/PathOpsSimplifyTest.cpp
+++ b/tests/PathOpsSimplifyTest.cpp
@@ -19,7 +19,7 @@
 
 static void testLine1x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(2,0);
     path.lineTo(1,1);
     path.lineTo(0,0);
@@ -64,7 +64,7 @@
 
 static void testLine2x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     addInnerCWTriangle(path);
     addOuterCWTriangle(path);
     testSimplify(reporter, path, filename);
@@ -79,7 +79,7 @@
 
 static void testLine3x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     addInnerCCWTriangle(path);
     addOuterCWTriangle(path);
     testSimplify(reporter, path, filename);
@@ -94,7 +94,7 @@
 
 static void testLine3ax(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     addInnerCWTriangle(path);
     addOuterCCWTriangle(path);
     testSimplify(reporter, path, filename);
@@ -109,7 +109,7 @@
 
 static void testLine3bx(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     addInnerCCWTriangle(path);
     addOuterCCWTriangle(path);
     testSimplify(reporter, path, filename);
@@ -124,7 +124,7 @@
 
 static void testLine4x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     addOuterCCWTriangle(path);
     addOuterCWTriangle(path);
     testSimplify(reporter, path, filename);
@@ -139,7 +139,7 @@
 
 static void testLine5x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     addOuterCWTriangle(path);
     addOuterCWTriangle(path);
     testSimplify(reporter, path, filename);
@@ -160,7 +160,7 @@
 
 static void testLine6x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(0,0);
     path.lineTo(4,0);
     path.lineTo(2,2);
@@ -187,7 +187,7 @@
 
 static void testLine7x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(0,0);
     path.lineTo(4,0);
     path.lineTo(2,2);
@@ -210,7 +210,7 @@
 
 static void testLine7ax(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(0,0);
     path.lineTo(4,0);
     path.lineTo(2,2);
@@ -232,7 +232,7 @@
 
 static void testLine7bx(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(0,0);
     path.lineTo(4,0);
     path.close();
@@ -258,7 +258,7 @@
 
 static void testLine8x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(0,4);
     path.lineTo(4,4);
     path.lineTo(2,2);
@@ -285,7 +285,7 @@
 
 static void testLine9x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(0,4);
     path.lineTo(4,4);
     path.lineTo(2,2);
@@ -312,7 +312,7 @@
 
 static void testLine10x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(0,4);
     path.lineTo(4,4);
     path.lineTo(2,2);
@@ -339,7 +339,7 @@
 
 static void testLine10ax(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(0,4);
     path.lineTo(8,4);
     path.lineTo(4,0);
@@ -388,7 +388,7 @@
 
 static void testLine11x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     addCWContainer(path);
     addCWContents(path);
     testSimplify(reporter, path, filename);
@@ -403,7 +403,7 @@
 
 static void testLine12x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     addCCWContainer(path);
     addCWContents(path);
     testSimplify(reporter, path, filename);
@@ -418,7 +418,7 @@
 
 static void testLine13x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     addCWContainer(path);
     addCCWContents(path);
     testSimplify(reporter, path, filename);
@@ -433,7 +433,7 @@
 
 static void testLine14x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     addCCWContainer(path);
     addCCWContents(path);
     testSimplify(reporter, path, filename);
@@ -447,7 +447,7 @@
 
 static void testLine15x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 9, 9, SkPathDirection::kCW);
     testSimplify(reporter, path, filename);
 }
@@ -461,7 +461,7 @@
 
 static void testLine16x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 12, 12, SkPathDirection::kCW);
     path.addRect(0, 4, 9, 9, SkPathDirection::kCW);
     testSimplify(reporter, path, filename);
@@ -476,7 +476,7 @@
 
 static void testLine17x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 12, 12, SkPathDirection::kCW);
     path.addRect(4, 12, 13, 13, SkPathDirection::kCW);
     testSimplify(reporter, path, filename);
@@ -491,7 +491,7 @@
 
 static void testLine18x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 12, 12, SkPathDirection::kCW);
     path.addRect(12, 4, 21, 21, SkPathDirection::kCW);
     testSimplify(reporter, path, filename);
@@ -506,7 +506,7 @@
 
 static void testLine19x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 12, 12, SkPathDirection::kCW);
     path.addRect(12, 16, 21, 21, SkPathDirection::kCW);
     testSimplify(reporter, path, filename);
@@ -521,7 +521,7 @@
 
 static void testLine20x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 12, 12, 12, SkPathDirection::kCW);
     path.addRect(0, 12, 9, 9, SkPathDirection::kCW);
     testSimplify(reporter, path, filename);
@@ -536,7 +536,7 @@
 
 static void testLine21x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 12, 12, 12, SkPathDirection::kCW);
     path.addRect(0, 16, 9, 9, SkPathDirection::kCW);
     testSimplify(reporter, path, filename);
@@ -551,7 +551,7 @@
 
 static void testLine22x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 12, 12, 12, SkPathDirection::kCW);
     path.addRect(4, 12, 13, 13, SkPathDirection::kCW);
     testSimplify(reporter, path, filename);
@@ -566,7 +566,7 @@
 
 static void testLine23x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 12, 12, 12, SkPathDirection::kCW);
     path.addRect(12, 0, 21, 21, SkPathDirection::kCW);
     testSimplify(reporter, path, filename);
@@ -587,7 +587,7 @@
 
 static void testLine24ax(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(2,0);
     path.lineTo(4,4);
     path.lineTo(0,4);
@@ -608,7 +608,7 @@
 
 static void testLine24x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 18, 12, 12, SkPathDirection::kCW);
     path.addRect(4, 12, 13, 13, SkPathDirection::kCW);
     testSimplify(reporter, path, filename);
@@ -623,7 +623,7 @@
 
 static void testLine25x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 6, 12, 12, SkPathDirection::kCW);
     path.addRect(12, 0, 21, 21, SkPathDirection::kCW);
     testSimplify(reporter, path, filename);
@@ -638,7 +638,7 @@
 
 static void testLine26x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 18, 12, 12, SkPathDirection::kCW);
     path.addRect(0, 12, 9, 9, SkPathDirection::kCW);
     testSimplify(reporter, path, filename);
@@ -653,7 +653,7 @@
 
 static void testLine27x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 18, 12, 12, SkPathDirection::kCW);
     path.addRect(12, 8, 21, 21, SkPathDirection::kCW);
     testSimplify(reporter, path, filename);
@@ -668,7 +668,7 @@
 
 static void testLine28x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 6, 12, 12, SkPathDirection::kCW);
     path.addRect(0, 0, 9, 9, SkPathDirection::kCW);
     testSimplify(reporter, path, filename);
@@ -683,7 +683,7 @@
 
 static void testLine29x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 18, 12, 12, SkPathDirection::kCW);
     path.addRect(12, 12, 21, 21, SkPathDirection::kCW);
     testSimplify(reporter, path, filename);
@@ -699,7 +699,7 @@
 
 static void testLine30x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 20, 20, SkPathDirection::kCW);
     path.addRect(0, 0, 12, 12, SkPathDirection::kCW);
     path.addRect(4, 4, 13, 13, SkPathDirection::kCW);
@@ -716,7 +716,7 @@
 
 static void testLine31x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 20, 20, SkPathDirection::kCW);
     path.addRect(0, 0, 12, 12, SkPathDirection::kCW);
     path.addRect(0, 4, 9, 9, SkPathDirection::kCW);
@@ -733,7 +733,7 @@
 
 static void testLine32x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 20, 20, SkPathDirection::kCW);
     path.addRect(0, 0, 12, 12, SkPathDirection::kCW);
     path.addRect(4, 12, 13, 13, SkPathDirection::kCW);
@@ -750,7 +750,7 @@
 
 static void testLine33x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 20, 20, SkPathDirection::kCW);
     path.addRect(0, 0, 12, 12, SkPathDirection::kCW);
     path.addRect(4, 16, 13, 13, SkPathDirection::kCW);
@@ -767,7 +767,7 @@
 
 static void testLine34x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 20, 20, SkPathDirection::kCW);
     path.addRect(0, 6, 12, 12, SkPathDirection::kCW);
     path.addRect(4, 12, 13, 13, SkPathDirection::kCW);
@@ -784,7 +784,7 @@
 
 static void testLine35x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 20, 20, SkPathDirection::kCW);
     path.addRect(6, 0, 18, 18, SkPathDirection::kCW);
     path.addRect(4, 16, 13, 13, SkPathDirection::kCW);
@@ -801,7 +801,7 @@
 
 static void testLine36x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 10, 20, 20, SkPathDirection::kCW);
     path.addRect(6, 12, 18, 18, SkPathDirection::kCW);
     path.addRect(4, 16, 13, 13, SkPathDirection::kCW);
@@ -818,7 +818,7 @@
 
 static void testLine37x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 20, 20, 20, SkPathDirection::kCW);
     path.addRect(18, 24, 30, 30, SkPathDirection::kCW);
     path.addRect(0, 0, 9, 9, SkPathDirection::kCW);
@@ -835,7 +835,7 @@
 
 static void testLine38x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(10, 0, 30, 30, SkPathDirection::kCW);
     path.addRect(6, 12, 18, 18, SkPathDirection::kCW);
     path.addRect(12, 12, 21, 21, SkPathDirection::kCW);
@@ -852,7 +852,7 @@
 
 static void testLine40x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(10, 0, 30, 30, SkPathDirection::kCW);
     path.addRect(12, 18, 24, 24, SkPathDirection::kCW);
     path.addRect(4, 16, 13, 13, SkPathDirection::kCW);
@@ -869,7 +869,7 @@
 
 static void testLine41x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 20, 20, SkPathDirection::kCW);
     path.addRect(18, 24, 30, 30, SkPathDirection::kCW);
     path.addRect(12, 0, 21, 21, SkPathDirection::kCW);
@@ -886,7 +886,7 @@
 
 static void testLine42x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 20, 20, SkPathDirection::kCW);
     path.addRect(0, 0, 12, 12, SkPathDirection::kCW);
     path.addRect(8, 16, 17, 17, SkPathDirection::kCW);
@@ -903,7 +903,7 @@
 
 static void testLine43x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 20, 20, SkPathDirection::kCW);
     path.addRect(6, 24, 18, 18, SkPathDirection::kCW);
     path.addRect(0, 32, 9, 36, SkPathDirection::kCCW);
@@ -920,7 +920,7 @@
 
 static void testLine44x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(10, 40, 30, 30, SkPathDirection::kCW);
     path.addRect(18, 0, 30, 30, SkPathDirection::kCW);
     path.addRect(18, 32, 27, 36, SkPathDirection::kCCW);
@@ -937,7 +937,7 @@
 
 static void testLine45x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(10, 0, 30, 30, SkPathDirection::kCW);
     path.addRect(18, 0, 30, 30, SkPathDirection::kCW);
     path.addRect(24, 32, 33, 36, SkPathDirection::kCW);
@@ -954,7 +954,7 @@
 
 static void testLine46x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(10, 40, 30, 30, SkPathDirection::kCW);
     path.addRect(24, 0, 36, 36, SkPathDirection::kCW);
     path.addRect(24, 32, 33, 36, SkPathDirection::kCW);
@@ -971,7 +971,7 @@
 
 static void testLine47x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 20, 20, SkPathDirection::kCW);
     path.addRect(0, 0, 12, 12, SkPathDirection::kCW);
     path.addRect(0, 0, 9, 9, SkPathDirection::kCCW);
@@ -988,7 +988,7 @@
 
 static void testLine48x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 20, 20, SkPathDirection::kCW);
     path.addRect(0, 6, 12, 12, SkPathDirection::kCW);
     path.addRect(0, 0, 9, 9, SkPathDirection::kCCW);
@@ -1005,7 +1005,7 @@
 
 static void testLine49x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 20, 20, SkPathDirection::kCW);
     path.addRect(0, 0, 12, 12, SkPathDirection::kCW);
     path.addRect(0, 0, 9, 9, SkPathDirection::kCW);
@@ -1021,7 +1021,7 @@
 
 static void testLine50x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(10, 30, 30, 30, SkPathDirection::kCW);
     path.addRect(24, 20, 36, 30, SkPathDirection::kCW);
     testSimplify(reporter, path, filename);
@@ -1037,7 +1037,7 @@
 
 static void testLine51x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 20, 20, SkPathDirection::kCW);
     path.addRect(0, 12, 12, 12, SkPathDirection::kCW);
     path.addRect(4, 12, 13, 13, SkPathDirection::kCCW);
@@ -1054,7 +1054,7 @@
 
 static void testLine52x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 30, 20, 20, SkPathDirection::kCW);
     path.addRect(6, 20, 18, 30, SkPathDirection::kCW);
     path.addRect(32, 0, 36, 41, SkPathDirection::kCW);
@@ -1071,7 +1071,7 @@
 
 static void testLine53x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(10, 30, 30, 30, SkPathDirection::kCW);
     path.addRect(12, 20, 24, 30, SkPathDirection::kCW);
     path.addRect(12, 32, 21, 36, SkPathDirection::kCCW);
@@ -1088,7 +1088,7 @@
 
 static void testLine54x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 20, 20, SkPathDirection::kCW);
     path.addRect(6, 0, 18, 18, SkPathDirection::kCW);
     path.addRect(8, 4, 17, 17, SkPathDirection::kCCW);
@@ -1105,7 +1105,7 @@
 
 static void testLine55x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 20, 20, SkPathDirection::kCW);
     path.addRect(6, 6, 18, 18, SkPathDirection::kCW);
     path.addRect(4, 4, 13, 13, SkPathDirection::kCCW);
@@ -1122,7 +1122,7 @@
 
 static void testLine56x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 20, 20, 20, SkPathDirection::kCW);
     path.addRect(18, 20, 30, 30, SkPathDirection::kCW);
     path.addRect(12, 0, 21, 21, SkPathDirection::kCCW);
@@ -1139,7 +1139,7 @@
 
 static void testLine57x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(20, 0, 40, 40, SkPathDirection::kCW);
     path.addRect(20, 0, 30, 40, SkPathDirection::kCW);
     path.addRect(12, 0, 21, 21, SkPathDirection::kCCW);
@@ -1156,7 +1156,7 @@
 
 static void testLine58x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 20, 20, SkPathDirection::kCW);
     path.addRect(0, 0, 12, 12, SkPathDirection::kCCW);
     path.addRect(0, 12, 9, 9, SkPathDirection::kCCW);
@@ -1173,7 +1173,7 @@
 
 static void testLine59x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 20, 20, SkPathDirection::kCW);
     path.addRect(6, 6, 18, 18, SkPathDirection::kCCW);
     path.addRect(4, 4, 13, 13, SkPathDirection::kCCW);
@@ -1190,7 +1190,7 @@
 
 static void testLine60x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 20, 20, SkPathDirection::kCW);
     path.addRect(6, 12, 18, 18, SkPathDirection::kCCW);
     path.addRect(4, 12, 13, 13, SkPathDirection::kCCW);
@@ -1207,7 +1207,7 @@
 
 static void testLine61x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 20, 20, SkPathDirection::kCW);
     path.addRect(12, 0, 24, 24, SkPathDirection::kCCW);
     path.addRect(12, 0, 21, 21, SkPathDirection::kCCW);
@@ -1225,7 +1225,7 @@
 
 static void testLine62x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 60, 60, SkPathDirection::kCW);
     path.addRect(0, 0, 20, 20, SkPathDirection::kCW);
     path.addRect(0, 12, 12, 12, SkPathDirection::kCW);
@@ -1244,7 +1244,7 @@
 
 static void testLine63x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 60, 60, SkPathDirection::kCW);
     path.addRect(0, 10, 20, 20, SkPathDirection::kCW);
     path.addRect(0, 6, 12, 12, SkPathDirection::kCCW);
@@ -1262,7 +1262,7 @@
 
 static void testLine64x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 60, 60, SkPathDirection::kCW);
     path.addRect(10, 40, 30, 30, SkPathDirection::kCW);
     path.addRect(18, 6, 30, 30, SkPathDirection::kCW);
@@ -1280,7 +1280,7 @@
 
 static void testLine65x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 60, 60, SkPathDirection::kCW);
     path.addRect(10, 0, 30, 30, SkPathDirection::kCW);
     path.addRect(24, 0, 36, 36, SkPathDirection::kCW);
@@ -1298,7 +1298,7 @@
 
 static void testLine66x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 60, 60, SkPathDirection::kCW);
     path.addRect(0, 30, 20, 20, SkPathDirection::kCW);
     path.addRect(12, 20, 24, 30, SkPathDirection::kCW);
@@ -1316,7 +1316,7 @@
 
 static void testLine67x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 60, 60, SkPathDirection::kCW);
     path.addRect(10, 40, 30, 30, SkPathDirection::kCW);
     path.addRect(24, 20, 36, 30, SkPathDirection::kCW);
@@ -1334,7 +1334,7 @@
 
 static void testLine68ax(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 8, 8, SkPathDirection::kCW);
     path.addRect(2, 2, 6, 6, SkPathDirection::kCW);
     path.addRect(1, 2, 4, 2, SkPathDirection::kCW);
@@ -1351,7 +1351,7 @@
 
 static void testLine68bx(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 8, 8, SkPathDirection::kCW);
     path.addRect(2, 2, 6, 6, SkPathDirection::kCCW);
     path.addRect(1, 2, 2, 2, SkPathDirection::kCW);
@@ -1368,7 +1368,7 @@
 
 static void testLine68cx(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 8, 8, SkPathDirection::kCCW);
     path.addRect(2, 2, 6, 6, SkPathDirection::kCW);
     path.addRect(1, 2, 4, 2, SkPathDirection::kCW);
@@ -1385,7 +1385,7 @@
 
 static void testLine68dx(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 8, 8, SkPathDirection::kCCW);
     path.addRect(2, 2, 6, 6, SkPathDirection::kCCW);
     path.addRect(1, 2, 4, 2, SkPathDirection::kCW);
@@ -1403,7 +1403,7 @@
 
 static void testLine68ex(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 8, 8, SkPathDirection::kCW);
     path.addRect(0, 0, 8, 8, SkPathDirection::kCW);
     path.addRect(2, 2, 6, 6, SkPathDirection::kCCW);
@@ -1422,7 +1422,7 @@
 
 static void testLine68fx(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 8, 8, SkPathDirection::kCW);
     path.addRect(2, 2, 6, 6, SkPathDirection::kCCW);
     path.addRect(2, 2, 6, 6, SkPathDirection::kCCW);
@@ -1442,7 +1442,7 @@
 
 static void testLine68gx(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 8, 8, SkPathDirection::kCW);
     path.addRect(0, 0, 8, 8, SkPathDirection::kCW);
     path.addRect(2, 2, 6, 6, SkPathDirection::kCCW);
@@ -1463,7 +1463,7 @@
 
 static void testLine68hx(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 8, 8, SkPathDirection::kCW);
     path.addRect(2, 2, 6, 6, SkPathDirection::kCCW);
     path.addRect(2, 2, 6, 6, SkPathDirection::kCCW);
@@ -1482,7 +1482,7 @@
 
 static void testLine69x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 20, 20, 20, SkPathDirection::kCW);
     path.addRect(0, 20, 12, 30, SkPathDirection::kCW);
     path.addRect(12, 32, 21, 36, SkPathDirection::kCW);
@@ -1499,7 +1499,7 @@
 
 static void testLine70x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 20, 20, SkPathDirection::kCW);
     path.addRect(0, 24, 12, 12, SkPathDirection::kCW);
     path.addRect(12, 32, 21, 36, SkPathDirection::kCCW);
@@ -1516,7 +1516,7 @@
 
 static void testLine71x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 20, 20, SkPathDirection::kCW);
     path.addRect(12, 0, 24, 24, SkPathDirection::kCW);
     path.addRect(12, 32, 21, 36, SkPathDirection::kCW);
@@ -1533,7 +1533,7 @@
 
 static void testLine72x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 60, 60, SkPathDirection::kCW);
     path.addRect(10, 40, 30, 30, SkPathDirection::kCW);
     path.addRect(6, 20, 18, 30, SkPathDirection::kCW);
@@ -1551,7 +1551,7 @@
 
 static void testLine73x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 60, 60, SkPathDirection::kCW);
     path.addRect(0, 40, 20, 20, SkPathDirection::kCW);
     path.addRect(0, 20, 12, 30, SkPathDirection::kCW);
@@ -1569,7 +1569,7 @@
 
 static void testLine74x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(20, 30, 40, 40, SkPathDirection::kCW);
     path.addRect(24, 20, 36, 30, SkPathDirection::kCCW);
     path.addRect(32, 24, 36, 41, SkPathDirection::kCCW);
@@ -1587,7 +1587,7 @@
 
 static void testLine75x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 60, 60, SkPathDirection::kCW);
     path.addRect(10, 0, 30, 30, SkPathDirection::kCCW);
     path.addRect(18, 0, 30, 30, SkPathDirection::kCCW);
@@ -1606,7 +1606,7 @@
 
 static void testLine76x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(36, 0, 66, 60, SkPathDirection::kCW);
     path.addRect(10, 20, 40, 30, SkPathDirection::kCW);
     path.addRect(24, 20, 36, 30, SkPathDirection::kCCW);
@@ -1624,7 +1624,7 @@
 
 static void testLine77x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(20, 0, 40, 40, SkPathDirection::kCW);
     path.addRect(24, 6, 36, 36, SkPathDirection::kCCW);
     path.addRect(24, 32, 33, 36, SkPathDirection::kCCW);
@@ -1642,7 +1642,7 @@
 
 static void testLine78x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 30, 60, SkPathDirection::kCW);
     path.addRect(10, 20, 30, 30, SkPathDirection::kCCW);
     path.addRect(18, 20, 30, 30, SkPathDirection::kCCW);
@@ -1661,7 +1661,7 @@
 
 static void testLine79x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 36, 60, 30, SkPathDirection::kCW);
     path.addRect(10, 30, 40, 30, SkPathDirection::kCW);
     path.addRect(0, 20, 12, 30, SkPathDirection::kCCW);
@@ -1694,7 +1694,7 @@
 
 static void testDegenerate1x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(0, 0);
     path.lineTo(0, 0);
     path.lineTo(2, 0);
@@ -1721,7 +1721,7 @@
 
 static void testDegenerate2x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(0, 0);
     path.lineTo(0, 0);
     path.lineTo(0, 0);
@@ -1748,7 +1748,7 @@
 
 static void testDegenerate3x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(0, 0);
     path.lineTo(2, 0);
     path.lineTo(1, 0);
@@ -1775,7 +1775,7 @@
 
 static void testDegenerate4x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(0, 0);
     path.lineTo(1, 0);
     path.lineTo(1, 3);
@@ -1802,7 +1802,7 @@
 
 static void testNondegenerate1x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(0, 0);
     path.lineTo(3, 0);
     path.lineTo(1, 3);
@@ -1829,7 +1829,7 @@
 
 static void testNondegenerate2x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(1, 0);
     path.lineTo(0, 1);
     path.lineTo(1, 1);
@@ -1856,7 +1856,7 @@
 
 static void testNondegenerate3x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(0, 0);
     path.lineTo(1, 0);
     path.lineTo(2, 1);
@@ -1883,7 +1883,7 @@
 
 static void testNondegenerate4x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(1, 0);
     path.lineTo(0, 1);
     path.lineTo(1, 2);
@@ -1912,7 +1912,7 @@
 
 static void testQuadralateral5x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(0, 0);
     path.lineTo(0, 0);
     path.lineTo(1, 0);
@@ -1943,7 +1943,7 @@
 
 static void testQuadralateral6x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(0, 0);
     path.lineTo(0, 0);
     path.lineTo(1, 0);
@@ -1976,7 +1976,7 @@
 
 static void testFauxQuadralateral6x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(0, 0);
     path.lineTo(1, 0);
     path.lineTo(1, 1);
@@ -2011,7 +2011,7 @@
 
 static void testFauxQuadralateral6ax(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(0, 0);
     path.lineTo(3, 0);
     path.lineTo(3, 3);
@@ -2046,7 +2046,7 @@
 
 static void testFauxQuadralateral6bx(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(0, 0);
     path.lineTo(3, 0);
     path.lineTo(3, 3);
@@ -2081,7 +2081,7 @@
 
 static void testFauxQuadralateral6cx(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(0, 0);
     path.lineTo(3, 3);
     path.lineTo(3, 0);
@@ -2116,7 +2116,7 @@
 
 static void testFauxQuadralateral6dx(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(0, 0);
     path.lineTo(3, 3);
     path.lineTo(3, 0);
@@ -2149,7 +2149,7 @@
 
 static void testQuadralateral6ax(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(0, 0);
     path.lineTo(0, 0);
     path.lineTo(3, 0);
@@ -2180,7 +2180,7 @@
 
 static void testQuadralateral7x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(0, 0);
     path.lineTo(0, 0);
     path.lineTo(1, 0);
@@ -2211,7 +2211,7 @@
 
 static void testQuadralateral8x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(0, 0);
     path.lineTo(3, 1);
     path.lineTo(1, 3);
@@ -2242,7 +2242,7 @@
 
 static void testQuadralateral9x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(0, 0);
     path.lineTo(1, 0);
     path.lineTo(1, 2);
@@ -2258,7 +2258,7 @@
 
 static void testLine1a(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kWinding);
+    path.setFillType(SkPath::kWinding_FillType);
     path.addRect(0, 0, 12, 12, SkPathDirection::kCW);
     path.addRect(4, 0, 13, 13, SkPathDirection::kCCW);
     testSimplify(reporter, path, filename);
@@ -2266,7 +2266,7 @@
 
 static void testLine1ax(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 12, 12, SkPathDirection::kCW);
     path.addRect(4, 0, 13, 13, SkPathDirection::kCCW);
     testSimplify(reporter, path, filename);
@@ -2274,7 +2274,7 @@
 
 static void testLine2ax(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 20, 20, 20, SkPathDirection::kCW);
     path.addRect(0, 20, 12, 30, SkPathDirection::kCW);
     path.addRect(12, 0, 21, 21, SkPathDirection::kCCW);
@@ -2283,7 +2283,7 @@
 
 static void testLine3aax(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(10, 30, 30, 30, SkPathDirection::kCW);
     path.addRect(18, 20, 30, 30, SkPathDirection::kCCW);
     path.addRect(0, 32, 9, 36, SkPathDirection::kCCW);
@@ -2292,7 +2292,7 @@
 
 static void testLine4ax(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(10, 30, 30, 30, SkPathDirection::kCW);
     path.addRect(24, 20, 36, 30, SkPathDirection::kCCW);
     path.addRect(0, 32, 9, 36, SkPathDirection::kCCW);
@@ -2314,7 +2314,7 @@
 
 static void testQuadratic1x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(0, 0);
     path.quadTo(0, 0, 0, 0);
     path.lineTo(1, 0);
@@ -2341,7 +2341,7 @@
 
 static void testQuadratic2x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(0, 0);
     path.quadTo(0, 0, 0, 0);
     path.lineTo(3, 0);
@@ -2368,7 +2368,7 @@
 
 static void testQuadratic3x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(0, 0);
     path.quadTo(0, 0, 1, 0);
     path.lineTo(0, 2);
@@ -2395,7 +2395,7 @@
 
 static void testQuadratic4x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(0, 0);
     path.quadTo(0, 0, 1, 0);
     path.lineTo(0, 2);
@@ -2501,7 +2501,7 @@
 
 static void testQuadratic17x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(0, 0);
     path.quadTo(0, 0, 3, 1);
     path.lineTo(0, 2);
@@ -2892,7 +2892,7 @@
 
 static void testQuadratic59x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(0, 0);
     path.quadTo(0, 0, 0, 0);
     path.lineTo(2, 2);
@@ -2906,7 +2906,7 @@
 
 static void testQuadratic59(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kWinding);
+    path.setFillType(SkPath::kWinding_FillType);
     path.moveTo(0, 0);
     path.quadTo(0, 0, 0, 0);
     path.lineTo(2, 2);
@@ -2959,7 +2959,7 @@
 
 static void testQuadratic67x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(0, 0);
     path.quadTo(0, 0, 2, 1);
     path.lineTo(2, 2);
@@ -3000,7 +3000,7 @@
 
 static void testQuadratic70x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(0, 0);
     path.quadTo(1, 0, 0, 1);
     path.lineTo(1, 2);
@@ -3348,7 +3348,7 @@
 
 static void testQuadratic89x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(0, 0);
     path.quadTo(3, 1, 2, 2);
     path.lineTo(0, 3);
@@ -3362,7 +3362,7 @@
 
 static void testQuadratic90x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(0, 0);
     path.quadTo(3, 0, 2, 2);
     path.lineTo(1, 3);
@@ -3389,7 +3389,7 @@
 
 static void testQuadratic92x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(1, 0);
     path.quadTo(3, 0, 2, 2);
     path.lineTo(2, 2);
@@ -3492,7 +3492,7 @@
 
 static void testLine84x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 12, 60, 30, SkPathDirection::kCCW);
     path.addRect(10, 20, 40, 30, SkPathDirection::kCCW);
     path.addRect(0, 12, 12, 12, SkPathDirection::kCCW);
@@ -3814,7 +3814,7 @@
 
 static void skphealth_com76s(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kWinding);
+    path.setFillType(SkPath::kWinding_FillType);
     path.moveTo(708.099182f, 7.09919119f);
     path.lineTo(708.099182f, 7.09920025f);
     path.quadTo(704.000000f, 11.2010098f, 704.000000f, 17.0000000f);
@@ -3856,7 +3856,7 @@
 
 static void testRect2s(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kWinding);
+    path.setFillType(SkPath::kWinding_FillType);
     path.moveTo(0, 0);
     path.lineTo(60, 0);
     path.lineTo(60, 60);
@@ -3882,7 +3882,7 @@
 
 static void testTriangles3x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(1, 0);
     path.quadTo(0, 1, 3, 2);
     path.lineTo(1, 3);
@@ -3909,7 +3909,7 @@
 
 static void testTriangles4x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(0, 0);
     path.quadTo(2, 0, 0, 3);
     path.lineTo(2, 3);
@@ -3923,7 +3923,7 @@
 
 static void testQuad9(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(1, 0);
     path.quadTo(0, 1, 3, 2);
     path.lineTo(1, 3);
@@ -3976,7 +3976,7 @@
 
 static void testQuadralateral3(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(0, 0);
     path.lineTo(0, 0);
     path.lineTo(0, 0);
@@ -4047,7 +4047,7 @@
 
 static void testQuad14(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kWinding);
+    path.setFillType(SkPath::kWinding_FillType);
     path.moveTo(0, 0);
     path.quadTo(0, 0, 1, 1);
     path.lineTo(1, 2);
@@ -4349,7 +4349,7 @@
 
 static void testQuads37(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(1, 0);
     path.quadTo(2, 0, 1, 2);
     path.lineTo(2, 2);
@@ -4512,7 +4512,7 @@
 
 static void testQuads46x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(2, 0);
     path.quadTo(0, 1, 3, 2);
     path.lineTo(1, 3);
@@ -4643,7 +4643,7 @@
 
 static void testQuads61(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(0, 0);
     path.quadTo(0, 0, 2, 0);
     path.lineTo(1, 1);
@@ -4657,7 +4657,7 @@
 
 static void testQuadralateral10(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kWinding);
+    path.setFillType(SkPath::kWinding_FillType);
     path.moveTo(0, 0);
     path.lineTo(0, 0);
     path.lineTo(0, 0);
@@ -4673,7 +4673,7 @@
 
 static void testRect3(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 60, 60, SkPathDirection::kCCW);
     path.addRect(10, 30, 40, 30, SkPathDirection::kCCW);
     path.addRect(24, 6, 36, 36, SkPathDirection::kCCW);
@@ -4683,7 +4683,7 @@
 
 static void testRect4(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.addRect(0, 0, 30, 60, SkPathDirection::kCCW);
     path.addRect(10, 0, 40, 30, SkPathDirection::kCCW);
     path.addRect(20, 0, 30, 40, SkPathDirection::kCCW);
@@ -4897,7 +4897,7 @@
 
 static void fuzz994s_11(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType((SkPathFillType) 0);
+    path.setFillType((SkPath::FillType) 0);
 path.moveTo(SkBits2Float(0x41200000), SkBits2Float(0x42b40000));  // 10, 90
 path.lineTo(SkBits2Float(0x41200000), SkBits2Float(0x42b40000));  // 10, 90
 path.lineTo(SkBits2Float(0x41200000), SkBits2Float(0x41f00000));  // 10, 30
@@ -4963,7 +4963,7 @@
 
 static void fuzz994s_3414(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType((SkPathFillType) 0);
+    path.setFillType((SkPath::FillType) 0);
 path.moveTo(SkBits2Float(0x42c80000), SkBits2Float(0x42480000));  // 100, 50
 path.conicTo(SkBits2Float(0x42c80000), SkBits2Float(0x00000000), SkBits2Float(0x42480000), SkBits2Float(0x00000000), SkBits2Float(0x3f3504f3));  // 100, 0, 50, 0, 0.707107f
 path.conicTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x42480000), SkBits2Float(0x3f3504f3));  // 0, 0, 0, 50, 0.707107f
@@ -5000,7 +5000,7 @@
 
 static void fuzz_twister(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType((SkPathFillType) 0);
+    path.setFillType((SkPath::FillType) 0);
 path.moveTo(0, 600);
 path.lineTo(3.35544e+07f, 600);
 path.lineTo(3.35544e+07f, 0);
@@ -5061,7 +5061,7 @@
 
 static void fuzz763_4713_b(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType((SkPathFillType) 0);
+    path.setFillType((SkPath::FillType) 0);
 path.moveTo(SkBits2Float(0x42240000), SkBits2Float(0x42040000));
 path.quadTo(SkBits2Float(0x42240000), SkBits2Float(0x4211413d), SkBits2Float(0x421aa09e), SkBits2Float(0x421aa09e));
 path.quadTo(SkBits2Float(0x4211413d), SkBits2Float(0x42240000), SkBits2Float(0x42040000), SkBits2Float(0x42240000));
@@ -5553,7 +5553,7 @@
 
 static void tiger8_393(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType((SkPathFillType) 0);
+    path.setFillType((SkPath::FillType) 0);
 path.moveTo(SkBits2Float(0x42b93333), SkBits2Float(0x43d5a666));  // 92.6f, 427.3f
 path.cubicTo(SkBits2Float(0x42b93333), SkBits2Float(0x43d5a666), SkBits2Float(0x42b5cccd), SkBits2Float(0x43da1999), SkBits2Float(0x42b80000), SkBits2Float(0x43ddf333));  // 92.6f, 427.3f, 90.9f, 436.2f, 92, 443.9f
 path.cubicTo(SkBits2Float(0x42b80000), SkBits2Float(0x43ddf333), SkBits2Float(0x42b30000), SkBits2Float(0x43e17333), SkBits2Float(0x42cf999a), SkBits2Float(0x43e1b333));  // 92, 443.9f, 89.5f, 450.9f, 103.8f, 451.4f
@@ -5565,7 +5565,7 @@
 // triggers angle assert from distance field code
 static void carsvg_1(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType((SkPathFillType) 0);
+    path.setFillType((SkPath::FillType) 0);
 path.moveTo(SkBits2Float(0x4393d61e), SkBits2Float(0x43e768f9));  // 295.673f, 462.82f
 path.cubicTo(SkBits2Float(0x4396b50e), SkBits2Float(0x43e63c20), SkBits2Float(0x43998931), SkBits2Float(0x43e6c43e), SkBits2Float(0x439cb6a8), SkBits2Float(0x43e70ef9));  // 301.414f, 460.47f, 307.072f, 461.533f, 313.427f, 462.117f
 path.cubicTo(SkBits2Float(0x439dfc1e), SkBits2Float(0x43e72ce0), SkBits2Float(0x439a285c), SkBits2Float(0x43e717fb), SkBits2Float(0x4398e23c), SkBits2Float(0x43e7027c));  // 315.97f, 462.351f, 308.315f, 462.187f, 305.767f, 462.019f
@@ -5584,7 +5584,7 @@
 
 static void simplifyTest_1(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType((SkPathFillType) 0);
+    path.setFillType((SkPath::FillType) 0);
 path.moveTo(SkBits2Float(0x42bfefd4), SkBits2Float(0x42ef80ef));  // 95.9684f, 119.752f
 path.quadTo(SkBits2Float(0x42c26810), SkBits2Float(0x42e214b8), SkBits2Float(0x42cdcad5), SkBits2Float(0x42d82aa2));  // 97.2032f, 113.04f, 102.896f, 108.083f
 path.lineTo(SkBits2Float(0x42cdcb21), SkBits2Float(0x42d82a61));  // 102.897f, 108.083f
@@ -5629,7 +5629,7 @@
 
 static void joel_1(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType((SkPathFillType) 0);
+    path.setFillType((SkPath::FillType) 0);
 path.moveTo(144.859f, 285.172f);
 path.lineTo(144.859f, 285.172f);
 path.lineTo(144.859f, 285.172f);
@@ -5686,7 +5686,7 @@
 
 static void joel_2(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType((SkPathFillType) 0);
+    path.setFillType((SkPath::FillType) 0);
 
 path.moveTo(403.283f, 497.197f);
 path.cubicTo(403.424f, 497.244f, 391.111f, 495.556f, 391.111f, 495.556f);
@@ -5721,7 +5721,7 @@
 
 static void joel_3(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType((SkPathFillType) 0);
+    path.setFillType((SkPath::FillType) 0);
 path.moveTo(391.097f, 334.453f);
 path.lineTo(390.761f, 334.617f);
 path.lineTo(390.425f, 333.937f);
@@ -5784,7 +5784,7 @@
 
 static void joel_4(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType((SkPathFillType) 0);
+    path.setFillType((SkPath::FillType) 0);
 path.moveTo(SkBits2Float(0x4199d4fe), SkBits2Float(0x4265ac08));  // 19.229f, 57.418f
 path.cubicTo(SkBits2Float(0x419be979), SkBits2Float(0x426574bc), SkBits2Float(0x419c2b02), SkBits2Float(0x42653c6a), SkBits2Float(0x419af5c3), SkBits2Float(0x42645f3b));  // 19.489f, 57.364f, 19.521f, 57.309f, 19.37f, 57.093f
 path.cubicTo(SkBits2Float(0x419a1894), SkBits2Float(0x4263a3d7), SkBits2Float(0x4198cccd), SkBits2Float(0x4262f2b0), SkBits2Float(0x4197c290), SkBits2Float(0x4262374b));  // 19.262f, 56.91f, 19.1f, 56.737f, 18.97f, 56.554f
@@ -6538,7 +6538,7 @@
 
 static void joel_5(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType((SkPathFillType) 0);
+    path.setFillType((SkPath::FillType) 0);
 path.moveTo(SkBits2Float(0x43c5145a), SkBits2Float(0x43dc82f2));  // 394.159f, 441.023f
 path.lineTo(SkBits2Float(0x43c5145a), SkBits2Float(0x43dc82f2));  // 394.159f, 441.023f
 path.close();
@@ -7163,7 +7163,7 @@
 
 static void joel_12x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     make_joel_12(path);
     testSimplify(reporter, path, filename);
 }
@@ -7186,7 +7186,7 @@
 
 static void joel_13x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     make_joel_13(path);
     testSimplify(reporter, path, filename);
 }
@@ -7384,7 +7384,7 @@
 
 static void joel_14x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     make_joel_14(path);
 testSimplify(reporter, path, filename);
 }
@@ -7540,7 +7540,7 @@
 
 static void joel_15x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     make_joel_15(path);
 testSimplify(reporter, path, filename);
 }
@@ -7678,7 +7678,7 @@
 
 static void joel_16x(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     make_joel_16(path);
 testSimplify(reporter, path, filename);
 }
@@ -7698,7 +7698,7 @@
 
 static void grshapearc(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-path.setFillType(SkPathFillType::kWinding);
+path.setFillType(SkPath::kWinding_FillType);
 path.moveTo(25.0098f, 23.1973f);
 path.lineTo(25.5689f, 22.3682f);
 path.conicTo(26.1281f, 21.5392f, 26.9572f, 22.0984f, 0.707107f);
@@ -9273,7 +9273,7 @@
 
 static void bug8249(skiatest::Reporter* reporter, const char* filename) {
 SkPath path;
-path.setFillType(SkPathFillType::kWinding);
+path.setFillType(SkPath::kWinding_FillType);
 path.moveTo(SkBits2Float(0x43310000), SkBits2Float(0x43810000));  // 177, 258
 path.lineTo(SkBits2Float(0x43480000), SkBits2Float(0x43868000));  // 200, 269
 path.cubicTo(SkBits2Float(0x43480000), SkBits2Float(0x43b20000), SkBits2Float(0x437a0000), SkBits2Float(0x43cd0000), SkBits2Float(0x43c80000), SkBits2Float(0x43cd0000));  // 200, 356, 250, 410, 400, 410
@@ -9300,7 +9300,7 @@
 
 static void bug8290(skiatest::Reporter* reporter, const char* filename) {
     SkPath path;
-    path.setFillType(SkPathFillType::kEvenOdd);
+    path.setFillType(SkPath::kEvenOdd_FillType);
     path.moveTo(-1e+09, -1e+09);
     path.lineTo(1e+09, -1e+09);
     path.lineTo(1e+09, 1e+09);
