зеркало из https://github.com/mozilla/pjs.git
Bug 285348. Fix reflow of nested columns by ensuring that if a column overflows, its next-in-flow gets reflowed *even if* that next in flow belongs to continuation of the column set
This commit is contained in:
Родитель
0fc7d6bb23
Коммит
c3d0ada98b
|
@ -405,8 +405,11 @@ nsColumnSetFrame::ReflowChildren(nsHTMLReflowMetrics& aDesiredSize,
|
||||||
&& (!child->GetNextSibling()
|
&& (!child->GetNextSibling()
|
||||||
|| !(child->GetNextSibling()->GetStateBits() & NS_FRAME_IS_DIRTY))
|
|| !(child->GetNextSibling()->GetStateBits() & NS_FRAME_IS_DIRTY))
|
||||||
&& !aDesiredSize.mComputeMEW;
|
&& !aDesiredSize.mComputeMEW;
|
||||||
|
// If we need to pull up content from the prev-in-flow then this is not just
|
||||||
|
// a height shrink. The prev in flow will have set the dirty bit.
|
||||||
PRBool skipResizeHeightShrink = shrinkingHeightOnly
|
PRBool skipResizeHeightShrink = shrinkingHeightOnly
|
||||||
&& child->GetSize().height <= aConfig.mColMaxHeight;
|
&& child->GetSize().height <= aConfig.mColMaxHeight
|
||||||
|
&& !(child->GetStateBits() & NS_FRAME_IS_DIRTY);
|
||||||
if (!reflowNext && (skipIncremental || skipResizeHeightShrink)) {
|
if (!reflowNext && (skipIncremental || skipResizeHeightShrink)) {
|
||||||
// This child does not need to be reflowed, but we may need to move it
|
// This child does not need to be reflowed, but we may need to move it
|
||||||
MoveChildTo(this, child, childOrigin);
|
MoveChildTo(this, child, childOrigin);
|
||||||
|
@ -516,15 +519,14 @@ nsColumnSetFrame::ReflowChildren(nsHTMLReflowMetrics& aDesiredSize,
|
||||||
"We have to create a continuation, but the block doesn't want us to reflow it?");
|
"We have to create a continuation, but the block doesn't want us to reflow it?");
|
||||||
|
|
||||||
// We need to create a continuing column
|
// We need to create a continuing column
|
||||||
nsIFrame* continuation;
|
nsresult rv = CreateNextInFlow(GetPresContext(), this, child, kidNextInFlow);
|
||||||
nsresult rv = CreateNextInFlow(GetPresContext(), this, child, continuation);
|
|
||||||
|
|
||||||
if (NS_FAILED(rv)) {
|
if (NS_FAILED(rv)) {
|
||||||
NS_NOTREACHED("Couldn't create continuation");
|
NS_NOTREACHED("Couldn't create continuation");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
continuation->AddStateBits(NS_BLOCK_SPACE_MGR);
|
kidNextInFlow->AddStateBits(NS_BLOCK_SPACE_MGR);
|
||||||
|
|
||||||
// Do an initial reflow if we're going to reflow this thing.
|
// Do an initial reflow if we're going to reflow this thing.
|
||||||
aKidReason = eReflowReason_Initial;
|
aKidReason = eReflowReason_Initial;
|
||||||
|
@ -533,6 +535,7 @@ nsColumnSetFrame::ReflowChildren(nsHTMLReflowMetrics& aDesiredSize,
|
||||||
if (columnCount >= aConfig.mBalanceColCount) {
|
if (columnCount >= aConfig.mBalanceColCount) {
|
||||||
// No more columns allowed here. Stop.
|
// No more columns allowed here. Stop.
|
||||||
aStatus |= NS_FRAME_REFLOW_NEXTINFLOW;
|
aStatus |= NS_FRAME_REFLOW_NEXTINFLOW;
|
||||||
|
kidNextInFlow->AddStateBits(NS_FRAME_IS_DIRTY);
|
||||||
|
|
||||||
// Move any of our leftover columns to our overflow list. Our
|
// Move any of our leftover columns to our overflow list. Our
|
||||||
// next-in-flow will eventually pick them up.
|
// next-in-flow will eventually pick them up.
|
||||||
|
|
Загрузка…
Ссылка в новой задаче