Fix for unsplittable content being paginated by columns.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@180364 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/rendering/RenderBlockFlow.cpp b/Source/WebCore/rendering/RenderBlockFlow.cpp
index 08066b7..5b6a2c5 100644
--- a/Source/WebCore/rendering/RenderBlockFlow.cpp
+++ b/Source/WebCore/rendering/RenderBlockFlow.cpp
@@ -1850,25 +1850,34 @@
LayoutUnit RenderBlockFlow::pageLogicalTopForOffset(LayoutUnit offset) const
{
+ // Unsplittable objects clear out the pageLogicalHeight in the layout state as a way of signaling that no
+ // pagination should occur. Therefore we have to check this first and bail if the value has been set to 0.
+ LayoutUnit pageLogicalHeight = view().layoutState()->m_pageLogicalHeight;
+ if (!pageLogicalHeight)
+ return 0;
+
LayoutUnit firstPageLogicalTop = isHorizontalWritingMode() ? view().layoutState()->m_pageOffset.height() : view().layoutState()->m_pageOffset.width();
LayoutUnit blockLogicalTop = isHorizontalWritingMode() ? view().layoutState()->m_layoutOffset.height() : view().layoutState()->m_layoutOffset.width();
LayoutUnit cumulativeOffset = offset + blockLogicalTop;
RenderFlowThread* flowThread = flowThreadContainingBlock();
- if (!flowThread) {
- LayoutUnit pageLogicalHeight = view().layoutState()->pageLogicalHeight();
- if (!pageLogicalHeight)
- return 0;
+ if (!flowThread)
return cumulativeOffset - roundToInt(cumulativeOffset - firstPageLogicalTop) % roundToInt(pageLogicalHeight);
- }
return firstPageLogicalTop + flowThread->pageLogicalTopForOffset(cumulativeOffset - firstPageLogicalTop);
}
LayoutUnit RenderBlockFlow::pageLogicalHeightForOffset(LayoutUnit offset) const
{
+ // Unsplittable objects clear out the pageLogicalHeight in the layout state as a way of signaling that no
+ // pagination should occur. Therefore we have to check this first and bail if the value has been set to 0.
+ LayoutUnit pageLogicalHeight = view().layoutState()->m_pageLogicalHeight;
+ if (!pageLogicalHeight)
+ return 0;
+
+ // Now check for a flow thread.
RenderFlowThread* flowThread = flowThreadContainingBlock();
if (!flowThread)
- return view().layoutState()->m_pageLogicalHeight;
+ return pageLogicalHeight;
return flowThread->pageLogicalHeightForOffset(offset + offsetFromLogicalTopOfFirstPage());
}