Changeset 214364 in webkit
- Timestamp:
- Mar 24, 2017 12:01:54 PM (7 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r214361 r214364 1 2017-03-24 Myles C. Maxfield <mmaxfield@apple.com> 2 3 Implement font-optical-sizing 4 https://bugs.webkit.org/show_bug.cgi?id=168895 5 6 Reviewed by Dean Jackson. 7 8 * fast/text/variations/optical-sizing-expected.txt: Added. 9 * fast/text/variations/optical-sizing.html: Added. 10 1 11 2017-03-24 Yoav Weiss <yoav@yoav.ws> 2 12 -
trunk/Source/WebCore/ChangeLog
r214362 r214364 1 2017-03-24 Myles C. Maxfield <mmaxfield@apple.com> 2 3 Implement font-optical-sizing 4 https://bugs.webkit.org/show_bug.cgi?id=168895 5 6 Reviewed by Dean Jackson. 7 8 Upon advice from Microsoft, the only input to optical sizing is just the 9 font-size computed value. It is implemented by setting the 'opsz' font 10 variation axis. Because the propery has such a simple grammar, the 11 implementation is quite straightforward. 12 13 Test: fast/text/variations/optical-sizing.html 14 15 * css/CSSComputedStyleDeclaration.cpp: 16 (WebCore::ComputedStyleExtractor::propertyValue): 17 * css/CSSPrimitiveValueMappings.h: 18 (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): 19 (WebCore::CSSPrimitiveValue::operator FontOpticalSizing): 20 * css/CSSProperties.json: 21 * css/parser/CSSParserFastPaths.cpp: 22 (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue): 23 (WebCore::CSSParserFastPaths::isKeywordPropertyID): 24 * platform/graphics/FontCache.h: 25 (WebCore::FontDescriptionKey::makeFlagsKey): 26 * platform/graphics/FontDescription.h: 27 (WebCore::FontDescription::opticalSizing): 28 (WebCore::FontDescription::setOpticalSizing): 29 (WebCore::FontDescription::operator==): 30 (WebCore::FontCascadeDescription::initialOpticalSizing): 31 * platform/graphics/cocoa/FontCacheCoreText.cpp: 32 (WebCore::preparePlatformFont): 33 (WebCore::fontWithFamily): 34 (WebCore::FontCache::createFontPlatformData): 35 (WebCore::FontCache::systemFallbackForCharacters): 36 * platform/graphics/mac/FontCustomPlatformData.cpp: 37 (WebCore::FontCustomPlatformData::fontPlatformData): 38 * platform/text/TextFlags.h: 39 1 40 2017-03-24 Chris Dumez <cdumez@apple.com> 2 41 -
trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp
r214359 r214364 2950 2950 return WTFMove(list); 2951 2951 } 2952 case CSSPropertyFontOpticalSizing: 2953 return cssValuePool.createValue(style->fontDescription().opticalSizing()); 2952 2954 #endif 2953 2955 case CSSPropertyGridAutoFlow: { -
trunk/Source/WebCore/css/CSSPrimitiveValueMappings.h
r213464 r214364 5617 5617 } 5618 5618 5619 } 5619 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(FontOpticalSizing sizing) 5620 : CSSValue(PrimitiveClass) 5621 { 5622 m_primitiveUnitType = CSS_VALUE_ID; 5623 switch (sizing) { 5624 case FontOpticalSizing::Enabled: 5625 m_value.valueID = CSSValueAuto; 5626 break; 5627 case FontOpticalSizing::Disabled: 5628 m_value.valueID = CSSValueNone; 5629 break; 5630 default: 5631 ASSERT_NOT_REACHED(); 5632 break; 5633 } 5634 } 5635 5636 template<> inline CSSPrimitiveValue::operator FontOpticalSizing() const 5637 { 5638 ASSERT(isValueID()); 5639 switch (m_value.valueID) { 5640 case CSSValueAuto: 5641 return FontOpticalSizing::Enabled; 5642 case CSSValueNone: 5643 return FontOpticalSizing::Disabled; 5644 default: 5645 break; 5646 } 5647 ASSERT_NOT_REACHED(); 5648 return FontOpticalSizing::Enabled; 5649 } 5650 5651 } -
trunk/Source/WebCore/css/CSSProperties.json
r213634 r214364 521 521 } 522 522 }, 523 "font-synthesis": { 524 "inherited": true, 525 "codegen-properties": { 526 "converter": "FontSynthesis", 527 "font-property": true, 528 "high-priority": true 529 }, 530 "specification": { 531 "category": "css-fonts", 532 "url": "https://drafts.csswg.org/css-fonts-3/#font-synthesis-prop" 533 } 534 }, 535 "font-optical-sizing": { 536 "inherited": true, 537 "values": [ 538 "auto", 539 "none" 540 ], 541 "codegen-properties": { 542 "name-for-methods": "OpticalSizing", 543 "font-property": true, 544 "high-priority": true, 545 "enable-if": "ENABLE_VARIATION_FONTS" 546 }, 547 "specification": { 548 "category": "css-fonts", 549 "url": "https://drafts.csswg.org/css-fonts-4/#optical-sizing-control-the-font-optical-sizing-property" 550 } 551 }, 552 "font": { 553 "inherited": true, 554 "codegen-properties": { 555 "longhands": [ 556 "font-family", 557 "font-size", 558 "font-style", 559 "font-variant-caps", 560 "font-weight", 561 "font-stretch", 562 "line-height" 563 ] 564 }, 565 "specification": { 566 "category": "css-fonts", 567 "url": "https://www.w3.org/TR/css-fonts-3/#font-prop" 568 } 569 }, 570 "font-variant": { 571 "inherited": true, 572 "codegen-properties": { 573 "longhands": [ 574 "font-variant-ligatures", 575 "font-variant-position", 576 "font-variant-caps", 577 "font-variant-numeric", 578 "font-variant-alternates", 579 "font-variant-east-asian" 580 ] 581 }, 582 "specification": { 583 "category": "css-fonts", 584 "url": "https://www.w3.org/TR/css-fonts-3/#propdef-font-variant" 585 } 586 }, 523 587 "-webkit-locale": { 524 588 "inherited": true, … … 654 718 "specification": { 655 719 "url": "https://msdn.microsoft.com/en-us/library/ms531189(v=vs.85).aspx" 656 }657 },658 "font-synthesis": {659 "inherited": true,660 "codegen-properties": {661 "converter": "FontSynthesis",662 "font-property": true,663 "high-priority": true664 },665 "specification": {666 "category": "css-fonts",667 "url": "https://drafts.csswg.org/css-fonts-3/#font-synthesis-prop"668 720 } 669 721 }, … … 2016 2068 "category": "svg", 2017 2069 "url": "https://www.w3.org/TR/SVG/filters.html#FloodOpacityProperty" 2018 }2019 },2020 "font": {2021 "inherited": true,2022 "codegen-properties": {2023 "longhands": [2024 "font-family",2025 "font-size",2026 "font-style",2027 "font-variant-caps",2028 "font-weight",2029 "font-stretch",2030 "line-height"2031 ]2032 },2033 "specification": {2034 "category": "css-fonts",2035 "url": "https://www.w3.org/TR/css-fonts-3/#font-prop"2036 }2037 },2038 "font-variant": {2039 "inherited": true,2040 "codegen-properties": {2041 "longhands": [2042 "font-variant-ligatures",2043 "font-variant-position",2044 "font-variant-caps",2045 "font-variant-numeric",2046 "font-variant-alternates",2047 "font-variant-east-asian"2048 ]2049 },2050 "specification": {2051 "category": "css-fonts",2052 "url": "https://www.w3.org/TR/css-fonts-3/#propdef-font-variant"2053 2070 } 2054 2071 }, -
trunk/Source/WebCore/css/parser/CSSParserFastPaths.cpp
r213567 r214364 800 800 case CSSPropertyWebkitOverflowScrolling: 801 801 return valueID == CSSValueAuto || valueID == CSSValueTouch; 802 #endif 803 #if ENABLE(VARIATION_FONTS) 804 case CSSPropertyFontOpticalSizing: 805 return valueID == CSSValueAuto || valueID == CSSValueNone; 802 806 #endif 803 807 default: … … 963 967 case CSSPropertyApplePayButtonType: 964 968 #endif 969 #if ENABLE(VARIATION_FONTS) 970 case CSSPropertyFontOpticalSizing: 971 #endif 965 972 return true; 966 973 case CSSPropertyJustifyContent: -
trunk/Source/WebCore/platform/graphics/FontCache.h
r213505 r214364 123 123 { 124 124 static_assert(USCRIPT_CODE_LIMIT < 0x1000, "Script code must fit in an unsigned along with the other flags"); 125 unsigned first = static_cast<unsigned>(description.script()) << 11 125 unsigned first = static_cast<unsigned>(description.script()) << 12 126 | static_cast<unsigned>(description.opticalSizing()) << 11 126 127 | static_cast<unsigned>(description.textRenderingMode()) << 9 127 128 | static_cast<unsigned>(description.fontSynthesis()) << 6 … … 276 277 }; 277 278 278 RetainPtr<CTFontRef> preparePlatformFont(CTFontRef, TextRenderingMode, const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings, const FontFeatureSettings& features, const FontVariantSettings&, FontSelectionRequest, const FontVariationSettings& );279 RetainPtr<CTFontRef> preparePlatformFont(CTFontRef, TextRenderingMode, const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings, const FontFeatureSettings& features, const FontVariantSettings&, FontSelectionRequest, const FontVariationSettings&, FontOpticalSizing, float size); 279 280 SynthesisPair computeNecessarySynthesis(CTFontRef, const FontDescription&, bool isPlatformFont = false); 280 281 RetainPtr<CTFontRef> platformFontWithFamilySpecialCase(const AtomicString& family, FontSelectionRequest, float size); -
trunk/Source/WebCore/platform/graphics/FontDescription.h
r213464 r214364 96 96 variantEastAsianRuby() }; 97 97 } 98 FontOpticalSizing opticalSizing() const { return static_cast<FontOpticalSizing>(m_opticalSizing); } 98 99 99 100 void setComputedSize(float s) { m_computedSize = clampToFloat(s); } … … 128 129 void setVariantEastAsianWidth(FontVariantEastAsianWidth variant) { m_variantEastAsianWidth = static_cast<unsigned>(variant); } 129 130 void setVariantEastAsianRuby(FontVariantEastAsianRuby variant) { m_variantEastAsianRuby = static_cast<unsigned>(variant); } 131 void setOpticalSizing(FontOpticalSizing sizing) { m_opticalSizing = static_cast<unsigned>(sizing); } 130 132 131 133 private: … … 159 161 unsigned m_variantEastAsianWidth : 2; // FontVariantEastAsianWidth 160 162 unsigned m_variantEastAsianRuby : 1; // FontVariantEastAsianRuby 163 unsigned m_opticalSizing : 1; // FontOpticalSizing 161 164 }; 162 165 … … 190 193 && m_variantEastAsianVariant == other.m_variantEastAsianVariant 191 194 && m_variantEastAsianWidth == other.m_variantEastAsianWidth 192 && m_variantEastAsianRuby == other.m_variantEastAsianRuby; 195 && m_variantEastAsianRuby == other.m_variantEastAsianRuby 196 && m_opticalSizing == other.m_opticalSizing; 193 197 } 194 198 … … 272 276 static FontVariantCaps initialVariantCaps() { return FontVariantCaps::Normal; } 273 277 static FontVariantAlternates initialVariantAlternates() { return FontVariantAlternates::Normal; } 278 static FontOpticalSizing initialOpticalSizing() { return FontOpticalSizing::Enabled; } 274 279 static const AtomicString& initialLocale() { return nullAtom; } 275 280 -
trunk/Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp
r214242 r214364 431 431 #endif 432 432 433 RetainPtr<CTFontRef> preparePlatformFont(CTFontRef originalFont, TextRenderingMode textRenderingMode, const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings, const FontFeatureSettings& features, const FontVariantSettings& variantSettings, FontSelectionRequest fontSelectionRequest, const FontVariationSettings& variations )433 RetainPtr<CTFontRef> preparePlatformFont(CTFontRef originalFont, TextRenderingMode textRenderingMode, const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings, const FontFeatureSettings& features, const FontVariantSettings& variantSettings, FontSelectionRequest fontSelectionRequest, const FontVariationSettings& variations, FontOpticalSizing fontOpticalSizing, float size) 434 434 { 435 435 bool alwaysAddVariations = false; … … 441 441 #else 442 442 UNUSED_PARAM(fontSelectionRequest); 443 UNUSED_PARAM(fontOpticalSizing); 444 UNUSED_PARAM(size); 443 445 #endif 444 446 … … 505 507 506 508 // The system font is somewhat magical. Don't mess with its variations. 507 if (!fontIsSystemFont(originalFont)) 508 { 509 if (!fontIsSystemFont(originalFont)) { 509 510 applyVariation({{'w', 'g', 'h', 't'}}, static_cast<float>(fontSelectionRequest.weight)); 510 511 applyVariation({{'w', 'd', 't', 'h'}}, static_cast<float>(fontSelectionRequest.width)); 511 512 applyVariation({{'s', 'l', 'n', 't'}}, static_cast<float>(fontSelectionRequest.slope)); 512 513 } 514 515 if (fontOpticalSizing == FontOpticalSizing::Enabled) { 516 const float pxToPtRatio = 3.0f / 4; 517 applyVariation({{'o', 'p', 's', 'z'}}, size * pxToPtRatio); 518 } 519 513 520 for (auto& newVariation : variations) 514 521 applyVariation(newVariation.tag(), newVariation.value()); … … 1038 1045 } 1039 1046 1040 static RetainPtr<CTFontRef> fontWithFamily(const AtomicString& family, FontSelectionRequest request, const FontFeatureSettings& featureSettings, const FontVariantSettings& variantSettings, const FontVariationSettings& variationSettings, const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings, const TextRenderingMode& textRenderingMode, FontSelectionRequest fontSelectionRequest, float size)1047 static RetainPtr<CTFontRef> fontWithFamily(const AtomicString& family, FontSelectionRequest request, const FontFeatureSettings& featureSettings, const FontVariantSettings& variantSettings, const FontVariationSettings& variationSettings, const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings, const TextRenderingMode& textRenderingMode, FontSelectionRequest fontSelectionRequest, FontOpticalSizing fontOpticalSizing, float size) 1041 1048 { 1042 1049 if (family.isEmpty()) … … 1046 1053 if (!foundFont) 1047 1054 foundFont = platformFontLookupWithFamily(family, request, size); 1048 return preparePlatformFont(foundFont.get(), textRenderingMode, fontFaceFeatures, fontFaceVariantSettings, featureSettings, variantSettings, fontSelectionRequest, variationSettings );1055 return preparePlatformFont(foundFont.get(), textRenderingMode, fontFaceFeatures, fontFaceVariantSettings, featureSettings, variantSettings, fontSelectionRequest, variationSettings, fontOpticalSizing, size); 1049 1056 } 1050 1057 … … 1085 1092 float size = fontDescription.computedPixelSize(); 1086 1093 1087 auto font = fontWithFamily(family, fontDescription.fontSelectionRequest(), fontDescription.featureSettings(), fontDescription.variantSettings(), fontDescription.variationSettings(), fontFaceFeatures, fontFaceVariantSettings, fontDescription.textRenderingMode(), fontDescription.fontSelectionRequest(), size);1094 auto font = fontWithFamily(family, fontDescription.fontSelectionRequest(), fontDescription.featureSettings(), fontDescription.variantSettings(), fontDescription.variationSettings(), fontFaceFeatures, fontFaceVariantSettings, fontDescription.textRenderingMode(), fontDescription.fontSelectionRequest(), fontDescription.opticalSizing(), size); 1088 1095 1089 1096 #if PLATFORM(MAC) … … 1096 1103 autoActivateFont(family.string(), size); 1097 1104 1098 font = fontWithFamily(family, fontDescription.fontSelectionRequest(), fontDescription.featureSettings(), fontDescription.variantSettings(), fontDescription.variationSettings(), fontFaceFeatures, fontFaceVariantSettings, fontDescription.textRenderingMode(), fontDescription.fontSelectionRequest(), size);1105 font = fontWithFamily(family, fontDescription.fontSelectionRequest(), fontDescription.featureSettings(), fontDescription.variantSettings(), fontDescription.variationSettings(), fontFaceFeatures, fontFaceVariantSettings, fontDescription.textRenderingMode(), fontDescription.fontSelectionRequest(), fontDescription.opticalSizing(), size); 1099 1106 } 1100 1107 #endif … … 1184 1191 const FontPlatformData& platformData = originalFontData->platformData(); 1185 1192 auto result = lookupFallbackFont(platformData.font(), description.weight(), description.locale(), characters, length); 1186 result = preparePlatformFont(result.get(), description.textRenderingMode(), nullptr, nullptr, description.featureSettings(), description.variantSettings(), description.fontSelectionRequest(), description.variationSettings() );1193 result = preparePlatformFont(result.get(), description.textRenderingMode(), nullptr, nullptr, description.featureSettings(), description.variantSettings(), description.fontSelectionRequest(), description.variationSettings(), description.opticalSizing(), description.computedSize()); 1187 1194 if (!result) 1188 1195 return lastResortFallbackFont(description); -
trunk/Source/WebCore/platform/graphics/mac/FontCustomPlatformData.cpp
r213505 r214364 41 41 FontWidthVariant widthVariant = fontDescription.widthVariant(); 42 42 RetainPtr<CTFontRef> font = adoptCF(CTFontCreateWithFontDescriptor(m_fontDescriptor.get(), size, nullptr)); 43 font = preparePlatformFont(font.get(), fontDescription.textRenderingMode(), &fontFaceFeatures, &fontFaceVariantSettings, fontDescription.featureSettings(), fontDescription.variantSettings(), fontDescription.fontSelectionRequest(), fontDescription.variationSettings() );43 font = preparePlatformFont(font.get(), fontDescription.textRenderingMode(), &fontFaceFeatures, &fontFaceVariantSettings, fontDescription.featureSettings(), fontDescription.variantSettings(), fontDescription.fontSelectionRequest(), fontDescription.variationSettings(), fontDescription.opticalSizing(), fontDescription.computedSize()); 44 44 ASSERT(font); 45 45 return FontPlatformData(font.get(), size, bold, italic, orientation, widthVariant, fontDescription.textRenderingMode()); -
trunk/Source/WebCore/platform/text/TextFlags.h
r213464 r214364 352 352 }; 353 353 354 enum class FontOpticalSizing { 355 Enabled, 356 Disabled 357 }; 358 354 359 } -
trunk/Source/WebInspectorUI/UserInterface/Models/CSSKeywordCompletions.js
r212985 r214364 93 93 "azimuth", "border-collapse", "border-spacing", "caption-side", "clip-rule", "color", "color-interpolation", 94 94 "color-interpolation-filters", "color-rendering", "cursor", "direction", "elevation", "empty-cells", "fill", 95 "fill-opacity", "fill-rule", "font", "font-family", "font-size", "font-style", "font-variant", "font-variant-numeric", "font-weight", 95 "fill-opacity", "fill-rule", "font", "font-family", "font-size", "font-style", "font-variant", "font-variant-numeric", "font-weight", "font-optical-sizing", 96 96 "glyph-orientation-horizontal", "glyph-orientation-vertical", "hanging-punctuation", "image-rendering", "kerning", "letter-spacing", 97 97 "line-height", "list-style", "list-style-image", "list-style-position", "list-style-type", "marker", "marker-end", … … 196 196 "semi-expanded", "expanded", "extra-expanded", "ultra-expanded" 197 197 ], 198 "font-optical-sizing": [ 199 "auto", "none", 200 ], 198 201 "-webkit-color-correction": [ 199 202 "default", "srgb"
Note: See TracChangeset
for help on using the changeset viewer.