| Index: src/ports/SkFontMgr_android.cpp
|
| diff --git a/src/ports/SkFontMgr_android.cpp b/src/ports/SkFontMgr_android.cpp
|
| index 94d114d07a48bd2e78f3c251afac0d4e0aa9272b..7ac182f88c5474b63c38e76b80551f1c2f7827af 100644
|
| --- a/src/ports/SkFontMgr_android.cpp
|
| +++ b/src/ports/SkFontMgr_android.cpp
|
| @@ -301,7 +301,7 @@ public:
|
| families, base, custom->fFontsXml, custom->fFallbackFontsXml);
|
| }
|
| this->buildNameToFamilyMap(families, custom ? custom->fIsolated : false);
|
| - this->findDefaultFont();
|
| + this->findDefaultStyleSet();
|
| families.deleteAll();
|
| }
|
|
|
| @@ -355,10 +355,10 @@ protected:
|
|
|
| virtual SkTypeface* onMatchFaceStyle(const SkTypeface* typeface,
|
| const SkFontStyle& style) const override {
|
| - for (int i = 0; i < fFontStyleSets.count(); ++i) {
|
| - for (int j = 0; j < fFontStyleSets[i]->fStyles.count(); ++j) {
|
| - if (fFontStyleSets[i]->fStyles[j] == typeface) {
|
| - return fFontStyleSets[i]->matchStyle(style);
|
| + for (int i = 0; i < fStyleSets.count(); ++i) {
|
| + for (int j = 0; j < fStyleSets[i]->fStyles.count(); ++j) {
|
| + if (fStyleSets[i]->fStyles[j] == typeface) {
|
| + return fStyleSets[i]->matchStyle(style);
|
| }
|
| }
|
| }
|
| @@ -366,7 +366,7 @@ protected:
|
| }
|
|
|
| static sk_sp<SkTypeface_AndroidSystem> find_family_style_character(
|
| - const SkTDArray<NameToFamily>& fallbackNameToFamilyMap,
|
| + const SkTArray<NameToFamily, true>& fallbackNameToFamilyMap,
|
| const SkFontStyle& style, bool elegant,
|
| const SkString& langTag, SkUnichar character)
|
| {
|
| @@ -496,7 +496,7 @@ protected:
|
| // default family instead.
|
| return this->onMatchFamilyStyle(familyName, style);
|
| }
|
| - return fDefaultFamily->matchStyle(style);
|
| + return fDefaultStyleSet->matchStyle(style);
|
| }
|
|
|
|
|
| @@ -504,18 +504,17 @@ private:
|
|
|
| SkTypeface_FreeType::Scanner fScanner;
|
|
|
| - SkTArray<SkAutoTUnref<SkFontStyleSet_Android>, true> fFontStyleSets;
|
| - SkFontStyleSet* fDefaultFamily;
|
| - SkTypeface* fDefaultTypeface;
|
| + SkTArray<sk_sp<SkFontStyleSet_Android>, true> fStyleSets;
|
| + sk_sp<SkFontStyleSet> fDefaultStyleSet;
|
|
|
| - SkTDArray<NameToFamily> fNameToFamilyMap;
|
| - SkTDArray<NameToFamily> fFallbackNameToFamilyMap;
|
| + SkTArray<NameToFamily, true> fNameToFamilyMap;
|
| + SkTArray<NameToFamily, true> fFallbackNameToFamilyMap;
|
|
|
| void buildNameToFamilyMap(SkTDArray<FontFamily*> families, const bool isolated) {
|
| for (int i = 0; i < families.count(); i++) {
|
| FontFamily& family = *families[i];
|
|
|
| - SkTDArray<NameToFamily>* nameToFamily = &fNameToFamilyMap;
|
| + SkTArray<NameToFamily, true>* nameToFamily = &fNameToFamilyMap;
|
| if (family.fIsFallbackFont) {
|
| nameToFamily = &fFallbackNameToFamilyMap;
|
|
|
| @@ -525,44 +524,33 @@ private:
|
| }
|
| }
|
|
|
| - SkFontStyleSet_Android* newSet = new SkFontStyleSet_Android(family, fScanner, isolated);
|
| + sk_sp<SkFontStyleSet_Android> newSet =
|
| + sk_make_sp<SkFontStyleSet_Android>(family, fScanner, isolated);
|
| if (0 == newSet->count()) {
|
| - delete newSet;
|
| continue;
|
| }
|
| - fFontStyleSets.push_back().reset(newSet);
|
|
|
| - for (int j = 0; j < family.fNames.count(); j++) {
|
| - NameToFamily* nextEntry = nameToFamily->append();
|
| - new (&nextEntry->name) SkString(family.fNames[j]);
|
| - nextEntry->styleSet = newSet;
|
| + for (const SkString& name : family.fNames) {
|
| + nameToFamily->emplace_back(NameToFamily{name, newSet.get()});
|
| }
|
| + fStyleSets.emplace_back(std::move(newSet));
|
| }
|
| }
|
|
|
| - void findDefaultFont() {
|
| - SkASSERT(!fFontStyleSets.empty());
|
| + void findDefaultStyleSet() {
|
| + SkASSERT(!fStyleSets.empty());
|
|
|
| - static const char* gDefaultNames[] = { "sans-serif" };
|
| - for (size_t i = 0; i < SK_ARRAY_COUNT(gDefaultNames); ++i) {
|
| - SkFontStyleSet* set = this->onMatchFamily(gDefaultNames[i]);
|
| - if (nullptr == set) {
|
| - continue;
|
| - }
|
| - SkTypeface* tf = set->matchStyle(SkFontStyle());
|
| - if (nullptr == tf) {
|
| - continue;
|
| + static const char* defaultNames[] = { "sans-serif" };
|
| + for (const char* defaultName : defaultNames) {
|
| + fDefaultStyleSet.reset(this->onMatchFamily(defaultName));
|
| + if (fDefaultStyleSet) {
|
| + break;
|
| }
|
| - fDefaultFamily = set;
|
| - fDefaultTypeface = tf;
|
| - break;
|
| }
|
| - if (nullptr == fDefaultTypeface) {
|
| - fDefaultFamily = fFontStyleSets[0];
|
| - fDefaultTypeface = fDefaultFamily->createTypeface(0);
|
| + if (nullptr == fDefaultStyleSet) {
|
| + fDefaultStyleSet = fStyleSets[0];
|
| }
|
| - SkASSERT(fDefaultFamily);
|
| - SkASSERT(fDefaultTypeface);
|
| + SkASSERT(fDefaultStyleSet);
|
| }
|
|
|
| typedef SkFontMgr INHERITED;
|
|
|