Changeset 188853 in webkit
- Timestamp:
- Aug 24, 2015 1:06:00 AM (9 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r188851 r188853 1 2015-08-24 Myles C. Maxfield <mmaxfield@apple.com> 2 3 @font-face related cleanup 4 https://bugs.webkit.org/show_bug.cgi?id=148355 5 6 Reviewed by Darin Adler. 7 8 This patch cleans up much of our code related to web fonts. In general, it 9 migrates to using C++ for-each style loops, uses Ref instead of RefPtr when 10 things can't be nullptr, migrates to C++ Rvalue-references instead of 11 PassRefPtr, and refactors CSSFontSelector::addFontFaceRule() to use helper 12 functions. 13 14 No new tests because there is no behavior change. 15 16 * css/CSSFontFace.cpp: 17 (WebCore::CSSFontFace::fontLoaded): Use a C++ for-each loop. 18 * css/CSSFontFace.h: 19 (WebCore::CSSFontFace::create): Use C++ Rvalue-references instead of 20 PassRefPtr. 21 (WebCore::CSSFontFace::CSSFontFace): Ditto. 22 * css/CSSFontSelector.cpp: 23 (WebCore::computeTraitsMask): Migrated a chunk of 24 CSSFontSelector::addFontFaceRule() into this helper function. 25 (WebCore::createFontFace): Ditto. 26 (WebCore::familyNameFromPrimitive): Ditto. 27 (WebCore::CSSFontSelector::addFontFaceRule): Call the newly-created helper 28 functions. In addition, migrate to Refs instead of RefPtrs. 29 (WebCore::compareFontFaces): Migrate to references instead of pointers. 30 (WebCore::CSSFontSelector::getFontFace): Migrate to Refs instead of 31 RefPtrs. Also use C++ for-each loops. 32 * css/CSSFontSelector.h: 33 * css/CSSSegmentedFontFace.cpp: 34 (WebCore::CSSSegmentedFontFace::~CSSSegmentedFontFace): Use C++ for-each 35 loops. 36 (WebCore::CSSSegmentedFontFace::isValid): Ditto. 37 (WebCore::CSSSegmentedFontFace::appendFontFace): Migrate to Rvalue- 38 references instead of PassRefPtr. 39 * css/CSSSegmentedFontFace.h: 40 * platform/graphics/FontCache.h: 41 * platform/graphics/cocoa/FontCacheCoreText.cpp: 42 (WebCore::FontCache::getTraitsInFamily): Return the result instead of being 43 passed an out parameter. 44 * platform/graphics/freetype/FontCacheFreeType.cpp: 45 (WebCore::FontCache::getTraitsInFamily): Ditto. 46 * platform/graphics/win/FontCacheWin.cpp: 47 (WebCore::traitsInFamilyEnumProc): Ditto. 48 (WebCore::FontCache::getTraitsInFamily): Ditto. 49 1 50 2015-08-23 Andy Estes <aestes@apple.com> 2 51 -
trunk/Source/WebCore/css/CSSFontFace.cpp
r178940 r188853 99 99 #endif 100 100 101 HashSet<CSSSegmentedFontFace*>::iterator end = m_segmentedFontFaces.end(); 102 for (HashSet<CSSSegmentedFontFace*>::iterator it = m_segmentedFontFaces.begin(); it != end; ++it) 103 (*it)->fontLoaded(this); 101 for (auto* face : m_segmentedFontFaces) 102 face->fontLoaded(this); 104 103 105 104 #if ENABLE(FONT_LOAD_EVENTS) -
trunk/Source/WebCore/css/CSSFontFace.h
r185238 r188853 45 45 class CSSFontFace : public RefCounted<CSSFontFace> { 46 46 public: 47 static Ref<CSSFontFace> create(FontTraitsMask traitsMask, PassRefPtr<CSSFontFaceRule> rule, bool isLocalFallback = false) { return adoptRef(*new CSSFontFace(traitsMask, rule, isLocalFallback)); }47 static Ref<CSSFontFace> create(FontTraitsMask traitsMask, RefPtr<CSSFontFaceRule>&& rule, bool isLocalFallback = false) { return adoptRef(*new CSSFontFace(traitsMask, WTF::move(rule), isLocalFallback)); } 48 48 49 49 FontTraitsMask traitsMask() const { return m_traitsMask; } … … 93 93 94 94 private: 95 CSSFontFace(FontTraitsMask traitsMask, PassRefPtr<CSSFontFaceRule>rule, bool isLocalFallback)95 CSSFontFace(FontTraitsMask traitsMask, RefPtr<CSSFontFaceRule>&& rule, bool isLocalFallback) 96 96 : m_traitsMask(traitsMask) 97 97 , m_activeSource(0) -
trunk/Source/WebCore/css/CSSFontSelector.cpp
r187569 r188853 85 85 } 86 86 87 void CSSFontSelector::addFontFaceRule(const StyleRuleFontFace* fontFaceRule, bool isInitiatingElementInUserAgentShadowTree) 88 { 89 // Obtain the font-family property and the src property. Both must be defined. 90 const StyleProperties& style = fontFaceRule->properties(); 91 RefPtr<CSSValue> fontFamily = style.getPropertyCSSValue(CSSPropertyFontFamily); 92 RefPtr<CSSValue> src = style.getPropertyCSSValue(CSSPropertySrc); 93 RefPtr<CSSValue> unicodeRange = style.getPropertyCSSValue(CSSPropertyUnicodeRange); 94 if (!is<CSSValueList>(fontFamily.get()) || !is<CSSValueList>(src.get()) || (unicodeRange && !is<CSSValueList>(*unicodeRange))) 95 return; 96 97 CSSValueList& familyList = downcast<CSSValueList>(*fontFamily); 98 if (!familyList.length()) 99 return; 100 101 CSSValueList& srcList = downcast<CSSValueList>(*src); 102 if (!srcList.length()) 103 return; 104 105 CSSValueList* rangeList = downcast<CSSValueList>(unicodeRange.get()); 106 87 static Optional<FontTraitsMask> computeTraitsMask(const StyleProperties& style) 88 { 107 89 unsigned traitsMask = 0; 108 90 109 91 if (RefPtr<CSSValue> fontStyle = style.getPropertyCSSValue(CSSPropertyFontStyle)) { 110 92 if (!is<CSSPrimitiveValue>(*fontStyle)) 111 return ;93 return Nullopt; 112 94 113 95 switch (downcast<CSSPrimitiveValue>(*fontStyle).getValueID()) { … … 127 109 if (RefPtr<CSSValue> fontWeight = style.getPropertyCSSValue(CSSPropertyFontWeight)) { 128 110 if (!is<CSSPrimitiveValue>(*fontWeight)) 129 return ;111 return Nullopt; 130 112 131 113 switch (downcast<CSSPrimitiveValue>(*fontWeight).getValueID()) { … … 172 154 fontVariant = list.releaseNonNull(); 173 155 } else if (!is<CSSValueList>(*fontVariant)) 174 return ;156 return Nullopt; 175 157 176 158 CSSValueList& variantList = downcast<CSSValueList>(*fontVariant); 177 159 unsigned numVariants = variantList.length(); 178 160 if (!numVariants) 179 return ;161 return Nullopt; 180 162 181 163 for (unsigned i = 0; i < numVariants; ++i) { … … 194 176 traitsMask |= FontVariantMask; 195 177 196 // Each item in the src property's list is a single CSSFontFaceSource. Put them all into a CSSFontFace. 197 RefPtr<CSSFontFace> fontFace; 178 return static_cast<FontTraitsMask>(traitsMask); 179 } 180 181 static Ref<CSSFontFace> createFontFace(CSSValueList& srcList, FontTraitsMask traitsMask, Document* document, const StyleRuleFontFace* fontFaceRule, bool isInitiatingElementInUserAgentShadowTree) 182 { 183 RefPtr<CSSFontFaceRule> rule; 184 #if ENABLE(FONT_LOAD_EVENTS) 185 // FIXME: https://bugs.webkit.org/show_bug.cgi?id=112116 - This CSSFontFaceRule has no parent. 186 if (RuntimeEnabledFeatures::sharedFeatures().fontLoadEventsEnabled()) 187 rule = static_pointer_cast<CSSFontFaceRule>(fontFaceRule->createCSSOMWrapper()); 188 #else 189 UNUSED_PARAM(fontFaceRule); 190 #endif 191 Ref<CSSFontFace> fontFace = CSSFontFace::create(traitsMask, WTF::move(rule)); 198 192 199 193 int srcLength = srcList.length(); … … 210 204 #endif 211 205 if (!item.isLocal()) { 212 Settings* settings = m_document ? m_document->frame() ? &m_document->frame()->settings() : 0 : 0;206 Settings* settings = document ? document->frame() ? &document->frame()->settings() : 0 : 0; 213 207 bool allowDownloading = foundSVGFont || (settings && settings->downloadableBinaryFontsEnabled()); 214 if (allowDownloading && item.isSupportedFormat() && m_document) {215 CachedFont* cachedFont = item.cachedFont( m_document, foundSVGFont, isInitiatingElementInUserAgentShadowTree);208 if (allowDownloading && item.isSupportedFormat() && document) { 209 CachedFont* cachedFont = item.cachedFont(document, foundSVGFont, isInitiatingElementInUserAgentShadowTree); 216 210 if (cachedFont) { 217 211 source = std::make_unique<CSSFontFaceSource>(item.resource(), cachedFont); … … 226 220 } 227 221 228 if (!fontFace) {229 RefPtr<CSSFontFaceRule> rule;230 #if ENABLE(FONT_LOAD_EVENTS)231 // FIXME: https://bugs.webkit.org/show_bug.cgi?id=112116 - This CSSFontFaceRule has no parent.232 if (RuntimeEnabledFeatures::sharedFeatures().fontLoadEventsEnabled())233 rule = static_pointer_cast<CSSFontFaceRule>(fontFaceRule->createCSSOMWrapper());234 #endif235 fontFace = CSSFontFace::create(static_cast<FontTraitsMask>(traitsMask), rule);236 }237 238 222 if (source) { 239 223 #if ENABLE(SVG_FONTS) … … 244 228 } 245 229 246 ASSERT(fontFace); 247 248 if (fontFace && !fontFace->isValid()) 230 return fontFace; 231 } 232 233 static String familyNameFromPrimitive(const CSSPrimitiveValue& value) 234 { 235 if (value.isFontFamily()) 236 return value.fontFamily().familyName; 237 if (!value.isValueID()) 238 return { }; 239 240 // We need to use the raw text for all the generic family types, since @font-face is a way of actually 241 // defining what font to use for those types. 242 switch (value.getValueID()) { 243 case CSSValueSerif: 244 return serifFamily; 245 case CSSValueSansSerif: 246 return sansSerifFamily; 247 case CSSValueCursive: 248 return cursiveFamily; 249 case CSSValueFantasy: 250 return fantasyFamily; 251 case CSSValueMonospace: 252 return monospaceFamily; 253 case CSSValueWebkitPictograph: 254 return pictographFamily; 255 default: 256 return { }; 257 } 258 } 259 260 static Vector<Ref<CSSFontFace>> constructFamilyFontFaces(const String& familyName, HashMap<String, Vector<Ref<CSSFontFace>>, CaseFoldingHash>& locallyInstalledFontFaces) 261 { 262 auto result = Vector<Ref<CSSFontFace>>(); 263 264 ASSERT(!locallyInstalledFontFaces.contains(familyName)); 265 266 Vector<FontTraitsMask> traitsMasks = FontCache::singleton().getTraitsInFamily(familyName); 267 if (!traitsMasks.isEmpty()) { 268 Vector<Ref<CSSFontFace>> faces = { }; 269 for (auto mask : traitsMasks) { 270 Ref<CSSFontFace> face = CSSFontFace::create(mask, nullptr, true); 271 face->addSource(std::make_unique<CSSFontFaceSource>(familyName)); 272 ASSERT(face->isValid()); 273 faces.append(WTF::move(face)); 274 } 275 locallyInstalledFontFaces.add(familyName, WTF::move(faces)); 276 } 277 return result; 278 } 279 280 void CSSFontSelector::addFontFaceRule(const StyleRuleFontFace* fontFaceRule, bool isInitiatingElementInUserAgentShadowTree) 281 { 282 const StyleProperties& style = fontFaceRule->properties(); 283 RefPtr<CSSValue> fontFamily = style.getPropertyCSSValue(CSSPropertyFontFamily); 284 RefPtr<CSSValue> src = style.getPropertyCSSValue(CSSPropertySrc); 285 RefPtr<CSSValue> unicodeRange = style.getPropertyCSSValue(CSSPropertyUnicodeRange); 286 if (!is<CSSValueList>(fontFamily.get()) || !is<CSSValueList>(src.get()) || (unicodeRange && !is<CSSValueList>(*unicodeRange))) 287 return; 288 289 CSSValueList& familyList = downcast<CSSValueList>(*fontFamily); 290 if (!familyList.length()) 291 return; 292 293 CSSValueList& srcList = downcast<CSSValueList>(*src); 294 if (!srcList.length()) 295 return; 296 297 CSSValueList* rangeList = downcast<CSSValueList>(unicodeRange.get()); 298 299 auto computedTraitsMask = computeTraitsMask(style); 300 if (!computedTraitsMask) 301 return; 302 auto traitsMask = computedTraitsMask.value(); 303 304 Ref<CSSFontFace> fontFace = createFontFace(srcList, traitsMask, m_document, fontFaceRule, isInitiatingElementInUserAgentShadowTree); 305 if (!fontFace->isValid()) 249 306 return; 250 307 … … 257 314 } 258 315 259 // Hash under every single family name.260 316 for (auto& item : familyList) { 261 auto& value = downcast<CSSPrimitiveValue>(item.get()); 262 String familyName; 263 if (value.isFontFamily()) { 264 familyName = value.fontFamily().familyName; 265 } else if (value.isValueID()) { 266 // We need to use the raw text for all the generic family types, since @font-face is a way of actually 267 // defining what font to use for those types. 268 switch (value.getValueID()) { 269 case CSSValueSerif: 270 familyName = serifFamily; 271 break; 272 case CSSValueSansSerif: 273 familyName = sansSerifFamily; 274 break; 275 case CSSValueCursive: 276 familyName = cursiveFamily; 277 break; 278 case CSSValueFantasy: 279 familyName = fantasyFamily; 280 break; 281 case CSSValueMonospace: 282 familyName = monospaceFamily; 283 break; 284 case CSSValueWebkitPictograph: 285 familyName = pictographFamily; 286 break; 287 default: 288 break; 289 } 290 } 291 317 String familyName = familyNameFromPrimitive(downcast<CSSPrimitiveValue>(item.get())); 292 318 if (familyName.isEmpty()) 293 319 continue; 294 320 295 std::unique_ptr<Vector<RefPtr<CSSFontFace>>>& familyFontFaces = m_fontFaces.add(familyName, nullptr).iterator->value; 296 if (!familyFontFaces) { 297 familyFontFaces = std::make_unique<Vector<RefPtr<CSSFontFace>>>(); 298 299 ASSERT(!m_locallyInstalledFontFaces.contains(familyName)); 300 301 Vector<unsigned> locallyInstalledFontsTraitsMasks; 302 FontCache::singleton().getTraitsInFamily(familyName, locallyInstalledFontsTraitsMasks); 303 if (unsigned numLocallyInstalledFaces = locallyInstalledFontsTraitsMasks.size()) { 304 auto familyLocallyInstalledFaces = std::make_unique<Vector<RefPtr<CSSFontFace>>>(); 305 306 for (unsigned i = 0; i < numLocallyInstalledFaces; ++i) { 307 RefPtr<CSSFontFace> locallyInstalledFontFace = CSSFontFace::create(static_cast<FontTraitsMask>(locallyInstalledFontsTraitsMasks[i]), 0, true); 308 locallyInstalledFontFace->addSource(std::make_unique<CSSFontFaceSource>(familyName)); 309 ASSERT(locallyInstalledFontFace->isValid()); 310 familyLocallyInstalledFaces->append(locallyInstalledFontFace); 311 } 312 313 m_locallyInstalledFontFaces.set(familyName, WTF::move(familyLocallyInstalledFaces)); 314 } 315 } 316 317 familyFontFaces->append(fontFace); 321 auto addResult = m_fontFaces.add(familyName, Vector<Ref<CSSFontFace>>()); 322 auto& familyFontFaces = addResult.iterator->value; 323 if (addResult.isNewEntry) 324 familyFontFaces = constructFamilyFontFaces(familyName, m_locallyInstalledFontFaces); 325 326 familyFontFaces.append(fontFace.copyRef()); 318 327 319 328 ++m_version; … … 379 388 static FontTraitsMask desiredTraitsMaskForComparison; 380 389 381 static inline bool compareFontFaces( CSSFontFace* first, CSSFontFace*second)382 { 383 FontTraitsMask firstTraitsMask = first ->traitsMask();384 FontTraitsMask secondTraitsMask = second ->traitsMask();390 static inline bool compareFontFaces(const CSSFontFace& first, const CSSFontFace& second) 391 { 392 FontTraitsMask firstTraitsMask = first.traitsMask(); 393 FontTraitsMask secondTraitsMask = second.traitsMask(); 385 394 386 395 bool firstHasDesiredVariant = firstTraitsMask & desiredTraitsMaskForComparison & FontVariantMask; … … 391 400 392 401 // We need to check font-variant css property for CSS2.1 compatibility. 393 if ((desiredTraitsMaskForComparison & FontVariantSmallCapsMask) && !first ->isLocalFallback() && !second->isLocalFallback()) {402 if ((desiredTraitsMaskForComparison & FontVariantSmallCapsMask) && !first.isLocalFallback() && !second.isLocalFallback()) { 394 403 // Prefer a font that has indicated that it can only support small-caps to a font that claims to support 395 404 // all variants. The specialized font is more likely to be true small-caps and not require synthesis. … … 406 415 return firstHasDesiredStyle; 407 416 408 if ((desiredTraitsMaskForComparison & FontStyleItalicMask) && !first ->isLocalFallback() && !second->isLocalFallback()) {417 if ((desiredTraitsMaskForComparison & FontStyleItalicMask) && !first.isLocalFallback() && !second.isLocalFallback()) { 409 418 // Prefer a font that has indicated that it can only support italics to a font that claims to support 410 419 // all styles. The specialized font is more likely to be the one the author wants used. … … 477 486 CSSSegmentedFontFace* CSSFontSelector::getFontFace(const FontDescription& fontDescription, const AtomicString& family) 478 487 { 479 Vector<RefPtr<CSSFontFace>>* familyFontFaces = m_fontFaces.get(family); 480 if (!familyFontFaces || familyFontFaces->isEmpty()) 481 return 0; 482 483 std::unique_ptr<HashMap<unsigned, RefPtr<CSSSegmentedFontFace>>>& segmentedFontFaceCache = m_fonts.add(family, nullptr).iterator->value; 484 if (!segmentedFontFaceCache) 485 segmentedFontFaceCache = std::make_unique<HashMap<unsigned, RefPtr<CSSSegmentedFontFace>>>(); 488 auto iterator = m_fontFaces.find(family); 489 if (iterator == m_fontFaces.end()) 490 return nullptr; 491 auto& familyFontFaces = iterator->value; 492 493 auto& segmentedFontFaceCache = m_fonts.add(family, HashMap<unsigned, RefPtr<CSSSegmentedFontFace>>()).iterator->value; 486 494 487 495 FontTraitsMask traitsMask = fontDescription.traitsMask(); 488 496 489 RefPtr<CSSSegmentedFontFace>& face = segmentedFontFaceCache ->add(traitsMask, nullptr).iterator->value;497 RefPtr<CSSSegmentedFontFace>& face = segmentedFontFaceCache.add(traitsMask, nullptr).iterator->value; 490 498 if (!face) { 491 499 face = CSSSegmentedFontFace::create(this); 492 500 493 // Collect all matching faces and sort them in order of preference. 494 Vector<CSSFontFace*, 32> candidateFontFaces; 495 for (int i = familyFontFaces->size() - 1; i >= 0; --i) { 496 CSSFontFace* candidate = familyFontFaces->at(i).get(); 497 unsigned candidateTraitsMask = candidate->traitsMask(); 501 Vector<std::reference_wrapper<CSSFontFace>, 32> candidateFontFaces; 502 for (int i = familyFontFaces.size() - 1; i >= 0; --i) { 503 CSSFontFace& candidate = familyFontFaces[i]; 504 unsigned candidateTraitsMask = candidate.traitsMask(); 498 505 if ((traitsMask & FontStyleNormalMask) && !(candidateTraitsMask & FontStyleNormalMask)) 499 506 continue; … … 503 510 // For SVG Fonts that specify that they only support the "normal" variant, we will assume they are incapable 504 511 // of small-caps synthesis and just ignore the font face as a candidate. 505 if (candidate ->hasSVGFontFaceSource() && (traitsMask & FontVariantSmallCapsMask) && !(candidateTraitsMask & FontVariantSmallCapsMask))512 if (candidate.hasSVGFontFaceSource() && (traitsMask & FontVariantSmallCapsMask) && !(candidateTraitsMask & FontVariantSmallCapsMask)) 506 513 continue; 507 514 #endif … … 509 516 } 510 517 511 if (Vector<RefPtr<CSSFontFace>>* familyLocallyInstalledFontFaces = m_locallyInstalledFontFaces.get(family)) { 512 unsigned numLocallyInstalledFontFaces = familyLocallyInstalledFontFaces->size(); 513 for (unsigned i = 0; i < numLocallyInstalledFontFaces; ++i) { 514 CSSFontFace* candidate = familyLocallyInstalledFontFaces->at(i).get(); 518 auto iterator = m_locallyInstalledFontFaces.find(family); 519 if (iterator != m_locallyInstalledFontFaces.end()) { 520 for (auto& candidate : iterator->value) { 515 521 unsigned candidateTraitsMask = candidate->traitsMask(); 516 522 if ((traitsMask & FontStyleNormalMask) && !(candidateTraitsMask & FontStyleNormalMask)) … … 524 530 desiredTraitsMaskForComparison = traitsMask; 525 531 std::stable_sort(candidateFontFaces.begin(), candidateFontFaces.end(), compareFontFaces); 526 unsigned numCandidates = candidateFontFaces.size(); 527 for (unsigned i = 0; i < numCandidates; ++i) 528 face->appendFontFace(candidateFontFaces[i]); 532 for (auto& candidate : candidateFontFaces) 533 face->appendFontFace(candidate.get()); 529 534 } 530 535 return face.get(); -
trunk/Source/WebCore/css/CSSFontSelector.h
r186388 r188853 90 90 91 91 Document* m_document; 92 HashMap<String, std::unique_ptr<Vector<RefPtr<CSSFontFace>>>, CaseFoldingHash> m_fontFaces;93 HashMap<String, std::unique_ptr<Vector<RefPtr<CSSFontFace>>>, CaseFoldingHash> m_locallyInstalledFontFaces;94 HashMap<String, std::unique_ptr<HashMap<unsigned, RefPtr<CSSSegmentedFontFace>>>, CaseFoldingHash> m_fonts;92 HashMap<String, Vector<Ref<CSSFontFace>>, CaseFoldingHash> m_fontFaces; 93 HashMap<String, Vector<Ref<CSSFontFace>>, CaseFoldingHash> m_locallyInstalledFontFaces; 94 HashMap<String, HashMap<unsigned, RefPtr<CSSSegmentedFontFace>>, CaseFoldingHash> m_fonts; 95 95 HashSet<FontSelectorClient*> m_clients; 96 96 -
trunk/Source/WebCore/css/CSSSegmentedFontFace.cpp
r188114 r188853 46 46 { 47 47 pruneTable(); 48 unsigned size = m_fontFaces.size(); 49 for (unsigned i = 0; i < size; i++) 50 m_fontFaces[i]->removedFromSegmentedFontFace(this); 48 for (auto& face : m_fontFaces) 49 face->removedFromSegmentedFontFace(this); 51 50 } 52 51 … … 59 58 { 60 59 // Valid if at least one font face is valid. 61 unsigned size = m_fontFaces.size(); 62 for (unsigned i = 0; i < size; i++) { 63 if (m_fontFaces[i]->isValid()) 60 for (auto& face : m_fontFaces) { 61 if (face->isValid()) 64 62 return true; 65 63 } … … 85 83 } 86 84 87 void CSSSegmentedFontFace::appendFontFace( PassRefPtr<CSSFontFace>fontFace)85 void CSSSegmentedFontFace::appendFontFace(Ref<CSSFontFace>&& fontFace) 88 86 { 89 87 pruneTable(); 90 88 fontFace->addedToSegmentedFontFace(this); 91 m_fontFaces.append( fontFace);89 m_fontFaces.append(WTF::move(fontFace)); 92 90 } 93 91 -
trunk/Source/WebCore/css/CSSSegmentedFontFace.h
r188114 r188853 49 49 void fontLoaded(CSSFontFace*); 50 50 51 void appendFontFace( PassRefPtr<CSSFontFace>);51 void appendFontFace(Ref<CSSFontFace>&&); 52 52 53 53 FontRanges fontRanges(const FontDescription&); … … 76 76 CSSFontSelector* m_fontSelector; 77 77 HashMap<FontDescriptionKey, FontRanges, FontDescriptionKeyHash, WTF::SimpleClassHashTraits<FontDescriptionKey>> m_descriptionToRangesMap; 78 Vector<Ref Ptr<CSSFontFace>, 1> m_fontFaces;78 Vector<Ref<CSSFontFace>, 1> m_fontFaces; 79 79 #if ENABLE(FONT_LOAD_EVENTS) 80 80 Vector<RefPtr<LoadFontCallback>> m_callbacks; -
trunk/Source/WebCore/css/StyleProperties.cpp
r188619 r188853 584 584 int foundPropertyIndex = findPropertyIndex(propertyID); 585 585 if (foundPropertyIndex == -1) 586 return 0;586 return nullptr; 587 587 return propertyAt(foundPropertyIndex).value(); 588 588 } -
trunk/Source/WebCore/platform/graphics/FontCache.h
r188795 r188853 167 167 // This function exists so CSSFontSelector can have a unified notion of preinstalled fonts and @font-face. 168 168 // It comes into play when you create an @font-face which shares a family name as a preinstalled font. 169 void getTraitsInFamily(const AtomicString&, Vector<unsigned>&);169 Vector<FontTraitsMask> getTraitsInFamily(const AtomicString&); 170 170 171 171 WEBCORE_EXPORT RefPtr<Font> fontForFamily(const FontDescription&, const AtomicString&, bool checkingAlternateName = false); -
trunk/Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp
r188795 r188853 238 238 } 239 239 240 void FontCache::getTraitsInFamily(const AtomicString& familyName, Vector<unsigned>& traitsMasks)240 Vector<FontTraitsMask> FontCache::getTraitsInFamily(const AtomicString& familyName) 241 241 { 242 242 RetainPtr<CFStringRef> familyNameStr = familyName.string().createCFString(); … … 246 246 RetainPtr<CFArrayRef> matchedDescriptors = adoptCF(CTFontDescriptorCreateMatchingFontDescriptors(fontDescriptor.get(), nullptr)); 247 247 if (!matchedDescriptors) 248 return ;248 return { }; 249 249 250 250 CFIndex numMatches = CFArrayGetCount(matchedDescriptors.get()); 251 251 if (!numMatches) 252 return; 253 252 return { }; 253 254 Vector<FontTraitsMask> traitsMasks; 255 traitsMasks.reserveInitialCapacity(numMatches); 254 256 for (CFIndex i = 0; i < numMatches; ++i) { 255 257 RetainPtr<CFDictionaryRef> traits = adoptCF((CFDictionaryRef)CTFontDescriptorCopyAttribute((CTFontDescriptorRef)CFArrayGetValueAtIndex(matchedDescriptors.get(), i), kCTFontTraitsAttribute)); … … 261 263 CGFloat weight = 0; 262 264 CFNumberGetValue(weightRef, kCFNumberCGFloatType, &weight); 263 traitsMasks.append(toTraitsMask(symbolicTraits, weight)); 264 } 265 } 266 } 267 268 } 265 traitsMasks.uncheckedAppend(toTraitsMask(symbolicTraits, weight)); 266 } 267 } 268 return traitsMasks; 269 } 270 271 } -
trunk/Source/WebCore/platform/graphics/freetype/FontCacheFreeType.cpp
r187583 r188853 138 138 } 139 139 140 void FontCache::getTraitsInFamily(const AtomicString&, Vector<unsigned>&) 141 { 140 Vector<FontTraitsMask> FontCache::getTraitsInFamily(const AtomicString&) 141 { 142 return { }; 142 143 } 143 144 -
trunk/Source/WebCore/platform/graphics/win/FontCacheWin.cpp
r187249 r188853 543 543 return 1; 544 544 } 545 void FontCache::getTraitsInFamily(const AtomicString& familyName, Vector<unsigned>& traitsMasks)545 Vector<FontTraitsMask> FontCache::getTraitsInFamily(const AtomicString& familyName) 546 546 { 547 547 HWndDC hdc(0); … … 556 556 TraitsInFamilyProcData procData(familyName); 557 557 EnumFontFamiliesEx(hdc, &logFont, traitsInFamilyEnumProc, reinterpret_cast<LPARAM>(&procData), 0); 558 copyToVector(procData.m_traitsMasks, traitsMasks); 558 Vector<FontTraitsMask> result; 559 result.reserveInitialCapacity(procData.m_traitsMasks.size()); 560 for (unsigned mask : procData.m_traitsMasks) 561 result.uncheckedAppend(static_cast<FontTraitsMask>(mask)); 562 return result; 559 563 } 560 564
Note: See TracChangeset
for help on using the changeset viewer.