@@ -137,7 +137,7 @@ LineBox::LineBox(const InlineFormattingContext& inlineFormattingContext, InlineL
137
137
alignInlineBoxesVerticallyAndComputeLineBoxHeight ();
138
138
}
139
139
140
- Display::InlineRect LineBox::inlineRectForTextRun (const Line::Run& run) const
140
+ Display::InlineRect LineBox::logicalRectForTextRun (const Line::Run& run) const
141
141
{
142
142
ASSERT (run.isText () || run.isLineBreak ());
143
143
auto & parentInlineBox = inlineBoxForLayoutBox (run.layoutBox ().parent ());
@@ -161,15 +161,13 @@ void LineBox::constructInlineBoxes(const Line::RunList& runs)
161
161
constructRootInlineBox ();
162
162
163
163
for (auto & run : runs) {
164
- auto & layoutBox = run.layoutBox ();
164
+ auto & inlineLevelBox = run.layoutBox ();
165
165
if (run.isBox ()) {
166
- auto & boxGeometry = formattingContext ().geometryForBox (layoutBox);
167
- auto inlineBoxLogicalLeft = m_horizontalAlignmentOffset.valueOr (InlineLayoutUnit { }) + run.logicalLeft ();
168
- if (layoutBox.isInlineBlockBox () && layoutBox.establishesInlineFormattingContext ()) {
169
- auto & formattingState = layoutState ().establishedInlineFormattingState (downcast<ContainerBox>(layoutBox));
170
- // Spec makes us generate at least one line -even if it is empty.
171
- auto & lastLine = formattingState.displayInlineContent ()->lines .last ();
172
- auto inlineBlockBaseline = lastLine.top () + lastLine.baseline ();
166
+ auto logicalLeft = m_horizontalAlignmentOffset.valueOr (InlineLayoutUnit { }) + run.logicalLeft ();
167
+ auto & inlineLevelBoxGeometry = formattingContext ().geometryForBox (inlineLevelBox);
168
+ auto logicalHeight = inlineLevelBoxGeometry.marginBoxHeight ();
169
+ auto baseline = logicalHeight;
170
+ if (inlineLevelBox.isInlineBlockBox () && inlineLevelBox.establishesInlineFormattingContext ()) {
173
171
// The inline-block's baseline offset is relative to its content box. Let's convert it relative to the margin box.
174
172
// _______________ <- margin box
175
173
// |
@@ -182,32 +180,29 @@ void LineBox::constructInlineBoxes(const Line::RunList& runs)
182
180
// text | | | v text
183
181
// -----|-|-|---------- <- baseline
184
182
//
185
- auto adjustedBaseline = boxGeometry.marginBefore () + boxGeometry.borderTop () + boxGeometry.paddingTop ().valueOr (0 ) + inlineBlockBaseline;
186
- auto inlineBoxRect = Display::InlineRect { { }, inlineBoxLogicalLeft, run.logicalWidth (), boxGeometry.marginBoxHeight () };
187
- auto inlineBox = makeUnique<InlineBox>(layoutBox, inlineBoxRect, adjustedBaseline, InlineLayoutUnit { }, InlineBox::IsConsideredEmpty::No);
188
- m_inlineBoxRectMap.set (&layoutBox, inlineBox.get ());
189
- m_inlineBoxList.append (WTFMove (inlineBox));
190
- } else {
191
- auto runHeight = boxGeometry.marginBoxHeight ();
192
- auto inlineBoxRect = Display::InlineRect { { }, inlineBoxLogicalLeft, run.logicalWidth (), runHeight };
193
- auto inlineBox = makeUnique<InlineBox>(layoutBox, inlineBoxRect, runHeight, InlineLayoutUnit { }, InlineBox::IsConsideredEmpty::No);
194
- m_inlineBoxRectMap.set (&layoutBox, inlineBox.get ());
195
- m_inlineBoxList.append (WTFMove (inlineBox));
183
+ auto & formattingState = layoutState ().establishedInlineFormattingState (downcast<ContainerBox>(inlineLevelBox));
184
+ auto & lastLine = formattingState.displayInlineContent ()->lines .last ();
185
+ auto inlineBlockBaseline = lastLine.top () + lastLine.baseline ();
186
+ baseline = inlineLevelBoxGeometry.marginBefore () + inlineLevelBoxGeometry.borderTop () + inlineLevelBoxGeometry.paddingTop ().valueOr (0 ) + inlineBlockBaseline;
196
187
}
188
+ auto rect = Display::InlineRect { { }, logicalLeft, run.logicalWidth (), logicalHeight };
189
+ auto inlineBox = makeUnique<InlineBox>(inlineLevelBox, rect, baseline, InlineLayoutUnit { }, InlineBox::IsConsideredEmpty::No);
190
+ m_inlineBoxRectMap.set (&inlineLevelBox, inlineBox.get ());
191
+ m_inlineBoxList.append (WTFMove (inlineBox));
197
192
} else if (run.isContainerStart ()) {
198
193
auto inlineBoxLogicalLeft = m_horizontalAlignmentOffset.valueOr (InlineLayoutUnit { }) + run.logicalLeft ();
199
194
auto initialWidth = logicalWidth () - run.logicalLeft ();
200
195
ASSERT (initialWidth >= 0 );
201
- auto & fontMetrics = layoutBox .style ().fontMetrics ();
196
+ auto & fontMetrics = inlineLevelBox .style ().fontMetrics ();
202
197
InlineLayoutUnit logicalHeight = fontMetrics.height ();
203
198
InlineLayoutUnit baseline = fontMetrics.ascent ();
204
199
auto inlineBoxRect = Display::InlineRect { { }, inlineBoxLogicalLeft, initialWidth, logicalHeight };
205
- auto inlineBox = makeUnique<InlineBox>(layoutBox , inlineBoxRect, baseline, logicalHeight - baseline, InlineBox::IsConsideredEmpty::Yes);
206
- m_inlineBoxRectMap.set (&layoutBox , inlineBox.get ());
200
+ auto inlineBox = makeUnique<InlineBox>(inlineLevelBox , inlineBoxRect, baseline, logicalHeight - baseline, InlineBox::IsConsideredEmpty::Yes);
201
+ m_inlineBoxRectMap.set (&inlineLevelBox , inlineBox.get ());
207
202
m_inlineBoxList.append (WTFMove (inlineBox));
208
203
} else if (run.isContainerEnd ()) {
209
204
// Adjust the logical width when the inline level container closes on this line.
210
- auto & inlineBox = *m_inlineBoxRectMap.get (&layoutBox );
205
+ auto & inlineBox = *m_inlineBoxRectMap.get (&inlineLevelBox );
211
206
inlineBox.setLogicalWidth (run.logicalRight () - inlineBox.logicalLeft ());
212
207
} else if ((run.isText () || run.isLineBreak ())) {
213
208
auto & containerBox = run.layoutBox ().parent ();
0 commit comments