Branch: refs/heads/main Home: https://github.com/WebKit/WebKit Commit: ef951d1b818e5d8b33dd21c63437da3b93a6eb59 https://github.com/WebKit/WebKit/commit/ef951d1b818e5d8b33dd21c63437da3b93a6eb59 Author: Alan Baradlay <za...@apple.com> Date: 2022-12-06 (Tue, 06 Dec 2022)
Changed paths: M Source/WebCore/layout/formattingContexts/block/BlockLayoutState.h M Source/WebCore/layout/formattingContexts/inline/InlineFormattingContext.cpp M Source/WebCore/layout/formattingContexts/inline/InlineFormattingContext.h M Source/WebCore/layout/formattingContexts/inline/InlineLineBoxBuilder.cpp M Source/WebCore/layout/formattingContexts/inline/InlineLineBoxBuilder.h M Source/WebCore/layout/integration/inline/LayoutIntegrationLineLayout.cpp M Source/WebCore/page/FrameViewLayoutContext.cpp M Source/WebCore/rendering/RenderBlockFlow.cpp M Source/WebCore/rendering/RenderBlockFlow.h M Source/WebCore/rendering/RenderLayoutState.cpp M Source/WebCore/rendering/RenderLayoutState.h Log Message: ----------- [leading-trim][IFC] Add support for nested block containers with leading-trim: start https://bugs.webkit.org/show_bug.cgi?id=248806 Reviewed by Antti Koivisto. While leading-trim is a non-inherited property, the trimming behavior is propagated down on the block container subtree (similar to e.g. line-clamp). <div style="leading-trim: start"> <div> <div>This first formatted line should be trimmed</div> </div> </div> This patch adds initial support for propagating this leading-trim (start) value across multiple IFCs. 1. Use RenderLayerState to propagate leading-trim value inside render tree from ancestor block container to descendants. 2. Use BlockLayoutState.h inside IFC to indicate whether the first/last/both lines should be trimmed. * Source/WebCore/layout/formattingContexts/block/BlockLayoutState.h: This and the RenderLayerStates may look redundant, but eventually this is all be in BlockLayoutState (full LFC) (WebCore::Layout::BlockLayoutState::BlockLayoutState): (WebCore::Layout::BlockLayoutState::leadingTrim const): * Source/WebCore/layout/formattingContexts/inline/InlineFormattingContext.cpp: (WebCore::Layout::InlineFormattingContext::lineLayout): (WebCore::Layout::InlineFormattingContext::createDisplayContentForLine): * Source/WebCore/layout/formattingContexts/inline/InlineFormattingContext.h: * Source/WebCore/layout/formattingContexts/inline/InlineLineBoxBuilder.cpp: (WebCore::Layout::LineBoxBuilder::LineBoxBuilder): (WebCore::Layout::LineBoxBuilder::computeLineBoxGeometry const): Use the propagated leading-trim value instead of the root's. This enables line box trimming on nested IFCs. * Source/WebCore/layout/formattingContexts/inline/InlineLineBoxBuilder.h: * Source/WebCore/layout/integration/inline/LayoutIntegrationLineLayout.cpp: (WebCore::LayoutIntegration::leadingTrim): (WebCore::LayoutIntegration::LineLayout::layout): * Source/WebCore/page/FrameViewLayoutContext.cpp: (WebCore::FrameViewLayoutContext::pushLayoutState): * Source/WebCore/rendering/RenderBlockFlow.cpp: (WebCore::RenderBlockFlow::setLeadingTrimForSubtree): (WebCore::RenderBlockFlow::resetLeadingTrim): (WebCore::RenderBlockFlow::layoutBlock): * Source/WebCore/rendering/RenderBlockFlow.h: * Source/WebCore/rendering/RenderLayoutState.cpp: (WebCore::RenderLayoutState::RenderLayoutState): * Source/WebCore/rendering/RenderLayoutState.h: (WebCore::RenderLayoutState::hasLeadingTrim const): (WebCore::RenderLayoutState::leadingTrim const): (WebCore::RenderLayoutState::addLeadingTrim): (WebCore::RenderLayoutState::removeLeadingTrim): (WebCore::RenderLayoutState::resetLeadingTrim): Canonical link: https://commits.webkit.org/257411@main _______________________________________________ webkit-changes mailing list webkit-changes@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-changes