hide the SkPaint::Align enum entirely

Bug: skia:2664
Change-Id: I080b015dbcb3a3cd73bb6847f3243a996d5f7b7d
Reviewed-on: https://skia-review.googlesource.com/c/166282
Commit-Queue: Mike Reed <reed@google.com>
Reviewed-by: Florin Malita <fmalita@chromium.org>
diff --git a/gm/aaxfermodes.cpp b/gm/aaxfermodes.cpp
index 19add75..1db4c1c 100644
--- a/gm/aaxfermodes.cpp
+++ b/gm/aaxfermodes.cpp
@@ -110,11 +110,11 @@
                 SkTextUtils::DrawString(canvas, "Src Unknown",
                         kLabelSpacing + kShapeTypeSpacing * 1.5f + kShapeSpacing / 2,
                         kSubtitleSpacing / 2 + fLabelPaint.getTextSize() / 3, fLabelPaint,
-                                        SkPaint::kCenter_Align);
+                                        SkTextUtils::kCenter_Align);
                 SkTextUtils::DrawString(canvas, "Src Opaque",
                         kLabelSpacing + kShapeTypeSpacing * 1.5f + kShapeSpacing / 2 +
                         kPaintSpacing, kSubtitleSpacing / 2 + fLabelPaint.getTextSize() / 3,
-                        fLabelPaint, SkPaint::kCenter_Align);
+                        fLabelPaint, SkTextUtils::kCenter_Align);
             }
 
             canvas->translate(0, kSubtitleSpacing + kShapeSpacing/2);
@@ -183,11 +183,11 @@
         SkTextUtils::DrawString(canvas, "Porter Duff",
                                 kLabelSpacing + 4 * kShapeTypeSpacing,
                                 kTitleSpacing / 2 + titlePaint.getTextSize() / 3, titlePaint,
-                                SkPaint::kCenter_Align);
+                                SkTextUtils::kCenter_Align);
         SkTextUtils::DrawString(canvas, "Advanced",
                                 kXfermodeTypeSpacing + kLabelSpacing + 4 * kShapeTypeSpacing,
                                 kTitleSpacing / 2 + titlePaint.getTextSize() / 3, titlePaint,
-                                SkPaint::kCenter_Align);
+                                SkTextUtils::kCenter_Align);
 
         draw_pass(canvas, kShape_Pass);
         canvas->restore();
@@ -197,7 +197,7 @@
         const char* modeName = SkBlendMode_Name(mode);
         SkTextUtils::DrawString(canvas, modeName, kLabelSpacing - kShapeSize / 4,
                                 fLabelPaint.getTextSize() / 4, fLabelPaint,
-                                SkPaint::kRight_Align);
+                                SkTextUtils::kRight_Align);
     }
 
     void setupShapePaint(SkCanvas* canvas, SkColor color, SkBlendMode mode, SkPaint* paint) {
diff --git a/gm/androidblendmodes.cpp b/gm/androidblendmodes.cpp
index db6a65f..359b78e 100644
--- a/gm/androidblendmodes.cpp
+++ b/gm/androidblendmodes.cpp
@@ -97,7 +97,7 @@
             SkTextUtils::DrawString(canvas, SkBlendMode_Name(mode),
                                xOffset + kBitmapSize/2.0f,
                                yOffset + kBitmapSize,
-                               textPaint, SkPaint::kCenter_Align);
+                               textPaint, SkTextUtils::kCenter_Align);
 
             xOffset += 256;
             if (xOffset >= 1024) {
diff --git a/gm/coloremoji_blendmodes.cpp b/gm/coloremoji_blendmodes.cpp
index fb9e29e..e0f396d 100644
--- a/gm/coloremoji_blendmodes.cpp
+++ b/gm/coloremoji_blendmodes.cpp
@@ -155,7 +155,7 @@
 #if 1
             const char* label = SkBlendMode_Name(gModes[i]);
             SkTextUtils::DrawString(canvas, label, x + w/2, y - labelP.getTextSize()/2, labelP,
-                                    SkPaint::kCenter_Align);
+                                    SkTextUtils::kCenter_Align);
 #endif
             x += w + SkIntToScalar(10);
             if ((i % W) == W - 1) {
diff --git a/gm/dropshadowimagefilter.cpp b/gm/dropshadowimagefilter.cpp
index 253e82f..f1dfb6d 100644
--- a/gm/dropshadowimagefilter.cpp
+++ b/gm/dropshadowimagefilter.cpp
@@ -45,7 +45,7 @@
     canvas->save();
     canvas->clipRect(r);
     SkTextUtils::DrawString(canvas, "Text", r.centerX(), r.centerY(), paint,
-                            SkPaint::kCenter_Align);
+                            SkTextUtils::kCenter_Align);
     canvas->restore();
 }
 
