Loading layout/base/nsCSSFrameConstructor.cpp +78 −6 Original line number Diff line number Diff line Loading @@ -53,6 +53,7 @@ #include "nsIDOMHTMLImageElement.h" #include "nsITextContent.h" #include "nsPlaceholderFrame.h" #include "nsTableRowGroupFrame.h" #ifdef INCLUDE_XUL #include "nsXULAtoms.h" Loading Loading @@ -4176,6 +4177,7 @@ nsCSSFrameConstructor::CreateContinuingOuterTableFrame(nsIPresContext* aPresCon ProcessChildren(aPresContext, caption, captionFrame, absoluteItems, childItems, fixedItems, floaterList); captionFrame->SetInitialChildList(*aPresContext, nsnull, childItems.childList); // XXX Deal with absolute and fixed frames... if (floaterList.childList) { captionFrame->SetInitialChildList(*aPresContext, nsLayoutAtoms::floaterList, Loading @@ -4197,6 +4199,80 @@ nsCSSFrameConstructor::CreateContinuingOuterTableFrame(nsIPresContext* aPresCon return rv; } nsresult nsCSSFrameConstructor::CreateContinuingTableFrame(nsIPresContext* aPresContext, nsIFrame* aFrame, nsIFrame* aParentFrame, nsIContent* aContent, nsIStyleContext* aStyleContext, nsIFrame** aContinuingFrame) { nsIFrame* newFrame; nsresult rv; rv = NS_NewTableFrame(newFrame); if (NS_SUCCEEDED(rv)) { newFrame->Init(*aPresContext, aContent, aParentFrame, aStyleContext, aFrame); nsHTMLContainerFrame::CreateViewForFrame(*aPresContext, newFrame, aStyleContext, PR_FALSE); // Replicate any header/footer frames nsIFrame* rowGroupFrame; nsFrameItems childFrames; aFrame->FirstChild(nsnull, &rowGroupFrame); while (rowGroupFrame) { // See if it's a header/footer nsIStyleContext* rowGroupStyle; const nsStyleDisplay* display; rowGroupFrame->GetStyleContext(&rowGroupStyle); display = (const nsStyleDisplay*)rowGroupStyle->GetStyleData(eStyleStruct_Display); if ((NS_STYLE_DISPLAY_TABLE_HEADER_GROUP == display->mDisplay) || (NS_STYLE_DISPLAY_TABLE_FOOTER_GROUP == display->mDisplay)) { // Get the containing block for absolutely positioned elements nsIFrame* absoluteContainingBlock = GetAbsoluteContainingBlock(aPresContext, newFrame); // Replicate the header/footer frame nsIFrame* headerFooterFrame; nsFrameItems childItems; nsAbsoluteItems absoluteItems(absoluteContainingBlock); nsAbsoluteItems fixedItems(mFixedContainingBlock); nsAbsoluteItems floaterList(nsnull); nsIContent* headerFooter; NS_NewTableRowGroupFrame(headerFooterFrame); rowGroupFrame->GetContent(&headerFooter); headerFooterFrame->Init(*aPresContext, headerFooter, newFrame, rowGroupStyle, nsnull); ProcessChildren(aPresContext, headerFooter, headerFooterFrame, absoluteItems, childItems, fixedItems, floaterList); NS_ASSERTION(!floaterList.childList, "unexpected floated element"); NS_RELEASE(headerFooter); headerFooterFrame->SetInitialChildList(*aPresContext, nsnull, childItems.childList); // Table specific initialization ((nsTableRowGroupFrame*)headerFooterFrame)->InitRepeatedFrame ((nsTableRowGroupFrame*)rowGroupFrame); // XXX Deal with absolute and fixed frames... childFrames.AddChild(headerFooterFrame); } NS_RELEASE(rowGroupStyle); rowGroupFrame->GetNextSibling(&rowGroupFrame); } // Set the table frame's initial child list newFrame->SetInitialChildList(*aPresContext, nsnull, childFrames.childList); } *aContinuingFrame = newFrame; return rv; } NS_IMETHODIMP nsCSSFrameConstructor::CreateContinuingFrame(nsIPresContext* aPresContext, nsIFrame* aFrame, Loading Loading @@ -4259,12 +4335,8 @@ nsCSSFrameConstructor::CreateContinuingFrame(nsIPresContext* aPresContext, content, styleContext, &newFrame); } else if (nsLayoutAtoms::tableFrame == frameType) { rv = NS_NewTableFrame(newFrame); if (NS_SUCCEEDED(rv)) { newFrame->Init(*aPresContext, content, aParentFrame, styleContext, aFrame); nsHTMLContainerFrame::CreateViewForFrame(*aPresContext, newFrame, styleContext, PR_FALSE); } rv = CreateContinuingTableFrame(aPresContext, aFrame, aParentFrame, content, styleContext, &newFrame); } else if (nsLayoutAtoms::tableRowGroupFrame == frameType) { rv = NS_NewTableRowGroupFrame(newFrame); Loading layout/base/nsCSSFrameConstructor.h +7 −0 Original line number Diff line number Diff line Loading @@ -393,6 +393,13 @@ protected: nsIStyleContext* aStyleContext, nsIFrame** aContinuingFrame); nsresult CreateContinuingTableFrame(nsIPresContext* aPresContext, nsIFrame* aFrame, nsIFrame* aParentFrame, nsIContent* aContent, nsIStyleContext* aStyleContext, nsIFrame** aContinuingFrame); protected: nsIDocument* mDocument; Loading layout/html/style/src/nsCSSFrameConstructor.cpp +78 −6 Original line number Diff line number Diff line Loading @@ -53,6 +53,7 @@ #include "nsIDOMHTMLImageElement.h" #include "nsITextContent.h" #include "nsPlaceholderFrame.h" #include "nsTableRowGroupFrame.h" #ifdef INCLUDE_XUL #include "nsXULAtoms.h" Loading Loading @@ -4176,6 +4177,7 @@ nsCSSFrameConstructor::CreateContinuingOuterTableFrame(nsIPresContext* aPresCon ProcessChildren(aPresContext, caption, captionFrame, absoluteItems, childItems, fixedItems, floaterList); captionFrame->SetInitialChildList(*aPresContext, nsnull, childItems.childList); // XXX Deal with absolute and fixed frames... if (floaterList.childList) { captionFrame->SetInitialChildList(*aPresContext, nsLayoutAtoms::floaterList, Loading @@ -4197,6 +4199,80 @@ nsCSSFrameConstructor::CreateContinuingOuterTableFrame(nsIPresContext* aPresCon return rv; } nsresult nsCSSFrameConstructor::CreateContinuingTableFrame(nsIPresContext* aPresContext, nsIFrame* aFrame, nsIFrame* aParentFrame, nsIContent* aContent, nsIStyleContext* aStyleContext, nsIFrame** aContinuingFrame) { nsIFrame* newFrame; nsresult rv; rv = NS_NewTableFrame(newFrame); if (NS_SUCCEEDED(rv)) { newFrame->Init(*aPresContext, aContent, aParentFrame, aStyleContext, aFrame); nsHTMLContainerFrame::CreateViewForFrame(*aPresContext, newFrame, aStyleContext, PR_FALSE); // Replicate any header/footer frames nsIFrame* rowGroupFrame; nsFrameItems childFrames; aFrame->FirstChild(nsnull, &rowGroupFrame); while (rowGroupFrame) { // See if it's a header/footer nsIStyleContext* rowGroupStyle; const nsStyleDisplay* display; rowGroupFrame->GetStyleContext(&rowGroupStyle); display = (const nsStyleDisplay*)rowGroupStyle->GetStyleData(eStyleStruct_Display); if ((NS_STYLE_DISPLAY_TABLE_HEADER_GROUP == display->mDisplay) || (NS_STYLE_DISPLAY_TABLE_FOOTER_GROUP == display->mDisplay)) { // Get the containing block for absolutely positioned elements nsIFrame* absoluteContainingBlock = GetAbsoluteContainingBlock(aPresContext, newFrame); // Replicate the header/footer frame nsIFrame* headerFooterFrame; nsFrameItems childItems; nsAbsoluteItems absoluteItems(absoluteContainingBlock); nsAbsoluteItems fixedItems(mFixedContainingBlock); nsAbsoluteItems floaterList(nsnull); nsIContent* headerFooter; NS_NewTableRowGroupFrame(headerFooterFrame); rowGroupFrame->GetContent(&headerFooter); headerFooterFrame->Init(*aPresContext, headerFooter, newFrame, rowGroupStyle, nsnull); ProcessChildren(aPresContext, headerFooter, headerFooterFrame, absoluteItems, childItems, fixedItems, floaterList); NS_ASSERTION(!floaterList.childList, "unexpected floated element"); NS_RELEASE(headerFooter); headerFooterFrame->SetInitialChildList(*aPresContext, nsnull, childItems.childList); // Table specific initialization ((nsTableRowGroupFrame*)headerFooterFrame)->InitRepeatedFrame ((nsTableRowGroupFrame*)rowGroupFrame); // XXX Deal with absolute and fixed frames... childFrames.AddChild(headerFooterFrame); } NS_RELEASE(rowGroupStyle); rowGroupFrame->GetNextSibling(&rowGroupFrame); } // Set the table frame's initial child list newFrame->SetInitialChildList(*aPresContext, nsnull, childFrames.childList); } *aContinuingFrame = newFrame; return rv; } NS_IMETHODIMP nsCSSFrameConstructor::CreateContinuingFrame(nsIPresContext* aPresContext, nsIFrame* aFrame, Loading Loading @@ -4259,12 +4335,8 @@ nsCSSFrameConstructor::CreateContinuingFrame(nsIPresContext* aPresContext, content, styleContext, &newFrame); } else if (nsLayoutAtoms::tableFrame == frameType) { rv = NS_NewTableFrame(newFrame); if (NS_SUCCEEDED(rv)) { newFrame->Init(*aPresContext, content, aParentFrame, styleContext, aFrame); nsHTMLContainerFrame::CreateViewForFrame(*aPresContext, newFrame, styleContext, PR_FALSE); } rv = CreateContinuingTableFrame(aPresContext, aFrame, aParentFrame, content, styleContext, &newFrame); } else if (nsLayoutAtoms::tableRowGroupFrame == frameType) { rv = NS_NewTableRowGroupFrame(newFrame); Loading layout/html/style/src/nsCSSFrameConstructor.h +7 −0 Original line number Diff line number Diff line Loading @@ -393,6 +393,13 @@ protected: nsIStyleContext* aStyleContext, nsIFrame** aContinuingFrame); nsresult CreateContinuingTableFrame(nsIPresContext* aPresContext, nsIFrame* aFrame, nsIFrame* aParentFrame, nsIContent* aContent, nsIStyleContext* aStyleContext, nsIFrame** aContinuingFrame); protected: nsIDocument* mDocument; Loading layout/html/table/src/nsTableFrame.cpp +14 −3 Original line number Diff line number Diff line Loading @@ -375,7 +375,11 @@ nsTableFrame::SetInitialChildList(nsIPresContext& aPresContext, mFrames.SetFrames(childFrame); else prevMainChild->SetNextSibling(childFrame); // If we have a prev-in-flow, then we're a table that has been split and // so don't treat this like an append if (!mPrevInFlow) { rv = DidAppendRowGroup(GetRowGroupFrameFor(childFrame, childDisplay)); } prevMainChild = childFrame; } else if (NS_STYLE_DISPLAY_TABLE_COLUMN_GROUP == childDisplay->mDisplay) Loading Loading @@ -2683,8 +2687,14 @@ NS_METHOD nsTableFrame::ResizeReflowPass2(nsIPresContext& aPresContext, //PreReflowCheck(); #endif // Check for an overflow list MoveOverflowToChildList(); // Check for an overflow list, and append any row group frames being // pushed nsTableFrame* prevInFlow = (nsTableFrame*)mPrevInFlow; if (prevInFlow) { if (prevInFlow->mOverflowFrames.NotEmpty()) { mFrames.Join(this, prevInFlow->mOverflowFrames); } } // Reflow the existing frames if (mFrames.NotEmpty()) { Loading Loading @@ -3635,6 +3645,7 @@ NS_METHOD nsTableFrame::ReflowMappedChildren(nsIPresContext& aPresContext, kidFrame->GetNextSibling(&nextSibling); if (nsnull != nextSibling) { // XXX Don't push header/footer frames... PushChildren(nextSibling, kidFrame); } break; Loading Loading
layout/base/nsCSSFrameConstructor.cpp +78 −6 Original line number Diff line number Diff line Loading @@ -53,6 +53,7 @@ #include "nsIDOMHTMLImageElement.h" #include "nsITextContent.h" #include "nsPlaceholderFrame.h" #include "nsTableRowGroupFrame.h" #ifdef INCLUDE_XUL #include "nsXULAtoms.h" Loading Loading @@ -4176,6 +4177,7 @@ nsCSSFrameConstructor::CreateContinuingOuterTableFrame(nsIPresContext* aPresCon ProcessChildren(aPresContext, caption, captionFrame, absoluteItems, childItems, fixedItems, floaterList); captionFrame->SetInitialChildList(*aPresContext, nsnull, childItems.childList); // XXX Deal with absolute and fixed frames... if (floaterList.childList) { captionFrame->SetInitialChildList(*aPresContext, nsLayoutAtoms::floaterList, Loading @@ -4197,6 +4199,80 @@ nsCSSFrameConstructor::CreateContinuingOuterTableFrame(nsIPresContext* aPresCon return rv; } nsresult nsCSSFrameConstructor::CreateContinuingTableFrame(nsIPresContext* aPresContext, nsIFrame* aFrame, nsIFrame* aParentFrame, nsIContent* aContent, nsIStyleContext* aStyleContext, nsIFrame** aContinuingFrame) { nsIFrame* newFrame; nsresult rv; rv = NS_NewTableFrame(newFrame); if (NS_SUCCEEDED(rv)) { newFrame->Init(*aPresContext, aContent, aParentFrame, aStyleContext, aFrame); nsHTMLContainerFrame::CreateViewForFrame(*aPresContext, newFrame, aStyleContext, PR_FALSE); // Replicate any header/footer frames nsIFrame* rowGroupFrame; nsFrameItems childFrames; aFrame->FirstChild(nsnull, &rowGroupFrame); while (rowGroupFrame) { // See if it's a header/footer nsIStyleContext* rowGroupStyle; const nsStyleDisplay* display; rowGroupFrame->GetStyleContext(&rowGroupStyle); display = (const nsStyleDisplay*)rowGroupStyle->GetStyleData(eStyleStruct_Display); if ((NS_STYLE_DISPLAY_TABLE_HEADER_GROUP == display->mDisplay) || (NS_STYLE_DISPLAY_TABLE_FOOTER_GROUP == display->mDisplay)) { // Get the containing block for absolutely positioned elements nsIFrame* absoluteContainingBlock = GetAbsoluteContainingBlock(aPresContext, newFrame); // Replicate the header/footer frame nsIFrame* headerFooterFrame; nsFrameItems childItems; nsAbsoluteItems absoluteItems(absoluteContainingBlock); nsAbsoluteItems fixedItems(mFixedContainingBlock); nsAbsoluteItems floaterList(nsnull); nsIContent* headerFooter; NS_NewTableRowGroupFrame(headerFooterFrame); rowGroupFrame->GetContent(&headerFooter); headerFooterFrame->Init(*aPresContext, headerFooter, newFrame, rowGroupStyle, nsnull); ProcessChildren(aPresContext, headerFooter, headerFooterFrame, absoluteItems, childItems, fixedItems, floaterList); NS_ASSERTION(!floaterList.childList, "unexpected floated element"); NS_RELEASE(headerFooter); headerFooterFrame->SetInitialChildList(*aPresContext, nsnull, childItems.childList); // Table specific initialization ((nsTableRowGroupFrame*)headerFooterFrame)->InitRepeatedFrame ((nsTableRowGroupFrame*)rowGroupFrame); // XXX Deal with absolute and fixed frames... childFrames.AddChild(headerFooterFrame); } NS_RELEASE(rowGroupStyle); rowGroupFrame->GetNextSibling(&rowGroupFrame); } // Set the table frame's initial child list newFrame->SetInitialChildList(*aPresContext, nsnull, childFrames.childList); } *aContinuingFrame = newFrame; return rv; } NS_IMETHODIMP nsCSSFrameConstructor::CreateContinuingFrame(nsIPresContext* aPresContext, nsIFrame* aFrame, Loading Loading @@ -4259,12 +4335,8 @@ nsCSSFrameConstructor::CreateContinuingFrame(nsIPresContext* aPresContext, content, styleContext, &newFrame); } else if (nsLayoutAtoms::tableFrame == frameType) { rv = NS_NewTableFrame(newFrame); if (NS_SUCCEEDED(rv)) { newFrame->Init(*aPresContext, content, aParentFrame, styleContext, aFrame); nsHTMLContainerFrame::CreateViewForFrame(*aPresContext, newFrame, styleContext, PR_FALSE); } rv = CreateContinuingTableFrame(aPresContext, aFrame, aParentFrame, content, styleContext, &newFrame); } else if (nsLayoutAtoms::tableRowGroupFrame == frameType) { rv = NS_NewTableRowGroupFrame(newFrame); Loading
layout/base/nsCSSFrameConstructor.h +7 −0 Original line number Diff line number Diff line Loading @@ -393,6 +393,13 @@ protected: nsIStyleContext* aStyleContext, nsIFrame** aContinuingFrame); nsresult CreateContinuingTableFrame(nsIPresContext* aPresContext, nsIFrame* aFrame, nsIFrame* aParentFrame, nsIContent* aContent, nsIStyleContext* aStyleContext, nsIFrame** aContinuingFrame); protected: nsIDocument* mDocument; Loading
layout/html/style/src/nsCSSFrameConstructor.cpp +78 −6 Original line number Diff line number Diff line Loading @@ -53,6 +53,7 @@ #include "nsIDOMHTMLImageElement.h" #include "nsITextContent.h" #include "nsPlaceholderFrame.h" #include "nsTableRowGroupFrame.h" #ifdef INCLUDE_XUL #include "nsXULAtoms.h" Loading Loading @@ -4176,6 +4177,7 @@ nsCSSFrameConstructor::CreateContinuingOuterTableFrame(nsIPresContext* aPresCon ProcessChildren(aPresContext, caption, captionFrame, absoluteItems, childItems, fixedItems, floaterList); captionFrame->SetInitialChildList(*aPresContext, nsnull, childItems.childList); // XXX Deal with absolute and fixed frames... if (floaterList.childList) { captionFrame->SetInitialChildList(*aPresContext, nsLayoutAtoms::floaterList, Loading @@ -4197,6 +4199,80 @@ nsCSSFrameConstructor::CreateContinuingOuterTableFrame(nsIPresContext* aPresCon return rv; } nsresult nsCSSFrameConstructor::CreateContinuingTableFrame(nsIPresContext* aPresContext, nsIFrame* aFrame, nsIFrame* aParentFrame, nsIContent* aContent, nsIStyleContext* aStyleContext, nsIFrame** aContinuingFrame) { nsIFrame* newFrame; nsresult rv; rv = NS_NewTableFrame(newFrame); if (NS_SUCCEEDED(rv)) { newFrame->Init(*aPresContext, aContent, aParentFrame, aStyleContext, aFrame); nsHTMLContainerFrame::CreateViewForFrame(*aPresContext, newFrame, aStyleContext, PR_FALSE); // Replicate any header/footer frames nsIFrame* rowGroupFrame; nsFrameItems childFrames; aFrame->FirstChild(nsnull, &rowGroupFrame); while (rowGroupFrame) { // See if it's a header/footer nsIStyleContext* rowGroupStyle; const nsStyleDisplay* display; rowGroupFrame->GetStyleContext(&rowGroupStyle); display = (const nsStyleDisplay*)rowGroupStyle->GetStyleData(eStyleStruct_Display); if ((NS_STYLE_DISPLAY_TABLE_HEADER_GROUP == display->mDisplay) || (NS_STYLE_DISPLAY_TABLE_FOOTER_GROUP == display->mDisplay)) { // Get the containing block for absolutely positioned elements nsIFrame* absoluteContainingBlock = GetAbsoluteContainingBlock(aPresContext, newFrame); // Replicate the header/footer frame nsIFrame* headerFooterFrame; nsFrameItems childItems; nsAbsoluteItems absoluteItems(absoluteContainingBlock); nsAbsoluteItems fixedItems(mFixedContainingBlock); nsAbsoluteItems floaterList(nsnull); nsIContent* headerFooter; NS_NewTableRowGroupFrame(headerFooterFrame); rowGroupFrame->GetContent(&headerFooter); headerFooterFrame->Init(*aPresContext, headerFooter, newFrame, rowGroupStyle, nsnull); ProcessChildren(aPresContext, headerFooter, headerFooterFrame, absoluteItems, childItems, fixedItems, floaterList); NS_ASSERTION(!floaterList.childList, "unexpected floated element"); NS_RELEASE(headerFooter); headerFooterFrame->SetInitialChildList(*aPresContext, nsnull, childItems.childList); // Table specific initialization ((nsTableRowGroupFrame*)headerFooterFrame)->InitRepeatedFrame ((nsTableRowGroupFrame*)rowGroupFrame); // XXX Deal with absolute and fixed frames... childFrames.AddChild(headerFooterFrame); } NS_RELEASE(rowGroupStyle); rowGroupFrame->GetNextSibling(&rowGroupFrame); } // Set the table frame's initial child list newFrame->SetInitialChildList(*aPresContext, nsnull, childFrames.childList); } *aContinuingFrame = newFrame; return rv; } NS_IMETHODIMP nsCSSFrameConstructor::CreateContinuingFrame(nsIPresContext* aPresContext, nsIFrame* aFrame, Loading Loading @@ -4259,12 +4335,8 @@ nsCSSFrameConstructor::CreateContinuingFrame(nsIPresContext* aPresContext, content, styleContext, &newFrame); } else if (nsLayoutAtoms::tableFrame == frameType) { rv = NS_NewTableFrame(newFrame); if (NS_SUCCEEDED(rv)) { newFrame->Init(*aPresContext, content, aParentFrame, styleContext, aFrame); nsHTMLContainerFrame::CreateViewForFrame(*aPresContext, newFrame, styleContext, PR_FALSE); } rv = CreateContinuingTableFrame(aPresContext, aFrame, aParentFrame, content, styleContext, &newFrame); } else if (nsLayoutAtoms::tableRowGroupFrame == frameType) { rv = NS_NewTableRowGroupFrame(newFrame); Loading
layout/html/style/src/nsCSSFrameConstructor.h +7 −0 Original line number Diff line number Diff line Loading @@ -393,6 +393,13 @@ protected: nsIStyleContext* aStyleContext, nsIFrame** aContinuingFrame); nsresult CreateContinuingTableFrame(nsIPresContext* aPresContext, nsIFrame* aFrame, nsIFrame* aParentFrame, nsIContent* aContent, nsIStyleContext* aStyleContext, nsIFrame** aContinuingFrame); protected: nsIDocument* mDocument; Loading
layout/html/table/src/nsTableFrame.cpp +14 −3 Original line number Diff line number Diff line Loading @@ -375,7 +375,11 @@ nsTableFrame::SetInitialChildList(nsIPresContext& aPresContext, mFrames.SetFrames(childFrame); else prevMainChild->SetNextSibling(childFrame); // If we have a prev-in-flow, then we're a table that has been split and // so don't treat this like an append if (!mPrevInFlow) { rv = DidAppendRowGroup(GetRowGroupFrameFor(childFrame, childDisplay)); } prevMainChild = childFrame; } else if (NS_STYLE_DISPLAY_TABLE_COLUMN_GROUP == childDisplay->mDisplay) Loading Loading @@ -2683,8 +2687,14 @@ NS_METHOD nsTableFrame::ResizeReflowPass2(nsIPresContext& aPresContext, //PreReflowCheck(); #endif // Check for an overflow list MoveOverflowToChildList(); // Check for an overflow list, and append any row group frames being // pushed nsTableFrame* prevInFlow = (nsTableFrame*)mPrevInFlow; if (prevInFlow) { if (prevInFlow->mOverflowFrames.NotEmpty()) { mFrames.Join(this, prevInFlow->mOverflowFrames); } } // Reflow the existing frames if (mFrames.NotEmpty()) { Loading Loading @@ -3635,6 +3645,7 @@ NS_METHOD nsTableFrame::ReflowMappedChildren(nsIPresContext& aPresContext, kidFrame->GetNextSibling(&nextSibling); if (nsnull != nextSibling) { // XXX Don't push header/footer frames... PushChildren(nextSibling, kidFrame); } break; Loading