Expand font-weight and font-stretch to take any number
authormmaxfield@apple.com <mmaxfield@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 6 Mar 2017 21:40:31 +0000 (21:40 +0000)
committermmaxfield@apple.com <mmaxfield@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 6 Mar 2017 21:40:31 +0000 (21:40 +0000)
commit24e7815b65bb8c7c6a33b097c33ceb97430e6b03
tree6642789e751c5a0d4c9d851905b7f616f88ccc4f
parent8e1e045075412eca6f69aee43e139ad87065d653
Expand font-weight and font-stretch to take any number
https://bugs.webkit.org/show_bug.cgi?id=168889

Reviewed by Simon Fraser.

Source/WebCore:

This patch expands parsing support for font-weight and font-stretch so that they can accept
numbers in addition to the keyword values they accepted previously. Eventually, these numbers
will be used as inputs to select variation fonts; however, in this patch, the values are just
parsed and held in our internal data model. This means that this patch doesn't actually change
the general behavior of WebKit; instead, it parses new values, outputs them (via
getComputedStyle() and similar functions), and provides them as input to our preexisting font
selection algorithm.

This patch doesn't actually modify anything algorithmically, and therefore, it doesn't include
any additional tests for the font selection algorithm. Instead, it tests the parsing of the
newly accepted values (both input and output).

Because our internal data model needs to hold numbers now, this patch also completely eliminates
the FontWidth, FontItalic, and FontTraitsMask enum values in favor of FontSelectionValues (which
can hold numbers instead of individual enum values). Therefore, every place which we were using
these enum values is migrated in this patch to using FontSelectionValues instead.

Tests: fast/text/font-selection-font-face-parse.html
       fast/text/font-selection-font-loading-api-parse.html
       fast/text/font-style-parse.html
       fast/text/font-weight-parse.html

