From 989d21792f1ef8345eb3010438ec1541e56f5c18 Mon Sep 17 00:00:00 2001 From: "hyatt@apple.com" Date: Thu, 9 Feb 2012 01:50:05 +0000 Subject: [PATCH] Source/WebCore: https://bugs.webkit.org/show_bug.cgi?id=78157 Make multi-column layout work with line grids that are outside of the multi-column block. Reviewed by Dan Bernstein. Added new tests in fast/line-grid. * rendering/LayoutState.cpp: (WebCore::LayoutState::LayoutState): (WebCore::LayoutState::propagateLineGridInfo): (WebCore::LayoutState::establishLineGrid): (WebCore): (WebCore::LayoutState::computeLineGridPaginationOrigin): * rendering/LayoutState.h: (WebCore::LayoutState::LayoutState): (WebCore::LayoutState::lineGrid): (WebCore::LayoutState::lineGridOffset): (WebCore::LayoutState::lineGridPaginationOrigin): (WebCore::LayoutState::needsBlockDirectionLocationSetBeforeLayout): (LayoutState): * rendering/RenderBlock.cpp: (WebCore::RenderBlock::layoutBlockChildren): * rendering/RenderBlockLineLayout.cpp: (WebCore::RenderBlock::layoutInlineChildren): * rendering/RenderView.h: (WebCore::RenderView::pushLayoutState): * rendering/RootInlineBox.cpp: (WebCore::RootInlineBox::lineGridSnapAdjustment): LayoutTests: https://bugs.webkit.org/show_bug.cgi?id=78157 Make multi-column layout work with line grids that are outside of the multi-column block. Reviewed by Dan Bernstein. * fast/line-grid/line-grid-into-columns.html: Added. * platform/mac/fast/line-grid/line-grid-into-columns-expected.png: Added. * platform/mac/fast/line-grid/line-grid-into-columns-expected.txt: Added. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@107160 268f45cc-cd09-0410-ab3c-d52691b4dbfc --- LayoutTests/ChangeLog | 13 +++ .../fast/line-grid/line-grid-into-columns.html | 50 ++++++++++++ .../line-grid/line-grid-into-columns-expected.png | Bin 0 -> 55085 bytes .../line-grid/line-grid-into-columns-expected.txt | 89 +++++++++++++++++++++ Source/WebCore/ChangeLog | 33 ++++++++ Source/WebCore/rendering/LayoutState.cpp | 78 ++++++++++++++---- Source/WebCore/rendering/LayoutState.h | 18 +++-- Source/WebCore/rendering/RenderBlock.cpp | 2 +- Source/WebCore/rendering/RenderBlockLineLayout.cpp | 2 +- Source/WebCore/rendering/RenderView.h | 2 +- Source/WebCore/rendering/RootInlineBox.cpp | 19 +++-- 11 files changed, 272 insertions(+), 34 deletions(-) create mode 100644 LayoutTests/fast/line-grid/line-grid-into-columns.html create mode 100644 LayoutTests/platform/mac/fast/line-grid/line-grid-into-columns-expected.png create mode 100644 LayoutTests/platform/mac/fast/line-grid/line-grid-into-columns-expected.txt diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog index 73139a6..a096867 100644 --- a/LayoutTests/ChangeLog +++ b/LayoutTests/ChangeLog @@ -1,3 +1,16 @@ +2012-02-08 David Hyatt + + https://bugs.webkit.org/show_bug.cgi?id=78157 + + Make multi-column layout work with line grids that are outside of the multi-column + block. + + Reviewed by Dan Bernstein. + + * fast/line-grid/line-grid-into-columns.html: Added. + * platform/mac/fast/line-grid/line-grid-into-columns-expected.png: Added. + * platform/mac/fast/line-grid/line-grid-into-columns-expected.txt: Added. + 2012-02-08 Matt Falkenhagen Improve http-equiv content-language parsing diff --git a/LayoutTests/fast/line-grid/line-grid-into-columns.html b/LayoutTests/fast/line-grid/line-grid-into-columns.html new file mode 100644 index 0000000..8d5faaf --- /dev/null +++ b/LayoutTests/fast/line-grid/line-grid-into-columns.html @@ -0,0 +1,50 @@ + + + + + + + +
+
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+
+
+
+All of this text even though it's smaller should be on the 36px +grid. The grid should reset at the top of the second column.
+All of this text even though it's smaller should be on the 36px +grid. The grid should reset at the top of the second column.
+All of this text even though it's smaller should be on the 36px +grid. The grid should reset at the top of the second column.
+
+
+All of this text even though it's smaller should be on the 36px +grid. The grid should reset at the top of the second column.
+All of this text even though it's smaller should be on the 36px +grid. The grid should reset at the top of the second column.
+All of this text even though it's smaller should be on the 36px +grid. The grid should reset at the top of the second column.
+
+
+All of this text even though it's smaller should be on the 36px +grid. +
+
+
+ + diff --git a/LayoutTests/platform/mac/fast/line-grid/line-grid-into-columns-expected.png b/LayoutTests/platform/mac/fast/line-grid/line-grid-into-columns-expected.png new file mode 100644 index 0000000000000000000000000000000000000000..43c9b66421fe811d99fffe20cae36ecc1a505d91 GIT binary patch literal 55085 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 rD?`@kHXU3{ + + https://bugs.webkit.org/show_bug.cgi?id=78157 + + Make multi-column layout work with line grids that are outside of the multi-column + block. + + Reviewed by Dan Bernstein. + + Added new tests in fast/line-grid. + + * rendering/LayoutState.cpp: + (WebCore::LayoutState::LayoutState): + (WebCore::LayoutState::propagateLineGridInfo): + (WebCore::LayoutState::establishLineGrid): + (WebCore): + (WebCore::LayoutState::computeLineGridPaginationOrigin): + * rendering/LayoutState.h: + (WebCore::LayoutState::LayoutState): + (WebCore::LayoutState::lineGrid): + (WebCore::LayoutState::lineGridOffset): + (WebCore::LayoutState::lineGridPaginationOrigin): + (WebCore::LayoutState::needsBlockDirectionLocationSetBeforeLayout): + (LayoutState): + * rendering/RenderBlock.cpp: + (WebCore::RenderBlock::layoutBlockChildren): + * rendering/RenderBlockLineLayout.cpp: + (WebCore::RenderBlock::layoutInlineChildren): + * rendering/RenderView.h: + (WebCore::RenderView::pushLayoutState): + * rendering/RootInlineBox.cpp: + (WebCore::RootInlineBox::lineGridSnapAdjustment): + 2012-02-08 Matthew Delaney GeneratorGeneratedImage::drawPattern does not factor in its destination context's scale when generating its image tiles diff --git a/Source/WebCore/rendering/LayoutState.cpp b/Source/WebCore/rendering/LayoutState.cpp index c59e970..c9018c5 100644 --- a/Source/WebCore/rendering/LayoutState.cpp +++ b/Source/WebCore/rendering/LayoutState.cpp @@ -37,7 +37,7 @@ namespace WebCore { LayoutState::LayoutState(LayoutState* prev, RenderBox* renderer, const LayoutSize& offset, LayoutUnit pageLogicalHeight, bool pageLogicalHeightChanged, ColumnInfo* columnInfo) : m_columnInfo(columnInfo) - , m_currentLineGrid(0) + , m_lineGrid(0) , m_next(prev) #ifndef NDEBUG , m_renderer(renderer) @@ -102,6 +102,9 @@ LayoutState::LayoutState(LayoutState* prev, RenderBox* renderer, const LayoutSiz m_pageLogicalHeight = 0; } + // Propagate line grid information. + propagateLineGridInfo(renderer); + if (!m_columnInfo) m_columnInfo = m_next->m_columnInfo; @@ -109,8 +112,8 @@ LayoutState::LayoutState(LayoutState* prev, RenderBox* renderer, const LayoutSiz m_isPaginated = m_pageLogicalHeight || m_columnInfo; - // Propagate line grid information. - propagateLineGridInfo(renderer); + if (lineGrid() && renderer->hasColumns() && renderer->style()->hasInlineColumnAxis()) + computeLineGridPaginationOrigin(renderer); // If we have a new grid to track, then add it to our set. if (renderer->style()->lineGrid() != RenderStyle::initialLineGrid() && renderer->isBlockFlow()) @@ -125,7 +128,7 @@ LayoutState::LayoutState(LayoutState* prev, RenderFlowThread* flowThread, bool r , m_pageLogicalHeight(1) // Use a fake height here. That value is not important, just needs to be non-zero. , m_pageLogicalHeightChanged(regionsChanged) , m_columnInfo(0) - , m_currentLineGrid(0) + , m_lineGrid(0) , m_next(prev) #ifndef NDEBUG , m_renderer(flowThread) @@ -142,7 +145,7 @@ LayoutState::LayoutState(RenderObject* root) , m_pageLogicalHeight(0) , m_pageLogicalHeightChanged(false) , m_columnInfo(0) - , m_currentLineGrid(0) + , m_lineGrid(0) , m_next(0) #ifndef NDEBUG , m_renderer(root) @@ -213,34 +216,77 @@ void LayoutState::propagateLineGridInfo(RenderBox* renderer) if (!m_next || renderer->isUnsplittableForPagination()) return; - m_currentLineGrid = m_next->m_currentLineGrid; - m_currentLineGridOffset = m_next->m_currentLineGridOffset; + m_lineGrid = m_next->m_lineGrid; + m_lineGridOffset = m_next->m_lineGridOffset; + m_lineGridPaginationOrigin = m_next->m_lineGridPaginationOrigin; } void LayoutState::establishLineGrid(RenderBlock* block) { // First check to see if this grid has been established already. - if (m_currentLineGrid) { - if (m_currentLineGrid->style()->lineGrid() == block->style()->lineGrid()) + if (m_lineGrid) { + if (m_lineGrid->style()->lineGrid() == block->style()->lineGrid()) return; - RenderBlock* currentGrid = m_currentLineGrid; + RenderBlock* currentGrid = m_lineGrid; for (LayoutState* currentState = m_next; currentState; currentState = currentState->m_next) { - if (currentState->m_currentLineGrid == currentGrid) + if (currentState->m_lineGrid == currentGrid) continue; - currentGrid = currentState->m_currentLineGrid; + currentGrid = currentState->m_lineGrid; if (!currentGrid) break; if (currentGrid->style()->lineGrid() == block->style()->lineGrid()) { - m_currentLineGrid = currentGrid; - m_currentLineGridOffset = currentState->m_currentLineGridOffset; + m_lineGrid = currentGrid; + m_lineGridOffset = currentState->m_lineGridOffset; return; } } } // We didn't find an already-established grid with this identifier. Our render object establishes the grid. - m_currentLineGrid = block; - m_currentLineGridOffset = m_layoutOffset; + m_lineGrid = block; + m_lineGridOffset = m_layoutOffset; +} + +void LayoutState::computeLineGridPaginationOrigin(RenderBox* renderer) +{ + // We need to cache a line grid pagination origin so that we understand how to reset the line grid + // at the top of each column. + // Get the current line grid and offset. + if (!lineGrid() || lineGrid()->style()->writingMode() != renderer->style()->writingMode()) + return; + + // Get the hypothetical line box used to establish the grid. + RootInlineBox* lineGridBox = lineGrid()->lineGridBox(); + if (!lineGridBox) + return; + + bool isHorizontalWritingMode = lineGrid()->isHorizontalWritingMode(); + + LayoutUnit lineGridBlockOffset = isHorizontalWritingMode ? lineGridOffset().height() : lineGridOffset().width(); + + // Now determine our position on the grid. Our baseline needs to be adjusted to the nearest baseline multiple + // as established by the line box. + // FIXME: Need to handle crazy line-box-contain values that cause the root line box to not be considered. I assume + // the grid should honor line-box-contain. + LayoutUnit gridLineHeight = lineGridBox->lineBottomWithLeading() - lineGridBox->lineTopWithLeading(); + if (!gridLineHeight) + return; + + LayoutUnit firstLineTopWithLeading = lineGridBlockOffset + lineGridBox->lineTopWithLeading(); + + if (isPaginated() && pageLogicalHeight()) { + LayoutUnit pageLogicalTop = renderer->isHorizontalWritingMode() ? m_pageOffset.height() : m_pageOffset.width(); + if (pageLogicalTop > firstLineTopWithLeading) { + // Shift to the next highest line grid multiple past the page logical top. Cache the delta + // between this new value and the page logical top as the pagination origin. + LayoutUnit remainder = (pageLogicalTop - firstLineTopWithLeading) % gridLineHeight; + LayoutUnit paginationDelta = gridLineHeight - remainder; + if (isHorizontalWritingMode) + m_lineGridPaginationOrigin.setHeight(paginationDelta); + else + m_lineGridPaginationOrigin.setWidth(paginationDelta); + } + } } } // namespace WebCore diff --git a/Source/WebCore/rendering/LayoutState.h b/Source/WebCore/rendering/LayoutState.h index 951be3f..e1df24b 100644 --- a/Source/WebCore/rendering/LayoutState.h +++ b/Source/WebCore/rendering/LayoutState.h @@ -48,7 +48,7 @@ public: , m_pageLogicalHeight(0) , m_pageLogicalHeightChanged(false) , m_columnInfo(0) - , m_currentLineGrid(0) + , m_lineGrid(0) , m_next(0) #ifndef NDEBUG , m_renderer(0) @@ -81,12 +81,13 @@ public: LayoutUnit pageLogicalHeight() const { return m_pageLogicalHeight; } bool pageLogicalHeightChanged() const { return m_pageLogicalHeightChanged; } - RenderBlock* currentLineGrid() const { return m_currentLineGrid; } - LayoutSize currentLineGridOffset() const { return m_currentLineGridOffset; } + RenderBlock* lineGrid() const { return m_lineGrid; } + LayoutSize lineGridOffset() const { return m_lineGridOffset; } + LayoutSize lineGridPaginationOrigin() const { return m_lineGridPaginationOrigin; } LayoutSize layoutOffset() const { return m_layoutOffset; } - bool needsBlockDirectionLocationSetBeforeLayout() const { return m_currentLineGrid || (m_isPaginated && m_pageLogicalHeight); } + bool needsBlockDirectionLocationSetBeforeLayout() const { return m_lineGrid || (m_isPaginated && m_pageLogicalHeight); } private: // The normal operator new is disallowed. @@ -95,6 +96,8 @@ private: void propagateLineGridInfo(RenderBox*); void establishLineGrid(RenderBlock*); + void computeLineGridPaginationOrigin(RenderBox*); + public: bool m_clipped; bool m_isPaginated; @@ -119,9 +122,10 @@ public: ColumnInfo* m_columnInfo; // The current line grid that we're snapping to and the offset of the start of the grid. - RenderBlock* m_currentLineGrid; - LayoutSize m_currentLineGridOffset; - + RenderBlock* m_lineGrid; + LayoutSize m_lineGridOffset; + LayoutSize m_lineGridPaginationOrigin; + LayoutState* m_next; #ifndef NDEBUG RenderObject* m_renderer; diff --git a/Source/WebCore/rendering/RenderBlock.cpp b/Source/WebCore/rendering/RenderBlock.cpp index e9cdf3c..9b2bca5 100755 --- a/Source/WebCore/rendering/RenderBlock.cpp +++ b/Source/WebCore/rendering/RenderBlock.cpp @@ -2022,7 +2022,7 @@ void RenderBlock::layoutBlockChildren(bool relayoutChildren, LayoutUnit& maxFloa setLogicalHeight(beforeEdge); // Lay out our hypothetical grid line as though it occurs at the top of the block. - if (view()->layoutState()->currentLineGrid() == this) + if (view()->layoutState()->lineGrid() == this) layoutLineGridBox(); // The margin struct caches all our current margin collapsing state. The compact struct caches state when we encounter compacts, diff --git a/Source/WebCore/rendering/RenderBlockLineLayout.cpp b/Source/WebCore/rendering/RenderBlockLineLayout.cpp index 0dfb9af..406930f 100755 --- a/Source/WebCore/rendering/RenderBlockLineLayout.cpp +++ b/Source/WebCore/rendering/RenderBlockLineLayout.cpp @@ -1450,7 +1450,7 @@ void RenderBlock::layoutInlineChildren(bool relayoutChildren, LayoutUnit& repain setLogicalHeight(borderBefore() + paddingBefore()); // Lay out our hypothetical grid line as though it occurs at the top of the block. - if (view()->layoutState() && view()->layoutState()->currentLineGrid() == this) + if (view()->layoutState() && view()->layoutState()->lineGrid() == this) layoutLineGridBox(); // Figure out if we should clear out our line boxes. diff --git a/Source/WebCore/rendering/RenderView.h b/Source/WebCore/rendering/RenderView.h index 5307c3f..9ee7a1d 100644 --- a/Source/WebCore/rendering/RenderView.h +++ b/Source/WebCore/rendering/RenderView.h @@ -208,7 +208,7 @@ private: { // We push LayoutState even if layoutState is disabled because it stores layoutDelta too. if (!doingFullRepaint() || m_layoutState->isPaginated() || renderer->hasColumns() || renderer->inRenderFlowThread() - || m_layoutState->currentLineGrid() || (renderer->style()->lineGrid() != RenderStyle::initialLineGrid() && renderer->isBlockFlow())) { + || m_layoutState->lineGrid() || (renderer->style()->lineGrid() != RenderStyle::initialLineGrid() && renderer->isBlockFlow())) { m_layoutState = new (renderArena()) LayoutState(m_layoutState, renderer, offset, pageHeight, pageHeightChanged, colInfo); return true; } diff --git a/Source/WebCore/rendering/RootInlineBox.cpp b/Source/WebCore/rendering/RootInlineBox.cpp index 0bffabc..2acfaf0 100644 --- a/Source/WebCore/rendering/RootInlineBox.cpp +++ b/Source/WebCore/rendering/RootInlineBox.cpp @@ -335,8 +335,8 @@ LayoutUnit RootInlineBox::lineGridSnapAdjustment(LayoutUnit delta) const // Get the current line grid and offset. LayoutState* layoutState = block()->view()->layoutState(); - RenderBlock* lineGrid = layoutState->currentLineGrid(); - LayoutSize lineGridOffset = layoutState->currentLineGridOffset(); + RenderBlock* lineGrid = layoutState->lineGrid(); + LayoutSize lineGridOffset = layoutState->lineGridOffset(); if (!lineGrid || lineGrid->style()->writingMode() != block()->style()->writingMode()) return 0; @@ -359,19 +359,22 @@ LayoutUnit RootInlineBox::lineGridSnapAdjustment(LayoutUnit delta) const LayoutUnit lineGridFontAscent = lineGrid->style()->fontMetrics().ascent(baselineType()); LayoutUnit lineGridFontHeight = lineGridBox->logicalHeight(); LayoutUnit firstTextTop = lineGridBlockOffset + lineGridBox->logicalTop(); + LayoutUnit firstLineTopWithLeading = lineGridBlockOffset + lineGridBox->lineTopWithLeading(); LayoutUnit firstBaselinePosition = firstTextTop + lineGridFontAscent; LayoutUnit currentTextTop = blockOffset + logicalTop() + delta; LayoutUnit currentFontAscent = block()->style()->fontMetrics().ascent(baselineType()); LayoutUnit currentBaselinePosition = currentTextTop + currentFontAscent; + LayoutUnit lineGridPaginationOrigin = isHorizontal() ? layoutState->lineGridPaginationOrigin().height() : layoutState->lineGridPaginationOrigin().width(); + // If we're paginated, see if we're on a page after the first one. If so, the grid resets on subsequent pages. // FIXME: If the grid is an ancestor of the pagination establisher, then this is incorrect. LayoutUnit pageLogicalTop = 0; if (layoutState->isPaginated() && layoutState->pageLogicalHeight()) { - pageLogicalTop = block()->pageLogicalTopForOffset(logicalTop() + delta); - if (pageLogicalTop > firstTextTop) - firstTextTop = pageLogicalTop + lineGridBox->logicalTop() - lineGrid->borderBefore() - lineGrid->paddingBefore(); + pageLogicalTop = block()->pageLogicalTopForOffset(lineTopWithLeading() + delta); + if (pageLogicalTop > firstLineTopWithLeading) + firstTextTop = pageLogicalTop + lineGridBox->logicalTop() - lineGrid->borderBefore() - lineGrid->paddingBefore() + lineGridPaginationOrigin; } if (block()->style()->lineGridSnap() == LineGridSnapContain) { @@ -405,13 +408,13 @@ LayoutUnit RootInlineBox::lineGridSnapAdjustment(LayoutUnit delta) const if (!layoutState->isPaginated() || !layoutState->pageLogicalHeight() || result == delta) return result; - // We may have shifted to a new page. We need to do a re-snap when that happens. - LayoutUnit newPageLogicalTop = block()->pageLogicalTopForOffset(logicalTop() + result); + // We may end up shifted to a new page. We need to do a re-snap when that happens. + LayoutUnit newPageLogicalTop = block()->pageLogicalTopForOffset(lineBottomWithLeading() + result); if (newPageLogicalTop == pageLogicalTop) return result; // Put ourselves at the top of the next page to force a snap onto the new grid established by that page. - return lineGridSnapAdjustment(newPageLogicalTop - (blockOffset + logicalTop())); + return lineGridSnapAdjustment(newPageLogicalTop - (blockOffset + lineTopWithLeading())); } GapRects RootInlineBox::lineSelectionGap(RenderBlock* rootBlock, const LayoutPoint& rootBlockPhysicalPosition, const LayoutSize& offsetFromRootBlock, -- 2.7.4