From 7e2beae782219baad0a75f3b21499401475a75a4 Mon Sep 17 00:00:00 2001 From: "karnaze%netscape.com" Date: Tue, 8 Oct 2002 20:35:26 +0000 Subject: [PATCH] bug 163614 - Changed DeleteChildsNextInFlow to DeleteNextInFlowChild, params, and callers. sr=kin, r=alexsavulov,dcone git-svn-id: svn://10.0.0.236/trunk@131456 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/layout/generic/nsBlockFrame.cpp | 69 ++++--- mozilla/layout/generic/nsBlockFrame.h | 4 +- .../layout/generic/nsBlockReflowContext.cpp | 4 +- mozilla/layout/generic/nsContainerFrame.cpp | 62 +++--- mozilla/layout/generic/nsContainerFrame.h | 6 +- mozilla/layout/generic/nsFirstLetterFrame.cpp | 2 +- mozilla/layout/generic/nsLineLayout.cpp | 4 +- mozilla/layout/html/base/src/nsBlockFrame.cpp | 69 ++++--- mozilla/layout/html/base/src/nsBlockFrame.h | 4 +- .../html/base/src/nsBlockReflowContext.cpp | 4 +- .../layout/html/base/src/nsContainerFrame.cpp | 62 +++--- .../layout/html/base/src/nsContainerFrame.h | 6 +- .../html/base/src/nsFirstLetterFrame.cpp | 2 +- mozilla/layout/html/base/src/nsLineLayout.cpp | 4 +- .../html/tests/block/images/black_1pix.html | 2 + .../html/tests/block/images/continue.jpg | Bin 0 -> 9633 bytes .../layout/html/tests/block/images/fig1s.jpg | Bin 0 -> 17624 bytes .../layout/html/tests/block/images/fig2s.jpg | Bin 0 -> 16383 bytes .../layout/html/tests/block/images/fig3s.jpg | Bin 0 -> 18126 bytes .../html/tests/block/images/tech-banner1.gif | Bin 0 -> 15807 bytes .../html/tests/block/images/tech-banner2.gif | Bin 0 -> 11865 bytes .../html/tests/block/printing/163614.html | 192 ++++++++++++++++++ .../html/tests/block/printing/file_list.txt | 2 + 23 files changed, 344 insertions(+), 154 deletions(-) create mode 100644 mozilla/layout/html/tests/block/images/black_1pix.html create mode 100644 mozilla/layout/html/tests/block/images/continue.jpg create mode 100644 mozilla/layout/html/tests/block/images/fig1s.jpg create mode 100644 mozilla/layout/html/tests/block/images/fig2s.jpg create mode 100644 mozilla/layout/html/tests/block/images/fig3s.jpg create mode 100644 mozilla/layout/html/tests/block/images/tech-banner1.gif create mode 100644 mozilla/layout/html/tests/block/images/tech-banner2.gif create mode 100644 mozilla/layout/html/tests/block/printing/163614.html diff --git a/mozilla/layout/generic/nsBlockFrame.cpp b/mozilla/layout/generic/nsBlockFrame.cpp index 8dd711c92bf..8a18b6f8116 100644 --- a/mozilla/layout/generic/nsBlockFrame.cpp +++ b/mozilla/layout/generic/nsBlockFrame.cpp @@ -3705,11 +3705,11 @@ nsBlockFrame::DoReflowInlineFrames(nsBlockReflowState& aState, } if (LINE_REFLOW_OK != lineReflowStatus) { // It is possible that one or more of next lines are empty - // (because of DeleteChildsNextInFlow). If so, delete them now + // (because of DeleteNextInFlowChild). If so, delete them now // in case we are finished. ++aLine; while ((aLine != end_lines()) && (0 == aLine->GetChildCount())) { - // XXX Is this still necessary now that DeleteChildsNextInFlow + // XXX Is this still necessary now that DeleteNextInFlowChild // uses DoRemoveFrame? nsLineBox *toremove = aLine; aLine = mLines.erase(aLine); @@ -5271,36 +5271,21 @@ nsBlockFrame::DoRemoveFrame(nsIPresContext* aPresContext, } void -nsBlockFrame::DeleteChildsNextInFlow(nsIPresContext* aPresContext, - nsIFrame* aChild) +nsBlockFrame::DeleteNextInFlowChild(nsIPresContext* aPresContext, + nsIFrame* aNextInFlow) { -#ifdef DEBUG - // out-of-flow and placeholders frames don't satisfy the IsChild condition because - // DeleteChildsNextInFlow needs to be called on the parent of the next-in-flow - nsFrameState childState; - aChild->GetFrameState(&childState); - nsCOMPtr frameType; - aChild->GetFrameType(getter_AddRefs(frameType)); - if ((nsLayoutAtoms::placeholderFrame != frameType) && !(childState & NS_FRAME_OUT_OF_FLOW)) { - NS_PRECONDITION(IsChild(aPresContext, aChild), "bad geometric parent"); - } -#endif + nsIFrame* prevInFlow; + aNextInFlow->GetPrevInFlow(&prevInFlow); + NS_PRECONDITION(prevInFlow, "bad next-in-flow"); + NS_PRECONDITION(IsChild(aPresContext, aNextInFlow), "bad geometric parent"); - nsIFrame* nextInFlow; - aChild->GetNextInFlow(&nextInFlow); - NS_PRECONDITION(nsnull != nextInFlow, "null next-in-flow"); #ifdef IBMBIDI nsIFrame* nextBidi; - aChild->GetBidiProperty(aPresContext, nsLayoutAtoms::nextBidi, - (void**) &nextBidi,sizeof(nextBidi)); - if (nextBidi != nextInFlow) { + prevInFlow->GetBidiProperty(aPresContext, nsLayoutAtoms::nextBidi, + (void**) &nextBidi,sizeof(nextBidi)); + if (nextBidi != aNextInFlow) { #endif // IBMBIDI - nsBlockFrame* parent; - nextInFlow->GetParent((nsIFrame**)&parent); - NS_PRECONDITION(nsnull != parent, "next-in-flow with no parent"); - NS_PRECONDITION(! parent->mLines.empty(), "next-in-flow with weird parent"); -// NS_PRECONDITION(nsnull == parent->mOverflowLines, "parent with overflow"); - parent->DoRemoveFrame(aPresContext, nextInFlow); + DoRemoveFrame(aPresContext, aNextInFlow); #ifdef IBMBIDI } #endif // IBMBIDI @@ -5321,11 +5306,10 @@ nsBlockFrame::ReflowFloater(nsBlockReflowState& aState, nsIFrame* nextInFlow; aPlaceholder->GetNextInFlow(&nextInFlow); if (nextInFlow) { - // Use nextInFlow's parent since it always will be able to find nextInFlow. // If aPlaceholder's parent is an inline, nextInFlow's will be a block. nsHTMLContainerFrame* parent; nextInFlow->GetParent((nsIFrame**)&parent); - parent->DeleteChildsNextInFlow(aState.mPresContext, aPlaceholder); + parent->DeleteNextInFlowChild(aState.mPresContext, nextInFlow); } // Reflow the floater. nsIFrame* floater = aPlaceholder->GetOutOfFlowFrame(); @@ -6239,7 +6223,7 @@ nsBlockFrame::ReflowDirtyChild(nsIPresShell* aPresShell, nsIFrame* aChild) } ////////////////////////////////////////////////////////////////////// -// Debugging +// Start Debugging #ifdef NS_DEBUG static PRBool @@ -6278,16 +6262,34 @@ InSiblingList(nsLineList& aLines, nsIFrame* aFrame) PRBool nsBlockFrame::IsChild(nsIPresContext* aPresContext, nsIFrame* aFrame) { + // Continued out-of-flows don't satisfy InLineList(), continued out-of-flows + // and placeholders don't satisfy InSiblingList(). + PRBool skipLineList = PR_FALSE; + PRBool skipSiblingList = PR_FALSE; + nsIFrame* prevInFlow; + aFrame->GetPrevInFlow(&prevInFlow); + if (prevInFlow) { + nsFrameState state; + aFrame->GetFrameState(&state); + nsCOMPtr frameType; + aFrame->GetFrameType(getter_AddRefs(frameType)); + skipLineList = (state & NS_FRAME_OUT_OF_FLOW); + skipSiblingList = (nsLayoutAtoms::placeholderFrame == frameType) || + (state & NS_FRAME_OUT_OF_FLOW); + } + nsIFrame* parent; aFrame->GetParent(&parent); if (parent != (nsIFrame*)this) { return PR_FALSE; } - if (InLineList(mLines, aFrame) && InSiblingList(mLines, aFrame)) { + if ((skipLineList || InLineList(mLines, aFrame)) && + (skipSiblingList || InSiblingList(mLines, aFrame))) { return PR_TRUE; } nsLineList* overflowLines = GetOverflowLines(aPresContext, PR_FALSE); - if (overflowLines && InLineList(*overflowLines, aFrame) && InSiblingList(*overflowLines, aFrame)) { + if (overflowLines && (skipLineList || InLineList(*overflowLines, aFrame)) && + (skipSiblingList || InSiblingList(*overflowLines, aFrame))) { return PR_TRUE; } return PR_FALSE; @@ -6323,7 +6325,8 @@ nsBlockFrame::SizeOf(nsISizeOfHandler* aHandler, PRUint32* aResult) const } #endif -//---------------------------------------------------------------------- +// End Debugging +////////////////////////////////////////////////////////////////////// NS_IMETHODIMP nsBlockFrame::Init(nsIPresContext* aPresContext, diff --git a/mozilla/layout/generic/nsBlockFrame.h b/mozilla/layout/generic/nsBlockFrame.h index 0bac95e6963..176badcd3d5 100644 --- a/mozilla/layout/generic/nsBlockFrame.h +++ b/mozilla/layout/generic/nsBlockFrame.h @@ -180,8 +180,8 @@ public: #endif - virtual void DeleteChildsNextInFlow(nsIPresContext* aPresContext, - nsIFrame* aNextInFlow); + virtual void DeleteNextInFlowChild(nsIPresContext* aPresContext, + nsIFrame* aNextInFlow); /** return the topmost block child based on y-index. * almost always the first or second line, if there is one. diff --git a/mozilla/layout/generic/nsBlockReflowContext.cpp b/mozilla/layout/generic/nsBlockReflowContext.cpp index 201abfac560..ec9d11667d0 100644 --- a/mozilla/layout/generic/nsBlockReflowContext.cpp +++ b/mozilla/layout/generic/nsBlockReflowContext.cpp @@ -626,8 +626,8 @@ nsBlockReflowContext::ReflowBlock(const nsRect& aSpace, // parent is not this because we are executing pullup code) /* XXX promote DeleteChildsNextInFlow to nsIFrame to elminate this cast */ nsHTMLContainerFrame* parent; - mFrame->GetParent((nsIFrame**)&parent); - parent->DeleteChildsNextInFlow(mPresContext, mFrame); + kidNextInFlow->GetParent((nsIFrame**)&parent); + parent->DeleteNextInFlowChild(mPresContext, kidNextInFlow); } } } diff --git a/mozilla/layout/generic/nsContainerFrame.cpp b/mozilla/layout/generic/nsContainerFrame.cpp index 608f3c8a3fb..82942d741ae 100644 --- a/mozilla/layout/generic/nsContainerFrame.cpp +++ b/mozilla/layout/generic/nsContainerFrame.cpp @@ -883,7 +883,7 @@ nsContainerFrame::FrameNeedsView(nsIPresContext* aPresContext, /** * Invokes the WillReflow() function, positions the frame and its view (if * requested), and then calls Reflow(). If the reflow succeeds and the child - * frame is complete, deletes any next-in-flows using DeleteChildsNextInFlow() + * frame is complete, deletes any next-in-flows using DeleteNextInFlowChild() */ nsresult nsContainerFrame::ReflowChild(nsIFrame* aKidFrame, @@ -953,10 +953,9 @@ nsContainerFrame::ReflowChild(nsIFrame* aKidFrame, // Remove all of the childs next-in-flows. Make sure that we ask // the right parent to do the removal (it's possible that the // parent is not this because we are executing pullup code) - nsIFrame* parent; - aKidFrame->GetParent(&parent); - ((nsContainerFrame*)parent)->DeleteChildsNextInFlow(aPresContext, - aKidFrame); + nsContainerFrame* parent; + kidNextInFlow->GetParent((nsIFrame**)&parent); + parent->DeleteNextInFlowChild(aPresContext, kidNextInFlow); } } return result; @@ -1051,69 +1050,64 @@ nsContainerFrame::FinishReflowChild(nsIFrame* aKidFrame, } /** - * Remove and delete aChild's next-in-flow(s). Updates the sibling and flow + * Remove and delete aNextInFlow and its next-in-flows. Updates the sibling and flow * pointers - * - * @param aChild child this child's next-in-flow - * @return PR_TRUE if successful and PR_FALSE otherwise */ void -nsContainerFrame::DeleteChildsNextInFlow(nsIPresContext* aPresContext, - nsIFrame* aChild) +nsContainerFrame::DeleteNextInFlowChild(nsIPresContext* aPresContext, + nsIFrame* aNextInFlow) { - NS_PRECONDITION(mFrames.ContainsFrame(aChild), "bad geometric parent"); - - nsIFrame* nextInFlow; - nsContainerFrame* parent; - - aChild->GetNextInFlow(&nextInFlow); - NS_PRECONDITION(nsnull != nextInFlow, "null next-in-flow"); - nextInFlow->GetParent((nsIFrame**)&parent); + nsIFrame* prevInFlow; + aNextInFlow->GetPrevInFlow(&prevInFlow); + NS_PRECONDITION(prevInFlow, "bad prev-in-flow"); + NS_PRECONDITION(mFrames.ContainsFrame(aNextInFlow), "bad geometric parent"); // If the next-in-flow has a next-in-flow then delete it, too (and // delete it first). nsIFrame* nextNextInFlow; - - nextInFlow->GetNextInFlow(&nextNextInFlow); - if (nsnull != nextNextInFlow) { - parent->DeleteChildsNextInFlow(aPresContext, nextInFlow); + aNextInFlow->GetNextInFlow(&nextNextInFlow); + if (nextNextInFlow) { + nsContainerFrame* parent; + nextNextInFlow->GetParent((nsIFrame**)&parent); + parent->DeleteNextInFlowChild(aPresContext, nextNextInFlow); } #ifdef IBMBIDI nsIFrame* nextBidi; - aChild->GetBidiProperty(aPresContext, nsLayoutAtoms::nextBidi, - (void**) &nextBidi,sizeof(nextBidi)); - if (nextBidi == nextInFlow) { + prevInFlow->GetBidiProperty(aPresContext, nsLayoutAtoms::nextBidi, + (void**) &nextBidi,sizeof(nextBidi)); + if (nextBidi == aNextInFlow) { return; } #endif // IBMBIDI // Disconnect the next-in-flow from the flow list - nsSplittableFrame::BreakFromPrevFlow(nextInFlow); + nsSplittableFrame::BreakFromPrevFlow(aNextInFlow); // Take the next-in-flow out of the parent's child list - PRBool result = parent->mFrames.RemoveFrame(nextInFlow); + PRBool result = mFrames.RemoveFrame(aNextInFlow); if (!result) { // We didn't find the child in the parent's principal child list. // Maybe it's on the overflow list? - nsFrameList overflowFrames(parent->GetOverflowFrames(aPresContext, PR_TRUE)); + nsFrameList overflowFrames(GetOverflowFrames(aPresContext, PR_TRUE)); - if (overflowFrames.IsEmpty() || !overflowFrames.RemoveFrame(nextInFlow)) { + if (overflowFrames.IsEmpty() || !overflowFrames.RemoveFrame(aNextInFlow)) { NS_ASSERTION(result, "failed to remove frame"); } // Set the overflow property again if (overflowFrames.NotEmpty()) { - parent->SetOverflowFrames(aPresContext, overflowFrames.FirstChild()); + SetOverflowFrames(aPresContext, overflowFrames.FirstChild()); } } // Delete the next-in-flow frame - nextInFlow->Destroy(aPresContext); + aNextInFlow->Destroy(aPresContext); #ifdef NS_DEBUG - aChild->GetNextInFlow(&nextInFlow); - NS_POSTCONDITION(nsnull == nextInFlow, "non null next-in-flow"); + nsIFrame* nextInFlow; + prevInFlow->GetNextInFlow(&nextInFlow); + NS_POSTCONDITION(!nextInFlow, "non null next-in-flow"); #endif } diff --git a/mozilla/layout/generic/nsContainerFrame.h b/mozilla/layout/generic/nsContainerFrame.h index fc05068ac63..444d9efcd2d 100644 --- a/mozilla/layout/generic/nsContainerFrame.h +++ b/mozilla/layout/generic/nsContainerFrame.h @@ -88,8 +88,8 @@ public: #endif // nsContainerFrame methods - virtual void DeleteChildsNextInFlow(nsIPresContext* aPresContext, - nsIFrame* aChild); + virtual void DeleteNextInFlowChild(nsIPresContext* aPresContext, + nsIFrame* aNextInFlow); static PRInt32 LengthOf(nsIFrame* aFrameList) { nsFrameList tmp(aFrameList); @@ -143,7 +143,7 @@ public: /** * Invokes the WillReflow() function, positions the frame and its view (if * requested), and then calls Reflow(). If the reflow succeeds and the child - * frame is complete, deletes any next-in-flows using DeleteChildsNextInFlow() + * frame is complete, deletes any next-in-flows using DeleteNextInFlowChild() * * Flags: * NS_FRAME_NO_MOVE_VIEW - don't position the frame's view. Set this if you diff --git a/mozilla/layout/generic/nsFirstLetterFrame.cpp b/mozilla/layout/generic/nsFirstLetterFrame.cpp index bc72bcc3e93..bb5d38d9b18 100644 --- a/mozilla/layout/generic/nsFirstLetterFrame.cpp +++ b/mozilla/layout/generic/nsFirstLetterFrame.cpp @@ -275,7 +275,7 @@ nsFirstLetterFrame::Reflow(nsIPresContext* aPresContext, kid->GetNextInFlow(&kidNextInFlow); if (nsnull != kidNextInFlow) { // Remove all of the childs next-in-flows - DeleteChildsNextInFlow(aPresContext, kid); + DeleteNextInFlowChild(aPresContext, kidNextInFlow); } } else { diff --git a/mozilla/layout/generic/nsLineLayout.cpp b/mozilla/layout/generic/nsLineLayout.cpp index b82baf6cdcb..58c69ad97f7 100644 --- a/mozilla/layout/generic/nsLineLayout.cpp +++ b/mozilla/layout/generic/nsLineLayout.cpp @@ -1288,8 +1288,8 @@ nsLineLayout::ReflowFrame(nsIFrame* aFrame, // the right parent to do the removal (it's possible that the // parent is not this because we are executing pullup code) nsHTMLContainerFrame* parent; - aFrame->GetParent((nsIFrame**) &parent); - parent->DeleteChildsNextInFlow(mPresContext, aFrame); + kidNextInFlow->GetParent((nsIFrame**) &parent); + parent->DeleteNextInFlowChild(mPresContext, kidNextInFlow); } } diff --git a/mozilla/layout/html/base/src/nsBlockFrame.cpp b/mozilla/layout/html/base/src/nsBlockFrame.cpp index 8dd711c92bf..8a18b6f8116 100644 --- a/mozilla/layout/html/base/src/nsBlockFrame.cpp +++ b/mozilla/layout/html/base/src/nsBlockFrame.cpp @@ -3705,11 +3705,11 @@ nsBlockFrame::DoReflowInlineFrames(nsBlockReflowState& aState, } if (LINE_REFLOW_OK != lineReflowStatus) { // It is possible that one or more of next lines are empty - // (because of DeleteChildsNextInFlow). If so, delete them now + // (because of DeleteNextInFlowChild). If so, delete them now // in case we are finished. ++aLine; while ((aLine != end_lines()) && (0 == aLine->GetChildCount())) { - // XXX Is this still necessary now that DeleteChildsNextInFlow + // XXX Is this still necessary now that DeleteNextInFlowChild // uses DoRemoveFrame? nsLineBox *toremove = aLine; aLine = mLines.erase(aLine); @@ -5271,36 +5271,21 @@ nsBlockFrame::DoRemoveFrame(nsIPresContext* aPresContext, } void -nsBlockFrame::DeleteChildsNextInFlow(nsIPresContext* aPresContext, - nsIFrame* aChild) +nsBlockFrame::DeleteNextInFlowChild(nsIPresContext* aPresContext, + nsIFrame* aNextInFlow) { -#ifdef DEBUG - // out-of-flow and placeholders frames don't satisfy the IsChild condition because - // DeleteChildsNextInFlow needs to be called on the parent of the next-in-flow - nsFrameState childState; - aChild->GetFrameState(&childState); - nsCOMPtr frameType; - aChild->GetFrameType(getter_AddRefs(frameType)); - if ((nsLayoutAtoms::placeholderFrame != frameType) && !(childState & NS_FRAME_OUT_OF_FLOW)) { - NS_PRECONDITION(IsChild(aPresContext, aChild), "bad geometric parent"); - } -#endif + nsIFrame* prevInFlow; + aNextInFlow->GetPrevInFlow(&prevInFlow); + NS_PRECONDITION(prevInFlow, "bad next-in-flow"); + NS_PRECONDITION(IsChild(aPresContext, aNextInFlow), "bad geometric parent"); - nsIFrame* nextInFlow; - aChild->GetNextInFlow(&nextInFlow); - NS_PRECONDITION(nsnull != nextInFlow, "null next-in-flow"); #ifdef IBMBIDI nsIFrame* nextBidi; - aChild->GetBidiProperty(aPresContext, nsLayoutAtoms::nextBidi, - (void**) &nextBidi,sizeof(nextBidi)); - if (nextBidi != nextInFlow) { + prevInFlow->GetBidiProperty(aPresContext, nsLayoutAtoms::nextBidi, + (void**) &nextBidi,sizeof(nextBidi)); + if (nextBidi != aNextInFlow) { #endif // IBMBIDI - nsBlockFrame* parent; - nextInFlow->GetParent((nsIFrame**)&parent); - NS_PRECONDITION(nsnull != parent, "next-in-flow with no parent"); - NS_PRECONDITION(! parent->mLines.empty(), "next-in-flow with weird parent"); -// NS_PRECONDITION(nsnull == parent->mOverflowLines, "parent with overflow"); - parent->DoRemoveFrame(aPresContext, nextInFlow); + DoRemoveFrame(aPresContext, aNextInFlow); #ifdef IBMBIDI } #endif // IBMBIDI @@ -5321,11 +5306,10 @@ nsBlockFrame::ReflowFloater(nsBlockReflowState& aState, nsIFrame* nextInFlow; aPlaceholder->GetNextInFlow(&nextInFlow); if (nextInFlow) { - // Use nextInFlow's parent since it always will be able to find nextInFlow. // If aPlaceholder's parent is an inline, nextInFlow's will be a block. nsHTMLContainerFrame* parent; nextInFlow->GetParent((nsIFrame**)&parent); - parent->DeleteChildsNextInFlow(aState.mPresContext, aPlaceholder); + parent->DeleteNextInFlowChild(aState.mPresContext, nextInFlow); } // Reflow the floater. nsIFrame* floater = aPlaceholder->GetOutOfFlowFrame(); @@ -6239,7 +6223,7 @@ nsBlockFrame::ReflowDirtyChild(nsIPresShell* aPresShell, nsIFrame* aChild) } ////////////////////////////////////////////////////////////////////// -// Debugging +// Start Debugging #ifdef NS_DEBUG static PRBool @@ -6278,16 +6262,34 @@ InSiblingList(nsLineList& aLines, nsIFrame* aFrame) PRBool nsBlockFrame::IsChild(nsIPresContext* aPresContext, nsIFrame* aFrame) { + // Continued out-of-flows don't satisfy InLineList(), continued out-of-flows + // and placeholders don't satisfy InSiblingList(). + PRBool skipLineList = PR_FALSE; + PRBool skipSiblingList = PR_FALSE; + nsIFrame* prevInFlow; + aFrame->GetPrevInFlow(&prevInFlow); + if (prevInFlow) { + nsFrameState state; + aFrame->GetFrameState(&state); + nsCOMPtr frameType; + aFrame->GetFrameType(getter_AddRefs(frameType)); + skipLineList = (state & NS_FRAME_OUT_OF_FLOW); + skipSiblingList = (nsLayoutAtoms::placeholderFrame == frameType) || + (state & NS_FRAME_OUT_OF_FLOW); + } + nsIFrame* parent; aFrame->GetParent(&parent); if (parent != (nsIFrame*)this) { return PR_FALSE; } - if (InLineList(mLines, aFrame) && InSiblingList(mLines, aFrame)) { + if ((skipLineList || InLineList(mLines, aFrame)) && + (skipSiblingList || InSiblingList(mLines, aFrame))) { return PR_TRUE; } nsLineList* overflowLines = GetOverflowLines(aPresContext, PR_FALSE); - if (overflowLines && InLineList(*overflowLines, aFrame) && InSiblingList(*overflowLines, aFrame)) { + if (overflowLines && (skipLineList || InLineList(*overflowLines, aFrame)) && + (skipSiblingList || InSiblingList(*overflowLines, aFrame))) { return PR_TRUE; } return PR_FALSE; @@ -6323,7 +6325,8 @@ nsBlockFrame::SizeOf(nsISizeOfHandler* aHandler, PRUint32* aResult) const } #endif -//---------------------------------------------------------------------- +// End Debugging +////////////////////////////////////////////////////////////////////// NS_IMETHODIMP nsBlockFrame::Init(nsIPresContext* aPresContext, diff --git a/mozilla/layout/html/base/src/nsBlockFrame.h b/mozilla/layout/html/base/src/nsBlockFrame.h index 0bac95e6963..176badcd3d5 100644 --- a/mozilla/layout/html/base/src/nsBlockFrame.h +++ b/mozilla/layout/html/base/src/nsBlockFrame.h @@ -180,8 +180,8 @@ public: #endif - virtual void DeleteChildsNextInFlow(nsIPresContext* aPresContext, - nsIFrame* aNextInFlow); + virtual void DeleteNextInFlowChild(nsIPresContext* aPresContext, + nsIFrame* aNextInFlow); /** return the topmost block child based on y-index. * almost always the first or second line, if there is one. diff --git a/mozilla/layout/html/base/src/nsBlockReflowContext.cpp b/mozilla/layout/html/base/src/nsBlockReflowContext.cpp index 201abfac560..ec9d11667d0 100644 --- a/mozilla/layout/html/base/src/nsBlockReflowContext.cpp +++ b/mozilla/layout/html/base/src/nsBlockReflowContext.cpp @@ -626,8 +626,8 @@ nsBlockReflowContext::ReflowBlock(const nsRect& aSpace, // parent is not this because we are executing pullup code) /* XXX promote DeleteChildsNextInFlow to nsIFrame to elminate this cast */ nsHTMLContainerFrame* parent; - mFrame->GetParent((nsIFrame**)&parent); - parent->DeleteChildsNextInFlow(mPresContext, mFrame); + kidNextInFlow->GetParent((nsIFrame**)&parent); + parent->DeleteNextInFlowChild(mPresContext, kidNextInFlow); } } } diff --git a/mozilla/layout/html/base/src/nsContainerFrame.cpp b/mozilla/layout/html/base/src/nsContainerFrame.cpp index 608f3c8a3fb..82942d741ae 100644 --- a/mozilla/layout/html/base/src/nsContainerFrame.cpp +++ b/mozilla/layout/html/base/src/nsContainerFrame.cpp @@ -883,7 +883,7 @@ nsContainerFrame::FrameNeedsView(nsIPresContext* aPresContext, /** * Invokes the WillReflow() function, positions the frame and its view (if * requested), and then calls Reflow(). If the reflow succeeds and the child - * frame is complete, deletes any next-in-flows using DeleteChildsNextInFlow() + * frame is complete, deletes any next-in-flows using DeleteNextInFlowChild() */ nsresult nsContainerFrame::ReflowChild(nsIFrame* aKidFrame, @@ -953,10 +953,9 @@ nsContainerFrame::ReflowChild(nsIFrame* aKidFrame, // Remove all of the childs next-in-flows. Make sure that we ask // the right parent to do the removal (it's possible that the // parent is not this because we are executing pullup code) - nsIFrame* parent; - aKidFrame->GetParent(&parent); - ((nsContainerFrame*)parent)->DeleteChildsNextInFlow(aPresContext, - aKidFrame); + nsContainerFrame* parent; + kidNextInFlow->GetParent((nsIFrame**)&parent); + parent->DeleteNextInFlowChild(aPresContext, kidNextInFlow); } } return result; @@ -1051,69 +1050,64 @@ nsContainerFrame::FinishReflowChild(nsIFrame* aKidFrame, } /** - * Remove and delete aChild's next-in-flow(s). Updates the sibling and flow + * Remove and delete aNextInFlow and its next-in-flows. Updates the sibling and flow * pointers - * - * @param aChild child this child's next-in-flow - * @return PR_TRUE if successful and PR_FALSE otherwise */ void -nsContainerFrame::DeleteChildsNextInFlow(nsIPresContext* aPresContext, - nsIFrame* aChild) +nsContainerFrame::DeleteNextInFlowChild(nsIPresContext* aPresContext, + nsIFrame* aNextInFlow) { - NS_PRECONDITION(mFrames.ContainsFrame(aChild), "bad geometric parent"); - - nsIFrame* nextInFlow; - nsContainerFrame* parent; - - aChild->GetNextInFlow(&nextInFlow); - NS_PRECONDITION(nsnull != nextInFlow, "null next-in-flow"); - nextInFlow->GetParent((nsIFrame**)&parent); + nsIFrame* prevInFlow; + aNextInFlow->GetPrevInFlow(&prevInFlow); + NS_PRECONDITION(prevInFlow, "bad prev-in-flow"); + NS_PRECONDITION(mFrames.ContainsFrame(aNextInFlow), "bad geometric parent"); // If the next-in-flow has a next-in-flow then delete it, too (and // delete it first). nsIFrame* nextNextInFlow; - - nextInFlow->GetNextInFlow(&nextNextInFlow); - if (nsnull != nextNextInFlow) { - parent->DeleteChildsNextInFlow(aPresContext, nextInFlow); + aNextInFlow->GetNextInFlow(&nextNextInFlow); + if (nextNextInFlow) { + nsContainerFrame* parent; + nextNextInFlow->GetParent((nsIFrame**)&parent); + parent->DeleteNextInFlowChild(aPresContext, nextNextInFlow); } #ifdef IBMBIDI nsIFrame* nextBidi; - aChild->GetBidiProperty(aPresContext, nsLayoutAtoms::nextBidi, - (void**) &nextBidi,sizeof(nextBidi)); - if (nextBidi == nextInFlow) { + prevInFlow->GetBidiProperty(aPresContext, nsLayoutAtoms::nextBidi, + (void**) &nextBidi,sizeof(nextBidi)); + if (nextBidi == aNextInFlow) { return; } #endif // IBMBIDI // Disconnect the next-in-flow from the flow list - nsSplittableFrame::BreakFromPrevFlow(nextInFlow); + nsSplittableFrame::BreakFromPrevFlow(aNextInFlow); // Take the next-in-flow out of the parent's child list - PRBool result = parent->mFrames.RemoveFrame(nextInFlow); + PRBool result = mFrames.RemoveFrame(aNextInFlow); if (!result) { // We didn't find the child in the parent's principal child list. // Maybe it's on the overflow list? - nsFrameList overflowFrames(parent->GetOverflowFrames(aPresContext, PR_TRUE)); + nsFrameList overflowFrames(GetOverflowFrames(aPresContext, PR_TRUE)); - if (overflowFrames.IsEmpty() || !overflowFrames.RemoveFrame(nextInFlow)) { + if (overflowFrames.IsEmpty() || !overflowFrames.RemoveFrame(aNextInFlow)) { NS_ASSERTION(result, "failed to remove frame"); } // Set the overflow property again if (overflowFrames.NotEmpty()) { - parent->SetOverflowFrames(aPresContext, overflowFrames.FirstChild()); + SetOverflowFrames(aPresContext, overflowFrames.FirstChild()); } } // Delete the next-in-flow frame - nextInFlow->Destroy(aPresContext); + aNextInFlow->Destroy(aPresContext); #ifdef NS_DEBUG - aChild->GetNextInFlow(&nextInFlow); - NS_POSTCONDITION(nsnull == nextInFlow, "non null next-in-flow"); + nsIFrame* nextInFlow; + prevInFlow->GetNextInFlow(&nextInFlow); + NS_POSTCONDITION(!nextInFlow, "non null next-in-flow"); #endif } diff --git a/mozilla/layout/html/base/src/nsContainerFrame.h b/mozilla/layout/html/base/src/nsContainerFrame.h index fc05068ac63..444d9efcd2d 100644 --- a/mozilla/layout/html/base/src/nsContainerFrame.h +++ b/mozilla/layout/html/base/src/nsContainerFrame.h @@ -88,8 +88,8 @@ public: #endif // nsContainerFrame methods - virtual void DeleteChildsNextInFlow(nsIPresContext* aPresContext, - nsIFrame* aChild); + virtual void DeleteNextInFlowChild(nsIPresContext* aPresContext, + nsIFrame* aNextInFlow); static PRInt32 LengthOf(nsIFrame* aFrameList) { nsFrameList tmp(aFrameList); @@ -143,7 +143,7 @@ public: /** * Invokes the WillReflow() function, positions the frame and its view (if * requested), and then calls Reflow(). If the reflow succeeds and the child - * frame is complete, deletes any next-in-flows using DeleteChildsNextInFlow() + * frame is complete, deletes any next-in-flows using DeleteNextInFlowChild() * * Flags: * NS_FRAME_NO_MOVE_VIEW - don't position the frame's view. Set this if you diff --git a/mozilla/layout/html/base/src/nsFirstLetterFrame.cpp b/mozilla/layout/html/base/src/nsFirstLetterFrame.cpp index bc72bcc3e93..bb5d38d9b18 100644 --- a/mozilla/layout/html/base/src/nsFirstLetterFrame.cpp +++ b/mozilla/layout/html/base/src/nsFirstLetterFrame.cpp @@ -275,7 +275,7 @@ nsFirstLetterFrame::Reflow(nsIPresContext* aPresContext, kid->GetNextInFlow(&kidNextInFlow); if (nsnull != kidNextInFlow) { // Remove all of the childs next-in-flows - DeleteChildsNextInFlow(aPresContext, kid); + DeleteNextInFlowChild(aPresContext, kidNextInFlow); } } else { diff --git a/mozilla/layout/html/base/src/nsLineLayout.cpp b/mozilla/layout/html/base/src/nsLineLayout.cpp index b82baf6cdcb..58c69ad97f7 100644 --- a/mozilla/layout/html/base/src/nsLineLayout.cpp +++ b/mozilla/layout/html/base/src/nsLineLayout.cpp @@ -1288,8 +1288,8 @@ nsLineLayout::ReflowFrame(nsIFrame* aFrame, // the right parent to do the removal (it's possible that the // parent is not this because we are executing pullup code) nsHTMLContainerFrame* parent; - aFrame->GetParent((nsIFrame**) &parent); - parent->DeleteChildsNextInFlow(mPresContext, aFrame); + kidNextInFlow->GetParent((nsIFrame**) &parent); + parent->DeleteNextInFlowChild(mPresContext, kidNextInFlow); } } diff --git a/mozilla/layout/html/tests/block/images/black_1pix.html b/mozilla/layout/html/tests/block/images/black_1pix.html new file mode 100644 index 00000000000..71e5bb1939a --- /dev/null +++ b/mozilla/layout/html/tests/block/images/black_1pix.html @@ -0,0 +1,2 @@ +Not Found +

