Bug 1055665 part 2 - Make nsLineLayout::VerticalAlignLine not rely on line box. r=roc

--HG--
extra : source : c9cc22b10e21bf80d1129e8a01319b05e546b922
This commit is contained in:
Xidorn Quan 2014-12-09 17:47:26 +11:00
Родитель d04c336024
Коммит 4156dfaf68
1 изменённых файлов: 16 добавлений и 13 удалений

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

@ -1529,21 +1529,23 @@ nsLineLayout::VerticalAlignLine()
}
PlaceTopBottomFrames(psd, -mBStartEdge, lineBSize);
// Fill in returned line-box and max-element-width data
mLineBox->SetBounds(lineWM,
psd->mIStart, mBStartEdge,
psd->mICoord - psd->mIStart, lineBSize,
mContainerWidth);
mFinalLineBSize = lineBSize;
mLineBox->SetLogicalAscent(baselineBCoord - mBStartEdge);
if (mGotLineBox) {
// Fill in returned line-box and max-element-width data
mLineBox->SetBounds(lineWM,
psd->mIStart, mBStartEdge,
psd->mICoord - psd->mIStart, lineBSize,
mContainerWidth);
mLineBox->SetLogicalAscent(baselineBCoord - mBStartEdge);
#ifdef NOISY_BLOCKDIR_ALIGN
printf(
" [line]==> bounds{x,y,w,h}={%d,%d,%d,%d} lh=%d a=%d\n",
mLineBox->GetBounds().IStart(lineWM), mLineBox->GetBounds().BStart(lineWM),
mLineBox->GetBounds().ISize(lineWM), mLineBox->GetBounds().BSize(lineWM),
mFinalLineBSize, mLineBox->GetLogicalAscent());
printf(
" [line]==> bounds{x,y,w,h}={%d,%d,%d,%d} lh=%d a=%d\n",
mLineBox->GetBounds().IStart(lineWM), mLineBox->GetBounds().BStart(lineWM),
mLineBox->GetBounds().ISize(lineWM), mLineBox->GetBounds().BSize(lineWM),
mFinalLineBSize, mLineBox->GetLogicalAscent());
#endif
}
}
// Place frames with CSS property vertical-align: top or bottom.
@ -2154,7 +2156,8 @@ nsLineLayout::VerticalAlignFrames(PerSpanData* psd)
// (1) and (2) above
bool applyMinLH = !psd->mZeroEffectiveSpanBox || mHasBullet;
bool isLastLine = (!mLineBox->IsLineWrapped() && !mLineEndsInBR);
bool isLastLine = !mGotLineBox ||
(!mLineBox->IsLineWrapped() && !mLineEndsInBR);
if (!applyMinLH && isLastLine) {
nsIContent* blockContent = mRootSpan->mFrame->mFrame->GetContent();
if (blockContent) {