Skip to content

Commit 3d10ef2

Browse files
committed
[IFC] Add inline box count to InlineContentCache::InlineItems
https://bugs.webkit.org/show_bug.cgi?id=268227 Reviewed by Antti Koivisto. This is in preparation for being able to run a range of content through the simple line builder (where the range has text only content e.g. <div><span>this is text content</span></div> 1. Keep track of the number of inline boxes (m_inlineBoxCount) 2. m_isTextAndForcedLineBreakOnlyContent only tracks _content_ type of inline level boxes now (excluding inline boxes, see #1) 3. and it does not track if content needs bidi reordering anymore (we already track that information in m_contentRequiresVisualReordering) 4. Add InlineContentCache::InlineItems::ContentAttributes to hold all these bits. 5. Remove dedicated set functions and pass these bit through InlineContentCache::InlineItems::set/replace. * Source/WebCore/layout/formattingContexts/inline/InlineContentCache.h: (WebCore::Layout::InlineContentCache::InlineItems::requiresVisualReordering const): (WebCore::Layout::InlineContentCache::InlineItems::hasTextAndLineBreakOnlyContent const): (WebCore::Layout::InlineContentCache::InlineItems::hasInlineBoxes const): (WebCore::Layout::InlineContentCache::InlineItems::inlineBoxCount const): (WebCore::Layout::InlineContentCache::InlineItems::set): (WebCore::Layout::InlineContentCache::InlineItems::replace): (WebCore::Layout::InlineContentCache::InlineItems::append): Deleted. (WebCore::Layout::InlineContentCache::InlineItems::clear): Deleted. (WebCore::Layout::InlineContentCache::InlineItems::setRequiresVisualReordering): Deleted. (WebCore::Layout::InlineContentCache::InlineItems::setIsNonBidiTextAndForcedLineBreakOnlyContent): Deleted. (WebCore::Layout::InlineContentCache::InlineItems::isNonBidiTextAndForcedLineBreakOnlyContent const): Deleted. * Source/WebCore/layout/formattingContexts/inline/InlineFormattingContext.cpp: (WebCore::Layout::InlineFormattingContext::layout): (WebCore::Layout::InlineFormattingContext::minimumMaximumContentSize): (WebCore::Layout::InlineFormattingContext::minimumContentSize): (WebCore::Layout::InlineFormattingContext::maximumContentSize): * Source/WebCore/layout/formattingContexts/inline/InlineItemsBuilder.cpp: (WebCore::Layout::InlineItemsBuilder::build): (WebCore::Layout::InlineItemsBuilder::traverseUntilDamaged): (WebCore::Layout::InlineItemsBuilder::collectInlineItems): (WebCore::Layout::InlineItemsBuilder::handleTextContent): (WebCore::Layout::InlineItemsBuilder::handleInlineBoxStart): (WebCore::Layout::InlineItemsBuilder::handleInlineBoxEnd): (WebCore::Layout::InlineItemsBuilder::handleInlineLevelBox): * Source/WebCore/layout/formattingContexts/inline/InlineItemsBuilder.h: * Source/WebCore/layout/formattingContexts/inline/IntrinsicWidthHandler.cpp: (WebCore::Layout::IntrinsicWidthHandler::IntrinsicWidthHandler): (WebCore::Layout::IntrinsicWidthHandler::minimumContentSize): (WebCore::Layout::IntrinsicWidthHandler::maximumContentSize): (WebCore::Layout::IntrinsicWidthHandler::computedIntrinsicWidthForConstraint): (WebCore::Layout::IntrinsicWidthHandler::simplifiedMaximumWidth): * Source/WebCore/layout/formattingContexts/inline/IntrinsicWidthHandler.h: (WebCore::Layout::IntrinsicWidthHandler::inlineItemList const): * Source/WebCore/layout/formattingContexts/inline/TextOnlySimpleLineBuilder.cpp: (WebCore::Layout::TextOnlySimpleLineBuilder::isEligibleForSimplifiedTextOnlyInlineLayout): * Source/WebCore/layout/formattingContexts/inline/TextOnlySimpleLineBuilder.h: Canonical link: https://commits.webkit.org/273632@main
1 parent 50ebd10 commit 3d10ef2

