Changeset 237835 in webkit
- Timestamp:
- Nov 5, 2018 4:11:15 PM (5 years ago)
- Location:
- trunk
- Files:
-
- 6 added
- 18 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r237834 r237835 1 2018-11-05 Myles C. Maxfield <mmaxfield@apple.com> 2 3 Parsing support for text-underline-offset and text-decoration-thickness 4 https://bugs.webkit.org/show_bug.cgi?id=191242 5 6 Reviewed by Simon Fraser. 7 8 * fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-underline-position-expected.txt: 9 * fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-underline-position.html: Update the 10 test for the new grammar of text-underline-position 11 * fast/css3-text/css3-text-decoration/text-decoration-thickness-parse-expected.txt: Added. 12 * fast/css3-text/css3-text-decoration/text-decoration-thickness-parse.html: Added. 13 * fast/css3-text/css3-text-decoration/text-underline-offset-parse-expected.txt: Added. 14 * fast/css3-text/css3-text-decoration/text-underline-offset-parse.html: Added. 15 1 16 2018-11-05 Myles C. Maxfield <mmaxfield@apple.com> 2 17 -
trunk/LayoutTests/fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-underline-position-expected.txt
r150941 r237835 32 32 PASS computedStyle.getPropertyCSSValue('-webkit-text-underline-position').cssText is 'auto' 33 33 34 Value 'alphabetic':35 PASS e.style.webkitTextUnderlinePosition is 'alphabetic'36 PASS e.style.getPropertyCSSValue('-webkit-text-underline-position').toString() is '[object CSSPrimitiveValue]'37 PASS e.style.getPropertyCSSValue('-webkit-text-underline-position').cssText is 'alphabetic'38 PASS computedStyle.webkitTextUnderlinePosition is 'alphabetic'39 PASS computedStyle.getPropertyCSSValue('-webkit-text-underline-position').toString() is '[object CSSPrimitiveValue]'40 PASS computedStyle.getPropertyCSSValue('-webkit-text-underline-position').cssText is 'alphabetic'41 42 34 Value 'under': 43 35 PASS e.style.webkitTextUnderlinePosition is 'under' -
trunk/LayoutTests/fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-underline-position.html
r217390 r237835 26 26 description("Test to make sure -webkit-text-underline-position property returns values properly.") 27 27 28 // FIXME: This test tests property values 'auto' , 'alphabetic'and 'under'. We don't fully match28 // FIXME: This test tests property values 'auto' and 'under'. We don't fully match 29 29 // the specification as we don't support [ left | right ] and this is left for another implementation 30 30 // as the rendering will need to be added. … … 58 58 testElementStyle("webkitTextUnderlinePosition", "-webkit-text-underline-position", "[object CSSPrimitiveValue]", "auto"); 59 59 testComputedStyle("webkitTextUnderlinePosition", "-webkit-text-underline-position", "[object CSSPrimitiveValue]", "auto"); 60 debug('');61 62 debug("Value 'alphabetic':");63 e.style.webkitTextUnderlinePosition = 'alphabetic';64 testElementStyle("webkitTextUnderlinePosition", "-webkit-text-underline-position", "[object CSSPrimitiveValue]", "alphabetic");65 testComputedStyle("webkitTextUnderlinePosition", "-webkit-text-underline-position", "[object CSSPrimitiveValue]", "alphabetic");66 60 debug(''); 67 61 -
trunk/Source/WebCore/ChangeLog
r237834 r237835 1 2018-11-05 Myles C. Maxfield <mmaxfield@apple.com> 2 3 Parsing support for text-underline-offset and text-decoration-thickness 4 https://bugs.webkit.org/show_bug.cgi?id=191242 5 6 Reviewed by Simon Fraser. 7 8 Before we can implement the properties properly, we have to parse them. 9 10 https://github.com/w3c/csswg-drafts/issues/3118#issuecomment-432297480 describes the grammar: 11 text-underline-position: auto | [ [ under | from-font] || [ left | right ] ] 12 text-underline-offset: auto | <length> 13 text-decoration-thickness: auto | from-font | <length> 14 15 This patch also takes the opportunity to update the grammar of text-underline-position to match the spec, 16 and to add an alias to the unprefixed version. 17 18 We still don't support the left and right values on text-underline-position. We should add those eventually. 19 20 Tests: fast/css3-text/css3-text-decoration/text-decoration-thickness-parse.html 21 fast/css3-text/css3-text-decoration/text-underline-offset-parse.html 22 23 * WebCore.xcodeproj/project.pbxproj: 24 * css/CSSComputedStyleDeclaration.cpp: 25 (WebCore::textUnderlineOffsetToCSSValue): 26 (WebCore::textDecorationThicknessToCSSValue): 27 (WebCore::ComputedStyleExtractor::valueForPropertyinStyle): 28 * css/CSSPrimitiveValueMappings.h: 29 (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): 30 (WebCore::CSSPrimitiveValue::operator TextUnderlinePosition const): 31 (WebCore::CSSPrimitiveValue::operator OptionSet<TextUnderlinePosition> const): Deleted. 32 * css/CSSProperties.json: 33 * css/CSSValueKeywords.in: 34 * css/StyleBuilderConverter.h: 35 (WebCore::StyleBuilderConverter::convertTextUnderlinePosition): 36 (WebCore::StyleBuilderConverter::convertTextUnderlineOffset): 37 (WebCore::StyleBuilderConverter::convertTextDecorationThickness): 38 * css/StyleResolver.cpp: 39 (WebCore::shouldApplyPropertyInParseOrder): 40 * css/parser/CSSPropertyParser.cpp: 41 (WebCore::consumeTextUnderlineOffset): 42 (WebCore::consumeTextDecorationThickness): 43 (WebCore::CSSPropertyParser::parseSingleValue): 44 * rendering/style/RenderStyle.h: 45 (WebCore::RenderStyle::textUnderlinePosition const): 46 (WebCore::RenderStyle::textUnderlineOffset const): 47 (WebCore::RenderStyle::textDecorationThickness const): 48 (WebCore::RenderStyle::setTextUnderlinePosition): 49 (WebCore::RenderStyle::setTextUnderlineOffset): 50 (WebCore::RenderStyle::setTextDecorationThickness): 51 (WebCore::RenderStyle::initialTextUnderlinePosition): 52 (WebCore::RenderStyle::initialTextUnderlineOffset): 53 (WebCore::RenderStyle::initialTextDecorationThickness): 54 * rendering/style/RenderStyleConstants.h: 55 * rendering/style/StyleRareInheritedData.cpp: 56 (WebCore::StyleRareInheritedData::StyleRareInheritedData): 57 (WebCore::StyleRareInheritedData::operator== const): 58 * rendering/style/StyleRareInheritedData.h: 59 * rendering/style/TextDecorationThickness.h: Added. 60 (WebCore::TextDecorationThickness::createWithAuto): 61 (WebCore::TextDecorationThickness::createFromFont): 62 (WebCore::TextDecorationThickness::createWithLength): 63 (WebCore::TextDecorationThickness::isAuto const): 64 (WebCore::TextDecorationThickness::isFromFont const): 65 (WebCore::TextDecorationThickness::isLength const): 66 (WebCore::TextDecorationThickness::setLengthValue): 67 (WebCore::TextDecorationThickness::lengthValue const): 68 (WebCore::TextDecorationThickness::operator== const): 69 (WebCore::TextDecorationThickness::operator!= const): 70 (WebCore::TextDecorationThickness::TextDecorationThickness): 71 (WebCore::operator<<): 72 * rendering/style/TextUnderlineOffset.h: Added. 73 (WebCore::TextUnderlineOffset::createWithAuto): 74 (WebCore::TextUnderlineOffset::createWithLength): 75 (WebCore::TextUnderlineOffset::isAuto const): 76 (WebCore::TextUnderlineOffset::isLength const): 77 (WebCore::TextUnderlineOffset::setLengthValue): 78 (WebCore::TextUnderlineOffset::lengthValue const): 79 (WebCore::TextUnderlineOffset::lengthOr const): 80 (WebCore::TextUnderlineOffset::operator== const): 81 (WebCore::TextUnderlineOffset::operator!= const): 82 (WebCore::TextUnderlineOffset::TextUnderlineOffset): 83 (WebCore::operator<<): 84 * style/InlineTextBoxStyle.cpp: 85 (WebCore::computeUnderlineOffset): 86 * style/InlineTextBoxStyle.h: 87 1 88 2018-11-05 Myles C. Maxfield <mmaxfield@apple.com> 2 89 -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r237816 r237835 632 632 1C24EEA91C72A7B40080F8FC /* JSFontFaceSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C24EEA71C72A7B40080F8FC /* JSFontFaceSet.h */; }; 633 633 1C6626111C6E7CA600AB527C /* FontFace.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C66260F1C6E7CA600AB527C /* FontFace.h */; }; 634 1C73A7132185757E004CCEA5 /* TextUnderlineOffset.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CB6B4FB217B83940093B9CD /* TextUnderlineOffset.h */; settings = {ATTRIBUTES = (Private, ); }; }; 635 1C73A71521857587004CCEA5 /* TextDecorationThickness.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CB6B4F8217B83930093B9CD /* TextDecorationThickness.h */; settings = {ATTRIBUTES = (Private, ); }; }; 634 636 1C81B95A0E97330800266E07 /* InspectorController.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C81B9560E97330800266E07 /* InspectorController.h */; settings = {ATTRIBUTES = (Private, ); }; }; 635 637 1C81B95C0E97330800266E07 /* InspectorClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C81B9580E97330800266E07 /* InspectorClient.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 6387 6389 1CAF347F0A6C405200ABE06E /* WebScriptObject.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebScriptObject.mm; sourceTree = "<group>"; }; 6388 6390 1CAF34800A6C405200ABE06E /* WebScriptObjectPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebScriptObjectPrivate.h; sourceTree = "<group>"; }; 6391 1CB6B4F8217B83930093B9CD /* TextDecorationThickness.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TextDecorationThickness.h; sourceTree = "<group>"; }; 6392 1CB6B4FB217B83940093B9CD /* TextUnderlineOffset.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TextUnderlineOffset.h; sourceTree = "<group>"; }; 6389 6393 1CCDF5BB1990332400BCEBAD /* SVGToOTFFontConversion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGToOTFFontConversion.cpp; sourceTree = "<group>"; }; 6390 6394 1CCDF5BC1990332400BCEBAD /* SVGToOTFFontConversion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGToOTFFontConversion.h; sourceTree = "<group>"; }; … … 15573 15577 313591021E7DDC6000F30630 /* RTCIceTransportPolicy.h */, 15574 15578 313591031E7DDC6000F30630 /* RTCIceTransportState.h */, 15575 412BA5FE218C651800365474 /* RTCPMuxPolicy.h */,15576 15579 07221BAA17CF0AD400848E51 /* RTCPeerConnectionHandlerClient.h */, 15577 15580 41A48A9D1E8312EB00D2AC2D /* RTCPeerConnectionState.h */, 15581 412BA5FE218C651800365474 /* RTCPMuxPolicy.h */, 15578 15582 31EB54DD1E7DC74400C1623B /* RTCRtpTransceiverDirection.h */, 15579 15583 313591041E7DDC6000F30630 /* RTCSdpType.h */, … … 24619 24623 BC2274760E8366E200E7F975 /* SVGRenderStyleDefs.cpp */, 24620 24624 BC2274770E8366E200E7F975 /* SVGRenderStyleDefs.h */, 24625 1CB6B4F8217B83930093B9CD /* TextDecorationThickness.h */, 24621 24626 448B1B780F3A2F9B0047A9E2 /* TextSizeAdjustment.h */, 24627 1CB6B4FB217B83940093B9CD /* TextUnderlineOffset.h */, 24622 24628 0F15ED591B7EC7C500EDDFEB /* WillChangeData.cpp */, 24623 24629 0F15ED5A1B7EC7C500EDDFEB /* WillChangeData.h */, … … 31283 31289 142B97CA13138943008BEF4B /* TextControlInnerElements.h in Headers */, 31284 31290 582DE3251C30C85400BE02A8 /* TextDecorationPainter.h in Headers */, 31291 1C73A71521857587004CCEA5 /* TextDecorationThickness.h in Headers */, 31285 31292 97BC84B412371180000C6161 /* TextDocument.h in Headers */, 31286 31293 97BC84841236FD93000C6161 /* TextDocumentParser.h in Headers */, … … 31313 31320 B1AD4E7413A12A4600846B27 /* TextTrackLoader.h in Headers */, 31314 31321 CD8B5A49180E138B008B8E65 /* TextTrackMediaSource.h in Headers */, 31322 1C73A7132185757E004CCEA5 /* TextUnderlineOffset.h in Headers */, 31315 31323 29FAF4B6195AB08900A522DC /* TextUndoInsertionMarkupMac.h in Headers */, 31316 31324 498770F11242C535002226BA /* Texture.h in Headers */, -
trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp
r237697 r237835 216 216 CSSPropertyWebkitTextDecorationColor, 217 217 CSSPropertyWebkitTextDecorationSkip, 218 CSSProperty WebkitTextUnderlinePosition,218 CSSPropertyTextUnderlinePosition, 219 219 CSSPropertyTextIndent, 220 220 CSSPropertyTextRendering, … … 1803 1803 } 1804 1804 1805 static Ref<CSSValue> textUnderlineOffsetToCSSValue(const TextUnderlineOffset& textUnderlineOffset) 1806 { 1807 if (textUnderlineOffset.isAuto()) 1808 return CSSValuePool::singleton().createIdentifierValue(CSSValueAuto); 1809 ASSERT(textUnderlineOffset.isLength()); 1810 return CSSValuePool::singleton().createValue(textUnderlineOffset.lengthValue(), CSSPrimitiveValue::CSS_PX); 1811 } 1812 1813 static Ref<CSSValue> textDecorationThicknessToCSSValue(const TextDecorationThickness& textDecorationThickness) 1814 { 1815 if (textDecorationThickness.isAuto()) 1816 return CSSValuePool::singleton().createIdentifierValue(CSSValueAuto); 1817 if (textDecorationThickness.isFromFont()) 1818 return CSSValuePool::singleton().createIdentifierValue(CSSValueFromFont); 1819 ASSERT(textDecorationThickness.isLength()); 1820 return CSSValuePool::singleton().createValue(textDecorationThickness.lengthValue(), CSSPrimitiveValue::CSS_PX); 1821 } 1822 1805 1823 static Ref<CSSValue> renderEmphasisPositionFlagsToCSSValue(OptionSet<TextEmphasisPosition> textEmphasisPosition) 1806 1824 { … … 3332 3350 case CSSPropertyWebkitTextDecorationSkip: 3333 3351 return renderTextDecorationSkipFlagsToCSSValue(style.textDecorationSkip()); 3334 case CSSProperty WebkitTextUnderlinePosition:3352 case CSSPropertyTextUnderlinePosition: 3335 3353 return cssValuePool.createValue(style.textUnderlinePosition()); 3354 case CSSPropertyTextUnderlineOffset: 3355 return textUnderlineOffsetToCSSValue(style.textUnderlineOffset()); 3356 case CSSPropertyTextDecorationThickness: 3357 return textDecorationThicknessToCSSValue(style.textDecorationThickness()); 3336 3358 case CSSPropertyWebkitTextDecorationsInEffect: 3337 3359 return renderTextDecorationFlagsToCSSValue(style.textDecorationsInEffect()); -
trunk/Source/WebCore/css/CSSPrimitiveValueMappings.h
r236615 r237835 2637 2637 } 2638 2638 2639 template<> inline CSSPrimitiveValue::CSSPrimitiveValue( OptionSet<TextUnderlinePosition> e)2640 : CSSValue(PrimitiveClass) 2641 { 2642 m_primitiveUnitType = CSS_VALUE_ID; 2643 switch ( static_cast<TextUnderlinePosition>(e.toRaw())) {2639 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(TextUnderlinePosition position) 2640 : CSSValue(PrimitiveClass) 2641 { 2642 m_primitiveUnitType = CSS_VALUE_ID; 2643 switch (position) { 2644 2644 case TextUnderlinePosition::Auto: 2645 2645 m_value.valueID = CSSValueAuto; 2646 2646 break; 2647 case TextUnderlinePosition::Alphabetic:2648 m_value.valueID = CSSValueAlphabetic;2649 break;2650 2647 case TextUnderlinePosition::Under: 2651 2648 m_value.valueID = CSSValueUnder; 2652 2649 break; 2650 case TextUnderlinePosition::FromFont: 2651 m_value.valueID = CSSValueFromFont; 2652 break; 2653 2653 } 2654 2654 … … 2656 2656 } 2657 2657 2658 template<> inline CSSPrimitiveValue::operator OptionSet<TextUnderlinePosition>() const2658 template<> inline CSSPrimitiveValue::operator TextUnderlinePosition() const 2659 2659 { 2660 2660 ASSERT(isValueID()); … … 2663 2663 case CSSValueAuto: 2664 2664 return TextUnderlinePosition::Auto; 2665 case CSSValueAlphabetic:2666 return TextUnderlinePosition::Alphabetic;2667 2665 case CSSValueUnder: 2668 2666 return TextUnderlinePosition::Under; 2667 case CSSValueFromFont: 2668 return TextUnderlinePosition::FromFont; 2669 2669 default: 2670 2670 break; … … 2672 2672 2673 2673 // FIXME: Implement support for 'under left' and 'under right' values. 2674 2675 2674 ASSERT_NOT_REACHED(); 2676 2675 return TextUnderlinePosition::Auto; -
trunk/Source/WebCore/css/CSSProperties.json
r237266 r237835 5927 5927 } 5928 5928 }, 5929 "-webkit-text-underline-position": { 5930 "inherited": true, 5931 "codegen-properties": { 5932 "converter": "TextUnderlinePosition" 5933 }, 5929 "text-underline-position": { 5930 "codegen-properties": { 5931 "aliases": [ 5932 "-webkit-text-underline-position" 5933 ] 5934 }, 5935 "inherited": true, 5934 5936 "status": { 5935 5937 "status": "experimental" … … 5937 5939 "specification": { 5938 5940 "category": "css-text-decor", 5939 "url": "https://www.w3.org/TR/css-text-decor-3/#text-underline-position" 5941 "url": "https://www.w3.org/TR/css-text-decor-3/#text-underline-position-property" 5942 } 5943 }, 5944 "text-underline-offset": { 5945 "inherited": true, 5946 "codegen-properties": { 5947 "converter": "TextUnderlineOffset" 5948 }, 5949 "status": { 5950 "status": "experimental" 5951 }, 5952 "specification": { 5953 "category": "css-text-decor", 5954 "url": "https://www.w3.org/TR/css-text-decor-4/#underline-offset" 5955 } 5956 }, 5957 "text-decoration-thickness": { 5958 "inherited": true, 5959 "codegen-properties": { 5960 "converter": "TextDecorationThickness" 5961 }, 5962 "status": { 5963 "status": "experimental" 5964 }, 5965 "specification": { 5966 "category": "css-text-decor", 5967 "url": "https://www.w3.org/TR/css-text-decor-4/#text-decoration-thickness" 5940 5968 } 5941 5969 }, -
trunk/Source/WebCore/css/CSSValueKeywords.in
r237266 r237835 1404 1404 browser 1405 1405 #endif 1406 1407 // text-decoration-thickness, text-underline-offset 1408 from-font -
trunk/Source/WebCore/css/StyleBuilderConverter.h
r237557 r237835 88 88 static int convertMarqueeSpeed(StyleResolver&, const CSSValue&); 89 89 static Ref<QuotesData> convertQuotes(StyleResolver&, const CSSValue&); 90 static OptionSet<TextUnderlinePosition> convertTextUnderlinePosition(StyleResolver&, const CSSValue&); 90 static TextUnderlinePosition convertTextUnderlinePosition(StyleResolver&, const CSSValue&); 91 static TextUnderlineOffset convertTextUnderlineOffset(StyleResolver&, const CSSValue&); 92 static TextDecorationThickness convertTextDecorationThickness(StyleResolver&, const CSSValue&); 91 93 static RefPtr<StyleReflection> convertReflection(StyleResolver&, const CSSValue&); 92 94 static IntSize convertInitialLetter(StyleResolver&, const CSSValue&); … … 638 640 } 639 641 640 inline OptionSet<TextUnderlinePosition> StyleBuilderConverter::convertTextUnderlinePosition(StyleResolver&, const CSSValue& value) 641 { 642 // This is true if value is 'auto' or 'alphabetic'. 643 if (is<CSSPrimitiveValue>(value)) 644 return downcast<CSSPrimitiveValue>(value); 645 646 OptionSet<TextUnderlinePosition> combinedPosition; 647 for (auto& currentValue : downcast<CSSValueList>(value)) 648 combinedPosition.add(downcast<CSSPrimitiveValue>(currentValue.get())); 649 return combinedPosition; 642 inline TextUnderlinePosition StyleBuilderConverter::convertTextUnderlinePosition(StyleResolver&, const CSSValue& value) 643 { 644 ASSERT(is<CSSPrimitiveValue>(value)); 645 return downcast<CSSPrimitiveValue>(value); 646 } 647 648 inline TextUnderlineOffset StyleBuilderConverter::convertTextUnderlineOffset(StyleResolver& styleResolver, const CSSValue& value) 649 { 650 ASSERT(is<CSSPrimitiveValue>(value)); 651 auto& primitiveValue = downcast<CSSPrimitiveValue>(value); 652 switch (primitiveValue.valueID()) { 653 case CSSValueAuto: 654 return TextUnderlineOffset::createWithAuto(); 655 default: 656 ASSERT(primitiveValue.isLength()); 657 auto computedLength = convertComputedLength<float>(styleResolver, primitiveValue); 658 return TextUnderlineOffset::createWithLength(computedLength); 659 } 660 } 661 662 inline TextDecorationThickness StyleBuilderConverter::convertTextDecorationThickness(StyleResolver& styleResolver, const CSSValue& value) 663 { 664 ASSERT(is<CSSPrimitiveValue>(value)); 665 auto& primitiveValue = downcast<CSSPrimitiveValue>(value); 666 switch (primitiveValue.valueID()) { 667 case CSSValueAuto: 668 return TextDecorationThickness::createWithAuto(); 669 case CSSValueFromFont: 670 return TextDecorationThickness::createFromFont(); 671 default: 672 ASSERT(primitiveValue.isLength()); 673 auto computedLength = convertComputedLength<float>(styleResolver, primitiveValue); 674 return TextDecorationThickness::createWithLength(computedLength); 675 } 650 676 } 651 677 -
trunk/Source/WebCore/css/StyleResolver.cpp
r237697 r237835 1176 1176 case CSSPropertyWebkitTextDecorationColor: 1177 1177 case CSSPropertyWebkitTextDecorationSkip: 1178 case CSSPropertyWebkitTextUnderlinePosition: 1178 case CSSPropertyTextUnderlinePosition: 1179 case CSSPropertyTextUnderlineOffset: 1180 case CSSPropertyTextDecorationThickness: 1179 1181 case CSSPropertyTextDecoration: 1180 1182 return true; -
trunk/Source/WebCore/css/parser/CSSPropertyParser.cpp
r237697 r237835 2336 2336 parsedValue2 = parsedValue1; 2337 2337 return createPrimitiveValuePair(parsedValue1.releaseNonNull(), parsedValue2.releaseNonNull(), Pair::IdenticalValueEncoding::Coalesce); 2338 } 2339 2340 static RefPtr<CSSValue> consumeTextUnderlineOffset(CSSParserTokenRange& range, CSSParserMode cssParserMode) 2341 { 2342 if (auto value = consumeIdent<CSSValueAuto>(range)) 2343 return value; 2344 return consumeLength(range, cssParserMode, ValueRangeAll); 2345 } 2346 2347 static RefPtr<CSSValue> consumeTextDecorationThickness(CSSParserTokenRange& range, CSSParserMode cssParserMode) 2348 { 2349 if (auto value = consumeIdent<CSSValueAuto, CSSValueFromFont>(range)) 2350 return value; 2351 return consumeLength(range, cssParserMode, ValueRangeAll); 2338 2352 } 2339 2353 … … 4166 4180 case CSSPropertyOrder: 4167 4181 return consumeInteger(m_range); 4168 case CSSPropertyWebkitTextUnderlinePosition: 4169 // auto | alphabetic | [ under || [ left | right ] ], but we only support auto | alphabetic | under for now 4170 return consumeIdent<CSSValueAuto, CSSValueUnder, CSSValueAlphabetic>(m_range); 4182 case CSSPropertyTextUnderlinePosition: 4183 // auto | [ [ under | from-font ] || [ left | right ] ], but we only support auto | under | from-font for now 4184 return consumeIdent<CSSValueAuto, CSSValueUnder, CSSValueFromFont>(m_range); 4185 case CSSPropertyTextUnderlineOffset: 4186 return consumeTextUnderlineOffset(m_range, m_context.mode); 4187 case CSSPropertyTextDecorationThickness: 4188 return consumeTextDecorationThickness(m_range, m_context.mode); 4171 4189 case CSSPropertyVerticalAlign: 4172 4190 return consumeVerticalAlign(m_range, m_context.mode); -
trunk/Source/WebCore/rendering/style/RenderStyle.h
r237697 r237835 375 375 TextDecorationStyle textDecorationStyle() const { return static_cast<TextDecorationStyle>(m_rareNonInheritedData->textDecorationStyle); } 376 376 OptionSet<TextDecorationSkip> textDecorationSkip() const { return OptionSet<TextDecorationSkip>::fromRaw(m_rareInheritedData->textDecorationSkip); } 377 OptionSet<TextUnderlinePosition> textUnderlinePosition() const { return OptionSet<TextUnderlinePosition>::fromRaw(m_rareInheritedData->textUnderlinePosition); } 377 TextUnderlinePosition textUnderlinePosition() const { return static_cast<TextUnderlinePosition>(m_rareInheritedData->textUnderlinePosition); } 378 TextUnderlineOffset textUnderlineOffset() const { return m_rareInheritedData->textUnderlineOffset; } 379 TextDecorationThickness textDecorationThickness() const { return m_rareInheritedData->textDecorationThickness; } 378 380 379 381 #if ENABLE(CSS3_TEXT) … … 922 924 void setTextDecorationStyle(TextDecorationStyle v) { SET_VAR(m_rareNonInheritedData, textDecorationStyle, static_cast<unsigned>(v)); } 923 925 void setTextDecorationSkip(OptionSet<TextDecorationSkip> skip) { SET_VAR(m_rareInheritedData, textDecorationSkip, skip.toRaw()); } 924 void setTextUnderlinePosition(OptionSet<TextUnderlinePosition> v) { SET_VAR(m_rareInheritedData, textUnderlinePosition, v.toRaw()); } 926 void setTextUnderlinePosition(TextUnderlinePosition position) { SET_VAR(m_rareInheritedData, textUnderlinePosition, static_cast<unsigned>(position)); } 927 void setTextUnderlineOffset(TextUnderlineOffset textUnderlineOffset) { SET_VAR(m_rareInheritedData, textUnderlineOffset, textUnderlineOffset); } 928 void setTextDecorationThickness(TextDecorationThickness textDecorationThickness) { SET_VAR(m_rareInheritedData, textDecorationThickness, textDecorationThickness); } 925 929 void setDirection(TextDirection v) { m_inheritedFlags.direction = static_cast<unsigned>(v); } 926 930 void setHasExplicitlySetDirection(bool v) { m_nonInheritedFlags.hasExplicitlySetDirection = v; } … … 1483 1487 static TextDecorationStyle initialTextDecorationStyle() { return TextDecorationStyle::Solid; } 1484 1488 static OptionSet<TextDecorationSkip> initialTextDecorationSkip() { return TextDecorationSkip::Auto; } 1485 static OptionSet<TextUnderlinePosition> initialTextUnderlinePosition() { return TextUnderlinePosition::Auto; } 1489 static TextUnderlinePosition initialTextUnderlinePosition() { return TextUnderlinePosition::Auto; } 1490 static TextUnderlineOffset initialTextUnderlineOffset() { return TextUnderlineOffset::createWithAuto(); } 1491 static TextDecorationThickness initialTextDecorationThickness() { return TextDecorationThickness::createWithAuto(); } 1486 1492 static float initialZoom() { return 1.0f; } 1487 1493 static TextZoom initialTextZoom() { return TextZoom::Normal; } -
trunk/Source/WebCore/rendering/style/RenderStyleConstants.h
r236615 r237835 732 732 }; 733 733 734 // FIXME: There is no reason for the values in the enum to be powers of two.735 734 enum class TextUnderlinePosition : uint8_t { 736 735 // FIXME: Implement support for 'under left' and 'under right' values. 737 Auto = 1 << 0,738 Alphabetic = 1 << 1,739 Under = 1 << 2736 Auto, 737 Under, 738 FromFont 740 739 }; 741 740 -
trunk/Source/WebCore/rendering/style/StyleRareInheritedData.cpp
r237266 r237835 46 46 Length lengths[2]; 47 47 float secondFloat; 48 TextUnderlineOffset offset; 49 TextDecorationThickness thickness; 48 50 unsigned bitfields[4]; 49 51 short pagedMediaShorts[2]; … … 76 78 , indent(RenderStyle::initialTextIndent()) 77 79 , effectiveZoom(RenderStyle::initialZoom()) 80 , textUnderlineOffset(RenderStyle::initialTextUnderlineOffset()) 81 , textDecorationThickness(RenderStyle::initialTextDecorationThickness()) 78 82 , customProperties(StyleCustomPropertyData::create()) 79 83 , widows(RenderStyle::initialWidows()) … … 117 121 #endif 118 122 , textDecorationSkip(RenderStyle::initialTextDecorationSkip().toRaw()) 119 , textUnderlinePosition( RenderStyle::initialTextUnderlinePosition().toRaw())123 , textUnderlinePosition(static_cast<unsigned>(RenderStyle::initialTextUnderlinePosition())) 120 124 , rubyPosition(static_cast<unsigned>(RenderStyle::initialRubyPosition())) 121 125 , textZoom(static_cast<unsigned>(RenderStyle::initialTextZoom())) … … 169 173 , indent(o.indent) 170 174 , effectiveZoom(o.effectiveZoom) 175 , textUnderlineOffset(o.textUnderlineOffset) 176 , textDecorationThickness(o.textDecorationThickness) 171 177 , customProperties(o.customProperties) 172 178 , widows(o.widows) … … 274 280 && indent == o.indent 275 281 && effectiveZoom == o.effectiveZoom 282 && textUnderlineOffset == o.textUnderlineOffset 283 && textDecorationThickness == o.textDecorationThickness 276 284 && widows == o.widows 277 285 && orphans == o.orphans -
trunk/Source/WebCore/rendering/style/StyleRareInheritedData.h
r237266 r237835 29 29 #include "Length.h" 30 30 #include "StyleCustomPropertyData.h" 31 #include "TextDecorationThickness.h" 32 #include "TextUnderlineOffset.h" 31 33 #include <wtf/RefCounted.h> 32 34 #include <wtf/text/AtomicString.h> … … 80 82 Length indent; 81 83 float effectiveZoom; 84 85 TextUnderlineOffset textUnderlineOffset; 86 TextDecorationThickness textDecorationThickness; 82 87 83 88 Length wordSpacing; … … 129 134 #endif 130 135 unsigned textDecorationSkip : 5; // TextDecorationSkip 131 unsigned textUnderlinePosition : 3; // TextUnderlinePosition136 unsigned textUnderlinePosition : 2; // TextUnderlinePosition 132 137 unsigned rubyPosition : 2; // RubyPosition 133 138 unsigned textZoom: 1; // TextZoom -
trunk/Source/WebCore/style/InlineTextBoxStyle.cpp
r232229 r237835 33 33 namespace WebCore { 34 34 35 int computeUnderlineOffset( OptionSet<TextUnderlinePosition>underlinePosition, const FontMetrics& fontMetrics, const InlineTextBox* inlineTextBox, int textDecorationThickness)35 int computeUnderlineOffset(TextUnderlinePosition underlinePosition, const FontMetrics& fontMetrics, const InlineTextBox* inlineTextBox, int textDecorationThickness) 36 36 { 37 37 // This represents the gap between the baseline and the closest edge of the underline. … … 51 51 if (resolvedUnderlinePosition == TextUnderlinePosition::Auto) { 52 52 if (inlineTextBox) 53 resolvedUnderlinePosition = inlineTextBox->root().baselineType() == IdeographicBaseline ? TextUnderlinePosition::Under : TextUnderlinePosition::A lphabetic;53 resolvedUnderlinePosition = inlineTextBox->root().baselineType() == IdeographicBaseline ? TextUnderlinePosition::Under : TextUnderlinePosition::Auto; 54 54 else 55 resolvedUnderlinePosition = TextUnderlinePosition::A lphabetic;55 resolvedUnderlinePosition = TextUnderlinePosition::Auto; 56 56 } 57 57 58 switch (static_cast<TextUnderlinePosition>(resolvedUnderlinePosition.toRaw())) { 59 case TextUnderlinePosition::Alphabetic: 58 switch (resolvedUnderlinePosition) { 59 case TextUnderlinePosition::Auto: 60 case TextUnderlinePosition::FromFont: 60 61 return fontMetrics.ascent() + gap; 61 62 case TextUnderlinePosition::Under: { … … 77 78 return inlineTextBox->logicalHeight() + gap + std::max<float>(offset, 0); 78 79 } 79 case TextUnderlinePosition::Auto:80 ASSERT_NOT_REACHED();81 80 } 82 81 -
trunk/Source/WebCore/style/InlineTextBoxStyle.h
r232229 r237835 47 47 GlyphOverflow visualOverflowForDecorations(const RenderStyle& lineStyle, const InlineTextBox*); 48 48 void getWavyStrokeParameters(float fontSize, float& controlPointDistance, float& step); 49 int computeUnderlineOffset( OptionSet<TextUnderlinePosition>, const FontMetrics&, const InlineTextBox*, int textDecorationThickness);49 int computeUnderlineOffset(TextUnderlinePosition, const FontMetrics&, const InlineTextBox*, int textDecorationThickness); 50 50 51 51 } // namespace WebCore
Note: See TracChangeset
for help on using the changeset viewer.