diff --git a/docs/examples/Bitmap_readPixels.cpp b/docs/examples/Bitmap_readPixels.cpp
index ac63ad0..98dd888 100644
--- a/docs/examples/Bitmap_readPixels.cpp
+++ b/docs/examples/Bitmap_readPixels.cpp
@@ -11,7 +11,7 @@
     SkPoint  gradPoints[] = { { 0, 0 }, { 256, 0 } };
     SkPaint paint;
     paint.setShader(SkGradientShader::MakeLinear(gradPoints, gradColors, nullptr,
-                    SK_ARRAY_COUNT(gradColors), SkShader::kClamp_TileMode));
+                    SK_ARRAY_COUNT(gradColors), SkTileMode::kClamp));
     SkBitmap bitmap;
     bitmap.allocPixels(srcInfo);
     SkCanvas srcCanvas(bitmap);
diff --git a/docs/examples/Canvas_drawOval.cpp b/docs/examples/Canvas_drawOval.cpp
index a98b44c..3e254ca 100644
--- a/docs/examples/Canvas_drawOval.cpp
+++ b/docs/examples/Canvas_drawOval.cpp
@@ -13,7 +13,7 @@
     SkPaint paint;
     paint.setAntiAlias(true);
     paint.setShader(SkGradientShader::MakeLinear(g1Points, g1Colors, pos, SK_ARRAY_COUNT(g1Colors),
-            SkShader::kClamp_TileMode));
+            SkTileMode::kClamp));
     canvas->drawOval(bounds , paint);
 }
 }  // END FIDDLE
diff --git a/docs/examples/Canvas_drawPatch.cpp b/docs/examples/Canvas_drawPatch.cpp
index 504baf5..b888fd4 100644
--- a/docs/examples/Canvas_drawPatch.cpp
+++ b/docs/examples/Canvas_drawPatch.cpp
@@ -14,8 +14,8 @@
                       /* { 1, 5 }, */ { 2, 4 }, { 1, 3 }, /* { 3, 1 } */ };
     SkColor colors[] = { 0xbfff0000, 0xbf0000ff, 0xbfff00ff, 0xbf00ffff };
     SkPoint texCoords[] = { { -30, -30 }, { 162, -30}, { 162, 162}, { -30, 162} };
-    paint.setShader(SkShader::MakeBitmapShader(source, SkShader::kClamp_TileMode,
-                                                       SkShader::kClamp_TileMode, nullptr));
+    paint.setShader(SkShader::MakeBitmapShader(source, SkTileMode::kClamp,
+                                                       SkTileMode::kClamp, nullptr));
     canvas->scale(15, 15);
     for (auto blend : { SkBlendMode::kSrcOver, SkBlendMode::kModulate, SkBlendMode::kXor } ) {
         canvas->drawPatch(cubics, colors, texCoords, blend, paint);
diff --git a/docs/examples/Canvas_drawPatch_2_b.cpp b/docs/examples/Canvas_drawPatch_2_b.cpp
index 3e77d7a..5863303 100644
--- a/docs/examples/Canvas_drawPatch_2_b.cpp
+++ b/docs/examples/Canvas_drawPatch_2_b.cpp
@@ -13,8 +13,7 @@
                       /* { 5, 7 }, */ { 4, 6 }, { 3, 7 },    { 1, 5 },
                       /* { 1, 5 }, */ { 2, 4 }, { 1, 3 }, /* { 3, 1 } */ };
     SkPoint texCoords[] = { { 0, 0 }, { 0, 62}, { 62, 62}, { 62, 0 } };
-    paint.setShader(SkShader::MakeBitmapShader(source, SkShader::kClamp_TileMode,
-                                                       SkShader::kClamp_TileMode, nullptr));
+    paint.setShader(SkShader::MakeBitmapShader(source, SkTileMode::kClamp, SkTileMode::kClamp));
     canvas->scale(30, 30);
     canvas->drawPatch(cubics, nullptr, texCoords, paint);
 }
