Skip to content

Commit

Permalink
[IFC][Cleanup] Rename InlineDamage::start to InlineDamage::layoutStar…
Browse files Browse the repository at this point in the history
…tPosition

https://bugs.webkit.org/show_bug.cgi?id=271532

Reviewed by Antti Koivisto.

InlineDamage::start assumes the starting point of the damage, while in most cases start()
points to a line before the damage point. It defines the position where subsequent line layout should start from.

* Source/WebCore/layout/formattingContexts/inline/InlineFormattingContext.cpp:
(WebCore::Layout::partialRangeForDamage):
(WebCore::Layout::InlineFormattingContext::layout):
(WebCore::Layout::mayExitFromPartialLayout):
(WebCore::Layout::InlineFormattingContext::lineLayout):
(WebCore::Layout::InlineFormattingContext::rebuildInlineItemListIfNeeded):
* Source/WebCore/layout/formattingContexts/inline/invalidation/InlineDamage.h:
(WebCore::Layout::InlineDamage::layoutStartPosition const):
(WebCore::Layout::InlineDamage::setLayoutStartPosition):
(WebCore::Layout::InlineDamage::trailingContentForLine const):
(WebCore::Layout::InlineDamage::reset):
(WebCore::Layout::InlineDamage::start const): Deleted.
(WebCore::Layout::InlineDamage::setDamagedPosition): Deleted.
* Source/WebCore/layout/formattingContexts/inline/invalidation/InlineInvalidation.cpp:
(WebCore::Layout::InlineInvalidation::updateInlineDamage):
* Source/WebCore/layout/integration/LayoutIntegrationCoverage.cpp:
(WebCore::LayoutIntegration::shouldInvalidateLineLayoutPathAfterChangeFor):
* Source/WebCore/layout/integration/inline/LayoutIntegrationInlineContentBuilder.cpp:
(WebCore::LayoutIntegration::InlineContentBuilder::build const):
* Source/WebCore/layout/integration/inline/LayoutIntegrationLineLayout.cpp:
(WebCore::LayoutIntegration::LineLayout::layout):

Canonical link: https://commits.webkit.org/276615@main
  • Loading branch information
alanbaradlay committed Mar 24, 2024
1 parent e558e2a commit d196c00
Show file tree
Hide file tree
Showing 6 changed files with 25 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -64,17 +64,17 @@ WTF_MAKE_ISO_ALLOCATED_IMPL(InlineFormattingContext);