diff --git a/gm/imagefiltersbase.cpp b/gm/imagefiltersbase.cpp
index 4cad5c1..83b62f4 100644
--- a/gm/imagefiltersbase.cpp
+++ b/gm/imagefiltersbase.cpp
@@ -131,7 +131,7 @@
     sk_tool_utils::set_portable_typeface(&paint);
     paint.setTextSize(r.height()/2);
     SkTextUtils::DrawString(canvas, "Text", r.centerX(), r.centerY(), paint,
-                            SkPaint::kCenter_Align);
+                            SkTextUtils::kCenter_Align);
 }
 
 static void draw_bitmap(SkCanvas* canvas, const SkRect& r, sk_sp<SkImageFilter> imf) {
diff --git a/gm/imagefilterscropped.cpp b/gm/imagefilterscropped.cpp
index 4a5878c..225e881 100644
--- a/gm/imagefilterscropped.cpp
+++ b/gm/imagefilterscropped.cpp
@@ -47,7 +47,7 @@
     sk_tool_utils::set_portable_typeface(&paint);
     paint.setTextSize(r.height()/2);
     SkTextUtils::DrawString(canvas, "Text", r.centerX(), r.centerY(), paint,
-                            SkPaint::kCenter_Align);
+                            SkTextUtils::kCenter_Align);
 }
 
 static void draw_bitmap(SkCanvas* canvas, const SkRect& r, sk_sp<SkImageFilter> imf) {
diff --git a/gm/poly2poly.cpp b/gm/poly2poly.cpp
index 902609e..f89e57a 100644
--- a/gm/poly2poly.cpp
+++ b/gm/poly2poly.cpp
@@ -221,7 +221,7 @@
         SkScalar y = D/2 - (fm.fAscent + fm.fDescent)/2;
         uint16_t glyphID = 3; // X
         SkTextUtils::DrawText(canvas, &glyphID, sizeof(glyphID), x, y, *paint,
-                              SkPaint::kCenter_Align);
+                              SkTextUtils::kCenter_Align);
         canvas->restore();
     }
 
diff --git a/gm/shadermaskfilter.cpp b/gm/shadermaskfilter.cpp
index f306018..a46346c 100644
--- a/gm/shadermaskfilter.cpp
+++ b/gm/shadermaskfilter.cpp
@@ -140,7 +140,7 @@
     canvas->save();
     for (int i = 0; i < 5; ++i) {
         SkTextUtils::DrawString(canvas, gCoverageName[i], r.width()*0.5f, -10, labelP,
-                                       SkPaint::kCenter_Align);
+                                       SkTextUtils::kCenter_Align);
 
         SkCoverageMode cmode = static_cast<SkCoverageMode>(i);
         canvas->save();
diff --git a/gm/surface.cpp b/gm/surface.cpp
index dad3814..80c23c8 100644
--- a/gm/surface.cpp
+++ b/gm/surface.cpp
@@ -46,7 +46,7 @@
     paint.setColor(SK_ColorWHITE);
     paint.setTextSize(32);
     sk_tool_utils::set_portable_typeface(&paint);
-    SkTextUtils::DrawString(canvas, label, W / 2, H * 3 / 4, paint, SkPaint::kCenter_Align);
+    SkTextUtils::DrawString(canvas, label, W / 2, H * 3 / 4, paint, SkTextUtils::kCenter_Align);
 }
 
 class SurfacePropsGM : public skiagm::GM {
diff --git a/gm/text_scale_skew.cpp b/gm/text_scale_skew.cpp
index b48a8d5..992bc6e 100644
--- a/gm/text_scale_skew.cpp
+++ b/gm/text_scale_skew.cpp
@@ -20,7 +20,7 @@
         float x = 50.0f;
         for (float skew : { -0.5f, 0.0f, 0.5f }) {
             p.setTextSkewX(skew);
-            SkTextUtils::DrawString(canvas, "Skia", x, y, p, SkPaint::kCenter_Align);
+            SkTextUtils::DrawString(canvas, "Skia", x, y, p, SkTextUtils::kCenter_Align);
             x += 78.0f;
         }
     }
diff --git a/gm/tilemodes.cpp b/gm/tilemodes.cpp
index 5c48d07..5f02d79 100644
--- a/gm/tilemodes.cpp
+++ b/gm/tilemodes.cpp
@@ -105,7 +105,8 @@
                 p.setDither(true);
                 str.printf("[%s,%s]", gModeNames[kx], gModeNames[ky]);
 
-                SkTextUtils::DrawString(canvas, str, x + r.width()/2, y, p, SkPaint::kCenter_Align);
+                SkTextUtils::DrawString(canvas, str, x + r.width()/2, y, p,
+                                        SkTextUtils::kCenter_Align);
 
                 x += r.width() * 4 / 3;
             }