File tree

8 files changed

+76
-61
lines changed

8 files changed

+76
-61
lines changed

Source/WebCore/layout/formattingContexts/inline/InlineContentCache.h

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
#include "FormattingConstraints.h"
2929
#include "InlineDisplayContent.h"
3030
#include "InlineItem.h"
31-
#include "IntrinsicWidthHandler.h"
3231
#include <wtf/IsoMalloc.h>
3332
#include <wtf/IsoMallocInlines.h>
3433

@@ -43,24 +42,28 @@ class InlineContentCache {
4342
InlineItemList& content() { return m_inlineItemList; }
4443
const InlineItemList& content() const { return m_inlineItemList; }
4544

46-
void set(InlineItemList&& inlineItemList) { m_inlineItemList = WTFMove(inlineItemList); }
47-
void append(InlineItemList&& inlineItemList) { m_inlineItemList.appendVector(WTFMove(inlineItemList)); }
48-
void clear() { m_inlineItemList.clear(); }
45+
struct ContentAttributes {
46+
bool requiresVisualReordering { false };
47+
// Note that <span>this is text</span> returns true as inline boxes are not considered 'content' here.
48+
bool hasTextAndLineBreakOnlyContent { false };
49+
size_t inlineBoxCount { 0 };
50+
};
51+
void set(InlineItemList&&, ContentAttributes);
52+
void replace(size_t insertionPosition, InlineItemList&&, ContentAttributes);
4953
void shrinkToFit() { m_inlineItemList.shrinkToFit(); }
5054

5155
bool isEmpty() const { return content().isEmpty(); }
5256
size_t size() const { return content().size(); }
5357

54-
void setRequiresVisualReordering(bool contentRequiresVisualReordering) { m_contentRequiresVisualReordering = contentRequiresVisualReordering; }
55-
bool requiresVisualReordering() const { return m_contentRequiresVisualReordering; }
56-
57-
void setIsNonBidiTextAndForcedLineBreakOnlyContent(bool isNonBidiTextAndForcedLineBreakOnlyContent) { m_isNonBidiTextAndForcedLineBreakOnlyContent = isNonBidiTextAndForcedLineBreakOnlyContent; }
58-
bool isNonBidiTextAndForcedLineBreakOnlyContent() const { return m_isNonBidiTextAndForcedLineBreakOnlyContent; }
58+
bool requiresVisualReordering() const { return m_contentAttributes.requiresVisualReordering; }
59+
bool hasTextAndLineBreakOnlyContent() const { return m_contentAttributes.hasTextAndLineBreakOnlyContent; }
60+
bool hasInlineBoxes() const { return !!inlineBoxCount(); }
61+
size_t inlineBoxCount() const { return m_contentAttributes.inlineBoxCount; }
5962

6063
private:
64+
ContentAttributes m_contentAttributes;
6165
InlineItemList m_inlineItemList;
62-
bool m_contentRequiresVisualReordering { false };
63-
bool m_isNonBidiTextAndForcedLineBreakOnlyContent { false };
66+
6467
};
6568
const InlineItems& inlineItems() const { return m_inlineItems; }
6669
InlineItems& inlineItems() { return m_inlineItems; }
@@ -89,6 +92,19 @@ inline void InlineContentCache::resetMinimumMaximumContentSizes()
8992
m_maximumIntrinsicWidthLineContent = { };
9093
}
9194

95+
inline void InlineContentCache::InlineItems::set(InlineItemList&& inlineItemList, ContentAttributes contentAttributes)
96+
{
97+
m_inlineItemList = WTFMove(inlineItemList);
98+
m_contentAttributes = contentAttributes;
99+
}
100+
101+
inline void InlineContentCache::InlineItems::replace(size_t insertionPosition, InlineItemList&& inlineItemList, ContentAttributes contentAttributes)
102+
{
103+
m_inlineItemList.remove(insertionPosition, m_inlineItemList.size() - insertionPosition);
104+
m_inlineItemList.appendVector(WTFMove(inlineItemList));
105+
m_contentAttributes = contentAttributes;
106+
}
107+
92108
}
93109
}
94110

