extract original paths at big size to improve precision

As part of this, start introducing more consistent factories (matching classes like SkM44)

Change-Id: I453f1856c0427b008faaed9dbba5263e53a48ce4
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/290766
Reviewed-by: Ben Wagner <bungeman@google.com>
Commit-Queue: Mike Reed <reed@google.com>
diff --git a/gm/userfont.cpp b/gm/userfont.cpp
index 55c9cf9..7be73d7 100644
--- a/gm/userfont.cpp
+++ b/gm/userfont.cpp
@@ -18,13 +18,19 @@
 static sk_sp<SkTypeface> make_tf() {
     SkCustomTypefaceBuilder builder;
     SkFont font;
-    font.setSize(1.0f);
+    const float upem = font.getTypefaceOrDefault()->getUnitsPerEm();
+
+    // request a big size, to improve precision at the fontscaler level
+    font.setSize(upem);
     font.setHinting(SkFontHinting::kNone);
 
+    // so we can scale our paths back down to 1-point
+    const SkMatrix scale = SkMatrix::Scale(1.0f/upem, 1.0f/upem);
+
     {
         SkFontMetrics metrics;
         font.getMetrics(&metrics);
-        builder.setMetrics(metrics);
+        builder.setMetrics(metrics, 1.0f/upem);
     }
 
     // Steal the first 128 chars from the default font
@@ -37,7 +43,7 @@
         font.getPath(glyph, &path);
 
         // we use the charcode to be our glyph index, since we have no cmap table
-        builder.setGlyph(index, width, path);
+        builder.setGlyph(index, width/upem, path.makeTransform(scale));
     }
 
     return builder.detach();