Changeset 246482 in webkit


Ignore:
Timestamp:
Jun 16, 2019 1:15:02 PM (5 years ago)
Author:
Alan Bujtas
Message:

[LFC][Floats] Add bottom value to FloatingState::Constraints
https://bugs.webkit.org/show_bug.cgi?id=198889
<rdar://problem/51776730>

Reviewed by Antti Koivisto.

Constraints::left/right->y indicates where this particular constrain ends. This is going to be used by inline layout to figure where
the next line should go (vertical position).

  • layout/floats/FloatingState.cpp:

(WebCore::Layout::FloatingState::constraints const):

  • layout/floats/FloatingState.h:
Location:
trunk/Source/WebCore
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r246481 r246482  
     12019-06-16  Zalan Bujtas  <zalan@apple.com>
     2
     3        [LFC][Floats] Add bottom value to FloatingState::Constraints
     4        https://bugs.webkit.org/show_bug.cgi?id=198889
     5        <rdar://problem/51776730>
     6
     7        Reviewed by Antti Koivisto.
     8
     9        Constraints::left/right->y indicates where this particular constrain ends. This is going to be used by inline layout to figure where
     10        the next line should go (vertical position).
     11
     12        * layout/floats/FloatingState.cpp:
     13        (WebCore::Layout::FloatingState::constraints const):
     14        * layout/floats/FloatingState.h:
     15
    1162019-06-16  Zalan Bujtas  <zalan@apple.com>
    217
  • trunk/Source/WebCore/layout/LayoutUnits.h

    r241264 r246482  
    6060    Point(LayoutUnit, LayoutUnit);
    6161    Point(LayoutPoint);
     62    void move(LayoutSize);
    6263    void moveBy(LayoutPoint);
    6364    operator LayoutPoint() const { return { x, y }; }
     
    7879    , y(y)
    7980{
     81}
     82
     83inline void Point::move(LayoutSize offset)
     84{
     85    x += offset.width();
     86    y += offset.height();
    8087}
    8188
  • trunk/Source/WebCore/layout/blockformatting/BlockFormattingContext.cpp

    r246468 r246482  
    149149
    150150    // Shrink the available space if the floats are actually intruding at this vertical position.
    151     availableWidth -= (std::max<LayoutUnit>(0, constraints.left.valueOr(PositionInContextRoot { 0 }) - containingBlockContentBoxLeft)
    152         + std::max<LayoutUnit>(0, containingBlockContentBoxRight - constraints.right.valueOr(PositionInContextRoot { containingBlockContentBoxRight })));
     151    if (constraints.left)
     152        availableWidth -= std::max<LayoutUnit>(0, constraints.left->x - containingBlockContentBoxLeft);
     153    if (constraints.right)
     154        availableWidth -= std::max<LayoutUnit>(0, containingBlockContentBoxRight - constraints.right->x);
    153155    return availableWidth;
    154156}
  • trunk/Source/WebCore/layout/floats/FloatingState.cpp

    r246468 r246482  
    120120    auto coordinateMappingIsRequired = &root() != &formattingContextRoot;
    121121    auto adjustedPosition = Point { 0, verticalPosition };
    122 
    123     if (coordinateMappingIsRequired)
     122    LayoutSize adjustingDelta;
     123
     124    if (coordinateMappingIsRequired) {
    124125        adjustedPosition = FormattingContext::mapPointToAncestor(m_layoutState, adjustedPosition, downcast<Container>(formattingContextRoot), downcast<Container>(root()));
     126        adjustingDelta = { adjustedPosition.x, adjustedPosition.y - verticalPosition };
     127    }
    125128
    126129    Constraints constraints;
     
    139142
    140143        if (floatItem.isLeftPositioned())
    141             constraints.left = PositionInContextRoot { rect.right() };
     144            constraints.left = PointInContextRoot { rect.right(), rect.bottom() };
    142145        else
    143             constraints.right = PositionInContextRoot { rect.left() };
     146            constraints.right = PointInContextRoot { rect.left(), rect.bottom() };
    144147
    145148        if (constraints.left && constraints.right)
     
    149152    if (coordinateMappingIsRequired) {
    150153        if (constraints.left)
    151             constraints.left = PositionInContextRoot { *constraints.left - adjustedPosition.x };
     154            constraints.left->move(-adjustingDelta);
    152155
    153156        if (constraints.right)
    154             constraints.right = PositionInContextRoot { *constraints.right - adjustedPosition.x };
    155     }
    156 
     157            constraints.right->move(-adjustingDelta);
     158    }
    157159    return constraints;
    158160}
  • trunk/Source/WebCore/layout/floats/FloatingState.h

    r246479 r246482  
    6161
    6262    struct Constraints {
    63         Optional<PositionInContextRoot> left;
    64         Optional<PositionInContextRoot> right;
     63        Optional<PointInContextRoot> left;
     64        Optional<PointInContextRoot> right;
    6565    };
    6666    Constraints constraints(PositionInContextRoot verticalPosition, const Box& formattingContextRoot) const;
  • trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContextLineLayout.cpp

    r246478 r246482  
    231231        auto floatConstraints = m_floatingState.constraints({ lineLogicalTop }, m_formattingRoot);
    232232        // Check if these constraints actually put limitation on the line.
    233         if (floatConstraints.left && *floatConstraints.left <= formattingRootDisplayBox.contentBoxLeft())
     233        if (floatConstraints.left && floatConstraints.left->x <= formattingRootDisplayBox.contentBoxLeft())
    234234            floatConstraints.left = { };
    235235
    236         if (floatConstraints.right && *floatConstraints.right >= formattingRootDisplayBox.contentBoxRight())
     236        if (floatConstraints.right && floatConstraints.right->x >= formattingRootDisplayBox.contentBoxRight())
    237237            floatConstraints.right = { };
    238238
    239239        if (floatConstraints.left && floatConstraints.right) {
    240             ASSERT(*floatConstraints.left < *floatConstraints.right);
    241             availableWidth = *floatConstraints.right - *floatConstraints.left;
    242             lineLogicalLeft = *floatConstraints.left;
     240            ASSERT(floatConstraints.left->x < floatConstraints.right->x);
     241            availableWidth = floatConstraints.right->x - floatConstraints.left->x;
     242            lineLogicalLeft = floatConstraints.left->x;
    243243        } else if (floatConstraints.left) {
    244             ASSERT(*floatConstraints.left > lineLogicalLeft);
    245             availableWidth -= (*floatConstraints.left - lineLogicalLeft);
    246             lineLogicalLeft = *floatConstraints.left;
     244            ASSERT(floatConstraints.left->x > lineLogicalLeft);
     245            availableWidth -= (floatConstraints.left->x - lineLogicalLeft);
     246            lineLogicalLeft = floatConstraints.left->x;
    247247        } else if (floatConstraints.right) {
    248             ASSERT(*floatConstraints.right > lineLogicalLeft);
    249             availableWidth = *floatConstraints.right - lineLogicalLeft;
     248            ASSERT(floatConstraints.right->x > lineLogicalLeft);
     249            availableWidth = floatConstraints.right->x - lineLogicalLeft;
    250250        }
    251251        lineHorizontalConstraint.availableLogicalWidth = availableWidth;
Note: See TracChangeset for help on using the changeset viewer.