Bug 1674931 Part 1 - Add WritingMode argument to SizeComputationInput::ComputedLogicalMargin(), and adapt callers. r=jfkthame

It's straightforward to determine which writing mode is required to pass
to ComputedLogicalMargin() by looking at any subsequent method called on
the margin.

For example, if we see

```
ComputedLogicalMargin().BStartEnd(wm);
```

the writing mode needed to pass to `ComputedLogicalMargin()` is `wm`.

Differential Revision: https://phabricator.services.mozilla.com/D95661
This commit is contained in:
Ting-Yu Lin 2020-11-03 19:44:58 +00:00
Родитель c8bc7a3e48
Коммит 9910d9e651
16 изменённых файлов: 53 добавлений и 69 удалений

Просмотреть файл

@ -128,8 +128,7 @@ void nsDateTimeControlFrame::Reflow(nsPresContext* aPresContext,
availSize);
// Convert input area margin into my own writing-mode (in case it differs):
LogicalMargin childMargin =
childReflowOuput.ComputedLogicalMargin().ConvertTo(myWM, wm);
LogicalMargin childMargin = childReflowOuput.ComputedLogicalMargin(myWM);
// offsets of input area frame within this frame:
LogicalPoint childOffset(

Просмотреть файл

@ -155,8 +155,7 @@ void BlockReflowInput::ComputeReplacedBlockOffsetsForFloats(
LogicalMargin frameMargin(wm);
SizeComputationInput os(aFrame, mReflowInput.mRenderingContext, wm,
mContentArea.ISize(wm));
frameMargin =
os.ComputedLogicalMargin().ConvertTo(wm, aFrame->GetWritingMode());
frameMargin = os.ComputedLogicalMargin(wm);
nscoord iStartFloatIOffset =
aFloatAvailableSpace.IStart(wm) - mContentArea.IStart(wm);
@ -615,7 +614,8 @@ static nscoord FloatMarginISize(const ReflowInput& aCBReflowInput,
auto floatSize = aFloat->ComputeSize(
aCBReflowInput.mRenderingContext, wm, aCBReflowInput.ComputedSize(wm),
aFloatAvailableISize, aFloatOffsetState.ComputedLogicalMargin().Size(wm),
aFloatAvailableISize,
aFloatOffsetState.ComputedLogicalMargin(wm).Size(wm),
aFloatOffsetState.ComputedLogicalBorderPadding().Size(wm),
ComputeSizeFlag::ShrinkWrap);
@ -626,10 +626,7 @@ static nscoord FloatMarginISize(const ReflowInput& aCBReflowInput,
}
return floatISize +
aFloatOffsetState.ComputedLogicalMargin()
.Size(wm)
.ConvertTo(cbwm, wm)
.ISize(cbwm) +
aFloatOffsetState.ComputedLogicalMargin(cbwm).IStartEnd(cbwm) +
aFloatOffsetState.ComputedLogicalBorderPadding()
.Size(wm)
.ConvertTo(cbwm, wm)
@ -718,8 +715,8 @@ bool BlockReflowInput::FlowAndPlaceFloat(nsIFrame* aFloat) {
// Get the band of available space with respect to margin box.
nsFlowAreaRect floatAvailableSpace =
GetFloatAvailableSpaceForPlacingFloat(mBCoord);
LogicalRect adjustedAvailableSpace = mBlock->AdjustFloatAvailableSpace(
*this, floatAvailableSpace.mRect);
LogicalRect adjustedAvailableSpace =
mBlock->AdjustFloatAvailableSpace(*this, floatAvailableSpace.mRect);
NS_ASSERTION(aFloat->GetParent() == mBlock, "Float frame has wrong parent");

Просмотреть файл

@ -56,8 +56,8 @@ nscoord CSSAlignUtils::AlignJustifySelf(const StyleAlignFlags& aAlignment,
// methods? (bug 1209710)
// Get the item's margin corresponding to the container's start/end side.
const LogicalMargin margin = aRI.ComputedLogicalMargin();
WritingMode wm = aRI.GetWritingMode();
const LogicalMargin margin = aRI.ComputedLogicalMargin(wm);
nscoord marginStart, marginEnd;
if (aAxis == eLogicalAxisBlock) {
if (MOZ_LIKELY(isSameSide)) {

Просмотреть файл

@ -231,8 +231,9 @@ nscoord SizeComputationInput::ComputeISizeValue(
nscoord aContainingBlockISize, StyleBoxSizing aBoxSizing,
const SizeOrMaxSize& aSize) const {
WritingMode wm = GetWritingMode();
nscoord inside = 0, outside = ComputedLogicalBorderPadding().IStartEnd(wm) +
ComputedLogicalMargin().IStartEnd(wm);
nscoord inside = 0;
nscoord outside = ComputedLogicalBorderPadding().IStartEnd(wm) +
ComputedLogicalMargin(wm).IStartEnd(wm);
if (aBoxSizing == StyleBoxSizing::Border) {
inside = ComputedLogicalBorderPadding().IStartEnd(wm);
}
@ -1618,7 +1619,7 @@ void ReflowInput::InitAbsoluteConstraints(nsPresContext* aPresContext,
sizeResult = mFrame->ComputeSize(
mRenderingContext, wm, cbSize.ConvertTo(wm, cbwm),
cbSize.ConvertTo(wm, cbwm).ISize(wm), // XXX or AvailableISize()?
ComputedLogicalMargin().Size(wm) + ComputedLogicalOffsets().Size(wm),
ComputedLogicalMargin(wm).Size(wm) + ComputedLogicalOffsets().Size(wm),
ComputedLogicalBorderPadding().Size(wm), mComputeSizeFlags);
ComputedISize() = sizeResult.mLogicalSize.ISize(wm);
ComputedBSize() = sizeResult.mLogicalSize.BSize(wm);
@ -1637,7 +1638,7 @@ void ReflowInput::InitAbsoluteConstraints(nsPresContext* aPresContext,
// XXX Now that we have ComputeSize, can we condense many of the
// branches off of widthIsAuto?
LogicalMargin margin = ComputedLogicalMargin().ConvertTo(cbwm, wm);
LogicalMargin margin = ComputedLogicalMargin(cbwm);
const LogicalMargin borderPadding =
ComputedLogicalBorderPadding().ConvertTo(cbwm, wm);
@ -2339,7 +2340,7 @@ void ReflowInput::InitConstraints(
auto size = mFrame->ComputeSize(
mRenderingContext, wm, cbSize, AvailableISize(),
ComputedLogicalMargin().Size(wm),
ComputedLogicalMargin(wm).Size(wm),
ComputedLogicalBorderPadding().Size(wm), mComputeSizeFlags);
ComputedISize() = size.mLogicalSize.ISize(wm);
@ -2545,7 +2546,7 @@ void ReflowInput::CalculateBlockSideMargins(LayoutFrameType aFrameType) {
"result from very large sizes, not attempts at "
"intrinsic inline-size calculation");
LogicalMargin margin = ComputedLogicalMargin().ConvertTo(cbWM, mWritingMode);
LogicalMargin margin = ComputedLogicalMargin(cbWM);
LogicalMargin borderPadding =
ComputedLogicalBorderPadding().ConvertTo(cbWM, mWritingMode);
nscoord sum = margin.IStartEnd(cbWM) + borderPadding.IStartEnd(cbWM) +
@ -2784,7 +2785,7 @@ bool SizeComputationInput::ComputeMargin(WritingMode aCBWM,
nscoord marginAdjustment = FontSizeInflationListMarginAdjustment(mFrame);
if (marginAdjustment > 0) {
LogicalMargin m = ComputedLogicalMargin();
LogicalMargin m = ComputedLogicalMargin(mWritingMode);
m.IStart(mWritingMode) += marginAdjustment;
SetComputedLogicalMargin(mWritingMode, m);
}

Просмотреть файл

@ -127,7 +127,9 @@ struct SizeComputationInput {
return mComputedPadding.GetPhysicalMargin(mWritingMode);
}
LogicalMargin ComputedLogicalMargin() const { return mComputedMargin; }
LogicalMargin ComputedLogicalMargin(mozilla::WritingMode aWM) const {
return mComputedMargin.ConvertTo(aWM, mWritingMode);
}
LogicalMargin ComputedLogicalBorderPadding() const {
return mComputedBorderPadding;
}
@ -423,9 +425,9 @@ struct ReflowInput : public SizeComputationInput {
mozilla::WritingMode wm = GetWritingMode();
return mozilla::LogicalSize(
wm,
ComputedISize() + ComputedLogicalMargin().IStartEnd(wm) +
ComputedISize() + ComputedLogicalMargin(wm).IStartEnd(wm) +
ComputedLogicalBorderPadding().IStartEnd(wm),
ComputedBSize() + ComputedLogicalMargin().BStartEnd(wm) +
ComputedBSize() + ComputedLogicalMargin(wm).BStartEnd(wm) +
ComputedLogicalBorderPadding().BStartEnd(wm));
}

Просмотреть файл

@ -720,8 +720,7 @@ void nsAbsoluteContainingBlock::ReflowAbsoluteFrame(
WritingMode outerWM = aReflowInput.GetWritingMode();
const LogicalMargin border(outerWM, aDelegatingFrame->GetUsedBorder());
LogicalMargin margin =
kidReflowInput.ComputedLogicalMargin().ConvertTo(outerWM, wm);
LogicalMargin margin = kidReflowInput.ComputedLogicalMargin(outerWM);
// If we're doing CSS Box Alignment in either axis, that will apply the
// margin for us in that axis (since the thing that's aligned is the margin
@ -756,7 +755,7 @@ void nsAbsoluteContainingBlock::ReflowAbsoluteFrame(
kidReflowInput.AvailableBSize() =
aReflowInput.AvailableBSize() -
border.ConvertTo(wm, outerWM).BStart(wm) -
kidReflowInput.ComputedLogicalMargin().BStart(wm);
kidReflowInput.ComputedLogicalMargin(wm).BStart(wm);
if (NS_AUTOOFFSET != kidReflowInput.ComputedLogicalOffsets().BStart(wm)) {
kidReflowInput.AvailableBSize() -=
kidReflowInput.ComputedLogicalOffsets().BStart(wm);

Просмотреть файл

@ -1271,7 +1271,7 @@ void nsBlockFrame::Reflow(nsPresContext* aPresContext, ReflowOutput& aMetrics,
// Block-end margin never causes us to create continuations, so we
// don't need to worry about whether it fits in its entirety.
blockDirExtras.BStart(wm) +=
aReflowInput.ComputedLogicalMargin().BStart(wm);
aReflowInput.ComputedLogicalMargin(wm).BStart(wm);
}
if (effectiveComputedBSize + blockDirExtras.BStartEnd(wm) <=
@ -2000,8 +2000,9 @@ void nsBlockFrame::ComputeFinalSize(const ReflowInput& aReflowInput,
bool found;
nscoord cbSize = GetProperty(BClampMarginBoxMinSizeProperty(), &found);
if (found) {
auto marginBoxBSize = finalSize.BSize(wm) +
aReflowInput.ComputedLogicalMargin().BStartEnd(wm);
auto marginBoxBSize =
finalSize.BSize(wm) +
aReflowInput.ComputedLogicalMargin(wm).BStartEnd(wm);
auto overflow = marginBoxBSize - cbSize;
if (overflow > 0) {
auto contentBSize = finalSize.BSize(wm) - borderPadding.BStartEnd(wm);
@ -6648,7 +6649,7 @@ void nsBlockFrame::ReflowFloat(BlockReflowInput& aState,
// Capture the margin and offsets information for the caller
aFloatMargin =
// float margins don't collapse
floatRS.ComputedLogicalMargin().ConvertTo(wm, floatRS.GetWritingMode());
floatRS.ComputedLogicalMargin(wm);
aFloatOffsets =
floatRS.ComputedLogicalOffsets().ConvertTo(wm, floatRS.GetWritingMode());
@ -7443,8 +7444,7 @@ void nsBlockFrame::ReflowOutsideMarker(nsIFrame* aMarkerFrame,
WritingMode wm = ri.GetWritingMode();
// Get the ::marker's margin, converted to our writing mode so that we can
// combine it with other logical values here.
LogicalMargin markerMargin =
reflowInput.ComputedLogicalMargin().ConvertTo(wm, markerWM);
LogicalMargin markerMargin = reflowInput.ComputedLogicalMargin(wm);
nscoord iStart = floatAvailSpace.IStart(wm) -
ri.ComputedLogicalBorderPadding().IStart(wm) -
markerMargin.IEnd(wm) - aMetrics.ISize(wm);
@ -7641,8 +7641,7 @@ nsBlockFrame::ReplacedElementISizeToClear nsBlockFrame::ISizeToClearPastFloats(
reflowInput.ComputedSizeWithBorderPadding().ConvertTo(wm, frWM).ISize(wm);
// Use the margins from offsetState rather than reflowInput so that
// they aren't reduced by ignoring margins in overconstrained cases.
LogicalMargin computedMargin =
offsetState.ComputedLogicalMargin().ConvertTo(wm, frWM);
LogicalMargin computedMargin = offsetState.ComputedLogicalMargin(wm);
result.marginIStart = computedMargin.IStart(wm);
return result;
}

Просмотреть файл

@ -50,8 +50,7 @@ bool nsBlockReflowContext::ComputeCollapsedBStartMargin(
WritingMode parentWM = mMetrics.GetWritingMode();
// Include block-start element of frame's margin
aMargin->Include(
aRI.ComputedLogicalMargin().ConvertTo(parentWM, wm).BStart(parentWM));
aMargin->Include(aRI.ComputedLogicalMargin(parentWM).BStart(parentWM));
// The inclusion of the block-end margin when empty is done by the caller
// since it doesn't need to be done by the top-level (non-recursive)
@ -59,7 +58,7 @@ bool nsBlockReflowContext::ComputeCollapsedBStartMargin(
#ifdef NOISY_BLOCK_DIR_MARGINS
aRI.mFrame->ListTag(stdout);
printf(": %d => %d\n", aRI.ComputedLogicalMargin().BStart(wm),
printf(": %d => %d\n", aRI.ComputedLogicalMargin(wm).BStart(wm),
aMargin->get());
#endif
@ -170,10 +169,8 @@ bool nsBlockReflowContext::ComputeCollapsedBStartMargin(
dirtiedLine = true;
}
if (isEmpty) {
WritingMode innerWM = innerReflowInput.GetWritingMode();
LogicalMargin innerMargin =
innerReflowInput.ComputedLogicalMargin().ConvertTo(parentWM,
innerWM);
innerReflowInput.ComputedLogicalMargin(parentWM);
aMargin->Include(innerMargin.BEnd(parentWM));
}
}
@ -265,10 +262,7 @@ void nsBlockReflowContext::ReflowBlock(
// Compute inline/block coordinate where reflow will begin. Use the
// rules from 10.3.3 to determine what to apply. At this point in the
// reflow auto inline-start/end margins will have a zero value.
WritingMode frameWM = aFrameRI.GetWritingMode();
LogicalMargin usedMargin =
aFrameRI.ComputedLogicalMargin().ConvertTo(mWritingMode, frameWM);
LogicalMargin usedMargin = aFrameRI.ComputedLogicalMargin(mWritingMode);
mICoord = mSpace.IStart(mWritingMode) + usedMargin.IStart(mWritingMode);
mBCoord = mSpace.BStart(mWritingMode) + mBStartMargin.get() + aClearance;
@ -348,16 +342,14 @@ bool nsBlockReflowContext::PlaceBlock(const ReflowInput& aReflowInput,
nsOverflowAreas& aOverflowAreas,
const nsReflowStatus& aReflowStatus) {
// Compute collapsed block-end margin value.
WritingMode wm = aReflowInput.GetWritingMode();
WritingMode parentWM = mMetrics.GetWritingMode();
// Don't apply the block-end margin if the block has a *later* sibling across
// column-span split.
if (aReflowStatus.IsComplete() && !mFrame->HasColumnSpanSiblings()) {
aBEndMarginResult = mMetrics.mCarriedOutBEndMargin;
aBEndMarginResult.Include(aReflowInput.ComputedLogicalMargin()
.ConvertTo(parentWM, wm)
.BEnd(parentWM));
aBEndMarginResult.Include(
aReflowInput.ComputedLogicalMargin(parentWM).BEnd(parentWM));
} else {
// The used block-end-margin is set to zero before a break.
aBEndMarginResult.Zero();

Просмотреть файл

@ -750,7 +750,7 @@ void nsCanvasFrame::Reflow(nsPresContext* aPresContext,
WritingMode kidWM = kidReflowInput.GetWritingMode();
nsSize containerSize = aReflowInput.ComputedPhysicalSize();
LogicalMargin margin = kidReflowInput.ComputedLogicalMargin();
LogicalMargin margin = kidReflowInput.ComputedLogicalMargin(kidWM);
LogicalPoint kidPt(kidWM, margin.IStart(kidWM), margin.BStart(kidWM));
// Reflow the frame
@ -805,7 +805,7 @@ void nsCanvasFrame::Reflow(nsPresContext* aPresContext,
if (aReflowInput.ComputedBSize() == NS_UNCONSTRAINEDSIZE) {
finalSize.BSize(wm) =
kidFrame->GetLogicalSize(wm).BSize(wm) +
kidReflowInput.ComputedLogicalMargin().BStartEnd(wm);
kidReflowInput.ComputedLogicalMargin(wm).BStartEnd(wm);
} else {
finalSize.BSize(wm) = aReflowInput.ComputedBSize();
}

Просмотреть файл

@ -685,11 +685,9 @@ nsColumnSetFrame::ColumnBalanceData nsColumnSetFrame::ReflowChildren(
// columns would flow around it.
// Reflow the frame
LogicalPoint origin(
wm,
childOrigin.I(wm) + kidReflowInput.ComputedLogicalMargin().IStart(wm),
childOrigin.B(wm) +
kidReflowInput.ComputedLogicalMargin().BStart(wm));
const auto childMargin = kidReflowInput.ComputedLogicalMargin(wm);
const LogicalPoint origin(wm, childOrigin.I(wm) + childMargin.IStart(wm),
childOrigin.B(wm) + childMargin.BStart(wm));
aStatus.Reset();
ReflowChild(child, PresContext(), kidDesiredSize, kidReflowInput, wm,
origin, containerSize, ReflowChildFlags::Default, aStatus);

Просмотреть файл

@ -1625,7 +1625,7 @@ void nsFlexContainerFrame::ResolveAutoFlexBasisAndMinSize(
const auto sizeInItemWM = aFlexItem.Frame()->ComputeSize(
aItemReflowInput.mRenderingContext, itemWM,
aItemReflowInput.mContainingBlockSize, availISize,
aItemReflowInput.ComputedLogicalMargin().Size(itemWM),
aItemReflowInput.ComputedLogicalMargin(itemWM).Size(itemWM),
aItemReflowInput.ComputedLogicalBorderPadding().Size(itemWM),
{ComputeSizeFlag::UseAutoISize, ComputeSizeFlag::ShrinkWrap});
@ -2008,8 +2008,7 @@ FlexItem::FlexItem(ReflowInput& aFlexItemReflowInput, float aFlexGrow,
mBorderPadding(
aFlexItemReflowInput.ComputedLogicalBorderPadding().ConvertTo(mCBWM,
mWM)),
mMargin(
aFlexItemReflowInput.ComputedLogicalMargin().ConvertTo(mCBWM, mWM)),
mMargin(aFlexItemReflowInput.ComputedLogicalMargin(mCBWM)),
mMainMinSize(aMainMinSize),
mMainMaxSize(aMainMaxSize),
mCrossMinSize(aCrossMinSize),

Просмотреть файл

@ -5244,7 +5244,7 @@ static nscoord ContentContribution(
// XXXdholbert This won't have percentage margins resolved.
// Hopefully we can just avoid those for XUL-content-in-css-grid?
size += childRI.ComputedLogicalMargin().BStartEnd(childWM);
size += childRI.ComputedLogicalMargin(childWM).BStartEnd(childWM);
} else {
size = ::MeasuringReflow(child, aState.mReflowInput, aRC, availableSize,
cbSize, iMinSizeClamp, bMinSizeClamp);

Просмотреть файл

@ -10489,7 +10489,7 @@ void nsIFrame::BoxReflow(nsBoxLayoutState& aState, nsPresContext* aPresContext,
reflowInput.SetComputedHeight(
ComputeSize(aRenderingContext, wm, logicalSize,
logicalSize.ISize(wm),
reflowInput.ComputedLogicalMargin().Size(wm),
reflowInput.ComputedLogicalMargin(wm).Size(wm),
reflowInput.ComputedLogicalBorderPadding().Size(wm), {})
.mLogicalSize.Height(wm));
}

Просмотреть файл

@ -825,8 +825,7 @@ void nsLineLayout::ReflowFrame(nsIFrame* aFrame, nsReflowStatus& aReflowStatus,
reflowInput.AvailableISize() = availableSpaceOnLine;
}
WritingMode stateWM = reflowInput.GetWritingMode();
pfd->mMargin =
reflowInput.ComputedLogicalMargin().ConvertTo(lineWM, stateWM);
pfd->mMargin = reflowInput.ComputedLogicalMargin(lineWM);
pfd->mBorderPadding =
reflowInput.ComputedLogicalBorderPadding().ConvertTo(lineWM, stateWM);
pfd->mRelativePos =

Просмотреть файл

@ -93,7 +93,7 @@ nsIFrame::SizeComputationResult nsMathMLSelectedFrame::ComputeSize(
availableISize);
auto size = childFrame->ComputeSize(
aRenderingContext, aWM, cbSize, availableISize,
offsetState.ComputedLogicalMargin().Size(aWM),
offsetState.ComputedLogicalMargin(aWM).Size(aWM),
offsetState.ComputedLogicalBorderPadding().Size(aWM), aFlags);
return {size.mLogicalSize +
offsetState.ComputedLogicalBorderPadding().Size(aWM),

Просмотреть файл

@ -245,7 +245,7 @@ void nsTableWrapperFrame::InitChildReflowInput(nsPresContext& aPresContext,
if (!HasAnyStateBits(NS_FRAME_OUT_OF_FLOW)) {
if (LogicalSize* cb = GetProperty(GridItemCBSizeProperty())) {
cbSize.emplace(*cb);
*cbSize -= aOuterRI.ComputedLogicalMargin().Size(wm);
*cbSize -= aOuterRI.ComputedLogicalMargin(wm).Size(wm);
}
}
if (!cbSize) {
@ -278,7 +278,7 @@ void nsTableWrapperFrame::GetChildMargin(nsPresContext* aPresContext,
ReflowInput::InitFlag::CallerWillInit);
InitChildReflowInput(*aPresContext, aOuterRI, childRI);
aMargin = childRI.ComputedLogicalMargin();
aMargin = childRI.ComputedLogicalMargin(childRI.GetWritingMode());
}
static nsSize GetContainingBlockSize(const ReflowInput& aOuterRI) {
@ -368,8 +368,7 @@ nscoord nsTableWrapperFrame::ChildShrinkWrapISize(
SizeComputationInput offsets(aChildFrame, aRenderingContext, aWM,
aCBSize.ISize(aWM));
LogicalSize marginSize =
offsets.ComputedLogicalMargin().Size(childWM).ConvertTo(aWM, childWM);
LogicalSize marginSize = offsets.ComputedLogicalMargin(aWM).Size(aWM);
LogicalSize bpSize =
offsets.ComputedLogicalBorderPadding().Size(childWM).ConvertTo(aWM,
childWM);
@ -392,7 +391,7 @@ nscoord nsTableWrapperFrame::ChildShrinkWrapISize(
aChildFrame->ComputeSize(aRenderingContext, aWM, aCBSize, aAvailableISize,
marginSize, bpSize, flags);
if (aMarginResult) {
*aMarginResult = offsets.ComputedLogicalMargin().IStartEnd(aWM);
*aMarginResult = offsets.ComputedLogicalMargin(aWM).IStartEnd(aWM);
}
return size.mLogicalSize.ISize(aWM) + marginSize.ISize(aWM) +
bpSize.ISize(aWM);
@ -883,7 +882,7 @@ void nsTableWrapperFrame::Reflow(nsPresContext* aPresContext,
*captionMet, capStatus);
captionSize.ISize(wm) = captionMet->ISize(wm);
captionSize.BSize(wm) = captionMet->BSize(wm);
captionMargin = captionRI->ComputedLogicalMargin().ConvertTo(wm, captionWM);
captionMargin = captionRI->ComputedLogicalMargin(wm);
// Now that we know the bsize of the caption, reduce the available bsize
// for the table frame if we are bsize constrained and the caption is above
// or below the inner table. Also reduce the CB size that we store for
@ -929,7 +928,7 @@ void nsTableWrapperFrame::Reflow(nsPresContext* aPresContext,
OuterDoReflowChild(aPresContext, InnerTableFrame(), *innerRI, innerMet,
aStatus);
LogicalSize innerSize(wm, innerMet.ISize(wm), innerMet.BSize(wm));
LogicalMargin innerMargin = innerRI->ComputedLogicalMargin();
LogicalMargin innerMargin = innerRI->ComputedLogicalMargin(wm);
LogicalSize containSize(wm, GetContainingBlockSize(aOuterRI));