зеркало из https://github.com/mozilla/gecko-dev.git
Bug 811024 part 4: Don't ask for bottom border/padding space on a flex container if it's going to get a continuation. r=mats
This commit is contained in:
Родитель
a6743ae9d8
Коммит
7162d3aa16
|
@ -2550,8 +2550,9 @@ nsFlexContainerFrame::Reflow(nsPresContext* aPresContext,
|
|||
|
||||
aDesiredSize.width = desiredContentBoxSize.width +
|
||||
containerBorderPadding.LeftRight();
|
||||
// Does *NOT* include bottom border/padding yet (we add that a bit lower down)
|
||||
aDesiredSize.height = desiredContentBoxSize.height +
|
||||
containerBorderPadding.TopBottom();
|
||||
containerBorderPadding.top;
|
||||
|
||||
if (flexContainerAscent == nscoord_MIN) {
|
||||
// Still don't have our baseline set -- this happens if we have no
|
||||
|
@ -2562,12 +2563,36 @@ nsFlexContainerFrame::Reflow(nsPresContext* aPresContext,
|
|||
"Have flex items but didn't get an ascent - that's odd "
|
||||
"(or there are just gigantic sizes involved)");
|
||||
// Per spec, just use the bottom of content-box.
|
||||
flexContainerAscent = aDesiredSize.height -
|
||||
aReflowState.mComputedBorderPadding.bottom;
|
||||
flexContainerAscent = aDesiredSize.height;
|
||||
}
|
||||
|
||||
aDesiredSize.ascent = flexContainerAscent;
|
||||
|
||||
// Now: If we're complete, add bottom border/padding to desired height
|
||||
// (unless that pushes us over available height, in which case we become
|
||||
// incomplete (unless we already weren't asking for any height, in which case
|
||||
// we stay complete to avoid looping forever)).
|
||||
// NOTE: If we're auto-height, we allow our bottom border/padding to push us
|
||||
// over the available height without requesting a continuation, for
|
||||
// consistency with the behavior of "display:block" elements.
|
||||
if (NS_FRAME_IS_COMPLETE(aStatus)) {
|
||||
// NOTE: We can't use containerBorderPadding.bottom for this, because if
|
||||
// we're auto-height, ApplySkipSides will have zeroed it (because it
|
||||
// assumed we might get a continuation). We have the correct value in
|
||||
// aReflowState.mComputedBorderPadding.bottom, though, so we use that.
|
||||
nscoord desiredHeightWithBottomBP =
|
||||
aDesiredSize.height + aReflowState.mComputedBorderPadding.bottom;
|
||||
|
||||
if (aDesiredSize.height == 0 ||
|
||||
desiredHeightWithBottomBP <= aReflowState.availableHeight ||
|
||||
aReflowState.ComputedHeight() == NS_INTRINSICSIZE) {
|
||||
// Update desired height to include bottom border/padding
|
||||
aDesiredSize.height = desiredHeightWithBottomBP;
|
||||
} else {
|
||||
// We couldn't fit bottom border/padding, so we'll need a continuation.
|
||||
NS_FRAME_SET_INCOMPLETE(aStatus);
|
||||
}
|
||||
}
|
||||
|
||||
// Overflow area = union(my overflow area, kids' overflow areas)
|
||||
aDesiredSize.SetOverflowAreasToDesiredBounds();
|
||||
for (nsFrameList::Enumerator e(mFrames); !e.AtEnd(); e.Next()) {
|
||||
|
|
Загрузка…
Ссылка в новой задаче