X-Git-Url: http://git.webkit.org/?p=WebKit-https.git;a=blobdiff_plain;f=Source%2FWebCore%2Flayout%2Finlineformatting%2FInlineFormattingContext.cpp;h=6f1ab7294f0de2336cc38e53fbdaf8856fa1b9c7;hp=61b7a6254696be624e2d9ac41e2038b03ae9fc54;hb=0b44837f82e3d2ea53bb069017f8b0d1ba2bbec7;hpb=b28b1a72770d136e9c4518a98e01562bda096a7d diff --git a/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp b/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp index 61b7a62..6f1ab72 100644 --- a/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp +++ b/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp @@ -101,17 +101,30 @@ static bool trimLeadingRun(const InlineLineBreaker::Run& run) return run.content.style().collapseWhiteSpace(); } -void InlineFormattingContext::layoutInlineContent(const LayoutContext& layoutContext, InlineFormattingState& inlineFormattingState, const InlineRunProvider& inlineRunProvider) const +void InlineFormattingContext::initializeNewLine(const LayoutContext& layoutContext, Line& line) const { auto& formattingRoot = downcast(root()); auto& formattingRootDisplayBox = layoutContext.displayBoxForLayoutBox(formattingRoot); auto lineLogicalLeft = formattingRootDisplayBox.contentBoxLeft(); + auto lineLogicalTop = line.isFirstLine() ? formattingRootDisplayBox.contentBoxTop() : line.logicalBottom(); auto availableWidth = formattingRootDisplayBox.contentBoxWidth(); + + Display::Box::Rect logicalRect; + logicalRect.setTop(lineLogicalTop); + logicalRect.setLeft(lineLogicalLeft); + logicalRect.setWidth(availableWidth); + logicalRect.setHeight(formattingRoot.style().computedLineHeight()); + + line.init(logicalRect); +} + +void InlineFormattingContext::layoutInlineContent(const LayoutContext& layoutContext, InlineFormattingState& inlineFormattingState, const InlineRunProvider& inlineRunProvider) const +{ auto previousRunPositionIsLineEnd = false; Line line(inlineFormattingState, root()); - line.init(lineLogicalLeft, availableWidth); + initializeNewLine(layoutContext, line); InlineLineBreaker lineBreaker(layoutContext, inlineFormattingState.inlineContent(), inlineRunProvider.runs()); while (auto run = lineBreaker.nextRun(line.contentLogicalRight(), line.availableWidth(), !line.hasContent())) { @@ -122,7 +135,7 @@ void InlineFormattingContext::layoutInlineContent(const LayoutContext& layoutCon // Previous run ended up being at the line end. Adjust the line accordingly. if (!previousRunPositionIsLineEnd) { line.close(); - line.init(lineLogicalLeft, availableWidth); + initializeNewLine(layoutContext, line); } // Skip leading whitespace. if (!trimLeadingRun(*run)) @@ -136,7 +149,7 @@ void InlineFormattingContext::layoutInlineContent(const LayoutContext& layoutCon line.appendContent(*run); // Move over to the next line. line.close(); - line.init(lineLogicalLeft, availableWidth); + initializeNewLine(layoutContext, line); continue; }