diff --git a/docs/examples/Canvas_drawVertices_2.cpp b/docs/examples/Canvas_drawVertices_2.cpp
index 81d6583..9a5a841 100644
--- a/docs/examples/Canvas_drawVertices_2.cpp
+++ b/docs/examples/Canvas_drawVertices_2.cpp
@@ -8,8 +8,7 @@
     SkPoint points[] = { { 0, 0 }, { 250, 0 }, { 100, 100 }, { 0, 250 } };
     SkPoint texs[] = { { 0, 0 }, { 0, 250 }, { 250, 250 }, { 250, 0 } };
     SkColor colors[] = { SK_ColorRED, SK_ColorBLUE, SK_ColorYELLOW, SK_ColorCYAN };
-    paint.setShader(SkGradientShader::MakeLinear(points, colors, nullptr, 4,
-            SkShader::kClamp_TileMode));
+    paint.setShader(SkGradientShader::MakeLinear(points, colors, nullptr, 4, SkTileMode::kClamp));
     auto vertices = SkVertices::MakeCopy(SkVertices::kTriangleFan_VertexMode,
             SK_ARRAY_COUNT(points), points, texs, colors);
     canvas->drawVertices(vertices, SkBlendMode::kDarken, paint);
diff --git a/docs/examples/Clear.cpp b/docs/examples/Clear.cpp
index 62cdd56..45df306 100644
--- a/docs/examples/Clear.cpp
+++ b/docs/examples/Clear.cpp
@@ -10,7 +10,7 @@
     for (auto color : { SK_ColorRED, SK_ColorBLUE, SK_ColorGREEN } ) {
         SkColor colors[] = { color, SkColorSetA(color, 0) };
         paint.setShader(SkGradientShader::MakeRadial({ 64, 64}, 100,
-                colors, nullptr, SK_ARRAY_COUNT(colors), SkShader::kClamp_TileMode));
+                colors, nullptr, SK_ARRAY_COUNT(colors), SkTileMode::kClamp));
         canvas->drawCircle(64, 64, 100, paint);
         canvas->translate(64, 64);
     }
diff --git a/docs/examples/Darken.cpp b/docs/examples/Darken.cpp
index 2e2a258..be738c9 100644
--- a/docs/examples/Darken.cpp
+++ b/docs/examples/Darken.cpp
@@ -9,7 +9,7 @@
     SkPoint horz[] = { { 0, 0 }, { 256, 0 } };
     SkPaint paint;
     paint.setShader(SkGradientShader::MakeLinear(horz, colors, nullptr, SK_ARRAY_COUNT(colors),
-            SkShader::kClamp_TileMode));
+            SkTileMode::kClamp));
     paint.setBlendMode(SkBlendMode::kDarken);
     canvas->drawPaint(paint);
 }
diff --git a/docs/examples/Difference.cpp b/docs/examples/Difference.cpp
index 3b08cb0..8ad5dcc 100644
--- a/docs/examples/Difference.cpp
+++ b/docs/examples/Difference.cpp
@@ -13,7 +13,7 @@
     SkColor alphas[] = { SK_ColorBLACK, SK_ColorTRANSPARENT };
     SkPoint vert[] = { { 0, 0 }, { 0, 256 } };
     paint.setShader(SkGradientShader::MakeLinear(vert, alphas, nullptr, SK_ARRAY_COUNT(alphas),
-            SkShader::kClamp_TileMode));
+            SkTileMode::kClamp));
     canvas->drawPaint(paint);
     canvas->clipRect( { 30, 30, 226, 226 } );
     canvas->drawColor(0x80bb9977, SkBlendMode::kDifference);
diff --git a/docs/examples/Dither_b.cpp b/docs/examples/Dither_b.cpp
index 1313bc5..0300b3d 100644
--- a/docs/examples/Dither_b.cpp
+++ b/docs/examples/Dither_b.cpp
@@ -13,7 +13,7 @@
     SkPaint paint;
     paint.setShader(SkGradientShader::MakeLinear(
                      points, colors, nullptr, SK_ARRAY_COUNT(colors),
-                     SkShader::kClamp_TileMode, 0, nullptr));
+                     SkTileMode::kClamp));
     paint.setDither(true);
     c32.drawPaint(paint);
     canvas->scale(12, 12);
