Changeset 293497 in webkit
- Timestamp:
- Apr 26, 2022 10:30:42 PM (3 months ago)
- Location:
- trunk
- Files:
-
- 2 added
- 8 edited
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/fast/shadow-dom/shadow-first-line-and-letter-expected.html (added)
-
LayoutTests/fast/shadow-dom/shadow-first-line-and-letter.html (added)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/rendering/LegacyRootInlineBox.cpp (modified) (1 diff)
-
Source/WebCore/rendering/RenderBlock.cpp (modified) (2 diffs)
-
Source/WebCore/rendering/RenderInline.cpp (modified) (2 diffs)
-
Source/WebCore/rendering/RenderLineBreak.cpp (modified) (1 diff)
-
Source/WebCore/rendering/RenderView.h (modified) (2 diffs)
-
Source/WebCore/style/StyleTreeResolver.cpp (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r293490 r293497 1 2022-04-26 Antti Koivisto <antti@apple.com> 2 3 ::first-letter does not work if used only in shadow content 4 https://bugs.webkit.org/show_bug.cgi?id=220650 5 <rdar://problem/73477161> 6 7 Reviewed by Alan Bujtas. 8 9 Test case by vb@bigdot.de. 10 11 * fast/shadow-dom/shadow-first-line-and-letter-expected.html: Added. 12 * fast/shadow-dom/shadow-first-line-and-letter.html: Added. 13 1 14 2022-04-26 Truitt Savell <tsavell@apple.com> 2 15 -
trunk/Source/WebCore/ChangeLog
r293493 r293497 1 2022-04-26 Antti Koivisto <antti@apple.com> 2 3 ::first-letter does not work if used only in shadow content 4 https://bugs.webkit.org/show_bug.cgi?id=220650 5 <rdar://problem/73477161> 6 7 Reviewed by Alan Bujtas. 8 9 Test: fast/shadow-dom/shadow-first-line-and-letter.html 10 11 We were not setting usesFirstLetter/LinesRules bits if those pseudo-elements were used 12 only in shadow trees. 13 14 Fix by removing the bits. They don't seem to allow any valuable optimizations. 15 16 * rendering/LegacyRootInlineBox.cpp: 17 (WebCore::LegacyRootInlineBox::verticalPositionForBox): 18 * rendering/RenderBlock.cpp: 19 (WebCore::RenderBlock::lineHeight const): 20 (WebCore::RenderBlock::getFirstLetter): 21 * rendering/RenderInline.cpp: 22 (WebCore::RenderInline::mayAffectLayout const): 23 (WebCore::RenderInline::lineHeight const): 24 * rendering/RenderLineBreak.cpp: 25 (WebCore::RenderLineBreak::lineHeight const): 26 * rendering/RenderView.h: 27 * style/StyleTreeResolver.cpp: 28 (WebCore::Style::TreeResolver::createAnimatedElementUpdate): 29 (WebCore::Style::TreeResolver::resolve): 30 1 31 2022-04-26 Oriol Brufau <obrufau@igalia.com> 2 32 -
trunk/Source/WebCore/rendering/LegacyRootInlineBox.cpp
r292054 r293497 799 799 // This method determines the vertical position for inline elements. 800 800 bool firstLine = isFirstLine(); 801 if (firstLine && !blockFlow().view().usesFirstLineRules())802 firstLine = false;803 801 804 802 // Check the cache. -
trunk/Source/WebCore/rendering/RenderBlock.cpp
r293326 r293497 2459 2459 return RenderBox::lineHeight(firstLine, direction, linePositionMode); 2460 2460 2461 if (firstLine && view().usesFirstLineRules()) { 2462 auto& s = firstLineStyle(); 2463 if (&s != &style()) 2464 return s.computedLineHeight(); 2465 } 2466 2467 return style().computedLineHeight(); 2461 auto& lineStyle = firstLine ? firstLineStyle() : style(); 2462 return lineStyle.computedLineHeight(); 2468 2463 } 2469 2464 … … 2618 2613 firstLetter = nullptr; 2619 2614 firstLetterContainer = nullptr; 2620 2621 if (!view().usesFirstLetterRules())2622 return;2623 2615 2624 2616 // Don't recur -
trunk/Source/WebCore/rendering/RenderInline.cpp
r291992 r293497 216 216 || hasHardLineBreakChildOnly; 217 217 218 if (!mayAffectLayout && checkFonts && view().usesFirstLineRules()) {218 if (!mayAffectLayout && checkFonts) { 219 219 // Have to check the first line style as well. 220 220 parentStyle = &parent()->firstLineStyle(); … … 857 857 LayoutUnit RenderInline::lineHeight(bool firstLine, LineDirectionMode /*direction*/, LinePositionMode /*linePositionMode*/) const 858 858 { 859 if (firstLine && view().usesFirstLineRules()) { 860 const RenderStyle& firstLineStyle = this->firstLineStyle(); 861 if (&firstLineStyle != &style()) 862 return firstLineStyle.computedLineHeight(); 863 } 864 865 return style().computedLineHeight(); 859 auto& lineStyle = firstLine ? firstLineStyle() : style(); 860 return lineStyle.computedLineHeight(); 866 861 } 867 862 -
trunk/Source/WebCore/rendering/RenderLineBreak.cpp
r291548 r293497 67 67 LayoutUnit RenderLineBreak::lineHeight(bool firstLine, LineDirectionMode /*direction*/, LinePositionMode /*linePositionMode*/) const 68 68 { 69 if (firstLine && view().usesFirstLineRules()) {69 if (firstLine) { 70 70 const RenderStyle& firstLineStyle = this->firstLineStyle(); 71 71 if (&firstLineStyle != &style()) -
trunk/Source/WebCore/rendering/RenderView.h
r291992 r293497 129 129 WEBCORE_EXPORT bool usesCompositing() const; 130 130 131 bool usesFirstLineRules() const { return m_usesFirstLineRules; }132 bool usesFirstLetterRules() const { return m_usesFirstLetterRules; }133 void setUsesFirstLineRules(bool value) { m_usesFirstLineRules = value; }134 void setUsesFirstLetterRules(bool value) { m_usesFirstLetterRules = value; }135 136 131 WEBCORE_EXPORT IntRect unscaledDocumentRect() const; 137 132 LayoutRect unextendedBackgroundRect() const; … … 266 261 267 262 bool m_hasSoftwareFilters { false }; 268 bool m_usesFirstLineRules { false };269 bool m_usesFirstLetterRules { false };270 263 bool m_needsRepaintHackAfterCompositingLayerUpdateForDebugOverlaysOnly { false }; 271 264 bool m_needsEventRegionUpdateForNonCompositedFrame { false }; -
trunk/Source/WebCore/style/StyleTreeResolver.cpp
r292592 r293497 46 46 #include "RenderElement.h" 47 47 #include "RenderStyle.h" 48 #include "RenderView.h"49 48 #include "RuntimeEnabledFeatures.h" 50 49 #include "Settings.h" … … 491 490 // First, we need to make sure that any new CSS animation occuring on this element has a matching WebAnimation 492 491 // on the document timeline. 493 if (document.backForwardCacheState() == Document::NotInBackForwardCache && !document. renderView()->printing()) {492 if (document.backForwardCacheState() == Document::NotInBackForwardCache && !document.printing()) { 494 493 if (oldStyle && (oldStyle->hasTransitions() || newStyle->hasTransitions())) 495 494 styleable.updateCSSTransitions(*oldStyle, *newStyle); … … 788 787 std::unique_ptr<Update> TreeResolver::resolve() 789 788 { 790 auto& renderView = *m_document.renderView();791 792 789 Element* documentElement = m_document.documentElement(); 793 790 if (!documentElement) { … … 810 807 m_parentStack.append(Parent(m_document)); 811 808 812 auto rootResolver = scope().resolver;813 814 // Pseudo element removal and similar may only work with these flags still set. Reset them after the style recalc.815 renderView.setUsesFirstLineRules(renderView.usesFirstLineRules() || rootResolver->usesFirstLineRules());816 renderView.setUsesFirstLetterRules(renderView.usesFirstLetterRules() || rootResolver->usesFirstLetterRules());817 818 809 resolveComposedTree(); 819 820 renderView.setUsesFirstLineRules(rootResolver->usesFirstLineRules());821 renderView.setUsesFirstLetterRules(rootResolver->usesFirstLetterRules());822 810 823 811 ASSERT(m_scopeStack.size() == 1);
Note: See TracChangeset
for help on using the changeset viewer.