@@ -27,15 +27,28 @@ class JsiSkFontMgr : public JsiSkWrappingSkPtrHostObject<SkFontMgr> {
2727
2828 JsiSkFontMgr (std::shared_ptr<RNSkPlatformContext> context,
2929 sk_sp<SkFontMgr> fontMgr)
30- : JsiSkWrappingSkPtrHostObject(std::move(context), fontMgr) {}
30+ : JsiSkWrappingSkPtrHostObject(context, fontMgr),
31+ _systemFontFamilies (context->getSystemFontFamilies ()) {}
3132
32- JSI_HOST_FUNCTION (countFamilies) { return getObject ()->countFamilies (); }
33+ JSI_HOST_FUNCTION (countFamilies) {
34+ return static_cast <int >(getObject ()->countFamilies () +
35+ _systemFontFamilies.size ());
36+ }
3337
3438 JSI_HOST_FUNCTION (getFamilyName) {
3539 auto i = static_cast <int >(arguments[0 ].asNumber ());
36- SkString name;
37- getObject ()->getFamilyName (i, &name);
38- return jsi::String::createFromUtf8 (runtime, name.c_str ());
40+ auto baseFamilyCount = getObject ()->countFamilies ();
41+ if (i < baseFamilyCount) {
42+ SkString name;
43+ getObject ()->getFamilyName (i, &name);
44+ return jsi::String::createFromUtf8 (runtime, name.c_str ());
45+ }
46+ auto systemIndex = i - baseFamilyCount;
47+ if (systemIndex < static_cast <int >(_systemFontFamilies.size ())) {
48+ return jsi::String::createFromUtf8 (runtime,
49+ _systemFontFamilies[systemIndex]);
50+ }
51+ return jsi::String::createFromUtf8 (runtime, " " );
3952 }
4053
4154 JSI_HOST_FUNCTION (matchFamilyStyle) {
@@ -55,6 +68,9 @@ class JsiSkFontMgr : public JsiSkWrappingSkPtrHostObject<SkFontMgr> {
5568 JSI_EXPORT_FUNCTIONS (JSI_EXPORT_FUNC(JsiSkFontMgr, countFamilies),
5669 JSI_EXPORT_FUNC(JsiSkFontMgr, getFamilyName),
5770 JSI_EXPORT_FUNC(JsiSkFontMgr, matchFamilyStyle))
71+
72+ private:
73+ std::vector<std::string> _systemFontFamilies;
5874};
5975
6076} // namespace RNSkia
0 commit comments