diff --git a/docs/examples/Dst_Atop.cpp b/docs/examples/Dst_Atop.cpp
index 0061e27..e6d82b1 100644
--- a/docs/examples/Dst_Atop.cpp
+++ b/docs/examples/Dst_Atop.cpp
@@ -8,13 +8,13 @@
     SkPoint horz[] = { { 0, 0 }, { 256, 0 } };
     SkPaint paint;
     paint.setShader(SkGradientShader::MakeLinear(horz, colors, nullptr, SK_ARRAY_COUNT(colors),
-            SkShader::kClamp_TileMode));
+            SkTileMode::kClamp));
     canvas->drawPaint(paint);
     paint.setBlendMode(SkBlendMode::kDstATop);
     SkColor alphas[] = { SK_ColorBLACK, SK_ColorTRANSPARENT };
     SkPoint vert[] = { { 0, 0 }, { 0, 256 } };
     paint.setShader(SkGradientShader::MakeLinear(vert, alphas, nullptr, SK_ARRAY_COUNT(alphas),
-            SkShader::kClamp_TileMode));
+            SkTileMode::kClamp));
     canvas->drawPaint(paint);
     canvas->clipRect( { 30, 30, 226, 226 } );
     canvas->drawColor(SkColorSetA(SK_ColorGREEN, 128), SkBlendMode::kSrcATop);
diff --git a/docs/examples/Dst_In.cpp b/docs/examples/Dst_In.cpp
index e6d9c83..c4f0abd 100644
--- a/docs/examples/Dst_In.cpp
+++ b/docs/examples/Dst_In.cpp
@@ -8,13 +8,13 @@
     SkPoint horz[] = { { 0, 0 }, { 256, 0 } };
     SkPaint paint;
     paint.setShader(SkGradientShader::MakeLinear(horz, colors, nullptr, SK_ARRAY_COUNT(colors),
-            SkShader::kClamp_TileMode));
+            SkTileMode::kClamp));
     canvas->drawPaint(paint);
     paint.setBlendMode(SkBlendMode::kDstIn);
     SkColor alphas[] = { SK_ColorBLACK, SK_ColorTRANSPARENT };
     SkPoint vert[] = { { 0, 0 }, { 0, 256 } };
     paint.setShader(SkGradientShader::MakeLinear(vert, alphas, nullptr, SK_ARRAY_COUNT(alphas),
-            SkShader::kClamp_TileMode));
+            SkTileMode::kClamp));
     canvas->drawPaint(paint);
     canvas->clipRect( { 30, 30, 226, 226 } );
     canvas->drawColor(SkColorSetA(SK_ColorGREEN, 128), SkBlendMode::kDstIn);
diff --git a/docs/examples/Dst_Out.cpp b/docs/examples/Dst_Out.cpp
index 4717281..7378f73 100644
--- a/docs/examples/Dst_Out.cpp
+++ b/docs/examples/Dst_Out.cpp
@@ -8,13 +8,13 @@
     SkPoint horz[] = { { 0, 0 }, { 256, 0 } };
     SkPaint paint;
     paint.setShader(SkGradientShader::MakeLinear(horz, colors, nullptr, SK_ARRAY_COUNT(colors),
-            SkShader::kClamp_TileMode));
+            SkTileMode::kClamp));
     canvas->drawPaint(paint);
     paint.setBlendMode(SkBlendMode::kDstIn);
     SkColor alphas[] = { SK_ColorBLACK, SK_ColorTRANSPARENT };
     SkPoint vert[] = { { 0, 0 }, { 0, 256 } };
     paint.setShader(SkGradientShader::MakeLinear(vert, alphas, nullptr, SK_ARRAY_COUNT(alphas),
-            SkShader::kClamp_TileMode));
+            SkTileMode::kClamp));
     canvas->drawPaint(paint);
     canvas->clipRect( { 30, 30, 226, 226 } );
     canvas->drawColor(SkColorSetA(SK_ColorGREEN, 128), SkBlendMode::kDstOut);
