| Index: Source/core/rendering/RenderBox.cpp
|
| diff --git a/Source/core/rendering/RenderBox.cpp b/Source/core/rendering/RenderBox.cpp
|
| index 8c150d19f17d4ca1257f7ff3f20a7c7360971482..d41a5bb3d2c9f88e0e9beb85c4aa459ea6036cbb 100644
|
| --- a/Source/core/rendering/RenderBox.cpp
|
| +++ b/Source/core/rendering/RenderBox.cpp
|
| @@ -46,6 +46,7 @@
|
| #include "core/rendering/PaintInfo.h"
|
| #include "core/rendering/RenderDeprecatedFlexibleBox.h"
|
| #include "core/rendering/RenderFlexibleBox.h"
|
| +#include "core/rendering/RenderFlowThread.h"
|
| #include "core/rendering/RenderGeometryMap.h"
|
| #include "core/rendering/RenderGrid.h"
|
| #include "core/rendering/RenderInline.h"
|
| @@ -216,6 +217,11 @@ void RenderBox::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle
|
|
|
| updateShapeOutsideInfoAfterStyleChange(*style(), oldStyle);
|
| updateGridPositionAfterStyleChange(oldStyle);
|
| +
|
| + if (RenderFlowThread* flowThread = flowThreadContainingBlock()) {
|
| + if (flowThread != this)
|
| + flowThread->flowThreadDescendantStyleDidChange(this);
|
| + }
|
| }
|
|
|
| void RenderBox::updateShapeOutsideInfoAfterStyleChange(const RenderStyle& style, const RenderStyle* oldStyle)
|
| @@ -1480,7 +1486,11 @@ LayoutUnit RenderBox::containingBlockLogicalWidthForContent() const
|
| if (hasOverrideContainingBlockLogicalWidth())
|
| return overrideContainingBlockContentLogicalWidth();
|
|
|
| - RenderBlock* cb = containingBlock();
|
| + RenderBlock* cb;
|
| + if (isColumnSpanAll())
|
| + cb = flowThreadContainingBlock()->containingBlock();
|
| + else
|
| + cb = containingBlock();
|
| return cb->availableLogicalWidth();
|
| }
|
|
|
| @@ -1489,7 +1499,11 @@ LayoutUnit RenderBox::containingBlockLogicalHeightForContent(AvailableLogicalHei
|
| if (hasOverrideContainingBlockLogicalHeight())
|
| return overrideContainingBlockContentLogicalHeight();
|
|
|
| - RenderBlock* cb = containingBlock();
|
| + RenderBlock* cb;
|
| + if (isColumnSpanAll())
|
| + cb = flowThreadContainingBlock()->containingBlock();
|
| + else
|
| + cb = containingBlock();
|
| return cb->availableLogicalHeight(heightType);
|
| }
|
|
|
| @@ -2111,7 +2125,7 @@ bool RenderBox::autoWidthShouldFitContent() const
|
| void RenderBox::computeMarginsForDirection(MarginDirection flowDirection, const RenderBlock* containingBlock, LayoutUnit containerWidth, LayoutUnit childWidth, LayoutUnit& marginStart, LayoutUnit& marginEnd, Length marginStartLength, Length marginEndLength) const
|
| {
|
| if (flowDirection == BlockDirection || isFloating() || isInline()) {
|
| - if (isTableCell() && flowDirection == BlockDirection) {
|
| + if ((isColumnSpanAll() || isTableCell()) && flowDirection == BlockDirection) {
|
| // FIXME: Not right if we allow cells to have different directionality than the table. If we do allow this, though,
|
| // we may just do it with an extra anonymous block inside the cell.
|
| marginStart = 0;
|
| @@ -4179,7 +4193,11 @@ bool RenderBox::hasUnsplittableScrollingOverflow() const
|
|
|
| bool RenderBox::isUnsplittableForPagination() const
|
| {
|
| - return isReplaced() || hasUnsplittableScrollingOverflow() || (parent() && isWritingModeRoot());
|
| + // FIXME: column spanners are only unsplittable (or rather: they do not participate in
|
| + // fragmentation) in their nearest ancestor multicol container. If there are additional
|
| + // fragmentation contexts further up in the tree, spanners still need to take those into
|
| + // account.
|
| + return isReplaced() || hasUnsplittableScrollingOverflow() || (parent() && isWritingModeRoot()) || isColumnSpanAll();
|
| }
|
|
|
| LayoutUnit RenderBox::lineHeight(bool /*firstLine*/, LineDirectionMode direction, LinePositionMode /*linePositionMode*/) const
|
|
|