use SkFontMetrics so we can deprecated the typedef

Bug: skia:
Change-Id: Icd40c042b0a8251bbd0b39dd3ee1a4634fff379f
Reviewed-on: https://skia-review.googlesource.com/c/170344
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Reed <reed@google.com>
diff --git a/docs/SkPaint_Reference.bmh b/docs/SkPaint_Reference.bmh
index 44c5124..373be0e 100644
--- a/docs/SkPaint_Reference.bmh
+++ b/docs/SkPaint_Reference.bmh
@@ -3733,7 +3733,7 @@
 
 #Example
     SkPaint paint;
-    SkPaint::FontMetrics fm;
+    SkFontMetrics fm;
     paint.getFontMetrics(&fm);
     SkRect fb = paint.getFontBounds();
     SkDebugf("metrics bounds = { %g, %g, %g, %g }\n", fm.fXMin, fm.fTop, fm.fXMax, fm.fBottom );
diff --git a/gm/coloremoji.cpp b/gm/coloremoji.cpp
index 58a39e7..290c747 100644
--- a/gm/coloremoji.cpp
+++ b/gm/coloremoji.cpp
@@ -82,7 +82,7 @@
 
         // draw text at different point sizes
         constexpr SkScalar textSizes[] = { 10, 30, 50, };
