Use SkFont for managing distance field text

Change-Id: I4512a98063301e91bbcefe3f55de16f26601d39b
Reviewed-on: https://skia-review.googlesource.com/c/178283
Reviewed-by: Jim Van Verth <jvanverth@google.com>
Commit-Queue: Herb Derby <herb@google.com>
diff --git a/src/core/SkGlyphRunPainter.cpp b/src/core/SkGlyphRunPainter.cpp
index bd1c55f..0059870 100644
--- a/src/core/SkGlyphRunPainter.cpp
+++ b/src/core/SkGlyphRunPainter.cpp
@@ -721,10 +721,16 @@
             // Setup distance field runPaint and text ratio
             SkScalar textScale;
             SkPaint distanceFieldPaint{runPaint};
-            runFont.LEGACY_applyToPaint(&distanceFieldPaint);
+            SkFont distanceFieldFont{runFont};
             SkScalerContextFlags flags;
-            GrTextContext::InitDistanceFieldPaint(this, &distanceFieldPaint, viewMatrix,
-                                                  options, &textScale, &flags);
+            GrTextContext::InitDistanceFieldPaint(runFont.getSize(),
+                                                  viewMatrix,
+                                                  options,
+                                                  this,
+                                                  &distanceFieldPaint,
+                                                  &distanceFieldFont,
+                                                  &textScale,
+                                                  &flags);
             this->setHasDistanceField();
             run->setSubRunHasDistanceFields(
                     runFont.getEdging() == SkFont::Edging::kSubpixelAntiAlias,
@@ -732,8 +738,8 @@
                     hasWCoord);
 
             {
-                SkFont font = SkFont::LEGACY_ExtractFromPaint(distanceFieldPaint);
-                auto cache = run->setupCache(distanceFieldPaint, font, props, flags, SkMatrix::I());
+                auto cache = run->setupCache(
+                        distanceFieldPaint, distanceFieldFont, props, flags, SkMatrix::I());
 
                 sk_sp<GrTextStrike> currStrike = glyphCache->getStrike(cache.get());
 
@@ -1011,13 +1017,18 @@
     }
 
     SkScalar textRatio;
-    SkPaint dfPaint(runPaint);
-    runFont.LEGACY_applyToPaint(&dfPaint);
+    SkPaint dfPaint{runPaint};
+    SkFont dfFont{runFont};
     SkScalerContextFlags flags;
-    GrTextContext::InitDistanceFieldPaint(nullptr, &dfPaint, runMatrix, options, &textRatio,
+    GrTextContext::InitDistanceFieldPaint(runFont.getSize(),
+                                          runMatrix,
+                                          options,
+                                          nullptr,
+                                          &dfPaint,
+                                          &dfFont,
+                                          &textRatio,
                                           &flags);
     SkScalerContextEffects effects;
-    SkFont dfFont = SkFont::LEGACY_ExtractFromPaint(dfPaint);
     auto* sdfCache = fStrikeServer->getOrCreateCache(dfPaint, dfFont, this->surfaceProps(),
                                                      SkMatrix::I(), flags, &effects);
 
diff --git a/src/gpu/text/GrTextContext.cpp b/src/gpu/text/GrTextContext.cpp
index 4e9b42b..2d8d163 100644
--- a/src/gpu/text/GrTextContext.cpp
+++ b/src/gpu/text/GrTextContext.cpp
@@ -129,13 +129,14 @@
     return true;
 }
 
-void GrTextContext::InitDistanceFieldPaint(GrTextBlob* blob,
-                                           SkPaint* skPaint,
+void GrTextContext::InitDistanceFieldPaint(const SkScalar textSize,
                                            const SkMatrix& viewMatrix,
                                            const Options& options,
+                                           GrTextBlob* blob,
+                                           SkPaint* skPaint,
+                                           SkFont* skFont,
                                            SkScalar* textRatio,
                                            SkScalerContextFlags* flags) {
-    SkScalar textSize = skPaint->getTextSize();
     SkScalar scaledTextSize = textSize;
 
     if (viewMatrix.hasPerspective()) {
@@ -160,17 +161,17 @@
         dfMaskScaleFloor = options.fMinDistanceFieldFontSize;
         dfMaskScaleCeil = kSmallDFFontLimit;
         *textRatio = textSize / kSmallDFFontSize;
-        skPaint->setTextSize(SkIntToScalar(kSmallDFFontSize));
+        skFont->setSize(SkIntToScalar(kSmallDFFontSize));
     } else if (scaledTextSize <= kMediumDFFontLimit) {
         dfMaskScaleFloor = kSmallDFFontLimit;
         dfMaskScaleCeil = kMediumDFFontLimit;
         *textRatio = textSize / kMediumDFFontSize;
-        skPaint->setTextSize(SkIntToScalar(kMediumDFFontSize));
+        skFont->setSize(SkIntToScalar(kMediumDFFontSize));
     } else {
         dfMaskScaleFloor = kMediumDFFontLimit;
         dfMaskScaleCeil = options.fMaxDistanceFieldFontSize;
         *textRatio = textSize / kLargeDFFontSize;
-        skPaint->setTextSize(SkIntToScalar(kLargeDFFontSize));
+        skFont->setSize(SkIntToScalar(kLargeDFFontSize));
     }
 
     // Because there can be multiple runs in the blob, we want the overall maxMinScale, and
@@ -186,11 +187,10 @@
                                 dfMaskScaleCeil / scaledTextSize);
     }
 
-    skPaint->setAntiAlias(true);
-    skPaint->setLCDRenderText(false);
-    skPaint->setAutohinted(false);
-    skPaint->setHinting(kNormal_SkFontHinting);
-    skPaint->setSubpixelText(true);
+    skFont->setEdging(SkFont::Edging::kAntiAlias);
+    skFont->setForceAutoHinting(false);
+    skFont->setHinting(kNormal_SkFontHinting);
+    skFont->setSubpixel(true);
 
     skPaint->setMaskFilter(GrSDFMaskFilter::Make());
 
diff --git a/src/gpu/text/GrTextContext.h b/src/gpu/text/GrTextContext.h
index 604f168..46f5d3f 100644
--- a/src/gpu/text/GrTextContext.h
+++ b/src/gpu/text/GrTextContext.h
@@ -61,10 +61,12 @@
                                         const SkSurfaceProps& props,
                                         bool contextSupportsDistanceFieldText,
                                         const Options& options);
-    static void InitDistanceFieldPaint(GrTextBlob* blob,
-                                       SkPaint* skPaint,
+    static void InitDistanceFieldPaint(SkScalar textSize,
                                        const SkMatrix& viewMatrix,
                                        const Options& options,
+                                       GrTextBlob* blob,
+                                       SkPaint* skPaint,
+                                       SkFont* skFont,
                                        SkScalar* textRatio,
                                        SkScalerContextFlags* flags);