Changeset 275502 in webkit


Ignore:
Timestamp:
Apr 6, 2021 3:49:33 AM (3 years ago)
Author:
commit-queue@webkit.org
Message:

Migrate layout ascents and descents to LayoutUnits instead of ints
https://bugs.webkit.org/show_bug.cgi?id=133040

Patch by Rob Buis <rbuis@igalia.com> on 2021-04-06
Reviewed by Zalan Bujtas.

Migrate layout ascents and descents to LayoutUnits instead of ints.
The actual ascent/descent values are still integral.

  • rendering/InlineFlowBox.cpp:

(WebCore::InlineFlowBox::adjustMaxAscentAndDescent):
(WebCore::InlineFlowBox::computeLogicalBoxHeights):

  • rendering/InlineFlowBox.h:
  • rendering/RootInlineBox.cpp:

(WebCore::RootInlineBox::alignBoxesInBlockDirection):
(WebCore::setAscentAndDescent):
(WebCore::RootInlineBox::ascentAndDescentForBox const):

  • rendering/RootInlineBox.h:
Location:
trunk/Source/WebCore
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r275500 r275502  
     12021-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
    1212021-04-06  Chris Lord  <clord@igalia.com>
    222
  • trunk/Source/WebCore/rendering/InlineFlowBox.cpp

    r273386 r275502  
    500500}
    501501
    502 void InlineFlowBox::adjustMaxAscentAndDescent(int& maxAscent, int& maxDescent, int maxPositionTop, int maxPositionBottom)
     502void InlineFlowBox::adjustMaxAscentAndDescent(LayoutUnit& maxAscent, LayoutUnit& maxDescent, LayoutUnit maxPositionTop, LayoutUnit maxPositionBottom)
    503503{
    504504    for (InlineBox* child = firstChild(); child; child = child->nextOnLine()) {
     
    529529
    530530void 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,
    532532    bool strictMode, GlyphOverflowAndFallbackFontsMap& textBoxDataMap,
    533533    FontBaseline baselineType, VerticalPositionCache& verticalPositionCache)
     
    554554    if (isRootInlineBox()) {
    555555        // Examine our root box.
    556         int ascent = 0;
    557         int descent = 0;
     556        LayoutUnit ascent;
     557        LayoutUnit descent;
    558558        rootBox.ascentAndDescentForBox(rootBox, textBoxDataMap, ascent, descent, affectsAscent, affectsDescent);
    559559        if (strictMode || hasTextChildren() || (!checkChildren && hasTextDescendants())) {
     
    587587        child->setLogicalTop(rootBox.verticalPositionForBox(child, verticalPositionCache));
    588588       
    589         int ascent = 0;
    590         int descent = 0;
     589        LayoutUnit ascent;
     590        LayoutUnit descent;
    591591        rootBox.ascentAndDescentForBox(*child, textBoxDataMap, ascent, descent, affectsAscent, affectsDescent);
    592592
  • trunk/Source/WebCore/rendering/InlineFlowBox.h

    r271481 r275502  
    187187
    188188    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,
    190190        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);
    193193    void placeBoxesInBlockDirection(LayoutUnit logicalTop, LayoutUnit maxHeight, int maxAscent, bool strictMode, LayoutUnit& lineTop, LayoutUnit& lineBottom, bool& setLineTop,
    194194        LayoutUnit& lineTopIncludingMargins, LayoutUnit& lineBottomIncludingMargins, bool& hasAnnotationsBefore, bool& hasAnnotationsAfter, FontBaseline);
  • trunk/Source/WebCore/rendering/RootInlineBox.cpp

    r275413 r275502  
    246246    LayoutUnit maxPositionTop;
    247247    LayoutUnit maxPositionBottom;
    248     int maxAscent = 0;
    249     int maxDescent = 0;
     248    LayoutUnit maxAscent;
     249    LayoutUnit maxDescent;
    250250    bool setMaxAscent = false;
    251251    bool setMaxDescent = false;
     
    767767}
    768768
    769 static void setAscentAndDescent(int& ascent, int& descent, int newAscent, int newDescent, bool& ascentDescentSet)
     769static void setAscentAndDescent(LayoutUnit& ascent, LayoutUnit& descent, LayoutUnit newAscent, LayoutUnit newDescent, bool& ascentDescentSet)
    770770{
    771771    if (!ascentDescentSet) {
     
    779779}
    780780
    781 void RootInlineBox::ascentAndDescentForBox(InlineBox& box, GlyphOverflowAndFallbackFontsMap& textBoxDataMap, int& ascent, int& descent,
     781void RootInlineBox::ascentAndDescentForBox(InlineBox& box, GlyphOverflowAndFallbackFontsMap& textBoxDataMap, LayoutUnit& ascent, LayoutUnit& descent,
    782782                                           bool& affectsAscent, bool& affectsDescent) const
    783783{
     
    817817        for (auto& font : *usedFonts) {
    818818            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 };
    824824            if (includeFont) {
    825825                setAscentAndDescent(ascent, descent, usedFontAscent, usedFontDescent, ascentDescentSet);
     
    839839    // If leading is included for the box, then we compute that box.
    840840    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 };
    843843        setAscentAndDescent(ascent, descent, ascentWithLeading, descentWithLeading, ascentDescentSet);
    844844       
     
    852852   
    853853    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()) };
    856856        setAscentAndDescent(ascent, descent, fontAscent, fontDescent, ascentDescentSet);
    857857        affectsAscent = fontAscent - box.logicalTop() > 0;
     
    869869    if (includeInitialLetterForBox(box)) {
    870870        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())) };
    873873        setAscentAndDescent(ascent, descent, letterAscent, letterDescent, ascentDescentSet);
    874874        affectsAscent = letterAscent - box.logicalTop() > 0;
  • trunk/Source/WebCore/rendering/RootInlineBox.h

    r275413 r275502  
    161161    LayoutRect paddedLayoutOverflowRect(LayoutUnit endPadding) const;
    162162
    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;
    164164    LayoutUnit verticalPositionForBox(InlineBox*, VerticalPositionCache&);
    165165    bool fitsToGlyphs() const;
Note: See TracChangeset for help on using the changeset viewer.