Bug 281267. Force reflow of lines during absolute incremental reflow if the block is not a space manager, because we need to push our floats (or our descendants') into the space manager. r+sr=dbaron

This commit is contained in:
roc+%cs.cmu.edu 2005-03-07 20:48:12 +00:00
parent ab8783ddfb
commit 2e3b5a6ae5

View File

@ -623,11 +623,18 @@ nsBlockFrame::Reflow(nsPresContext* aPresContext,
autoSpaceManager.CreateSpaceManagerFor(aPresContext, this);
// See if it's an incremental reflow command targeted only at
// absolute frames. If so we can skip a whole lot of work via this
// fast path.
// absolute frames and we can skip ReflowDirtyLines().
PRBool needToReflowLines = aMetrics.mComputeMEW ||
// If we have lines with clearance, we need to check their positions
(GetStateBits() & NS_BLOCK_HAS_CLEAR_CHILDREN) ||
// The areas of any floats in this block or in blocks under us
// need to be put into the space manager --- unless we are our own
// space manager, in which case it doesn't matter.
!(GetStateBits() & NS_BLOCK_SPACE_MGR);
if (mAbsoluteContainer.HasAbsoluteFrames() &&
eReflowReason_Incremental == aReflowState.reason &&
!aMetrics.mComputeMEW &&
!needToReflowLines &&
mAbsoluteContainer.ReflowingAbsolutesOnly(this, aReflowState)) {
nsSize containingBlockSize
= CalculateContainingBlockSizeForAbsolutes(aReflowState, GetSize());