| Index: Source/core/rendering/RenderBox.cpp
|
| diff --git a/Source/core/rendering/RenderBox.cpp b/Source/core/rendering/RenderBox.cpp
|
| index df8ed0ed489547dd48791a0669b43ea0a78cb707..c50e7ac99656b5dbc8ff36dc4ec268f4c8d35c93 100644
|
| --- a/Source/core/rendering/RenderBox.cpp
|
| +++ b/Source/core/rendering/RenderBox.cpp
|
| @@ -42,16 +42,13 @@
|
| #include "core/rendering/HitTestResult.h"
|
| #include "core/rendering/LayoutRectRecorder.h"
|
| #include "core/rendering/PaintInfo.h"
|
| -#include "core/rendering/RenderBoxRegionInfo.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"
|
| #include "core/rendering/RenderLayer.h"
|
| #include "core/rendering/RenderLayerCompositor.h"
|
| #include "core/rendering/RenderListMarker.h"
|
| -#include "core/rendering/RenderRegion.h"
|
| #include "core/rendering/RenderTableCell.h"
|
| #include "core/rendering/RenderTheme.h"
|
| #include "core/rendering/RenderView.h"
|
| @@ -106,52 +103,6 @@ RenderBox::~RenderBox()
|
| {
|
| }
|
|
|
| -LayoutRect RenderBox::borderBoxRectInRegion(RenderRegion* region, RenderBoxRegionInfoFlags cacheFlag) const
|
| -{
|
| - if (!region)
|
| - return borderBoxRect();
|
| -
|
| - // Compute the logical width and placement in this region.
|
| - RenderBoxRegionInfo* boxInfo = renderBoxRegionInfo(region, cacheFlag);
|
| - if (!boxInfo)
|
| - return borderBoxRect();
|
| -
|
| - // We have cached insets.
|
| - LayoutUnit logicalWidth = boxInfo->logicalWidth();
|
| - LayoutUnit logicalLeft = boxInfo->logicalLeft();
|
| -
|
| - // Now apply the parent inset since it is cumulative whenever anything in the containing block chain shifts.
|
| - // FIXME: Doesn't work right with perpendicular writing modes.
|
| - const RenderBlock* currentBox = containingBlock();
|
| - RenderBoxRegionInfo* currentBoxInfo = currentBox->renderBoxRegionInfo(region);
|
| - while (currentBoxInfo && currentBoxInfo->isShifted()) {
|
| - if (currentBox->style()->direction() == LTR)
|
| - logicalLeft += currentBoxInfo->logicalLeft();
|
| - else
|
| - logicalLeft -= (currentBox->logicalWidth() - currentBoxInfo->logicalWidth()) - currentBoxInfo->logicalLeft();
|
| - currentBox = currentBox->containingBlock();
|
| - region = currentBox->clampToStartAndEndRegions(region);
|
| - currentBoxInfo = currentBox->renderBoxRegionInfo(region);
|
| - }
|
| -
|
| - if (cacheFlag == DoNotCacheRenderBoxRegionInfo)
|
| - delete boxInfo;
|
| -
|
| - if (isHorizontalWritingMode())
|
| - return LayoutRect(logicalLeft, 0, logicalWidth, height());
|
| - return LayoutRect(0, logicalLeft, width(), logicalWidth);
|
| -}
|
| -
|
| -void RenderBox::clearRenderBoxRegionInfo()
|
| -{
|
| - if (isRenderFlowThread())
|
| - return;
|
| -
|
| - RenderFlowThread* flowThread = flowThreadContainingBlock();
|
| - if (flowThread)
|
| - flowThread->removeRenderBoxRegionInfo(this);
|
| -}
|
| -
|
| void RenderBox::willBeDestroyed()
|
| {
|
| clearOverrideSize();
|
| @@ -602,12 +553,12 @@ void RenderBox::updateLayerTransform()
|
| layer()->updateTransform();
|
| }
|
|
|
| -LayoutUnit RenderBox::constrainLogicalWidthInRegionByMinMax(LayoutUnit logicalWidth, LayoutUnit availableWidth, RenderBlock* cb, RenderRegion* region) const
|
| +LayoutUnit RenderBox::constrainLogicalWidthByMinMax(LayoutUnit logicalWidth, LayoutUnit availableWidth, RenderBlock* cb) const
|
| {
|
| RenderStyle* styleToUse = style();
|
| if (!styleToUse->logicalMaxWidth().isUndefined())
|
| - logicalWidth = min(logicalWidth, computeLogicalWidthInRegionUsing(MaxSize, styleToUse->logicalMaxWidth(), availableWidth, cb, region));
|
| - return max(logicalWidth, computeLogicalWidthInRegionUsing(MinSize, styleToUse->logicalMinWidth(), availableWidth, cb, region));
|
| + logicalWidth = min(logicalWidth, computeLogicalWidthUsing(MaxSize, styleToUse->logicalMaxWidth(), availableWidth, cb));
|
| + return max(logicalWidth, computeLogicalWidthUsing(MinSize, styleToUse->logicalMinWidth(), availableWidth, cb));
|
| }
|
|
|
| LayoutUnit RenderBox::constrainLogicalHeightByMinMax(LayoutUnit logicalHeight, LayoutUnit intrinsicContentHeight) const
|
| @@ -1184,7 +1135,7 @@ bool RenderBox::nodeAtPoint(const HitTestRequest& request, HitTestResult& result
|
|
|
| // Check our bounds next. For this purpose always assume that we can only be hit in the
|
| // foreground phase (which is true for replaced elements like images).
|
| - LayoutRect boundsRect = borderBoxRectInRegion(locationInContainer.region());
|
| + LayoutRect boundsRect = borderBoxRect();
|
| boundsRect.moveBy(adjustedLocation);
|
| if (visibleToHitTestRequest(request) && action == HitTestForeground && locationInContainer.intersects(boundsRect)) {
|
| updateHitTestResult(result, locationInContainer.point() - toLayoutSize(adjustedLocation));
|
| @@ -1260,7 +1211,7 @@ void RenderBox::paintBoxDecorations(PaintInfo& paintInfo, const LayoutPoint& pai
|
| if (!paintInfo.shouldPaintWithinRoot(this))
|
| return;
|
|
|
| - LayoutRect paintRect = borderBoxRectInRegion(paintInfo.renderRegion);
|
| + LayoutRect paintRect = borderBoxRect();
|
| paintRect.moveBy(paintOffset);
|
| paintBoxDecorationsWithRect(paintInfo, paintOffset, paintRect);
|
| }
|
| @@ -1689,7 +1640,7 @@ bool RenderBox::pushContentsClip(PaintInfo& paintInfo, const LayoutPoint& accumu
|
| if (!isControlClip && !isOverflowClip)
|
| return false;
|
|
|
| - LayoutRect clipRect = isControlClip ? controlClipRect(accumulatedOffset) : overflowClipRect(accumulatedOffset, paintInfo.renderRegion);
|
| + LayoutRect clipRect = isControlClip ? controlClipRect(accumulatedOffset) : overflowClipRect(accumulatedOffset);
|
| RoundedRect clipRoundedRect(0, 0, 0, 0);
|
| bool hasBorderRadius = style()->hasBorderRadius();
|
| if (hasBorderRadius)
|
| @@ -1742,11 +1693,11 @@ void RenderBox::popContentsClip(PaintInfo& paintInfo, PaintPhase originalPhase,
|
| paintInfo.phase = originalPhase;
|
| }
|
|
|
| -LayoutRect RenderBox::overflowClipRect(const LayoutPoint& location, RenderRegion* region, OverlayScrollbarSizeRelevancy relevancy)
|
| +LayoutRect RenderBox::overflowClipRect(const LayoutPoint& location, OverlayScrollbarSizeRelevancy relevancy)
|
| {
|
| // FIXME: When overflow-clip (CSS3) is implemented, we'll obtain the property
|
| // here.
|
| - LayoutRect clipRect = borderBoxRectInRegion(region);
|
| + LayoutRect clipRect = borderBoxRect();
|
| clipRect.setLocation(location + clipRect.location() + LayoutSize(borderLeft(), borderTop()));
|
| clipRect.setSize(clipRect.size() - LayoutSize(borderLeft() + borderRight(), borderTop() + borderBottom()));
|
|
|
| @@ -1761,25 +1712,22 @@ LayoutRect RenderBox::overflowClipRect(const LayoutPoint& location, RenderRegion
|
| return clipRect;
|
| }
|
|
|
| -LayoutRect RenderBox::clipRect(const LayoutPoint& location, RenderRegion* region)
|
| +LayoutRect RenderBox::clipRect(const LayoutPoint& location)
|
| {
|
| - LayoutRect borderBoxRect = borderBoxRectInRegion(region);
|
| - LayoutRect clipRect = LayoutRect(borderBoxRect.location() + location, borderBoxRect.size());
|
| + LayoutRect borderBox = borderBoxRect();
|
| + LayoutRect clipRect = LayoutRect(borderBox.location() + location, borderBox.size());
|
|
|
| if (!style()->clipLeft().isAuto()) {
|
| - LayoutUnit c = valueForLength(style()->clipLeft(), borderBoxRect.width());
|
| + LayoutUnit c = valueForLength(style()->clipLeft(), borderBox.width());
|
| clipRect.move(c, 0);
|
| clipRect.contract(c, 0);
|
| }
|
|
|
| - // We don't use the region-specific border box's width and height since clip offsets are (stupidly) specified
|
| - // from the left and top edges. Therefore it's better to avoid constraining to smaller widths and heights.
|
| -
|
| if (!style()->clipRight().isAuto())
|
| clipRect.contract(width() - valueForLength(style()->clipRight(), width()), 0);
|
|
|
| if (!style()->clipTop().isAuto()) {
|
| - LayoutUnit c = valueForLength(style()->clipTop(), borderBoxRect.height());
|
| + LayoutUnit c = valueForLength(style()->clipTop(), borderBox.height());
|
| clipRect.move(0, c);
|
| clipRect.contract(0, c);
|
| }
|
| @@ -1790,17 +1738,10 @@ LayoutRect RenderBox::clipRect(const LayoutPoint& location, RenderRegion* region
|
| return clipRect;
|
| }
|
|
|
| -LayoutUnit RenderBox::shrinkLogicalWidthToAvoidFloats(LayoutUnit childMarginStart, LayoutUnit childMarginEnd, const RenderBlockFlow* cb, RenderRegion* region) const
|
| +LayoutUnit RenderBox::shrinkLogicalWidthToAvoidFloats(LayoutUnit childMarginStart, LayoutUnit childMarginEnd, const RenderBlockFlow* cb) const
|
| {
|
| - RenderRegion* containingBlockRegion = 0;
|
| LayoutUnit logicalTopPosition = logicalTop();
|
| - if (region) {
|
| - LayoutUnit offsetFromLogicalTopOfRegion = region ? region->logicalTopForFlowThreadContent() - offsetFromLogicalTopOfFirstPage() : LayoutUnit();
|
| - logicalTopPosition = max(logicalTopPosition, logicalTopPosition + offsetFromLogicalTopOfRegion);
|
| - containingBlockRegion = cb->clampToStartAndEndRegions(region);
|
| - }
|
| -
|
| - LayoutUnit result = cb->availableLogicalWidthForLineInRegion(logicalTopPosition, false, containingBlockRegion) - childMarginStart - childMarginEnd;
|
| + LayoutUnit result = cb->availableLogicalWidthForLine(logicalTopPosition, false) - childMarginStart - childMarginEnd;
|
|
|
| // We need to see if margins on either the start side or the end side can contain the floats in question. If they can,
|
| // then just using the line width is inaccurate. In the case where a float completely fits, we don't need to use the line
|
| @@ -1808,9 +1749,9 @@ LayoutUnit RenderBox::shrinkLogicalWidthToAvoidFloats(LayoutUnit childMarginStar
|
| // doesn't fit, we can use the line offset, but we need to grow it by the margin to reflect the fact that the margin was
|
| // "consumed" by the float. Negative margins aren't consumed by the float, and so we ignore them.
|
| if (childMarginStart > 0) {
|
| - LayoutUnit startContentSide = cb->startOffsetForContent(containingBlockRegion);
|
| + LayoutUnit startContentSide = cb->startOffsetForContent();
|
| LayoutUnit startContentSideWithMargin = startContentSide + childMarginStart;
|
| - LayoutUnit startOffset = cb->startOffsetForLineInRegion(logicalTopPosition, false, containingBlockRegion);
|
| + LayoutUnit startOffset = cb->startOffsetForLine(logicalTopPosition, false);
|
| if (startOffset > startContentSideWithMargin)
|
| result += childMarginStart;
|
| else
|
| @@ -1818,9 +1759,9 @@ LayoutUnit RenderBox::shrinkLogicalWidthToAvoidFloats(LayoutUnit childMarginStar
|
| }
|
|
|
| if (childMarginEnd > 0) {
|
| - LayoutUnit endContentSide = cb->endOffsetForContent(containingBlockRegion);
|
| + LayoutUnit endContentSide = cb->endOffsetForContent();
|
| LayoutUnit endContentSideWithMargin = endContentSide + childMarginEnd;
|
| - LayoutUnit endOffset = cb->endOffsetForLineInRegion(logicalTopPosition, false, containingBlockRegion);
|
| + LayoutUnit endOffset = cb->endOffsetForLine(logicalTopPosition, false);
|
| if (endOffset > endContentSideWithMargin)
|
| result += childMarginEnd;
|
| else
|
| @@ -1848,34 +1789,12 @@ LayoutUnit RenderBox::containingBlockLogicalHeightForContent(AvailableLogicalHei
|
| return cb->availableLogicalHeight(heightType);
|
| }
|
|
|
| -LayoutUnit RenderBox::containingBlockLogicalWidthForContentInRegion(RenderRegion* region) const
|
| -{
|
| - if (!region)
|
| - return containingBlockLogicalWidthForContent();
|
| -
|
| - RenderBlock* cb = containingBlock();
|
| - RenderRegion* containingBlockRegion = cb->clampToStartAndEndRegions(region);
|
| - // FIXME: It's unclear if a region's content should use the containing block's override logical width.
|
| - // If it should, the following line should call containingBlockLogicalWidthForContent.
|
| - LayoutUnit result = cb->availableLogicalWidth();
|
| - RenderBoxRegionInfo* boxInfo = cb->renderBoxRegionInfo(containingBlockRegion);
|
| - if (!boxInfo)
|
| - return result;
|
| - return max<LayoutUnit>(0, result - (cb->logicalWidth() - boxInfo->logicalWidth()));
|
| -}
|
| -
|
| -LayoutUnit RenderBox::containingBlockAvailableLineWidthInRegion(RenderRegion* region) const
|
| +LayoutUnit RenderBox::containingBlockAvailableLineWidth() const
|
| {
|
| RenderBlock* cb = containingBlock();
|
| - RenderRegion* containingBlockRegion = 0;
|
| LayoutUnit logicalTopPosition = logicalTop();
|
| - if (region) {
|
| - LayoutUnit offsetFromLogicalTopOfRegion = region ? region->logicalTopForFlowThreadContent() - offsetFromLogicalTopOfFirstPage() : LayoutUnit();
|
| - logicalTopPosition = max(logicalTopPosition, logicalTopPosition + offsetFromLogicalTopOfRegion);
|
| - containingBlockRegion = cb->clampToStartAndEndRegions(region);
|
| - }
|
| if (cb->isRenderBlockFlow())
|
| - return toRenderBlockFlow(cb)->availableLogicalWidthForLineInRegion(logicalTopPosition, false, containingBlockRegion, availableLogicalHeight(IncludeMarginBorderPadding));
|
| + return toRenderBlockFlow(cb)->availableLogicalWidthForLine(logicalTopPosition, false, availableLogicalHeight(IncludeMarginBorderPadding));
|
| return 0;
|
| }
|
|
|
| @@ -1977,13 +1896,7 @@ void RenderBox::mapAbsoluteToLocalPoint(MapCoordinatesFlags mode, TransformState
|
|
|
| LayoutSize RenderBox::offsetFromContainer(RenderObject* o, const LayoutPoint& point, bool* offsetDependsOnPoint) const
|
| {
|
| - // A region "has" boxes inside it without being their container.
|
| - // FIXME: change container() / containingBlock() to count for boxes being positioned relative to the region, not the
|
| - // FlowThread. This requires a separate patch as a simple test with such a change in container() causes 129 out of
|
| - // 337 regions tests to fail.
|
| - ASSERT(o == container() || o->isRenderRegion());
|
| -
|
| - LayoutSize offset;
|
| + LayoutSize offset;
|
| if (isInFlowPositioned())
|
| offset += offsetForInFlowPosition();
|
|
|
| @@ -2010,9 +1923,6 @@ LayoutSize RenderBox::offsetFromContainer(RenderObject* o, const LayoutPoint& po
|
| if (style()->position() == AbsolutePosition && o->isInFlowPositioned() && o->isRenderInline())
|
| offset += toRenderInline(o)->offsetForInFlowPositionedInline(this);
|
|
|
| - if (offsetDependsOnPoint)
|
| - *offsetDependsOnPoint |= o->isRenderFlowThread();
|
| -
|
| return offset;
|
| }
|
|
|
| @@ -2223,7 +2133,7 @@ void RenderBox::repaintOverhangingFloats(bool)
|
| void RenderBox::updateLogicalWidth()
|
| {
|
| LogicalExtentComputedValues computedValues;
|
| - computeLogicalWidthInRegion(computedValues);
|
| + computeLogicalWidth(computedValues);
|
|
|
| setLogicalWidth(computedValues.m_extent);
|
| setLogicalLeft(computedValues.m_position);
|
| @@ -2263,7 +2173,7 @@ static float getMaxWidthListMarker(const RenderBox* renderer)
|
| return maxWidth;
|
| }
|
|
|
| -void RenderBox::computeLogicalWidthInRegion(LogicalExtentComputedValues& computedValues, RenderRegion* region) const
|
| +void RenderBox::computeLogicalWidth(LogicalExtentComputedValues& computedValues) const
|
| {
|
| computedValues.m_extent = logicalWidth();
|
| computedValues.m_position = logicalLeft();
|
| @@ -2273,7 +2183,7 @@ void RenderBox::computeLogicalWidthInRegion(LogicalExtentComputedValues& compute
|
| if (isOutOfFlowPositioned()) {
|
| // FIXME: This calculation is not patched for block-flow yet.
|
| // https://bugs.webkit.org/show_bug.cgi?id=46500
|
| - computePositionedLogicalWidth(computedValues, region);
|
| + computePositionedLogicalWidth(computedValues);
|
| return;
|
| }
|
|
|
| @@ -2300,7 +2210,7 @@ void RenderBox::computeLogicalWidthInRegion(LogicalExtentComputedValues& compute
|
| Length logicalWidthLength = treatAsReplaced ? Length(computeReplacedLogicalWidth(), Fixed) : styleToUse->logicalWidth();
|
|
|
| RenderBlock* cb = containingBlock();
|
| - LayoutUnit containerLogicalWidth = max<LayoutUnit>(0, containingBlockLogicalWidthForContentInRegion(region));
|
| + LayoutUnit containerLogicalWidth = max<LayoutUnit>(0, containingBlockLogicalWidthForContent());
|
| bool hasPerpendicularContainingBlock = cb->isHorizontalWritingMode() != isHorizontalWritingMode();
|
|
|
| if (isInline() && !isInlineBlockOrInlineTable()) {
|
| @@ -2319,8 +2229,8 @@ void RenderBox::computeLogicalWidthInRegion(LogicalExtentComputedValues& compute
|
| LayoutUnit containerWidthInInlineDirection = containerLogicalWidth;
|
| if (hasPerpendicularContainingBlock)
|
| containerWidthInInlineDirection = perpendicularContainingBlockLogicalHeight();
|
| - LayoutUnit preferredWidth = computeLogicalWidthInRegionUsing(MainOrPreferredSize, styleToUse->logicalWidth(), containerWidthInInlineDirection, cb, region);
|
| - computedValues.m_extent = constrainLogicalWidthInRegionByMinMax(preferredWidth, containerWidthInInlineDirection, cb, region);
|
| + LayoutUnit preferredWidth = computeLogicalWidthUsing(MainOrPreferredSize, styleToUse->logicalWidth(), containerWidthInInlineDirection, cb);
|
| + computedValues.m_extent = constrainLogicalWidthByMinMax(preferredWidth, containerWidthInInlineDirection, cb);
|
| }
|
|
|
| // Margin calculations.
|
| @@ -2330,7 +2240,7 @@ void RenderBox::computeLogicalWidthInRegion(LogicalExtentComputedValues& compute
|
| } else {
|
| LayoutUnit containerLogicalWidthForAutoMargins = containerLogicalWidth;
|
| if (avoidsFloats() && cb->containsFloats())
|
| - containerLogicalWidthForAutoMargins = containingBlockAvailableLineWidthInRegion(region);
|
| + containerLogicalWidthForAutoMargins = containingBlockAvailableLineWidth();
|
| bool hasInvertedDirection = cb->style()->isLeftToRightDirection() != style()->isLeftToRightDirection();
|
| computeInlineDirectionMargins(cb, containerLogicalWidthForAutoMargins, computedValues.m_extent,
|
| hasInvertedDirection ? computedValues.m_margins.m_end : computedValues.m_margins.m_start,
|
| @@ -2400,8 +2310,7 @@ LayoutUnit RenderBox::computeIntrinsicLogicalWidthUsing(Length logicalWidthLengt
|
| return 0;
|
| }
|
|
|
| -LayoutUnit RenderBox::computeLogicalWidthInRegionUsing(SizeType widthType, Length logicalWidth, LayoutUnit availableLogicalWidth,
|
| - const RenderBlock* cb, RenderRegion* region) const
|
| +LayoutUnit RenderBox::computeLogicalWidthUsing(SizeType widthType, Length logicalWidth, LayoutUnit availableLogicalWidth, const RenderBlock* cb) const
|
| {
|
| if (!logicalWidth.isIntrinsicOrAuto()) {
|
| // FIXME: If the containing block flow is perpendicular to our direction we need to use the available logical height instead.
|
| @@ -2416,7 +2325,7 @@ LayoutUnit RenderBox::computeLogicalWidthInRegionUsing(SizeType widthType, Lengt
|
| LayoutUnit logicalWidthResult = fillAvailableMeasure(availableLogicalWidth, marginStart, marginEnd);
|
|
|
| if (shrinkToAvoidFloats() && cb->containsFloats())
|
| - logicalWidthResult = min(logicalWidthResult, shrinkLogicalWidthToAvoidFloats(marginStart, marginEnd, toRenderBlockFlow(cb), region));
|
| + logicalWidthResult = min(logicalWidthResult, shrinkLogicalWidthToAvoidFloats(marginStart, marginEnd, toRenderBlockFlow(cb)));
|
|
|
| if (widthType == MainOrPreferredSize && sizesLogicalWidthToFitContent(widthType))
|
| return max(minPreferredLogicalWidth(), min(maxPreferredLogicalWidth(), logicalWidthResult));
|
| @@ -2564,71 +2473,6 @@ void RenderBox::computeInlineDirectionMargins(RenderBlock* containingBlock, Layo
|
| marginEnd = minimumValueForLength(marginEndLength, containerWidth);
|
| }
|
|
|
| -RenderBoxRegionInfo* RenderBox::renderBoxRegionInfo(RenderRegion* region, RenderBoxRegionInfoFlags cacheFlag) const
|
| -{
|
| - // Make sure nobody is trying to call this with a null region.
|
| - if (!region)
|
| - return 0;
|
| -
|
| - // If we have computed our width in this region already, it will be cached, and we can
|
| - // just return it.
|
| - RenderBoxRegionInfo* boxInfo = region->renderBoxRegionInfo(this);
|
| - if (boxInfo && cacheFlag == CacheRenderBoxRegionInfo)
|
| - return boxInfo;
|
| -
|
| - // No cached value was found, so we have to compute our insets in this region.
|
| - // FIXME: For now we limit this computation to normal RenderBlocks. Future patches will expand
|
| - // support to cover all boxes.
|
| - RenderFlowThread* flowThread = flowThreadContainingBlock();
|
| - if (isRenderFlowThread() || !flowThread || !canHaveBoxInfoInRegion() || flowThread->style()->writingMode() != style()->writingMode())
|
| - return 0;
|
| -
|
| - LogicalExtentComputedValues computedValues;
|
| - computeLogicalWidthInRegion(computedValues, region);
|
| -
|
| - // Now determine the insets based off where this object is supposed to be positioned.
|
| - RenderBlock* cb = containingBlock();
|
| - RenderRegion* clampedContainingBlockRegion = cb->clampToStartAndEndRegions(region);
|
| - RenderBoxRegionInfo* containingBlockInfo = cb->renderBoxRegionInfo(clampedContainingBlockRegion);
|
| - LayoutUnit containingBlockLogicalWidth = cb->logicalWidth();
|
| - LayoutUnit containingBlockLogicalWidthInRegion = containingBlockInfo ? containingBlockInfo->logicalWidth() : containingBlockLogicalWidth;
|
| -
|
| - LayoutUnit marginStartInRegion = computedValues.m_margins.m_start;
|
| - LayoutUnit startMarginDelta = marginStartInRegion - marginStart();
|
| - LayoutUnit logicalWidthInRegion = computedValues.m_extent;
|
| - LayoutUnit logicalLeftInRegion = computedValues.m_position;
|
| - LayoutUnit widthDelta = logicalWidthInRegion - logicalWidth();
|
| - LayoutUnit logicalLeftDelta = isOutOfFlowPositioned() ? logicalLeftInRegion - logicalLeft() : startMarginDelta;
|
| - LayoutUnit logicalRightInRegion = containingBlockLogicalWidthInRegion - (logicalLeftInRegion + logicalWidthInRegion);
|
| - LayoutUnit oldLogicalRight = containingBlockLogicalWidth - (logicalLeft() + logicalWidth());
|
| - LayoutUnit logicalRightDelta = isOutOfFlowPositioned() ? logicalRightInRegion - oldLogicalRight : startMarginDelta;
|
| -
|
| - LayoutUnit logicalLeftOffset = 0;
|
| -
|
| - if (!isOutOfFlowPositioned() && avoidsFloats() && cb->containsFloats()) {
|
| - LayoutUnit startPositionDelta = toRenderBlockFlow(cb)->computeStartPositionDeltaForChildAvoidingFloats(this, marginStartInRegion, region);
|
| - if (cb->style()->isLeftToRightDirection())
|
| - logicalLeftDelta += startPositionDelta;
|
| - else
|
| - logicalRightDelta += startPositionDelta;
|
| - }
|
| -
|
| - if (cb->style()->isLeftToRightDirection())
|
| - logicalLeftOffset += logicalLeftDelta;
|
| - else
|
| - logicalLeftOffset -= (widthDelta + logicalRightDelta);
|
| -
|
| - LayoutUnit logicalRightOffset = logicalWidth() - (logicalLeftOffset + logicalWidthInRegion);
|
| - bool isShifted = (containingBlockInfo && containingBlockInfo->isShifted())
|
| - || (style()->isLeftToRightDirection() && logicalLeftOffset)
|
| - || (!style()->isLeftToRightDirection() && logicalRightOffset);
|
| -
|
| - // FIXME: Although it's unlikely, these boxes can go outside our bounds, and so we will need to incorporate them into overflow.
|
| - if (cacheFlag == CacheRenderBoxRegionInfo)
|
| - return region->setRenderBoxRegionInfo(this, logicalLeftOffset, logicalWidthInRegion, isShifted);
|
| - return new RenderBoxRegionInfo(logicalLeftOffset, logicalWidthInRegion, isShifted);
|
| -}
|
| -
|
| static bool shouldFlipBeforeAfterMargins(const RenderStyle* containingBlockStyle, const RenderStyle* childStyle)
|
| {
|
| ASSERT(containingBlockStyle->isHorizontalWritingMode() != childStyle->isHorizontalWritingMode());
|
| @@ -3078,7 +2922,7 @@ LayoutUnit RenderBox::availableLogicalHeightUsing(const Length& h, AvailableLogi
|
| return logicalHeight() - borderAndPaddingLogicalHeight();
|
| }
|
|
|
| - if (h.isPercent() && isOutOfFlowPositioned() && !isRenderFlowThread()) {
|
| + if (h.isPercent() && isOutOfFlowPositioned()) {
|
| // FIXME: This is wrong if the containingBlock has a perpendicular writing mode.
|
| LayoutUnit availableHeight = containingBlockLogicalHeightForPositioned(containingBlock());
|
| return adjustContentBoxLogicalHeightForBoxSizing(valueForLength(h, availableHeight));
|
| @@ -3134,7 +2978,7 @@ void RenderBox::computeAndSetBlockDirectionMargins(const RenderBlock* containing
|
| containingBlock->setMarginAfterForChild(this, marginAfter);
|
| }
|
|
|
| -LayoutUnit RenderBox::containingBlockLogicalWidthForPositioned(const RenderBoxModelObject* containingBlock, RenderRegion* region, bool checkForPerpendicularWritingMode) const
|
| +LayoutUnit RenderBox::containingBlockLogicalWidthForPositioned(const RenderBoxModelObject* containingBlock, bool checkForPerpendicularWritingMode) const
|
| {
|
| if (checkForPerpendicularWritingMode && containingBlock->isHorizontalWritingMode() != isHorizontalWritingMode())
|
| return containingBlockLogicalHeightForPositioned(containingBlock, false);
|
| @@ -3148,30 +2992,8 @@ LayoutUnit RenderBox::containingBlockLogicalWidthForPositioned(const RenderBoxMo
|
| }
|
| }
|
|
|
| - if (containingBlock->isBox()) {
|
| - RenderFlowThread* flowThread = flowThreadContainingBlock();
|
| - if (!flowThread)
|
| - return toRenderBox(containingBlock)->clientLogicalWidth();
|
| -
|
| - const RenderBlock* cb = toRenderBlock(containingBlock);
|
| - RenderBoxRegionInfo* boxInfo = 0;
|
| - if (!region) {
|
| - if (containingBlock->isRenderFlowThread() && !checkForPerpendicularWritingMode)
|
| - return toRenderFlowThread(containingBlock)->contentLogicalWidthOfFirstRegion();
|
| - if (isWritingModeRoot()) {
|
| - LayoutUnit cbPageOffset = cb->offsetFromLogicalTopOfFirstPage();
|
| - RenderRegion* cbRegion = cb->regionAtBlockOffset(cbPageOffset);
|
| - if (cbRegion) {
|
| - cbRegion = cb->clampToStartAndEndRegions(cbRegion);
|
| - boxInfo = cb->renderBoxRegionInfo(cbRegion);
|
| - }
|
| - }
|
| - } else if (region && flowThread->isHorizontalWritingMode() == containingBlock->isHorizontalWritingMode()) {
|
| - RenderRegion* containingBlockRegion = cb->clampToStartAndEndRegions(region);
|
| - boxInfo = cb->renderBoxRegionInfo(containingBlockRegion);
|
| - }
|
| - return (boxInfo) ? max<LayoutUnit>(0, cb->clientLogicalWidth() - (cb->logicalWidth() - boxInfo->logicalWidth())) : cb->clientLogicalWidth();
|
| - }
|
| + if (containingBlock->isBox())
|
| + return toRenderBox(containingBlock)->clientLogicalWidth();
|
|
|
| ASSERT(containingBlock->isRenderInline() && containingBlock->isInFlowPositioned());
|
|
|
| @@ -3199,7 +3021,7 @@ LayoutUnit RenderBox::containingBlockLogicalWidthForPositioned(const RenderBoxMo
|
| LayoutUnit RenderBox::containingBlockLogicalHeightForPositioned(const RenderBoxModelObject* containingBlock, bool checkForPerpendicularWritingMode) const
|
| {
|
| if (checkForPerpendicularWritingMode && containingBlock->isHorizontalWritingMode() != isHorizontalWritingMode())
|
| - return containingBlockLogicalWidthForPositioned(containingBlock, 0, false);
|
| + return containingBlockLogicalWidthForPositioned(containingBlock, false);
|
|
|
| // Use viewport as container for top-level fixed-position elements.
|
| if (style()->position() == FixedPosition && containingBlock->isRenderView()) {
|
| @@ -3213,9 +3035,6 @@ LayoutUnit RenderBox::containingBlockLogicalHeightForPositioned(const RenderBoxM
|
| if (containingBlock->isBox()) {
|
| const RenderBlock* cb = toRenderBlock(containingBlock);
|
| LayoutUnit result = cb->clientLogicalHeight();
|
| - RenderFlowThread* flowThread = flowThreadContainingBlock();
|
| - if (flowThread && containingBlock->isRenderFlowThread() && flowThread->isHorizontalWritingMode() == containingBlock->isHorizontalWritingMode())
|
| - return toRenderFlowThread(containingBlock)->contentLogicalHeightOfFirstRegion();
|
| return result;
|
| }
|
|
|
| @@ -3239,7 +3058,7 @@ LayoutUnit RenderBox::containingBlockLogicalHeightForPositioned(const RenderBoxM
|
| return heightResult;
|
| }
|
|
|
| -static void computeInlineStaticDistance(Length& logicalLeft, Length& logicalRight, const RenderBox* child, const RenderBoxModelObject* containerBlock, LayoutUnit containerLogicalWidth, RenderRegion* region)
|
| +static void computeInlineStaticDistance(Length& logicalLeft, Length& logicalRight, const RenderBox* child, const RenderBoxModelObject* containerBlock, LayoutUnit containerLogicalWidth)
|
| {
|
| if (!logicalLeft.isAuto() || !logicalRight.isAuto())
|
| return;
|
| @@ -3252,13 +3071,6 @@ static void computeInlineStaticDistance(Length& logicalLeft, Length& logicalRigh
|
| staticPosition += toRenderBox(curr)->logicalLeft();
|
| if (toRenderBox(curr)->isRelPositioned())
|
| staticPosition += toRenderBox(curr)->relativePositionOffset().width();
|
| - if (region && curr->isRenderBlock()) {
|
| - const RenderBlock* cb = toRenderBlock(curr);
|
| - region = cb->clampToStartAndEndRegions(region);
|
| - RenderBoxRegionInfo* boxInfo = cb->renderBoxRegionInfo(region);
|
| - if (boxInfo)
|
| - staticPosition += boxInfo->logicalLeft();
|
| - }
|
| } else if (curr->isInline()) {
|
| if (curr->isRelPositioned()) {
|
| if (!curr->style()->logicalLeft().isAuto())
|
| @@ -3281,17 +3093,6 @@ static void computeInlineStaticDistance(Length& logicalLeft, Length& logicalRigh
|
| }
|
| if (curr == enclosingBox)
|
| staticPosition -= enclosingBox->logicalWidth();
|
| - if (region && curr->isRenderBlock()) {
|
| - const RenderBlock* cb = toRenderBlock(curr);
|
| - region = cb->clampToStartAndEndRegions(region);
|
| - RenderBoxRegionInfo* boxInfo = cb->renderBoxRegionInfo(region);
|
| - if (boxInfo) {
|
| - if (curr != containerBlock)
|
| - staticPosition -= cb->logicalWidth() - (boxInfo->logicalLeft() + boxInfo->logicalWidth());
|
| - if (curr == enclosingBox)
|
| - staticPosition += enclosingBox->logicalWidth() - boxInfo->logicalWidth();
|
| - }
|
| - }
|
| } else if (curr->isInline()) {
|
| if (curr->isRelPositioned()) {
|
| if (!curr->style()->logicalLeft().isAuto())
|
| @@ -3307,7 +3108,7 @@ static void computeInlineStaticDistance(Length& logicalLeft, Length& logicalRigh
|
| }
|
| }
|
|
|
| -void RenderBox::computePositionedLogicalWidth(LogicalExtentComputedValues& computedValues, RenderRegion* region) const
|
| +void RenderBox::computePositionedLogicalWidth(LogicalExtentComputedValues& computedValues) const
|
| {
|
| if (isReplaced()) {
|
| // FIXME: Positioned replaced elements inside a flow thread are not working properly
|
| @@ -3336,7 +3137,7 @@ void RenderBox::computePositionedLogicalWidth(LogicalExtentComputedValues& compu
|
| // relative positioned inline.
|
| const RenderBoxModelObject* containerBlock = toRenderBoxModelObject(container());
|
|
|
| - const LayoutUnit containerLogicalWidth = containingBlockLogicalWidthForPositioned(containerBlock, region);
|
| + const LayoutUnit containerLogicalWidth = containingBlockLogicalWidthForPositioned(containerBlock);
|
|
|
| // Use the container block's direction except when calculating the static distance
|
| // This conforms with the reference results for abspos-replaced-width-margin-000.htm
|
| @@ -3377,7 +3178,7 @@ void RenderBox::computePositionedLogicalWidth(LogicalExtentComputedValues& compu
|
|
|
| // see FIXME 1
|
| // Calculate the static distance if needed.
|
| - computeInlineStaticDistance(logicalLeftLength, logicalRightLength, this, containerBlock, containerLogicalWidth, region);
|
| + computeInlineStaticDistance(logicalLeftLength, logicalRightLength, this, containerBlock, containerLogicalWidth);
|
|
|
| // Calculate constraint equation values for 'width' case.
|
| computePositionedLogicalWidthUsing(style()->logicalWidth(), containerBlock, containerDirection,
|
| @@ -3420,25 +3221,6 @@ void RenderBox::computePositionedLogicalWidth(LogicalExtentComputedValues& compu
|
| }
|
|
|
| computedValues.m_extent += bordersPlusPadding;
|
| -
|
| - // Adjust logicalLeft if we need to for the flipped version of our writing mode in regions.
|
| - // FIXME: Add support for other types of objects as containerBlock, not only RenderBlock.
|
| - RenderFlowThread* flowThread = flowThreadContainingBlock();
|
| - if (flowThread && !region && isWritingModeRoot() && isHorizontalWritingMode() == containerBlock->isHorizontalWritingMode() && containerBlock->isRenderBlock()) {
|
| - ASSERT(containerBlock->canHaveBoxInfoInRegion());
|
| - LayoutUnit logicalLeftPos = computedValues.m_position;
|
| - const RenderBlock* cb = toRenderBlock(containerBlock);
|
| - LayoutUnit cbPageOffset = cb->offsetFromLogicalTopOfFirstPage();
|
| - RenderRegion* cbRegion = cb->regionAtBlockOffset(cbPageOffset);
|
| - if (cbRegion) {
|
| - cbRegion = cb->clampToStartAndEndRegions(cbRegion);
|
| - RenderBoxRegionInfo* boxInfo = cb->renderBoxRegionInfo(cbRegion);
|
| - if (boxInfo) {
|
| - logicalLeftPos += boxInfo->logicalLeft();
|
| - computedValues.m_position = logicalLeftPos;
|
| - }
|
| - }
|
| - }
|
| }
|
|
|
| static void computeLogicalLeftPositionedOffset(LayoutUnit& logicalLeftPos, const RenderBox* child, LayoutUnit logicalWidthValue, const RenderBoxModelObject* containerBlock, LayoutUnit containerLogicalWidth)
|
| @@ -3475,7 +3257,7 @@ void RenderBox::computePositionedLogicalWidthUsing(Length logicalWidth, const Re
|
|
|
| LayoutUnit logicalLeftValue = 0;
|
|
|
| - const LayoutUnit containerRelativeLogicalWidth = containingBlockLogicalWidthForPositioned(containerBlock, 0, false);
|
| + const LayoutUnit containerRelativeLogicalWidth = containingBlockLogicalWidthForPositioned(containerBlock, false);
|
|
|
| bool logicalWidthIsAuto = logicalWidth.isIntrinsicOrAuto();
|
| bool logicalLeftIsAuto = logicalLeft.isAuto();
|
| @@ -3749,25 +3531,6 @@ void RenderBox::computePositionedLogicalHeight(LogicalExtentComputedValues& comp
|
|
|
| // Set final height value.
|
| computedValues.m_extent += bordersPlusPadding;
|
| -
|
| - // Adjust logicalTop if we need to for perpendicular writing modes in regions.
|
| - // FIXME: Add support for other types of objects as containerBlock, not only RenderBlock.
|
| - RenderFlowThread* flowThread = flowThreadContainingBlock();
|
| - if (flowThread && isHorizontalWritingMode() != containerBlock->isHorizontalWritingMode() && containerBlock->isRenderBlock()) {
|
| - ASSERT(containerBlock->canHaveBoxInfoInRegion());
|
| - LayoutUnit logicalTopPos = computedValues.m_position;
|
| - const RenderBlock* cb = toRenderBlock(containerBlock);
|
| - LayoutUnit cbPageOffset = cb->offsetFromLogicalTopOfFirstPage() - logicalLeft();
|
| - RenderRegion* cbRegion = cb->regionAtBlockOffset(cbPageOffset);
|
| - if (cbRegion) {
|
| - cbRegion = cb->clampToStartAndEndRegions(cbRegion);
|
| - RenderBoxRegionInfo* boxInfo = cb->renderBoxRegionInfo(cbRegion);
|
| - if (boxInfo) {
|
| - logicalTopPos += boxInfo->logicalLeft();
|
| - computedValues.m_position = logicalTopPos;
|
| - }
|
| - }
|
| - }
|
| }
|
|
|
| static void computeLogicalTopPositionedOffset(LayoutUnit& logicalTopPos, const RenderBox* child, LayoutUnit logicalHeightValue, const RenderBoxModelObject* containerBlock, LayoutUnit containerLogicalHeight)
|
| @@ -3804,7 +3567,7 @@ void RenderBox::computePositionedLogicalHeightUsing(Length logicalHeightLength,
|
| LayoutUnit logicalHeightValue;
|
| LayoutUnit contentLogicalHeight = logicalHeight - bordersPlusPadding;
|
|
|
| - const LayoutUnit containerRelativeLogicalWidth = containingBlockLogicalWidthForPositioned(containerBlock, 0, false);
|
| + const LayoutUnit containerRelativeLogicalWidth = containingBlockLogicalWidthForPositioned(containerBlock, false);
|
|
|
| LayoutUnit logicalTopValue = 0;
|
|
|
| @@ -3935,7 +3698,7 @@ void RenderBox::computePositionedLogicalWidthReplaced(LogicalExtentComputedValue
|
| const RenderBoxModelObject* containerBlock = toRenderBoxModelObject(container());
|
|
|
| const LayoutUnit containerLogicalWidth = containingBlockLogicalWidthForPositioned(containerBlock);
|
| - const LayoutUnit containerRelativeLogicalWidth = containingBlockLogicalWidthForPositioned(containerBlock, 0, false);
|
| + const LayoutUnit containerRelativeLogicalWidth = containingBlockLogicalWidthForPositioned(containerBlock, false);
|
|
|
| // To match WinIE, in quirks mode use the parent's 'direction' property
|
| // instead of the the container block's.
|
| @@ -3967,7 +3730,7 @@ void RenderBox::computePositionedLogicalWidthReplaced(LogicalExtentComputedValue
|
| * else if 'direction' is 'rtl', set 'right' to the static position.
|
| \*-----------------------------------------------------------------------*/
|
| // see FIXME 1
|
| - computeInlineStaticDistance(logicalLeft, logicalRight, this, containerBlock, containerLogicalWidth, 0); // FIXME: Pass the region.
|
| + computeInlineStaticDistance(logicalLeft, logicalRight, this, containerBlock, containerLogicalWidth);
|
|
|
| /*-----------------------------------------------------------------------*\
|
| * 3. If 'left' or 'right' are 'auto', replace any 'auto' on 'margin-left'
|
| @@ -4103,7 +3866,7 @@ void RenderBox::computePositionedLogicalHeightReplaced(LogicalExtentComputedValu
|
| const RenderBoxModelObject* containerBlock = toRenderBoxModelObject(container());
|
|
|
| const LayoutUnit containerLogicalHeight = containingBlockLogicalHeightForPositioned(containerBlock);
|
| - const LayoutUnit containerRelativeLogicalWidth = containingBlockLogicalWidthForPositioned(containerBlock, 0, false);
|
| + const LayoutUnit containerRelativeLogicalWidth = containingBlockLogicalWidthForPositioned(containerBlock, false);
|
|
|
| // Variables to solve.
|
| Length marginBefore = style()->marginBefore();
|
| @@ -4418,10 +4181,6 @@ void RenderBox::addVisualEffectOverflow()
|
|
|
| void RenderBox::addOverflowFromChild(RenderBox* child, const LayoutSize& delta)
|
| {
|
| - // Never allow flow threads to propagate overflow up to a parent.
|
| - if (child->isRenderFlowThread())
|
| - return;
|
| -
|
| // Only propagate layout overflow from the child if the child isn't clipping its overflow. If it is, then
|
| // its overflow is internal to it, and we don't care about it. layoutOverflowRectForPropagation takes care of this
|
| // and just propagates the border box rect instead.
|
| @@ -4910,7 +4669,7 @@ LayoutUnit RenderBox::offsetFromLogicalTopOfFirstPage() const
|
| if (layoutState && !layoutState->isPaginated())
|
| return 0;
|
|
|
| - if (!layoutState && !flowThreadContainingBlock())
|
| + if (!layoutState)
|
| return 0;
|
|
|
| RenderBlock* containerBlock = containingBlock();
|
|
|