diff --git a/docs/examples/Dst_Over.cpp b/docs/examples/Dst_Over.cpp
index 36ea783..d8e7d86 100644
--- a/docs/examples/Dst_Over.cpp
+++ b/docs/examples/Dst_Over.cpp
@@ -8,13 +8,13 @@
     SkPoint horz[] = { { 0, 0 }, { 256, 0 } };
     SkPaint paint;
     paint.setShader(SkGradientShader::MakeLinear(horz, colors, nullptr, SK_ARRAY_COUNT(colors),
-            SkShader::kClamp_TileMode));
+            SkTileMode::kClamp));
     canvas->drawPaint(paint);
     paint.setBlendMode(SkBlendMode::kDstIn);
     SkColor alphas[] = { SK_ColorBLACK, SK_ColorTRANSPARENT };
     SkPoint vert[] = { { 0, 0 }, { 0, 256 } };
     paint.setShader(SkGradientShader::MakeLinear(vert, alphas, nullptr, SK_ARRAY_COUNT(alphas),
-            SkShader::kClamp_TileMode));
+            SkTileMode::kClamp));
     canvas->drawPaint(paint);
     canvas->clipRect( { 30, 30, 226, 226 } );
     canvas->drawColor(SkColorSetA(SK_ColorGREEN, 128), SkBlendMode::kDstOver);
diff --git a/docs/examples/Exclusion.cpp b/docs/examples/Exclusion.cpp
index 2e8b35c..30a7e4f 100644
--- a/docs/examples/Exclusion.cpp
+++ b/docs/examples/Exclusion.cpp
@@ -13,7 +13,7 @@
     SkColor alphas[] = { SK_ColorBLACK, SK_ColorTRANSPARENT };
     SkPoint vert[] = { { 0, 0 }, { 0, 256 } };
     paint.setShader(SkGradientShader::MakeLinear(vert, alphas, nullptr, SK_ARRAY_COUNT(alphas),
-            SkShader::kClamp_TileMode));
+            SkTileMode::kClamp));
     canvas->drawPaint(paint);
     canvas->clipRect( { 30, 30, 226, 226 } );
     canvas->drawColor(0x80bb9977, SkBlendMode::kExclusion);
diff --git a/docs/examples/Hard_Light.cpp b/docs/examples/Hard_Light.cpp
index 13f981c..eb6f307 100644
--- a/docs/examples/Hard_Light.cpp
+++ b/docs/examples/Hard_Light.cpp
@@ -9,7 +9,7 @@
     SkPaint paint;
     paint.setBlendMode(SkBlendMode::kHardLight);
     paint.setShader(SkGradientShader::MakeRadial({ 128, 128}, 100, colors,
-         nullptr, SK_ARRAY_COUNT(colors), SkShader::kClamp_TileMode));
+         nullptr, SK_ARRAY_COUNT(colors), SkTileMode::kClamp));
     canvas->clipRect({0, 128, 256, 256});
     canvas->drawPaint(paint);
 }
diff --git a/docs/examples/ImageInfo_MakeS32.cpp b/docs/examples/ImageInfo_MakeS32.cpp
index 978b1a1..1033014 100644
--- a/docs/examples/ImageInfo_MakeS32.cpp
+++ b/docs/examples/ImageInfo_MakeS32.cpp
@@ -11,7 +11,7 @@
     SkPoint  gradPoints[] = { { 0, 0 }, { width, 0 } };
     SkPaint gradPaint;
     gradPaint.setShader(SkGradientShader::MakeLinear(gradPoints, gradColors, nullptr,
-                    SK_ARRAY_COUNT(gradColors), SkShader::kClamp_TileMode));
+                    SK_ARRAY_COUNT(gradColors), SkTileMode::kClamp));
     SkBitmap bitmap;
     bitmap.allocPixels(SkImageInfo::MakeN32(width, height, kPremul_SkAlphaType));
     SkCanvas offScreen(bitmap);
