Changeset 275502 in webkit
- Timestamp:
- Apr 6, 2021 3:49:33 AM (3 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r275500 r275502 1 2021-04-06 Rob Buis <rbuis@igalia.com> 2 3 Migrate layout ascents and descents to LayoutUnits instead of ints 4 https://bugs.webkit.org/show_bug.cgi?id=133040 5 6 Reviewed by Zalan Bujtas. 7 8 Migrate layout ascents and descents to LayoutUnits instead of ints. 9 The actual ascent/descent values are still integral. 10 11 * rendering/InlineFlowBox.cpp: 12 (WebCore::InlineFlowBox::adjustMaxAscentAndDescent): 13 (WebCore::InlineFlowBox::computeLogicalBoxHeights): 14 * rendering/InlineFlowBox.h: 15 * rendering/RootInlineBox.cpp: 16 (WebCore::RootInlineBox::alignBoxesInBlockDirection): 17 (WebCore::setAscentAndDescent): 18 (WebCore::RootInlineBox::ascentAndDescentForBox const): 19 * rendering/RootInlineBox.h: 20 1 21 2021-04-06 Chris Lord <clord@igalia.com> 2 22 -
trunk/Source/WebCore/rendering/InlineFlowBox.cpp
r273386 r275502 500 500 } 501 501 502 void InlineFlowBox::adjustMaxAscentAndDescent( int& maxAscent, int& maxDescent, int maxPositionTop, int maxPositionBottom)502 void InlineFlowBox::adjustMaxAscentAndDescent(LayoutUnit& maxAscent, LayoutUnit& maxDescent, LayoutUnit maxPositionTop, LayoutUnit maxPositionBottom) 503 503 { 504 504 for (InlineBox* child = firstChild(); child; child = child->nextOnLine()) { … … 529 529 530 530 void InlineFlowBox::computeLogicalBoxHeights(RootInlineBox& rootBox, LayoutUnit& maxPositionTop, LayoutUnit& maxPositionBottom, 531 int& maxAscent, int& maxDescent, bool& setMaxAscent, bool& setMaxDescent,531 LayoutUnit& maxAscent, LayoutUnit& maxDescent, bool& setMaxAscent, bool& setMaxDescent, 532 532 bool strictMode, GlyphOverflowAndFallbackFontsMap& textBoxDataMap, 533 533 FontBaseline baselineType, VerticalPositionCache& verticalPositionCache) … … 554 554 if (isRootInlineBox()) { 555 555 // Examine our root box. 556 int ascent = 0;557 int descent = 0;556 LayoutUnit ascent; 557 LayoutUnit descent; 558 558 rootBox.ascentAndDescentForBox(rootBox, textBoxDataMap, ascent, descent, affectsAscent, affectsDescent); 559 559 if (strictMode || hasTextChildren() || (!checkChildren && hasTextDescendants())) { … … 587 587 child->setLogicalTop(rootBox.verticalPositionForBox(child, verticalPositionCache)); 588 588 589 int ascent = 0;590 int descent = 0;589 LayoutUnit ascent; 590 LayoutUnit descent; 591 591 rootBox.ascentAndDescentForBox(*child, textBoxDataMap, ascent, descent, affectsAscent, affectsDescent); 592 592 -
trunk/Source/WebCore/rendering/InlineFlowBox.h
r271481 r275502 187 187 188 188 void computeLogicalBoxHeights(RootInlineBox&, LayoutUnit& maxPositionTop, LayoutUnit& maxPositionBottom, 189 int& maxAscent, int& maxDescent, bool& setMaxAscent, bool& setMaxDescent,189 LayoutUnit& maxAscent, LayoutUnit& maxDescent, bool& setMaxAscent, bool& setMaxDescent, 190 190 bool strictMode, GlyphOverflowAndFallbackFontsMap&, FontBaseline, VerticalPositionCache&); 191 void adjustMaxAscentAndDescent( int& maxAscent, int& maxDescent,192 int maxPositionTop, int maxPositionBottom);191 void adjustMaxAscentAndDescent(LayoutUnit& maxAscent, LayoutUnit& maxDescent, 192 LayoutUnit maxPositionTop, LayoutUnit maxPositionBottom); 193 193 void placeBoxesInBlockDirection(LayoutUnit logicalTop, LayoutUnit maxHeight, int maxAscent, bool strictMode, LayoutUnit& lineTop, LayoutUnit& lineBottom, bool& setLineTop, 194 194 LayoutUnit& lineTopIncludingMargins, LayoutUnit& lineBottomIncludingMargins, bool& hasAnnotationsBefore, bool& hasAnnotationsAfter, FontBaseline); -
trunk/Source/WebCore/rendering/RootInlineBox.cpp
r275413 r275502 246 246 LayoutUnit maxPositionTop; 247 247 LayoutUnit maxPositionBottom; 248 int maxAscent = 0;249 int maxDescent = 0;248 LayoutUnit maxAscent; 249 LayoutUnit maxDescent; 250 250 bool setMaxAscent = false; 251 251 bool setMaxDescent = false; … … 767 767 } 768 768 769 static void setAscentAndDescent( int& ascent, int& descent, int newAscent, int newDescent, bool& ascentDescentSet)769 static void setAscentAndDescent(LayoutUnit& ascent, LayoutUnit& descent, LayoutUnit newAscent, LayoutUnit newDescent, bool& ascentDescentSet) 770 770 { 771 771 if (!ascentDescentSet) { … … 779 779 } 780 780 781 void RootInlineBox::ascentAndDescentForBox(InlineBox& box, GlyphOverflowAndFallbackFontsMap& textBoxDataMap, int& ascent, int& descent,781 void RootInlineBox::ascentAndDescentForBox(InlineBox& box, GlyphOverflowAndFallbackFontsMap& textBoxDataMap, LayoutUnit& ascent, LayoutUnit& descent, 782 782 bool& affectsAscent, bool& affectsDescent) const 783 783 { … … 817 817 for (auto& font : *usedFonts) { 818 818 auto& fontMetrics = font->fontMetrics(); 819 int usedFontAscent = fontMetrics.ascent(baselineType());820 int usedFontDescent = fontMetrics.descent(baselineType());821 int halfLeading = (fontMetrics.lineSpacing() - fontMetrics.height()) / 2;822 int usedFontAscentAndLeading = usedFontAscent + halfLeading;823 int usedFontDescentAndLeading = fontMetrics.lineSpacing() - usedFontAscentAndLeading;819 LayoutUnit usedFontAscent { fontMetrics.ascent(baselineType()) }; 820 LayoutUnit usedFontDescent { fontMetrics.descent(baselineType()) }; 821 LayoutUnit halfLeading { (fontMetrics.lineSpacing() - fontMetrics.height()) / 2 }; 822 LayoutUnit usedFontAscentAndLeading { usedFontAscent + halfLeading }; 823 LayoutUnit usedFontDescentAndLeading { fontMetrics.lineSpacing() - usedFontAscentAndLeading }; 824 824 if (includeFont) { 825 825 setAscentAndDescent(ascent, descent, usedFontAscent, usedFontDescent, ascentDescentSet); … … 839 839 // If leading is included for the box, then we compute that box. 840 840 if (includeLeading && !setUsedFontWithLeading) { 841 int ascentWithLeading = box.baselinePosition(baselineType());842 int descentWithLeading = box.lineHeight() - ascentWithLeading;841 LayoutUnit ascentWithLeading { box.baselinePosition(baselineType()) }; 842 LayoutUnit descentWithLeading { box.lineHeight() - ascentWithLeading }; 843 843 setAscentAndDescent(ascent, descent, ascentWithLeading, descentWithLeading, ascentDescentSet); 844 844 … … 852 852 853 853 if (includeFontForBox(box) && !setUsedFont) { 854 int fontAscent = boxLineStyle.fontMetrics().ascent(baselineType());855 int fontDescent = boxLineStyle.fontMetrics().descent(baselineType());854 LayoutUnit fontAscent { boxLineStyle.fontMetrics().ascent(baselineType()) }; 855 LayoutUnit fontDescent { boxLineStyle.fontMetrics().descent(baselineType()) }; 856 856 setAscentAndDescent(ascent, descent, fontAscent, fontDescent, ascentDescentSet); 857 857 affectsAscent = fontAscent - box.logicalTop() > 0; … … 869 869 if (includeInitialLetterForBox(box)) { 870 870 bool canUseGlyphs = glyphOverflow && glyphOverflow->computeBounds; 871 int letterAscent = baselineType() == AlphabeticBaseline ? boxLineStyle.fontMetrics().capHeight() : (canUseGlyphs ? glyphOverflow->top : boxLineStyle.fontMetrics().ascent(baselineType()));872 int letterDescent = canUseGlyphs ? glyphOverflow->bottom : (box.isRootInlineBox() ? 0 : boxLineStyle.fontMetrics().descent(baselineType()));871 LayoutUnit letterAscent { baselineType() == AlphabeticBaseline ? boxLineStyle.fontMetrics().capHeight() : (canUseGlyphs ? glyphOverflow->top : boxLineStyle.fontMetrics().ascent(baselineType())) }; 872 LayoutUnit letterDescent { canUseGlyphs ? glyphOverflow->bottom : (box.isRootInlineBox() ? 0 : boxLineStyle.fontMetrics().descent(baselineType())) }; 873 873 setAscentAndDescent(ascent, descent, letterAscent, letterDescent, ascentDescentSet); 874 874 affectsAscent = letterAscent - box.logicalTop() > 0; -
trunk/Source/WebCore/rendering/RootInlineBox.h
r275413 r275502 161 161 LayoutRect paddedLayoutOverflowRect(LayoutUnit endPadding) const; 162 162 163 void ascentAndDescentForBox(InlineBox&, GlyphOverflowAndFallbackFontsMap&, int& ascent, int& descent, bool& affectsAscent, bool& affectsDescent) const;163 void ascentAndDescentForBox(InlineBox&, GlyphOverflowAndFallbackFontsMap&, LayoutUnit& ascent, LayoutUnit& descent, bool& affectsAscent, bool& affectsDescent) const; 164 164 LayoutUnit verticalPositionForBox(InlineBox*, VerticalPositionCache&); 165 165 bool fitsToGlyphs() const;
Note: See TracChangeset
for help on using the changeset viewer.