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();