@@ -226,7 +227,7 @@
 
         for (size_t kx = 0; kx < SK_ARRAY_COUNT(gModes); kx++) {
             SkString str(gModeNames[kx]);
-            SkTextUtils::DrawString(canvas, str, x + r.width()/2, y, p, SkPaint::kCenter_Align);
+            SkTextUtils::DrawString(canvas, str, x + r.width()/2, y, p, SkTextUtils::kCenter_Align);
             x += r.width() * 4 / 3;
         }
 
@@ -236,7 +237,7 @@
             x = SkIntToScalar(16) + w;
 
             SkString str(gModeNames[ky]);
-            SkTextUtils::DrawString(canvas, str, x, y + h/2, p, SkPaint::kRight_Align);
+            SkTextUtils::DrawString(canvas, str, x, y + h/2, p, SkTextUtils::kRight_Align);
 
             x += SkIntToScalar(50);
             for (size_t kx = 0; kx < SK_ARRAY_COUNT(gModes); kx++) {
diff --git a/gm/tilemodes_scaled.cpp b/gm/tilemodes_scaled.cpp
index 4a4e494..093cb34 100644
--- a/gm/tilemodes_scaled.cpp
+++ b/gm/tilemodes_scaled.cpp
@@ -108,7 +108,7 @@
                 str.printf("[%s,%s]", gModeNames[kx], gModeNames[ky]);
 
                 SkTextUtils::DrawString(canvas, str, scale*(x + r.width()/2), y, p,
-                                        SkPaint::kCenter_Align);
+                                        SkTextUtils::kCenter_Align);
 
                 x += r.width() * 4 / 3;
             }
@@ -228,7 +228,7 @@
 
         for (size_t kx = 0; kx < SK_ARRAY_COUNT(gModes); kx++) {
             SkString str(gModeNames[kx]);
-            SkTextUtils::DrawString(canvas, str, x + r.width()/2, y, p, SkPaint::kCenter_Align);
+            SkTextUtils::DrawString(canvas, str, x + r.width()/2, y, p, SkTextUtils::kCenter_Align);
             x += r.width() * 4 / 3;
         }
 
@@ -238,7 +238,7 @@
             x = SkIntToScalar(16) + w;
 
             SkString str(gModeNames[ky]);
-            SkTextUtils::DrawString(canvas, str, x, y + h/2, p, SkPaint::kRight_Align);
+            SkTextUtils::DrawString(canvas, str, x, y + h/2, p, SkTextUtils::kRight_Align);
 
             x += SkIntToScalar(50);
             for (size_t kx = 0; kx < SK_ARRAY_COUNT(gModes); kx++) {
diff --git a/gm/wacky_yuv_formats.cpp b/gm/wacky_yuv_formats.cpp
index 8d7bec5..d1c65f9 100644
--- a/gm/wacky_yuv_formats.cpp
+++ b/gm/wacky_yuv_formats.cpp
@@ -632,14 +632,14 @@
     textPaint.measureText(colLabel.c_str(), colLabel.size(), &textRect);
     int y = textRect.height();
 
-    SkTextUtils::DrawString(canvas, colLabel, x, y, textPaint, SkPaint::kCenter_Align);
+    SkTextUtils::DrawString(canvas, colLabel, x, y, textPaint, SkTextUtils::kCenter_Align);
 
     colLabel.printf("%s", opaque ? "Opaque" : "Transparent");
 
     textPaint.measureText(colLabel.c_str(), colLabel.size(), &textRect);
     y += textRect.height();
 
-    SkTextUtils::DrawString(canvas, colLabel, x, y, textPaint, SkPaint::kCenter_Align);
+    SkTextUtils::DrawString(canvas, colLabel, x, y, textPaint, SkTextUtils::kCenter_Align);
 }
 
 static void draw_row_label(SkCanvas* canvas, int y, int yuvFormat) {
diff --git a/gm/windowrectangles.cpp b/gm/windowrectangles.cpp
index 62dd51c..f539367 100644
--- a/gm/windowrectangles.cpp
+++ b/gm/windowrectangles.cpp
@@ -277,7 +277,7 @@
 
     SkTextUtils::DrawString(canvas, errorMsg, SkIntToScalar((kCoverRect.left() + kCoverRect.right())/2),
                      SkIntToScalar((kCoverRect.top() + kCoverRect.bottom())/2 - 10), paint,
-                            SkPaint::kCenter_Align);
+                            SkTextUtils::kCenter_Align);
 }
 
 DEF_GM( return new WindowRectanglesMaskGM(); )