Not Found

The requested object does not exist on this server. The link you followed is either outdated, inaccurate, or the server has been instructed not to let you have it. \ No newline at end of file diff --git a/mozilla/layout/html/tests/block/images/continue.jpg b/mozilla/layout/html/tests/block/images/continue.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ddae3d500f6def316daadd6d52c8a62bea02801f GIT binary patch literal 9633 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 literal 0 HcmV?d00001 diff --git a/mozilla/layout/html/tests/block/images/fig2s.jpg b/mozilla/layout/html/tests/block/images/fig2s.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d676dc38dc1bf4b70bf9fc1b716aaa5f07b380ac GIT binary patch literal 16383 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 literal 0 HcmV?d00001 diff --git a/mozilla/layout/html/tests/block/images/tech-banner1.gif b/mozilla/layout/html/tests/block/images/tech-banner1.gif new file mode 100644 index 0000000000000000000000000000000000000000..f3316caafe3492f34db9ef1d7659df1f8bebe12b GIT binary patch literal 15807 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 ?a8BnSX?h=O5223gPm&1eWcxL175 zSAE6T5$IQc{a1huSb-f_f-P8sJy?WI*nZtthHY4feOQQ%Sc#ojh*ensi@jKk&De`2 z2932?d{6;s;DB~zC1ogClRa6KJ=rc$hcJi&7PyQRXodqYDkG>_o4r|_wOI$)S)T1# zpZ!^&4O*ccTB0plqdnT4%~_>gTBdDUr+r$ejasKgTB@yDtG!yR&Dx`N15H2xD+q%y zpob_JTe2-%vnAUlSOQjHfg{j@1y})ko!N%K1G=qSyS>}GeE_}PTfXgEzx`Xl4P3z; zT*56}!_`~7OEuro!|IP2K&8V{LNqe-CzFgU;q7I01jXQwqN=!U;{p21WsTDUSI}J z-~oPM2##P0o?r@oU=&CKJa~mXa9j0l1~T|y5DsAx76KA(U-!*1en?>zUSSqi;eU8x z7>;2Xo?#lUVH>_-9L`}K-r*N+VITfsAP!<79%3RcVj<>XBu-)_UScM0;v`N6493SDFivCtHC|&jhGBO|gl|{^EO^`3 z)nYrgV=``IJ>Fv+K4U*N<8b(fZ}{UO=3_%XWJG>pDEAaFh~R>mIp8Z2SiTg6%Ge601Z+m7#hJtK3IcJmgh~VXFO2hP2hu#HUfSKhhPu`53$f8U}oayKiCC$2!KtQ0x-F1g{I^+cIO>%W3LwLumQomgjHiYtKmPw;t?%i0QZ1gl7J0&#;95Z+HgJ*nx2v2c%AIX=ZB0PVPibhD6YW z#}0#YknDP;Y^*k7Hl72|uxNL1=YDVivF3yA2J3%V=kZo;cd%(FK)^PV2db>2vmsaj*o>KtdUK2HVDP z03T$2!0;U?Y*g0g1Yd92G-EPZs2T{^2_>^(HoiS-5~2XwoOu0&fO%>K1f=Chx=^bz8sn6gG8TM`A-r1XTxs zs1AWVsO4KuathDt#HMwp#&u@@@m+s*8fNYSUcL0C~B(Q@25SY}=VE1-Ec!a-ngWq^k&v*qlgk;d>UAO=hr~x(r z0DX5?dgymLw)l(Rc8@1`j-PpIj`^lm_*vKmO(=#IfZ+fSHdZ>?jsh@hPuX?M$daTcSt>1dC?|QHQdaw_Bu^)S~FNR{!14StLlSg@= zM*?LS`Y2$95|{!zKzf&-@N~_4z2AGj?|Z-hd%zET!5@6WFMPv4e8f+D#b5lyhlh3L z1d$B@Wv~Ku2m!Ulg4KoF_EmZ;W+l)6e9#Yl(I0)%FMZQLebi5V)n9$qZ++K)eb|qE z*`IyduYJ%j*)E{`uvOdtVJLysl?9~Ve9ph(5Ga1*KYrv-e&t_&=5K!Ie}3qXe(9fn z>aTw5zkck`e(m3W?(hEMrw8zlg0y9YJU9a1p8{I|e)hflY(E0`e}DLofBBz(`mcZc zzkmGCfBoNo{s)L70tXT-Xz(DygbEijZ0PVI#E23nQcQ@YLLJs&V zY4Rk>lqy#)XzB7L%$PD~(yVFoCeEBXck=A%^C!@tLWdG9`qGvyJF-4%XeMMN$(2&4 zPSs%bD%Px8w{q?3^()x0V#ks#YxXSKv})I~ZR<8`vt}X>(4}hkZc4g(_ww!Q_b=eU zf(H{WZ1^zZ#EKU-Gj8noG33a8@lvjA`7-9rnm2Rq?D;e3(4t3^E^YcW>eQ-Nvu^GB THSE~3XVb22`!?>-0RaFzG@X>+ literal 0 HcmV?d00001 diff --git a/mozilla/layout/html/tests/block/printing/163614.html b/mozilla/layout/html/tests/block/printing/163614.html new file mode 100644 index 00000000000..4d660ac1f03 --- /dev/null +++ b/mozilla/layout/html/tests/block/printing/163614.html @@ -0,0 +1,192 @@ + + + + II. The Hall Effect + + + + + + + + + +
Technical ActivitiesTechnical ActivitiesResearch Projects / FacilitiesAbout SEDHomeNational Institute of Standards and TechnologySearchOutputsTechnical ActivitiesNIST home page
+ + + + + + + + + +
+ + + + + + +
+
+

II. The Hall Effect

+
+ +

Evolution of Resistance Concepts
+ The Hall Effect and the Lorentz Force
+ The van der Pauw Technique

+
+

Evolution of Resistance Concepts

+

Electrical characterization of materials evolved in three levels of understanding. In the early 1800s, the resistance R and conductance G were treated as measurable physical quantities obtainable from two-terminal I-V measurements (i.e., current I, voltage V). +Later, it became obvious that the resistance alone was not comprehensive +enough since different sample shapes gave different resistance values. This +led to the understanding (second level) that an intrinsic material property +like resistivity (or conductivity) is required that is not influenced by +the particular geometry of the sample. For the first time, this allowed scientists +to quantify the current-carrying capability of the material and carry out +meaningful comparisons between different samples.

+

By the +early 1900s, it was realized that resistivity was not a fundamental material +parameter, since different materials can have the same resistivity. Also, +a given material might exhibit different values of resistivity, depending +upon how it was synthesized. This is especially true for semiconductors, +where resistivity alone could not explain all observations. Theories of electrical +conduction were constructed with varying degrees of success, but until the +advent of quantum mechanics, no generally acceptable solution to the problem +of electrical transport was developed. This led to the definitions of carrier +density n and mobility ΅  (third level of understanding) which are capable of dealing with even the most complex electrical measurements today.Schematic of the Hall effect in a long, thin bar of semiconductor with four ohmic contacts. The direction of the magnetic field B is along the z-axis and the sample has a finite thickness d

+

The Hall Effect and the Lorentz Force

+

The +basic physical principle underlying the Hall effect is the Lorentz force. +When an electron moves along a direction perpendicular to an applied magnetic +field, it experiences a force acting normal to both directions and moves +in response to this force and the force effected by the internal electric +field. For an n-type, bar-shaped semiconductor shown in Fig.1, the carriers are predominately electrons of bulk density n. We assume that a constant current I +flows along the x-axis from left to right in the presence of a z-directed +magnetic field. Electrons subject to the Lorentz force initially drift away +from the current line toward the negative y-axis, resulting in an excess +surface electrical charge on the side of the sample. This charge results +in the Hall voltage, a potential drop across the two sides of the sample. +(Note that the force on holes is toward the same side because of their opposite +velocity and positive charge.) This transverse voltage is the Hall voltage +VH and its magnitude is equal to IB/qnd, where I is the current, B is the magnetic field, d is the sample thickness, and q (1.602 x 10-19 C) is the elementary charge. In some cases, it is convenient to use layer or sheet density (ns = nd) instead of bulk density. One then obtains the equation

+

+ + + + + + + +
ns = IB/q|VH|.(1)
+

+

Thus, by measuring the Hall voltage VH and from the known values of I, B, and q, one can determine the sheet density ns +of charge carriers in semiconductors. If the measurement apparatus is set +up as described later in Section III, the Hall voltage is negative for n-type semiconductors and positive for p-type semiconductors. The sheet resistance RS +of the semiconductor can be conveniently determined by use of the van der +Pauw resistivity measurement technique. Since sheet resistance involves both +sheet density and mobility, one can determine the Hall mobility from the +equation

+

+ + + + + + + +
 ΅  = |VH|/RSIB = 1/(qnSRS).(2)
+
+
+

+

If the conducting layer thickness d is known, one can determine the bulk resistivity (r = RSd) and the bulk density (n = nS/d). Schematic of a van der Pauw configuration used in the determination of the two characteristic resistances RA and RB

+

The van der Pauw Technique

+

In order to determine both the mobility ΅   and the sheet density ns, a combination of a resistivity measurement and a Hall measurement +is needed. We discuss here the van der Pauw technique which, due to its convenience, +is widely used in the semiconductor industry to determine the resistivity +of uniform samples (References 3 and 4). As originally devised by van der +Pauw, one uses an arbitrarily shaped (but simply connected, i.e., no holes +or nonconducting islands or inclusions), thin-plate sample containing four +very small ohmic contacts placed on the periphery (preferably in the corners) +of the plate. A schematic of a rectangular van der Pauw configuration is +shown in Fig. 2.

+

The objective of the resistivity measurement is to determine the sheet resistance RS. Van der Pauw demonstrated that there are actually two characteristic resistances RA and RB, associated with the corresponding terminals shown in Fig. 2. RA and RB are related to the sheet resistance RS through the van der Pauw equation

+

+ + + + + + + +
exp(-pRA/RS) + exp(-pRB/RS) = 1(3)
+

+

which can be solved numerically for RS.

+

The bulk electrical resistivity r can be calculated using

+

+ + + + + + + +
r = RSd.(4)
+

+

To obtain the two characteristic resistances, one applies a dc current I into contact 1 and out of contact 2 and measures the voltage V43 from contact 4 to contact 3 as shown in Fig. 2. Next, one applies the current I into contact 2 and out of contact 3 while measuring the voltage V14 from contact 1 to contact 4. RA and RB are calculated by means of the following expressions:

+

+ + + + + + + +
RA = V43/I12 and RB = V14/I23.(5)
+

+

Schematic of a van der Pauw configuration used in the determination of the Hall voltage VHThe objective of the Hall measurement in the van der Pauw technique is to determine the sheet carrier density ns by measuring the Hall voltage VH. The Hall voltage measurement consists of a series of voltage measurements with a constant current I and a constant magnetic field B applied perpendicular to the plane of the sample. Conveniently, the same sample, shown again in Fig. 3, can also be used for the Hall measurement. To measure the Hall voltage VH, a current I is forced through the opposing pair of contacts 1 and 3 and the Hall voltage VH (= V24) is measured across the remaining pair of contacts 2 and 4. Once the Hall voltage VH is acquired, the sheet carrier density ns can be calculated via ns = IB/q|VH| from the known values of I, B, and q.

+

There +are practical aspects which must be considered when carrying out Hall and +resistivity measurements. Primary concerns are (1) ohmic contact quality +and size, (2) sample uniformity and accurate thickness determination, (3) +thermomagnetic effects due to nonuniform temperature, and (4) photoconductive +and photovoltaic effects which can be minimized by measuring in a dark environment. +Also, the sample lateral dimensions must be large compared to the size of +the contacts and the sample thickness. Finally, one must accurately measure +sample temperature, magnetic field intensity, electrical current, and voltage.

+

Click for Next Page

+
+

+


+

+

| Main Page | I. Introduction | II. The Hall Effect | evolution of resistance concepts |
+ | the Hall effect and the Lorentz force | the van der Pauw technique |
+ | III. Resistivity and Hall Measurements | sample geometry | definitions for resistivity measurements |
+ | resistivity measurements | resistivity calculations | definitions for Hall measurements |
+ | Hall measurements | Hall calculations | Sample Hall Worksheet | Worksheet with Typical Data | IV. Algorithm |
+ | V. References | VI. Leave or View Comments | figure 1 | figure 2 | | figure 3 | figure 4 |
+

+

+


+

+
+

NIST is an agency of the U.S. Commerce Department's Technology Administration.

+

Date created: 12/4/2000
+ Last updated: 6/28/2001

+
+ + + + + + +
  +

Conferences/Workshops

+

Nanotechnology

+

Electronic Interconnects/Packaging

+

Compound Semiconductors

+

Hall Effect Measurements

+

Compound Semiconductor Roadmap

+
+ \ No newline at end of file diff --git a/mozilla/layout/html/tests/block/printing/file_list.txt b/mozilla/layout/html/tests/block/printing/file_list.txt index 1486ebf0499..2265e857415 100644 --- a/mozilla/layout/html/tests/block/printing/file_list.txt +++ b/mozilla/layout/html/tests/block/printing/file_list.txt @@ -20,3 +20,5 @@ file:///s:/mozilla/layout/html/tests/block/printing/145305-19.html file:///s:/mozilla/layout/html/tests/block/printing/145305-20.html file:///s:/mozilla/layout/html/tests/block/printing/145305-21.html file:///s:/mozilla/layout/html/tests/block/printing/150652.html +file:///s:/mozilla/layout/html/tests/block/printing/163614.html +