* accessibility/AccessibilityRenderObject.cpp: Migrate off of old enum types.
(WebCore::AccessibilityRenderObject::hasBoldFont):
(WebCore::AccessibilityRenderObject::hasItalicFont):
(WebCore::AccessibilityRenderObject::hasPlainText):
* accessibility/atk/WebKitAccessibleInterfaceText.cpp: Ditto.
(getAttributeSetForAccessibilityObject):
* css/CSSComputedStyleDeclaration.cpp: Output newly parsed values.
(WebCore::fontWeightFromStyle):
(WebCore::fontStretchFromStyle):
(WebCore::fontStyleFromStyle):
(WebCore::fontShorthandValueForSelectionProperties):
(WebCore::ComputedStyleExtractor::propertyValue):
* css/CSSFontFace.cpp: Migrate off old enum types.
(WebCore::calculateWeightRange):
(WebCore::CSSFontFace::setWeight):
(WebCore::calculateStretchRange):
(WebCore::CSSFontFace::setStretch):
(WebCore::calculateStyleRange):
(WebCore::CSSFontFace::setStyle):
(WebCore::CSSFontFace::calculateStyleMask): Deleted.
(WebCore::CSSFontFace::calculateWeightMask): Deleted.
(WebCore::CSSFontFace::calculateStretch): Deleted.
* css/CSSFontFace.h:
* css/CSSFontFaceSet.cpp: Migrate off old enum types.
(WebCore::CSSFontFaceSet::ensureLocalFontFacesForFamilyRegistered):
(WebCore::calculateWeightValue):
(WebCore::calculateStretchValue):
(WebCore::calculateStyleValue):
(WebCore::computeFontSelectionRequest):
(WebCore::CSSFontFaceSet::matchingFaces):
(WebCore::CSSFontFaceSet::fontFace):
(WebCore::computeFontTraitsMask): Deleted.
(WebCore::computeFontStretch): Deleted.
* css/CSSFontFaceSet.h:
* css/CSSFontSelector.cpp: Migrate off old enum types.
(WebCore::CSSFontSelector::fontRangesForFamily):
* css/CSSPrimitiveValueMappings.h: font-weight and font-style are no longer
keyword properties.
(WebCore::CSSPrimitiveValue::operator FontWeight): Deleted.
(WebCore::CSSPrimitiveValue::operator FontItalic): Deleted.
* css/CSSProperties.json: Use the same infrastructure for all three of the
font selection properties.
* css/CSSSegmentedFontFace.cpp: Migrate off old enum types.
(WebCore::CSSSegmentedFontFace::fontRanges):
* css/CSSValueKeywords.in: The 100-based font-weight values are now represented
as real numbers.
* css/FontFace.cpp: Update the string output functions for the new values.
(WebCore::rangeIsSingleValue):
(WebCore::FontFace::style):
(WebCore::FontFace::weight):
(WebCore::FontFace::stretch):
* css/StyleBuilderConverter.h: Use CSSValue conversion functions to convert
to our new data model.
(WebCore::StyleBuilderConverter::convertFontWeight):
(WebCore::StyleBuilderConverter::convertFontStretch):
(WebCore::StyleBuilderConverter::convertFontStyle):
* css/StyleBuilderCustom.h: font-weight is no longer a completely custom
property.
(WebCore::StyleBuilderCustom::applyInitialFontWeight): Deleted.
(WebCore::StyleBuilderCustom::applyInheritFontWeight): Deleted.
(WebCore::StyleBuilderCustom::applyValueFontWeight): Deleted.
* css/parser/CSSParserFastPaths.cpp: font-style is no longer a keyword property.
(WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
(WebCore::CSSParserFastPaths::isKeywordPropertyID):
* css/parser/CSSPropertyParser.cpp: Parse the new values in the font selection
properties.
(WebCore::consumeFontWeightKeywordValue):
(WebCore::consumeFontWeightCSS21):
(WebCore::consumeFontWeight):
(WebCore::consumeFontStyleKeywordValue):
(WebCore::consumeFontStyle):
(WebCore::CSSPropertyParser::parseSingleValue):
(WebCore::CSSPropertyParser::parseFontFaceDescriptor):
(WebCore::CSSPropertyParser::consumeSystemFont):
(WebCore::CSSPropertyParser::consumeFont):
* editing/EditingStyle.cpp: Migrate off old enum types.
(WebCore::fontWeightIsBold):
* editing/mac/EditorMac.mm: Ditto.
(WebCore::Editor::applyFontStyles):
* platform/graphics/FontCache.h: Unify our font selection values into
their enclosing struct, FontSelectionCapabilities. Also, clean up utility
functions.
* platform/graphics/FontCascade.cpp: Migrate off old enum types.
(WebCore::FontCascade::FontCascade):
* platform/graphics/FontCascade.h: Ditto.
(WebCore::FontCascade::italic):
(WebCore::FontCascade::weight):
* platform/graphics/FontDescription.cpp: Ditto.
(WebCore::FontDescription::FontDescription):
(WebCore::FontCascadeDescription::lighterWeight):
(WebCore::FontCascadeDescription::bolderWeight):
(WebCore::FontDescription::traitsMask): Deleted.
* platform/graphics/FontDescription.h: Migrate off old enum types.
(WebCore::FontDescription::italic):
(WebCore::FontDescription::stretch):
(WebCore::FontDescription::weight):
(WebCore::FontDescription::fontSelectionRequest):
(WebCore::FontDescription::computedPixelSize):
(WebCore::FontDescription::setItalic):
(WebCore::FontDescription::setStretch):
(WebCore::FontDescription::setIsItalic):
(WebCore::FontDescription::setWeight):
(WebCore::FontDescription::operator==):
(WebCore::FontCascadeDescription::lighterWeight):
(WebCore::FontCascadeDescription::bolderWeight):
(WebCore::FontCascadeDescription::initialItalic):
(WebCore::FontCascadeDescription::initialWeight):
(WebCore::FontCascadeDescription::initialStretch):
* platform/graphics/FontSelectionAlgorithm.cpp: Delete code which was only
present to convert from the old enum types to the new FontSelectionRequest
type.
(WebCore::fontSelectionRequestForTraitsMask): Deleted.
(WebCore::initialFontSelectionCapabilitiesForTraitsMask): Deleted.
(WebCore::fontSelectionCapabilitiesForTraitsMask): Deleted.
* platform/graphics/FontSelectionAlgorithm.h: Migrate to new named functions
for special values.
(WebCore::isItalic):
(WebCore::boldWeightValue):
(WebCore::normalWeightValue):
(WebCore::isFontWeightBold):
(WebCore::normalStretchValue):
(WebCore::FontSelectionRequest::FontSelectionRequest):
* platform/graphics/cocoa/FontCacheCoreText.cpp: Migrate all platforms which
compile this file to know about FontDatabase. This simplifies the interaction
between @font-face fonts and installed fonts. Also, migrate off old enum types.
(WebCore::stretchFromCoreTextTraits):
(WebCore::fontWeightFromCoreText):
(WebCore::capabilitiesForFontDescriptor):
(WebCore::FontCache::getFontSelectionCapabilitiesInFamily):
(WebCore::platformFontLookupWithFamily):
(WebCore::invalidateFontCache):
(WebCore::fontWithFamily):
(WebCore::FontCache::createFontPlatformData):
(WebCore::lookupFallbackFont):
(WebCore::toTraitsMask): Deleted.
(WebCore::isFontWeightBold): Deleted.
(WebCore::toCoreTextFontWeight): Deleted.
(): Deleted.
(WebCore::FontDatabase::capabilitiesForFontDescriptor): Deleted.
(WebCore::calculateFontSelectionRequest): Deleted.
* platform/graphics/freetype/FontCacheFreeType.cpp: Migrate off old enum types.
(WebCore::FontCache::getFontSelectionCapabilitiesInFamily):
(WebCore::fontWeightToFontconfigWeight):
(): Deleted.
* platform/graphics/freetype/FontPlatformDataFreeType.cpp: Ditto.
(WebCore::FontPlatformData::FontPlatformData):
* platform/graphics/ios/FontCacheIOS.mm: Ditto.
(WebCore::baseSystemFontDescriptor):
(WebCore::systemFontModificationAttributes):
(WebCore::systemFontDescriptor):
(WebCore::platformFontWithFamilySpecialCase):
(WebCore::FontCache::weightOfCTFont): Deleted.
* platform/graphics/mac/FontCacheMac.mm: Ditto.
(WebCore::toNSFontWeight):
(WebCore::platformFontWithFamilySpecialCase):
* platform/graphics/win/FontCacheWin.cpp: Ditto.
(WebCore::toGDIFontWeight):
(WebCore::traitsInFamilyEnumProc):
(WebCore::FontCache::getFontSelectionCapabilitiesInFamily):
(): Deleted.
* platform/mock/MockRealtimeVideoSource.cpp: Ditto.
(WebCore::MockRealtimeVideoSource::applySize):
* platform/text/TextFlags.h: Delete old enum types.
* platform/win/DragImageWin.cpp: Migrate off old enum types.
(WebCore::dragLabelFont):
* rendering/RenderEmbeddedObject.cpp: Ditto.
(WebCore::RenderEmbeddedObject::getReplacementTextGeometry):
* rendering/RenderThemeGtk.cpp: Ditto.
(WebCore::RenderThemeGtk::updateCachedSystemFontDescription):
* rendering/RenderThemeIOS.mm: Ditto.
(WebCore::RenderThemeIOS::updateCachedSystemFontDescription):
* rendering/RenderThemeMac.mm: Ditto.
(WebCore::toFontWeight):
* rendering/RenderThemeWin.cpp: Ditto.
(WebCore::fillFontDescription):

Source/WebKit/mac:

Migrate off old enum types.

* WebCoreSupport/PopupMenuMac.mm:
(PopupMenuMac::populate):
* WebView/WebHTMLView.mm:
(fontNameForDescription):
* WebView/WebView.mm:
(-[WebView updateTextTouchBar]):

Source/WebKit/win:

Migrate off old enum types.

* WebKitGraphics.cpp:
(makeFont):

Source/WebKit2:

Migrate off old enum types.

* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::editorState):

