Index: Source/core/rendering/RenderBlock.cpp |
diff --git a/Source/core/rendering/RenderBlock.cpp b/Source/core/rendering/RenderBlock.cpp |
index cef0c517f6daa44f7db1c7f8a2e2b92dd65fbb52..b99b8b0cdddd720c373e4d4d5506d200e7f45fff 100644 |
--- a/Source/core/rendering/RenderBlock.cpp |
+++ b/Source/core/rendering/RenderBlock.cpp |
@@ -2956,7 +2956,11 @@ void RenderBlock::computeIntrinsicLogicalWidths(LayoutUnit& minLogicalWidth, Lay |
maxLogicalWidth = std::max(minLogicalWidth, maxLogicalWidth); |
- adjustIntrinsicLogicalWidthsForColumns(minLogicalWidth, maxLogicalWidth); |
+ // The flow thread based multicol implementation will do this adjustment on the flow thread, and |
+ // not here on the multicol container, so that spanners won't incorrectly be treated as column |
+ // content (and have spanners' preferred widths multiplied by the number of columns, etc.). |
+ if (style()->specifiesColumns() && !document().regionBasedColumnsEnabled()) |
+ adjustIntrinsicLogicalWidthsForColumns(minLogicalWidth, maxLogicalWidth); |
if (isTableCell()) { |
Length tableCellWidth = toLayoutTableCell(this)->styleOrColLogicalWidth(); |
@@ -3010,6 +3014,7 @@ void RenderBlock::computePreferredLogicalWidths() |
void RenderBlock::adjustIntrinsicLogicalWidthsForColumns(LayoutUnit& minLogicalWidth, LayoutUnit& maxLogicalWidth) const |
{ |
+ ASSERT(!document().regionBasedColumnsEnabled()); |
if (!style()->hasAutoColumnCount() || !style()->hasAutoColumnWidth()) { |
// The min/max intrinsic widths calculated really tell how much space elements need when |
// laid out inside the columns. In order to eventually end up with the desired column width, |
@@ -3041,8 +3046,9 @@ void RenderBlock::computeBlockPreferredLogicalWidths(LayoutUnit& minLogicalWidth |
RenderBlock* containingBlock = this->containingBlock(); |
LayoutUnit floatLeftWidth = 0, floatRightWidth = 0; |
while (child) { |
- // Positioned children don't affect the min/max width |
- if (child->isOutOfFlowPositioned()) { |
+ // Positioned children don't affect the min/max width. Spanners only affect the min/max |
+ // width of the multicol container, not the flow thread. |
+ if (child->isOutOfFlowPositioned() || child->isColumnSpanAll()) { |
child = child->nextSibling(); |
continue; |
} |