author | Daniel Holbert <dholbert@cs.stanford.edu> |
Thu, 22 Mar 2012 10:31:19 -0700 | |
changeset 90044 | 149297a4bbc25c01efc0a8fa957e9403dcc8d15b |
parent 90043 | e8d4d50cee766ca472c693b46edfe5336e5e8eea |
child 90045 | 89b83fc4fdb0268e11268f3d9af5bbf4c6edaf4b |
push id | 7443 |
push user | dholbert@mozilla.com |
push date | Thu, 22 Mar 2012 17:32:11 +0000 |
treeherder | mozilla-inbound@149297a4bbc2 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | bz |
bugs | 738007 |
milestone | 14.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/base/nsCSSFrameConstructor.cpp | file | annotate | diff | comparison | revisions | |
layout/base/nsCSSFrameConstructor.h | file | annotate | diff | comparison | revisions |
--- a/layout/base/nsCSSFrameConstructor.cpp +++ b/layout/base/nsCSSFrameConstructor.cpp @@ -3765,34 +3765,36 @@ nsCSSFrameConstructor::ConstructFrameFro if (rootBox) { rootBox->AddTooltipSupport(content); } } #endif if (NS_SUCCEEDED(rv) && (bits & FCDATA_WRAP_KIDS_IN_BLOCKS)) { nsFrameItems newItems; - nsFrameItems currentBlock; + nsFrameItems currentBlockItems; nsIFrame* f; while ((f = childItems.FirstChild()) != nsnull) { bool wrapFrame = IsInlineFrame(f) || IsFrameSpecial(f); if (!wrapFrame) { - rv = FlushAccumulatedBlock(aState, content, newFrame, ¤tBlock, &newItems); + rv = FlushAccumulatedBlock(aState, content, newFrame, + currentBlockItems, newItems); if (NS_FAILED(rv)) break; } childItems.RemoveFrame(f); if (wrapFrame) { - currentBlock.AddChild(f); + currentBlockItems.AddChild(f); } else { newItems.AddChild(f); } } - rv = FlushAccumulatedBlock(aState, content, newFrame, ¤tBlock, &newItems); + rv = FlushAccumulatedBlock(aState, content, newFrame, + currentBlockItems, newItems); if (childItems.NotEmpty()) { // an error must have occurred, delete unprocessed frames childItems.DestroyFrames(); } childItems = newItems; } @@ -4564,49 +4566,52 @@ nsCSSFrameConstructor::ResolveStyleConte return styleSet->ResolveStyleForNonElement(aParentStyleContext); } // MathML Mod - RBS nsresult nsCSSFrameConstructor::FlushAccumulatedBlock(nsFrameConstructorState& aState, nsIContent* aContent, nsIFrame* aParentFrame, - nsFrameItems* aBlockItems, - nsFrameItems* aNewItems) -{ - if (aBlockItems->IsEmpty()) { + nsFrameItems& aBlockItems, + nsFrameItems& aNewItems) +{ + if (aBlockItems.IsEmpty()) { // Nothing to do return NS_OK; } + nsIAtom* anonPseudo = nsCSSAnonBoxes::mozMathMLAnonymousBlock; + nsStyleContext* parentContext = nsFrame::CorrectStyleParentFrame(aParentFrame, - nsCSSAnonBoxes::mozMathMLAnonymousBlock)->GetStyleContext(); - nsStyleSet *styleSet = mPresShell->StyleSet(); + anonPseudo)->GetStyleContext(); + nsStyleSet* styleSet = mPresShell->StyleSet(); nsRefPtr<nsStyleContext> blockContext; blockContext = styleSet-> - ResolveAnonymousBoxStyle(nsCSSAnonBoxes::mozMathMLAnonymousBlock, - parentContext); + ResolveAnonymousBoxStyle(anonPseudo, parentContext); + // then, create a block frame that will wrap the child frames. Make it a // MathML frame so that Get(Absolute/Float)ContainingBlockFor know that this // is not a suitable block. - nsIFrame* blockFrame = NS_NewMathMLmathBlockFrame(mPresShell, blockContext, - NS_BLOCK_FLOAT_MGR | NS_BLOCK_MARGIN_ROOT); + nsIFrame* blockFrame = + NS_NewMathMLmathBlockFrame(mPresShell, blockContext, + NS_BLOCK_FLOAT_MGR | NS_BLOCK_MARGIN_ROOT); if (NS_UNLIKELY(!blockFrame)) return NS_ERROR_OUT_OF_MEMORY; InitAndRestoreFrame(aState, aContent, aParentFrame, nsnull, blockFrame); - ReparentFrames(this, blockFrame, *aBlockItems); + ReparentFrames(this, blockFrame, aBlockItems); // abs-pos and floats are disabled in MathML children so we don't have to // worry about messing up those. - blockFrame->SetInitialChildList(kPrincipalList, *aBlockItems); - NS_ASSERTION(aBlockItems->IsEmpty(), "What happened?"); - aBlockItems->Clear(); - aNewItems->AddChild(blockFrame); + blockFrame->SetInitialChildList(kPrincipalList, aBlockItems); + NS_ASSERTION(aBlockItems.IsEmpty(), "What happened?"); + aBlockItems.Clear(); + aNewItems.AddChild(blockFrame); return NS_OK; } // Only <math> elements can be floated or positioned. All other MathML // should be in-flow. #define SIMPLE_MATHML_CREATE(_tag, _func) \ { &nsGkAtoms::_tag, \ FCDATA_DECL(FCDATA_DISALLOW_OUT_OF_FLOW | \
--- a/layout/base/nsCSSFrameConstructor.h +++ b/layout/base/nsCSSFrameConstructor.h @@ -1303,18 +1303,18 @@ private: /** * Takes the frames in aBlockItems and wraps them in a new anonymous block * frame whose content is aContent and whose parent will be aParentFrame. * The anonymous block is added to aNewItems and aBlockItems is cleared. */ nsresult FlushAccumulatedBlock(nsFrameConstructorState& aState, nsIContent* aContent, nsIFrame* aParentFrame, - nsFrameItems* aBlockItems, - nsFrameItems* aNewItems); + nsFrameItems& aBlockItems, + nsFrameItems& aNewItems); // Function to find FrameConstructionData for aContent. Will return // null if aContent is not MathML. static const FrameConstructionData* FindMathMLData(Element* aElement, nsIAtom* aTag, PRInt32 aNameSpaceID, nsStyleContext* aStyleContext);