Source/WebCore/layout/formattingContexts/inline/InlineFormattingContext.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ InlineLayoutResult InlineFormattingContext::layout(const ConstraintsForInlineCon
142142
layoutState().setAvailableLineWidthOverride({ *balancedLineWidths });
143143
}
144144

145-
if (TextOnlySimpleLineBuilder::isEligibleForSimplifiedTextOnlyInlineLayout(root(), inlineContentCache(), &placedFloats)) {
145+
if (TextOnlySimpleLineBuilder::isEligibleForSimplifiedTextOnlyInlineLayout(root(), inlineContentCache().inlineItems(), &placedFloats)) {
146146
auto simplifiedLineBuilder = TextOnlySimpleLineBuilder { *this, constraints.horizontal(), inlineItemList };
147147
return lineLayout(simplifiedLineBuilder, inlineItemList, needsLayoutRange, previousLine(), constraints, lineDamage);
148148
}
@@ -160,10 +160,10 @@ std::pair<LayoutUnit, LayoutUnit> InlineFormattingContext::minimumMaximumContent
160160
return { ceiledLayoutUnit(*minimumContentSize), ceiledLayoutUnit(*maximumContentSize) };
161161

162162
rebuildInlineItemListIfNeeded(lineDamage);
163-
auto& inlineItemList = inlineContentCache.inlineItems().content();
163+
auto& inlineItems = inlineContentCache.inlineItems();
164164

165-
if (!isEmptyInlineContent(inlineItemList)) {
166-
auto intrinsicWidthHandler = IntrinsicWidthHandler { *this, inlineItemList, TextOnlySimpleLineBuilder::isEligibleForSimplifiedTextOnlyInlineLayout(root(), inlineContentCache) };
165+
if (!isEmptyInlineContent(inlineItems.content())) {
166+
auto intrinsicWidthHandler = IntrinsicWidthHandler { *this, inlineItems };
167167

168168
if (!minimumContentSize)
169169
minimumContentSize = intrinsicWidthHandler.minimumContentSize();
@@ -188,10 +188,10 @@ LayoutUnit InlineFormattingContext::minimumContentSize(const InlineDamage* lineD
188188
return ceiledLayoutUnit(*inlineContentCache.minimumContentSize());
189189

190190
rebuildInlineItemListIfNeeded(lineDamage);
191-
auto& inlineItemList = inlineContentCache.inlineItems().content();
191+
auto& inlineItems = inlineContentCache.inlineItems();
192192
auto minimumContentSize = InlineLayoutUnit { };
193-
if (!isEmptyInlineContent(inlineItemList))
194-
minimumContentSize = IntrinsicWidthHandler { *this, inlineItemList, TextOnlySimpleLineBuilder::isEligibleForSimplifiedTextOnlyInlineLayout(root(), inlineContentCache) }.minimumContentSize();
193+
if (!isEmptyInlineContent(inlineItems.content()))
194+
minimumContentSize = IntrinsicWidthHandler { *this, inlineItems }.minimumContentSize();
195195
inlineContentCache.setMinimumContentSize(minimumContentSize);
196196
return ceiledLayoutUnit(minimumContentSize);
197197
}
@@ -203,10 +203,10 @@ LayoutUnit InlineFormattingContext::maximumContentSize(const InlineDamage* lineD
203203
return ceiledLayoutUnit(*inlineContentCache.maximumContentSize());
204204

205205
rebuildInlineItemListIfNeeded(lineDamage);
206-
auto& inlineItemList = inlineContentCache.inlineItems().content();
206+
auto& inlineItems = inlineContentCache.inlineItems();
207207
auto maximumContentSize = InlineLayoutUnit { };
208-
if (!isEmptyInlineContent(inlineItemList)) {
209-
auto intrinsicWidthHandler = IntrinsicWidthHandler { *this, inlineItemList, TextOnlySimpleLineBuilder::isEligibleForSimplifiedTextOnlyInlineLayout(root(), inlineContentCache) };
208+
if (!isEmptyInlineContent(inlineItems.content())) {
209+
auto intrinsicWidthHandler = IntrinsicWidthHandler { *this, inlineItems };
210210

211211
maximumContentSize = intrinsicWidthHandler.maximumContentSize();
212212
if (intrinsicWidthHandler.maximumIntrinsicWidthLineContent())

Source/WebCore/layout/formattingContexts/inline/InlineItemsBuilder.cpp

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -98,18 +98,16 @@ void InlineItemsBuilder::build(InlineItemPosition startPosition)
9898
computeInlineTextItemWidths(inlineItemList);
9999

100100
auto adjustInlineContentCacheWithNewInlineItems = [&] {
101+
auto contentAttributes = InlineContentCache::InlineItems::ContentAttributes { m_contentRequiresVisualReordering, m_isTextAndForcedLineBreakOnlyContent, m_inlineBoxCount };
101102
auto& inlineItemCache = inlineContentCache().inlineItems();
102103
if (!startPosition)
103-
return inlineItemCache.set(WTFMove(inlineItemList));
104+
return inlineItemCache.set(WTFMove(inlineItemList), contentAttributes);
104105
// Let's first remove the dirty inline items if there are any.
105-
auto& currentInlineItems = inlineItemCache.content();
106-
if (startPosition.index >= currentInlineItems.size()) {
106+
if (startPosition.index >= inlineItemCache.content().size()) {
107107
ASSERT_NOT_REACHED();
108-
return inlineItemCache.set(WTFMove(inlineItemList));
108+
return inlineItemCache.set(WTFMove(inlineItemList), contentAttributes);
109109
}
110-
// FIXME: Use replace instead.
111-
currentInlineItems.remove(startPosition.index, currentInlineItems.size() - startPosition.index);
112-
inlineItemCache.append(WTFMove(inlineItemList));
110+
inlineItemCache.replace(startPosition.index, WTFMove(inlineItemList), contentAttributes);
113111
};
114112
adjustInlineContentCacheWithNewInlineItems();
115113

@@ -155,7 +153,11 @@ bool InlineItemsBuilder::traverseUntilDamaged(LayoutQueue& layoutQueue, const Bo
155153
return true;
156154

157155
m_contentRequiresVisualReordering = m_contentRequiresVisualReordering || requiresVisualReordering(subtreeRoot);
158-
m_isNonBidiTextAndForcedLineBreakOnlyContent = m_isNonBidiTextAndForcedLineBreakOnlyContent && !m_contentRequiresVisualReordering && isTextOrLineBreak(subtreeRoot);
156+
if (!isTextOrLineBreak(subtreeRoot)) {
157+
m_isTextAndForcedLineBreakOnlyContent = false;
158+
if (subtreeRoot.isInlineBox())
159+
++m_inlineBoxCount;
160+
}
159161

160162
auto shouldSkipSubtree = subtreeRoot.establishesFormattingContext();
161163
if (!shouldSkipSubtree && is<ElementBox>(subtreeRoot) && downcast<ElementBox>(subtreeRoot).hasChild()) {
@@ -256,7 +258,7 @@ void InlineItemsBuilder::collectInlineItems(InlineItemList& inlineItemList, Inli
256258
while (!layoutQueue.isEmpty()) {
257259
auto layoutBox = layoutQueue.takeLast();
258260
if (layoutBox->isOutOfFlowPositioned()) {
259-
m_isNonBidiTextAndForcedLineBreakOnlyContent = false;
261+
m_isTextAndForcedLineBreakOnlyContent = false;
260262
inlineItemList.append({ layoutBox, InlineItem::Type::Opaque });
261263
} else if (layoutBox->isInlineTextBox()) {
262264
auto& inlineTextBox = downcast<InlineTextBox>(layoutBox);
@@ -267,7 +269,7 @@ void InlineItemsBuilder::collectInlineItems(InlineItemList& inlineItemList, Inli
267269
handleInlineBoxEnd(layoutBox, inlineItemList);
268270
else if (layoutBox->isFloatingPositioned()) {
269271
inlineItemList.append({ layoutBox, InlineItem::Type::Float });
270-
m_isNonBidiTextAndForcedLineBreakOnlyContent = false;
272+
m_isTextAndForcedLineBreakOnlyContent = false;
271273
} else
272274
ASSERT_NOT_REACHED();
273275

@@ -277,8 +279,6 @@ void InlineItemsBuilder::collectInlineItems(InlineItemList& inlineItemList, Inli
277279
}
278280
}
279281
}
280-
inlineItemCache.setIsNonBidiTextAndForcedLineBreakOnlyContent(m_isNonBidiTextAndForcedLineBreakOnlyContent);
281-
inlineItemCache.setRequiresVisualReordering(m_contentRequiresVisualReordering);
282282
}
283283

284284
static void replaceNonPreservedNewLineAndTabCharactersAndAppend(const InlineTextBox& inlineTextBox, StringBuilder& paragraphContentBuilder)
@@ -682,7 +682,6 @@ void InlineItemsBuilder::handleTextContent(const InlineTextBox& inlineTextBox, I
682682
return inlineItemList.append(InlineTextItem::createNonWhitespaceItem(inlineTextBox, { }, contentLength, UBIDI_DEFAULT_LTR, false, { }));
683683

684684
m_contentRequiresVisualReordering = m_contentRequiresVisualReordering || requiresVisualReordering(inlineTextBox);
685-
m_isNonBidiTextAndForcedLineBreakOnlyContent = m_isNonBidiTextAndForcedLineBreakOnlyContent && !m_contentRequiresVisualReordering;
686685
auto& style = inlineTextBox.style();
687686
auto shouldPreserveSpacesAndTabs = TextUtil::shouldPreserveSpacesAndTabs(inlineTextBox);
688687
auto shouldPreserveNewline = TextUtil::shouldPreserveNewline(inlineTextBox);
@@ -777,15 +776,14 @@ void InlineItemsBuilder::handleInlineBoxStart(const Box& inlineBox, InlineItemLi
777776
{
778777
inlineItemList.append({ inlineBox, InlineItem::Type::InlineBoxStart });
779778
m_contentRequiresVisualReordering = m_contentRequiresVisualReordering || requiresVisualReordering(inlineBox);
780-
m_isNonBidiTextAndForcedLineBreakOnlyContent = false;
779+
++m_inlineBoxCount;
781780
}
782781

783782
void InlineItemsBuilder::handleInlineBoxEnd(const Box& inlineBox, InlineItemList& inlineItemList)
784783
{
785784
inlineItemList.append({ inlineBox, InlineItem::Type::InlineBoxEnd });
786-
ASSERT(!m_isNonBidiTextAndForcedLineBreakOnlyContent);
787-
m_isNonBidiTextAndForcedLineBreakOnlyContent = false;
788785
// Inline box end item itself can not trigger bidi content.
786+
ASSERT(m_inlineBoxCount);
789787
ASSERT(contentRequiresVisualReordering() || inlineBox.style().isLeftToRightDirection() || inlineBox.style().rtlOrdering() == Order::Visual || inlineBox.style().unicodeBidi() == UnicodeBidi::Normal);
790788
}
791789

@@ -795,12 +793,12 @@ void InlineItemsBuilder::handleInlineLevelBox(const Box& layoutBox, InlineItemLi
795793
return;
796794

797795
if (layoutBox.isAtomicInlineLevelBox()) {
798-
m_isNonBidiTextAndForcedLineBreakOnlyContent = false;
796+
m_isTextAndForcedLineBreakOnlyContent = false;
799797
return inlineItemList.append({ layoutBox, InlineItem::Type::Box });
800798
}
801799

802800
if (layoutBox.isLineBreakBox()) {
803-
m_isNonBidiTextAndForcedLineBreakOnlyContent = m_isNonBidiTextAndForcedLineBreakOnlyContent && isTextOrLineBreak(layoutBox);
801+
m_isTextAndForcedLineBreakOnlyContent = m_isTextAndForcedLineBreakOnlyContent && isTextOrLineBreak(layoutBox);
804802
return inlineItemList.append({ layoutBox, layoutBox.isWordBreakOpportunity() ? InlineItem::Type::WordBreakOpportunity : InlineItem::Type::HardLineBreak });
805803
}
806804

Source/WebCore/layout/formattingContexts/inline/InlineItemsBuilder.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@ class InlineItemsBuilder {
6363
const ElementBox& m_root;
6464

6565
bool m_contentRequiresVisualReordering { false };
66-
bool m_isNonBidiTextAndForcedLineBreakOnlyContent { true };
66+
bool m_isTextAndForcedLineBreakOnlyContent { true };
67+
size_t m_inlineBoxCount { 0 };
6768
};
6869

6970
}

Source/WebCore/layout/formattingContexts/inline/IntrinsicWidthHandler.cpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -80,10 +80,10 @@ static bool mayUseContentWidthBetweenLineBreaksAsMaximumSize(const ElementBox& r
8080
return true;
8181
}
8282

83-
IntrinsicWidthHandler::IntrinsicWidthHandler(InlineFormattingContext& inlineFormattingContext, const InlineItemList& inlineItemList, bool mayUseSimplifiedTextOnlyInlineLayout)
83+
IntrinsicWidthHandler::IntrinsicWidthHandler(InlineFormattingContext& inlineFormattingContext, const InlineContentCache::InlineItems& inlineItems)
8484
: m_inlineFormattingContext(inlineFormattingContext)
85-
, m_inlineItemList(inlineItemList)
86-
, m_mayUseSimplifiedTextOnlyInlineLayout(mayUseSimplifiedTextOnlyInlineLayout)
85+
, m_inlineItems(inlineItems)
86+
, m_mayUseSimplifiedTextOnlyInlineLayout(TextOnlySimpleLineBuilder::isEligibleForSimplifiedTextOnlyInlineLayout(root(), inlineItems))
8787
{
8888
}
8989

@@ -94,10 +94,10 @@ InlineLayoutUnit IntrinsicWidthHandler::minimumContentSize()
9494
if (isContentEligibleForNonLineBuilderMinimumWidth(root(), m_mayUseSimplifiedTextOnlyInlineLayout))
9595
minimumContentSize = simplifiedMinimumWidth(root());
9696
else if (m_mayUseSimplifiedTextOnlyInlineLayout) {
97-
auto simplifiedLineBuilder = TextOnlySimpleLineBuilder { formattingContext(), { }, m_inlineItemList };
97+
auto simplifiedLineBuilder = TextOnlySimpleLineBuilder { formattingContext(), { }, inlineItemList() };
9898
minimumContentSize = computedIntrinsicWidthForConstraint(IntrinsicWidthMode::Minimum, simplifiedLineBuilder, MayCacheLayoutResult::No);
9999
} else {
100-
auto lineBuilder = LineBuilder { formattingContext(), { }, m_inlineItemList };
100+
auto lineBuilder = LineBuilder { formattingContext(), { }, inlineItemList() };
101101
minimumContentSize = computedIntrinsicWidthForConstraint(IntrinsicWidthMode::Minimum, lineBuilder, MayCacheLayoutResult::No);
102102
}
103103

@@ -109,21 +109,21 @@ InlineLayoutUnit IntrinsicWidthHandler::maximumContentSize()
109109
auto mayCacheLayoutResult = m_mayUseSimplifiedTextOnlyInlineLayout ? MayCacheLayoutResult::Yes : MayCacheLayoutResult::No;
110110
auto maximumContentSize = InlineLayoutUnit { };
111111

112-
if (isContentEligibleForNonLineBuilderMaximumWidth(root(), m_inlineItemList))
112+
if (isContentEligibleForNonLineBuilderMaximumWidth(root(), inlineItemList()))
113113
maximumContentSize = simplifiedMaximumWidth(mayCacheLayoutResult);
114114
else if (m_mayUseSimplifiedTextOnlyInlineLayout) {
115-
if (m_maximumContentWidthBetweenLineBreaks && mayUseContentWidthBetweenLineBreaksAsMaximumSize(root(), m_inlineItemList)) {
115+
if (m_maximumContentWidthBetweenLineBreaks && mayUseContentWidthBetweenLineBreaksAsMaximumSize(root(), inlineItemList())) {
116116
maximumContentSize = *m_maximumContentWidthBetweenLineBreaks;
117117
#ifndef NDEBUG
118-
auto simplifiedLineBuilder = TextOnlySimpleLineBuilder { formattingContext(), { }, m_inlineItemList };
118+
auto simplifiedLineBuilder = TextOnlySimpleLineBuilder { formattingContext(), { }, inlineItemList() };
119119
ASSERT(std::abs(maximumContentSize - computedIntrinsicWidthForConstraint(IntrinsicWidthMode::Maximum, simplifiedLineBuilder, MayCacheLayoutResult::No)) < 1);
120120
#endif
121121
} else {
122-
auto simplifiedLineBuilder = TextOnlySimpleLineBuilder { formattingContext(), { }, m_inlineItemList };
122+
auto simplifiedLineBuilder = TextOnlySimpleLineBuilder { formattingContext(), { }, inlineItemList() };
123123
maximumContentSize = computedIntrinsicWidthForConstraint(IntrinsicWidthMode::Maximum, simplifiedLineBuilder, mayCacheLayoutResult);
124124
}
125125
} else {
126-
auto lineBuilder = LineBuilder { formattingContext(), { }, m_inlineItemList };
126+
auto lineBuilder = LineBuilder { formattingContext(), { }, inlineItemList() };
127127
maximumContentSize = computedIntrinsicWidthForConstraint(IntrinsicWidthMode::Maximum, lineBuilder, mayCacheLayoutResult);
128128
}
129129

@@ -135,7 +135,7 @@ InlineLayoutUnit IntrinsicWidthHandler::computedIntrinsicWidthForConstraint(Intr
135135
auto horizontalConstraints = HorizontalConstraints { };
136136
if (intrinsicWidthMode == IntrinsicWidthMode::Maximum)
137137
horizontalConstraints.logicalWidth = maxInlineLayoutUnit();
138-
auto layoutRange = InlineItemRange { 0 , m_inlineItemList.size() };
138+
auto layoutRange = InlineItemRange { 0 , inlineItemList().size() };
139139
if (layoutRange.isEmpty())
140140
return { };
141141

@@ -231,7 +231,7 @@ InlineLayoutUnit IntrinsicWidthHandler::simplifiedMinimumWidth(const ElementBox&
231231
InlineLayoutUnit IntrinsicWidthHandler::simplifiedMaximumWidth(MayCacheLayoutResult mayCacheLayoutResult)
232232
{
233233
ASSERT(root().firstChild() && root().firstChild() == root().lastChild());
234-
auto& inlineTextItem = downcast<InlineTextItem>(m_inlineItemList[0]);
234+
auto& inlineTextItem = downcast<InlineTextItem>(inlineItemList()[0]);
235235
auto& style = inlineTextItem.firstLineStyle();
236236

237237
auto contentLogicalWidth = TextUtil::width(inlineTextItem, style.fontCascade(), { });

Source/WebCore/layout/formattingContexts/inline/IntrinsicWidthHandler.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,19 +25,18 @@
2525

2626
#pragma once
2727

28+
#include "InlineContentCache.h"
2829
#include "LineLayoutResult.h"
2930

3031
namespace WebCore {
3132
namespace Layout {
3233

3334
class AbstractLineBuilder;
3435
class InlineFormattingContext;
35-
class InlineContentCache;
36-
struct IntrinsicWidthConstraints;
3736

3837
class IntrinsicWidthHandler {
3938
public:
40-
IntrinsicWidthHandler(InlineFormattingContext&, const InlineItemList&, bool mayUseSimplifiedTextOnlyInlineLayout);
39+
IntrinsicWidthHandler(InlineFormattingContext&, const InlineContentCache::InlineItems&);
4140

4241
InlineLayoutUnit minimumContentSize();
4342
InlineLayoutUnit maximumContentSize();
@@ -54,10 +53,11 @@ class IntrinsicWidthHandler {
5453
const InlineFormattingContext& formattingContext() const;
5554
const InlineContentCache& formattingState() const;
5655
const ElementBox& root() const;
56+
const InlineItemList& inlineItemList() const { return m_inlineItems.content(); }
5757

5858
private:
5959
InlineFormattingContext& m_inlineFormattingContext;
60-
const InlineItemList& m_inlineItemList;
60+
const InlineContentCache::InlineItems& m_inlineItems;
6161
const bool m_mayUseSimplifiedTextOnlyInlineLayout { false };
6262

6363
std::optional<InlineLayoutUnit> m_maximumContentWidthBetweenLineBreaks { };

0 commit comments

Comments
 (0)