Split FontDescription into lower and higher level types
authorantti@apple.com <antti@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 16 Sep 2015 00:16:58 +0000 (00:16 +0000)
committerantti@apple.com <antti@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 16 Sep 2015 00:16:58 +0000 (00:16 +0000)
https://bugs.webkit.org/show_bug.cgi?id=149036

Reviewed by Darin Adler.

Currently FontDescription is used through the text subsystem. However much of the data it
carries is only needed by FontCascade and text layout but not by the lower level Font/FontCache
layer. This makes code confusing. For example families specified in FontDescription are ignored
at lower levels.

Split it into a low level FontDescription and a high level FontCascadeDescription type:

FontDescription <-> Font
FontCascadeDescription <-> FontCascade

The former only carries information that is needed to instantiate a Font or fetch it from the FontCache.
The latter has additional data for CSS font cascade semantics and other higher level features.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@189830 268f45cc-cd09-0410-ab3c-d52691b4dbfc

61 files changed:
Source/WebCore/ChangeLog
Source/WebCore/css/CSSComputedStyleDeclaration.cpp
Source/WebCore/css/CSSFontSelector.cpp
Source/WebCore/css/CSSFontSelector.h
Source/WebCore/css/CSSParser.cpp
Source/WebCore/css/CSSPrimitiveValueMappings.h
Source/WebCore/css/StyleBuilderCustom.h
Source/WebCore/css/StyleResolver.cpp
Source/WebCore/css/StyleResolver.h
Source/WebCore/css/makeprop.pl
Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp
Source/WebCore/html/canvas/CanvasRenderingContext2D.h
Source/WebCore/platform/Theme.h
Source/WebCore/platform/graphics/FontCache.cpp
Source/WebCore/platform/graphics/FontCache.h
Source/WebCore/platform/graphics/FontCascade.cpp
Source/WebCore/platform/graphics/FontCascade.h
Source/WebCore/platform/graphics/FontCascadeFonts.cpp
Source/WebCore/platform/graphics/FontCascadeFonts.h
Source/WebCore/platform/graphics/FontDescription.cpp
Source/WebCore/platform/graphics/FontDescription.h
Source/WebCore/platform/graphics/FontSelector.h
Source/WebCore/platform/graphics/ca/win/PlatformCALayerWin.cpp
Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp
Source/WebCore/platform/graphics/harfbuzz/HarfBuzzShaper.cpp
Source/WebCore/platform/mac/ThemeMac.h
Source/WebCore/platform/mac/ThemeMac.mm
Source/WebCore/platform/win/DragImageWin.cpp
Source/WebCore/platform/win/PopupMenuWin.cpp
Source/WebCore/rendering/RenderBlock.cpp
Source/WebCore/rendering/RenderBlockFlow.cpp
Source/WebCore/rendering/RenderCombineText.cpp
Source/WebCore/rendering/RenderEmbeddedObject.cpp
Source/WebCore/rendering/RenderFullScreen.cpp
Source/WebCore/rendering/RenderListBox.cpp
Source/WebCore/rendering/RenderText.cpp
Source/WebCore/rendering/RenderTheme.cpp
Source/WebCore/rendering/RenderTheme.h
Source/WebCore/rendering/RenderThemeEfl.cpp
Source/WebCore/rendering/RenderThemeEfl.h
Source/WebCore/rendering/RenderThemeGtk.cpp
Source/WebCore/rendering/RenderThemeGtk.h
Source/WebCore/rendering/RenderThemeIOS.h
Source/WebCore/rendering/RenderThemeIOS.mm
Source/WebCore/rendering/RenderThemeMac.h
Source/WebCore/rendering/RenderThemeMac.mm
Source/WebCore/rendering/RenderThemeSafari.cpp
Source/WebCore/rendering/RenderThemeSafari.h
Source/WebCore/rendering/RenderThemeWin.cpp
Source/WebCore/rendering/RenderThemeWin.h
Source/WebCore/rendering/TextAutoSizing.cpp
Source/WebCore/rendering/mathml/RenderMathMLToken.cpp
Source/WebCore/rendering/style/RenderStyle.cpp
Source/WebCore/rendering/style/RenderStyle.h
Source/WebCore/rendering/svg/RenderSVGInlineText.cpp
Source/WebCore/rendering/svg/SVGTextRunRenderingContext.cpp
Source/WebCore/style/StyleResolveForDocument.cpp
Source/WebKit/mac/WebView/WebHTMLView.mm
Source/WebKit/win/DOMCoreClasses.cpp
Source/WebKit/win/FullscreenVideoController.cpp
Source/WebKit/win/WebKitGraphics.cpp

index 9966f85..1a9dde5 100644 (file)
@@ -1,3 +1,23 @@
+2015-09-15  Antti Koivisto  <antti@apple.com>
+
+        Split FontDescription into lower and higher level types
+        https://bugs.webkit.org/show_bug.cgi?id=149036
+
+        Reviewed by Darin Adler.
+
+        Currently FontDescription is used through the text subsystem. However much of the data it
+        carries is only needed by FontCascade and text layout but not by the lower level Font/FontCache
+        layer. This makes code confusing. For example families specified in FontDescription are ignored
+        at lower levels.
+
+        Split it into a low level FontDescription and a high level FontCascadeDescription type:
+
+        FontDescription <-> Font
+        FontCascadeDescription <-> FontCascade
+
+        The former only carries information that is needed to instantiate a Font or fetch it from the FontCache.
+        The latter has additional data for CSS font cascade semantics and other higher level features.
+
 2015-09-15  Myles C. Maxfield  <mmaxfield@apple.com>
 
         GraphicsContext::drawBidiText()'s BidiResolver should not have isolated runs
index 303b5e1..c527b5a 100644 (file)
@@ -2724,20 +2724,20 @@ RefPtr<CSSValue> ComputedStyleExtractor::propertyValue(CSSPropertyID propertyID,
         case CSSPropertyWebkitFontSmoothing:
             return cssValuePool.createValue(style->fontDescription().fontSmoothing());
         case CSSPropertyWebkitFontVariantLigatures: {
-            FontDescription::LigaturesState commonLigaturesState = style->fontDescription().commonLigaturesState();
-            FontDescription::LigaturesState discretionaryLigaturesState = style->fontDescription().discretionaryLigaturesState();
-            FontDescription::LigaturesState historicalLigaturesState = style->fontDescription().historicalLigaturesState();
-            if (commonLigaturesState == FontDescription::NormalLigaturesState && discretionaryLigaturesState == FontDescription::NormalLigaturesState
-                && historicalLigaturesState == FontDescription::NormalLigaturesState)
+            auto commonLigaturesState = style->fontDescription().commonLigaturesState();
+            auto discretionaryLigaturesState = style->fontDescription().discretionaryLigaturesState();
+            auto historicalLigaturesState = style->fontDescription().historicalLigaturesState();
+            if (commonLigaturesState == FontCascadeDescription::NormalLigaturesState && discretionaryLigaturesState == FontCascadeDescription::NormalLigaturesState
+                && historicalLigaturesState == FontCascadeDescription::NormalLigaturesState)
                 return cssValuePool.createIdentifierValue(CSSValueNormal);
 
             RefPtr<CSSValueList> valueList = CSSValueList::createSpaceSeparated();
-            if (commonLigaturesState != FontDescription::NormalLigaturesState)
-                valueList->append(cssValuePool.createIdentifierValue(commonLigaturesState == FontDescription::DisabledLigaturesState ? CSSValueNoCommonLigatures : CSSValueCommonLigatures));
-            if (discretionaryLigaturesState != FontDescription::NormalLigaturesState)
-                valueList->append(cssValuePool.createIdentifierValue(discretionaryLigaturesState == FontDescription::DisabledLigaturesState ? CSSValueNoDiscretionaryLigatures : CSSValueDiscretionaryLigatures));
-            if (historicalLigaturesState != FontDescription::NormalLigaturesState)
-                valueList->append(cssValuePool.createIdentifierValue(historicalLigaturesState == FontDescription::DisabledLigaturesState ? CSSValueNoHistoricalLigatures : CSSValueHistoricalLigatures));
+            if (commonLigaturesState != FontCascadeDescription::NormalLigaturesState)
+                valueList->append(cssValuePool.createIdentifierValue(commonLigaturesState == FontCascadeDescription::DisabledLigaturesState ? CSSValueNoCommonLigatures : CSSValueCommonLigatures));
+            if (discretionaryLigaturesState != FontCascadeDescription::NormalLigaturesState)
+                valueList->append(cssValuePool.createIdentifierValue(discretionaryLigaturesState == FontCascadeDescription::DisabledLigaturesState ? CSSValueNoDiscretionaryLigatures : CSSValueDiscretionaryLigatures));
+            if (historicalLigaturesState != FontCascadeDescription::NormalLigaturesState)
+                valueList->append(cssValuePool.createIdentifierValue(historicalLigaturesState == FontCascadeDescription::DisabledLigaturesState ? CSSValueNoHistoricalLigatures : CSSValueHistoricalLigatures));
             return valueList;
         }
         case CSSPropertyZIndex:
index 9a38bad..b868e84 100644 (file)
@@ -590,7 +590,7 @@ void CSSFontSelector::beginLoadTimerFired()
         m_document->frame()->loader().checkLoadComplete();
 }
 