diff --git a/gm/xfermodes.cpp b/gm/xfermodes.cpp
index 4f1b7aa..c8b1824 100644
--- a/gm/xfermodes.cpp
+++ b/gm/xfermodes.cpp
@@ -259,7 +259,7 @@
 #if 1
                 const char* label = SkBlendMode_Name(gModes[i].fMode);
                 SkTextUtils::DrawString(canvas, label, x + w/2, y - labelP.getTextSize()/2,
-                                        labelP, SkPaint::kCenter_Align);
+                                        labelP, SkTextUtils::kCenter_Align);
 #endif
                 x += w + SkIntToScalar(10);
                 if ((i % W) == W - 1) {
diff --git a/gm/xfermodes2.cpp b/gm/xfermodes2.cpp
index ebec00b..21e6f2e 100644
--- a/gm/xfermodes2.cpp
+++ b/gm/xfermodes2.cpp
@@ -74,7 +74,7 @@
 #if 1
             SkTextUtils::DrawString(canvas, SkBlendMode_Name(mode),
                                     x + w/2, y - labelP.getTextSize()/2, labelP,
-                                    SkPaint::kCenter_Align);
+                                    SkTextUtils::kCenter_Align);
 #endif
             x += w + SkIntToScalar(10);
             if ((m % W) == W - 1) {
diff --git a/include/core/SkPaint.h b/include/core/SkPaint.h
index f33604c..971113d 100644
--- a/include/core/SkPaint.h
+++ b/include/core/SkPaint.h
@@ -50,6 +50,8 @@
 class SkTextBlobRunIterator;
 class SkTypeface;
 
+#define SK_SUPPORT_LEGACY_PAINTALIGNENUM
+
 /** \class SkPaint
     SkPaint controls options applied when drawing and measuring. SkPaint collects all
     options outside of the SkCanvas clip and SkCanvas matrix.
@@ -846,6 +848,7 @@
     */
     void setLooper(sk_sp<SkDrawLooper> drawLooper);
 
+#ifdef SK_SUPPORT_LEGACY_PAINTALIGNENUM
     /** \enum SkPaint::Align
         Align adjusts the text relative to the text position.
         Align affects glyphs drawn with: SkCanvas::drawText, SkCanvas::drawPosText,
@@ -867,6 +870,7 @@
         kCenter_Align, //!< centers line of glyphs by its width or height
         kRight_Align,  //!< moves lines of glyphs by its width or height
     };
+#endif
 
     /** May be used to verify that align is a legal value.
     */
diff --git a/include/utils/SkTextUtils.h b/include/utils/SkTextUtils.h
index 33bfd56..30a66a7 100644
--- a/include/utils/SkTextUtils.h
+++ b/include/utils/SkTextUtils.h
@@ -15,15 +15,21 @@
 
 class SkTextUtils {
 public:
+    enum Align {
+        kLeft_Align,
+        kCenter_Align,
+        kRight_Align,
+    };
+
     static void DrawText(SkCanvas*, const void* text, size_t size, SkScalar x, SkScalar y,
-                          const SkPaint&, SkPaint::Align = SkPaint::kLeft_Align);
+                          const SkPaint&, Align = kLeft_Align);
 
     static void DrawString(SkCanvas* canvas, const char text[], SkScalar x, SkScalar y,
-                           const SkPaint& paint, SkPaint::Align align = SkPaint::kLeft_Align) {
+                           const SkPaint& paint, Align align = kLeft_Align) {
         DrawText(canvas, text, strlen(text), x, y, paint, align);
     }
     static void DrawString(SkCanvas* canvas, const SkString& str, SkScalar x, SkScalar y,
-                           const SkPaint& paint, SkPaint::Align align = SkPaint::kLeft_Align) {
+                           const SkPaint& paint, Align align = kLeft_Align) {
         DrawText(canvas, str.c_str(), str.size(), x, y, paint, align);
     }
 };
diff --git a/modules/skottie/src/SkottieValue.cpp b/modules/skottie/src/SkottieValue.cpp
index dd37a53..7e80377 100644
--- a/modules/skottie/src/SkottieValue.cpp
+++ b/modules/skottie/src/SkottieValue.cpp
@@ -263,10 +263,10 @@
     v->fText.set(text->begin(), text->size());
     v->fTextSize = **text_size;
 
