Revert "Revert "custom typeface""

Fix: const auto [...] --> auto [...]

This reverts commit 0066adefa97dccddf75a73d0cecf2cf7374cd146.

Change-Id: I5d2df8bcc2bc681259a55b2b851d53fb18599287
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/288550
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Reed <reed@google.com>
diff --git a/gm/userfont.cpp b/gm/userfont.cpp
new file mode 100644
index 0000000..c803373
--- /dev/null
+++ b/gm/userfont.cpp
@@ -0,0 +1,89 @@
+/*
+ * Copyright 2020 Google LLC
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "gm/gm.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkFont.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPath.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkString.h"
+#include "include/utils/SkCustomTypeface.h"
+#include "tools/Resources.h"
+
+static sk_sp<SkTypeface> make_tf() {
+    SkCustomTypefaceBuilder builder(128);
+    SkFont font;
+    font.setSize(1.0f);
+    font.setHinting(SkFontHinting::kNone);
+
+    // Steal the first 128 chars from the default font
+    for (SkGlyphID index = 0; index <= 127; ++index) {
+        SkGlyphID glyph = font.unicharToGlyph(index);
+
+        SkScalar width;
+        font.getWidths(&glyph, 1, &width);
+        SkPath path;
+        font.getPath(glyph, &path);
+
+        // we use the charcode to be our glyph index, since we have no cmap table
+        builder.setGlyph(index, width, path);
+    }
+
+    return builder.detach();
+}
+
+#include "include/core/SkTextBlob.h"
+
+class UserFontGM : public skiagm::GM {
+    sk_sp<SkTypeface> fTF;
+    sk_sp<SkTextBlob> fBlob;
+
+    SkPath fPath;
+public:
+    UserFontGM() {}
+
+    void onOnceBeforeDraw() override {
+        fTF = make_tf();
+
+        SkFont font(fTF);
+        font.setSize(100);
+        font.setEdging(SkFont::Edging::kAntiAlias);
+
+        std::vector<SkGlyphID> array;
+        auto expand8to16 = [&](const char str[]) {
+            for (int i = 0; str[i]; ++i) {
+                array.push_back(str[i]);
+            }
+        };
+
+        expand8to16("User Typeface");
+        fBlob = SkTextBlob::MakeFromText(array.data(), array.size() * sizeof(SkGlyphID),
+                                         font, SkTextEncoding::kGlyphID);
+
+    }
+
+    bool runAsBench() const override { return true; }
+
+    SkString onShortName() override { return SkString("user_typeface"); }
+
+    SkISize onISize() override { return {512, 512}; }
+
+    void onDraw(SkCanvas* canvas) override {
+        SkScalar x = 20,
+                 y = 250;
+
+        SkPaint paint;
+        paint.setStyle(SkPaint::kStroke_Style);
+        canvas->drawRect(fBlob->bounds().makeOffset(x, y), paint);
+
+        paint.setStyle(SkPaint::kFill_Style);
+        paint.setColor(SK_ColorRED);
+        canvas->drawTextBlob(fBlob, x, y, paint);
+    }
+};
+DEF_GM(return new UserFontGM;)