[canvaskit] Make font names programmatically accessible
Change-Id: I384e4f37fa274665438b523f0636bfc1856ec0ae
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/264574
Reviewed-by: Ben Wagner <bungeman@google.com>
diff --git a/modules/canvaskit/CHANGELOG.md b/modules/canvaskit/CHANGELOG.md
index 3ddc977..7ba10bb 100644
--- a/modules/canvaskit/CHANGELOG.md
+++ b/modules/canvaskit/CHANGELOG.md
@@ -6,10 +6,17 @@
## [Unreleased]
+### Added
+ - `SkFontMgr.countFamilies` and `SkFontMgr.getFamilyName` to expose the parsed font names.
+
### Changed
- SKP serialization/deserialization now available (can be disabled with the 'no_skp').
`SkPicture.DEBUGONLY_saveAsFile` renamed to `SkPicture.saveAsFile` and
`CanvasKit.MakeSkPicture` is now exposed. SKP support is not shipped to npm builds.
+ `force_serialize_skp` has been removed since it opt-out, not opt-in.
+
+### Fixed
+ - Bug that sometimes resulted in 'Cannot perform Construct on a neutered ArrayBuffer'
## [0.11.0] - 2020-01-10
diff --git a/modules/canvaskit/canvaskit_bindings.cpp b/modules/canvaskit/canvaskit_bindings.cpp
index 62af7be..4c4964c 100644
--- a/modules/canvaskit/canvaskit_bindings.cpp
+++ b/modules/canvaskit/canvaskit_bindings.cpp
@@ -1126,6 +1126,15 @@
return SkFontMgr_New_Custom_Data(datas, sizes, numFonts);
}), allow_raw_pointers())
.class_function("RefDefault", &SkFontMgr::RefDefault)
+ .function("countFamilies", &SkFontMgr::countFamilies)
+ .function("getFamilyName", optional_override([](SkFontMgr& self, int index)->JSString {
+ if (index < 0 || index >= self.countFamilies()) {
+ return emscripten::val::null();
+ }
+ SkString s;
+ self.getFamilyName(index, &s);
+ return emscripten::val(s.c_str());
+ }))
#ifdef SK_DEBUG
.function("dumpFamilies", optional_override([](SkFontMgr& self) {
int numFam = self.countFamilies();
@@ -1137,7 +1146,6 @@
}
}))
#endif
- .function("countFamilies", &SkFontMgr::countFamilies)
.function("_makeTypefaceFromData", optional_override([](SkFontMgr& self,
uintptr_t /* uint8_t* */ fPtr,
int flen)->sk_sp<SkTypeface> {
diff --git a/modules/canvaskit/externs.js b/modules/canvaskit/externs.js
index a824464..9e53f45 100644
--- a/modules/canvaskit/externs.js
+++ b/modules/canvaskit/externs.js
@@ -255,6 +255,7 @@
FromData: function() {},
RefDefault: function() {},
countFamilies: function() {},
+ getFamilyName: function() {},
// private API
_makeTypefaceFromData: function() {},
diff --git a/modules/canvaskit/tests/font.spec.js b/modules/canvaskit/tests/font.spec.js
index 2cf748a..aacff8c 100644
--- a/modules/canvaskit/tests/font.spec.js
+++ b/modules/canvaskit/tests/font.spec.js
@@ -1,4 +1,4 @@
-describe('CanvasKit\'s Path Behavior', function() {
+describe('CanvasKit\'s Font Behavior', function() {
let container = document.createElement('div');
document.body.appendChild(container);
const CANVAS_WIDTH = 600;
diff --git a/modules/canvaskit/tests/paragraph.spec.js b/modules/canvaskit/tests/paragraph.spec.js
index c6b437e..71dfa68 100644
--- a/modules/canvaskit/tests/paragraph.spec.js
+++ b/modules/canvaskit/tests/paragraph.spec.js
@@ -51,6 +51,8 @@
paint.setStyle(CanvasKit.PaintStyle.Stroke);
const fontMgr = CanvasKit.SkFontMgr.FromData(notoSerifFontBuffer);
+ expect(fontMgr.countFamilies()).toEqual(1);
+ expect(fontMgr.getFamilyName(0)).toEqual('Noto Serif');
const wrapTo = 200;
@@ -218,9 +220,9 @@
const canvas = surface.getCanvas();
const fontMgr = CanvasKit.SkFontMgr.FromData([notoSerifFontBuffer, emojiFontBuffer]);
- if (fontMgr.dumpFamilies) {
- fontMgr.dumpFamilies();
- }
+ expect(fontMgr.countFamilies()).toEqual(2);
+ expect(fontMgr.getFamilyName(0)).toEqual('Noto Serif');
+ expect(fontMgr.getFamilyName(1)).toEqual('Noto Color Emoji');
const wrapTo = 450;