| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * Copyright 2014 Google Inc. | 2  * Copyright 2014 Google Inc. | 
| 3  * | 3  * | 
| 4  * Use of this source code is governed by a BSD-style license that can be | 4  * Use of this source code is governed by a BSD-style license that can be | 
| 5  * found in the LICENSE file. | 5  * found in the LICENSE file. | 
| 6  */ | 6  */ | 
| 7 | 7 | 
| 8 #include "SkDataTable.h" | 8 #include "SkDataTable.h" | 
| 9 #include "SkFontMgr.h" | 9 #include "SkFontMgr.h" | 
| 10 #include "SkFontMgr_indirect.h" | 10 #include "SkFontMgr_indirect.h" | 
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 168     SkOnce(&fFamilyNamesInited, &fFamilyNamesMutex, SkFontMgr_Indirect::set_up_f
     amily_names, this); | 168     SkOnce(&fFamilyNamesInited, &fFamilyNamesMutex, SkFontMgr_Indirect::set_up_f
     amily_names, this); | 
| 169     if (index >= fFamilyNames->count()) { | 169     if (index >= fFamilyNames->count()) { | 
| 170         familyName->reset(); | 170         familyName->reset(); | 
| 171         return; | 171         return; | 
| 172     } | 172     } | 
| 173     familyName->set(fFamilyNames->atStr(index)); | 173     familyName->set(fFamilyNames->atStr(index)); | 
| 174 } | 174 } | 
| 175 | 175 | 
| 176 SkFontStyleSet* SkFontMgr_Indirect::onCreateStyleSet(int index) const { | 176 SkFontStyleSet* SkFontMgr_Indirect::onCreateStyleSet(int index) const { | 
| 177     SkRemotableFontIdentitySet* set = fProxy->getIndex(index); | 177     SkRemotableFontIdentitySet* set = fProxy->getIndex(index); | 
| 178     if (NULL == set) { | 178     if (nullptr == set) { | 
| 179         return NULL; | 179         return nullptr; | 
| 180     } | 180     } | 
| 181     return new SkStyleSet_Indirect(this, index, set); | 181     return new SkStyleSet_Indirect(this, index, set); | 
| 182 } | 182 } | 
| 183 | 183 | 
| 184 SkFontStyleSet* SkFontMgr_Indirect::onMatchFamily(const char familyName[]) const
      { | 184 SkFontStyleSet* SkFontMgr_Indirect::onMatchFamily(const char familyName[]) const
      { | 
| 185     return new SkStyleSet_Indirect(this, -1, fProxy->matchName(familyName)); | 185     return new SkStyleSet_Indirect(this, -1, fProxy->matchName(familyName)); | 
| 186 } | 186 } | 
| 187 | 187 | 
| 188 SkTypeface* SkFontMgr_Indirect::createTypefaceFromFontId(const SkFontIdentity& i
     d) const { | 188 SkTypeface* SkFontMgr_Indirect::createTypefaceFromFontId(const SkFontIdentity& i
     d) const { | 
| 189     if (id.fDataId == SkFontIdentity::kInvalidDataId) { | 189     if (id.fDataId == SkFontIdentity::kInvalidDataId) { | 
| 190         return NULL; | 190         return nullptr; | 
| 191     } | 191     } | 
| 192 | 192 | 
| 193     SkAutoMutexAcquire ama(fDataCacheMutex); | 193     SkAutoMutexAcquire ama(fDataCacheMutex); | 
| 194 | 194 | 
| 195     SkAutoTUnref<SkTypeface> dataTypeface; | 195     SkAutoTUnref<SkTypeface> dataTypeface; | 
| 196     int dataTypefaceIndex = 0; | 196     int dataTypefaceIndex = 0; | 
| 197     for (int i = 0; i < fDataCache.count(); ++i) { | 197     for (int i = 0; i < fDataCache.count(); ++i) { | 
| 198         const DataEntry& entry = fDataCache[i]; | 198         const DataEntry& entry = fDataCache[i]; | 
| 199         if (entry.fDataId == id.fDataId) { | 199         if (entry.fDataId == id.fDataId) { | 
| 200             if (entry.fTtcIndex == id.fTtcIndex && | 200             if (entry.fTtcIndex == id.fTtcIndex && | 
| 201                 !entry.fTypeface->weak_expired() && entry.fTypeface->try_ref()) | 201                 !entry.fTypeface->weak_expired() && entry.fTypeface->try_ref()) | 
| 202             { | 202             { | 
| 203                 return entry.fTypeface; | 203                 return entry.fTypeface; | 
| 204             } | 204             } | 
| 205             if (dataTypeface.get() == NULL && | 205             if (dataTypeface.get() == nullptr && | 
| 206                 !entry.fTypeface->weak_expired() && entry.fTypeface->try_ref()) | 206                 !entry.fTypeface->weak_expired() && entry.fTypeface->try_ref()) | 
| 207             { | 207             { | 
| 208                 dataTypeface.reset(entry.fTypeface); | 208                 dataTypeface.reset(entry.fTypeface); | 
| 209                 dataTypefaceIndex = entry.fTtcIndex; | 209                 dataTypefaceIndex = entry.fTtcIndex; | 
| 210             } | 210             } | 
| 211         } | 211         } | 
| 212 | 212 | 
| 213         if (entry.fTypeface->weak_expired()) { | 213         if (entry.fTypeface->weak_expired()) { | 
| 214             fDataCache.removeShuffle(i); | 214             fDataCache.removeShuffle(i); | 
| 215             --i; | 215             --i; | 
| 216         } | 216         } | 
| 217     } | 217     } | 
| 218 | 218 | 
| 219     // No exact match, but did find a data match. | 219     // No exact match, but did find a data match. | 
| 220     if (dataTypeface.get() != NULL) { | 220     if (dataTypeface.get() != nullptr) { | 
| 221         SkAutoTDelete<SkStreamAsset> stream(dataTypeface->openStream(NULL)); | 221         SkAutoTDelete<SkStreamAsset> stream(dataTypeface->openStream(nullptr)); | 
| 222         if (stream.get() != NULL) { | 222         if (stream.get() != nullptr) { | 
| 223             return fImpl->createFromStream(stream.detach(), dataTypefaceIndex); | 223             return fImpl->createFromStream(stream.detach(), dataTypefaceIndex); | 
| 224         } | 224         } | 
| 225     } | 225     } | 
| 226 | 226 | 
| 227     // No data match, request data and add entry. | 227     // No data match, request data and add entry. | 
| 228     SkAutoTDelete<SkStreamAsset> stream(fProxy->getData(id.fDataId)); | 228     SkAutoTDelete<SkStreamAsset> stream(fProxy->getData(id.fDataId)); | 
| 229     if (stream.get() == NULL) { | 229     if (stream.get() == nullptr) { | 
| 230         return NULL; | 230         return nullptr; | 
| 231     } | 231     } | 
| 232 | 232 | 
| 233     SkAutoTUnref<SkTypeface> typeface(fImpl->createFromStream(stream.detach(), i
     d.fTtcIndex)); | 233     SkAutoTUnref<SkTypeface> typeface(fImpl->createFromStream(stream.detach(), i
     d.fTtcIndex)); | 
| 234     if (typeface.get() == NULL) { | 234     if (typeface.get() == nullptr) { | 
| 235         return NULL; | 235         return nullptr; | 
| 236     } | 236     } | 
| 237 | 237 | 
| 238     DataEntry& newEntry = fDataCache.push_back(); | 238     DataEntry& newEntry = fDataCache.push_back(); | 
| 239     typeface->weak_ref(); | 239     typeface->weak_ref(); | 
| 240     newEntry.fDataId = id.fDataId; | 240     newEntry.fDataId = id.fDataId; | 
| 241     newEntry.fTtcIndex = id.fTtcIndex; | 241     newEntry.fTtcIndex = id.fTtcIndex; | 
| 242     newEntry.fTypeface = typeface.get();  // weak reference passed to new entry. | 242     newEntry.fTypeface = typeface.get();  // weak reference passed to new entry. | 
| 243 | 243 | 
| 244     return typeface.detach(); | 244     return typeface.detach(); | 
| 245 } | 245 } | 
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 284     bool bold = SkToBool(styleBits & SkTypeface::kBold); | 284     bool bold = SkToBool(styleBits & SkTypeface::kBold); | 
| 285     bool italic = SkToBool(styleBits & SkTypeface::kItalic); | 285     bool italic = SkToBool(styleBits & SkTypeface::kItalic); | 
| 286     SkFontStyle style = SkFontStyle(bold ? SkFontStyle::kBold_Weight | 286     SkFontStyle style = SkFontStyle(bold ? SkFontStyle::kBold_Weight | 
| 287                                          : SkFontStyle::kNormal_Weight, | 287                                          : SkFontStyle::kNormal_Weight, | 
| 288                                     SkFontStyle::kNormal_Width, | 288                                     SkFontStyle::kNormal_Width, | 
| 289                                     italic ? SkFontStyle::kItalic_Slant | 289                                     italic ? SkFontStyle::kItalic_Slant | 
| 290                                            : SkFontStyle::kUpright_Slant); | 290                                            : SkFontStyle::kUpright_Slant); | 
| 291 | 291 | 
| 292     SkAutoTUnref<SkTypeface> face(this->matchFamilyStyle(familyName, style)); | 292     SkAutoTUnref<SkTypeface> face(this->matchFamilyStyle(familyName, style)); | 
| 293 | 293 | 
| 294     if (NULL == face.get()) { | 294     if (nullptr == face.get()) { | 
| 295         face.reset(this->matchFamilyStyle(NULL, style)); | 295         face.reset(this->matchFamilyStyle(nullptr, style)); | 
| 296     } | 296     } | 
| 297 | 297 | 
| 298     if (NULL == face.get()) { | 298     if (nullptr == face.get()) { | 
| 299         SkFontIdentity fontId = this->fProxy->matchIndexStyle(0, style); | 299         SkFontIdentity fontId = this->fProxy->matchIndexStyle(0, style); | 
| 300         face.reset(this->createTypefaceFromFontId(fontId)); | 300         face.reset(this->createTypefaceFromFontId(fontId)); | 
| 301     } | 301     } | 
| 302 | 302 | 
| 303     return face.detach(); | 303     return face.detach(); | 
| 304 } | 304 } | 
| OLD | NEW | 
|---|