mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-03-01 13:57:32 +00:00
Bug 594983. Look inside display sublists to determine whether there is text for the layer. r=roc,a=blocking
This commit is contained in:
parent
73fec40f97
commit
8a60164429
@ -884,24 +884,6 @@ ContainerState::PopThebesLayerData()
|
||||
mThebesLayerDataStack.RemoveElementAt(lastIndex);
|
||||
}
|
||||
|
||||
static PRBool
|
||||
IsText(nsDisplayItem* aItem) {
|
||||
switch (aItem->GetType()) {
|
||||
case nsDisplayItem::TYPE_TEXT:
|
||||
case nsDisplayItem::TYPE_BULLET:
|
||||
case nsDisplayItem::TYPE_HEADER_FOOTER:
|
||||
#ifdef MOZ_MATHML
|
||||
case nsDisplayItem::TYPE_MATHML_CHAR_FOREGROUND:
|
||||
#endif
|
||||
#ifdef MOZ_XUL
|
||||
case nsDisplayItem::TYPE_XUL_TEXT_BOX:
|
||||
#endif
|
||||
return PR_TRUE;
|
||||
default:
|
||||
return PR_FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
ContainerState::ThebesLayerData::Accumulate(nsDisplayListBuilder* aBuilder,
|
||||
nsDisplayItem* aItem,
|
||||
@ -941,7 +923,7 @@ ContainerState::ThebesLayerData::Accumulate(nsDisplayListBuilder* aBuilder,
|
||||
if (tmp.GetNumRects() <= 4) {
|
||||
mOpaqueRegion = tmp;
|
||||
}
|
||||
} else if (IsText(aItem)) {
|
||||
} else if (aItem->HasText()) {
|
||||
mHasText = PR_TRUE;
|
||||
if (!mOpaqueRegion.Contains(aVisibleRect)) {
|
||||
mHasTextOverTransparent = PR_TRUE;
|
||||
|
@ -1160,6 +1160,16 @@ PRBool nsDisplayWrapList::ChildrenCanBeInactive(nsDisplayListBuilder* aBuilder,
|
||||
return PR_TRUE;
|
||||
}
|
||||
|
||||
PRBool nsDisplayWrapList::HasText()
|
||||
{
|
||||
for (nsDisplayItem* i = mList.GetBottom(); i; i = i->GetAbove()) {
|
||||
if (i->HasText()) {
|
||||
return PR_TRUE;
|
||||
}
|
||||
}
|
||||
return PR_FALSE;
|
||||
}
|
||||
|
||||
static nsresult
|
||||
WrapDisplayList(nsDisplayListBuilder* aBuilder, nsIFrame* aFrame,
|
||||
nsDisplayList* aList, nsDisplayWrapper* aWrapper) {
|
||||
|
@ -659,6 +659,12 @@ public:
|
||||
return mToReferenceFrame;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if this display item (or any children) contains text that might
|
||||
* be rendered with subpixel antialiasing.
|
||||
*/
|
||||
virtual PRBool HasText() { return PR_FALSE; }
|
||||
|
||||
protected:
|
||||
friend class nsDisplayList;
|
||||
|
||||
@ -1115,6 +1121,14 @@ public:
|
||||
mPaint(mFrame, aCtx, mVisibleRect, ToReferenceFrame());
|
||||
}
|
||||
NS_DISPLAY_DECL_NAME(mName, mType)
|
||||
|
||||
virtual PRBool HasText() {
|
||||
if (mType == nsDisplayItem::TYPE_HEADER_FOOTER) {
|
||||
return PR_TRUE;
|
||||
} else {
|
||||
return PR_FALSE;
|
||||
}
|
||||
}
|
||||
protected:
|
||||
PaintCallback mPaint;
|
||||
#ifdef DEBUG
|
||||
@ -1467,6 +1481,8 @@ public:
|
||||
return PR_FALSE;
|
||||
}
|
||||
NS_DISPLAY_DECL_NAME("WrapList", TYPE_WRAP_LIST)
|
||||
|
||||
virtual PRBool HasText();
|
||||
|
||||
virtual nsDisplayList* GetList() { return &mList; }
|
||||
|
||||
@ -1751,6 +1767,8 @@ public:
|
||||
|
||||
NS_DISPLAY_DECL_NAME("nsDisplayTransform", TYPE_TRANSFORM);
|
||||
|
||||
virtual PRBool HasText() { return mStoredList.HasText(); }
|
||||
|
||||
#ifdef NS_DEBUG
|
||||
nsDisplayWrapList* GetStoredList() { return &mStoredList; }
|
||||
#endif
|
||||
|
@ -202,6 +202,8 @@ public:
|
||||
virtual void Paint(nsDisplayListBuilder* aBuilder,
|
||||
nsIRenderingContext* aCtx);
|
||||
NS_DISPLAY_DECL_NAME("Bullet", TYPE_BULLET)
|
||||
|
||||
virtual PRBool HasText() { return PR_TRUE; }
|
||||
};
|
||||
|
||||
void nsDisplayBullet::Paint(nsDisplayListBuilder* aBuilder,
|
||||
|
@ -3977,6 +3977,8 @@ public:
|
||||
virtual void Paint(nsDisplayListBuilder* aBuilder,
|
||||
nsIRenderingContext* aCtx);
|
||||
NS_DISPLAY_DECL_NAME("Text", TYPE_TEXT)
|
||||
|
||||
virtual PRBool HasText() { return PR_TRUE; }
|
||||
};
|
||||
|
||||
void
|
||||
|
@ -2016,6 +2016,8 @@ public:
|
||||
|
||||
NS_DISPLAY_DECL_NAME("MathMLCharForeground", TYPE_MATHML_CHAR_FOREGROUND)
|
||||
|
||||
virtual PRBool HasText() { return PR_TRUE; }
|
||||
|
||||
private:
|
||||
nsMathMLChar* mChar;
|
||||
PRPackedBool mIsSelected;
|
||||
|
@ -346,6 +346,8 @@ public:
|
||||
nsIRenderingContext* aCtx);
|
||||
virtual nsRect GetBounds(nsDisplayListBuilder* aBuilder);
|
||||
NS_DISPLAY_DECL_NAME("XULTextBox", TYPE_XUL_TEXT_BOX)
|
||||
|
||||
virtual PRBool HasText() { return PR_TRUE; }
|
||||
};
|
||||
|
||||
void
|
||||
|
Loading…
x
Reference in New Issue
Block a user