-    static constexpr SkPaint::Align gAlignMap[] = {
-        SkPaint::kLeft_Align,  // 'j': 0
-        SkPaint::kRight_Align, // 'j': 1
-        SkPaint::kCenter_Align // 'j': 2
+    static constexpr SkTextUtils::Align gAlignMap[] = {
+        SkTextUtils::kLeft_Align,  // 'j': 0
+        SkTextUtils::kRight_Align, // 'j': 1
+        SkTextUtils::kCenter_Align // 'j': 2
     };
     v->fAlign = gAlignMap[SkTMin<size_t>(ParseDefault<size_t>((*jtxt)["j"], 0),
                                          SK_ARRAY_COUNT(gAlignMap))];
diff --git a/modules/skottie/src/SkottieValue.h b/modules/skottie/src/SkottieValue.h
index cb9dac8..1c14568 100644
--- a/modules/skottie/src/SkottieValue.h
+++ b/modules/skottie/src/SkottieValue.h
@@ -13,6 +13,7 @@
 #include "SkPath.h"
 #include "SkScalar.h"
 #include "SkString.h"
+#include "SkTextUtils.h"
 #include "SkTypeface.h"
 
 #include <vector>
@@ -74,7 +75,7 @@
     SkString          fText;
     float             fTextSize    = 0,
                       fStrokeWidth = 0;
-    SkPaint::Align    fAlign       = SkPaint::kLeft_Align;
+    SkTextUtils::Align fAlign       = SkTextUtils::kLeft_Align;
     SkColor           fFillColor   = SK_ColorTRANSPARENT,
                       fStrokeColor = SK_ColorTRANSPARENT;
     bool              fHasFill   : 1,
diff --git a/modules/sksg/include/SkSGText.h b/modules/sksg/include/SkSGText.h
index c1f3ee1..09683e9 100644
--- a/modules/sksg/include/SkSGText.h
+++ b/modules/sksg/include/SkSGText.h
@@ -13,6 +13,7 @@
 #include "SkPaintDefaults.h"
 #include "SkPoint.h"
 #include "SkString.h"
+#include "SkTextUtils.h"
 
 class SkCanvas;
 class SkPaint;
@@ -36,7 +37,7 @@
     SG_ATTRIBUTE(Size    , SkScalar         , fSize    )
     SG_ATTRIBUTE(ScaleX  , SkScalar         , fScaleX  )
     SG_ATTRIBUTE(SkewX   , SkScalar         , fSkewX   )
-    SG_ATTRIBUTE(Align   , SkPaint::Align   , fAlign   )
+    SG_ATTRIBUTE(Align   , SkTextUtils::Align   , fAlign   )
     SG_ATTRIBUTE(Hinting , SkPaint::Hinting , fHinting )
 
     // TODO: add shaping functionality.
@@ -60,7 +61,7 @@
     SkScalar                fSize     = SkPaintDefaults_TextSize;
     SkScalar                fScaleX   = 1;
     SkScalar                fSkewX    = 0;
-    SkPaint::Align          fAlign    = SkPaint::kLeft_Align;
+    SkTextUtils::Align      fAlign    = SkTextUtils::kLeft_Align;
     SkPaint::Hinting        fHinting  = SkPaintDefaults_Hinting;
 
     sk_sp<SkTextBlob> fBlob; // cached text blob
diff --git a/modules/sksg/src/SkSGText.cpp b/modules/sksg/src/SkSGText.cpp
index 1451c38..f63fcf0 100644
--- a/modules/sksg/src/SkSGText.cpp
+++ b/modules/sksg/src/SkSGText.cpp
@@ -30,12 +30,12 @@
     auto aligned = fPosition;
 
     switch (fAlign) {
-    case SkPaint::kLeft_Align:
+    case SkTextUtils::kLeft_Align:
         break;
-    case SkPaint::kCenter_Align:
+    case SkTextUtils::kCenter_Align:
         aligned.offset(-advance / 2, 0);
         break;
-    case SkPaint::kRight_Align:
+    case SkTextUtils::kRight_Align:
         aligned.offset(-advance, 0);
         break;
     }
diff --git a/samplecode/SampleAAGeometry.cpp b/samplecode/SampleAAGeometry.cpp
index abca6db..9e60891 100644
--- a/samplecode/SampleAAGeometry.cpp
+++ b/samplecode/SampleAAGeometry.cpp
@@ -543,7 +543,7 @@
         }
         canvas->drawRect(fBounds, paints.fStates[fState]);
         SkTextUtils::DrawText(canvas, &fLabel, 1, fBounds.centerX(), fBounds.fBottom - 5,
-                              paints.fLabel, SkPaint::kCenter_Align);
+                              paints.fLabel, SkTextUtils::kCenter_Align);
     }
 
     void toggle() {
@@ -1816,7 +1816,7 @@
                 fLegendLeftPaint);
         SkTextUtils::DrawString(canvas, kKeyCommandList[index].fDescriptionR,
                 this->width() - 20, bottomOffset,
-                fLegendRightPaint, SkPaint::kRight_Align);
+                fLegendRightPaint, SkTextUtils::kRight_Align);
     }
 }
 
