Skip to content

Commit

Permalink
[IFC] Do not run collectInkOverflowForTextDecorations unless there's …
Browse files Browse the repository at this point in the history
…text decoration

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

Reviewed by Antti Koivisto.

* Source/WebCore/layout/formattingContexts/inline/display/InlineDisplayContentBuilder.cpp:
(WebCore::Layout::InlineDisplayContentBuilder::build):
(WebCore::Layout::InlineDisplayContentBuilder::appendTextDisplayBox):
(WebCore::Layout::InlineDisplayContentBuilder::collectInkOverflowForTextDecorations):
(WebCore::Layout::InlineDisplayContentBuilder::processFloatBoxes): Deleted.
* Source/WebCore/layout/formattingContexts/inline/display/InlineDisplayContentBuilder.h:

Canonical link: https://commits.webkit.org/273630@main
  • Loading branch information
alanbaradlay committed Jan 28, 2024
1 parent 0d2c7f7 commit 5cf3cdb
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,6 @@ InlineDisplay::Boxes InlineDisplayContentBuilder::build(const LineLayoutResult&
processBidiContent(lineLayoutResult, boxes);
else
processNonBidiContent(lineLayoutResult, boxes);
processFloatBoxes(lineLayoutResult);
processRubyContent(boxes, lineLayoutResult);

collectInkOverflowForTextDecorations(boxes);
Expand Down Expand Up @@ -167,6 +166,8 @@ void InlineDisplayContentBuilder::appendTextDisplayBox(const Line::Run& lineRun,
auto& text = lineRun.textContent();
auto isContentful = true;

m_hasSeenTextDecoration = m_hasSeenTextDecoration || (!lineIndex() ? inlineTextBox.parent().firstLineStyle().textDecorationsInEffect() : inlineTextBox.parent().style().textDecorationsInEffect());

auto inkOverflow = [&] {
auto inkOverflow = textRunRect;

Expand Down Expand Up @@ -861,14 +862,6 @@ void InlineDisplayContentBuilder::processBidiContent(const LineLayoutResult& lin
handleTrailingOpenInlineBoxes();
}

void InlineDisplayContentBuilder::processFloatBoxes(const LineLayoutResult&)
{
// Float boxes are not part of the inline content so we don't construct inline display boxes for them.
// However box geometry still needs flipping from logical to visual.
// FIXME: Figure out how to preserve logical coordinates for subsequent layout frames and have visual output the same time. For the time being
// this is done at LineLayout::constructContent.
}

void InlineDisplayContentBuilder::collectInkOverflowForInlineBoxes(InlineDisplay::Boxes& boxes)
{
if (!m_contentHasInkOverflow)
Expand Down Expand Up @@ -989,6 +982,9 @@ static float logicalBottomForTextDecorationContent(const InlineDisplay::Boxes& b

void InlineDisplayContentBuilder::collectInkOverflowForTextDecorations(InlineDisplay::Boxes& boxes)
{
if (!m_hasSeenTextDecoration)
return;

auto logicalBottomForTextDecoration = std::optional<float> { };
auto writingMode = root().style().writingMode();
auto isHorizontalWritingMode = WebCore::isHorizontalWritingMode(writingMode);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,6 @@ class InlineDisplayContentBuilder {
private:
void processNonBidiContent(const LineLayoutResult&, InlineDisplay::Boxes&);
void processBidiContent(const LineLayoutResult&, InlineDisplay::Boxes&);
void processFloatBoxes(const LineLayoutResult&);
void collectInkOverflowForInlineBoxes(InlineDisplay::Boxes&);
void collectInkOverflowForTextDecorations(InlineDisplay::Boxes&);
void truncateForEllipsisPolicy(LineEndingEllipsisPolicy, const LineLayoutResult&, InlineDisplay::Boxes&);
Expand Down Expand Up @@ -99,6 +98,7 @@ class InlineDisplayContentBuilder {
bool m_lineIsFullyTruncatedInBlockDirection { false };
bool m_contentHasInkOverflow { false };
bool m_hasSeenRubyBase { false };
bool m_hasSeenTextDecoration { false };
};

}
Expand Down

0 comments on commit 5cf3cdb

Please sign in to comment.