static std::optional<InlineItemRange> partialRangeForDamage(const InlineItemList& inlineItemList, const InlineDamage& lineDamage)
{
auto damageStartPosition = lineDamage.start()->inlineItemPosition;
if (damageStartPosition.index >= inlineItemList.size()) {
auto layoutStartPosition = lineDamage.layoutStartPosition()->inlineItemPosition;
if (layoutStartPosition.index >= inlineItemList.size()) {
ASSERT_NOT_REACHED();
return { };
}
auto* damagedInlineTextItem = dynamicDowncast<InlineTextItem>(inlineItemList[damageStartPosition.index]);
if (damageStartPosition.offset && (!damagedInlineTextItem || damageStartPosition.offset >= damagedInlineTextItem->length())) {
auto* damagedInlineTextItem = dynamicDowncast<InlineTextItem>(inlineItemList[layoutStartPosition.index]);
if (layoutStartPosition.offset && (!damagedInlineTextItem || layoutStartPosition.offset >= damagedInlineTextItem->length())) {
ASSERT_NOT_REACHED();
return { };
}
return InlineItemRange { damageStartPosition, { inlineItemList.size(), 0 } };
return InlineItemRange { layoutStartPosition, { inlineItemList.size(), 0 } };
}

static bool isEmptyInlineContent(const InlineItemList& inlineItemList)
Expand Down Expand Up @@ -132,11 +132,11 @@ InlineLayoutResult InlineFormattingContext::layout(const ConstraintsForInlineCon
auto previousLine = [&]() -> std::optional<PreviousLine> {
if (!needsLayoutRange.start)
return { };
if (!lineDamage || !lineDamage->start()) {
if (!lineDamage || !lineDamage->layoutStartPosition()) {
ASSERT_NOT_REACHED();
return { };
}
auto lastLineIndex = lineDamage->start()->lineIndex - 1;
auto lastLineIndex = lineDamage->layoutStartPosition()->lineIndex - 1;
// FIXME: We should be able to extract the last line information and provide it to layout as "previous line" (ends in line break and inline direction).
return PreviousLine { lastLineIndex, { }, { }, true, { }, { } };
};
Expand Down Expand Up @@ -250,7 +250,7 @@ LayoutUnit InlineFormattingContext::maximumContentSize(const InlineDamage* lineD

static bool mayExitFromPartialLayout(const InlineDamage& lineDamage, size_t lineIndex, const InlineDisplay::Boxes& newContent)
{
if (lineDamage.start()->lineIndex == lineIndex) {
if (lineDamage.layoutStartPosition()->lineIndex == lineIndex) {
// Never stop at the damaged line. Adding trailing overflowing content could easily produce the
// same set of display boxes for the first damaged line.
return false;
Expand All @@ -263,7 +263,7 @@ InlineLayoutResult InlineFormattingContext::lineLayout(AbstractLineBuilder& line
{
ASSERT(!needsLayoutRange.isEmpty());

auto isPartialLayout = lineDamage && lineDamage->start();
auto isPartialLayout = lineDamage && lineDamage->layoutStartPosition();
if (!isPartialLayout) {
ASSERT(!previousLine);
auto layoutResult = InlineLayoutResult { { }, InlineLayoutResult::Range::Full };
Expand Down Expand Up @@ -521,7 +521,7 @@ bool InlineFormattingContext::rebuildInlineItemListIfNeeded(const InlineDamage*
if (!inlineItemListNeedsUpdate)
return false;

auto needsLayoutStartPosition = !lineDamage || !lineDamage->start() ? InlineItemPosition() : lineDamage->start()->inlineItemPosition;
auto needsLayoutStartPosition = !lineDamage || !lineDamage->layoutStartPosition() ? InlineItemPosition() : lineDamage->layoutStartPosition()->inlineItemPosition;
InlineItemsBuilder { inlineContentCache, root(), m_layoutState.securityOrigin() }.build(needsLayoutStartPosition);
return true;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,12 +59,12 @@ class InlineDamage {
};
OptionSet<Reason> reasons() const { return m_damageReasons; }
// FIXME: Add support for damage range with multiple, different damage types.
struct Position {
struct LayoutPosition {
size_t lineIndex { 0 };
InlineItemPosition inlineItemPosition { };
LayoutUnit partialContentTop;
};
std::optional<Position> start() const { return m_startPosition; }
std::optional<LayoutPosition> layoutStartPosition() const { return m_layoutStartPosition; }
using TrailingDisplayBoxList = Vector<InlineDisplay::Box>;
std::optional<InlineDisplay::Box> trailingContentForLine(size_t lineIndex) const;

Expand All @@ -79,13 +79,13 @@ class InlineDamage {

void setDamageReason(Reason reason) { m_damageReasons.add(reason); }
void setDamageType(Type type) { m_damageType = type; }
void setDamagedPosition(Position position) { m_startPosition = position; }
void setLayoutStartPosition(LayoutPosition position) { m_layoutStartPosition = position; }
void reset();
void setTrailingDisplayBoxes(TrailingDisplayBoxList&& trailingDisplayBoxes) { m_trailingDisplayBoxes = WTFMove(trailingDisplayBoxes); }

Type m_damageType { Type::Invalid };
OptionSet<Reason> m_damageReasons;
std::optional<Position> m_startPosition;
std::optional<LayoutPosition> m_layoutStartPosition;
TrailingDisplayBoxList m_trailingDisplayBoxes;
Vector<UniqueRef<Box>> m_detachedLayoutBoxes;
};
Expand All @@ -96,11 +96,11 @@ inline std::optional<InlineDisplay::Box> InlineDamage::trailingContentForLine(si
// Couldn't compute trailing positions for damaged lines.
return { };
}
if (!start() || start()->lineIndex > lineIndex) {
if (!layoutStartPosition() || layoutStartPosition()->lineIndex > lineIndex) {
ASSERT_NOT_REACHED();
return { };
}
auto relativeLineIndex = lineIndex - start()->lineIndex;
auto relativeLineIndex = lineIndex - layoutStartPosition()->lineIndex;
if (relativeLineIndex >= m_trailingDisplayBoxes.size()) {
// At the time of the damage, we didn't have this line yet -e.g content insert at a new line.
return { };
Expand All @@ -118,7 +118,7 @@ inline void InlineDamage::reset()
{
m_damageType = { };
m_damageReasons = { };
m_startPosition = { };
m_layoutStartPosition = { };
m_trailingDisplayBoxes.clear();
// Never reset m_detachedLayoutBoxes. We need to keep those layout boxes around until after layout.
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -354,15 +354,15 @@ void InlineInvalidation::updateInlineDamage(InlineDamage::Type type, std::option

auto partialContentTop = LayoutUnit { invalidatedLine->index ? m_displayContent.lines[invalidatedLine->index - 1].lineBoxLogicalRect().maxY() : 0 } + pageTopAdjustment;

auto damagedPosition = InlineDamage::Position {
auto layoutStartPosition = InlineDamage::LayoutPosition {
invalidatedLine->index,
invalidatedLine->leadingInlineItemPosition,
partialContentTop
};

m_inlineDamage.setDamageType(type);
m_inlineDamage.setDamageReason(*reason);
m_inlineDamage.setDamagedPosition(WTFMove(damagedPosition));
m_inlineDamage.setLayoutStartPosition(WTFMove(layoutStartPosition));

if (shouldApplyRangeLayout == ShouldApplyRangeLayout::Yes)
m_inlineDamage.setTrailingDisplayBoxes(trailingDisplayBoxesAfterDamagedLine(invalidatedLine->index, m_displayContent));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ bool shouldInvalidateLineLayoutPathAfterChangeFor(const RenderBlockFlow& rootBlo
if (hasFirstLetter())
return true;

if (auto* previousDamage = lineLayout.damage(); previousDamage && (previousDamage->reasons() != Layout::InlineDamage::Reason::Append || !previousDamage->start())) {
if (auto* previousDamage = lineLayout.damage(); previousDamage && (previousDamage->reasons() != Layout::InlineDamage::Reason::Append || !previousDamage->layoutStartPosition())) {
// Only support subsequent append operations where we managed to invalidate the content for partial layout.
return true;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,9 +80,9 @@ FloatRect InlineContentBuilder::build(Layout::InlineLayoutResult&& layoutResult,

auto firstDamagedLineIndex = [&]() -> std::optional<size_t> {
auto& displayContentFromPreviousLayout = inlineContent.displayContent();
if (!lineDamage || !lineDamage->start() || !displayContentFromPreviousLayout.lines.size())
if (!lineDamage || !lineDamage->layoutStartPosition() || !displayContentFromPreviousLayout.lines.size())
return { };
auto canidateLineIndex = lineDamage->start()->lineIndex;
auto canidateLineIndex = lineDamage->layoutStartPosition()->lineIndex;
if (canidateLineIndex >= displayContentFromPreviousLayout.lines.size()) {
ASSERT_NOT_REACHED();
return { };
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -314,7 +314,7 @@ std::optional<LayoutRect> LineLayout::layout()
{
preparePlacedFloats();

auto isPartialLayout = m_lineDamage && m_lineDamage->start();
auto isPartialLayout = m_lineDamage && m_lineDamage->layoutStartPosition();

auto clearInlineContentAndCacheBeforeFullLayoutIfNeeded = [&] {
if (isPartialLayout)
Expand All @@ -338,14 +338,14 @@ std::optional<LayoutRect> LineLayout::layout()
auto inlineContentConstraints = [&]() -> Layout::ConstraintsForInlineContent {
if (!isPartialLayout || !m_inlineContent)
return *m_inlineContentConstraints;
auto damagedLineIndex = m_lineDamage->start()->lineIndex;
auto damagedLineIndex = m_lineDamage->layoutStartPosition()->lineIndex;
if (!damagedLineIndex)
return *m_inlineContentConstraints;
if (damagedLineIndex >= m_inlineContent->displayContent().lines.size()) {
ASSERT_NOT_REACHED();
return *m_inlineContentConstraints;
}
auto constraintsForInFlowContent = Layout::ConstraintsForInFlowContent { m_inlineContentConstraints->horizontal(), m_lineDamage->start()->partialContentTop };
auto constraintsForInFlowContent = Layout::ConstraintsForInFlowContent { m_inlineContentConstraints->horizontal(), m_lineDamage->layoutStartPosition()->partialContentTop };
return { constraintsForInFlowContent, m_inlineContentConstraints->visualLeft() };
};

Expand Down

0 comments on commit d196c00

Please sign in to comment.