-bool CSSFontSelector::resolvesFamilyFor(const FontDescription& description) const
+bool CSSFontSelector::resolvesFamilyFor(const FontCascadeDescription& description) const
 {
     for (unsigned i = 0; i < description.familyCount(); ++i) {
         const AtomicString& familyName = description.familyAt(i);
index 72d6f11..c1ad955 100644 (file)
@@ -44,7 +44,6 @@ class CSSFontFaceRule;
 class CSSSegmentedFontFace;
 class CachedFont;
 class Document;
-class FontDescription;
 class StyleRuleFontFace;
 
 class CSSFontSelector final : public FontSelector {
@@ -63,7 +62,7 @@ public:
     virtual PassRefPtr<Font> fallbackFontAt(const FontDescription&, size_t) override;
     CSSSegmentedFontFace* getFontFace(const FontDescription&, const AtomicString& family);
 
-    virtual bool resolvesFamilyFor(const FontDescription&) const override;
+    virtual bool resolvesFamilyFor(const FontCascadeDescription&) const override;
 
     void clearDocument();
 
index 4cdb4ca..3be17d4 100644 (file)
@@ -6651,7 +6651,7 @@ void CSSParser::parseSystemFont(bool important)
     ASSERT(systemFontID >= CSSValueCaption && systemFontID <= CSSValueStatusBar);
     m_valueList->next();
 
-    FontDescription fontDescription;
+    FontCascadeDescription fontDescription;
     RenderTheme::defaultTheme()->systemFont(systemFontID, fontDescription);
     if (!fontDescription.isAbsoluteSize())
         return;
index ff6ea76..0620e1b 100644 (file)
@@ -3438,18 +3438,18 @@ template<> inline CSSPrimitiveValue::operator EPointerEvents() const
     return PE_ALL;
 }
 
-template<> inline CSSPrimitiveValue::CSSPrimitiveValue(FontDescription::Kerning kerning)
+template<> inline CSSPrimitiveValue::CSSPrimitiveValue(FontCascadeDescription::Kerning kerning)
     : CSSValue(PrimitiveClass)
 {
     m_primitiveUnitType = CSS_VALUE_ID;
     switch (kerning) {
-    case FontDescription::AutoKerning:
+    case FontCascadeDescription::AutoKerning:
         m_value.valueID = CSSValueAuto;
         return;
-    case FontDescription::NormalKerning:
+    case FontCascadeDescription::NormalKerning:
         m_value.valueID = CSSValueNormal;
         return;
-    case FontDescription::NoneKerning:
+    case FontCascadeDescription::NoneKerning:
         m_value.valueID = CSSValueNone;
         return;
     }
@@ -3458,23 +3458,23 @@ template<> inline CSSPrimitiveValue::CSSPrimitiveValue(FontDescription::Kerning
     m_value.valueID = CSSValueAuto;
 }
 
-template<> inline CSSPrimitiveValue::operator FontDescription::Kerning() const
+template<> inline CSSPrimitiveValue::operator FontCascadeDescription::Kerning() const
 {
     ASSERT(isValueID());
 
     switch (m_value.valueID) {
     case CSSValueAuto:
-        return FontDescription::AutoKerning;
+        return FontCascadeDescription::AutoKerning;
     case CSSValueNormal:
-        return FontDescription::NormalKerning;
+        return FontCascadeDescription::NormalKerning;
     case CSSValueNone:
-        return FontDescription::NoneKerning;
+        return FontCascadeDescription::NoneKerning;
     default:
         break;
     }
 
     ASSERT_NOT_REACHED();
-    return FontDescription::AutoKerning;
+    return FontCascadeDescription::AutoKerning;
 }
 
 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ObjectFit fit)
index 1cf5a82..6db76d1 100644 (file)
@@ -693,7 +693,7 @@ inline void StyleBuilderCustom::applyValueWebkitLocale(StyleResolver& styleResol
 {
     auto& primitiveValue = downcast<CSSPrimitiveValue>(value);
     
-    FontDescription fontDescription = styleResolver.style()->fontDescription();
+    auto fontDescription = styleResolver.style()->fontDescription();
     if (primitiveValue.getValueID() == CSSValueAuto)
         fontDescription.setLocale(nullAtom);
     else
@@ -823,8 +823,8 @@ inline void StyleBuilderCustom::applyValueWebkitBoxShadow(StyleResolver& styleRe
 
 inline void StyleBuilderCustom::applyInitialFontFamily(StyleResolver& styleResolver)
 {
-    FontDescription fontDescription = styleResolver.style()->fontDescription();
-    FontDescription initialDesc = FontDescription();
+    auto fontDescription = styleResolver.style()->fontDescription();
+    auto initialDesc = FontCascadeDescription();
 
     // We need to adjust the size to account for the generic family change from monospace to non-monospace.
     if (fontDescription.useFixedDefaultSize()) {
@@ -839,8 +839,8 @@ inline void StyleBuilderCustom::applyInitialFontFamily(StyleResolver& styleResol
 
 inline void StyleBuilderCustom::applyInheritFontFamily(StyleResolver& styleResolver)
 {
-    FontDescription fontDescription = styleResolver.style()->fontDescription();
-    FontDescription parentFontDescription = styleResolver.parentStyle()->fontDescription();
+    auto fontDescription = styleResolver.style()->fontDescription();
+    auto parentFontDescription = styleResolver.parentStyle()->fontDescription();
 
     fontDescription.setFamilies(parentFontDescription.families());
     fontDescription.setIsSpecifiedFont(parentFontDescription.isSpecifiedFont());
@@ -851,7 +851,7 @@ inline void StyleBuilderCustom::applyValueFontFamily(StyleResolver& styleResolve
 {
     auto& valueList = downcast<CSSValueList>(value);
 
-    FontDescription fontDescription = styleResolver.style()->fontDescription();
+    auto fontDescription = styleResolver.style()->fontDescription();
     // Before mapping in a new font-family property, we should reset the generic family.
     bool oldFamilyUsedFixedDefaultSize = fontDescription.useFixedDefaultSize();
 
@@ -1242,14 +1242,14 @@ inline void StyleBuilderCustom::applyValueWebkitSvgShadow(StyleResolver& styleRe
 
 inline void StyleBuilderCustom::applyInitialFontWeight(StyleResolver& styleResolver)
 {
-    FontDescription fontDescription = styleResolver.fontDescription();
+    auto fontDescription = styleResolver.fontDescription();
     fontDescription.setWeight(FontWeightNormal);
     styleResolver.setFontDescription(fontDescription);
 }
 
 inline void StyleBuilderCustom::applyInheritFontWeight(StyleResolver& styleResolver)
 {
-    FontDescription fontDescription = styleResolver.fontDescription();
+    auto fontDescription = styleResolver.fontDescription();
     fontDescription.setWeight(styleResolver.parentFontDescription().weight());
     styleResolver.setFontDescription(fontDescription);
 }
@@ -1257,7 +1257,7 @@ inline void StyleBuilderCustom::applyInheritFontWeight(StyleResolver& styleResol
 inline void StyleBuilderCustom::applyValueFontWeight(StyleResolver& styleResolver, CSSValue& value)
 {
     auto& primitiveValue = downcast<CSSPrimitiveValue>(value);
-    FontDescription fontDescription = styleResolver.fontDescription();
+    auto fontDescription = styleResolver.fontDescription();
     switch (primitiveValue.getValueID()) {
     case CSSValueInvalid:
         ASSERT_NOT_REACHED();
@@ -1390,19 +1390,19 @@ inline void StyleBuilderCustom::applyValueContent(StyleResolver& styleResolver,
 
 inline void StyleBuilderCustom::applyInitialWebkitFontVariantLigatures(StyleResolver& styleResolver)
 {
-    FontDescription fontDescription = styleResolver.fontDescription();
+    auto fontDescription = styleResolver.fontDescription();
 
-    fontDescription.setCommonLigaturesState(FontDescription::NormalLigaturesState);
-    fontDescription.setDiscretionaryLigaturesState(FontDescription::NormalLigaturesState);
-    fontDescription.setHistoricalLigaturesState(FontDescription::NormalLigaturesState);
+    fontDescription.setCommonLigaturesState(FontCascadeDescription::NormalLigaturesState);
+    fontDescription.setDiscretionaryLigaturesState(FontCascadeDescription::NormalLigaturesState);
+    fontDescription.setHistoricalLigaturesState(FontCascadeDescription::NormalLigaturesState);
 
     styleResolver.setFontDescription(fontDescription);
 }
 
 inline void StyleBuilderCustom::applyInheritWebkitFontVariantLigatures(StyleResolver& styleResolver)
 {
-    const FontDescription& parentFontDescription = styleResolver.parentFontDescription();
-    FontDescription fontDescription = styleResolver.fontDescription();
+    const auto& parentFontDescription = styleResolver.parentFontDescription();
+    auto fontDescription = styleResolver.fontDescription();
 
     fontDescription.setCommonLigaturesState(parentFontDescription.commonLigaturesState());
     fontDescription.setDiscretionaryLigaturesState(parentFontDescription.discretionaryLigaturesState());
@@ -1413,30 +1413,30 @@ inline void StyleBuilderCustom::applyInheritWebkitFontVariantLigatures(StyleReso
 
 inline void StyleBuilderCustom::applyValueWebkitFontVariantLigatures(StyleResolver& styleResolver, CSSValue& value)
 {
-    FontDescription::LigaturesState commonLigaturesState = FontDescription::NormalLigaturesState;
-    FontDescription::LigaturesState discretionaryLigaturesState = FontDescription::NormalLigaturesState;
-    FontDescription::LigaturesState historicalLigaturesState = FontDescription::NormalLigaturesState;
+    auto commonLigaturesState = FontCascadeDescription::NormalLigaturesState;
+    auto discretionaryLigaturesState = FontCascadeDescription::NormalLigaturesState;
+    auto historicalLigaturesState = FontCascadeDescription::NormalLigaturesState;
 
     if (is<CSSValueList>(value)) {
         for (auto& item : downcast<CSSValueList>(value)) {
             switch (downcast<CSSPrimitiveValue>(item.get()).getValueID()) {
             case CSSValueNoCommonLigatures:
-                commonLigaturesState = FontDescription::DisabledLigaturesState;
+                commonLigaturesState = FontCascadeDescription::DisabledLigaturesState;
                 break;
             case CSSValueCommonLigatures:
-                commonLigaturesState = FontDescription::EnabledLigaturesState;
+                commonLigaturesState = FontCascadeDescription::EnabledLigaturesState;
                 break;
             case CSSValueNoDiscretionaryLigatures:
-                discretionaryLigaturesState = FontDescription::DisabledLigaturesState;
+                discretionaryLigaturesState = FontCascadeDescription::DisabledLigaturesState;
                 break;
             case CSSValueDiscretionaryLigatures:
-                discretionaryLigaturesState = FontDescription::EnabledLigaturesState;
+                discretionaryLigaturesState = FontCascadeDescription::EnabledLigaturesState;
                 break;
             case CSSValueNoHistoricalLigatures:
-                historicalLigaturesState = FontDescription::DisabledLigaturesState;
+                historicalLigaturesState = FontCascadeDescription::DisabledLigaturesState;
                 break;
             case CSSValueHistoricalLigatures:
-                historicalLigaturesState = FontDescription::EnabledLigaturesState;
+                historicalLigaturesState = FontCascadeDescription::EnabledLigaturesState;
                 break;
             default:
                 ASSERT_NOT_REACHED();
@@ -1446,7 +1446,7 @@ inline void StyleBuilderCustom::applyValueWebkitFontVariantLigatures(StyleResolv
     } else
         ASSERT(downcast<CSSPrimitiveValue>(value).getValueID() == CSSValueNormal);
 
-    FontDescription fontDescription = styleResolver.fontDescription();
+    auto fontDescription = styleResolver.fontDescription();
     fontDescription.setCommonLigaturesState(commonLigaturesState);
     fontDescription.setDiscretionaryLigaturesState(discretionaryLigaturesState);
     fontDescription.setHistoricalLigaturesState(historicalLigaturesState);
@@ -1455,7 +1455,7 @@ inline void StyleBuilderCustom::applyValueWebkitFontVariantLigatures(StyleResolv
 
 inline void StyleBuilderCustom::applyInitialFontSize(StyleResolver& styleResolver)
 {
-    FontDescription fontDescription = styleResolver.style()->fontDescription();
+    auto fontDescription = styleResolver.style()->fontDescription();
     float size = Style::fontSizeForKeyword(CSSValueMedium, fontDescription.useFixedDefaultSize(), styleResolver.document());
 
     if (size < 0)
@@ -1468,13 +1468,13 @@ inline void StyleBuilderCustom::applyInitialFontSize(StyleResolver& styleResolve
 
 inline void StyleBuilderCustom::applyInheritFontSize(StyleResolver& styleResolver)
 {
-    const FontDescription& parentFontDescription = styleResolver.parentStyle()->fontDescription();
+    const auto& parentFontDescription = styleResolver.parentStyle()->fontDescription();
     float size = parentFontDescription.specifiedSize();
 
     if (size < 0)
         return;
 
-    FontDescription fontDescription = styleResolver.style()->fontDescription();
+    auto fontDescription = styleResolver.style()->fontDescription();
     fontDescription.setKeywordSize(parentFontDescription.keywordSize());
     styleResolver.setFontSize(fontDescription, size);
     styleResolver.setFontDescription(fontDescription);
@@ -1516,7 +1516,7 @@ inline float StyleBuilderCustom::determineRubyTextSizeMultiplier(StyleResolver&
 
 inline void StyleBuilderCustom::applyValueFontSize(StyleResolver& styleResolver, CSSValue& value)
 {
-    FontDescription fontDescription = styleResolver.style()->fontDescription();
+    auto fontDescription = styleResolver.style()->fontDescription();
     fontDescription.setKeywordSizeFromIdentifier(CSSValueInvalid);
 
     float parentSize = 0;
index 31236fa..aac6295 100644 (file)
@@ -1399,11 +1399,11 @@ static void checkForOrientationChange(RenderStyle* style)
     NonCJKGlyphOrientation glyphOrientation;
     style->getFontAndGlyphOrientation(fontOrientation, glyphOrientation);
 
-    const FontDescription& fontDescription = style->fontDescription();
+    const auto& fontDescription = style->fontDescription();
     if (fontDescription.orientation() == fontOrientation && fontDescription.nonCJKGlyphOrientation() == glyphOrientation)
         return;
 
-    FontDescription newFontDescription(fontDescription);
+    auto newFontDescription = fontDescription;
     newFontDescription.setNonCJKGlyphOrientation(glyphOrientation);
     newFontDescription.setOrientation(fontOrientation);
     style->setFontDescription(newFontDescription);
@@ -1958,7 +1958,7 @@ void StyleResolver::checkForTextSizeAdjust(RenderStyle* style)
     if (style->textSizeAdjust().isAuto())
         return;
 
-    FontDescription newFontDescription(style->fontDescription());
+    auto newFontDescription = style->fontDescription();
     if (!style->textSizeAdjust().isNone())
         newFontDescription.setComputedSize(newFontDescription.specifiedSize() * style->textSizeAdjust().multiplier());
     else
@@ -1975,20 +1975,20 @@ void StyleResolver::checkForZoomChange(RenderStyle* style, RenderStyle* parentSt
     if (style->effectiveZoom() == parentStyle->effectiveZoom() && style->textZoom() == parentStyle->textZoom())
         return;
 
-    const FontDescription& childFont = style->fontDescription();
-    FontDescription newFontDescription(childFont);
+    const auto& childFont = style->fontDescription();
+    auto newFontDescription = childFont;
     setFontSize(newFontDescription, childFont.specifiedSize());
     style->setFontDescription(newFontDescription);
 }
 
 void StyleResolver::checkForGenericFamilyChange(RenderStyle* style, RenderStyle* parentStyle)
 {
-    const FontDescription& childFont = style->fontDescription();
+    const auto& childFont = style->fontDescription();
 
     if (childFont.isAbsoluteSize() || !parentStyle)
         return;
 
-    const FontDescription& parentFont = parentStyle->fontDescription();
+    const auto& parentFont = parentStyle->fontDescription();
     if (childFont.useFixedDefaultSize() == parentFont.useFixedDefaultSize())
         return;
     // We know the parent is monospace or the child is monospace, and that font
@@ -2008,14 +2008,14 @@ void StyleResolver::checkForGenericFamilyChange(RenderStyle* style, RenderStyle*
                 childFont.specifiedSize() * fixedScaleFactor;
     }
 
-    FontDescription newFontDescription(childFont);
+    auto newFontDescription = childFont;
     setFontSize(newFontDescription, size);
     style->setFontDescription(newFontDescription);
 }
 
 void StyleResolver::initializeFontStyle(Settings* settings)
 {
-    FontDescription fontDescription;
+    FontCascadeDescription fontDescription;
     if (settings)
         fontDescription.setRenderingMode(settings->fontRenderingMode());
     fontDescription.setOneFamily(standardFamily);
@@ -2024,7 +2024,7 @@ void StyleResolver::initializeFontStyle(Settings* settings)
     setFontDescription(fontDescription);
 }
 
-void StyleResolver::setFontSize(FontDescription& fontDescription, float size)
+void StyleResolver::setFontSize(FontCascadeDescription& fontDescription, float size)
 {
     fontDescription.setSpecifiedSize(size);
     fontDescription.setComputedSize(Style::computedFontSizeFromSpecifiedSize(size, fontDescription.isAbsoluteSize(), useSVGZoomRules(), m_state.style(), document()));
index add5425..d3c6f06 100644 (file)
@@ -203,7 +203,7 @@ public:
     void updateFont();
     void initializeFontStyle(Settings*);
 
-    void setFontSize(FontDescription&, float size);
+    void setFontSize(FontCascadeDescription&, float size);
 
 public:
     bool useSVGZoomRules();
@@ -392,9 +392,9 @@ public:
         FillLayer backgroundData() const { return m_backgroundData; }
         Color backgroundColor() const { return m_backgroundColor; }
 
-        const FontDescription& fontDescription() { return m_style->fontDescription(); }
-        const FontDescription& parentFontDescription() { return m_parentStyle->fontDescription(); }
-        void setFontDescription(const FontDescription& fontDescription) { m_fontDirty |= m_style->setFontDescription(fontDescription); }
+        const FontCascadeDescription& fontDescription() { return m_style->fontDescription(); }
+        const FontCascadeDescription& parentFontDescription() { return m_parentStyle->fontDescription(); }
+        void setFontDescription(const FontCascadeDescription& fontDescription) { m_fontDirty |= m_style->setFontDescription(fontDescription); }
         void setZoom(float f) { m_fontDirty |= m_style->setZoom(f); }
         void setEffectiveZoom(float f) { m_fontDirty |= m_style->setEffectiveZoom(f); }
         void setWritingMode(WritingMode writingMode) { m_fontDirty |= m_style->setWritingMode(writingMode); }
@@ -455,9 +455,9 @@ public:
 
     CSSToStyleMap* styleMap() { return &m_styleMap; }
     InspectorCSSOMWrappers& inspectorCSSOMWrappers() { return m_inspectorCSSOMWrappers; }
-    const FontDescription& fontDescription() { return m_state.fontDescription(); }
-    const FontDescription& parentFontDescription() { return m_state.parentFontDescription(); }
-    void setFontDescription(const FontDescription& fontDescription) { m_state.setFontDescription(fontDescription); }
+    const FontCascadeDescription& fontDescription() { return m_state.fontDescription(); }
+    const FontCascadeDescription& parentFontDescription() { return m_state.parentFontDescription(); }
+    void setFontDescription(const FontCascadeDescription& fontDescription) { m_state.setFontDescription(fontDescription); }
     void setZoom(float f) { m_state.setZoom(f); }
     void setEffectiveZoom(float f) { m_state.setEffectiveZoom(f); }
     void setWritingMode(WritingMode writingMode) { m_state.setWritingMode(writingMode); }
index 6b0bb35..5572fca 100755 (executable)
@@ -709,8 +709,8 @@ sub generateInitialValueSetter {
   } elsif (exists $propertiesWithStyleBuilderOptions{$name}{"AnimationProperty"}) {
     $setterContent .= generateAnimationPropertyInitialValueSetter($name, $indent . "    ");
   } elsif (exists $propertiesWithStyleBuilderOptions{$name}{"FontProperty"}) {
-    $setterContent .= $indent . "    FontDescription fontDescription = styleResolver.fontDescription();\n";
-    $setterContent .= $indent . "    fontDescription." . $setter . "(FontDescription::" . $initial . "());\n";
+    $setterContent .= $indent . "    auto fontDescription = styleResolver.fontDescription();\n";
+    $setterContent .= $indent . "    fontDescription." . $setter . "(FontCascadeDescription::" . $initial . "());\n";
     $setterContent .= $indent . "    styleResolver.setFontDescription(fontDescription);\n";
   } elsif (exists $propertiesWithStyleBuilderOptions{$name}{"FillLayerProperty"}) {
     $setterContent .= generateFillLayerPropertyInitialValueSetter($name, $indent . "    ");
@@ -753,7 +753,7 @@ sub generateInheritValueSetter {
     $setterContent .= generateAnimationPropertyInheritValueSetter($name, $indent . "    ");
     $didCallSetValue = 1;
   } elsif (exists $propertiesWithStyleBuilderOptions{$name}{"FontProperty"}) {
-    $setterContent .= $indent . "    FontDescription fontDescription = styleResolver.fontDescription();\n";
+    $setterContent .= $indent . "    auto fontDescription = styleResolver.fontDescription();\n";
     $setterContent .= $indent . "    fontDescription." . $setter . "(styleResolver.parentFontDescription()." . $getter . "());\n";
     $setterContent .= $indent . "    styleResolver.setFontDescription(fontDescription);\n";
     $didCallSetValue = 1;
@@ -807,7 +807,7 @@ sub generateValueSetter {
     $setterContent .= generateAnimationPropertyValueSetter($name, $indent . "    ");
     $didCallSetValue = 1;
   } elsif (exists $propertiesWithStyleBuilderOptions{$name}{"FontProperty"}) {
-    $setterContent .= $indent . "    FontDescription fontDescription = styleResolver.fontDescription();\n";
+    $setterContent .= $indent . "    auto fontDescription = styleResolver.fontDescription();\n";
     $setterContent .= $indent . "    fontDescription." . $setter . "(" . $convertedValue . ");\n";
     $setterContent .= $indent . "    styleResolver.setFontDescription(fontDescription);\n";
     $didCallSetValue = 1;
index c4f0767..9d30b2a 100644 (file)
@@ -300,7 +300,7 @@ inline FontMetrics CanvasRenderingContext2D::FontProxy::fontMetrics() const
     return m_font.fontMetrics();
 }
 
-inline const FontDescription& CanvasRenderingContext2D::FontProxy::fontDescription() const
+inline const FontCascadeDescription& CanvasRenderingContext2D::FontProxy::fontDescription() const
 {
     return m_font.fontDescription();
 }
@@ -2093,7 +2093,7 @@ String CanvasRenderingContext2D::font() const
         return defaultFont;
 
     StringBuilder serializedFont;
-    const FontDescription& fontDescription = state().font.fontDescription();
+    const auto& fontDescription = state().font.fontDescription();
 
     if (fontDescription.italic())
         serializedFont.appendLiteral("italic ");
@@ -2152,7 +2152,7 @@ void CanvasRenderingContext2D::setFont(const String& newFont)
     if (RenderStyle* computedStyle = canvas()->computedStyle())
         newStyle->setFontDescription(computedStyle->fontDescription());
     else {
-        FontDescription defaultFontDescription;
+        FontCascadeDescription defaultFontDescription;
         defaultFontDescription.setOneFamily(defaultFontFamily);
         defaultFontDescription.setSpecifiedSize(defaultFontSize);
         defaultFontDescription.setComputedSize(defaultFontSize);
index ca61980..35271d2 100644 (file)
@@ -245,7 +245,7 @@ private:
         bool realized() const { return m_font.fontSelector(); }
         void initialize(FontSelector&, RenderStyle&);
         FontMetrics fontMetrics() const;
-        const FontDescription& fontDescription() const;
+        const FontCascadeDescription& fontDescription() const;
         float width(const TextRun&) const;
         void drawBidiText(GraphicsContext&, const TextRun&, const FloatPoint&, FontCascade::CustomFontNotReadyAction) const;
 
index e95746b..9663773 100644 (file)
@@ -84,7 +84,7 @@ public:
     // Methods used to adjust the RenderStyles of controls.
     
     // The font description result should have a zoomed font size.
-    virtual Optional<FontDescription> controlFont(ControlPart, const FontCascade&, float /*zoomFactor*/) const { return Nullopt; }
+    virtual Optional<FontCascadeDescription> controlFont(ControlPart, const FontCascade&, float /*zoomFactor*/) const { return Nullopt; }
     
     // The size here is in zoomed coordinates already. If a new size is returned, it also needs to be in zoomed coordinates.
     virtual LengthSize controlSize(ControlPart, const FontCascade&, const LengthSize& zoomedSize, float /*zoomFactor*/) const { return zoomedSize; }
index afa8e4c..e683429 100644 (file)
@@ -539,7 +539,7 @@ void FontCache::invalidate()
 }
 
 #if !PLATFORM(COCOA)
-RefPtr<Font> FontCache::similarFont(const FontDescription&)
+RefPtr<Font> FontCache::similarFont(const FontDescription&, const AtomicString&)
 {
     return nullptr;
 }
index cf965c4..8bcb730 100644 (file)
@@ -171,7 +171,7 @@ public:
     WEBCORE_EXPORT RefPtr<Font> fontForFamily(const FontDescription&, const AtomicString&, bool checkingAlternateName = false);
     WEBCORE_EXPORT Ref<Font> lastResortFallbackFont(const FontDescription&);
     WEBCORE_EXPORT Ref<Font> fontForPlatformData(const FontPlatformData&);
-    RefPtr<Font> similarFont(const FontDescription&);
+    RefPtr<Font> similarFont(const FontDescription&, const AtomicString& family);
 
     void addClient(FontSelector*);
     void removeClient(FontSelector*);
index 69ab074..0c60cc4 100644 (file)
@@ -42,7 +42,7 @@ using namespace Unicode;
 
 namespace WebCore {
 
-static Ref<FontCascadeFonts> retrieveOrAddCachedFonts(const FontDescription&, RefPtr<FontSelector>&&);
+static Ref<FontCascadeFonts> retrieveOrAddCachedFonts(const FontCascadeDescription&, RefPtr<FontSelector>&&);
 
 const uint8_t FontCascade::s_roundingHackCharacterTable[256] = {
     0, 0, 0, 0, 0, 0, 0, 0, 0, 1 /*\t*/, 1 /*\n*/, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -107,7 +107,7 @@ FontCascade::FontCascade()
 {
 }
 
-FontCascade::FontCascade(const FontDescription& fd, float letterSpacing, float wordSpacing)
+FontCascade::FontCascade(const FontCascadeDescription& fd, float letterSpacing, float wordSpacing)
     : m_fontDescription(fd)
     , m_weakPtrFactory(this)
     , m_letterSpacing(letterSpacing)
@@ -230,7 +230,7 @@ void clearWidthCaches()
         value->fonts.get().widthCache().clear();
 }
 
-static FontCascadeCacheKey makeFontCascadeCacheKey(const FontDescription& description, FontSelector* fontSelector)
+static FontCascadeCacheKey makeFontCascadeCacheKey(const FontCascadeDescription& description, FontSelector* fontSelector)
 {
     FontCascadeCacheKey key;
     key.fontDescriptionKey = FontDescriptionKey(description);
@@ -269,7 +269,7 @@ void pruneSystemFallbackFonts()
         entry->fonts->pruneSystemFallbacks();
 }
 
-static Ref<FontCascadeFonts> retrieveOrAddCachedFonts(const FontDescription& fontDescription, RefPtr<FontSelector>&& fontSelector)
+static Ref<FontCascadeFonts> retrieveOrAddCachedFonts(const FontCascadeDescription& fontDescription, RefPtr<FontSelector>&& fontSelector)
 {
     auto key = makeFontCascadeCacheKey(fontDescription, fontSelector.get());
 
index 166b90e..f41e4e9 100644 (file)
@@ -115,7 +115,7 @@ public:
 class FontCascade {
 public:
     WEBCORE_EXPORT FontCascade();
-    WEBCORE_EXPORT FontCascade(const FontDescription&, float letterSpacing, float wordSpacing);
+    WEBCORE_EXPORT FontCascade(const FontCascadeDescription&, float letterSpacing, float wordSpacing);
     // This constructor is only used if the platform wants to start with a native font.
     WEBCORE_EXPORT FontCascade(const FontPlatformData&, FontSmoothingMode = AutoSmoothing);
 
@@ -125,7 +125,7 @@ public:
     WEBCORE_EXPORT bool operator==(const FontCascade& other) const;
     bool operator!=(const FontCascade& other) const { return !(*this == other); }
 
-    const FontDescription& fontDescription() const { return m_fontDescription; }
+    const FontCascadeDescription& fontDescription() const { return m_fontDescription; }
 
     int pixelSize() const { return fontDescription().computedPixelSize(); }
     float size() const { return fontDescription().computedSize(); }
@@ -318,24 +318,24 @@ private:
         }
 
         switch (m_fontDescription.kerning()) {
-        case FontDescription::NoneKerning:
+        case FontCascadeDescription::NoneKerning:
             features &= ~Kerning;
             break;
-        case FontDescription::NormalKerning:
+        case FontCascadeDescription::NormalKerning:
             features |= Kerning;
             break;
-        case FontDescription::AutoKerning:
+        case FontCascadeDescription::AutoKerning:
             break;
         }
 
         switch (m_fontDescription.commonLigaturesState()) {
-        case FontDescription::DisabledLigaturesState:
+        case FontCascadeDescription::DisabledLigaturesState:
             features &= ~Ligatures;
             break;
-        case FontDescription::EnabledLigaturesState:
+        case FontCascadeDescription::EnabledLigaturesState:
             features |= Ligatures;
             break;
-        case FontDescription::NormalLigaturesState:
+        case FontCascadeDescription::NormalLigaturesState:
             break;
         }
 
@@ -344,7 +344,7 @@ private:
 
     static TypesettingFeatures s_defaultTypesettingFeatures;
 
-    FontDescription m_fontDescription;
+    FontCascadeDescription m_fontDescription;
     mutable RefPtr<FontCascadeFonts> m_fonts;
     WeakPtrFactory<FontCascade> m_weakPtrFactory;
     float m_letterSpacing;
index 9578eef..2e63680 100644 (file)
@@ -117,7 +117,7 @@ FontCascadeFonts::~FontCascadeFonts()
 {
 }
 
-void FontCascadeFonts::determinePitch(const FontDescription& description)
+void FontCascadeFonts::determinePitch(const FontCascadeDescription& description)
 {
     auto& primaryRanges = realizeFallbackRangesAt(description, 0);
     unsigned numRanges = primaryRanges.size();
@@ -136,7 +136,7 @@ bool FontCascadeFonts::isLoadingCustomFonts() const
     return false;
 }
 
-static FontRanges realizeNextFallback(const FontDescription& description, unsigned& index, FontSelector* fontSelector)
+static FontRanges realizeNextFallback(const FontCascadeDescription& description, unsigned& index, FontSelector* fontSelector)
 {
     ASSERT(index < description.familyCount());
 
@@ -156,10 +156,14 @@ static FontRanges realizeNextFallback(const FontDescription& description, unsign
     // We didn't find a font. Try to find a similar font using our own specific knowledge about our platform.
     // For example on OS X, we know to map any families containing the words Arabic, Pashto, or Urdu to the
     // Geeza Pro font.
-    return FontRanges(fontCache.similarFont(description));
+    for (auto& family : description.families()) {
+        if (auto font = fontCache.similarFont(description, family))
+            return FontRanges(WTF::move(font));
+    }
+    return { };
 }
 
-const FontRanges& FontCascadeFonts::realizeFallbackRangesAt(const FontDescription& description, unsigned index)
+const FontRanges& FontCascadeFonts::realizeFallbackRangesAt(const FontCascadeDescription& description, unsigned index)
 {
     if (index < m_realizedFallbackRanges.size())
         return m_realizedFallbackRanges[index];
@@ -312,7 +316,7 @@ static GlyphData glyphDataForNonCJKCharacterWithGlyphOrientation(UChar32 charact
     return data;
 }
 
-GlyphData FontCascadeFonts::glyphDataForSystemFallback(UChar32 c, const FontDescription& description, FontVariant variant)
+GlyphData FontCascadeFonts::glyphDataForSystemFallback(UChar32 c, const FontCascadeDescription& description, FontVariant variant)
 {
     // System fallback is character-dependent.
     auto& primaryRanges = realizeFallbackRangesAt(description, 0);
@@ -349,7 +353,7 @@ GlyphData FontCascadeFonts::glyphDataForSystemFallback(UChar32 c, const FontDesc
     return fallbackGlyphData;
 }
 
-GlyphData FontCascadeFonts::glyphDataForVariant(UChar32 c, const FontDescription& description, FontVariant variant, unsigned fallbackIndex)
+GlyphData FontCascadeFonts::glyphDataForVariant(UChar32 c, const FontCascadeDescription& description, FontVariant variant, unsigned fallbackIndex)
 {
     while (true) {
         auto& fontRanges = realizeFallbackRangesAt(description, fallbackIndex++);
@@ -370,7 +374,7 @@ GlyphData FontCascadeFonts::glyphDataForVariant(UChar32 c, const FontDescription
     return glyphDataForSystemFallback(c, description, variant);
 }
 
-GlyphData FontCascadeFonts::glyphDataForNormalVariant(UChar32 c, const FontDescription& description)
+GlyphData FontCascadeFonts::glyphDataForNormalVariant(UChar32 c, const FontCascadeDescription& description)
 {
     for (unsigned fallbackIndex = 0; ; ++fallbackIndex) {
         auto& fontRanges = realizeFallbackRangesAt(description, fallbackIndex);
@@ -421,7 +425,7 @@ static RefPtr<GlyphPage> glyphPageFromFontRanges(unsigned pageNumber, const Font
     return const_cast<GlyphPage*>(font->glyphPage(pageNumber));
 }
 
-GlyphData FontCascadeFonts::glyphDataForCharacter(UChar32 c, const FontDescription& description, FontVariant variant)
+GlyphData FontCascadeFonts::glyphDataForCharacter(UChar32 c, const FontCascadeDescription& description, FontVariant variant)
 {
     ASSERT(isMainThread());
     ASSERT(variant != AutoVariant);
index b3a4bae..e5ab499 100644 (file)
@@ -35,7 +35,7 @@
 
 namespace WebCore {
 
-class FontDescription;
+class FontCascadeDescription;
 class FontPlatformData;
 class FontSelector;
 class GraphicsContext;
@@ -52,10 +52,10 @@ public:
 
     bool isForPlatformFont() const { return m_isForPlatformFont; }
 
-    GlyphData glyphDataForCharacter(UChar32, const FontDescription&, FontVariant);
+    GlyphData glyphDataForCharacter(UChar32, const FontCascadeDescription&, FontVariant);
 
-    bool isFixedPitch(const FontDescription&);
-    void determinePitch(const FontDescription&);
+    bool isFixedPitch(const FontCascadeDescription&);
+    void determinePitch(const FontCascadeDescription&);
 
     bool isLoadingCustomFonts() const;
 
@@ -67,8 +67,8 @@ public:
     WidthCache& widthCache() { return m_widthCache; }
     const WidthCache& widthCache() const { return m_widthCache; }
 
-    const Font& primaryFont(const FontDescription&);
-    WEBCORE_EXPORT const FontRanges& realizeFallbackRangesAt(const FontDescription&, unsigned fallbackIndex);
+    const Font& primaryFont(const FontCascadeDescription&);
+    WEBCORE_EXPORT const FontRanges& realizeFallbackRangesAt(const FontCascadeDescription&, unsigned fallbackIndex);
 
     void pruneSystemFallbacks();
 
@@ -76,9 +76,9 @@ private:
     FontCascadeFonts(RefPtr<FontSelector>&&);
     FontCascadeFonts(const FontPlatformData&);
 
-    GlyphData glyphDataForSystemFallback(UChar32, const FontDescription&, FontVariant);
-    GlyphData glyphDataForNormalVariant(UChar32, const FontDescription&);
-    GlyphData glyphDataForVariant(UChar32, const FontDescription&, FontVariant, unsigned fallbackIndex);
+    GlyphData glyphDataForSystemFallback(UChar32, const FontCascadeDescription&, FontVariant);
+    GlyphData glyphDataForNormalVariant(UChar32, const FontCascadeDescription&);
+    GlyphData glyphDataForVariant(UChar32, const FontCascadeDescription&, FontVariant, unsigned fallbackIndex);
 
     Vector<FontRanges, 1> m_realizedFallbackRanges;
     unsigned m_lastRealizedFallbackIndex { 0 };
@@ -115,14 +115,14 @@ private:
     bool m_isForPlatformFont { false };
 };
 
-inline bool FontCascadeFonts::isFixedPitch(const FontDescription& description)
+inline bool FontCascadeFonts::isFixedPitch(const FontCascadeDescription& description)
 {
     if (m_pitch == UnknownPitch)
         determinePitch(description);
     return m_pitch == FixedPitch;
 };
 
-inline const Font& FontCascadeFonts::primaryFont(const FontDescription& description)
+inline const Font& FontCascadeFonts::primaryFont(const FontCascadeDescription& description)
 {
     ASSERT(isMainThread());
     if (!m_cachedPrimaryFont) {
index d0c30bb..feff26f 100644 (file)
@@ -34,7 +34,7 @@
 
 namespace WebCore {
 
-struct SameSizeAsFontDescription {
+struct SameSizeAsFontCascadeDescription {
     void* pointers[3];
     float sizes[2];
     // FIXME: Make them fit into one word.
@@ -42,7 +42,7 @@ struct SameSizeAsFontDescription {
     uint32_t bitfields2 : 8;
 };
 
-COMPILE_ASSERT(sizeof(FontDescription) == sizeof(SameSizeAsFontDescription), FontDescription_should_stay_small);
+COMPILE_ASSERT(sizeof(FontCascadeDescription) == sizeof(SameSizeAsFontCascadeDescription), FontCascadeDescription_should_stay_small);
 
 FontDescription::FontDescription()
     : m_orientation(Horizontal)
@@ -50,82 +50,86 @@ FontDescription::FontDescription()
     , m_widthVariant(RegularWidth)
     , m_italic(FontItalicOff)
     , m_smallCaps(FontSmallCapsOff)
-    , m_isAbsoluteSize(false)
     , m_weight(FontWeightNormal)
     , m_renderingMode(NormalRenderingMode)
+    , m_textRendering(AutoTextRendering)
+    , m_script(localeToScriptCodeForFontSelection(m_locale))
+    , m_fontSynthesis(FontSynthesisWeight | FontSynthesisStyle)
+{
+}
+
+void FontDescription::setLocale(const AtomicString& locale)
+{
+    m_locale = locale;
+    m_script = localeToScriptCodeForFontSelection(m_locale);
+}
+
+FontTraitsMask FontDescription::traitsMask() const
+{
+    return static_cast<FontTraitsMask>((m_italic ? FontStyleItalicMask : FontStyleNormalMask)
+        | (m_smallCaps ? FontVariantSmallCapsMask : FontVariantNormalMask)
+        | (FontWeight100Mask << (m_weight - FontWeight100)));
+    
+}
+
+FontCascadeDescription::FontCascadeDescription()
+    : m_isAbsoluteSize(false)
     , m_kerning(AutoKerning)
     , m_commonLigaturesState(NormalLigaturesState)
     , m_discretionaryLigaturesState(NormalLigaturesState)
     , m_historicalLigaturesState(NormalLigaturesState)
     , m_keywordSize(0)
     , m_fontSmoothing(AutoSmoothing)
-    , m_textRendering(AutoTextRendering)
     , m_isSpecifiedFont(false)
-    , m_script(localeToScriptCodeForFontSelection(m_locale))
-    , m_fontSynthesis(initialFontSynthesis())
 {
 }
 
-FontWeight FontDescription::lighterWeight(void) const
+FontWeight FontCascadeDescription::lighterWeight(void) const
 {
-    switch (m_weight) {
-        case FontWeight100:
-        case FontWeight200:
-        case FontWeight300:
-        case FontWeight400:
-        case FontWeight500:
-            return FontWeight100;
-
-        case FontWeight600:
-        case FontWeight700:
-            return FontWeight400;
-
-        case FontWeight800:
-        case FontWeight900:
-            return FontWeight700;
+    switch (weight()) {
+    case FontWeight100:
+    case FontWeight200:
+    case FontWeight300:
+    case FontWeight400:
+    case FontWeight500:
+        return FontWeight100;
+
+    case FontWeight600:
+    case FontWeight700:
+        return FontWeight400;
+
+    case FontWeight800:
+    case FontWeight900:
+        return FontWeight700;
     }
     ASSERT_NOT_REACHED();
     return FontWeightNormal;
 }
 
-FontWeight FontDescription::bolderWeight(void) const
+FontWeight FontCascadeDescription::bolderWeight(void) const
 {
-    switch (m_weight) {
-        case FontWeight100:
-        case FontWeight200:
-        case FontWeight300:
-            return FontWeight400;
-
-        case FontWeight400:
-        case FontWeight500:
-            return FontWeight700;
-
-        case FontWeight600:
-        case FontWeight700:
-        case FontWeight800:
-        case FontWeight900:
-            return FontWeight900;
+    switch (weight()) {
+    case FontWeight100:
+    case FontWeight200:
+    case FontWeight300:
+        return FontWeight400;
+
+    case FontWeight400:
+    case FontWeight500:
+        return FontWeight700;
+
+    case FontWeight600:
+    case FontWeight700:
+    case FontWeight800:
+    case FontWeight900:
+        return FontWeight900;
     }
     ASSERT_NOT_REACHED();
     return FontWeightNormal;
 }
 
-FontTraitsMask FontDescription::traitsMask() const
-{
-    return static_cast<FontTraitsMask>((m_italic ? FontStyleItalicMask : FontStyleNormalMask)
-            | (m_smallCaps ? FontVariantSmallCapsMask : FontVariantNormalMask)
-            | (FontWeight100Mask << (m_weight - FontWeight100)));
-    
-}
-
-void FontDescription::setLocale(const AtomicString& locale)
-{
-    m_locale = locale;
-    m_script = localeToScriptCodeForFontSelection(m_locale);
-}
-
 #if ENABLE(IOS_TEXT_AUTOSIZING)
-bool FontDescription::familiesEqualForTextAutoSizing(const FontDescription& other) const
+bool FontCascadeDescription::familiesEqualForTextAutoSizing(const FontCascadeDescription& other) const
 {
     unsigned thisFamilyCount = familyCount();
     unsigned otherFamilyCount = other.familyCount();
index e8774d4..c608a3c 100644 (file)
@@ -40,14 +40,90 @@ using namespace WebKitFontFamilyNames;
 
 class FontDescription {
 public:
+    WEBCORE_EXPORT FontDescription();
+
+    bool operator==(const FontDescription&) const;
+    bool operator!=(const FontDescription& other) const { return !(*this == other); }
+
+    float computedSize() const { return m_computedSize; }
+    FontItalic italic() const { return static_cast<FontItalic>(m_italic); }
+    int computedPixelSize() const { return int(m_computedSize + 0.5f); }
+    FontSmallCaps smallCaps() const { return static_cast<FontSmallCaps>(m_smallCaps); }
+    FontWeight weight() const { return static_cast<FontWeight>(m_weight); }
+    FontWeight lighterWeight() const;
+    FontWeight bolderWeight() const;
+    FontRenderingMode renderingMode() const { return static_cast<FontRenderingMode>(m_renderingMode); }
+    TextRenderingMode textRenderingMode() const { return static_cast<TextRenderingMode>(m_textRendering); }
+    UScriptCode script() const { return static_cast<UScriptCode>(m_script); }
+    const AtomicString& locale() const { return m_locale; }
+
+    FontOrientation orientation() const { return static_cast<FontOrientation>(m_orientation); }
+    NonCJKGlyphOrientation nonCJKGlyphOrientation() const { return static_cast<NonCJKGlyphOrientation>(m_nonCJKGlyphOrientation); }
+    FontWidthVariant widthVariant() const { return static_cast<FontWidthVariant>(m_widthVariant); }
+    FontFeatureSettings* featureSettings() const { return m_featureSettings.get(); }
+    FontSynthesis fontSynthesis() const { return static_cast<FontSynthesis>(m_fontSynthesis); }
+
+    void setComputedSize(float s) { m_computedSize = clampToFloat(s); }
+    void setItalic(FontItalic i) { m_italic = i; }
+    void setIsItalic(bool i) { setItalic(i ? FontItalicOn : FontItalicOff); }
+    void setSmallCaps(FontSmallCaps c) { m_smallCaps = c; }
+    void setIsSmallCaps(bool c) { setSmallCaps(c ? FontSmallCapsOn : FontSmallCapsOff); }
+    void setWeight(FontWeight w) { m_weight = w; }
+    void setRenderingMode(FontRenderingMode mode) { m_renderingMode = mode; }
+    void setTextRenderingMode(TextRenderingMode rendering) { m_textRendering = rendering; }
+    void setOrientation(FontOrientation orientation) { m_orientation = orientation; }
+    void setNonCJKGlyphOrientation(NonCJKGlyphOrientation orientation) { m_nonCJKGlyphOrientation = orientation; }
+    void setWidthVariant(FontWidthVariant widthVariant) { m_widthVariant = widthVariant; } // Make sure new callers of this sync with FontPlatformData::isForTextCombine()!
+    void setLocale(const AtomicString&);
+    void setFeatureSettings(PassRefPtr<FontFeatureSettings> settings) { m_featureSettings = settings; }
+    void setFontSynthesis(FontSynthesis fontSynthesis) { m_fontSynthesis = fontSynthesis; }
+
+    FontTraitsMask traitsMask() const;
+
+private:
+    RefPtr<FontFeatureSettings> m_featureSettings;
+    AtomicString m_locale;
+
+    float m_computedSize { 0 }; // Computed size adjusted for the minimum font size and the zoom factor.
+    unsigned m_orientation : 1; // FontOrientation - Whether the font is rendering on a horizontal line or a vertical line.
+    unsigned m_nonCJKGlyphOrientation : 1; // NonCJKGlyphOrientation - Only used by vertical text. Determines the default orientation for non-ideograph glyphs.
+    unsigned m_widthVariant : 2; // FontWidthVariant
+    unsigned m_italic : 1; // FontItalic
+    unsigned m_smallCaps : 1; // FontSmallCaps
+    unsigned m_weight : 8; // FontWeight
+    unsigned m_renderingMode : 1; // Used to switch between CG and GDI text on Windows.
+    unsigned m_textRendering : 2; // TextRenderingMode
+    unsigned m_script : 7; // Used to help choose an appropriate font for generic font families.
+    unsigned m_fontSynthesis : 2; // FontSynthesis type
+};
+
+inline bool FontDescription::operator==(const FontDescription& other) const
+{
+    return m_computedSize == other.m_computedSize
+        && m_italic == other.m_italic
+        && m_smallCaps == other.m_smallCaps
+        && m_weight == other.m_weight
+        && m_renderingMode == other.m_renderingMode
+        && m_textRendering == other.m_textRendering
+        && m_orientation == other.m_orientation
+        && m_nonCJKGlyphOrientation == other.m_nonCJKGlyphOrientation
+        && m_widthVariant == other.m_widthVariant
+        && m_locale == other.m_locale
+        && m_featureSettings == other.m_featureSettings
+        && m_fontSynthesis == other.m_fontSynthesis;
+}
+
+// FIXME: Move to a file of its own.
+class FontCascadeDescription : public FontDescription {
+public:
     enum Kerning { AutoKerning, NormalKerning, NoneKerning };
 
     enum LigaturesState { NormalLigaturesState, DisabledLigaturesState, EnabledLigaturesState };
 
-    WEBCORE_EXPORT FontDescription();
+    FontCascadeDescription();
 
-    bool operator==(const FontDescription&) const;
-    bool operator!=(const FontDescription& other) const { return !(*this == other); }
+    bool operator==(const FontCascadeDescription&) const;
+    bool operator!=(const FontCascadeDescription& other) const { return !(*this == other); }
 
     unsigned familyCount() const { return m_families.size(); }
     const AtomicString& firstFamily() const { return familyAt(0); }
@@ -55,17 +131,13 @@ public:
     const RefCountedArray<AtomicString>& families() const { return m_families; }
 
     float specifiedSize() const { return m_specifiedSize; }
-    float computedSize() const { return m_computedSize; }
-    FontItalic italic() const { return static_cast<FontItalic>(m_italic); }
-    int computedPixelSize() const { return int(m_computedSize + 0.5f); }
-    FontSmallCaps smallCaps() const { return static_cast<FontSmallCaps>(m_smallCaps); }
     bool isAbsoluteSize() const { return m_isAbsoluteSize; }
-    FontWeight weight() const { return static_cast<FontWeight>(m_weight); }
     FontWeight lighterWeight() const;
     FontWeight bolderWeight() const;
+
     // only use fixed default size when there is only one font family, and that family is "monospace"
     bool useFixedDefaultSize() const { return familyCount() == 1 && firstFamily() == monospaceFamily; }
-    FontRenderingMode renderingMode() const { return static_cast<FontRenderingMode>(m_renderingMode); }
+
     Kerning kerning() const { return static_cast<Kerning>(m_kerning); }
     LigaturesState commonLigaturesState() const { return static_cast<LigaturesState>(m_commonLigaturesState); }
     LigaturesState discretionaryLigaturesState() const { return static_cast<LigaturesState>(m_discretionaryLigaturesState); }
@@ -78,30 +150,13 @@ public:
         return identifier;
     }
     FontSmoothingMode fontSmoothing() const { return static_cast<FontSmoothingMode>(m_fontSmoothing); }
-    TextRenderingMode textRenderingMode() const { return static_cast<TextRenderingMode>(m_textRendering); }
-    UScriptCode script() const { return static_cast<UScriptCode>(m_script); }
-    const AtomicString& locale() const { return m_locale; }
-
-    FontTraitsMask traitsMask() const;
     bool isSpecifiedFont() const { return m_isSpecifiedFont; }
-    FontOrientation orientation() const { return static_cast<FontOrientation>(m_orientation); }
-    NonCJKGlyphOrientation nonCJKGlyphOrientation() const { return static_cast<NonCJKGlyphOrientation>(m_nonCJKGlyphOrientation); }
-    FontWidthVariant widthVariant() const { return static_cast<FontWidthVariant>(m_widthVariant); }
-    FontFeatureSettings* featureSettings() const { return m_featureSettings.get(); }
-    FontSynthesis fontSynthesis() const { return static_cast<FontSynthesis>(m_fontSynthesis); }
 
     void setOneFamily(const AtomicString& family) { ASSERT(m_families.size() == 1); m_families[0] = family; }
     void setFamilies(const Vector<AtomicString>& families) { m_families = RefCountedArray<AtomicString>(families); }
     void setFamilies(const RefCountedArray<AtomicString>& families) { m_families = families; }
-    void setComputedSize(float s) { m_computedSize = clampToFloat(s); }
     void setSpecifiedSize(float s) { m_specifiedSize = clampToFloat(s); }
-    void setItalic(FontItalic i) { m_italic = i; }
-    void setIsItalic(bool i) { setItalic(i ? FontItalicOn : FontItalicOff); }
-    void setSmallCaps(FontSmallCaps c) { m_smallCaps = c; }
-    void setIsSmallCaps(bool c) { setSmallCaps(c ? FontSmallCapsOn : FontSmallCapsOff); }
     void setIsAbsoluteSize(bool s) { m_isAbsoluteSize = s; }
-    void setWeight(FontWeight w) { m_weight = w; }
-    void setRenderingMode(FontRenderingMode mode) { m_renderingMode = mode; }
     void setKerning(Kerning kerning) { m_kerning = kerning; }
     void setCommonLigaturesState(LigaturesState commonLigaturesState) { m_commonLigaturesState = commonLigaturesState; }
     void setDiscretionaryLigaturesState(LigaturesState discretionaryLigaturesState) { m_discretionaryLigaturesState = discretionaryLigaturesState; }
@@ -118,25 +173,17 @@ public:
         static_assert(CSSValueWebkitXxxLarge - CSSValueXxSmall + 1 == 8, "Maximum keyword size should be 8.");
         setKeywordSize(identifier ? identifier - CSSValueXxSmall + 1 : 0);
     }
-
     void setFontSmoothing(FontSmoothingMode smoothing) { m_fontSmoothing = smoothing; }
-    void setTextRenderingMode(TextRenderingMode rendering) { m_textRendering = rendering; }
     void setIsSpecifiedFont(bool isSpecifiedFont) { m_isSpecifiedFont = isSpecifiedFont; }
-    void setOrientation(FontOrientation orientation) { m_orientation = orientation; }
-    void setNonCJKGlyphOrientation(NonCJKGlyphOrientation orientation) { m_nonCJKGlyphOrientation = orientation; }
-    void setWidthVariant(FontWidthVariant widthVariant) { m_widthVariant = widthVariant; } // Make sure new callers of this sync with FontPlatformData::isForTextCombine()!
-    void setLocale(const AtomicString&);
-    void setFeatureSettings(PassRefPtr<FontFeatureSettings> settings) { m_featureSettings = settings; }
-    void setFontSynthesis(FontSynthesis fontSynthesis) { m_fontSynthesis = fontSynthesis; }
 
 #if ENABLE(IOS_TEXT_AUTOSIZING)
-    bool familiesEqualForTextAutoSizing(const FontDescription& other) const;
+    bool familiesEqualForTextAutoSizing(const FontCascadeDescription& other) const;
 
-    bool equalForTextAutoSizing(const FontDescription& other) const
+    bool equalForTextAutoSizing(const FontCascadeDescription& other) const
     {
         return familiesEqualForTextAutoSizing(other)
             && m_specifiedSize == other.m_specifiedSize
-            && m_smallCaps == other.m_smallCaps
+            && smallCaps() == other.smallCaps()
             && m_isAbsoluteSize == other.m_isAbsoluteSize;
     }
 #endif
@@ -152,27 +199,12 @@ public:
 
 private:
     RefCountedArray<AtomicString> m_families { 1 };
-    RefPtr<FontFeatureSettings> m_featureSettings;
-    AtomicString m_locale { initialLocale() };
 
     float m_specifiedSize { 0 };   // Specified CSS value. Independent of rendering issues such as integer
                              // rounding, minimum font sizes, and zooming.
-    float m_computedSize { 0 };    // Computed size adjusted for the minimum font size and the zoom factor.
-
-    unsigned m_orientation : 1; // FontOrientation - Whether the font is rendering on a horizontal line or a vertical line.
-    unsigned m_nonCJKGlyphOrientation : 1; // NonCJKGlyphOrientation - Only used by vertical text. Determines the default orientation for non-ideograph glyphs.
-
-    unsigned m_widthVariant : 2; // FontWidthVariant
-
-    unsigned m_italic : 1; // FontItalic
-    unsigned m_smallCaps : 1; // FontSmallCaps
     unsigned m_isAbsoluteSize : 1; // Whether or not CSS specified an explicit size
                                   // (logical sizes like "medium" don't count).
-    unsigned m_weight : 8; // FontWeight
-
-    unsigned m_renderingMode : 1;  // Used to switch between CG and GDI text on Windows.
     unsigned m_kerning : 2; // Kerning
-
     unsigned m_commonLigaturesState : 2;
     unsigned m_discretionaryLigaturesState : 2;
     unsigned m_historicalLigaturesState : 2;
@@ -182,36 +214,22 @@ private:
                            // (e.g., 13px monospace vs. 16px everything else).  Sizes are 1-8 (like the HTML size values for <font>).
 
     unsigned m_fontSmoothing : 2; // FontSmoothingMode
-    unsigned m_textRendering : 2; // TextRenderingMode
     unsigned m_isSpecifiedFont : 1; // True if a web page specifies a non-generic font family as the first font family.
-    unsigned m_script : 7; // Used to help choose an appropriate font for generic font families.
-    unsigned m_fontSynthesis : 2; // FontSynthesis type
 };
 
-inline bool FontDescription::operator==(const FontDescription& other) const
+inline bool FontCascadeDescription::operator==(const FontCascadeDescription& other) const
 {
-    return m_families == other.m_families
+    return FontDescription::operator==(other)
+        && m_families == other.m_families
         && m_specifiedSize == other.m_specifiedSize
-        && m_computedSize == other.m_computedSize
-        && m_italic == other.m_italic
-        && m_smallCaps == other.m_smallCaps
         && m_isAbsoluteSize == other.m_isAbsoluteSize
-        && m_weight == other.m_weight
-        && m_renderingMode == other.m_renderingMode
         && m_kerning == other.m_kerning
         && m_commonLigaturesState == other.m_commonLigaturesState
         && m_discretionaryLigaturesState == other.m_discretionaryLigaturesState
         && m_historicalLigaturesState == other.m_historicalLigaturesState
         && m_keywordSize == other.m_keywordSize
         && m_fontSmoothing == other.m_fontSmoothing
-        && m_textRendering == other.m_textRendering
-        && m_isSpecifiedFont == other.m_isSpecifiedFont
-        && m_orientation == other.m_orientation
-        && m_nonCJKGlyphOrientation == other.m_nonCJKGlyphOrientation
-        && m_widthVariant == other.m_widthVariant
-        && m_locale == other.m_locale
-        && m_featureSettings == other.m_featureSettings
-        && m_fontSynthesis == other.m_fontSynthesis;
+        && m_isSpecifiedFont == other.m_isSpecifiedFont;
 }
 
 }
index 3b11772..d20b58c 100644 (file)
@@ -33,6 +33,7 @@
 
 namespace WebCore {
 
+class FontCascadeDescription;
 class FontDescription;
 class FontSelectorClient;
 
@@ -44,7 +45,7 @@ public:
     virtual PassRefPtr<Font> fallbackFontAt(const FontDescription&, size_t) = 0;
 
     virtual size_t fallbackFontCount() = 0;
-    virtual bool resolvesFamilyFor(const FontDescription&) const = 0;
+    virtual bool resolvesFamilyFor(const FontCascadeDescription&) const = 0;
 
     virtual void fontCacheInvalidated() { }
 
index 446d06b..5db4828 100644 (file)
@@ -780,7 +780,7 @@ void PlatformCALayerWin::drawTextAtPoint(CGContextRef context, CGFloat x, CGFloa
 {
     String text(message, length);
 
-    FontDescription desc;
+    FontCascadeDescription desc;
 
     NONCLIENTMETRICS metrics;
     metrics.cbSize = sizeof(metrics);
index 019282c..097c633 100644 (file)
@@ -243,48 +243,39 @@ uint16_t toCoreTextFontWeight(FontWeight fontWeight)
     return coreTextFontWeights[fontWeight];
 }
 
-RefPtr<Font> FontCache::similarFont(const FontDescription& description)
+RefPtr<Font> FontCache::similarFont(const FontDescription& description, const AtomicString& family)
 {
     // Attempt to find an appropriate font using a match based on the presence of keywords in
     // the requested names. For example, we'll match any name that contains "Arabic" to Geeza Pro.
-    RefPtr<Font> font;
-    for (unsigned i = 0; i < description.familyCount(); ++i) {
-        const AtomicString& family = description.familyAt(i);
-        if (family.isEmpty())
-            continue;
+    if (family.isEmpty())
+        return nullptr;
 
 #if PLATFORM(IOS)
-        // Substitute the default monospace font for well-known monospace fonts.
-        static NeverDestroyed<AtomicString> monaco("monaco", AtomicString::ConstructFromLiteral);
-        static NeverDestroyed<AtomicString> menlo("menlo", AtomicString::ConstructFromLiteral);
-        static NeverDestroyed<AtomicString> courier("courier", AtomicString::ConstructFromLiteral);
-        if (equalIgnoringCase(family, monaco) || equalIgnoringCase(family, menlo)) {
-            font = fontForFamily(description, courier);
-            continue;
-        }
-
-        // Substitute Verdana for Lucida Grande.
-        static NeverDestroyed<AtomicString> lucidaGrande("lucida grande", AtomicString::ConstructFromLiteral);
-        static NeverDestroyed<AtomicString> verdana("verdana", AtomicString::ConstructFromLiteral);
-        if (equalIgnoringCase(family, lucidaGrande)) {
-            font = fontForFamily(description, verdana);
-            continue;
-        }
+    // Substitute the default monospace font for well-known monospace fonts.
+    static NeverDestroyed<AtomicString> monaco("monaco", AtomicString::ConstructFromLiteral);
+    static NeverDestroyed<AtomicString> menlo("menlo", AtomicString::ConstructFromLiteral);
+    static NeverDestroyed<AtomicString> courier("courier", AtomicString::ConstructFromLiteral);
+    if (equalIgnoringCase(family, monaco) || equalIgnoringCase(family, menlo))
+        return fontForFamily(description, courier);
+
+    // Substitute Verdana for Lucida Grande.
+    static NeverDestroyed<AtomicString> lucidaGrande("lucida grande", AtomicString::ConstructFromLiteral);
+    static NeverDestroyed<AtomicString> verdana("verdana", AtomicString::ConstructFromLiteral);
+    if (equalIgnoringCase(family, lucidaGrande))
+        return fontForFamily(description, verdana);
 #endif
 
-        static NeverDestroyed<String> arabic(ASCIILiteral("Arabic"));
-        static NeverDestroyed<String> pashto(ASCIILiteral("Pashto"));
-        static NeverDestroyed<String> urdu(ASCIILiteral("Urdu"));
-        static String* matchWords[3] = { &arabic.get(), &pashto.get(), &urdu.get() };
-        static NeverDestroyed<AtomicString> geezaPlain("GeezaPro", AtomicString::ConstructFromLiteral);
-        static NeverDestroyed<AtomicString> geezaBold("GeezaPro-Bold", AtomicString::ConstructFromLiteral);
-        for (String* matchWord : matchWords) {
-            if (family.contains(*matchWord, false))
-                font = fontForFamily(description, isFontWeightBold(description.weight()) ? geezaBold : geezaPlain);
-        }
+    static NeverDestroyed<String> arabic(ASCIILiteral("Arabic"));
+    static NeverDestroyed<String> pashto(ASCIILiteral("Pashto"));
+    static NeverDestroyed<String> urdu(ASCIILiteral("Urdu"));
+    static String* matchWords[3] = { &arabic.get(), &pashto.get(), &urdu.get() };
+    static NeverDestroyed<AtomicString> geezaPlain("GeezaPro", AtomicString::ConstructFromLiteral);
+    static NeverDestroyed<AtomicString> geezaBold("GeezaPro-Bold", AtomicString::ConstructFromLiteral);
+    for (String* matchWord : matchWords) {
+        if (family.contains(*matchWord, false))
+            return fontForFamily(description, isFontWeightBold(description.weight()) ? geezaBold : geezaPlain);
     }
-
-    return font.release();
+    return nullptr;
 }
 
 Vector<FontTraitsMask> FontCache::getTraitsInFamily(const AtomicString& familyName)
index ef18fce..c0331a4 100644 (file)
@@ -328,7 +328,7 @@ void HarfBuzzShaper::setPadding(int padding)
 
 void HarfBuzzShaper::setFontFeatures()
 {
-    const FontDescription& description = m_font->fontDescription();
+    const auto& description = m_font->fontDescription();
     if (description.orientation() == Vertical) {
         static hb_feature_t vert = { HarfBuzzFace::vertTag, 1, 0, static_cast<unsigned>(-1) };
         static hb_feature_t vrt2 = { HarfBuzzFace::vrt2Tag, 1, 0, static_cast<unsigned>(-1) };
@@ -338,15 +338,15 @@ void HarfBuzzShaper::setFontFeatures()
 
     hb_feature_t kerning = { HarfBuzzFace::kernTag, 0, 0, static_cast<unsigned>(-1) };
     switch (description.kerning()) {
-    case FontDescription::NormalKerning:
+    case FontCascadeDescription::NormalKerning:
         kerning.value = 1;
         m_features.append(kerning);
         break;
-    case FontDescription::NoneKerning:
+    case FontCascadeDescription::NoneKerning:
         kerning.value = 0;
         m_features.append(kerning);
         break;
-    case FontDescription::AutoKerning:
+    case FontCascadeDescription::AutoKerning:
         break;
     default:
         ASSERT_NOT_REACHED();
index 3bade7a..4e0248d 100644 (file)
@@ -42,7 +42,7 @@ public:
     
     virtual int baselinePositionAdjustment(ControlPart) const override;
 
-    virtual Optional<FontDescription> controlFont(ControlPart, const FontCascade&, float zoomFactor) const override;
+    virtual Optional<FontCascadeDescription> controlFont(ControlPart, const FontCascade&, float zoomFactor) const override;
     
     virtual LengthSize controlSize(ControlPart, const FontCascade&, const LengthSize&, float zoomFactor) const override;
     virtual LengthSize minimumControlSize(ControlPart, const FontCascade&, float zoomFactor) const override;
index 1bd509f..9d4626a 100644 (file)
@@ -700,11 +700,11 @@ int ThemeMac::baselinePositionAdjustment(ControlPart part) const
     return Theme::baselinePositionAdjustment(part);
 }
 
-Optional<FontDescription> ThemeMac::controlFont(ControlPart part, const FontCascade& font, float zoomFactor) const
+Optional<FontCascadeDescription> ThemeMac::controlFont(ControlPart part, const FontCascade& font, float zoomFactor) const
 {
     switch (part) {
         case PushButtonPart: {
-            FontDescription fontDescription;
+            FontCascadeDescription fontDescription;
             fontDescription.setIsAbsoluteSize(true);
 
             NSFont* nsFont = [NSFont systemFontOfSize:[NSFont systemFontSizeForControlSize:controlSizeForFont(font)]];
index 5e0dd6a..97b58f1 100644 (file)
@@ -108,7 +108,7 @@ static FontCascade dragLabelFont(int size, bool bold, FontRenderingMode renderin
     metrics.cbSize = sizeof(metrics);
     SystemParametersInfo(SPI_GETNONCLIENTMETRICS, metrics.cbSize, &metrics, 0);
 
-    FontDescription description;
+    FontCascadeDescription description;
     description.setWeight(bold ? FontWeightBold : FontWeightNormal);
     description.setOneFamily(metrics.lfSmCaptionFont.lfFaceName);
     description.setSpecifiedSize((float)size);
index 45c1ac7..eedf6fc 100644 (file)
@@ -341,7 +341,7 @@ void PopupMenuWin::calculatePositionAndSize(const IntRect& r, FrameView* v)
 
         FontCascade itemFont = client()->menuStyle().font();
         if (client()->itemIsLabel(i)) {
-            FontDescription d = itemFont.fontDescription();
+            auto d = itemFont.fontDescription();
             d.setWeight(d.bolderWeight());
             itemFont = FontCascade(d, itemFont.letterSpacing(), itemFont.wordSpacing());
             itemFont.update(m_popupClient->fontSelector());
@@ -647,7 +647,7 @@ void PopupMenuWin::paint(const IntRect& damageRect, HDC hdc)
         
         FontCascade itemFont = client()->menuStyle().font();
         if (client()->itemIsLabel(index)) {
-            FontDescription d = itemFont.fontDescription();
+            auto d = itemFont.fontDescription();
             d.setWeight(d.bolderWeight());
             itemFont = FontCascade(d, itemFont.letterSpacing(), itemFont.wordSpacing());
             itemFont.update(m_popupClient->fontSelector());
index 5b4a5a1..a995664 100644 (file)
@@ -2985,7 +2985,7 @@ static RenderStyle& styleForFirstLetter(RenderElement* firstLetterBlock, RenderO
         
         // Set the font to be one line too big and then ratchet back to get to a precise fit. We can't just set the desired font size based off font height metrics
         // because many fonts bake ascent into the font metrics. Therefore we have to look at actual measured cap height values in order to know when we have a good fit.
-        FontDescription newFontDescription = pseudoStyle->fontDescription();
+        auto newFontDescription = pseudoStyle->fontDescription();
         float capRatio = pseudoStyle->fontMetrics().floatCapHeight() / pseudoStyle->fontSize();
         float startingFontSize = ((pseudoStyle->initialLetterHeight() - 1) * lineHeight + paragraph->style().fontMetrics().capHeight()) / capRatio;
         newFontDescription.setSpecifiedSize(startingFontSize);
@@ -2996,7 +2996,7 @@ static RenderStyle& styleForFirstLetter(RenderElement* firstLetterBlock, RenderO
         int desiredCapHeight = (pseudoStyle->initialLetterHeight() - 1) * lineHeight + paragraph->style().fontMetrics().capHeight();
         int actualCapHeight = pseudoStyle->fontMetrics().capHeight();
         while (actualCapHeight > desiredCapHeight) {
-            FontDescription newFontDescription = pseudoStyle->fontDescription();
+            auto newFontDescription = pseudoStyle->fontDescription();
             newFontDescription.setSpecifiedSize(newFontDescription.specifiedSize() - 1);
             newFontDescription.setComputedSize(newFontDescription.computedSize() -1);
             pseudoStyle->setFontDescription(newFontDescription);
index 31d550d..9a1d269 100644 (file)
@@ -3724,7 +3724,7 @@ void RenderBlockFlow::adjustComputedFontSizes(float size, float visibleWidth)
         if (isVisibleRenderText(descendent) && resizeTextPermitted(descendent)) {
             RenderText& text = downcast<RenderText>(*descendent);
             RenderStyle& oldStyle = text.style();
-            FontDescription fontDescription = oldStyle.fontDescription();
+            auto fontDescription = oldStyle.fontDescription();
             float specifiedSize = fontDescription.specifiedSize();
             float scaledSize = roundf(specifiedSize * scale);
             if (scaledSize > 0 && scaledSize < minFontSize) {
index e190e1c..e3d38f6 100644 (file)
@@ -97,7 +97,7 @@ void RenderCombineText::combineText()
     if (style().isHorizontalWritingMode())
         return;
 
-    FontDescription description = originalFont().fontDescription();
+    auto description = originalFont().fontDescription();
     float emWidth = description.computedSize() * textCombineMargin;
     bool shouldUpdateFont = false;
 
index 2b1f165..88b4564 100644 (file)
@@ -359,7 +359,7 @@ bool RenderEmbeddedObject::getReplacementTextGeometry(const LayoutPoint& accumul
     contentRect = contentBoxRect();
     contentRect.moveBy(roundedIntPoint(accumulatedOffset));
 
-    FontDescription fontDescription;
+    FontCascadeDescription fontDescription;
     RenderTheme::defaultTheme()->systemFont(CSSValueWebkitSmallControl, fontDescription);
     fontDescription.setWeight(FontWeightBold);
     fontDescription.setRenderingMode(frame().settings().fontRenderingMode());
index 2cf9954..632805e 100644 (file)
@@ -85,7 +85,7 @@ static Ref<RenderStyle> createFullScreenStyle()
     // Create a stacking context:
     fullscreenStyle.get().setZIndex(INT_MAX);
 
-    fullscreenStyle.get().setFontDescription(FontDescription());
+    fullscreenStyle.get().setFontDescription({ });
     fullscreenStyle.get().fontCascade().update(nullptr);
 
     fullscreenStyle.get().setDisplay(FLEX);
index e3cb796..e573d50 100644 (file)
@@ -119,9 +119,9 @@ void RenderListBox::updateFromElement()
                 text = downcast<HTMLOptionElement>(*element).textIndentedToRespectGroupLabel();
             else if (is<HTMLOptGroupElement>(*element)) {
                 text = downcast<HTMLOptGroupElement>(*element).groupLabelText();
-                FontDescription d = itemFont.fontDescription();
-                d.setWeight(d.bolderWeight());
-                itemFont = FontCascade(d, itemFont.letterSpacing(), itemFont.wordSpacing());
+                auto description = itemFont.fontDescription();
+                description.setWeight(description.bolderWeight());
+                itemFont = FontCascade(description, itemFont.letterSpacing(), itemFont.wordSpacing());
                 itemFont.update(&document().fontSelector());
             }
 
@@ -405,9 +405,9 @@ void RenderListBox::paintItemForeground(PaintInfo& paintInfo, const LayoutPoint&
     r.move(itemOffsetForAlignment(textRun, &itemStyle, itemFont, r));
 
     if (is<HTMLOptGroupElement>(*listItemElement)) {
-        FontDescription d = itemFont.fontDescription();
-        d.setWeight(d.bolderWeight());
-        itemFont = FontCascade(d, itemFont.letterSpacing(), itemFont.wordSpacing());
+        auto description = itemFont.fontDescription();
+        description.setWeight(description.bolderWeight());
+        itemFont = FontCascade(description, itemFont.letterSpacing(), itemFont.wordSpacing());
         itemFont.update(&document().fontSelector());
     }
 
index 595d931..2bb7478 100644 (file)
@@ -230,7 +230,7 @@ bool RenderText::isTextFragment() const
 bool RenderText::computeUseBackslashAsYenSymbol() const
 {
     const RenderStyle& style = this->style();
-    const FontDescription& fontDescription = style.fontCascade().fontDescription();
+    const auto& fontDescription = style.fontDescription();
     if (style.fontCascade().useBackslashAsYenSymbol())
         return true;
     if (fontDescription.isSpecifiedFont())
index dcac4fa..5961746 100644 (file)
@@ -1159,18 +1159,18 @@ void RenderTheme::platformColorsDidChange()
     Page::updateStyleForAllPagesAfterGlobalChangeInEnvironment();
 }
 
-FontDescription& RenderTheme::cachedSystemFontDescription(CSSValueID systemFontID) const
-{
-    static NeverDestroyed<FontDescription> caption;
-    static NeverDestroyed<FontDescription> icon;
-    static NeverDestroyed<FontDescription> menu;
-    static NeverDestroyed<FontDescription> messageBox;
-    static NeverDestroyed<FontDescription> smallCaption;
-    static NeverDestroyed<FontDescription> statusBar;
-    static NeverDestroyed<FontDescription> webkitMiniControl;
-    static NeverDestroyed<FontDescription> webkitSmallControl;
-    static NeverDestroyed<FontDescription> webkitControl;
-    static NeverDestroyed<FontDescription> defaultDescription;
+FontCascadeDescription& RenderTheme::cachedSystemFontDescription(CSSValueID systemFontID) const
+{
+    static NeverDestroyed<FontCascadeDescription> caption;
+    static NeverDestroyed<FontCascadeDescription> icon;
+    static NeverDestroyed<FontCascadeDescription> menu;
+    static NeverDestroyed<FontCascadeDescription> messageBox;
+    static NeverDestroyed<FontCascadeDescription> smallCaption;
+    static NeverDestroyed<FontCascadeDescription> statusBar;
+    static NeverDestroyed<FontCascadeDescription> webkitMiniControl;
+    static NeverDestroyed<FontCascadeDescription> webkitSmallControl;
+    static NeverDestroyed<FontCascadeDescription> webkitControl;
+    static NeverDestroyed<FontCascadeDescription> defaultDescription;
 
     switch (systemFontID) {
     case CSSValueCaption:
@@ -1199,7 +1199,7 @@ FontDescription& RenderTheme::cachedSystemFontDescription(CSSValueID systemFontI
     }
 }
 
-void RenderTheme::systemFont(CSSValueID systemFontID, FontDescription& fontDescription) const
+void RenderTheme::systemFont(CSSValueID systemFontID, FontCascadeDescription& fontDescription) const
 {
     fontDescription = cachedSystemFontDescription(systemFontID);
     if (fontDescription.isAbsoluteSize())
index d4ff94d..fc12c5d 100644 (file)
@@ -173,7 +173,7 @@ public:
     virtual double caretBlinkInterval() const { return 0.5; }
 
     // System fonts and colors for CSS.
-    void systemFont(CSSValueID, FontDescription&) const;
+    void systemFont(CSSValueID, FontCascadeDescription&) const;
     virtual Color systemColor(CSSValueID) const;
 
     virtual int minimumMenuListSize(RenderStyle&) const { return 0; }
@@ -255,8 +255,8 @@ public:
 #endif
 
 protected:
-    virtual FontDescription& cachedSystemFontDescription(CSSValueID systemFontID) const;
-    virtual void updateCachedSystemFontDescription(CSSValueID systemFontID, FontDescription&) const = 0;
+    virtual FontCascadeDescription& cachedSystemFontDescription(CSSValueID systemFontID) const;
+    virtual void updateCachedSystemFontDescription(CSSValueID systemFontID, FontCascadeDescription&) const = 0;
 
     // The platform selection color.
     virtual Color platformActiveSelectionBackgroundColor() const;
index 0ab6166..06ef98f 100644 (file)
@@ -1018,7 +1018,7 @@ void RenderThemeEfl::setDefaultFontSize(int size)
     defaultFontSize = size;
 }
 
-void RenderThemeEfl::updateCachedSystemFontDescription(CSSValueID, FontDescription& fontDescription) const
+void RenderThemeEfl::updateCachedSystemFontDescription(CSSValueID, FontCascadeDescription& fontDescription) const
 {
     // It was called by RenderEmbeddedObject::paintReplaced to render alternative string.
     // To avoid cairo_error while rendering, fontDescription should be passed.
index c937e77..81db81e 100644 (file)
@@ -192,7 +192,7 @@ private:
     }
 
     // System fonts.
-    virtual void updateCachedSystemFontDescription(CSSValueID, FontDescription&) const override;
+    virtual void updateCachedSystemFontDescription(CSSValueID, FontCascadeDescription&) const override;
 
     ALWAYS_INLINE Ecore_Evas* canvas() const { return m_canvas.get(); }
     ALWAYS_INLINE Evas_Object* edje() const { return m_edje.get(); }
index 121f098..163039f 100644 (file)
@@ -84,7 +84,7 @@ static double getScreenDPI()
     return dpi;
 }
 
-void RenderThemeGtk::updateCachedSystemFontDescription(CSSValueID, FontDescription& fontDescription) const
+void RenderThemeGtk::updateCachedSystemFontDescription(CSSValueID, FontCascadeDescription& fontDescription) const
 {
     GtkSettings* settings = gtk_settings_get_default();
     if (!settings)
index b794116..207b4d7 100644 (file)
@@ -46,7 +46,7 @@ public:
 
 private:
     // System fonts.
-    virtual void updateCachedSystemFontDescription(CSSValueID, FontDescription&) const override;
+    virtual void updateCachedSystemFontDescription(CSSValueID, FontCascadeDescription&) const override;
 
 public:
 #ifndef GTK_API_VERSION_2
index 1b9c0b3..de29213 100644 (file)
@@ -48,8 +48,8 @@ public:
     WEBCORE_EXPORT static void setContentSizeCategory(const String&);
 
 protected:
-    virtual FontDescription& cachedSystemFontDescription(CSSValueID systemFontID) const override;
-    virtual void updateCachedSystemFontDescription(CSSValueID, FontDescription&) const override;
+    virtual FontCascadeDescription& cachedSystemFontDescription(CSSValueID systemFontID) const override;
+    virtual void updateCachedSystemFontDescription(CSSValueID, FontCascadeDescription&) const override;
     virtual int baselinePosition(const RenderBox&) const override;
 
     virtual bool isControlStyled(const RenderStyle&, const BorderData&, const FillLayer& background, const Color& backgroundColor) const override;
index 7047f3d..422c662 100644 (file)
@@ -1078,25 +1078,25 @@ bool RenderThemeIOS::shouldHaveCapsLockIndicator(HTMLInputElement&) const
     return false;
 }
 
-FontDescription& RenderThemeIOS::cachedSystemFontDescription(CSSValueID valueID) const
-{
-    static NeverDestroyed<FontDescription> systemFont;
-    static NeverDestroyed<FontDescription> headlineFont;
-    static NeverDestroyed<FontDescription> bodyFont;
-    static NeverDestroyed<FontDescription> subheadlineFont;
-    static NeverDestroyed<FontDescription> footnoteFont;
-    static NeverDestroyed<FontDescription> caption1Font;
-    static NeverDestroyed<FontDescription> caption2Font;
-    static NeverDestroyed<FontDescription> shortHeadlineFont;
-    static NeverDestroyed<FontDescription> shortBodyFont;
-    static NeverDestroyed<FontDescription> shortSubheadlineFont;
-    static NeverDestroyed<FontDescription> shortFootnoteFont;
-    static NeverDestroyed<FontDescription> shortCaption1Font;
-    static NeverDestroyed<FontDescription> tallBodyFont;
+FontCascadeDescription& RenderThemeIOS::cachedSystemFontDescription(CSSValueID valueID) const
+{
+    static NeverDestroyed<FontCascadeDescription> systemFont;
+    static NeverDestroyed<FontCascadeDescription> headlineFont;
+    static NeverDestroyed<FontCascadeDescription> bodyFont;
+    static NeverDestroyed<FontCascadeDescription> subheadlineFont;
+    static NeverDestroyed<FontCascadeDescription> footnoteFont;
+    static NeverDestroyed<FontCascadeDescription> caption1Font;
+    static NeverDestroyed<FontCascadeDescription> caption2Font;
+    static NeverDestroyed<FontCascadeDescription> shortHeadlineFont;
+    static NeverDestroyed<FontCascadeDescription> shortBodyFont;
+    static NeverDestroyed<FontCascadeDescription> shortSubheadlineFont;
+    static NeverDestroyed<FontCascadeDescription> shortFootnoteFont;
+    static NeverDestroyed<FontCascadeDescription> shortCaption1Font;
+    static NeverDestroyed<FontCascadeDescription> tallBodyFont;
 #if __IPHONE_OS_VERSION_MIN_REQUIRED > 80200
-    static NeverDestroyed<FontDescription> title1Font;
-    static NeverDestroyed<FontDescription> title2Font;
-    static NeverDestroyed<FontDescription> title3Font;
+    static NeverDestroyed<FontCascadeDescription> title1Font;
+    static NeverDestroyed<FontCascadeDescription> title2Font;
+    static NeverDestroyed<FontCascadeDescription> title3Font;
 #endif
 
     static CFStringRef userTextSize = contentSizeCategory();
@@ -1158,7 +1158,7 @@ FontDescription& RenderThemeIOS::cachedSystemFontDescription(CSSValueID valueID)
     }
 }
 
-void RenderThemeIOS::updateCachedSystemFontDescription(CSSValueID valueID, FontDescription& fontDescription) const
+void RenderThemeIOS::updateCachedSystemFontDescription(CSSValueID valueID, FontCascadeDescription& fontDescription) const
 {
     RetainPtr<CTFontDescriptorRef> fontDescriptor;
     CFStringRef textStyle;
index c092670..623dd66 100644 (file)
@@ -107,7 +107,7 @@ protected:
     virtual ~RenderThemeMac();
 
     // System fonts.
-    virtual void updateCachedSystemFontDescription(CSSValueID, FontDescription&) const override;
+    virtual void updateCachedSystemFontDescription(CSSValueID, FontCascadeDescription&) const override;
 
 #if ENABLE(VIDEO)
     // Media controls
index 3638205..edb33e6 100644 (file)
@@ -339,7 +339,7 @@ static FontWeight toFontWeight(NSInteger appKitFontWeight)
     return fontWeights[appKitFontWeight - 1];
 }
 
-void RenderThemeMac::updateCachedSystemFontDescription(CSSValueID cssValueId, FontDescription& fontDescription) const
+void RenderThemeMac::updateCachedSystemFontDescription(CSSValueID cssValueId, FontCascadeDescription& fontDescription) const
 {
     NSFont* font;
     // System-font-ness can't be encapsulated by simply a font name. Instead, we must use a token
@@ -824,7 +824,7 @@ void RenderThemeMac::setSizeFromFont(RenderStyle& style, const IntSize* sizes) c
 
 void RenderThemeMac::setFontFromControlSize(StyleResolver&, RenderStyle& style, NSControlSize controlSize) const
 {
-    FontDescription fontDescription;
+    FontCascadeDescription fontDescription;
     fontDescription.setIsAbsoluteSize(true);
 
     NSFont* font = [NSFont systemFontOfSize:[NSFont systemFontSizeForControlSize:controlSize]];
index 477193c..c762efd 100644 (file)
@@ -192,7 +192,7 @@ static float systemFontSizeForControlSize(NSControlSize controlSize)
     return sizes[controlSize];
 }
 
-void RenderThemeSafari::updateCachedSystemFontDescription(CSSValueID valueID, FontDescription& fontDescription) const
+void RenderThemeSafari::updateCachedSystemFontDescription(CSSValueID valueID, FontCascadeDescription& fontDescription) const
 {
     float fontSize;
     switch (valueID) {
@@ -360,7 +360,7 @@ void RenderThemeSafari::setSizeFromFont(RenderStyle& style, const IntSize* sizes
 
 void RenderThemeSafari::setFontFromControlSize(StyleResolver& styleResolver, RenderStyle& style, NSControlSize controlSize) const
 {
-    FontDescription fontDescription;
+    FontCascadeDescription fontDescription;
     fontDescription.setIsAbsoluteSize(true);
 
     float fontSize = systemFontSizeForControlSize(controlSize);
index 32bead5..29e5add 100644 (file)
@@ -83,7 +83,7 @@ public:
 
 protected:
     // System fonts.
-    virtual void updateCachedSystemFontDescription(CSSValueID, FontDescription&) const override;
+    virtual void updateCachedSystemFontDescription(CSSValueID, FontCascadeDescription&) const override;
 
     // Methods for each appearance value.
     virtual bool paintCheckbox(const RenderObject&, const PaintInfo&, const IntRect&);
index 97def69..fd34957 100644 (file)
@@ -319,7 +319,7 @@ Color RenderThemeWin::platformInactiveSelectionForegroundColor() const
     return platformActiveSelectionForegroundColor();
 }
 
-static void fillFontDescription(FontDescription& fontDescription, LOGFONT& logFont, float fontSize)
+static void fillFontDescription(FontCascadeDescription& fontDescription, LOGFONT& logFont, float fontSize)
 {    
     fontDescription.setIsAbsoluteSize(true);
     fontDescription.setOneFamily(String(logFont.lfFaceName));
@@ -328,7 +328,7 @@ static void fillFontDescription(FontDescription& fontDescription, LOGFONT& logFo
     fontDescription.setIsItalic(logFont.lfItalic);
 }
 
-void RenderThemeWin::updateCachedSystemFontDescription(CSSValueID valueID, FontDescription& fontDescription) const
+void RenderThemeWin::updateCachedSystemFontDescription(CSSValueID valueID, FontCascadeDescription& fontDescription) const
 {
     static bool initialized;
     static NONCLIENTMETRICS ncm;
index a01f522..4d98b74 100644 (file)
@@ -145,7 +145,7 @@ private:
     virtual ~RenderThemeWin();
 
     // System fonts.
-    virtual void updateCachedSystemFontDescription(CSSValueID, FontDescription&) const override;
+    virtual void updateCachedSystemFontDescription(CSSValueID, FontCascadeDescription&) const override;
 
     void addIntrinsicMargins(RenderStyle&) const;
     void close();
index 220eb8d..82f66f0 100644 (file)
@@ -161,7 +161,7 @@ bool TextAutoSizingValue::adjustNodeSizes()
             }
             
             RefPtr<RenderStyle> style = cloneRenderStyleWithState(text->style());
-            FontDescription fontDescription = style->fontDescription();
+            auto fontDescription = style->fontDescription();
             fontDescription.setComputedSize(averageSize);
             style->setFontDescription(fontDescription);
             style->fontCascade().update(&autoSizingNode->document().fontSelector());
@@ -214,7 +214,7 @@ void TextAutoSizingValue::reset()
         if (!text)
             continue;
         // Reset the font size back to the original specified size
-        FontDescription fontDescription = text->style().fontDescription();
+        auto fontDescription = text->style().fontDescription();
         float originalSize = fontDescription.specifiedSize();
         if (fontDescription.computedSize() != originalSize) {
             fontDescription.setComputedSize(originalSize);
index 3dfe1d5..0fac1ab 100644 (file)
@@ -87,7 +87,7 @@ void RenderMathMLToken::updateStyle()
     if (tokenElement.hasTagName(MathMLNames::miTag)) {
         // This tries to emulate the default mathvariant value on <mi> using the CSS font-style property.
         // FIXME: This should be revised when mathvariant is implemented (http://wkbug/85735) and when fonts with Mathematical Alphanumeric Symbols characters are more popular.
-        FontDescription fontDescription(newStyle.get().fontDescription());
+        auto fontDescription = newStyle.get().fontDescription();
         FontSelector* fontSelector = newStyle.get().fontCascade().fontSelector();
         if (!m_containsElement && element().textContent().stripWhiteSpace().simplifyWhiteSpace().length() == 1 && !tokenElement.hasAttribute(mathvariantAttr))
             fontDescription.setItalic(FontItalicOn);
index bd3f8b4..dc7189b 100644 (file)
@@ -1401,7 +1401,7 @@ const Animation* RenderStyle::transitionForProperty(CSSPropertyID property) cons
 
 const FontCascade& RenderStyle::fontCascade() const { return inherited->fontCascade; }
 const FontMetrics& RenderStyle::fontMetrics() const { return inherited->fontCascade.fontMetrics(); }
-const FontDescription& RenderStyle::fontDescription() const { return inherited->fontCascade.fontDescription(); }
+const FontCascadeDescription& RenderStyle::fontDescription() const { return inherited->fontCascade.fontDescription(); }
 float RenderStyle::specifiedFontSize() const { return fontDescription().specifiedSize(); }
 float RenderStyle::computedFontSize() const { return fontDescription().computedSize(); }
 int RenderStyle::fontSize() const { return inherited->fontCascade.pixelSize(); }
@@ -1409,7 +1409,7 @@ int RenderStyle::fontSize() const { return inherited->fontCascade.pixelSize(); }
 const Length& RenderStyle::wordSpacing() const { return rareInheritedData->wordSpacing; }
 float RenderStyle::letterSpacing() const { return inherited->fontCascade.letterSpacing(); }
 
-bool RenderStyle::setFontDescription(const FontDescription& v)
+bool RenderStyle::setFontDescription(const FontCascadeDescription& v)
 {
     if (inherited->fontCascade.fontDescription() != v) {
         inherited.access()->fontCascade = FontCascade(v, inherited->fontCascade.letterSpacing(), inherited->fontCascade.wordSpacing());
@@ -1494,19 +1494,19 @@ void RenderStyle::setFontSize(float size)
         size = std::min(maximumAllowedFontSize, size);
 
     FontSelector* currentFontSelector = fontCascade().fontSelector();
-    FontDescription desc(fontDescription());
-    desc.setSpecifiedSize(size);
-    desc.setComputedSize(size);
+    auto description = fontDescription();
+    description.setSpecifiedSize(size);
+    description.setComputedSize(size);
 
 #if ENABLE(TEXT_AUTOSIZING)
     float multiplier = textAutosizingMultiplier();
     if (multiplier > 1) {
         float autosizedFontSize = TextAutosizer::computeAutosizedFontSize(size, multiplier);
-        desc.setComputedSize(min(maximumAllowedFontSize, autosizedFontSize));
+        description.setComputedSize(min(maximumAllowedFontSize, autosizedFontSize));
     }
 #endif
 
-    setFontDescription(desc);
+    setFontDescription(description);
     fontCascade().update(currentFontSelector);
 }
 
index 363cf59..b60cd57 100644 (file)
@@ -699,7 +699,7 @@ public:
 
     WEBCORE_EXPORT const FontCascade& fontCascade() const;
     WEBCORE_EXPORT const FontMetrics& fontMetrics() const;
-    WEBCORE_EXPORT const FontDescription& fontDescription() const;
+    WEBCORE_EXPORT const FontCascadeDescription& fontDescription() const;
     float specifiedFontSize() const;
     float computedFontSize() const;
     int fontSize() const;
@@ -1334,7 +1334,7 @@ public:
     void setClear(EClear v) { noninherited_flags.setClear(v); }
     void setTableLayout(ETableLayout v) { noninherited_flags.setTableLayout(v); }
 
-    bool setFontDescription(const FontDescription&);
+    bool setFontDescription(const FontCascadeDescription&);
     // Only used for blending font sizes when animating, for MathML anonymous blocks, and for text autosizing.
     void setFontSize(float);
 
index c3c471b..f952b25 100644 (file)
@@ -235,7 +235,7 @@ void RenderSVGInlineText::computeNewScaledFontForStyle(const RenderObject& rende
         return;
     }
 
-    FontDescription fontDescription(style.fontDescription());
+    auto fontDescription = style.fontDescription();
 
     // FIXME: We need to better handle the case when we compute very small fonts below (below 1pt).
     fontDescription.setComputedSize(Style::computedFontSizeFromSpecifiedSizeForSVGInlineText(fontDescription.computedSize(), fontDescription.isAbsoluteSize(), scalingFactor, renderer.document()));
index fd69fa4..f3f3188 100644 (file)
@@ -341,7 +341,7 @@ GlyphData SVGTextRunRenderingContext::glyphDataForCharacter(const FontCascade& f
 
     // SVG font context sensitive selection failed and there is no defined missing glyph. Drop down to a default font.
     // The behavior does not seem to be specified. For simplicity we don't try to resolve font fallbacks context-sensitively.
-    FontDescription fallbackDescription = font.fontDescription();
+    auto fallbackDescription = font.fontDescription();
     fallbackDescription.setFamilies(Vector<AtomicString> { sansSerifFamily });
     FontCascade fallbackFont(fallbackDescription, font.letterSpacing(), font.wordSpacing());
     fallbackFont.update(font.fontSelector());
index b0e3424..2d7dfe1 100644 (file)
@@ -59,7 +59,7 @@ Ref<RenderStyle> resolveForDocument(const Document& document)
     documentStyle.get().setRTLOrdering(document.visuallyOrdered() ? VisualOrder : LogicalOrder);
     documentStyle.get().setZoom(!document.printing() ? renderView.frame().pageZoomFactor() : 1);
     documentStyle.get().setPageScaleTransform(renderView.frame().frameScaleFactor());
-    FontDescription documentFontDescription = documentStyle.get().fontDescription();
+    auto documentFontDescription = documentStyle.get().fontDescription();
     documentFontDescription.setLocale(document.contentLanguage());
     documentStyle.get().setFontDescription(WTF::move(documentFontDescription));
 
@@ -98,7 +98,7 @@ Ref<RenderStyle> resolveForDocument(const Document& document)
 
     const Settings& settings = renderView.frame().settings();
 
-    FontDescription fontDescription;
+    FontCascadeDescription fontDescription;
     fontDescription.setLocale(document.contentLanguage());
     fontDescription.setRenderingMode(settings.fontRenderingMode());
     fontDescription.setOneFamily(standardFamily);
index b25719f..e46b1b9 100644 (file)
@@ -4915,13 +4915,12 @@ static PassRefPtr<KeyboardEvent> currentKeyboardEvent(Frame* coreFrame)
     return [[NSFontManager sharedFontManager] fontWithFamily:@"Times" traits:NSFontItalicTrait weight:STANDARD_BOLD_WEIGHT size:12.0f];
 }
 
-static NSString *fontNameForDescription(NSString *familyName, BOOL italic, BOOL bold, int pointSize)
+static NSString *fontNameForDescription(NSString *familyName, BOOL italic, BOOL bold)
 {
     // Find the font the same way the rendering code would later if it encountered this CSS.
     FontDescription fontDescription;
     fontDescription.setIsItalic(italic);
     fontDescription.setWeight(bold ? FontWeight900 : FontWeight500);
-    fontDescription.setSpecifiedSize(pointSize);
     RefPtr<Font> font = FontCache::singleton().fontForFamily(fontDescription, familyName);
     return [font->platformData().nsFont() fontName];
 }
@@ -4962,7 +4961,7 @@ static NSString *fontNameForDescription(NSString *familyName, BOOL italic, BOOL
         // the Postscript name.
         // If we don't find a font with the same Postscript name, then we'll have to use the
         // Postscript name to make the CSS specific enough.
-        if (![fontNameForDescription(aFamilyName, aIsItalic, aIsBold, aPointSize) isEqualToString:[a fontName]])
+        if (![fontNameForDescription(aFamilyName, aIsItalic, aIsBold) isEqualToString:[a fontName]])
             familyNameForCSS = [a fontName];
 
         // FIXME: Need more sophisticated escaping code if we want to handle family names
index 73b67b5..8298a22 100644 (file)
@@ -66,7 +66,6 @@ using WTF::AtomicString;
 using WebCore::BString;
 using WebCore::Element;
 using WebCore::ExceptionCode;
-using WebCore::FontDescription;
 using WebCore::Frame;
 using WebCore::IntRect;
 using WTF::String;
@@ -1267,7 +1266,7 @@ HRESULT DOMElement::font(_Out_ WebFontDescription* webFontDescription)
     if (!renderer)
         return E_FAIL;
 
-    FontDescription fontDescription = renderer->style().fontCascade().fontDescription();
+    auto fontDescription = renderer->style().fontCascade().fontDescription();
     AtomicString family = fontDescription.firstFamily();
 
     // FIXME: This leaks. Delete this whole function to get rid of the leak.
index 6266677..510b957 100644 (file)
@@ -505,7 +505,7 @@ void FullscreenVideoController::draw()
     m_timeSlider.draw(context);
 
     // Draw the text strings
-    FontDescription desc;
+    FontCascadeDescription desc;
 
     NONCLIENTMETRICS metrics;
     metrics.cbSize = sizeof(metrics);
index b60a2cf..04196d2 100644 (file)
@@ -52,7 +52,7 @@ static FontCascade makeFont(const WebFontDescription& description)
 
     String fontFamilyString(description.family, description.familyLength);
 
-    FontDescription f;
+    FontCascadeDescription f;
     f.setOneFamily(fontFamilyString);
     f.setSpecifiedSize(description.size);
     f.setComputedSize(description.size);