diff --git a/samplecode/SampleArc.cpp b/samplecode/SampleArc.cpp
index acf0cf7..a64c47f 100644
--- a/samplecode/SampleArc.cpp
+++ b/samplecode/SampleArc.cpp
@@ -124,7 +124,8 @@
         str.append(", ");
         str.appendScalar(sweep);
         SkTextUtils::DrawString(canvas, str, rect.centerX(),
-                         rect.fBottom + paint.getTextSize() * 5/4, paint, SkPaint::kCenter_Align);
+                         rect.fBottom + paint.getTextSize() * 5/4, paint,
+                                SkTextUtils::kCenter_Align);
     }
 
     static void DrawArcs(SkCanvas* canvas) {
diff --git a/samplecode/SampleAtlas.cpp b/samplecode/SampleAtlas.cpp
index 28508cd..652ef14 100644
--- a/samplecode/SampleAtlas.cpp
+++ b/samplecode/SampleAtlas.cpp
@@ -58,7 +58,7 @@
             paint.setAlpha(0xFF);
             int index = i % strlen(s);
             SkTextUtils::DrawText(canvas, &s[index], 1, x + half, y + half + half/2, paint,
-                                  SkPaint::kCenter_Align);
+                                  SkTextUtils::kCenter_Align);
             i += 1;
         }
     }
diff --git a/samplecode/SampleFilter2.cpp b/samplecode/SampleFilter2.cpp
index c68b69c..e4a43ca 100644
--- a/samplecode/SampleFilter2.cpp
+++ b/samplecode/SampleFilter2.cpp
@@ -89,7 +89,7 @@
                         s.append(" filter=");
                         s.appendS32(paint.getFilterQuality() != kNone_SkFilterQuality);
                         SkTextUtils::DrawString(canvas, s, x + W/2, y - p.getTextSize(), p,
-                                                SkPaint::kCenter_Align);
+                                                SkTextUtils::kCenter_Align);
                     }
                     if (k+j == 2) {
                         SkPaint p;
diff --git a/samplecode/SamplePolyToPoly.cpp b/samplecode/SamplePolyToPoly.cpp
index 13baafa..08d3c79 100644
--- a/samplecode/SamplePolyToPoly.cpp
+++ b/samplecode/SamplePolyToPoly.cpp
@@ -104,7 +104,7 @@
         float y = D/2 - (fm.fAscent + fm.fDescent)/2;
         SkString str;
         str.appendS32(count);
-        SkTextUtils::DrawString(canvas, str, x, y, *paint, SkPaint::kCenter_Align);
+        SkTextUtils::DrawString(canvas, str, x, y, *paint, SkTextUtils::kCenter_Align);
 
         canvas->restore();
     }
diff --git a/samplecode/SampleQuadStroker.cpp b/samplecode/SampleQuadStroker.cpp
index ce52452..2eb6070 100644
--- a/samplecode/SampleQuadStroker.cpp
+++ b/samplecode/SampleQuadStroker.cpp
@@ -507,7 +507,7 @@
         paint.setColor(button.fEnabled ? 0xFF3F0000 : 0x6F3F0000);
         paint.setStyle(SkPaint::kFill_Style);
         SkTextUtils::DrawText(canvas, &button.fLabel, 1, button.fBounds.centerX(), button.fBounds.fBottom - 5,
-                paint, SkPaint::kCenter_Align);
+                paint, SkTextUtils::kCenter_Align);
     }
 
     void draw_control(SkCanvas* canvas, const SkRect& bounds, SkScalar value,
diff --git a/samplecode/SampleTiling.cpp b/samplecode/SampleTiling.cpp
index b2a5460..fc4a5fd 100644
--- a/samplecode/SampleTiling.cpp
+++ b/samplecode/SampleTiling.cpp
@@ -112,7 +112,7 @@
                     str.printf("[%s,%s]", gModeNames[kx], gModeNames[ky]);
 
                     SkTextUtils::DrawString(textCanvas, str, x + r.width()/2, y, p,
-                                            SkPaint::kCenter_Align);
+                                            SkTextUtils::kCenter_Align);
 
                     x += r.width() * 4 / 3;
                 }
diff --git a/samplecode/SampleXfer.cpp b/samplecode/SampleXfer.cpp
index f87d60c..6832e8d 100644
--- a/samplecode/SampleXfer.cpp
+++ b/samplecode/SampleXfer.cpp
@@ -55,7 +55,7 @@
         paint.setTextSize(16);
         paint.setLCDRenderText(true);
         SkTextUtils::DrawString(canvas, fLabel, fRect.centerX(), fRect.fTop + 0.68f * fRect.height(),
-                                paint, SkPaint::kCenter_Align);
+                                paint, SkTextUtils::kCenter_Align);
     }
 
     bool hitTest(SkScalar x, SkScalar y) {
diff --git a/samplecode/SampleXfermodesBlur.cpp b/samplecode/SampleXfermodesBlur.cpp
index ae8d6d57..0eeab5b 100644
--- a/samplecode/SampleXfermodesBlur.cpp
+++ b/samplecode/SampleXfermodesBlur.cpp
@@ -159,7 +159,7 @@
 
                 const char* label = SkBlendMode_Name(gModes[i]);
                 SkTextUtils::DrawString(canvas, label, x + w/2, y - labelP.getTextSize()/2, labelP,
-                                        SkPaint::kCenter_Align);
+                                        SkTextUtils::kCenter_Align);
                 x += w + SkIntToScalar(10);
                 if ((i % W) == W - 1) {
                     x = x0;
diff --git a/src/core/SkDrawProcs.h b/src/core/SkDrawProcs.h
index 15c5cf8..82fb699 100644
--- a/src/core/SkDrawProcs.h
+++ b/src/core/SkDrawProcs.h
@@ -39,28 +39,4 @@
     return SkDrawTreatAAStrokeAsHairline(strokeWidth, matrix, coverage);
 }
 