-        SkPaint::FontMetrics metrics;
+        SkFontMetrics metrics;
         SkScalar y = 0;
         for (const bool& fakeBold : { false, true }) {
             paint.setFakeBoldText(fakeBold);
diff --git a/gm/fontmgr.cpp b/gm/fontmgr.cpp
index 5b69ecf..0e22588 100644
--- a/gm/fontmgr.cpp
+++ b/gm/fontmgr.cpp
@@ -234,16 +234,16 @@
         SkPaint metricsPaint(boundsPaint);
         metricsPaint.setStyle(SkPaint::kFill_Style);
         metricsPaint.setAlpha(0x40);
-        if ((fm.fFlags & SkPaint::FontMetrics::kUnderlinePositionIsValid_Flag) &&
-            (fm.fFlags & SkPaint::FontMetrics::kUnderlinePositionIsValid_Flag))
+        if ((fm.fFlags & SkFontMetrics::kUnderlinePositionIsValid_Flag) &&
+            (fm.fFlags & SkFontMetrics::kUnderlinePositionIsValid_Flag))
         {
             SkRect underline{ fontBounds.fLeft,  fm.fUnderlinePosition+y,
                               fontBounds.fRight, fm.fUnderlinePosition+y + fm.fUnderlineThickness };
             canvas->drawRect(underline, metricsPaint);
         }
 
-        if ((fm.fFlags & SkPaint::FontMetrics::kStrikeoutPositionIsValid_Flag) &&
-            (fm.fFlags & SkPaint::FontMetrics::kStrikeoutPositionIsValid_Flag))
+        if ((fm.fFlags & SkFontMetrics::kStrikeoutPositionIsValid_Flag) &&
+            (fm.fFlags & SkFontMetrics::kStrikeoutPositionIsValid_Flag))
         {
             SkRect strikeout{ fontBounds.fLeft,  fm.fStrikeoutPosition+y - fm.fStrikeoutThickness,
                               fontBounds.fRight, fm.fStrikeoutPosition+y };
diff --git a/gm/poly2poly.cpp b/gm/poly2poly.cpp
index f89e57a..6edba54 100644
--- a/gm/poly2poly.cpp
+++ b/gm/poly2poly.cpp
@@ -213,7 +213,7 @@
         canvas->drawLine(0, 0, D, D, *paint);
         canvas->drawLine(0, D, D, 0, *paint);
 
-        SkPaint::FontMetrics fm;
+        SkFontMetrics fm;
         paint->getFontMetrics(&fm);
         paint->setColor(SK_ColorRED);
         paint->setStyle(SkPaint::kFill_Style);
diff --git a/gm/scaledemoji.cpp b/gm/scaledemoji.cpp
index a639b01..6bae281 100644
--- a/gm/scaledemoji.cpp
+++ b/gm/scaledemoji.cpp
@@ -50,7 +50,7 @@
         // draw text at different point sizes
         // Testing GPU bitmap path, SDF path with no scaling,
         // SDF path with scaling, path rendering with scaling
-        SkPaint::FontMetrics metrics;
+        SkFontMetrics metrics;
         SkScalar y = 0;
         for (SkScalar textSize : { 70, 180, 270, 340 }) {
             paint.setTextSize(textSize);
@@ -100,7 +100,7 @@
         // draw text at different point sizes
         // Testing GPU bitmap path, SDF path with no scaling,
         // SDF path with scaling, path rendering with scaling
-        SkPaint::FontMetrics metrics;
+        SkFontMetrics metrics;
         SkScalar y = 0;
         for (SkScalar textSize : { 70, 180, 270, 340 }) {
             paint.setTextSize(textSize);
diff --git a/gm/scaledemoji_rendering.cpp b/gm/scaledemoji_rendering.cpp
index 9ab8e55..6b75dc8 100644
--- a/gm/scaledemoji_rendering.cpp
+++ b/gm/scaledemoji_rendering.cpp
@@ -46,7 +46,7 @@
             SkPaint paint;
             paint.setTypeface(typeface);
             const char* text = sk_tool_utils::emoji_sample_text();
-            SkPaint::FontMetrics metrics;
+            SkFontMetrics metrics;
 
             for (SkScalar textSize : { 70, 150 }) {
                 paint.setTextSize(textSize);
diff --git a/include/core/SkFontMetrics.h b/include/core/SkFontMetrics.h
index 43fd75f..873931b 100644
--- a/include/core/SkFontMetrics.h
+++ b/include/core/SkFontMetrics.h
@@ -12,7 +12,7 @@
 
 struct SK_API SkFontMetrics {
 
-    /** \enum SkPaint::FontMetrics::FontMetricsFlags
+    /** \enum FontMetricsFlags
      FontMetricsFlags are set in fFlags when underline and strikeout metrics are valid;
      the underline or strikeout metric may be valid and zero.
      Fonts with embedded bitmaps may not have valid underline or strikeout metrics.
@@ -41,7 +41,7 @@
     SkScalar fStrikeoutThickness; //!< strikeout thickness
     SkScalar fStrikeoutPosition;  //!< strikeout position relative to baseline
 
-    /** Returns true if SkPaint::FontMetrics has a valid underline thickness, and sets
+    /** Returns true if SkFontMetrics has a valid underline thickness, and sets
      thickness to that value. If the underline thickness is not valid,
      return false, and ignore thickness.
 
@@ -56,7 +56,7 @@
         return false;
     }
 
-    /** Returns true if SkPaint::FontMetrics has a valid underline position, and sets
+    /** Returns true if SkFontMetrics has a valid underline position, and sets
      position to that value. If the underline position is not valid,
      return false, and ignore position.
 
@@ -71,7 +71,7 @@
         return false;
     }
 
-    /** Returns true if SkPaint::FontMetrics has a valid strikeout thickness, and sets
+    /** Returns true if SkFontMetrics has a valid strikeout thickness, and sets
      thickness to that value. If the underline thickness is not valid,
      return false, and ignore thickness.
 
@@ -86,7 +86,7 @@
         return false;
     }
 
-    /** Returns true if SkPaint::FontMetrics has a valid strikeout position, and sets
+    /** Returns true if SkFontMetrics has a valid strikeout position, and sets
      position to that value. If the underline position is not valid,
      return false, and ignore position.
 
diff --git a/include/core/SkPaint.h b/include/core/SkPaint.h
index c2dbfe8..3ae2a66 100644
--- a/include/core/SkPaint.h
+++ b/include/core/SkPaint.h
@@ -27,6 +27,8 @@
 #include "SkMatrix.h"
 #include "SkRefCnt.h"
 
+#define SK_SUPPORT_LEGACY_FONTMETRICS_IN_PAINT
+
 class GrTextBlob;
 class SkAutoDescriptor;
 class SkColorFilter;
@@ -943,6 +945,7 @@
     */
     void setTextEncoding(TextEncoding encoding);
 
+#ifdef SK_SUPPORT_LEGACY_FONTMETRICS_IN_PAINT
     /**
         SkFontMetrics is filled out by getFontMetrics(). SkFontMetrics contents reflect the values
         computed by font manager using SkTypeface. Values are set to zero if they are
@@ -959,6 +962,7 @@
         are valid, since their value may be zero.
     */
     typedef SkFontMetrics FontMetrics;
+#endif
 
     /** Returns SkFontMetrics associated with SkTypeface.
         The return value is the recommended spacing between lines: the sum of metrics
diff --git a/modules/skshaper/src/SkShaper_harfbuzz.cpp b/modules/skshaper/src/SkShaper_harfbuzz.cpp
index 0406496..47630d5 100644
--- a/modules/skshaper/src/SkShaper_harfbuzz.cpp
+++ b/modules/skshaper/src/SkShaper_harfbuzz.cpp
@@ -723,7 +723,7 @@
         ShapedGlyph* nextGlyph = glyphIterator.next();
 
         if (previousRunIndex != runIndex) {
-            SkPaint::FontMetrics metrics;
+            SkFontMetrics metrics;
             runs[runIndex].fPaint.getFontMetrics(&metrics);
             maxAscent = SkTMin(maxAscent, metrics.fAscent);
             maxDescent = SkTMax(maxDescent, metrics.fDescent);
diff --git a/modules/skshaper/src/SkShaper_primitive.cpp b/modules/skshaper/src/SkShaper_primitive.cpp
index e6b4277..3f45a11 100644
--- a/modules/skshaper/src/SkShaper_primitive.cpp
+++ b/modules/skshaper/src/SkShaper_primitive.cpp
@@ -49,7 +49,7 @@
         return point;
     }
     SkRect bounds;
-    SkPaint::FontMetrics metrics;
+    SkFontMetrics metrics;
     paint.getFontMetrics(&metrics);
     point.fY -= metrics.fAscent;
     (void)paint.measureText(utf8text, textBytes, &bounds);
diff --git a/samplecode/SampleChineseFling.cpp b/samplecode/SampleChineseFling.cpp
index 2a25998..769cc1e 100644
--- a/samplecode/SampleChineseFling.cpp
+++ b/samplecode/SampleChineseFling.cpp
@@ -121,7 +121,7 @@
 
     bool                        fInitialized = false;
     sk_sp<SkTypeface>           fTypeface;
-    SkPaint::FontMetrics        fMetrics;
+    SkFontMetrics               fMetrics;
     SkTArray<sk_sp<SkTextBlob>> fBlobs;
     SkRandom                    fRand;
     int                         fIndex;
@@ -253,7 +253,7 @@
 
     bool                        fInitialized = false;
     sk_sp<SkTypeface>           fTypeface;
-    SkPaint::FontMetrics        fMetrics;
+    SkFontMetrics               fMetrics;
     SkTArray<sk_sp<SkTextBlob>> fBlobs;
     SkRandom                    fRand;
     SkScalar                    fScale;
diff --git a/samplecode/SampleFontCache.cpp b/samplecode/SampleFontCache.cpp
index 2428657..2ba4b08 100644
--- a/samplecode/SampleFontCache.cpp
+++ b/samplecode/SampleFontCache.cpp
@@ -22,7 +22,7 @@
         text[j] = (uint16_t)((rand.nextU() & 0xFF) + 32);
 
     for (int i = 9; i < 36; i++) {
-        SkPaint::FontMetrics m;
+        SkFontMetrics m;
 
         paint.setTextSize(SkIntToScalar(i));
         paint.getFontMetrics(&m);
@@ -46,7 +46,7 @@
     canvas->drawColor(SK_ColorWHITE);
     for (int i = 9; i < 36; i++)
     {
-        SkPaint::FontMetrics m;
+        SkFontMetrics m;
 
         paint.setTextSize(SkIntToScalar(i));
         paint.getFontMetrics(&m);
diff --git a/samplecode/SamplePolyToPoly.cpp b/samplecode/SamplePolyToPoly.cpp
index 08d3c79..24c8b80 100644
--- a/samplecode/SamplePolyToPoly.cpp
+++ b/samplecode/SamplePolyToPoly.cpp
@@ -96,7 +96,7 @@
         canvas->drawLine(0, 0, D, D, *paint);
         canvas->drawLine(0, D, D, 0, *paint);
 
-        SkPaint::FontMetrics fm;
+        SkFontMetrics fm;
         paint->getFontMetrics(&fm);
         paint->setColor(SK_ColorRED);
         paint->setStyle(SkPaint::kFill_Style);
diff --git a/samplecode/SampleRegion.cpp b/samplecode/SampleRegion.cpp
index 4c5b588..a9526fa 100644
--- a/samplecode/SampleRegion.cpp
+++ b/samplecode/SampleRegion.cpp
@@ -56,7 +56,7 @@
                            const SkPaint& paint) {
     // Need a bounds for the text
     SkRect bounds;
-    SkPaint::FontMetrics fm;
+    SkFontMetrics fm;
 
     paint.getFontMetrics(&fm);
     bounds.set(x, y + fm.fTop, x + paint.measureText(text, len), y + fm.fBottom);
diff --git a/src/core/SkPaintPriv.cpp b/src/core/SkPaintPriv.cpp
index 0114951..8718cf1 100644
--- a/src/core/SkPaintPriv.cpp
+++ b/src/core/SkPaintPriv.cpp
@@ -56,7 +56,7 @@
                                                : kNotOpaque_ShaderOverrideOpacity);
 }
 
-void SkPaintPriv::ScaleFontMetrics(SkPaint::FontMetrics* metrics, SkScalar scale) {
+void SkPaintPriv::ScaleFontMetrics(SkFontMetrics* metrics, SkScalar scale) {
     metrics->fTop *= scale;
     metrics->fAscent *= scale;
     metrics->fDescent *= scale;
diff --git a/src/core/SkPaintPriv.h b/src/core/SkPaintPriv.h
index a5ee9a5..9181e35 100644
--- a/src/core/SkPaintPriv.h
+++ b/src/core/SkPaintPriv.h
@@ -50,7 +50,7 @@
      */
     static bool Overwrites(const SkImage*, const SkPaint* paint);
 
-    static void ScaleFontMetrics(SkPaint::FontMetrics*, SkScalar);
+    static void ScaleFontMetrics(SkFontMetrics*, SkScalar);
 
     /**
      *  Return a matrix that applies the paint's text values: size, scale, skew
diff --git a/src/core/SkPaint_text.cpp b/src/core/SkPaint_text.cpp
index eda6fc3..7e2d2d2 100644
--- a/src/core/SkPaint_text.cpp
+++ b/src/core/SkPaint_text.cpp
@@ -477,7 +477,7 @@
     const SkPaint& paint = canon.getPaint();
     SkScalar scale = canon.getScale();
 
-    FontMetrics storage;
+    SkFontMetrics storage;
     if (nullptr == metrics) {
         metrics = &storage;
     }
diff --git a/src/core/SkRecordDraw.cpp b/src/core/SkRecordDraw.cpp
index 6b19202..05c7b2e 100644
--- a/src/core/SkRecordDraw.cpp
+++ b/src/core/SkRecordDraw.cpp
@@ -495,7 +495,7 @@
                        xPad = 4.0f * yPad;
         rect->outset(xPad, yPad);
 #ifdef SK_DEBUG
-        SkPaint::FontMetrics metrics;
+        SkFontMetrics metrics;
         paint.getFontMetrics(&metrics);
         correct.fLeft   += metrics.fXMin;
         correct.fTop    += metrics.fTop;
diff --git a/src/core/SkRemoteGlyphCache.cpp b/src/core/SkRemoteGlyphCache.cpp
index c25d68d..aae01de 100644
--- a/src/core/SkRemoteGlyphCache.cpp
+++ b/src/core/SkRemoteGlyphCache.cpp
@@ -459,9 +459,9 @@
 
     // Write FontMetrics.
     // TODO(khushalsagar): Do we need to re-send each time?
-    SkPaint::FontMetrics fontMetrics;
+    SkFontMetrics fontMetrics;
     fContext->getFontMetrics(&fontMetrics);
-    serializer->write<SkPaint::FontMetrics>(fontMetrics);
+    serializer->write<SkFontMetrics>(fontMetrics);
 
     // Write glyphs images.
     serializer->emplace<uint64_t>(fPendingGlyphImages.size());
@@ -622,8 +622,8 @@
         SkAutoDescriptor sourceAd;
         if (!deserializer.readDescriptor(&sourceAd)) READ_FAILURE
 
-        SkPaint::FontMetrics fontMetrics;
-        if (!deserializer.read<SkPaint::FontMetrics>(&fontMetrics)) READ_FAILURE
+        SkFontMetrics fontMetrics;
+        if (!deserializer.read<SkFontMetrics>(&fontMetrics)) READ_FAILURE
 
         // Get the local typeface from remote fontID.
         auto* tf = fRemoteFontIdToTypeface.find(spec.typefaceID)->get();
diff --git a/src/core/SkScalerContext.cpp b/src/core/SkScalerContext.cpp
index 297c8c9..190e92f 100644
--- a/src/core/SkScalerContext.cpp
+++ b/src/core/SkScalerContext.cpp
@@ -550,7 +550,7 @@
     return this->internalGetPath(glyphID, path);
 }
 
-void SkScalerContext::getFontMetrics(SkPaint::FontMetrics* fm) {
+void SkScalerContext::getFontMetrics(SkFontMetrics* fm) {
     SkASSERT(fm);
     this->generateFontMetrics(fm);
 }
@@ -820,7 +820,7 @@
         path->reset();
         return false;
     }
-    void generateFontMetrics(SkPaint::FontMetrics* metrics) override {
+    void generateFontMetrics(SkFontMetrics* metrics) override {
         if (metrics) {
             sk_bzero(metrics, sizeof(*metrics));
         }
diff --git a/src/core/SkScalerContext.h b/src/core/SkScalerContext.h
index d6cea6a..72afa44 100644
--- a/src/core/SkScalerContext.h
+++ b/src/core/SkScalerContext.h
@@ -297,7 +297,7 @@
     void        getMetrics(SkGlyph*);
     void        getImage(const SkGlyph&);
     bool SK_WARN_UNUSED_RESULT getPath(SkPackedGlyphID, SkPath*);
-    void        getFontMetrics(SkPaint::FontMetrics*);
+    void        getFontMetrics(SkFontMetrics*);
 
     /** Return the size in bytes of the associated gamma lookup table
      */
@@ -414,7 +414,7 @@
     virtual bool SK_WARN_UNUSED_RESULT generatePath(SkGlyphID glyphId, SkPath* path) = 0;
 
     /** Retrieves font metrics. */
-    virtual void generateFontMetrics(SkPaint::FontMetrics*) = 0;
+    virtual void generateFontMetrics(SkFontMetrics*) = 0;
 
     /** Returns the number of glyphs in the font. */
     virtual unsigned generateGlyphCount() = 0;
diff --git a/src/core/SkStrikeCache.cpp b/src/core/SkStrikeCache.cpp
index 477674f..85ad044 100644
--- a/src/core/SkStrikeCache.cpp
+++ b/src/core/SkStrikeCache.cpp
@@ -25,7 +25,7 @@
 struct SkStrikeCache::Node {
     Node(const SkDescriptor& desc,
         std::unique_ptr<SkScalerContext> scaler,
-        const SkPaint::FontMetrics& metrics,
+        const SkFontMetrics& metrics,
         std::unique_ptr<SkStrikePinner> pinner)
         : fCache{desc, std::move(scaler), metrics}
         , fPinner{std::move(pinner)} {}
@@ -350,7 +350,7 @@
 SkExclusiveStrikePtr SkStrikeCache::CreateStrikeExclusive(
         const SkDescriptor& desc,
         std::unique_ptr<SkScalerContext> scaler,
-        SkPaint::FontMetrics* maybeMetrics,
+        SkFontMetrics* maybeMetrics,
         std::unique_ptr<SkStrikePinner> pinner)
 {
     return GlobalStrikeCache()->createStrikeExclusive(
@@ -360,10 +360,10 @@
 SkExclusiveStrikePtr SkStrikeCache::createStrikeExclusive(
         const SkDescriptor& desc,
         std::unique_ptr<SkScalerContext> scaler,
-        SkPaint::FontMetrics* maybeMetrics,
+        SkFontMetrics* maybeMetrics,
         std::unique_ptr<SkStrikePinner> pinner)
 {
-    SkPaint::FontMetrics fontMetrics;
+    SkFontMetrics fontMetrics;
     if (maybeMetrics != nullptr) {
         fontMetrics = *maybeMetrics;
     } else {
diff --git a/src/core/SkTypeface.cpp b/src/core/SkTypeface.cpp
index 96b61ce..3e485f5 100644
--- a/src/core/SkTypeface.cpp
+++ b/src/core/SkTypeface.cpp
@@ -413,7 +413,7 @@
         return false;
     }
 
-    SkPaint::FontMetrics fm;
+    SkFontMetrics fm;
     ctx->getFontMetrics(&fm);
     bounds->set(fm.fXMin * invTextSize, fm.fTop * invTextSize,
                 fm.fXMax * invTextSize, fm.fBottom * invTextSize);
diff --git a/src/core/SkTypeface_remote.cpp b/src/core/SkTypeface_remote.cpp
index 8083708..e79c51a 100644
--- a/src/core/SkTypeface_remote.cpp
+++ b/src/core/SkTypeface_remote.cpp
@@ -100,7 +100,7 @@
     return foundPath;
 }
 
-void SkScalerContextProxy::generateFontMetrics(SkPaint::FontMetrics* metrics) {
+void SkScalerContextProxy::generateFontMetrics(SkFontMetrics* metrics) {
     TRACE_EVENT1(
             "skia", "generateFontMetrics", "rec", TRACE_STR_COPY(this->getRec().dump().c_str()));
     if (this->getProxyTypeface()->isLogging()) {
diff --git a/src/core/SkTypeface_remote.h b/src/core/SkTypeface_remote.h
index d3ea3f8..61b5bd8 100644
--- a/src/core/SkTypeface_remote.h
+++ b/src/core/SkTypeface_remote.h
@@ -36,7 +36,7 @@
     void generateMetrics(SkGlyph* glyph) override;
     void generateImage(const SkGlyph& glyph) override;
     bool generatePath(SkGlyphID glyphID, SkPath* path) override;
-    void generateFontMetrics(SkPaint::FontMetrics* metrics) override;
+    void generateFontMetrics(SkFontMetrics* metrics) override;
     SkTypefaceProxy* getProxyTypeface() const;
 
 private:
diff --git a/src/ports/SkFontHost_FreeType.cpp b/src/ports/SkFontHost_FreeType.cpp
index d671b56..c871e94 100644
--- a/src/ports/SkFontHost_FreeType.cpp
+++ b/src/ports/SkFontHost_FreeType.cpp
@@ -502,7 +502,7 @@
     void generateMetrics(SkGlyph* glyph) override;
     void generateImage(const SkGlyph& glyph) override;
     bool generatePath(SkGlyphID glyphID, SkPath* path) override;
-    void generateFontMetrics(SkPaint::FontMetrics*) override;
+    void generateFontMetrics(SkFontMetrics*) override;
     SkUnichar generateGlyphToChar(uint16_t glyph) override;
 
 private:
@@ -1388,7 +1388,7 @@
     return true;
 }
 
-void SkScalerContext_FreeType::generateFontMetrics(SkPaint::FontMetrics* metrics) {
+void SkScalerContext_FreeType::generateFontMetrics(SkFontMetrics* metrics) {
     if (nullptr == metrics) {
         return;
     }
@@ -1416,8 +1416,8 @@
         avgCharWidth = SkIntToScalar(os2->xAvgCharWidth) / upem;
         strikeoutThickness = SkIntToScalar(os2->yStrikeoutSize) / upem;
         strikeoutPosition = -SkIntToScalar(os2->yStrikeoutPosition) / upem;
-        metrics->fFlags |= SkPaint::FontMetrics::kStrikeoutThicknessIsValid_Flag;
-        metrics->fFlags |= SkPaint::FontMetrics::kStrikeoutPositionIsValid_Flag;
+        metrics->fFlags |= SkFontMetrics::kStrikeoutThicknessIsValid_Flag;
+        metrics->fFlags |= SkFontMetrics::kStrikeoutPositionIsValid_Flag;
         if (os2->version != 0xFFFF && os2->version >= 2) {
             cap_height = SkIntToScalar(os2->sCapHeight) / upem * fScale.y();
         }
@@ -1449,8 +1449,8 @@
         underlinePosition = -SkIntToScalar(face->underline_position +
                                            face->underline_thickness / 2) / upem;
 
-        metrics->fFlags |= SkPaint::FontMetrics::kUnderlineThicknessIsValid_Flag;
-        metrics->fFlags |= SkPaint::FontMetrics::kUnderlinePositionIsValid_Flag;
+        metrics->fFlags |= SkFontMetrics::kUnderlineThicknessIsValid_Flag;
+        metrics->fFlags |= SkFontMetrics::kUnderlinePositionIsValid_Flag;
 
         // we may be able to synthesize x_height and cap_height from outline
         if (!x_height) {
@@ -1477,15 +1477,15 @@
         ymax = ascent;
         underlineThickness = 0;
         underlinePosition = 0;
-        metrics->fFlags &= ~SkPaint::FontMetrics::kUnderlineThicknessIsValid_Flag;
-        metrics->fFlags &= ~SkPaint::FontMetrics::kUnderlinePositionIsValid_Flag;
+        metrics->fFlags &= ~SkFontMetrics::kUnderlineThicknessIsValid_Flag;
+        metrics->fFlags &= ~SkFontMetrics::kUnderlinePositionIsValid_Flag;
 
         TT_Postscript* post = (TT_Postscript*) FT_Get_Sfnt_Table(face, ft_sfnt_post);
         if (post) {
             underlineThickness = SkIntToScalar(post->underlineThickness) / upem;
             underlinePosition = -SkIntToScalar(post->underlinePosition) / upem;
-            metrics->fFlags |= SkPaint::FontMetrics::kUnderlineThicknessIsValid_Flag;
-            metrics->fFlags |= SkPaint::FontMetrics::kUnderlinePositionIsValid_Flag;
+            metrics->fFlags |= SkFontMetrics::kUnderlineThicknessIsValid_Flag;
+            metrics->fFlags |= SkFontMetrics::kUnderlinePositionIsValid_Flag;
         }
     } else {
         sk_bzero(metrics, sizeof(*metrics));
diff --git a/src/ports/SkFontHost_mac.cpp b/src/ports/SkFontHost_mac.cpp
index 8bb78a3..c0d13c2 100644
--- a/src/ports/SkFontHost_mac.cpp
+++ b/src/ports/SkFontHost_mac.cpp
@@ -905,7 +905,7 @@
     void generateMetrics(SkGlyph* glyph) override;
     void generateImage(const SkGlyph& glyph) override;
     bool generatePath(SkGlyphID glyph, SkPath* path) override;
-    void generateFontMetrics(SkPaint::FontMetrics*) override;
+    void generateFontMetrics(SkFontMetrics*) override;
 
 private:
     static void CTPathElement(void *info, const CGPathElement *element);
@@ -1460,7 +1460,7 @@
     return true;
 }
 
-void SkScalerContext_Mac::generateFontMetrics(SkPaint::FontMetrics* metrics) {
+void SkScalerContext_Mac::generateFontMetrics(SkFontMetrics* metrics) {
     if (nullptr == metrics) {
         return;
     }
@@ -1484,8 +1484,8 @@
     metrics->fUnderlinePosition = -CGToScalar( CTFontGetUnderlinePosition(fCTFont.get()));
 
     metrics->fFlags = 0;
-    metrics->fFlags |= SkPaint::FontMetrics::kUnderlineThicknessIsValid_Flag;
-    metrics->fFlags |= SkPaint::FontMetrics::kUnderlinePositionIsValid_Flag;
+    metrics->fFlags |= SkFontMetrics::kUnderlineThicknessIsValid_Flag;
+    metrics->fFlags |= SkFontMetrics::kUnderlinePositionIsValid_Flag;
 
     // See https://bugs.chromium.org/p/skia/issues/detail?id=6203
     // At least on 10.12.3 with memory based fonts the x-height is always 0.6666 of the ascent and
diff --git a/src/ports/SkFontHost_win.cpp b/src/ports/SkFontHost_win.cpp
index d0cadbe..7943597 100644
--- a/src/ports/SkFontHost_win.cpp
+++ b/src/ports/SkFontHost_win.cpp
@@ -558,7 +558,7 @@
     void generateMetrics(SkGlyph* glyph) override;
     void generateImage(const SkGlyph& glyph) override;
     bool generatePath(SkGlyphID glyph, SkPath* path) override;
-    void generateFontMetrics(SkPaint::FontMetrics*) override;
+    void generateFontMetrics(SkFontMetrics*) override;
 
 private:
     DWORD getGDIGlyphPath(SkGlyphID glyph, UINT flags,
@@ -973,7 +973,7 @@
 }
 
 static const MAT2 gMat2Identity = {{0, 1}, {0, 0}, {0, 0}, {0, 1}};
-void SkScalerContext_GDI::generateFontMetrics(SkPaint::FontMetrics* metrics) {
+void SkScalerContext_GDI::generateFontMetrics(SkFontMetrics* metrics) {
     if (nullptr == metrics) {
         return;
     }
@@ -1024,8 +1024,8 @@
     metrics->fUnderlineThickness = SkIntToScalar(otm.otmsUnderscoreSize);
     metrics->fUnderlinePosition = -SkIntToScalar(otm.otmsUnderscorePosition);
 
-    metrics->fFlags |= SkPaint::FontMetrics::kUnderlineThicknessIsValid_Flag;
-    metrics->fFlags |= SkPaint::FontMetrics::kUnderlinePositionIsValid_Flag;
+    metrics->fFlags |= SkFontMetrics::kUnderlineThicknessIsValid_Flag;
+    metrics->fFlags |= SkFontMetrics::kUnderlinePositionIsValid_Flag;
 
     metrics->fXHeight = SkIntToScalar(otm.otmsXHeight);
     GLYPHMETRICS gm;
diff --git a/src/ports/SkScalerContext_win_dw.cpp b/src/ports/SkScalerContext_win_dw.cpp
index fe31c50..a4bb208 100644
--- a/src/ports/SkScalerContext_win_dw.cpp
+++ b/src/ports/SkScalerContext_win_dw.cpp
@@ -725,7 +725,7 @@
     // fails, and try DWRITE_TEXTURE_CLEARTYPE_3x1.
 }
 
-void SkScalerContext_DW::generateFontMetrics(SkPaint::FontMetrics* metrics) {
+void SkScalerContext_DW::generateFontMetrics(SkFontMetrics* metrics) {
     if (nullptr == metrics) {
         return;
     }
@@ -757,10 +757,10 @@
     metrics->fStrikeoutThickness = fTextSizeRender * SkIntToScalar(dwfm.strikethroughThickness) / upem;
     metrics->fStrikeoutPosition = -(fTextSizeRender * SkIntToScalar(dwfm.strikethroughPosition) / upem);
 
-    metrics->fFlags |= SkPaint::FontMetrics::kUnderlineThicknessIsValid_Flag;
-    metrics->fFlags |= SkPaint::FontMetrics::kUnderlinePositionIsValid_Flag;
-    metrics->fFlags |= SkPaint::FontMetrics::kStrikeoutThicknessIsValid_Flag;
-    metrics->fFlags |= SkPaint::FontMetrics::kStrikeoutPositionIsValid_Flag;
+    metrics->fFlags |= SkFontMetrics::kUnderlineThicknessIsValid_Flag;
+    metrics->fFlags |= SkFontMetrics::kUnderlinePositionIsValid_Flag;
+    metrics->fFlags |= SkFontMetrics::kStrikeoutThicknessIsValid_Flag;
+    metrics->fFlags |= SkFontMetrics::kStrikeoutPositionIsValid_Flag;
 
     if (this->getDWriteTypeface()->fDWriteFontFace1.get()) {
         DWRITE_FONT_METRICS1 dwfm1;
diff --git a/src/ports/SkScalerContext_win_dw.h b/src/ports/SkScalerContext_win_dw.h
index 738ffb7..a462d98 100644
--- a/src/ports/SkScalerContext_win_dw.h
+++ b/src/ports/SkScalerContext_win_dw.h
@@ -33,7 +33,7 @@
     void generateMetrics(SkGlyph* glyph) override;
     void generateImage(const SkGlyph& glyph) override;
     bool generatePath(SkGlyphID glyph, SkPath* path) override;
-    void generateFontMetrics(SkPaint::FontMetrics*) override;
+    void generateFontMetrics(SkFontMetrics*) override;
 
 private:
     const void* drawDWMask(const SkGlyph& glyph,
diff --git a/src/utils/SkLua.cpp b/src/utils/SkLua.cpp
index 561953e..c5a6617 100644
--- a/src/utils/SkLua.cpp
+++ b/src/utils/SkLua.cpp
@@ -911,7 +911,7 @@
 };
 
 static int lpaint_getFontMetrics(lua_State* L) {
-    SkPaint::FontMetrics fm;
+    SkFontMetrics fm;
     SkScalar height = get_obj<SkPaint>(L, 1)->getFontMetrics(&fm);
 
     lua_newtable(L);
diff --git a/tools/fonts/SkRandomScalerContext.cpp b/tools/fonts/SkRandomScalerContext.cpp
index 076d905..7259a83 100644
--- a/tools/fonts/SkRandomScalerContext.cpp
+++ b/tools/fonts/SkRandomScalerContext.cpp
@@ -28,7 +28,7 @@
     void generateMetrics(SkGlyph*) override;
     void generateImage(const SkGlyph&) override;
     bool generatePath(SkGlyphID, SkPath*) override;
-    void generateFontMetrics(SkPaint::FontMetrics*) override;
+    void generateFontMetrics(SkFontMetrics*) override;
 
 private:
     SkRandomTypeface* getRandomTypeface() const {
@@ -140,7 +140,7 @@
     return fProxy->generatePath(glyph, path);
 }
 
-void SkRandomScalerContext::generateFontMetrics(SkPaint::FontMetrics* metrics) {
+void SkRandomScalerContext::generateFontMetrics(SkFontMetrics* metrics) {
     fProxy->getFontMetrics(metrics);
 }
 
diff --git a/tools/fonts/SkTestSVGTypeface.cpp b/tools/fonts/SkTestSVGTypeface.cpp
index b991d46..4b0d5a0 100644
--- a/tools/fonts/SkTestSVGTypeface.cpp
+++ b/tools/fonts/SkTestSVGTypeface.cpp
@@ -49,7 +49,7 @@
 
 SkTestSVGTypeface::SkTestSVGTypeface(const char* name,
                                      int upem,
-                                     const SkPaint::FontMetrics& fontMetrics,
+                                     const SkFontMetrics& fontMetrics,
                                      const SkSVGTestTypefaceGlyphData* data, int dataCount,
                                      const SkFontStyle& style)
     : SkTypeface(style, false)
@@ -95,7 +95,7 @@
     glyph->fAdvanceY = 0;
 }
 
-void SkTestSVGTypeface::getFontMetrics(SkPaint::FontMetrics* metrics) const {
+void SkTestSVGTypeface::getFontMetrics(SkFontMetrics* metrics) const {
     *metrics = fFontMetrics;
 }
 
@@ -251,7 +251,7 @@
         return false;
     }
 
-    void generateFontMetrics(SkPaint::FontMetrics* metrics) override {
+    void generateFontMetrics(SkFontMetrics* metrics) override {
         this->geTestSVGTypeface()->getFontMetrics(metrics);
         SkPaintPriv::ScaleFontMetrics(metrics, fMatrix.getScaleY());
     }
@@ -275,11 +275,11 @@
 };
 
 sk_sp<SkTestSVGTypeface> SkTestSVGTypeface::Default() {
-    SkPaint::FontMetrics metrics;
-    metrics.fFlags = SkPaint::FontMetrics::kUnderlineThicknessIsValid_Flag |
-                     SkPaint::FontMetrics::kUnderlinePositionIsValid_Flag  |
-                     SkPaint::FontMetrics::kStrikeoutThicknessIsValid_Flag |
-                     SkPaint::FontMetrics::kStrikeoutPositionIsValid_Flag;
+    SkFontMetrics metrics;
+    metrics.fFlags = SkFontMetrics::kUnderlineThicknessIsValid_Flag |
+                     SkFontMetrics::kUnderlinePositionIsValid_Flag  |
+                     SkFontMetrics::kStrikeoutThicknessIsValid_Flag |
+                     SkFontMetrics::kStrikeoutPositionIsValid_Flag;
     metrics.fTop = -800;
     metrics.fAscent = -800;
     metrics.fDescent = 200;
@@ -697,7 +697,7 @@
     }
     out->writeText("  </CBDT>\n");
 
-    SkPaint::FontMetrics fm;
+    SkFontMetrics fm;
     out->writeText("  <CBLC>\n");
     out->writeText("    <header version=\"2.0\"/>\n");
     for (size_t strikeIndex = 0; strikeIndex < SK_ARRAY_COUNT(strikeSizes); ++strikeIndex) {
diff --git a/tools/fonts/SkTestSVGTypeface.h b/tools/fonts/SkTestSVGTypeface.h
index 597ec33..906d1ed 100644
--- a/tools/fonts/SkTestSVGTypeface.h
+++ b/tools/fonts/SkTestSVGTypeface.h
@@ -47,12 +47,12 @@
 public:
     SkTestSVGTypeface(const char* name,
                       int upem,
-                      const SkPaint::FontMetrics& metrics,
+                      const SkFontMetrics& metrics,
                       const SkSVGTestTypefaceGlyphData* data, int dataCount,
                       const SkFontStyle& style);
     ~SkTestSVGTypeface() override;
     void getAdvance(SkGlyph* glyph) const;
-    void getFontMetrics(SkPaint::FontMetrics* metrics) const;
+    void getFontMetrics(SkFontMetrics* metrics) const;
 
     static sk_sp<SkTestSVGTypeface> Default();
     void exportTtxCbdt(SkWStream*) const;
@@ -135,7 +135,7 @@
     };
     SkString fName;
     int fUpem;
-    const SkPaint::FontMetrics fFontMetrics;
+    const SkFontMetrics fFontMetrics;
     std::unique_ptr<Glyph[]> fGlyphs;
     int fGlyphCount;
     SkTHashMap<SkUnichar, SkGlyphID> fCMap;
diff --git a/tools/fonts/SkTestTypeface.cpp b/tools/fonts/SkTestTypeface.cpp
index 8838586..c969c7e 100644
--- a/tools/fonts/SkTestTypeface.cpp
+++ b/tools/fonts/SkTestTypeface.cpp
@@ -107,7 +107,7 @@
     glyph->fAdvanceY = 0;
 }
 
-void SkTestTypeface::getFontMetrics(SkPaint::FontMetrics* metrics) {
+void SkTestTypeface::getFontMetrics(SkFontMetrics* metrics) {
     *metrics = fTestFont->fMetrics;
 }
 
@@ -221,7 +221,7 @@
         return true;
     }
 
-    void generateFontMetrics(SkPaint::FontMetrics* metrics) override {
+    void generateFontMetrics(SkFontMetrics* metrics) override {
         this->getTestTypeface()->getFontMetrics(metrics);
         SkPaintPriv::ScaleFontMetrics(metrics, fMatrix.getScaleY());
     }
diff --git a/tools/fonts/SkTestTypeface.h b/tools/fonts/SkTestTypeface.h
index 524a74c..cb751a0 100644
--- a/tools/fonts/SkTestTypeface.h
+++ b/tools/fonts/SkTestTypeface.h
@@ -37,7 +37,7 @@
     const SkUnichar* fCharCodes;
     const size_t fCharCodesCount;
     const SkFixed* fWidths;
-    const SkPaint::FontMetrics& fMetrics;
+    const SkFontMetrics& fMetrics;
     const char* fName;
     SkFontStyle fStyle;
 };
@@ -52,7 +52,7 @@
     const SkUnichar* fCharCodes;
     const size_t fCharCodesCount;
     const SkFixed* fWidths;
-    const SkPaint::FontMetrics& fMetrics;
+    const SkFontMetrics& fMetrics;
     const char* fName;
     SkPath** fPaths;
     friend class SkTestTypeface;
@@ -64,7 +64,7 @@
 public:
     SkTestTypeface(sk_sp<SkTestFont>, const SkFontStyle& style);
     void getAdvance(SkGlyph* glyph);
-    void getFontMetrics(SkPaint::FontMetrics* metrics);
+    void getFontMetrics(SkFontMetrics* metrics);
     void getPath(SkGlyphID glyph, SkPath* path);
 protected:
     SkScalerContext* onCreateScalerContext(const SkScalerContextEffects&,
diff --git a/tools/fonts/create_test_font.cpp b/tools/fonts/create_test_font.cpp
index 6e9f082..f782dc8 100644
--- a/tools/fonts/create_test_font.cpp
+++ b/tools/fonts/create_test_font.cpp
@@ -262,9 +262,9 @@
     fprintf(out, "const size_t %sCharCodesCount = SK_ARRAY_COUNT(%sCharCodes);\n\n",
             identifier, identifier);
 
-    SkPaint::FontMetrics metrics;
+    SkFontMetrics metrics;
     paint.getFontMetrics(&metrics);
-    fprintf(out, "const SkPaint::FontMetrics %sMetrics = {\n", identifier);
+    fprintf(out, "const SkFontMetrics %sMetrics = {\n", identifier);
     SkString metricsStr;
     metricsStr.printf("0x%08x, ", metrics.fFlags);
     output_scalar(metrics.fTop, emSize, &metricsStr);
diff --git a/tools/fonts/test_font_monospace.inc b/tools/fonts/test_font_monospace.inc
index a8292e9..bb87f93 100644
--- a/tools/fonts/test_font_monospace.inc
+++ b/tools/fonts/test_font_monospace.inc
@@ -1192,7 +1192,7 @@
 
 const size_t LiberationMonoNormalCharCodesCount = SK_ARRAY_COUNT(LiberationMonoNormalCharCodes);
 
-const SkPaint::FontMetrics LiberationMonoNormalMetrics = {
+const SkFontMetrics LiberationMonoNormalMetrics = {
 0x0000000f, -0.83252f, -0.83252f, 0.300293f, 0.300293f, 0, 0.600098f, 0.633301f, -0.0244141f,
 0.608887f, 0.52832f, 0.658691f, 0.0410156f, 0.23291f, 0.0498047f, -0.258789f
 };
@@ -2342,7 +2342,7 @@
 
 const size_t LiberationMonoBoldCharCodesCount = SK_ARRAY_COUNT(LiberationMonoBoldCharCodes);
 
-const SkPaint::FontMetrics LiberationMonoBoldMetrics = {
+const SkFontMetrics LiberationMonoBoldMetrics = {
 0x0000000f, -0.833496f, -0.833496f, 0.300293f, 0.300293f, 0, 0.600098f, 0.641602f, -0.0268555f,
 0.614746f, 0.52832f, 0.658691f, 0.100098f, 0.23291f, 0.0498047f, -0.258789f
 };
@@ -3608,7 +3608,7 @@
 
 const size_t LiberationMonoItalicCharCodesCount = SK_ARRAY_COUNT(LiberationMonoItalicCharCodes);
 
-const SkPaint::FontMetrics LiberationMonoItalicMetrics = {
+const SkFontMetrics LiberationMonoItalicMetrics = {
 0x0000000f, -0.833496f, -0.833496f, 0.300293f, 0.300293f, 0, 0.600098f, 0.798828f, -0.0942383f,
 0.70459f, 0.52832f, 0.658691f, 0.0410156f, 0.23291f, 0.0498047f, -0.258789f
 };
@@ -4841,7 +4841,7 @@
 
 const size_t LiberationMonoBoldItalicCharCodesCount = SK_ARRAY_COUNT(LiberationMonoBoldItalicCharCodes);
 
-const SkPaint::FontMetrics LiberationMonoBoldItalicMetrics = {
+const SkFontMetrics LiberationMonoBoldItalicMetrics = {
 0x0000000f, -0.83252f, -0.83252f, 0.300293f, 0.300293f, 0, 0.600098f, 0.791992f, -0.0942383f,
 0.697754f, 0.52832f, 0.658691f, 0.100098f, 0.23291f, 0.0498047f, -0.258789f
 };
diff --git a/tools/fonts/test_font_sans_serif.inc b/tools/fonts/test_font_sans_serif.inc
index 7ddcd07..b53da19 100644
--- a/tools/fonts/test_font_sans_serif.inc
+++ b/tools/fonts/test_font_sans_serif.inc
@@ -1186,7 +1186,7 @@
 
 const size_t LiberationSansNormalCharCodesCount = SK_ARRAY_COUNT(LiberationSansNormalCharCodes);
 
-const SkPaint::FontMetrics LiberationSansNormalMetrics = {
+const SkFontMetrics LiberationSansNormalMetrics = {
 0x0000000f, -0.910156f, -0.905273f, 0.211914f, 0.303223f, 0.0327148f, 0.589355f, 1.25342f,
 -0.203125f, 1.05029f, 0.52832f, 0.687988f, 0.0732422f, 0.105957f, 0.0498047f, -0.258789f
 };
@@ -2350,7 +2350,7 @@
 
 const size_t LiberationSansBoldCharCodesCount = SK_ARRAY_COUNT(LiberationSansBoldCharCodes);
 
-const SkPaint::FontMetrics LiberationSansBoldMetrics = {
+const SkFontMetrics LiberationSansBoldMetrics = {
 0x0000000f, -1.0332f, -0.905273f, 0.211914f, 0.303223f, 0.0327148f, 0.612305f, 1.24609f,
 -0.184082f, 1.06201f, 0.52832f, 0.687988f, 0.10498f, 0.105957f, 0.0498047f, -0.258789f
 };
@@ -3591,7 +3591,7 @@
 
 const size_t LiberationSansItalicCharCodesCount = SK_ARRAY_COUNT(LiberationSansItalicCharCodes);
 
-const SkPaint::FontMetrics LiberationSansItalicMetrics = {
+const SkFontMetrics LiberationSansItalicMetrics = {
 0x0000000f, -1.01416f, -0.905273f, 0.211914f, 0.303223f, 0.0327148f, 0.590332f, 1.33447f,
 -0.271973f, 1.0625f, 0.52832f, 0.687988f, 0.0732422f, 0.105957f, 0.0498047f, -0.258789f
 };
@@ -4851,7 +4851,7 @@
 
 const size_t LiberationSansBoldItalicCharCodesCount = SK_ARRAY_COUNT(LiberationSansBoldItalicCharCodes);
 
-const SkPaint::FontMetrics LiberationSansBoldItalicMetrics = {
+const SkFontMetrics LiberationSansBoldItalicMetrics = {
 0x0000000f, -1.02979f, -0.905273f, 0.211914f, 0.303223f, 0.0327148f, 0.61377f, 1.3374f,
 -0.208984f, 1.12842f, 0.52832f, 0.687988f, 0.10498f, 0.105957f, 0.0498047f, -0.258789f
 };
diff --git a/tools/fonts/test_font_serif.inc b/tools/fonts/test_font_serif.inc
index fa769f6..816e094 100644
--- a/tools/fonts/test_font_serif.inc
+++ b/tools/fonts/test_font_serif.inc
@@ -1263,7 +1263,7 @@
 
 const size_t LiberationSerifNormalCharCodesCount = SK_ARRAY_COUNT(LiberationSerifNormalCharCodes);
 
-const SkPaint::FontMetrics LiberationSerifNormalMetrics = {
+const SkFontMetrics LiberationSerifNormalMetrics = {
 0x0000000f, -0.981445f, -0.891113f, 0.216309f, 0.303223f, 0.0424805f, 0.567383f, 1.18359f,
 -0.176758f, 1.00684f, 0.458984f, 0.654785f, 0.0488281f, 0.108887f, 0.0488281f, -0.205078f
 };
@@ -2513,7 +2513,7 @@
 
 const size_t LiberationSerifBoldCharCodesCount = SK_ARRAY_COUNT(LiberationSerifBoldCharCodes);
 
-const SkPaint::FontMetrics LiberationSerifBoldMetrics = {
+const SkFontMetrics LiberationSerifBoldMetrics = {
 0x0000000f, -1.00781f, -0.891113f, 0.216309f, 0.303223f, 0.0424805f, 0.59375f, 1.26709f,
 -0.182129f, 1.08496f, 0.458984f, 0.654785f, 0.0952148f, 0.108887f, 0.0498047f, -0.258789f
 };
@@ -3831,7 +3831,7 @@
 
 const size_t LiberationSerifItalicCharCodesCount = SK_ARRAY_COUNT(LiberationSerifItalicCharCodes);
 
-const SkPaint::FontMetrics LiberationSerifItalicMetrics = {
+const SkFontMetrics LiberationSerifItalicMetrics = {
 0x0000000f, -0.980957f, -0.891113f, 0.216309f, 0.303223f, 0.0424805f, 0.559082f, 1.26465f,
 -0.176758f, 1.08789f, 0.458984f, 0.654785f, 0.0488281f, 0.108887f, 0.0498047f, -0.258789f
 };
@@ -5143,7 +5143,7 @@
 
 const size_t LiberationSerifBoldItalicCharCodesCount = SK_ARRAY_COUNT(LiberationSerifBoldItalicCharCodes);
 
-const SkPaint::FontMetrics LiberationSerifBoldItalicMetrics = {
+const SkFontMetrics LiberationSerifBoldItalicMetrics = {
 0x0000000f, -0.980957f, -0.891113f, 0.216309f, 0.303223f, 0.0424805f, 0.578125f, 1.32861f,
 -0.178223f, 1.15039f, 0.458984f, 0.654785f, 0.0952148f, 0.108887f, 0.0498047f, -0.258789f
 };