Tools:

Migrate off old enum types.

* TestWebKitAPI/Tests/WebCore/FontCache.cpp:
(TestWebKitAPI::createPlatformFont):
(TestWebKitAPI::compareFonts):
(TestWebKitAPI::TEST_F):

LayoutTests:

* fast/text/font-selection-font-face-parse-expected.txt: Added.
* fast/text/font-selection-font-face-parse.html: Added.
* fast/text/font-selection-font-loading-api-parse-expected.txt: Added.
* fast/text/font-selection-font-loading-api-parse.html: Added.
* fast/text/font-stretch-parse-expected.txt:
* fast/text/font-stretch-parse.html:
* fast/text/font-style-parse-expected.txt: Copied from LayoutTests/fast/text/font-stretch-parse-expected.txt.
* fast/text/font-style-parse.html: Added.
* fast/text/font-weight-parse-expected.txt: Copied from LayoutTests/fast/text/font-stretch-parse-expected.txt.
* fast/text/font-weight-parse.html: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@213464 268f45cc-cd09-0410-ab3c-d52691b4dbfc
65 files changed:
LayoutTests/ChangeLog
LayoutTests/fast/text/font-selection-font-face-parse-expected.txt [new file with mode: 0644]
LayoutTests/fast/text/font-selection-font-face-parse.html [new file with mode: 0644]
LayoutTests/fast/text/font-selection-font-loading-api-parse-expected.txt [new file with mode: 0644]
LayoutTests/fast/text/font-selection-font-loading-api-parse.html [new file with mode: 0644]
LayoutTests/fast/text/font-stretch-parse-expected.txt
LayoutTests/fast/text/font-stretch-parse.html
LayoutTests/fast/text/font-style-parse-expected.txt [new file with mode: 0644]
LayoutTests/fast/text/font-style-parse.html [new file with mode: 0644]
LayoutTests/fast/text/font-weight-parse-expected.txt [new file with mode: 0644]
LayoutTests/fast/text/font-weight-parse.html [new file with mode: 0644]
Source/WebCore/ChangeLog
Source/WebCore/WebCore.xcodeproj/project.pbxproj
Source/WebCore/accessibility/AccessibilityRenderObject.cpp
Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp
Source/WebCore/css/CSSComputedStyleDeclaration.cpp
Source/WebCore/css/CSSFontFace.cpp
Source/WebCore/css/CSSFontFace.h
Source/WebCore/css/CSSFontFaceSet.cpp
Source/WebCore/css/CSSFontFaceSet.h
Source/WebCore/css/CSSFontSelector.cpp
Source/WebCore/css/CSSPrimitiveValueMappings.h
Source/WebCore/css/CSSProperties.json
Source/WebCore/css/CSSSegmentedFontFace.cpp
Source/WebCore/css/CSSValueKeywords.in
Source/WebCore/css/FontFace.cpp
Source/WebCore/css/FontSelectionValueInlines.h [new file with mode: 0644]
Source/WebCore/css/StyleBuilderConverter.h
Source/WebCore/css/StyleBuilderCustom.h
Source/WebCore/css/parser/CSSParserFastPaths.cpp
Source/WebCore/css/parser/CSSPropertyParser.cpp
Source/WebCore/editing/EditingStyle.cpp
Source/WebCore/editing/mac/EditorMac.mm
Source/WebCore/platform/graphics/FontCache.h
Source/WebCore/platform/graphics/FontCascade.cpp
Source/WebCore/platform/graphics/FontCascade.h
Source/WebCore/platform/graphics/FontDescription.cpp
Source/WebCore/platform/graphics/FontDescription.h
Source/WebCore/platform/graphics/FontSelectionAlgorithm.cpp
Source/WebCore/platform/graphics/FontSelectionAlgorithm.h
Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp
Source/WebCore/platform/graphics/freetype/FontCacheFreeType.cpp
Source/WebCore/platform/graphics/freetype/FontPlatformDataFreeType.cpp
Source/WebCore/platform/graphics/ios/FontCacheIOS.mm
Source/WebCore/platform/graphics/mac/FontCacheMac.mm
Source/WebCore/platform/graphics/win/FontCacheWin.cpp
Source/WebCore/platform/mock/MockRealtimeVideoSource.cpp
Source/WebCore/platform/text/TextFlags.h
Source/WebCore/platform/win/DragImageWin.cpp
Source/WebCore/rendering/RenderEmbeddedObject.cpp
Source/WebCore/rendering/RenderThemeGtk.cpp
Source/WebCore/rendering/RenderThemeIOS.mm
Source/WebCore/rendering/RenderThemeMac.mm
Source/WebCore/rendering/RenderThemeWin.cpp
Source/WebKit/mac/ChangeLog
Source/WebKit/mac/WebCoreSupport/PopupMenuMac.mm
Source/WebKit/mac/WebView/WebHTMLView.mm
Source/WebKit/mac/WebView/WebView.mm
Source/WebKit/win/ChangeLog
Source/WebKit/win/DOMCoreClasses.cpp
Source/WebKit/win/WebKitGraphics.cpp
Source/WebKit2/ChangeLog
Source/WebKit2/WebProcess/WebPage/WebPage.cpp
Tools/ChangeLog
Tools/TestWebKitAPI/Tests/WebCore/FontCache.cpp