[webkit-changes] [WebKit/WebKit] ad64b3: [LFC][Floating] Pass in the float candidate geomet...

Alan Baradlay noreply at github.com
Thu May 4 11:06:41 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: ad64b3613b50fc83fb7146411c21da788f36ea46
      https://github.com/WebKit/WebKit/commit/ad64b3613b50fc83fb7146411c21da788f36ea46
  Author: Alan Baradlay <zalan at apple.com>
  Date:   2023-05-04 (Thu, 04 May 2023)

  Changed paths:
    M Source/WebCore/layout/floats/FloatingContext.cpp
    M Source/WebCore/layout/floats/FloatingContext.h
    M Source/WebCore/layout/formattingContexts/block/BlockFormattingContext.cpp
    M Source/WebCore/layout/formattingContexts/inline/InlineFormattingContext.cpp
    M Source/WebCore/layout/formattingContexts/inline/InlineFormattingGeometry.cpp
    M Source/WebCore/layout/formattingContexts/inline/InlineLineBuilder.cpp

  Log Message:
  -----------
  [LFC][Floating] Pass in the float candidate geometry to FloatingContext functions
https://bugs.webkit.org/show_bug.cgi?id=256256

Reviewed by Antti Koivisto.

This patch is in preparation for synchronizing float box geometry handling with the rest of the layout boxes.

Currently what we do in LineBuilder is as follows:

auto& boxGeometry = formattingState()->boxGeometry(floatBox)                 (grab a _mutable_ box geometry)
boxGeometry.setLogicalTopLeft(staticPosition)                                (set the initial top/left position)
boxGeometry.setLogicalTopLeft(floatingContext.positionForFloat(floatBox))    (run float layout and set the final position on the box geometry)
placedFloats.append(floatingContext.toFloatItem(floatBox))                   (let the caller (InlineFormattingContext) know about the placed floats)

What we aim to do is just make a copy of the BoxGeometry and pass it in to FloatingContext functions (we don't do the copy part yet in this patch)

auto boxGeometry = boxGeometry(floatBox)
boxGeometry.setLogicalTopLeft(staticPosition)
...

and let the caller (InlineFormattingContext) deal with setting the final box geometry on the float boxes similar to other layout boxes as part of the display content creation.

Passing in BoxGeometry to FloatingContext ensures that we don't need to mutate the BoxGeometry state in order to run float layout.
This would enable us to use LineBuilder to run inline layout with different constraints (min/max) without getting any state mutated when floats are present.

* Source/WebCore/layout/floats/FloatingContext.cpp:
(WebCore::Layout::FloatingContext::positionForFloat const):
(WebCore::Layout::FloatingContext::positionForNonFloatingFloatAvoider const):
(WebCore::Layout::FloatingContext::verticalPositionWithClearance const):
(WebCore::Layout::FloatingContext::toFloatItem const):
(WebCore::Layout::FloatingContext::absoluteCoordinates const):
(WebCore::Layout::FloatingContext::mapTopLeftToFloatingStateRoot const):
* Source/WebCore/layout/floats/FloatingContext.h:
* Source/WebCore/layout/formattingContexts/block/BlockFormattingContext.cpp:
(WebCore::Layout::BlockFormattingContext::layoutInFlowContent):
(WebCore::Layout::BlockFormattingContext::computePositionToAvoidFloats):
(WebCore::Layout::BlockFormattingContext::computeVerticalPositionForFloatClear):
* Source/WebCore/layout/formattingContexts/inline/InlineFormattingContext.cpp:
(WebCore::Layout::InlineFormattingContext::layoutFloatContentOnly):
* Source/WebCore/layout/formattingContexts/inline/InlineFormattingGeometry.cpp:
(WebCore::Layout::InlineFormattingGeometry::logicalTopForNextLine const):
* Source/WebCore/layout/formattingContexts/inline/InlineLineBuilder.cpp:
(WebCore::Layout::LineBuilder::tryPlacingFloatBox):

Canonical link: https://commits.webkit.org/263684@main




More information about the webkit-changes mailing list