diff --git a/docs/examples/Image_makeShader.cpp b/docs/examples/Image_makeShader.cpp
index 383c871..0f4611d 100644
--- a/docs/examples/Image_makeShader.cpp
+++ b/docs/examples/Image_makeShader.cpp
@@ -7,8 +7,7 @@
     SkMatrix matrix;
     matrix.setRotate(45);
     SkPaint paint;
-    paint.setShader(image->makeShader(SkShader::kRepeat_TileMode, SkShader::kMirror_TileMode,
-                                      &matrix));
+    paint.setShader(image->makeShader(SkTileMode::kRepeat, SkTileMode::kMirror, &matrix));
     canvas->drawPaint(paint);
 }
 }  // END FIDDLE
diff --git a/docs/examples/Lighten.cpp b/docs/examples/Lighten.cpp
index cebe7f6..f02a2ea 100644
--- a/docs/examples/Lighten.cpp
+++ b/docs/examples/Lighten.cpp
@@ -9,7 +9,7 @@
     SkPoint horz[] = { { 0, 0 }, { 256, 0 } };
     SkPaint paint;
     paint.setShader(SkGradientShader::MakeLinear(horz, colors, nullptr, SK_ARRAY_COUNT(colors),
-            SkShader::kClamp_TileMode));
+            SkTileMode::kClamp));
     paint.setBlendMode(SkBlendMode::kLighten);
     canvas->drawPaint(paint);
 }
diff --git a/docs/examples/Modulate.cpp b/docs/examples/Modulate.cpp
index ba7807c..7290577 100644
--- a/docs/examples/Modulate.cpp
+++ b/docs/examples/Modulate.cpp
@@ -9,7 +9,7 @@
         const SkPoint horz[] = { { 0, 0 }, { 128, 0 } };
         SkPaint paint;
         paint.setShader(SkGradientShader::MakeLinear(horz, colors, nullptr, SK_ARRAY_COUNT(colors),
-                SkShader::kClamp_TileMode));
+                SkTileMode::kClamp));
         paint.setBlendMode(mode);
         canvas->translate(dx, dy);
         canvas->drawRect({0, 0, 128, 128}, paint);
diff --git a/docs/examples/Multiply.cpp b/docs/examples/Multiply.cpp
index 07d5f3b..5a9a1b6 100644
--- a/docs/examples/Multiply.cpp
+++ b/docs/examples/Multiply.cpp
@@ -13,7 +13,7 @@
     SkColor alphas[] = { SK_ColorBLACK, SK_ColorTRANSPARENT };
     SkPoint vert[] = { { 0, 0 }, { 0, 256 } };
     paint.setShader(SkGradientShader::MakeLinear(vert, alphas, nullptr, SK_ARRAY_COUNT(alphas),
-            SkShader::kClamp_TileMode));
+            SkTileMode::kClamp));
     canvas->drawPaint(paint);
     canvas->clipRect( { 30, 30, 226, 226 } );
     canvas->drawColor(0x80bb9977, SkBlendMode::kMultiply);
diff --git a/docs/examples/Overlay.cpp b/docs/examples/Overlay.cpp
index ec74ffe..95c77ac 100644
--- a/docs/examples/Overlay.cpp
+++ b/docs/examples/Overlay.cpp
@@ -8,13 +8,13 @@
     SkPoint horz[] = { { 0, 0 }, { 256, 0 } };
     SkPaint paint;
     paint.setShader(SkGradientShader::MakeLinear(horz, colors, nullptr, SK_ARRAY_COUNT(colors),
-            SkShader::kClamp_TileMode));
+            SkTileMode::kClamp));
     canvas->drawPaint(paint);
     paint.setBlendMode(SkBlendMode::kDstATop);
     SkColor alphas[] = { SK_ColorBLACK, SK_ColorTRANSPARENT };
     SkPoint vert[] = { { 0, 0 }, { 0, 256 } };
     paint.setShader(SkGradientShader::MakeLinear(vert, alphas, nullptr, SK_ARRAY_COUNT(alphas),
-            SkShader::kClamp_TileMode));
+            SkTileMode::kClamp));
     canvas->drawPaint(paint);
     canvas->clipRect( { 30, 30, 226, 226 } );
     canvas->drawColor(SkColorSetA(SK_ColorGREEN, 128), SkBlendMode::kOverlay);
