void nsLineBox::SetCombinedArea(const nsRect& aCombinedArea) { NS_ASSERTION(aCombinedArea.width >= 0, "illegal width for combined area"); NS_ASSERTION(aCombinedArea.height >= 0, "illegal height for combined area"); if (aCombinedArea != mBounds) { if (mData) { mData->mCombinedArea = aCombinedArea; } else { if (IsInline()) { mInlineData = new ExtraInlineData(aCombinedArea); } else { mBlockData = new ExtraBlockData(aCombinedArea); } } } else { if (mData) { // Store away new value so that MaybeFreeData compares against // the right value. mData->mCombinedArea = aCombinedArea; } MaybeFreeData(); } }
// XXX this might be too eager to free memory void nsLineBox::FreeFloats(nsFloatCacheFreeList& aFreeList) { NS_ABORT_IF_FALSE(IsInline(), "block line can't have floats"); if (IsInline() && mInlineData) { if (mInlineData->mFloats.NotEmpty()) { aFreeList.Append(mInlineData->mFloats); } MaybeFreeData(); } }
bool nsLineBox::RemoveFloat(nsIFrame* aFrame) { NS_ABORT_IF_FALSE(IsInline(), "block line can't have floats"); if (IsInline() && mInlineData) { nsFloatCache* fc = mInlineData->mFloats.Find(aFrame); if (fc) { // Note: the placeholder is part of the line's child list // and will be removed later. mInlineData->mFloats.Remove(fc); delete fc; MaybeFreeData(); return true; } } return false; }
bool nsLineBox::SetCarriedOutBottomMargin(nsCollapsingMargin aValue) { bool changed = false; if (IsBlock()) { if (!aValue.IsZero()) { if (!mBlockData) { mBlockData = new ExtraBlockData(mBounds); } changed = aValue != mBlockData->mCarriedOutBottomMargin; mBlockData->mCarriedOutBottomMargin = aValue; } else if (mBlockData) { changed = aValue != mBlockData->mCarriedOutBottomMargin; mBlockData->mCarriedOutBottomMargin = aValue; MaybeFreeData(); } } return changed; }