diff --git a/mozilla/layout/base/nsBidiPresUtils.cpp b/mozilla/layout/base/nsBidiPresUtils.cpp index c0d017c2189..b8ee7042d9f 100644 --- a/mozilla/layout/base/nsBidiPresUtils.cpp +++ b/mozilla/layout/base/nsBidiPresUtils.cpp @@ -111,9 +111,7 @@ SplitInlineAncestors(nsPresContext* aPresContext, nsIFrame* newFrame = aFrame->GetNextSibling(); nsIFrame* newParent; - while (nsLayoutAtoms::inlineFrame == parent->GetType() || - nsLayoutAtoms::positionedInlineFrame == parent->GetType()) { - + while (parent->IsFrameOfType(nsIFrame::eBidiInlineContainer)) { nsIFrame* grandparent = parent->GetParent(); NS_ASSERTION(grandparent, "Couldn't get parent's parent in nsBidiPresUtils::SplitInlineAncestors"); @@ -449,16 +447,13 @@ nsBidiPresUtils::Resolve(nsPresContext* aPresContext, nsIFrame* child = frame; nsIFrame* parent = frame->GetParent(); while (parent && - (nsLayoutAtoms::inlineFrame == parent->GetType() || - nsLayoutAtoms::positionedInlineFrame == parent->GetType()) && + parent->IsFrameOfType(nsIFrame::eBidiInlineContainer) && !child->GetNextSibling()) { child = parent; parent = child->GetParent(); } - if (parent && - (nsLayoutAtoms::inlineFrame == parent->GetType() || - nsLayoutAtoms::positionedInlineFrame == parent->GetType())) - SplitInlineAncestors(aPresContext, child); + if (parent && parent->IsFrameOfType(nsIFrame::eBidiInlineContainer)) + SplitInlineAncestors(aPresContext, child); } } // for return mSuccess; @@ -470,9 +465,7 @@ PRBool IsBidiLeaf(nsIFrame* aFrame) { nsIFrame* kid = aFrame->GetFirstChild(nsnull); return !kid || aFrame->GetStyleDisplay()->IsBlockLevel() - || !(nsLayoutAtoms::inlineFrame == frameType - || nsLayoutAtoms::positionedInlineFrame == frameType - || nsLayoutAtoms::letterFrame == frameType + || !(aFrame->IsFrameOfType(nsIFrame::eBidiInlineContainer) || nsLayoutAtoms::blockFrame == frameType); } @@ -493,9 +486,9 @@ nsBidiPresUtils::InitLogicalArray(nsPresContext* aPresContext, frame && frame != aNextInFlow; frame = frame->GetNextSibling()) { directionalFrame = nsnull; - const nsStyleDisplay* display = frame->GetStyleDisplay(); - if (aAddMarkers && !display->IsBlockLevel() ) { + if (aAddMarkers && + frame->IsFrameOfType(nsIFrame::eBidiInlineContainer)) { const nsStyleVisibility* vis = frame->GetStyleVisibility(); const nsStyleTextReset* text = frame->GetStyleTextReset(); switch (text->mUnicodeBidi) { diff --git a/mozilla/layout/generic/nsFirstLetterFrame.cpp b/mozilla/layout/generic/nsFirstLetterFrame.cpp index 818bdeef4f5..41bde76f66e 100644 --- a/mozilla/layout/generic/nsFirstLetterFrame.cpp +++ b/mozilla/layout/generic/nsFirstLetterFrame.cpp @@ -64,6 +64,8 @@ public: NS_IMETHOD GetFrameName(nsAString& aResult) const; #endif virtual nsIAtom* GetType() const; + virtual PRBool IsFrameOfType(PRUint32 aFlags) const; + NS_IMETHOD Reflow(nsPresContext* aPresContext, nsHTMLReflowMetrics& aDesiredSize, const nsHTMLReflowState& aReflowState, @@ -105,6 +107,12 @@ nsFirstLetterFrame::GetType() const return nsLayoutAtoms::letterFrame; } +PRBool +nsFirstLetterFrame::IsFrameOfType(PRUint32 aFlags) const +{ + return !(aFlags & ~nsIFrame::eBidiInlineContainer); +} + PRIntn nsFirstLetterFrame::GetSkipSides() const { diff --git a/mozilla/layout/generic/nsIFrame.h b/mozilla/layout/generic/nsIFrame.h index a90b253b031..acc4e7996be 100644 --- a/mozilla/layout/generic/nsIFrame.h +++ b/mozilla/layout/generic/nsIFrame.h @@ -1174,9 +1174,10 @@ public: * Bit-flags to pass to IsFrameOfType() */ enum { - eMathML = 1 << 0, - eSVG = 1 << 1, - eSVGForeignObject = 1 << 2 + eMathML = 1 << 0, + eSVG = 1 << 1, + eSVGForeignObject = 1 << 2, + eBidiInlineContainer = 1 << 3 }; /** diff --git a/mozilla/layout/generic/nsInlineFrame.cpp b/mozilla/layout/generic/nsInlineFrame.cpp index 198bd2c3c6a..e081517d446 100644 --- a/mozilla/layout/generic/nsInlineFrame.cpp +++ b/mozilla/layout/generic/nsInlineFrame.cpp @@ -105,6 +105,12 @@ nsInlineFrame::GetType() const return nsLayoutAtoms::inlineFrame; } +PRBool +nsInlineFrame::IsFrameOfType(PRUint32 aFlags) const +{ + return !(aFlags & ~nsIFrame::eBidiInlineContainer); +} + inline PRBool IsPaddingZero(nsStyleUnit aUnit, nsStyleCoord &aCoord) { diff --git a/mozilla/layout/generic/nsInlineFrame.h b/mozilla/layout/generic/nsInlineFrame.h index 28403b6cf2f..4d88af07294 100644 --- a/mozilla/layout/generic/nsInlineFrame.h +++ b/mozilla/layout/generic/nsInlineFrame.h @@ -108,6 +108,7 @@ public: NS_IMETHOD GetFrameName(nsAString& aResult) const; #endif virtual nsIAtom* GetType() const; + virtual PRBool IsFrameOfType(PRUint32 aFlags) const; virtual PRBool IsEmpty(); virtual PRBool IsSelfEmpty();