diff --git a/docs/examples/Pixmap_readPixels.cpp b/docs/examples/Pixmap_readPixels.cpp
index 6717187..23c7c5e 100644
--- a/docs/examples/Pixmap_readPixels.cpp
+++ b/docs/examples/Pixmap_readPixels.cpp
@@ -14,7 +14,7 @@
     SkPoint  gradPoints[] = { { 0, 0 }, { 256, 0 } };
     SkPaint paint;
     paint.setShader(SkGradientShader::MakeLinear(gradPoints, gradColors, nullptr,
-                    SK_ARRAY_COUNT(gradColors), SkShader::kClamp_TileMode));
+                    SK_ARRAY_COUNT(gradColors), SkTileMode::kClamp));
     SkBitmap bitmap;
     bitmap.installPixels(srcPixmap);
     SkCanvas srcCanvas(bitmap);
diff --git a/docs/examples/Plus.cpp b/docs/examples/Plus.cpp
index c47c94f..9289c80 100644
--- a/docs/examples/Plus.cpp
+++ b/docs/examples/Plus.cpp
@@ -11,7 +11,7 @@
         SkColor colors[] = { color, SkColorSetA(color, 192), SkColorSetA(color, 128),
                              SkColorSetA(color, 0) };
         paint.setShader(SkGradientShader::MakeRadial({ 64, 64}, 100,
-                colors, nullptr, SK_ARRAY_COUNT(colors), SkShader::kClamp_TileMode));
+                colors, nullptr, SK_ARRAY_COUNT(colors), SkTileMode::kClamp));
         canvas->drawCircle(64, 64, 100, paint);
         canvas->translate(64, 64);
     }
diff --git a/docs/examples/Screen.cpp b/docs/examples/Screen.cpp
index ca21fad..edbb97d 100644
--- a/docs/examples/Screen.cpp
+++ b/docs/examples/Screen.cpp
@@ -8,13 +8,13 @@
     SkPoint horz[] = { { 0, 0 }, { 256, 0 } };
     SkPaint paint;
     paint.setShader(SkGradientShader::MakeLinear(horz, colors, nullptr, SK_ARRAY_COUNT(colors),
-            SkShader::kClamp_TileMode));
+            SkTileMode::kClamp));
     canvas->drawPaint(paint);
     paint.setBlendMode(SkBlendMode::kDstATop);
     SkColor alphas[] = { SK_ColorBLACK, SK_ColorTRANSPARENT };
     SkPoint vert[] = { { 0, 0 }, { 0, 256 } };
     paint.setShader(SkGradientShader::MakeLinear(vert, alphas, nullptr, SK_ARRAY_COUNT(alphas),
-            SkShader::kClamp_TileMode));
+            SkTileMode::kClamp));
     canvas->drawPaint(paint);
     canvas->clipRect( { 30, 30, 226, 226 } );
     canvas->drawColor(SkColorSetA(SK_ColorGREEN, 128), SkBlendMode::kScreen);
