Changeset 220725 in webkit
- Timestamp:
- Aug 14, 2017 5:03:56 PM (7 years ago)
- Location:
- trunk
- Files:
-
- 3 added
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r220718 r220725 1 2017-08-14 Myles C. Maxfield <mmaxfield@apple.com> 2 3 Parse font-display 4 https://bugs.webkit.org/show_bug.cgi?id=175382 5 6 Reviewed by Simon Fraser. 7 8 * fast/text/font-display/parse-expected.txt: Added. 9 * fast/text/font-display/parse.html: Added. 10 1 11 2017-08-14 Andy Estes <aestes@apple.com> 2 12 -
trunk/Source/WebCore/ChangeLog
r220723 r220725 1 2017-08-14 Myles C. Maxfield <mmaxfield@apple.com> 2 3 Parse font-display 4 https://bugs.webkit.org/show_bug.cgi?id=175382 5 6 Reviewed by Simon Fraser. 7 8 The syntax is very simple: font-display: auto | block | swap | fallback | optional. 9 So, parsing support is quite straightfoward. 10 11 Test: fast/text/font-display/parse.html 12 13 * css/CSSComputedStyleDeclaration.cpp: 14 (WebCore::ComputedStyleExtractor::propertyValue): 15 * css/CSSFontFace.cpp: 16 (WebCore::CSSFontFace::setLoadingBehavior): 17 * css/CSSFontFace.h: 18 * css/CSSFontSelector.cpp: 19 (WebCore::CSSFontSelector::addFontFaceRule): 20 * css/CSSPrimitiveValueMappings.h: 21 (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): 22 (WebCore::CSSPrimitiveValue::operator FontLoadingBehavior const): 23 * css/CSSProperties.json: 24 * css/CSSProperty.cpp: 25 (WebCore::CSSProperty::isDescriptorOnly): 26 * css/CSSValueKeywords.in: 27 * css/parser/CSSPropertyParser.cpp: 28 (WebCore::consumeFontFaceFontDisplay): 29 (WebCore::CSSPropertyParser::parseFontFaceDescriptor): 30 * rendering/style/RenderStyleConstants.h: 31 1 32 2017-08-14 Jer Noble <jer.noble@apple.com> 2 33 -
trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp
r220706 r220725 4019 4019 case CSSPropertySrc: 4020 4020 case CSSPropertyUnicodeRange: 4021 case CSSPropertyFontDisplay: 4021 4022 break; 4022 4023 -
trunk/Source/WebCore/css/CSSFontFace.cpp
r218890 r220725 150 150 { 151 151 auto range = calculateWeightRange(weight); 152 if (m_fontSelectionCapabilities.weight == range) 153 return; 154 152 155 setWeight(range); 153 156 … … 185 188 { 186 189 auto range = calculateStretchRange(style); 190 if (m_fontSelectionCapabilities.width == range) 191 return; 192 187 193 setStretch(range); 188 194 … … 230 236 { 231 237 auto range = calculateItalicRange(style); 238 if (m_fontSelectionCapabilities.slope == range) 239 return; 240 232 241 setStyle(range); 233 242 … … 245 254 return false; 246 255 247 m_ranges.clear();256 Vector<UnicodeRange> ranges; 248 257 auto& list = downcast<CSSValueList>(unicodeRange); 249 258 for (auto& rangeValue : list) { 250 259 auto& range = downcast<CSSUnicodeRangeValue>(rangeValue.get()); 251 m_ranges.append({ range.from(), range.to() }); 252 } 260 ranges.append({ range.from(), range.to() }); 261 } 262 263 if (ranges.size() == m_ranges.size()) { 264 bool same = true; 265 for (size_t i = 0; i < ranges.size(); ++i) { 266 if (ranges[i] != m_ranges[i]) { 267 same = false; 268 break; 269 } 270 } 271 if (same) 272 return true; 273 } 274 275 m_ranges = WTFMove(ranges); 253 276 254 277 if (m_cssConnection) … … 265 288 { 266 289 auto ligatures = extractFontVariantLigatures(variantLigatures); 290 291 if (m_variantSettings.commonLigatures == ligatures.commonLigatures 292 && m_variantSettings.discretionaryLigatures == ligatures.discretionaryLigatures 293 && m_variantSettings.historicalLigatures == ligatures.historicalLigatures 294 && m_variantSettings.contextualAlternates == ligatures.contextualAlternates) 295 return true; 267 296 268 297 m_variantSettings.commonLigatures = ligatures.commonLigatures; … … 286 315 return false; 287 316 288 m_variantSettings.position = downcast<CSSPrimitiveValue>(variantPosition); 317 FontVariantPosition position = downcast<CSSPrimitiveValue>(variantPosition); 318 319 if (m_variantSettings.position == position) 320 return true; 321 322 m_variantSettings.position = position; 289 323 290 324 if (m_cssConnection) … … 303 337 return false; 304 338 305 m_variantSettings.caps = downcast<CSSPrimitiveValue>(variantCaps); 339 FontVariantCaps caps = downcast<CSSPrimitiveValue>(variantCaps); 340 341 if (m_variantSettings.caps == caps) 342 return true; 343 344 m_variantSettings.caps = caps; 306 345 307 346 if (m_cssConnection) … … 318 357 { 319 358 auto numeric = extractFontVariantNumeric(variantNumeric); 359 360 if (m_variantSettings.numericFigure == numeric.figure 361 && m_variantSettings.numericSpacing == numeric.spacing 362 && m_variantSettings.numericFraction == numeric.fraction 363 && m_variantSettings.numericOrdinal == numeric.ordinal 364 && m_variantSettings.numericSlashedZero == numeric.slashedZero) 365 return true; 320 366 321 367 m_variantSettings.numericFigure = numeric.figure; … … 340 386 return false; 341 387 342 m_variantSettings.alternates = downcast<CSSPrimitiveValue>(variantAlternates); 388 FontVariantAlternates alternates = downcast<CSSPrimitiveValue>(variantAlternates); 389 390 if (m_variantSettings.alternates == alternates) 391 return true; 392 393 m_variantSettings.alternates = alternates; 343 394 344 395 if (m_cssConnection) … … 355 406 { 356 407 auto eastAsian = extractFontVariantEastAsian(variantEastAsian); 408 409 if (m_variantSettings.eastAsianVariant == eastAsian.variant 410 && m_variantSettings.eastAsianWidth == eastAsian.width 411 && m_variantSettings.eastAsianRuby == eastAsian.ruby) 412 return true; 357 413 358 414 m_variantSettings.eastAsianVariant = eastAsian.variant; … … 392 448 if (m_cssConnection) 393 449 m_cssConnection->mutableProperties().setProperty(CSSPropertyFontFeatureSettings, &featureSettings); 450 451 iterateClients(m_clients, [&](Client& client) { 452 client.fontPropertyChanged(*this); 453 }); 454 } 455 456 void CSSFontFace::setLoadingBehavior(CSSValue& loadingBehaviorValue) 457 { 458 auto loadingBehavior = static_cast<FontLoadingBehavior>(downcast<CSSPrimitiveValue>(loadingBehaviorValue).valueID()); 459 460 if (m_loadingBehavior == loadingBehavior) 461 return; 462 463 m_loadingBehavior = loadingBehavior; 464 465 if (m_cssConnection) 466 m_cssConnection->mutableProperties().setProperty(CSSPropertyFontDisplay, &loadingBehaviorValue); 394 467 395 468 iterateClients(m_clients, [&](Client& client) { -
trunk/Source/WebCore/css/CSSFontFace.h
r218588 r220725 77 77 bool setVariantEastAsian(CSSValue&); 78 78 void setFeatureSettings(CSSValue&); 79 void setLoadingBehavior(CSSValue&); 79 80 80 81 enum class Status; … … 138 139 UChar32 from; 139 140 UChar32 to; 141 bool operator==(const UnicodeRange& other) const { return from == other.from && to == other.to; } 142 bool operator!=(const UnicodeRange& other) const { return !(*this == other); } 140 143 }; 141 144 … … 180 183 WeakPtr<FontFace> m_wrapper; 181 184 FontSelectionSpecifiedCapabilities m_fontSelectionCapabilities; 185 FontLoadingBehavior m_loadingBehavior { FontLoadingBehavior::Auto }; 182 186 Status m_status { Status::Pending }; 183 187 bool m_isLocalFallback { false }; -
trunk/Source/WebCore/css/CSSFontSelector.cpp
r219145 r220725 158 158 RefPtr<CSSValue> variantAlternates = style.getPropertyCSSValue(CSSPropertyFontVariantAlternates); 159 159 RefPtr<CSSValue> variantEastAsian = style.getPropertyCSSValue(CSSPropertyFontVariantEastAsian); 160 RefPtr<CSSValue> loadingBehavior = style.getPropertyCSSValue(CSSPropertyFontDisplay); 160 161 if (!is<CSSValueList>(fontFamily.get()) || !is<CSSValueList>(src.get()) || (unicodeRange && !is<CSSValueList>(*unicodeRange))) 161 162 return; … … 198 199 if (featureSettings) 199 200 fontFace->setFeatureSettings(*featureSettings); 201 if (loadingBehavior) 202 fontFace->setLoadingBehavior(*loadingBehavior); 200 203 201 204 CSSFontFace::appendSources(fontFace, srcList, m_document, isInitiatingElementInUserAgentShadowTree); -
trunk/Source/WebCore/css/CSSPrimitiveValueMappings.h
r218588 r220725 5698 5698 } 5699 5699 5700 } 5700 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(FontLoadingBehavior behavior) 5701 : CSSValue(PrimitiveClass) 5702 { 5703 m_primitiveUnitType = CSS_VALUE_ID; 5704 switch (behavior) { 5705 case FontLoadingBehavior::Auto: 5706 m_value.valueID = CSSValueAuto; 5707 break; 5708 case FontLoadingBehavior::Block: 5709 m_value.valueID = CSSValueBlock; 5710 break; 5711 case FontLoadingBehavior::Swap: 5712 m_value.valueID = CSSValueSwap; 5713 break; 5714 case FontLoadingBehavior::Fallback: 5715 m_value.valueID = CSSValueFallback; 5716 break; 5717 case FontLoadingBehavior::Optional: 5718 m_value.valueID = CSSValueOptional; 5719 break; 5720 default: 5721 ASSERT_NOT_REACHED(); 5722 break; 5723 } 5724 } 5725 5726 template<> inline CSSPrimitiveValue::operator FontLoadingBehavior() const 5727 { 5728 ASSERT(isValueID()); 5729 switch (m_value.valueID) { 5730 case CSSValueAuto: 5731 return FontLoadingBehavior::Auto; 5732 case CSSValueBlock: 5733 return FontLoadingBehavior::Block; 5734 case CSSValueSwap: 5735 return FontLoadingBehavior::Swap; 5736 case CSSValueFallback: 5737 return FontLoadingBehavior::Fallback; 5738 case CSSValueOptional: 5739 return FontLoadingBehavior::Optional; 5740 default: 5741 break; 5742 } 5743 ASSERT_NOT_REACHED(); 5744 return FontLoadingBehavior::Auto; 5745 } 5746 5747 /* 5748 enum class FontLoadingBehavior { 5749 Auto, Block, Swap, Fallback, Optional 5750 }; 5751 */ 5752 5753 } -
trunk/Source/WebCore/css/CSSProperties.json
r220706 r220725 408 408 }, 409 409 "specification": { 410 "category": "css-fonts ",411 "url": "https://drafts.csswg.org/css-fonts-4/# low-level-font-variation-settings-control-the-font-variation-settings-property"410 "category": "css-fonts-4", 411 "url": "https://drafts.csswg.org/css-fonts-4/#font-variation-settings-def" 412 412 } 413 413 }, … … 568 568 }, 569 569 "specification": { 570 "category": "css-fonts ",571 "url": "https://drafts.csswg.org/css-fonts-4/# optical-sizing-control-the-font-optical-sizing-property"570 "category": "css-fonts-4", 571 "url": "https://drafts.csswg.org/css-fonts-4/#font-optical-sizing-def" 572 572 } 573 573 }, … … 3552 3552 } 3553 3553 }, 3554 "font-display": { 3555 "codegen-properties": { 3556 "skip-builder": true 3557 }, 3558 "specification": { 3559 "category": "css-fonts-4", 3560 "url": "https://drafts.csswg.org/css-fonts-4/#font-display-desc" 3561 }, 3562 "values": [ 3563 "auto", 3564 "block", 3565 "swap", 3566 "fallback", 3567 "optional" 3568 ] 3569 }, 3554 3570 "vector-effect": { 3555 3571 "values": [ … … 6753 6769 "url": "https://www.w3.org/TR/css-fonts-3/" 6754 6770 }, 6771 "css-fonts-4": { 6772 "shortname": "CSS Fonts Level 4", 6773 "longname": "CSS Fonts Module Level 4", 6774 "url": "https://drafts.csswg.org/css-fonts-4" 6775 }, 6755 6776 "css-grid": { 6756 6777 "shortname": "CSS Grid Layout", -
trunk/Source/WebCore/css/CSSProperty.cpp
r219595 r220725 165 165 case CSSPropertySrc: 166 166 case CSSPropertyUnicodeRange: 167 case CSSPropertyFontDisplay: 167 168 return true; 168 169 default: -
trunk/Source/WebCore/css/CSSValueKeywords.in
r217937 r220725 1348 1348 auto-fill 1349 1349 auto-fit 1350 1351 // font-display 1352 // auto 1353 // block 1354 swap 1355 fallback 1356 optional -
trunk/Source/WebCore/css/parser/CSSPropertyParser.cpp
r220706 r220725 4305 4305 } 4306 4306 4307 static RefPtr<CSSPrimitiveValue> consumeFontFaceFontDisplay(CSSParserTokenRange& range) 4308 { 4309 return consumeIdent<CSSValueAuto, CSSValueBlock, CSSValueSwap, CSSValueFallback, CSSValueOptional>(range); 4310 } 4311 4307 4312 static RefPtr<CSSValue> consumeFontFaceSrcURI(CSSParserTokenRange& range, const CSSParserContext& context) 4308 4313 { … … 4377 4382 case CSSPropertyUnicodeRange: 4378 4383 parsedValue = consumeFontFaceUnicodeRange(m_range); 4384 break; 4385 case CSSPropertyFontDisplay: 4386 parsedValue = consumeFontFaceFontDisplay(m_range); 4379 4387 break; 4380 4388 case CSSPropertyFontWeight: -
trunk/Source/WebCore/rendering/style/RenderStyleConstants.h
r220503 r220725 754 754 }; 755 755 756 enum class FontLoadingBehavior { 757 Auto, Block, Swap, Fallback, Optional 758 }; 759 756 760 extern const float defaultMiterLimit; 757 761
Note: See TracChangeset
for help on using the changeset viewer.