-class SkTextAlignProc {
-public:
-    SkTextAlignProc(SkPaint::Align align)
-        : fAlign(align) {
-    }
-
-    // Returns the glyph position, which may be rounded or not by the caller
-    //   e.g. subpixel doesn't round.
-    void operator()(const SkPoint& loc, const SkGlyph& glyph, SkPoint* dst) {
-        if (SkPaint::kLeft_Align == fAlign) {
-            dst->set(loc.fX, loc.fY);
-        } else if (SkPaint::kCenter_Align == fAlign) {
-            dst->set(loc.fX - SkFloatToScalar(glyph.fAdvanceX) / 2,
-                     loc.fY - SkFloatToScalar(glyph.fAdvanceY) / 2);
-        } else {
-            SkASSERT(SkPaint::kRight_Align == fAlign);
-            dst->set(loc.fX - SkFloatToScalar(glyph.fAdvanceX),
-                     loc.fY - SkFloatToScalar(glyph.fAdvanceY));
-        }
-    }
-private:
-    const SkPaint::Align fAlign;
-};
-
 #endif
diff --git a/src/core/SkPaint.cpp b/src/core/SkPaint.cpp
index 83fcf02..a0bdc6a 100644
--- a/src/core/SkPaint.cpp
+++ b/src/core/SkPaint.cpp
@@ -57,7 +57,7 @@
     fBitfields.fFlags        = SkPaintDefaults_Flags;
     fBitfields.fCapType      = kDefault_Cap;
     fBitfields.fJoinType     = kDefault_Join;
-    fBitfields.fTextAlign    = kLeft_Align;
+    fBitfields.fTextAlign    = 0;   // kLeft_Align
     fBitfields.fStyle        = kFill_Style;
     fBitfields.fTextEncoding = kUTF8_TextEncoding;
     fBitfields.fHinting      = SkPaintDefaults_Hinting;
@@ -399,7 +399,6 @@
 enum BitsPerField {
     kFlags_BPF  = 16,
     kHint_BPF   = 2,
-    kAlign_BPF  = 2,
     kFilter_BPF = 2,
     kFlatFlags_BPF  = 3,
 };
@@ -408,25 +407,22 @@
     return (1 << bits) - 1;
 }
 