diff --git a/docs/examples/Shader_Methods_a.cpp b/docs/examples/Shader_Methods_a.cpp
index c4a07ea..70ee642 100644
--- a/docs/examples/Shader_Methods_a.cpp
+++ b/docs/examples/Shader_Methods_a.cpp
@@ -9,7 +9,7 @@
    SkScalar radius = 50;
    const SkColor colors[] = { 0xFFFFFFFF, 0xFF000000 };
    paint.setShader(SkGradientShader::MakeRadial(center, radius, colors,
-        nullptr, SK_ARRAY_COUNT(colors), SkShader::kClamp_TileMode));
+        nullptr, SK_ARRAY_COUNT(colors), SkTileMode::kClamp));
    for (SkScalar a : { 0.3f, 0.6f, 1.0f } ) {
        paint.setAlpha((int) (a * 255));
        canvas->drawCircle(center.fX, center.fY, radius, paint);
diff --git a/docs/examples/Shader_Methods_b.cpp b/docs/examples/Shader_Methods_b.cpp
index 9500078..98885aa 100644
--- a/docs/examples/Shader_Methods_b.cpp
+++ b/docs/examples/Shader_Methods_b.cpp
@@ -9,8 +9,7 @@
    bitmap.setInfo(SkImageInfo::MakeA8(5, 1), 5);  // bitmap only contains alpha
    uint8_t pixels[5] = { 0x22, 0x55, 0x88, 0xBB, 0xFF };
    bitmap.setPixels(pixels);
-   paint.setShader(SkShader::MakeBitmapShader(bitmap,
-            SkShader::kMirror_TileMode, SkShader::kMirror_TileMode));
+   paint.setShader(SkShader::MakeBitmapShader(bitmap, SkTileMode::kMirror, SkTileMode::kMirror));
    for (SkColor c : { SK_ColorRED, SK_ColorBLUE, SK_ColorGREEN } ) {
        paint.setColor(c);  // all components in color affect shader
        canvas->drawCircle(50, 50, 50, paint);
diff --git a/docs/examples/Soft_Light.cpp b/docs/examples/Soft_Light.cpp
index a73de75..a97b75a 100644
--- a/docs/examples/Soft_Light.cpp
+++ b/docs/examples/Soft_Light.cpp
@@ -8,7 +8,7 @@
     SkPaint paint;
     paint.setBlendMode(SkBlendMode::kSoftLight);
     paint.setShader(SkGradientShader::MakeRadial({ 128, 128}, 100, colors,
-         nullptr, SK_ARRAY_COUNT(colors), SkShader::kClamp_TileMode));
+         nullptr, SK_ARRAY_COUNT(colors), SkTileMode::kClamp));
     canvas->drawImage(image, 0, 0);
     canvas->drawCircle(128, 128, 100, paint);
 }
diff --git a/docs/examples/Src_Atop.cpp b/docs/examples/Src_Atop.cpp
index 6fd7582..4560f95 100644
--- a/docs/examples/Src_Atop.cpp
+++ b/docs/examples/Src_Atop.cpp
@@ -8,13 +8,13 @@
     SkPoint horz[] = { { 0, 0 }, { 256, 0 } };
     SkPaint paint;
     paint.setShader(SkGradientShader::MakeLinear(horz, colors, nullptr, SK_ARRAY_COUNT(colors),
-            SkShader::kClamp_TileMode));
+            SkTileMode::kClamp));
     canvas->drawPaint(paint);
     paint.setBlendMode(SkBlendMode::kDstIn);
     SkColor alphas[] = { SK_ColorBLACK, SK_ColorTRANSPARENT };
     SkPoint vert[] = { { 0, 0 }, { 0, 256 } };
     paint.setShader(SkGradientShader::MakeLinear(vert, alphas, nullptr, SK_ARRAY_COUNT(alphas),
-            SkShader::kClamp_TileMode));
+            SkTileMode::kClamp));
     canvas->drawPaint(paint);
     canvas->clipRect( { 30, 30, 226, 226 } );
     canvas->drawColor(SkColorSetA(SK_ColorGREEN, 128), SkBlendMode::kSrcATop);
diff --git a/docs/examples/Src_In.cpp b/docs/examples/Src_In.cpp
index 48ecd4f..2dbbe79 100644
--- a/docs/examples/Src_In.cpp
+++ b/docs/examples/Src_In.cpp
@@ -8,13 +8,13 @@
     SkPoint horz[] = { { 0, 0 }, { 256, 0 } };
     SkPaint paint;
     paint.setShader(SkGradientShader::MakeLinear(horz, colors, nullptr, SK_ARRAY_COUNT(colors),
-            SkShader::kClamp_TileMode));
+            SkTileMode::kClamp));
     canvas->drawPaint(paint);
     paint.setBlendMode(SkBlendMode::kDstIn);
     SkColor alphas[] = { SK_ColorBLACK, SK_ColorTRANSPARENT };
     SkPoint vert[] = { { 0, 0 }, { 0, 256 } };
     paint.setShader(SkGradientShader::MakeLinear(vert, alphas, nullptr, SK_ARRAY_COUNT(alphas),
-            SkShader::kClamp_TileMode));
+            SkTileMode::kClamp));
     canvas->drawPaint(paint);
     canvas->clipRect( { 30, 30, 226, 226 } );
     canvas->drawColor(SkColorSetA(SK_ColorGREEN, 128), SkBlendMode::kSrcIn);
