WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
[fast-cq]Patch
bug-278834-20240829210357.patch (text/plain), 10.25 KB, created by
alan
on 2024-08-29 21:03:57 PDT
(
hide
)
Description:
[fast-cq]Patch
Filename:
MIME Type:
Creator:
alan
Created:
2024-08-29 21:03:57 PDT
Size:
10.25 KB
patch
obsolete
>From 0dbf0536c339ee265eaa81e2c14e0afce17427f6 Mon Sep 17 00:00:00 2001 >From: Alan Baradlay <zalan@apple.com> >Date: Wed, 28 Aug 2024 19:55:16 -0700 >Subject: [PATCH] [css-line-clamp] Add RenderLayoutState::m_lineClamp > https://bugs.webkit.org/show_bug.cgi?id=278834 > >Reviewed by Antti Koivisto. > >This is in preparation for supporting line-clamp. RenderLayoutState::m_lineClamp holds >the standards version of line clamp content. > >* Source/WebCore/layout/formattingContexts/block/BlockLayoutState.h: >(WebCore::Layout::BlockLayoutState::LineClamp::allowedLineCount const): Deleted. >* Source/WebCore/layout/formattingContexts/inline/InlineContentBalancer.cpp: >(WebCore::Layout::InlineContentBalancer::initialize): >* Source/WebCore/layout/formattingContexts/inline/InlineFormattingContext.cpp: >(WebCore::Layout::InlineFormattingContext::createDisplayContentForInlineContent): >* Source/WebCore/layout/integration/inline/LayoutIntegrationLineLayout.cpp: >(WebCore::LayoutIntegration::lineClamp): >* Source/WebCore/page/LocalFrameViewLayoutContext.cpp: >(WebCore::LocalFrameViewLayoutContext::pushLayoutState): >* Source/WebCore/rendering/RenderLayoutState.cpp: >(WebCore::RenderLayoutState::RenderLayoutState): >* Source/WebCore/rendering/RenderLayoutState.h: >(WebCore::RenderLayoutState::setLineClamp): >(WebCore::RenderLayoutState::lineClamp): >--- > .../formattingContexts/block/BlockLayoutState.h | 6 +++--- > .../inline/InlineContentBalancer.cpp | 2 +- > .../inline/InlineFormattingContext.cpp | 2 +- > .../inline/LayoutIntegrationLineLayout.cpp | 6 ++++-- > Source/WebCore/page/LocalFrameViewLayoutContext.cpp | 1 + > Source/WebCore/rendering/RenderLayoutState.cpp | 3 ++- > Source/WebCore/rendering/RenderLayoutState.h | 12 +++++++++++- > 7 files changed, 23 insertions(+), 9 deletions(-) > >diff --git a/Source/WebCore/layout/formattingContexts/block/BlockLayoutState.h b/Source/WebCore/layout/formattingContexts/block/BlockLayoutState.h >index 97bb2229054b..9b608fc2439d 100644 >--- a/Source/WebCore/layout/formattingContexts/block/BlockLayoutState.h >+++ b/Source/WebCore/layout/formattingContexts/block/BlockLayoutState.h >@@ -39,9 +39,9 @@ class BlockFormattingContext; > class BlockLayoutState { > public: > struct LineClamp { >- size_t allowedLineCount() const { return std::max(maximumLineCount - currentLineCount, static_cast<size_t>(0)); } >- size_t maximumLineCount { 0 }; >- size_t currentLineCount { 0 }; >+ size_t maximumLines { 0 }; >+ bool shouldDiscardOverflow { false }; >+ bool isLegacy { true }; > }; > enum class TextBoxTrimSide : uint8_t { > Start = 1 << 0, >diff --git a/Source/WebCore/layout/formattingContexts/inline/InlineContentBalancer.cpp b/Source/WebCore/layout/formattingContexts/inline/InlineContentBalancer.cpp >index 9b683c07b984..c7bc19bcb8b9 100644 >--- a/Source/WebCore/layout/formattingContexts/inline/InlineContentBalancer.cpp >+++ b/Source/WebCore/layout/formattingContexts/inline/InlineContentBalancer.cpp >@@ -101,7 +101,7 @@ InlineContentBalancer::InlineContentBalancer(InlineFormattingContext& inlineForm > void InlineContentBalancer::initialize() > { > auto lineClamp = m_inlineFormattingContext.layoutState().parentBlockLayoutState().lineClamp(); >- auto numberOfVisibleLinesAllowed = lineClamp ? std::make_optional(lineClamp->allowedLineCount()) : std::nullopt; >+ auto numberOfVisibleLinesAllowed = lineClamp ? std::make_optional(lineClamp->maximumLines) : std::nullopt; > > if (!m_inlineFormattingContext.layoutState().placedFloats().isEmpty()) { > m_cannotBalanceContent = true; >diff --git a/Source/WebCore/layout/formattingContexts/inline/InlineFormattingContext.cpp b/Source/WebCore/layout/formattingContexts/inline/InlineFormattingContext.cpp >index 3e7deefc9f3f..031441d19a1a 100644 >--- a/Source/WebCore/layout/formattingContexts/inline/InlineFormattingContext.cpp >+++ b/Source/WebCore/layout/formattingContexts/inline/InlineFormattingContext.cpp >@@ -384,7 +384,7 @@ void InlineFormattingContext::updateBoxGeometryForPlacedFloats(const LineLayoutR > > InlineRect InlineFormattingContext::createDisplayContentForInlineContent(const LineBox& lineBox, const LineLayoutResult& lineLayoutResult, const ConstraintsForInlineContent& constraints, InlineDisplay::Content& displayContent, size_t numberOfPreviousLinesWithInlineContent) > { >- auto numberOfVisibleLinesAllowed = layoutState().parentBlockLayoutState().lineClamp() ? std::make_optional(layoutState().parentBlockLayoutState().lineClamp()->allowedLineCount()) : std::nullopt; >+ auto numberOfVisibleLinesAllowed = layoutState().parentBlockLayoutState().lineClamp() ? std::make_optional(layoutState().parentBlockLayoutState().lineClamp()->maximumLines) : std::nullopt; > > auto numberOfLinesWithInlineContent = numberOfPreviousLinesWithInlineContent + (!lineLayoutResult.inlineContent.isEmpty() ? 1 : 0); > auto lineIsFullyTruncatedInBlockDirection = numberOfVisibleLinesAllowed && numberOfLinesWithInlineContent > *numberOfVisibleLinesAllowed; >diff --git a/Source/WebCore/layout/integration/inline/LayoutIntegrationLineLayout.cpp b/Source/WebCore/layout/integration/inline/LayoutIntegrationLineLayout.cpp >index db97d5641472..299b9302cee1 100644 >--- a/Source/WebCore/layout/integration/inline/LayoutIntegrationLineLayout.cpp >+++ b/Source/WebCore/layout/integration/inline/LayoutIntegrationLineLayout.cpp >@@ -304,8 +304,10 @@ std::pair<LayoutUnit, LayoutUnit> LineLayout::computeIntrinsicWidthConstraints() > static inline std::optional<Layout::BlockLayoutState::LineClamp> lineClamp(const RenderBlockFlow& rootRenderer) > { > auto& layoutState = *rootRenderer.view().frameView().layoutContext().layoutState(); >- if (auto lineClamp = layoutState.legacyLineClamp()) >- return Layout::BlockLayoutState::LineClamp { lineClamp->maximumLineCount, lineClamp->currentLineCount }; >+ if (auto legacyLineClamp = layoutState.legacyLineClamp()) >+ return Layout::BlockLayoutState::LineClamp { std::max(legacyLineClamp->maximumLineCount - legacyLineClamp->currentLineCount, static_cast<size_t>(0)), true }; >+ if (auto lineClamp = layoutState.lineClamp()) >+ return Layout::BlockLayoutState::LineClamp { lineClamp->maximumLines, lineClamp->shouldDiscardOverflow, false }; > return { }; > } > >diff --git a/Source/WebCore/page/LocalFrameViewLayoutContext.cpp b/Source/WebCore/page/LocalFrameViewLayoutContext.cpp >index 8b9f7effd75c..5c547ef5ac84 100644 >--- a/Source/WebCore/page/LocalFrameViewLayoutContext.cpp >+++ b/Source/WebCore/page/LocalFrameViewLayoutContext.cpp >@@ -604,6 +604,7 @@ bool LocalFrameViewLayoutContext::pushLayoutState(RenderBox& renderer, const Lay > , offset > , pageHeight > , pageHeightChanged >+ , layoutState ? layoutState->lineClamp() : std::nullopt > , layoutState ? layoutState->legacyLineClamp() : std::nullopt > , layoutState ? layoutState->textBoxTrim() : RenderLayoutState::TextBoxTrim())); > return true; >diff --git a/Source/WebCore/rendering/RenderLayoutState.cpp b/Source/WebCore/rendering/RenderLayoutState.cpp >index 73062e9950f4..6f32b31dbfa2 100644 >--- a/Source/WebCore/rendering/RenderLayoutState.cpp >+++ b/Source/WebCore/rendering/RenderLayoutState.cpp >@@ -69,7 +69,7 @@ RenderLayoutState::RenderLayoutState(RenderElement& renderer) > } > } > >-RenderLayoutState::RenderLayoutState(const LocalFrameViewLayoutContext::LayoutStateStack& layoutStateStack, RenderBox& renderer, const LayoutSize& offset, LayoutUnit pageLogicalHeight, bool pageLogicalHeightChanged, std::optional<LegacyLineClamp> legacyLineClamp, std::optional<TextBoxTrim> textBoxTrim) >+RenderLayoutState::RenderLayoutState(const LocalFrameViewLayoutContext::LayoutStateStack& layoutStateStack, RenderBox& renderer, const LayoutSize& offset, LayoutUnit pageLogicalHeight, bool pageLogicalHeightChanged, std::optional<LineClamp> lineClamp, std::optional<LegacyLineClamp> legacyLineClamp, std::optional<TextBoxTrim> textBoxTrim) > : m_clipped(false) > , m_isPaginated(false) > , m_pageLogicalHeightChanged(false) >@@ -78,6 +78,7 @@ RenderLayoutState::RenderLayoutState(const LocalFrameViewLayoutContext::LayoutSt > , m_layoutDeltaYSaturated(false) > #endif > , m_blockStartTrimming(Vector<bool>(0)) >+ , m_lineClamp(lineClamp) > , m_legacyLineClamp(legacyLineClamp) > , m_textBoxTrim(textBoxTrim) > #if ASSERT_ENABLED >diff --git a/Source/WebCore/rendering/RenderLayoutState.h b/Source/WebCore/rendering/RenderLayoutState.h >index 0ac6a2acc7a8..bc4c8caa025e 100644 >--- a/Source/WebCore/rendering/RenderLayoutState.h >+++ b/Source/WebCore/rendering/RenderLayoutState.h >@@ -51,6 +51,12 @@ public: > TextEdge propagatedTextBoxEdge { }; > SingleThreadWeakPtr<const RenderBlockFlow> lastFormattedLineRoot; > }; >+ >+ struct LineClamp { >+ size_t maximumLines { 0 }; >+ bool shouldDiscardOverflow { false }; >+ }; >+ > struct LegacyLineClamp { > size_t maximumLineCount { 0 }; > size_t currentLineCount { 0 }; >@@ -69,7 +75,7 @@ public: > , m_blockStartTrimming(Vector<bool>(0)) > { > } >- RenderLayoutState(const LocalFrameViewLayoutContext::LayoutStateStack&, RenderBox&, const LayoutSize& offset, LayoutUnit pageHeight, bool pageHeightChanged, std::optional<LegacyLineClamp>, std::optional<TextBoxTrim>); >+ RenderLayoutState(const LocalFrameViewLayoutContext::LayoutStateStack&, RenderBox&, const LayoutSize& offset, LayoutUnit pageHeight, bool pageHeightChanged, std::optional<LineClamp>, std::optional<LegacyLineClamp>, std::optional<TextBoxTrim>); > explicit RenderLayoutState(RenderElement&); > > bool isPaginated() const { return m_isPaginated; } >@@ -104,6 +110,9 @@ public: > bool layoutDeltaMatches(LayoutSize) const; > #endif > >+ void setLineClamp(std::optional<LineClamp> lineClamp) { m_lineClamp = lineClamp; } >+ std::optional<LineClamp> lineClamp() { return m_lineClamp; } >+ > void setLegacyLineClamp(std::optional<LegacyLineClamp> legacyLineClamp) { m_legacyLineClamp = legacyLineClamp; } > std::optional<LegacyLineClamp> legacyLineClamp() const { return m_legacyLineClamp; } > >@@ -163,6 +172,7 @@ private: > LayoutSize m_pageOffset; > LayoutSize m_lineGridOffset; > LayoutSize m_lineGridPaginationOrigin; >+ std::optional<LineClamp> m_lineClamp; > std::optional<LegacyLineClamp> m_legacyLineClamp; > std::optional<TextBoxTrim> m_textBoxTrim; > #if ASSERT_ENABLED
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 278834
:
472342
| 472362