Changeset 176751 in webkit
- Timestamp:
- Dec 3, 2014, 1:01:36 PM (11 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 15 edited
-
ChangeLog (modified) (1 diff)
-
css/CSSFontSelector.cpp (modified) (3 diffs)
-
css/StyleBuilderCustom.h (modified) (5 diffs)
-
css/StyleResolver.cpp (modified) (2 diffs)
-
platform/efl/RenderThemeEfl.cpp (modified) (1 diff)
-
platform/graphics/FontDescription.h (modified) (7 diffs)
-
platform/graphics/freetype/FontCacheFreeType.cpp (modified) (1 diff)
-
platform/mac/ThemeMac.mm (modified) (1 diff)
-
rendering/RenderTheme.cpp (modified) (1 diff)
-
rendering/RenderThemeGtk.cpp (modified) (1 diff)
-
rendering/RenderThemeIOS.mm (modified) (1 diff)
-
rendering/RenderThemeMac.mm (modified) (2 diffs)
-
rendering/RenderThemeSafari.cpp (modified) (2 diffs)
-
rendering/RenderThemeWin.cpp (modified) (1 diff)
-
style/StyleResolveForDocument.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r176750 r176751 1 2014-12-03 Antti Koivisto <antti@apple.com> 2 3 Remove genericFamily enum from FontDescription 4 https://bugs.webkit.org/show_bug.cgi?id=139207 5 6 Reviewed by Andreas Kling. 7 8 We use predefined AtomicStrings for generic families. The side enum adds no information. 9 10 * css/CSSFontSelector.cpp: 11 (WebCore::resolveGenericFamily): 12 (WebCore::CSSFontSelector::getFontData): 13 14 Match the existing quirk where the default font can be replaced by @font-face rule but user generic families can't. 15 16 (WebCore::CSSFontSelector::resolvesFamilyFor): 17 (WebCore::fontDataForGenericFamily): Deleted. 18 * css/DeprecatedStyleBuilder.cpp: 19 (WebCore::ApplyPropertyFontFamily::applyInheritValue): 20 (WebCore::ApplyPropertyFontFamily::applyInitialValue): 21 (WebCore::ApplyPropertyFontFamily::applyValue): 22 * css/StyleResolver.cpp: 23 (WebCore::StyleResolver::checkForGenericFamilyChange): 24 25 Remove the explicit monospace check, earlier useFixedDefaultSize check is equivalent. 26 27 (WebCore::StyleResolver::initializeFontStyle): 28 * platform/graphics/FontDescription.h: 29 (WebCore::FontDescription::FontDescription): 30 (WebCore::FontDescription::useFixedDefaultSize): 31 (WebCore::FontDescription::setWeight): 32 (WebCore::FontDescription::equalForTextAutoSizing): 33 (WebCore::FontDescription::operator==): 34 (WebCore::FontDescription::genericFamily): Deleted. 35 (WebCore::FontDescription::setGenericFamily): Deleted. 36 * platform/mac/ThemeMac.mm: 37 (WebCore::ThemeMac::controlFont): 38 * rendering/RenderTheme.cpp: 39 (WebCore::RenderTheme::adjustStyle): 40 41 Reset the lineheight unconditionally for buttons. 42 This always happened before because the explicitly set generic family made the font compare false. 43 44 * rendering/RenderThemeIOS.mm: 45 (WebCore::RenderThemeIOS::systemFont): 46 * rendering/RenderThemeMac.mm: 47 (WebCore::RenderThemeMac::systemFont): 48 (WebCore::RenderThemeMac::setFontFromControlSize): 49 * style/StyleResolveForDocument.cpp: 50 (WebCore::Style::resolveForDocument): 51 52 Resolve document style for final value immediately as it can't be affected by @font-face rules. 53 1 54 2014-12-03 Zalan Bujtas <zalan@apple.com> 2 55 -
trunk/Source/WebCore/css/CSSFontSelector.cpp
r176459 r176751 361 361 } 362 362 363 static PassRefPtr<SimpleFontData> fontDataForGenericFamily(Document* document, const FontDescription& fontDescription, const AtomicString& familyName)363 static const AtomicString& resolveGenericFamily(Document* document, const FontDescription& fontDescription, const AtomicString& familyName) 364 364 { 365 365 if (!document || !document->frame()) 366 return 0;366 return familyName; 367 367 368 368 const Settings& settings = document->frame()->settings(); 369 369 370 AtomicString genericFamily;371 370 UScriptCode script = fontDescription.script(); 372 373 371 if (familyName == serifFamily) 374 genericFamily = settings.serifFontFamily(script); 375 else if (familyName == sansSerifFamily) 376 genericFamily = settings.sansSerifFontFamily(script); 377 else if (familyName == cursiveFamily) 378 genericFamily = settings.cursiveFontFamily(script); 379 else if (familyName == fantasyFamily) 380 genericFamily = settings.fantasyFontFamily(script); 381 else if (familyName == monospaceFamily) 382 genericFamily = settings.fixedFontFamily(script); 383 else if (familyName == pictographFamily) 384 genericFamily = settings.pictographFontFamily(script); 385 else if (familyName == standardFamily) 386 genericFamily = settings.standardFontFamily(script); 387 388 if (!genericFamily.isEmpty()) 389 return fontCache().getCachedFontData(fontDescription, genericFamily); 390 391 return nullptr; 372 return settings.serifFontFamily(script); 373 if (familyName == sansSerifFamily) 374 return settings.sansSerifFontFamily(script); 375 if (familyName == cursiveFamily) 376 return settings.cursiveFontFamily(script); 377 if (familyName == fantasyFamily) 378 return settings.fantasyFontFamily(script); 379 if (familyName == monospaceFamily) 380 return settings.fixedFontFamily(script); 381 if (familyName == pictographFamily) 382 return settings.pictographFontFamily(script); 383 if (familyName == standardFamily) 384 return settings.standardFontFamily(script); 385 386 return familyName; 392 387 } 393 388 … … 476 471 PassRefPtr<FontData> CSSFontSelector::getFontData(const FontDescription& fontDescription, const AtomicString& familyName) 477 472 { 478 if (m_fontFaces.isEmpty()) { 479 if (familyName.startsWith("-webkit-")) 480 return fontDataForGenericFamily(m_document, fontDescription, familyName); 481 if (fontDescription.genericFamily() == FontDescription::StandardFamily && !fontDescription.isSpecifiedFont()) 482 return fontDataForGenericFamily(m_document, fontDescription, standardFamily); 483 return 0; 484 } 485 486 CSSSegmentedFontFace* face = getFontFace(fontDescription, familyName); 487 // If no face was found, then return 0 and let the OS come up with its best match for the name. 473 // FIXME: The spec (and Firefox) says user specified generic families (sans-serif etc.) should be resolved before the @font-face lookup too. 474 bool resolveGenericFamilyFirst = familyName == standardFamily; 475 476 AtomicString familyForLookup = resolveGenericFamilyFirst ? resolveGenericFamily(m_document, fontDescription, familyName) : familyName; 477 CSSSegmentedFontFace* face = getFontFace(fontDescription, familyForLookup); 488 478 if (!face) { 489 // If we were handed a generic family, but there was no match, go ahead and return the correct font based off our 490 // settings. 491 if (fontDescription.genericFamily() == FontDescription::StandardFamily && !fontDescription.isSpecifiedFont()) 492 return fontDataForGenericFamily(m_document, fontDescription, standardFamily); 493 return fontDataForGenericFamily(m_document, fontDescription, familyName); 494 } 495 496 // We have a face. Ask it for a font data. If it cannot produce one, it will fail, and the OS will take over. 479 if (!resolveGenericFamilyFirst) 480 familyForLookup = resolveGenericFamily(m_document, fontDescription, familyName); 481 return fontCache().getCachedFontData(fontDescription, familyForLookup); 482 } 483 497 484 return face->getFontData(fontDescription); 498 485 } … … 614 601 for (unsigned i = 0; i < description.familyCount(); ++i) { 615 602 const AtomicString& familyName = description.familyAt(i); 616 if (description.genericFamily() == FontDescription::StandardFamily && !description.isSpecifiedFont())617 return true;618 603 if (familyName.isEmpty()) 619 604 continue; -
trunk/Source/WebCore/css/StyleBuilderCustom.h
r176721 r176751 900 900 if (fontDescription.keywordSize() && fontDescription.useFixedDefaultSize()) 901 901 styleResolver.setFontSize(fontDescription, Style::fontSizeForKeyword(CSSValueXxSmall + fontDescription.keywordSize() - 1, false, styleResolver.document())); 902 fontDescription.setGenericFamily(initialDesc.genericFamily());903 902 if (!initialDesc.firstFamily().isEmpty()) 904 903 fontDescription.setFamilies(initialDesc.families()); … … 912 911 FontDescription parentFontDescription = styleResolver.parentStyle()->fontDescription(); 913 912 914 fontDescription.setGenericFamily(parentFontDescription.genericFamily());915 913 fontDescription.setFamilies(parentFontDescription.families()); 916 914 fontDescription.setIsSpecifiedFont(parentFontDescription.isSpecifiedFont()); … … 925 923 // Before mapping in a new font-family property, we should reset the generic family. 926 924 bool oldFamilyUsedFixedDefaultSize = fontDescription.useFixedDefaultSize(); 927 fontDescription.setGenericFamily(FontDescription::NoFamily);928 925 929 926 Vector<AtomicString> families; … … 932 929 for (auto& item : valueList) { 933 930 auto& contentValue = downcast<CSSPrimitiveValue>(item.get()); 934 AtomicString face; 931 AtomicString family; 932 bool isGenericFamily = false; 935 933 if (contentValue.isString()) 936 fa ce= contentValue.getStringValue();937 else if (Settings* settings = styleResolver.document().settings()){934 family = contentValue.getStringValue(); 935 else { 938 936 switch (contentValue.getValueID()) { 939 937 case CSSValueWebkitBody: 940 face = settings->standardFontFamily(); 938 if (Settings* settings = styleResolver.document().settings()) 939 family = settings->standardFontFamily(); 941 940 break; 942 941 case CSSValueSerif: 943 fa ce= serifFamily;944 fontDescription.setGenericFamily(FontDescription::SerifFamily);942 family = serifFamily; 943 isGenericFamily = true; 945 944 break; 946 945 case CSSValueSansSerif: 947 fa ce= sansSerifFamily;948 fontDescription.setGenericFamily(FontDescription::SansSerifFamily);946 family = sansSerifFamily; 947 isGenericFamily = true; 949 948 break; 950 949 case CSSValueCursive: 951 fa ce= cursiveFamily;952 fontDescription.setGenericFamily(FontDescription::CursiveFamily);950 family = cursiveFamily; 951 isGenericFamily = true; 953 952 break; 954 953 case CSSValueFantasy: 955 fa ce= fantasyFamily;956 fontDescription.setGenericFamily(FontDescription::FantasyFamily);954 family = fantasyFamily; 955 isGenericFamily = true; 957 956 break; 958 957 case CSSValueMonospace: 959 fa ce= monospaceFamily;960 fontDescription.setGenericFamily(FontDescription::MonospaceFamily);958 family = monospaceFamily; 959 isGenericFamily = true; 961 960 break; 962 961 case CSSValueWebkitPictograph: 963 fa ce= pictographFamily;964 fontDescription.setGenericFamily(FontDescription::PictographFamily);962 family = pictographFamily; 963 isGenericFamily = true; 965 964 break; 966 965 default: … … 969 968 } 970 969 971 if (fa ce.isEmpty())970 if (family.isEmpty()) 972 971 continue; 973 972 if (families.isEmpty()) 974 fontDescription.setIsSpecifiedFont( fontDescription.genericFamily() == FontDescription::NoFamily);975 families.uncheckedAppend(fa ce);973 fontDescription.setIsSpecifiedFont(!isGenericFamily); 974 families.uncheckedAppend(family); 976 975 } 977 976 -
trunk/Source/WebCore/css/StyleResolver.cpp
r176621 r176751 3140 3140 if (childFont.useFixedDefaultSize() == parentFont.useFixedDefaultSize()) 3141 3141 return; 3142 3143 // For now, lump all families but monospace together.3144 if (childFont.genericFamily() != FontDescription::MonospaceFamily3145 && parentFont.genericFamily() != FontDescription::MonospaceFamily)3146 return;3147 3148 3142 // We know the parent is monospace or the child is monospace, and that font 3149 3143 // size was unspecified. We want to scale our font size as appropriate. … … 3171 3165 { 3172 3166 FontDescription fontDescription; 3173 fontDescription.setGenericFamily(FontDescription::StandardFamily);3174 3167 fontDescription.setRenderingMode(settings->fontRenderingMode()); 3175 3168 fontDescription.setUsePrinterFont(document().printing() || !settings->screenFontSubstitutionEnabled()); 3176 const AtomicString& standardFontFamily = documentSettings()->standardFontFamily(); 3177 if (!standardFontFamily.isEmpty()) 3178 fontDescription.setOneFamily(standardFontFamily); 3169 fontDescription.setOneFamily(standardFamily); 3179 3170 fontDescription.setKeywordSize(CSSValueMedium - CSSValueXxSmall + 1); 3180 3171 setFontSize(fontDescription, Style::fontSizeForKeyword(CSSValueMedium, false, document())); -
trunk/Source/WebCore/platform/efl/RenderThemeEfl.cpp
r176070 r176751 992 992 fontDescription.setSpecifiedSize(defaultFontSize); 993 993 fontDescription.setIsAbsoluteSize(true); 994 fontDescription.setGenericFamily(FontDescription::NoFamily);995 994 fontDescription.setWeight(FontWeightNormal); 996 995 fontDescription.setItalic(false); -
trunk/Source/WebCore/platform/graphics/FontDescription.h
r163310 r176751 70 70 class FontDescription { 71 71 public: 72 enum GenericFamilyType { NoFamily, StandardFamily, SerifFamily, SansSerifFamily,73 MonospaceFamily, CursiveFamily, FantasyFamily, PictographFamily };74 75 72 enum Kerning { AutoKerning, NormalKerning, NoneKerning }; 76 73 … … 88 85 , m_isAbsoluteSize(false) 89 86 , m_weight(FontWeightNormal) 90 , m_genericFamily(NoFamily)91 87 , m_usePrinterFont(false) 92 88 , m_renderingMode(NormalRenderingMode) … … 120 116 FontWeight lighterWeight() const; 121 117 FontWeight bolderWeight() const; 122 GenericFamilyType genericFamily() const { return static_cast<GenericFamilyType>(m_genericFamily); }123 118 bool usePrinterFont() const { return m_usePrinterFont; } 124 119 // only use fixed default size when there is only one font family, and that family is "monospace" 125 bool useFixedDefaultSize() const { return genericFamily() == MonospaceFamily &&familyCount() == 1 && firstFamily() == monospaceFamily; }120 bool useFixedDefaultSize() const { return familyCount() == 1 && firstFamily() == monospaceFamily; } 126 121 FontRenderingMode renderingMode() const { return static_cast<FontRenderingMode>(m_renderingMode); } 127 122 Kerning kerning() const { return static_cast<Kerning>(m_kerning); } … … 153 148 void setIsAbsoluteSize(bool s) { m_isAbsoluteSize = s; } 154 149 void setWeight(FontWeight w) { m_weight = w; } 155 void setGenericFamily(GenericFamilyType genericFamily) { m_genericFamily = genericFamily; }156 150 void setUsePrinterFont(bool p) { m_usePrinterFont = p; } 157 151 void setRenderingMode(FontRenderingMode mode) { m_renderingMode = mode; } … … 179 173 && m_smallCaps == other.m_smallCaps 180 174 && m_isAbsoluteSize == other.m_isAbsoluteSize 181 && m_genericFamily == other.m_genericFamily182 175 && m_usePrinterFont == other.m_usePrinterFont; 183 176 } … … 202 195 // (logical sizes like "medium" don't count). 203 196 unsigned m_weight : 8; // FontWeight 204 unsigned m_genericFamily : 3; // GenericFamilyType205 197 unsigned m_usePrinterFont : 1; 206 198 … … 231 223 && m_isAbsoluteSize == other.m_isAbsoluteSize 232 224 && m_weight == other.m_weight 233 && m_genericFamily == other.m_genericFamily234 225 && m_usePrinterFont == other.m_usePrinterFont 235 226 && m_renderingMode == other.m_renderingMode -
trunk/Source/WebCore/platform/graphics/freetype/FontCacheFreeType.cpp
r175013 r176751 120 120 return family.string(); 121 121 122 switch (fontDescription.genericFamily()) { 123 case FontDescription::StandardFamily: 124 case FontDescription::SerifFamily: 122 if (family == standardFamily || family == serifFamily) 125 123 return "serif"; 126 case FontDescription::SansSerifFamily:124 if (family == sansSerifFamily) 127 125 return "sans-serif"; 128 case FontDescription::MonospaceFamily:126 if (family == monospaceFamily) 129 127 return "monospace"; 130 case FontDescription::CursiveFamily:128 if (family == cursiveFamily) 131 129 return "cursive"; 132 case FontDescription::FantasyFamily:130 if (family == fantasyFamily) 133 131 return "fantasy"; 134 case FontDescription::NoFamily: 135 default: 136 return ""; 137 } 132 return ""; 138 133 } 139 134 -
trunk/Source/WebCore/platform/mac/ThemeMac.mm
r173441 r176751 684 684 FontDescription fontDescription; 685 685 fontDescription.setIsAbsoluteSize(true); 686 fontDescription.setGenericFamily(FontDescription::SerifFamily);687 686 688 687 NSFont* nsFont = [NSFont systemFontOfSize:[NSFont systemFontSizeForControlSize:controlSizeForFont(font)]]; -
trunk/Source/WebCore/rendering/RenderTheme.cpp
r174917 r176751 171 171 FontDescription controlFont = m_theme->controlFont(part, style.font(), style.effectiveZoom()); 172 172 if (controlFont != style.font().fontDescription()) { 173 // Reset our line-height174 style.setLineHeight(RenderStyle::initialLineHeight());175 176 173 // Now update our font. 177 174 if (style.setFontDescription(controlFont)) 178 175 style.font().update(0); 179 176 } 180 177 // Reset our line-height 178 style.setLineHeight(RenderStyle::initialLineHeight()); 181 179 style.setInsideDefaultButton(part == DefaultButtonPart); 182 180 } -
trunk/Source/WebCore/rendering/RenderThemeGtk.cpp
r175095 r176751 108 108 fontDescription.setSpecifiedSize(size); 109 109 fontDescription.setIsAbsoluteSize(true); 110 fontDescription.setGenericFamily(FontDescription::NoFamily);111 110 fontDescription.setWeight(FontWeightNormal); 112 111 fontDescription.setItalic(false); -
trunk/Source/WebCore/rendering/RenderThemeIOS.mm
r176229 r176751 1231 1231 RetainPtr<CTFontRef> font = adoptCF(CTFontCreateWithFontDescriptor(fontDescriptor.get(), 0, nullptr)); 1232 1232 cachedDesc->setIsAbsoluteSize(true); 1233 cachedDesc->setGenericFamily(FontDescription::NoFamily);1234 1233 cachedDesc->setOneFamily(textStyle); 1235 1234 cachedDesc->setSpecifiedSize(CTFontGetSize(font.get())); -
trunk/Source/WebCore/rendering/RenderThemeMac.mm
r175147 r176751 391 391 NSFontManager *fontManager = [NSFontManager sharedFontManager]; 392 392 cachedDesc->setIsAbsoluteSize(true); 393 cachedDesc->setGenericFamily(FontDescription::NoFamily);394 393 cachedDesc->setOneFamily([font webCoreFamilyName]); 395 394 cachedDesc->setSpecifiedSize([font pointSize]); … … 809 808 FontDescription fontDescription; 810 809 fontDescription.setIsAbsoluteSize(true); 811 fontDescription.setGenericFamily(FontDescription::SerifFamily);812 810 813 811 NSFont* font = [NSFont systemFontOfSize:[NSFont systemFontSizeForControlSize:controlSize]]; -
trunk/Source/WebCore/rendering/RenderThemeSafari.cpp
r174875 r176751 244 244 if (fontSize) { 245 245 cachedDesc->setIsAbsoluteSize(true); 246 cachedDesc->setGenericFamily(FontDescription::NoFamily);247 246 cachedDesc->setOneFamily("Lucida Grande"); 248 247 cachedDesc->setSpecifiedSize(fontSize); … … 393 392 FontDescription fontDescription; 394 393 fontDescription.setIsAbsoluteSize(true); 395 fontDescription.setGenericFamily(FontDescription::SerifFamily);396 394 397 395 float fontSize = systemFontSizeForControlSize(controlSize); -
trunk/Source/WebCore/rendering/RenderThemeWin.cpp
r174875 r176751 324 324 { 325 325 fontDescription.setIsAbsoluteSize(true); 326 fontDescription.setGenericFamily(FontDescription::NoFamily);327 326 fontDescription.setOneFamily(String(logFont.lfFaceName)); 328 327 fontDescription.setSpecifiedSize(fontSize); -
trunk/Source/WebCore/style/StyleResolveForDocument.cpp
r175583 r176751 100 100 fontDescription.setUsePrinterFont(document.printing() || !settings.screenFontSubstitutionEnabled()); 101 101 fontDescription.setRenderingMode(settings.fontRenderingMode()); 102 const AtomicString& standardFont = settings.standardFontFamily(fontDescription.script()); 103 if (!standardFont.isEmpty()) { 104 fontDescription.setGenericFamily(FontDescription::StandardFamily); 105 fontDescription.setOneFamily(standardFont); 106 } 102 fontDescription.setOneFamily(standardFamily); 103 107 104 fontDescription.setKeywordSize(CSSValueMedium - CSSValueXxSmall + 1); 108 105 int size = fontSizeForKeyword(CSSValueMedium, false, document);
Note:
See TracChangeset
for help on using the changeset viewer.