Skip to content
This repository was archived by the owner on Jun 24, 2022. It is now read-only.

Commit 2679527

Browse files
[LFC Display] Create display boxes for atomic inlines and inline blocks
https://bugs.webkit.org/show_bug.cgi?id=218153 Reviewed by Zalan Bujtas. When iterating line runs, recurse into container layout boxes for inline-block, and make display boxes for other textless runs for other atomic inlines like replaced elements. * display/DisplayTreeBuilder.cpp: (WebCore::Display::TreeBuilder::buildInlineDisplayTree const): git-svn-id: http://svn.webkit.org/repository/webkit/trunk@268954 268f45cc-cd09-0410-ab3c-d52691b4dbfc
1 parent 7bf83cd commit 2679527

File tree

2 files changed

+35
-9
lines changed

2 files changed

+35
-9
lines changed

Source/WebCore/ChangeLog

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,17 @@
1+
2020-10-24 Simon Fraser <[email protected]>
2+
3+
[LFC Display] Create display boxes for atomic inlines and inline blocks
4+
https://bugs.webkit.org/show_bug.cgi?id=218153
5+
6+
Reviewed by Zalan Bujtas.
7+
8+
When iterating line runs, recurse into container layout boxes for inline-block, and
9+
make display boxes for other textless runs for other atomic inlines like replaced
10+
elements.
11+
12+
* display/DisplayTreeBuilder.cpp:
13+
(WebCore::Display::TreeBuilder::buildInlineDisplayTree const):
14+
115
2020-10-24 Simon Fraser <[email protected]>
216

317
[LFC Display] Simplify display tree building

Source/WebCore/display/DisplayTreeBuilder.cpp

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -95,19 +95,31 @@ void TreeBuilder::buildInlineDisplayTree(const Layout::LayoutState& layoutState,
9595
auto& inlineFormattingState = layoutState.establishedInlineFormattingState(inlineFormattingRoot);
9696

9797
for (auto& run : inlineFormattingState.lineRuns()) {
98-
auto& lineGeometry = inlineFormattingState.lines().at(run.lineIndex());
98+
if (run.text()) {
99+
auto& lineGeometry = inlineFormattingState.lines().at(run.lineIndex());
99100

100-
auto lineRect = lineGeometry.logicalRect();
101-
auto lineLayoutRect = LayoutRect { lineRect.left(), lineRect.top(), lineRect.width(), lineRect.height() };
101+
auto lineRect = lineGeometry.logicalRect();
102+
auto lineLayoutRect = LayoutRect { lineRect.left(), lineRect.top(), lineRect.width(), lineRect.height() };
102103

103-
auto runRect = LayoutRect { run.logicalLeft(), run.logicalTop(), run.logicalWidth(), run.logicalHeight() };
104-
runRect.moveBy(lineLayoutRect.location());
105-
runRect.move(offsetFromRoot);
104+
auto runRect = LayoutRect { run.logicalLeft(), run.logicalTop(), run.logicalWidth(), run.logicalHeight() };
105+
runRect.moveBy(lineLayoutRect.location());
106+
runRect.move(offsetFromRoot);
106107

107-
auto style = Style { run.layoutBox().style() };
108-
auto textBox = makeUnique<TextBox>(snapRectToDevicePixels(runRect, m_pixelSnappingFactor), WTFMove(style), run);
108+
auto style = Style { run.layoutBox().style() };
109+
auto textBox = makeUnique<TextBox>(snapRectToDevicePixels(runRect, m_pixelSnappingFactor), WTFMove(style), run);
109110

110-
insert(WTFMove(textBox), insertionPosition);
111+
insert(WTFMove(textBox), insertionPosition);
112+
continue;
113+
}
114+
115+
if (is<Layout::ContainerBox>(run.layoutBox())) {
116+
recursiveBuildDisplayTree(layoutState, offsetFromRoot, run.layoutBox(), insertionPosition);
117+
continue;
118+
}
119+
120+
auto geometry = layoutState.geometryForBox(run.layoutBox());
121+
auto displayBox = displayBoxForLayoutBox(geometry, run.layoutBox(), offsetFromRoot);
122+
insert(WTFMove(displayBox), insertionPosition);
111123
}
112124
}
113125

0 commit comments

Comments
 (0)