Changeset 246481 in webkit
- Timestamp:
- Jun 16, 2019, 1:04:31 PM (7 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 2 edited
-
ChangeLog (modified) (1 diff)
-
layout/inlineformatting/InlineLine.cpp (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r246480 r246481 1 2019-06-16 Zalan Bujtas <zalan@apple.com> 2 3 [LFC][IFC] Ignore descent when in limited/full quirks mode 4 https://bugs.webkit.org/show_bug.cgi?id=198893 5 <rdar://problem/51780634> 6 7 Reviewed by Antti Koivisto. 8 9 In limited/full quirks mode, line's descent should be ignored when computing the final line height when 10 1. the line has baseline aligned content only and 11 2. these baseline aligned boxes don't have descent. 12 13 * layout/inlineformatting/InlineLine.cpp: 14 (WebCore::Layout::Line::isVisuallyEmpty const): 15 (WebCore::Layout::Line::close): 16 1 17 2019-06-16 Zalan Bujtas <zalan@apple.com> 2 18 -
trunk/Source/WebCore/layout/inlineformatting/InlineLine.cpp
r246480 r246481 101 101 } 102 102 103 auto hasDescent = false; 104 auto hasNonBaselineAlignedContent = false; 103 105 for (auto& run : m_content->runs()) { 104 106 LayoutUnit logicalTop; 105 107 auto& inlineItem = run->inlineItem; 106 108 auto& layoutBox = inlineItem.layoutBox(); 109 auto verticalAlign = inlineItem.style().verticalAlign(); 107 110 auto ascent = inlineItem.style().fontMetrics().ascent(); 108 111 109 switch ( inlineItem.style().verticalAlign()) {112 switch (verticalAlign) { 110 113 case VerticalAlign::Baseline: 111 if (inlineItem.isLineBreak() || inlineItem.isText()) 114 if (inlineItem.isLineBreak() || inlineItem.isText()) { 112 115 logicalTop = baselineOffset() - ascent; 113 else if (inlineItem.isContainerStart()) { 116 hasDescent = hasDescent || !run->isCollapsed; 117 } else if (inlineItem.isContainerStart()) { 114 118 auto& displayBox = m_layoutState.displayBoxForLayoutBox(layoutBox); 115 119 logicalTop = baselineOffset() - ascent - displayBox.borderTop() - displayBox.paddingTop().valueOr(0); 120 hasDescent = hasDescent || (displayBox.horizontalBorder() || (displayBox.horizontalPadding() && displayBox.horizontalPadding().value())); 116 121 } else if (layoutBox.isInlineBlockBox() && layoutBox.establishesInlineFormattingContext()) { 117 122 auto& formattingState = downcast<InlineFormattingState>(m_layoutState.establishedFormattingState(layoutBox)); … … 120 125 auto inlineBlockBaseline = formattingState.lineBoxes().last().baseline(); 121 126 logicalTop = baselineOffset() - inlineBlockBaseline.ascent; 127 hasDescent = hasDescent || inlineBlockBaseline.descent; 122 128 } else 123 129 logicalTop = baselineOffset() - run->logicalRect.height(); … … 133 139 break; 134 140 } 141 hasNonBaselineAlignedContent = hasNonBaselineAlignedContent || verticalAlign != VerticalAlign::Baseline; 135 142 run->logicalRect.setTop(logicalTop); 143 } 144 // Remove descent when all content is baseline aligned but none of them have descent. 145 if (!m_layoutState.inNoQuirksMode() && !hasNonBaselineAlignedContent && !hasDescent) { 146 m_contentLogicalHeight -= m_baseline.descent; 147 m_baseline.descent = { }; 136 148 } 137 149 }
Note:
See TracChangeset
for help on using the changeset viewer.