author | Mats Palmgren <matspal@gmail.com> |
Thu, 08 Mar 2012 02:57:37 +0100 | |
changeset 88483 | b0f4734dba3c87c960e2fdfa6ad23d542a651aa7 |
parent 88482 | d68d568d353806be25d82bdbcfef94ac3d767fe5 |
child 88484 | 3f8c3a825d011e6993ac09a9d2eef9728f6c7f62 |
push id | 22199 |
push user | bmo@edmorley.co.uk |
push date | Thu, 08 Mar 2012 13:15:53 +0000 |
treeherder | mozilla-central@09a8a48476e5 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | bz |
bugs | 728911 |
milestone | 13.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
layout/generic/nsBlockFrame.cpp | file | annotate | diff | comparison | revisions | |
layout/generic/nsBlockFrame.h | file | annotate | diff | comparison | revisions |
--- a/layout/generic/nsBlockFrame.cpp +++ b/layout/generic/nsBlockFrame.cpp @@ -280,16 +280,18 @@ DestroyOverflowLines(void* aPropertyValu { NS_ERROR("Overflow lines should never be destroyed by the FramePropertyTable"); } NS_DECLARE_FRAME_PROPERTY(LineCursorProperty, nsnull) NS_DECLARE_FRAME_PROPERTY(OverflowLinesProperty, DestroyOverflowLines) NS_DECLARE_FRAME_PROPERTY(OverflowOutOfFlowsProperty, nsContainerFrame::DestroyFrameList) +NS_DECLARE_FRAME_PROPERTY(PushedFloatProperty, + nsContainerFrame::DestroyFrameList) //---------------------------------------------------------------------- nsIFrame* NS_NewBlockFrame(nsIPresShell* aPresShell, nsStyleContext* aContext, PRUint32 aFlags) { nsBlockFrame* it = new (aPresShell) nsBlockFrame(aContext); if (it) { @@ -1081,17 +1083,17 @@ nsBlockFrame::Reflow(nsPresContext* // we need to continue, too. if (NS_UNCONSTRAINEDSIZE != reflowState->availableHeight && NS_FRAME_IS_COMPLETE(state.mReflowStatus) && state.mFloatManager->ClearContinues(FindTrailingClear())) { NS_FRAME_SET_INCOMPLETE(state.mReflowStatus); } if (!NS_FRAME_IS_FULLY_COMPLETE(state.mReflowStatus)) { - if (HasOverflowLines() || GetPushedFloats()) { + if (HasOverflowLines() || HasPushedFloats()) { state.mReflowStatus |= NS_FRAME_REFLOW_NEXTINFLOW; } #ifdef DEBUG_kipp ListTag(stdout); printf(": block is not fully complete\n"); #endif } @@ -4666,17 +4668,17 @@ nsBlockFrame::SetOverflowOutOfFlows(cons OverflowOutOfFlowsProperty()); AddStateBits(NS_BLOCK_HAS_OVERFLOW_OUT_OF_FLOWS); } } nsFrameList* nsBlockFrame::GetPushedFloats() const { - if (!(GetStateBits() & NS_BLOCK_HAS_PUSHED_FLOATS)) { + if (!HasPushedFloats()) { return nsnull; } nsFrameList* result = static_cast<nsFrameList*>(Properties().Get(PushedFloatProperty())); NS_ASSERTION(result, "value should always be non-empty when state set"); return result; } @@ -4692,20 +4694,19 @@ nsBlockFrame::EnsurePushedFloats() AddStateBits(NS_BLOCK_HAS_PUSHED_FLOATS); return result; } nsFrameList* nsBlockFrame::RemovePushedFloats() { - if (!(GetStateBits() & NS_BLOCK_HAS_PUSHED_FLOATS)) { + if (!HasPushedFloats()) { return nsnull; } - nsFrameList *result = static_cast<nsFrameList*>(Properties().Remove(PushedFloatProperty())); RemoveStateBits(NS_BLOCK_HAS_PUSHED_FLOATS); NS_ASSERTION(result, "value should always be non-empty when state set"); return result; } //////////////////////////////////////////////////////////////////////
--- a/layout/generic/nsBlockFrame.h +++ b/layout/generic/nsBlockFrame.h @@ -149,21 +149,16 @@ public: reverse_line_iterator rend_lines() { return mLines.rend(); } const_reverse_line_iterator rbegin_lines() const { return mLines.rbegin(); } const_reverse_line_iterator rend_lines() const { return mLines.rend(); } line_iterator line(nsLineBox* aList) { return mLines.begin(aList); } reverse_line_iterator rline(nsLineBox* aList) { return mLines.rbegin(aList); } friend nsIFrame* NS_NewBlockFrame(nsIPresShell* aPresShell, nsStyleContext* aContext, PRUint32 aFlags); - // This is a child list too, but we let nsBlockReflowState get to it - // directly too. - NS_DECLARE_FRAME_PROPERTY(PushedFloatProperty, - nsContainerFrame::DestroyFrameList) - // nsQueryFrame NS_DECL_QUERYFRAME // nsIFrame NS_IMETHOD Init(nsIContent* aContent, nsIFrame* aParent, nsIFrame* aPrevInFlow); NS_IMETHOD SetInitialChildList(ChildListID aListID, @@ -735,16 +730,23 @@ protected: nsFrameList* const mPropValue; nsBlockFrame* const mBlock; }; friend struct nsAutoOOFFrameList; nsFrameList* GetOverflowOutOfFlows() const; void SetOverflowOutOfFlows(const nsFrameList& aList, nsFrameList* aPropValue); + /** + * @return true if this frame has pushed floats. + */ + bool HasPushedFloats() const { + return 0 != (GetStateBits() & NS_BLOCK_HAS_PUSHED_FLOATS); + } + // Get the pushed floats list nsFrameList* GetPushedFloats() const; // Get the pushed floats list, or if there is not currently one, // make a new empty one. nsFrameList* EnsurePushedFloats(); // Remove and return the pushed floats list. nsFrameList* RemovePushedFloats();