diff --git a/docs/examples/Src_Out.cpp b/docs/examples/Src_Out.cpp
index 69833e2..f7cdb0a 100644
--- a/docs/examples/Src_Out.cpp
+++ b/docs/examples/Src_Out.cpp
@@ -8,13 +8,13 @@
     SkPoint horz[] = { { 0, 0 }, { 256, 0 } };
     SkPaint paint;
     paint.setShader(SkGradientShader::MakeLinear(horz, colors, nullptr, SK_ARRAY_COUNT(colors),
-            SkShader::kClamp_TileMode));
+            SkTileMode::kClamp));
     canvas->drawPaint(paint);
     paint.setBlendMode(SkBlendMode::kDstIn);
     SkColor alphas[] = { SK_ColorBLACK, SK_ColorTRANSPARENT };
     SkPoint vert[] = { { 0, 0 }, { 0, 256 } };
     paint.setShader(SkGradientShader::MakeLinear(vert, alphas, nullptr, SK_ARRAY_COUNT(alphas),
-            SkShader::kClamp_TileMode));
+            SkTileMode::kClamp));
     canvas->drawPaint(paint);
     canvas->clipRect( { 30, 30, 226, 226 } );
     canvas->drawColor(SkColorSetA(SK_ColorGREEN, 128), SkBlendMode::kSrcOut);
diff --git a/docs/examples/Src_Over.cpp b/docs/examples/Src_Over.cpp
index 1381150..e0c9fb3 100644
--- a/docs/examples/Src_Over.cpp
+++ b/docs/examples/Src_Over.cpp
@@ -8,13 +8,13 @@
     SkPoint horz[] = { { 0, 0 }, { 256, 0 } };
     SkPaint paint;
     paint.setShader(SkGradientShader::MakeLinear(horz, colors, nullptr, SK_ARRAY_COUNT(colors),
-            SkShader::kClamp_TileMode));
+            SkTileMode::kClamp));
     canvas->drawPaint(paint);
     paint.setBlendMode(SkBlendMode::kDstIn);
     SkColor alphas[] = { SK_ColorBLACK, SK_ColorTRANSPARENT };
     SkPoint vert[] = { { 0, 0 }, { 0, 256 } };
     paint.setShader(SkGradientShader::MakeLinear(vert, alphas, nullptr, SK_ARRAY_COUNT(alphas),
-            SkShader::kClamp_TileMode));
+            SkTileMode::kClamp));
     canvas->drawPaint(paint);
     canvas->clipRect( { 30, 30, 226, 226 } );
     canvas->drawColor(SkColorSetA(SK_ColorGREEN, 128), SkBlendMode::kSrcOver);
diff --git a/docs/examples/Xor.cpp b/docs/examples/Xor.cpp
index 8b2a49e..9a9af87 100644
--- a/docs/examples/Xor.cpp
+++ b/docs/examples/Xor.cpp
@@ -10,7 +10,7 @@
         SkColor colors[] = { color, SkColorSetA(color, 192), SkColorSetA(color, 128),
                              SkColorSetA(color, 0) };
         paint.setShader(SkGradientShader::MakeRadial({ 64, 64}, 100,
-                colors, nullptr, SK_ARRAY_COUNT(colors), SkShader::kClamp_TileMode));
+                colors, nullptr, SK_ARRAY_COUNT(colors), SkTileMode::kClamp));
         canvas->drawCircle(64, 64, 100, paint);
         canvas->translate(64, 64);
     }