-static uint32_t pack_paint_flags(unsigned flags, unsigned hint, unsigned align,
-                                 unsigned filter, unsigned flatFlags) {
+static uint32_t pack_paint_flags(unsigned flags, unsigned hint, unsigned filter, unsigned flatFlags) {
     ASSERT_FITS_IN(flags, kFlags_BPF);
     ASSERT_FITS_IN(hint, kHint_BPF);
-    ASSERT_FITS_IN(align, kAlign_BPF);
     ASSERT_FITS_IN(filter, kFilter_BPF);
     ASSERT_FITS_IN(flatFlags, kFlatFlags_BPF);
 
+    unsigned was_align = 0; // used to be textalign [0..2]
+
     // left-align the fields of "known" size, and right-align the last (flatFlags) so it can easly
     // add more bits in the future.
-    return (flags << 16) | (hint << 14) | (align << 12) | (filter << 10) | flatFlags;
+    return (flags << 16) | (hint << 14) | (was_align << 12) | (filter << 10) | flatFlags;
 }
 
 static FlatFlags unpack_paint_flags(SkPaint* paint, uint32_t packed) {
     paint->setFlags(packed >> 16);
     paint->setHinting((SkPaint::Hinting)((packed >> 14) & BPF_Mask(kHint_BPF)));
-#ifdef SK_SUPPORT_LEGACY_SETTEXTALIGN
-    paint->setTextAlign((SkPaint::Align)((packed >> 12) & BPF_Mask(kAlign_BPF)));
-#endif
     paint->setFilterQuality((SkFilterQuality)((packed >> 10) & BPF_Mask(kFilter_BPF)));
     return (FlatFlags)(packed & kFlatFlagMask);
 }
@@ -459,11 +455,6 @@
     buffer.writeColor4f(paint.getColor4f());
 
     buffer.writeUInt(pack_paint_flags(paint.getFlags(), paint.getHinting(),
-#ifdef SK_SUPPORT_LEGACY_SETTEXTALIGN
-                                      paint.getTextAlign(),
-#else
-                                      SkPaint::kLeft_Align,
-#endif
                                       paint.getFilterQuality(), flatFlags));
     buffer.writeUInt(pack_4(paint.getStrokeCap(), paint.getStrokeJoin(),
                             (paint.getStyle() << 4) | paint.getTextEncoding(),
diff --git a/src/core/SkTextBlob.cpp b/src/core/SkTextBlob.cpp
index 87cd2b2..2230820 100644
--- a/src/core/SkTextBlob.cpp
+++ b/src/core/SkTextBlob.cpp
@@ -29,7 +29,7 @@
         , fSkewX(paint.getTextSkewX())
 #ifdef SK_SUPPORT_LEGACY_SETTEXTALIGN
         , fAlign(paint.getTextAlign())
-#else
+#elif defined(SK_SUPPORT_LEGACY_PAINTALIGNENUM)
         , fAlign(SkPaint::kLeft_Align)
 #endif
         , fHinting(paint.getHinting())
@@ -54,7 +54,9 @@
            && fSize == other.fSize
            && fScaleX == other.fScaleX
            && fSkewX == other.fSkewX
+#ifdef SK_SUPPORT_LEGACY_PAINTALIGNENUM
            && fAlign == other.fAlign
+#endif
            && fHinting == other.fHinting
            && fFlags == other.fFlags;
 }
diff --git a/src/core/SkTextBlobPriv.h b/src/core/SkTextBlobPriv.h
index 9a4abd6..ddce76d 100644
--- a/src/core/SkTextBlobPriv.h
+++ b/src/core/SkTextBlobPriv.h
@@ -92,8 +92,10 @@
     sk_sp<SkTypeface>        fTypeface;
     SkScalar                 fSkewX;
 
+#ifdef SK_SUPPORT_LEGACY_PAINTALIGNENUM
     static_assert(SkPaint::kAlignCount < 4, "insufficient_align_bits");
     uint32_t                 fAlign : 2;
+#endif
     static_assert(SkPaint::kFull_Hinting < 4, "insufficient_hinting_bits");
     uint32_t                 fHinting : 2;
     static_assert((kFlagsMask & 0xffff) == kFlagsMask, "insufficient_flags_bits");
@@ -241,7 +243,9 @@
         , fBitfieldsUInt{(basePaint.fBitfieldsUInt & ~SkRunFont::kFlagsMask) | runFont.fFlags} {
     fBitfields.fTextEncoding = kGlyphID_TextEncoding;
     fBitfields.fHinting = runFont.fHinting;
+#ifdef SK_SUPPORT_LEGACY_PAINTALIGNENUM
     fBitfields.fTextAlign = runFont.fAlign;
+#endif
 }
 
 /**
diff --git a/src/utils/SkTextUtils.cpp b/src/utils/SkTextUtils.cpp
index 784cf7d..cc1b48e 100644
--- a/src/utils/SkTextUtils.cpp
+++ b/src/utils/SkTextUtils.cpp
@@ -8,7 +8,7 @@
 #include "SkTextUtils.h"
 
 void SkTextUtils::DrawText(SkCanvas* canvas, const void* text, size_t size, SkScalar x, SkScalar y,
-                            const SkPaint& origPaint, SkPaint::Align align) {
+                            const SkPaint& origPaint, Align align) {
     int count = origPaint.countText(text, size);
     if (!count) {
         return;
@@ -31,12 +31,12 @@
     SkScalar* widths = widthStorage.get();
     paint.getTextWidths(glyphs, count * sizeof(uint16_t), widths);
 
-    if (align != SkPaint::kLeft_Align) {
+    if (align != kLeft_Align) {
         SkScalar offset = 0;
         for (int i = 0; i < count; ++i) {
             offset += widths[i];
         }
-        if (align == SkPaint::kCenter_Align) {
+        if (align == kCenter_Align) {
             offset *= 0.5f;
         }
         x -= offset;
diff --git a/tools/viewer/SlideDir.cpp b/tools/viewer/SlideDir.cpp
index 5ee46dd..a776bbd 100644
--- a/tools/viewer/SlideDir.cpp
+++ b/tools/viewer/SlideDir.cpp
@@ -262,7 +262,7 @@
     auto text = sksg::Text::Make(nullptr, txt);
     text->setFlags(SkPaint::kAntiAlias_Flag);
     text->setSize(size);
-    text->setAlign(SkPaint::kCenter_Align);
+    text->setAlign(SkTextUtils::kCenter_Align);
     text->setPosition(pos + SkPoint::Make(0, size));
 
     return sksg::Draw::Make(std::move(text), sksg::Color::Make(SK_ColorBLACK));