mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-11 12:25:53 +00:00
Bug 633282 - manual backout of 'fixup UpdatePossiblyTransparentRegion v.3' in bug 622328 due to merge conflicts. r=tn
This commit is contained in:
parent
ad60cb55c7
commit
d839661fc9
@ -271,8 +271,7 @@ static PRUint64 RegionArea(const nsRegion& aRegion)
|
||||
|
||||
void
|
||||
nsDisplayListBuilder::SubtractFromVisibleRegion(nsRegion* aVisibleRegion,
|
||||
const nsRegion& aRegion,
|
||||
PRBool aForceSubtract)
|
||||
const nsRegion& aRegion)
|
||||
{
|
||||
if (aRegion.IsEmpty())
|
||||
return;
|
||||
@ -283,8 +282,7 @@ nsDisplayListBuilder::SubtractFromVisibleRegion(nsRegion* aVisibleRegion,
|
||||
// to its bounds either, which can be very bad (see bug 516740).
|
||||
// Do let aVisibleRegion get more complex if by doing so we reduce its
|
||||
// area by at least half.
|
||||
if (aForceSubtract || GetAccurateVisibleRegions() ||
|
||||
tmp.GetNumRects() <= 15 ||
|
||||
if (GetAccurateVisibleRegions() || tmp.GetNumRects() <= 15 ||
|
||||
RegionArea(tmp) <= RegionArea(*aVisibleRegion)/2) {
|
||||
*aVisibleRegion = tmp;
|
||||
}
|
||||
@ -416,9 +414,7 @@ nsDisplayList::ComputeVisibilityForRoot(nsDisplayListBuilder* aBuilder,
|
||||
nsRegion* aVisibleRegion) {
|
||||
nsRegion r;
|
||||
r.And(*aVisibleRegion, GetBounds(aBuilder));
|
||||
PRBool notUsed;
|
||||
return ComputeVisibilityForSublist(aBuilder, aVisibleRegion,
|
||||
r.GetBounds(), r.GetBounds(), notUsed);
|
||||
return ComputeVisibilityForSublist(aBuilder, aVisibleRegion, r.GetBounds(), r.GetBounds());
|
||||
}
|
||||
|
||||
static nsRegion
|
||||
@ -460,8 +456,7 @@ PRBool
|
||||
nsDisplayList::ComputeVisibilityForSublist(nsDisplayListBuilder* aBuilder,
|
||||
nsRegion* aVisibleRegion,
|
||||
const nsRect& aListVisibleBounds,
|
||||
const nsRect& aAllowVisibleRegionExpansion,
|
||||
PRBool& aContainsRootContentDocBG) {
|
||||
const nsRect& aAllowVisibleRegionExpansion) {
|
||||
#ifdef DEBUG
|
||||
nsRegion r;
|
||||
r.And(*aVisibleRegion, GetBounds(aBuilder));
|
||||
@ -507,18 +502,12 @@ nsDisplayList::ComputeVisibilityForSublist(nsDisplayListBuilder* aBuilder,
|
||||
}
|
||||
item->mVisibleRect = itemVisible.GetBounds();
|
||||
|
||||
PRBool containsRootContentDocBG = PR_FALSE;
|
||||
if (item->ComputeVisibility(aBuilder, aVisibleRegion, aAllowVisibleRegionExpansion,
|
||||
containsRootContentDocBG)) {
|
||||
if (containsRootContentDocBG) {
|
||||
aContainsRootContentDocBG = PR_TRUE;
|
||||
}
|
||||
if (item->ComputeVisibility(aBuilder, aVisibleRegion, aAllowVisibleRegionExpansion)) {
|
||||
anyVisible = PR_TRUE;
|
||||
PRBool transparentBackground = PR_FALSE;
|
||||
nsRegion opaque = TreatAsOpaque(item, aBuilder, &transparentBackground);
|
||||
// Subtract opaque item from the visible region
|
||||
aBuilder->SubtractFromVisibleRegion(aVisibleRegion, opaque,
|
||||
containsRootContentDocBG);
|
||||
aBuilder->SubtractFromVisibleRegion(aVisibleRegion, opaque);
|
||||
forceTransparentSurface = forceTransparentSurface || transparentBackground;
|
||||
}
|
||||
AppendToBottom(item);
|
||||
@ -842,8 +831,7 @@ PRBool nsDisplayItem::RecomputeVisibility(nsDisplayListBuilder* aBuilder,
|
||||
// When we recompute visibility within layers we don't need to
|
||||
// expand the visible region for content behind plugins (the plugin
|
||||
// is not in the layer).
|
||||
PRBool notUsed;
|
||||
if (!ComputeVisibility(aBuilder, aVisibleRegion, nsRect(), notUsed))
|
||||
if (!ComputeVisibility(aBuilder, aVisibleRegion, nsRect()))
|
||||
return PR_FALSE;
|
||||
|
||||
PRBool forceTransparentBackground;
|
||||
@ -882,21 +870,6 @@ nsDisplaySolidColor::Paint(nsDisplayListBuilder* aBuilder,
|
||||
aCtx->FillRect(mVisibleRect);
|
||||
}
|
||||
|
||||
PRBool
|
||||
nsDisplaySolidColor::ComputeVisibility(nsDisplayListBuilder* aBuilder,
|
||||
nsRegion* aVisibleRegion,
|
||||
const nsRect& aAllowVisibleRegionExpansion,
|
||||
PRBool& aContainsRootContentDocBG)
|
||||
{
|
||||
PRBool retval = nsDisplayItem::ComputeVisibility(aBuilder, aVisibleRegion,
|
||||
aAllowVisibleRegionExpansion,
|
||||
aContainsRootContentDocBG);
|
||||
if (retval && IsRootContentDocBackground()) {
|
||||
aContainsRootContentDocBG = PR_TRUE;
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
static void
|
||||
RegisterThemeGeometry(nsDisplayListBuilder* aBuilder, nsIFrame* aFrame)
|
||||
{
|
||||
@ -1056,12 +1029,10 @@ nsDisplayBackground::HitTest(nsDisplayListBuilder* aBuilder,
|
||||
PRBool
|
||||
nsDisplayBackground::ComputeVisibility(nsDisplayListBuilder* aBuilder,
|
||||
nsRegion* aVisibleRegion,
|
||||
const nsRect& aAllowVisibleRegionExpansion,
|
||||
PRBool& aContainsRootContentDocBG)
|
||||
const nsRect& aAllowVisibleRegionExpansion)
|
||||
{
|
||||
if (!nsDisplayItem::ComputeVisibility(aBuilder, aVisibleRegion,
|
||||
aAllowVisibleRegionExpansion,
|
||||
aContainsRootContentDocBG)) {
|
||||
aAllowVisibleRegionExpansion)) {
|
||||
return PR_FALSE;
|
||||
}
|
||||
|
||||
@ -1318,11 +1289,9 @@ nsDisplayOutline::Paint(nsDisplayListBuilder* aBuilder,
|
||||
PRBool
|
||||
nsDisplayOutline::ComputeVisibility(nsDisplayListBuilder* aBuilder,
|
||||
nsRegion* aVisibleRegion,
|
||||
const nsRect& aAllowVisibleRegionExpansion,
|
||||
PRBool& aContainsRootContentDocBG) {
|
||||
const nsRect& aAllowVisibleRegionExpansion) {
|
||||
if (!nsDisplayItem::ComputeVisibility(aBuilder, aVisibleRegion,
|
||||
aAllowVisibleRegionExpansion,
|
||||
aContainsRootContentDocBG)) {
|
||||
aAllowVisibleRegionExpansion)) {
|
||||
return PR_FALSE;
|
||||
}
|
||||
|
||||
@ -1365,11 +1334,9 @@ nsDisplayCaret::Paint(nsDisplayListBuilder* aBuilder,
|
||||
PRBool
|
||||
nsDisplayBorder::ComputeVisibility(nsDisplayListBuilder* aBuilder,
|
||||
nsRegion* aVisibleRegion,
|
||||
const nsRect& aAllowVisibleRegionExpansion,
|
||||
PRBool& aContainsRootContentDocBG) {
|
||||
const nsRect& aAllowVisibleRegionExpansion) {
|
||||
if (!nsDisplayItem::ComputeVisibility(aBuilder, aVisibleRegion,
|
||||
aAllowVisibleRegionExpansion,
|
||||
aContainsRootContentDocBG)) {
|
||||
aAllowVisibleRegionExpansion)) {
|
||||
return PR_FALSE;
|
||||
}
|
||||
|
||||
@ -1466,11 +1433,9 @@ nsDisplayBoxShadowOuter::GetBounds(nsDisplayListBuilder* aBuilder) {
|
||||
PRBool
|
||||
nsDisplayBoxShadowOuter::ComputeVisibility(nsDisplayListBuilder* aBuilder,
|
||||
nsRegion* aVisibleRegion,
|
||||
const nsRect& aAllowVisibleRegionExpansion,
|
||||
PRBool& aContainsRootContentDocBG) {
|
||||
const nsRect& aAllowVisibleRegionExpansion) {
|
||||
if (!nsDisplayItem::ComputeVisibility(aBuilder, aVisibleRegion,
|
||||
aAllowVisibleRegionExpansion,
|
||||
aContainsRootContentDocBG)) {
|
||||
aAllowVisibleRegionExpansion)) {
|
||||
return PR_FALSE;
|
||||
}
|
||||
|
||||
@ -1514,11 +1479,9 @@ nsDisplayBoxShadowInner::Paint(nsDisplayListBuilder* aBuilder,
|
||||
PRBool
|
||||
nsDisplayBoxShadowInner::ComputeVisibility(nsDisplayListBuilder* aBuilder,
|
||||
nsRegion* aVisibleRegion,
|
||||
const nsRect& aAllowVisibleRegionExpansion,
|
||||
PRBool& aContainsRootContentDocBG) {
|
||||
const nsRect& aAllowVisibleRegionExpansion) {
|
||||
if (!nsDisplayItem::ComputeVisibility(aBuilder, aVisibleRegion,
|
||||
aAllowVisibleRegionExpansion,
|
||||
aContainsRootContentDocBG)) {
|
||||
aAllowVisibleRegionExpansion)) {
|
||||
return PR_FALSE;
|
||||
}
|
||||
|
||||
@ -1562,12 +1525,10 @@ nsDisplayWrapList::GetBounds(nsDisplayListBuilder* aBuilder) {
|
||||
PRBool
|
||||
nsDisplayWrapList::ComputeVisibility(nsDisplayListBuilder* aBuilder,
|
||||
nsRegion* aVisibleRegion,
|
||||
const nsRect& aAllowVisibleRegionExpansion,
|
||||
PRBool& aContainsRootContentDocBG) {
|
||||
const nsRect& aAllowVisibleRegionExpansion) {
|
||||
return mList.ComputeVisibilityForSublist(aBuilder, aVisibleRegion,
|
||||
mVisibleRect,
|
||||
aAllowVisibleRegionExpansion,
|
||||
aContainsRootContentDocBG);
|
||||
aAllowVisibleRegionExpansion);
|
||||
}
|
||||
|
||||
nsRegion
|
||||
@ -1751,10 +1712,10 @@ nsDisplayOpacity::GetLayerState(nsDisplayListBuilder* aBuilder,
|
||||
? LAYER_ACTIVE : LAYER_INACTIVE;
|
||||
}
|
||||
|
||||
PRBool nsDisplayOpacity::ComputeVisibility(nsDisplayListBuilder* aBuilder,
|
||||
nsRegion* aVisibleRegion,
|
||||
const nsRect& aAllowVisibleRegionExpansion,
|
||||
PRBool& aContainsRootContentDocBG) {
|
||||
PRBool
|
||||
nsDisplayOpacity::ComputeVisibility(nsDisplayListBuilder* aBuilder,
|
||||
nsRegion* aVisibleRegion,
|
||||
const nsRect& aAllowVisibleRegionExpansion) {
|
||||
// Our children are translucent so we should not allow them to subtract
|
||||
// area from aVisibleRegion. We do need to find out what is visible under
|
||||
// our children in the temporary compositing buffer, because if our children
|
||||
@ -1763,14 +1724,11 @@ PRBool nsDisplayOpacity::ComputeVisibility(nsDisplayListBuilder* aBuilder,
|
||||
nsRect bounds = GetBounds(aBuilder);
|
||||
nsRegion visibleUnderChildren;
|
||||
visibleUnderChildren.And(*aVisibleRegion, bounds);
|
||||
// do not pass up the aContainsRootContentDocBG value because anything under
|
||||
// us is not opaque
|
||||
PRBool notUsed;
|
||||
nsRect allowExpansion;
|
||||
allowExpansion.IntersectRect(bounds, aAllowVisibleRegionExpansion);
|
||||
return
|
||||
nsDisplayWrapList::ComputeVisibility(aBuilder, &visibleUnderChildren,
|
||||
allowExpansion, notUsed);
|
||||
allowExpansion);
|
||||
}
|
||||
|
||||
PRBool nsDisplayOpacity::TryMerge(nsDisplayListBuilder* aBuilder, nsDisplayItem* aItem) {
|
||||
@ -1892,8 +1850,7 @@ nsDisplayScrollLayer::BuildLayer(nsDisplayListBuilder* aBuilder,
|
||||
PRBool
|
||||
nsDisplayScrollLayer::ComputeVisibility(nsDisplayListBuilder* aBuilder,
|
||||
nsRegion* aVisibleRegion,
|
||||
const nsRect& aAllowVisibleRegionExpansion,
|
||||
PRBool& aContainsRootContentDocBG)
|
||||
const nsRect& aAllowVisibleRegionExpansion)
|
||||
{
|
||||
nsRect displayport;
|
||||
if (nsLayoutUtils::GetDisplayPort(mScrolledFrame->GetContent(), &displayport)) {
|
||||
@ -1908,15 +1865,14 @@ nsDisplayScrollLayer::ComputeVisibility(nsDisplayListBuilder* aBuilder,
|
||||
nsRect allowExpansion;
|
||||
allowExpansion.IntersectRect(allowExpansion, boundedRect);
|
||||
PRBool visible = mList.ComputeVisibilityForSublist(
|
||||
aBuilder, &childVisibleRegion, boundedRect, allowExpansion, aContainsRootContentDocBG);
|
||||
aBuilder, &childVisibleRegion, boundedRect, allowExpansion);
|
||||
mVisibleRect = boundedRect;
|
||||
|
||||
return visible;
|
||||
|
||||
} else {
|
||||
return nsDisplayWrapList::ComputeVisibility(aBuilder, aVisibleRegion,
|
||||
aAllowVisibleRegionExpansion,
|
||||
aContainsRootContentDocBG);
|
||||
aAllowVisibleRegionExpansion);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2064,8 +2020,7 @@ void nsDisplayClip::Paint(nsDisplayListBuilder* aBuilder,
|
||||
|
||||
PRBool nsDisplayClip::ComputeVisibility(nsDisplayListBuilder* aBuilder,
|
||||
nsRegion* aVisibleRegion,
|
||||
const nsRect& aAllowVisibleRegionExpansion,
|
||||
PRBool& aContainsRootContentDocBG) {
|
||||
const nsRect& aAllowVisibleRegionExpansion) {
|
||||
nsRegion clipped;
|
||||
clipped.And(*aVisibleRegion, mClip);
|
||||
|
||||
@ -2074,13 +2029,11 @@ PRBool nsDisplayClip::ComputeVisibility(nsDisplayListBuilder* aBuilder,
|
||||
allowExpansion.IntersectRect(mClip, aAllowVisibleRegionExpansion);
|
||||
PRBool anyVisible =
|
||||
nsDisplayWrapList::ComputeVisibility(aBuilder, &finalClipped,
|
||||
allowExpansion,
|
||||
aContainsRootContentDocBG);
|
||||
allowExpansion);
|
||||
|
||||
nsRegion removed;
|
||||
removed.Sub(clipped, finalClipped);
|
||||
aBuilder->SubtractFromVisibleRegion(aVisibleRegion, removed,
|
||||
aContainsRootContentDocBG);
|
||||
aBuilder->SubtractFromVisibleRegion(aVisibleRegion, removed);
|
||||
|
||||
return anyVisible;
|
||||
}
|
||||
@ -2168,14 +2121,12 @@ nsDisplayClipRoundedRect::WrapWithClone(nsDisplayListBuilder* aBuilder,
|
||||
PRBool nsDisplayClipRoundedRect::ComputeVisibility(
|
||||
nsDisplayListBuilder* aBuilder,
|
||||
nsRegion* aVisibleRegion,
|
||||
const nsRect& aAllowVisibleRegionExpansion,
|
||||
PRBool& aContainsRootContentDocBG)
|
||||
const nsRect& aAllowVisibleRegionExpansion)
|
||||
{
|
||||
nsRegion clipped;
|
||||
clipped.And(*aVisibleRegion, mClip);
|
||||
|
||||
PRBool notUsed;
|
||||
return nsDisplayWrapList::ComputeVisibility(aBuilder, &clipped, nsRect(), notUsed);
|
||||
return nsDisplayWrapList::ComputeVisibility(aBuilder, &clipped, nsRect());
|
||||
// FIXME: Remove a *conservative* opaque region from aVisibleRegion
|
||||
// (like in nsDisplayClip::ComputeVisibility).
|
||||
}
|
||||
@ -2238,8 +2189,7 @@ void nsDisplayZoom::Paint(nsDisplayListBuilder* aBuilder,
|
||||
|
||||
PRBool nsDisplayZoom::ComputeVisibility(nsDisplayListBuilder *aBuilder,
|
||||
nsRegion *aVisibleRegion,
|
||||
const nsRect& aAllowVisibleRegionExpansion,
|
||||
PRBool& aContainsRootContentDocBG)
|
||||
const nsRect& aAllowVisibleRegionExpansion)
|
||||
{
|
||||
// Convert the passed in visible region to our appunits.
|
||||
nsRegion visibleRegion =
|
||||
@ -2253,8 +2203,7 @@ PRBool nsDisplayZoom::ComputeVisibility(nsDisplayListBuilder *aBuilder,
|
||||
PRBool retval =
|
||||
mList.ComputeVisibilityForSublist(aBuilder, &visibleRegion,
|
||||
transformedVisibleRect,
|
||||
allowExpansion,
|
||||
aContainsRootContentDocBG);
|
||||
allowExpansion);
|
||||
|
||||
nsRegion removed;
|
||||
// removed = originalVisibleRegion - visibleRegion
|
||||
@ -2263,8 +2212,7 @@ PRBool nsDisplayZoom::ComputeVisibility(nsDisplayListBuilder *aBuilder,
|
||||
removed = removed.ConvertAppUnitsRoundIn(mAPD, mParentAPD);
|
||||
// aVisibleRegion = aVisibleRegion - removed (modulo any simplifications
|
||||
// SubtractFromVisibleRegion does)
|
||||
aBuilder->SubtractFromVisibleRegion(aVisibleRegion, removed,
|
||||
aContainsRootContentDocBG);
|
||||
aBuilder->SubtractFromVisibleRegion(aVisibleRegion, removed);
|
||||
|
||||
return retval;
|
||||
}
|
||||
@ -2451,8 +2399,7 @@ nsDisplayTransform::GetLayerState(nsDisplayListBuilder* aBuilder,
|
||||
|
||||
PRBool nsDisplayTransform::ComputeVisibility(nsDisplayListBuilder *aBuilder,
|
||||
nsRegion *aVisibleRegion,
|
||||
const nsRect& aAllowVisibleRegionExpansion,
|
||||
PRBool& aContainsRootContentDocBG)
|
||||
const nsRect& aAllowVisibleRegionExpansion)
|
||||
{
|
||||
/* As we do this, we need to be sure to
|
||||
* untransform the visible rect, since we want everything that's painting to
|
||||
@ -2750,8 +2697,7 @@ void nsDisplaySVGEffects::Paint(nsDisplayListBuilder* aBuilder,
|
||||
|
||||
PRBool nsDisplaySVGEffects::ComputeVisibility(nsDisplayListBuilder* aBuilder,
|
||||
nsRegion* aVisibleRegion,
|
||||
const nsRect& aAllowVisibleRegionExpansion,
|
||||
PRBool& aContainsRootContentDocBG) {
|
||||
const nsRect& aAllowVisibleRegionExpansion) {
|
||||
nsPoint offset = aBuilder->ToReferenceFrame(mEffectsFrame);
|
||||
nsRect dirtyRect =
|
||||
nsSVGIntegrationUtils::GetRequiredSourceForInvalidArea(mEffectsFrame,
|
||||
@ -2763,8 +2709,7 @@ PRBool nsDisplaySVGEffects::ComputeVisibility(nsDisplayListBuilder* aBuilder,
|
||||
nsRegion childrenVisible(dirtyRect);
|
||||
nsRect r;
|
||||
r.IntersectRect(dirtyRect, mList.GetBounds(aBuilder));
|
||||
PRBool notUsed;
|
||||
mList.ComputeVisibilityForSublist(aBuilder, &childrenVisible, r, nsRect(), notUsed);
|
||||
mList.ComputeVisibilityForSublist(aBuilder, &childrenVisible, r, nsRect());
|
||||
return PR_TRUE;
|
||||
}
|
||||
|
||||
|
@ -344,12 +344,10 @@ public:
|
||||
* Subtracts aRegion from *aVisibleRegion. We avoid letting
|
||||
* aVisibleRegion become overcomplex by simplifying it if necessary ---
|
||||
* unless mAccurateVisibleRegions is set, in which case we let it
|
||||
* get arbitrarily complex. If aForceSubtract is true then we subtract
|
||||
* aRegion even if it makes the visible region more complex.
|
||||
* get arbitrarily complex.
|
||||
*/
|
||||
void SubtractFromVisibleRegion(nsRegion* aVisibleRegion,
|
||||
const nsRegion& aRegion,
|
||||
PRBool aForceSubtract = PR_FALSE);
|
||||
const nsRegion& aRegion);
|
||||
|
||||
/**
|
||||
* Mark the frames in aFrames to be displayed if they intersect aDirtyRect
|
||||
@ -733,13 +731,11 @@ public:
|
||||
* background behind a plugin is visible.
|
||||
*
|
||||
* @return PR_TRUE if the item is visible, PR_FALSE if no part of the item
|
||||
* is visible. aContainsRootContentDocBG is set to true if this item contains
|
||||
* the background for the root content document.
|
||||
* is visible.
|
||||
*/
|
||||
virtual PRBool ComputeVisibility(nsDisplayListBuilder* aBuilder,
|
||||
nsRegion* aVisibleRegion,
|
||||
const nsRect& aAllowVisibleRegionExpansion,
|
||||
PRBool& aContainsRootContentDocBG)
|
||||
const nsRect& aAllowVisibleRegionExpansion)
|
||||
{ return !mVisibleRect.IsEmpty(); }
|
||||
|
||||
/**
|
||||
@ -1023,15 +1019,12 @@ public:
|
||||
* I.e., opaque contents of this list are subtracted from aVisibleRegion.
|
||||
* @param aListVisibleBounds must be equal to the bounds of the intersection
|
||||
* of aVisibleRegion and GetBounds() for this list.
|
||||
* @return true if any item in the list is visible. aContainsRootContentDocBG
|
||||
* is set to true if the list contains the background for a root content
|
||||
* document.
|
||||
* @return true if any item in the list is visible.
|
||||
*/
|
||||
PRBool ComputeVisibilityForSublist(nsDisplayListBuilder* aBuilder,
|
||||
nsRegion* aVisibleRegion,
|
||||
const nsRect& aListVisibleBounds,
|
||||
const nsRect& aAllowVisibleRegionExpansion,
|
||||
PRBool& aContainsRootContentDocBG);
|
||||
const nsRect& aAllowVisibleRegionExpansion);
|
||||
|
||||
/**
|
||||
* As ComputeVisibilityForSublist, but computes visibility for a root
|
||||
@ -1436,8 +1429,7 @@ public:
|
||||
virtual void Paint(nsDisplayListBuilder* aBuilder, nsRenderingContext* aCtx);
|
||||
virtual PRBool ComputeVisibility(nsDisplayListBuilder* aBuilder,
|
||||
nsRegion* aVisibleRegion,
|
||||
const nsRect& aAllowVisibleRegionExpansion,
|
||||
PRBool& aContainsRootContentDocBG);
|
||||
const nsRect& aAllowVisibleRegionExpansion);
|
||||
NS_DISPLAY_DECL_NAME("Border", TYPE_BORDER)
|
||||
|
||||
protected:
|
||||
@ -1458,10 +1450,8 @@ protected:
|
||||
class nsDisplaySolidColor : public nsDisplayItem {
|
||||
public:
|
||||
nsDisplaySolidColor(nsDisplayListBuilder* aBuilder, nsIFrame* aFrame,
|
||||
const nsRect& aBounds, nscolor aColor,
|
||||
PRBool aIsRootContentDocBackground = PR_FALSE)
|
||||
const nsRect& aBounds, nscolor aColor)
|
||||
: nsDisplayItem(aBuilder, aFrame), mBounds(aBounds), mColor(aColor),
|
||||
mIsRootContentDocBackground(aIsRootContentDocBackground),
|
||||
mSnappingEnabled(aBuilder->IsSnappingEnabled() && !aBuilder->IsInTransform()) {
|
||||
NS_ASSERTION(NS_GET_A(aColor) > 0, "Don't create invisible nsDisplaySolidColors!");
|
||||
MOZ_COUNT_CTOR(nsDisplaySolidColor);
|
||||
@ -1494,21 +1484,11 @@ public:
|
||||
|
||||
virtual void Paint(nsDisplayListBuilder* aBuilder, nsRenderingContext* aCtx);
|
||||
|
||||
virtual PRBool ComputeVisibility(nsDisplayListBuilder* aBuilder,
|
||||
nsRegion* aVisibleRegion,
|
||||
const nsRect& aAllowVisibleRegionExpansion,
|
||||
PRBool& aContainsRootContentDocBG);
|
||||
|
||||
PRBool IsRootContentDocBackground() {
|
||||
return mIsRootContentDocBackground;
|
||||
}
|
||||
|
||||
NS_DISPLAY_DECL_NAME("SolidColor", TYPE_SOLID_COLOR)
|
||||
|
||||
private:
|
||||
nsRect mBounds;
|
||||
nscolor mColor;
|
||||
PRPackedBool mIsRootContentDocBackground;
|
||||
PRPackedBool mSnappingEnabled;
|
||||
};
|
||||
|
||||
@ -1528,8 +1508,7 @@ public:
|
||||
HitTestState* aState, nsTArray<nsIFrame*> *aOutFrames);
|
||||
virtual PRBool ComputeVisibility(nsDisplayListBuilder* aBuilder,
|
||||
nsRegion* aVisibleRegion,
|
||||
const nsRect& aAllowVisibleRegionExpansion,
|
||||
PRBool& aContainsRootContentDocBG);
|
||||
const nsRect& aAllowVisibleRegionExpansion);
|
||||
virtual nsRegion GetOpaqueRegion(nsDisplayListBuilder* aBuilder,
|
||||
PRBool* aForceTransparentSurface = nsnull);
|
||||
virtual PRBool IsVaryingRelativeToMovingFrame(nsDisplayListBuilder* aBuilder,
|
||||
@ -1568,8 +1547,7 @@ public:
|
||||
virtual nsRect GetBounds(nsDisplayListBuilder* aBuilder);
|
||||
virtual PRBool ComputeVisibility(nsDisplayListBuilder* aBuilder,
|
||||
nsRegion* aVisibleRegion,
|
||||
const nsRect& aAllowVisibleRegionExpansion,
|
||||
PRBool& aContainsRootContentDocBG);
|
||||
const nsRect& aAllowVisibleRegionExpansion);
|
||||
NS_DISPLAY_DECL_NAME("BoxShadowOuter", TYPE_BOX_SHADOW_OUTER)
|
||||
|
||||
private:
|
||||
@ -1594,8 +1572,7 @@ public:
|
||||
virtual void Paint(nsDisplayListBuilder* aBuilder, nsRenderingContext* aCtx);
|
||||
virtual PRBool ComputeVisibility(nsDisplayListBuilder* aBuilder,
|
||||
nsRegion* aVisibleRegion,
|
||||
const nsRect& aAllowVisibleRegionExpansion,
|
||||
PRBool& aContainsRootContentDocBG);
|
||||
const nsRect& aAllowVisibleRegionExpansion);
|
||||
NS_DISPLAY_DECL_NAME("BoxShadowInner", TYPE_BOX_SHADOW_INNER)
|
||||
|
||||
private:
|
||||
@ -1621,8 +1598,7 @@ public:
|
||||
virtual void Paint(nsDisplayListBuilder* aBuilder, nsRenderingContext* aCtx);
|
||||
virtual PRBool ComputeVisibility(nsDisplayListBuilder* aBuilder,
|
||||
nsRegion* aVisibleRegion,
|
||||
const nsRect& aAllowVisibleRegionExpansion,
|
||||
PRBool& aContainsRootContentDocBG);
|
||||
const nsRect& aAllowVisibleRegionExpansion);
|
||||
NS_DISPLAY_DECL_NAME("Outline", TYPE_OUTLINE)
|
||||
};
|
||||
|
||||
@ -1685,8 +1661,7 @@ public:
|
||||
virtual void Paint(nsDisplayListBuilder* aBuilder, nsRenderingContext* aCtx);
|
||||
virtual PRBool ComputeVisibility(nsDisplayListBuilder* aBuilder,
|
||||
nsRegion* aVisibleRegion,
|
||||
const nsRect& aAllowVisibleRegionExpansion,
|
||||
PRBool& aContainsRootContentDocBG);
|
||||
const nsRect& aAllowVisibleRegionExpansion);
|
||||
virtual PRBool TryMerge(nsDisplayListBuilder* aBuilder, nsDisplayItem* aItem) {
|
||||
NS_WARNING("This list should already have been flattened!!!");
|
||||
return PR_FALSE;
|
||||
@ -1771,8 +1746,7 @@ public:
|
||||
LayerManager* aManager);
|
||||
virtual PRBool ComputeVisibility(nsDisplayListBuilder* aBuilder,
|
||||
nsRegion* aVisibleRegion,
|
||||
const nsRect& aAllowVisibleRegionExpansion,
|
||||
PRBool& aContainsRootContentDocBG);
|
||||
const nsRect& aAllowVisibleRegionExpansion);
|
||||
virtual PRBool TryMerge(nsDisplayListBuilder* aBuilder, nsDisplayItem* aItem);
|
||||
NS_DISPLAY_DECL_NAME("Opacity", TYPE_OPACITY)
|
||||
};
|
||||
@ -1855,8 +1829,7 @@ public:
|
||||
|
||||
virtual PRBool ComputeVisibility(nsDisplayListBuilder* aBuilder,
|
||||
nsRegion* aVisibleRegion,
|
||||
const nsRect& aAllowVisibleRegionExpansion,
|
||||
PRBool& aContainsRootContentDocBG);
|
||||
const nsRect& aAllowVisibleRegionExpansion);
|
||||
|
||||
virtual LayerState GetLayerState(nsDisplayListBuilder* aBuilder,
|
||||
LayerManager* aManager);
|
||||
@ -1932,8 +1905,7 @@ public:
|
||||
virtual void Paint(nsDisplayListBuilder* aBuilder, nsRenderingContext* aCtx);
|
||||
virtual PRBool ComputeVisibility(nsDisplayListBuilder* aBuilder,
|
||||
nsRegion* aVisibleRegion,
|
||||
const nsRect& aAllowVisibleRegionExpansion,
|
||||
PRBool& aContainsRootContentDocBG);
|
||||
const nsRect& aAllowVisibleRegionExpansion);
|
||||
virtual PRBool TryMerge(nsDisplayListBuilder* aBuilder, nsDisplayItem* aItem);
|
||||
NS_DISPLAY_DECL_NAME("Clip", TYPE_CLIP)
|
||||
virtual PRUint32 GetPerFrameKey() { return 0; }
|
||||
@ -1975,8 +1947,7 @@ public:
|
||||
HitTestState* aState, nsTArray<nsIFrame*> *aOutFrames);
|
||||
virtual PRBool ComputeVisibility(nsDisplayListBuilder* aBuilder,
|
||||
nsRegion* aVisibleRegion,
|
||||
const nsRect& aAllowVisibleRegionExpansion,
|
||||
PRBool& aContainsRootContentDocBG);
|
||||
const nsRect& aAllowVisibleRegionExpansion);
|
||||
virtual PRBool TryMerge(nsDisplayListBuilder* aBuilder, nsDisplayItem* aItem);
|
||||
NS_DISPLAY_DECL_NAME("ClipRoundedRect", TYPE_CLIP_ROUNDED_RECT)
|
||||
|
||||
@ -2017,8 +1988,7 @@ public:
|
||||
HitTestState* aState, nsTArray<nsIFrame*> *aOutFrames);
|
||||
virtual PRBool ComputeVisibility(nsDisplayListBuilder* aBuilder,
|
||||
nsRegion* aVisibleRegion,
|
||||
const nsRect& aAllowVisibleRegionExpansion,
|
||||
PRBool& aContainsRootContentDocBG);
|
||||
const nsRect& aAllowVisibleRegionExpansion);
|
||||
NS_DISPLAY_DECL_NAME("Zoom", TYPE_ZOOM)
|
||||
|
||||
// Get the app units per dev pixel ratio of the child document.
|
||||
@ -2053,8 +2023,7 @@ public:
|
||||
virtual void Paint(nsDisplayListBuilder* aBuilder, nsRenderingContext* aCtx);
|
||||
virtual PRBool ComputeVisibility(nsDisplayListBuilder* aBuilder,
|
||||
nsRegion* aVisibleRegion,
|
||||
const nsRect& aAllowVisibleRegionExpansion,
|
||||
PRBool& aContainsRootContentDocBG);
|
||||
const nsRect& aAllowVisibleRegionExpansion);
|
||||
virtual PRBool TryMerge(nsDisplayListBuilder* aBuilder, nsDisplayItem* aItem);
|
||||
NS_DISPLAY_DECL_NAME("SVGEffects", TYPE_SVG_EFFECTS)
|
||||
|
||||
@ -2116,8 +2085,7 @@ public:
|
||||
LayerManager* aManager);
|
||||
virtual PRBool ComputeVisibility(nsDisplayListBuilder *aBuilder,
|
||||
nsRegion *aVisibleRegion,
|
||||
const nsRect& aAllowVisibleRegionExpansion,
|
||||
PRBool& aContainsRootContentDocBG);
|
||||
const nsRect& aAllowVisibleRegionExpansion);
|
||||
virtual PRBool TryMerge(nsDisplayListBuilder *aBuilder, nsDisplayItem *aItem);
|
||||
|
||||
/**
|
||||
|
@ -138,9 +138,9 @@ typedef struct CapturingContentInfo {
|
||||
nsIContent* mContent;
|
||||
} CapturingContentInfo;
|
||||
|
||||
#define NS_IPRESSHELL_IID \
|
||||
{ 0x3a8030b5, 0x8d2c, 0x4cb3, \
|
||||
{ 0xb5, 0xae, 0xb2, 0x43, 0xa9, 0x28, 0x02, 0x82 } }
|
||||
#define NS_IPRESSHELL_IID \
|
||||
{ 0x67eab923, 0x5c15, 0x4c13,\
|
||||
{ 0xb5, 0xcc, 0xb2, 0x75, 0xb3, 0x5a, 0xa5, 0x38 } }
|
||||
|
||||
// Constants for ScrollContentIntoView() function
|
||||
#define NS_PRESSHELL_SCROLL_TOP 0
|
||||
@ -993,12 +993,10 @@ public:
|
||||
* aBounds. Checks first if this needs to be done by checking if aFrame is a
|
||||
* canvas frame (if the FORCE_DRAW flag is passed then this check is skipped).
|
||||
* aBackstopColor is composed behind the background color of the canvas, it is
|
||||
* transparent by default. The ROOT_CONTENT_DOC_BG flag indicates that this is
|
||||
* the background for the root content document.
|
||||
* transparent by default.
|
||||
*/
|
||||
enum {
|
||||
FORCE_DRAW = 0x01,
|
||||
ROOT_CONTENT_DOC_BG = 0x02
|
||||
FORCE_DRAW = 0x01
|
||||
};
|
||||
virtual nsresult AddCanvasBackgroundColorItem(nsDisplayListBuilder& aBuilder,
|
||||
nsDisplayList& aList,
|
||||
|
@ -5863,8 +5863,7 @@ nsresult PresShell::AddCanvasBackgroundColorItem(nsDisplayListBuilder& aBuilder,
|
||||
}
|
||||
|
||||
return aList.AppendNewToBottom(
|
||||
new (&aBuilder) nsDisplaySolidColor(&aBuilder, aFrame, aBounds, bgcolor,
|
||||
!!(aFlags & nsIPresShell::ROOT_CONTENT_DOC_BG)));
|
||||
new (&aBuilder) nsDisplaySolidColor(&aBuilder, aFrame, aBounds, bgcolor));
|
||||
}
|
||||
|
||||
static PRBool IsTransparentContainerElement(nsPresContext* aPresContext)
|
||||
|
@ -165,17 +165,11 @@ public:
|
||||
|
||||
virtual PRBool ComputeVisibility(nsDisplayListBuilder* aBuilder,
|
||||
nsRegion* aVisibleRegion,
|
||||
const nsRect& aAllowVisibleRegionExpansion,
|
||||
PRBool& aContainsRootContentDocBG)
|
||||
const nsRect& aAllowVisibleRegionExpansion)
|
||||
{
|
||||
PRBool retval = NS_GET_A(mExtraBackgroundColor) > 0 ||
|
||||
nsDisplayBackground::ComputeVisibility(aBuilder, aVisibleRegion,
|
||||
aAllowVisibleRegionExpansion,
|
||||
aContainsRootContentDocBG);
|
||||
if (retval && mFrame->PresContext()->IsRootContentDocument()) {
|
||||
aContainsRootContentDocBG = PR_TRUE;
|
||||
}
|
||||
return retval;
|
||||
return NS_GET_A(mExtraBackgroundColor) > 0 ||
|
||||
nsDisplayBackground::ComputeVisibility(aBuilder, aVisibleRegion,
|
||||
aAllowVisibleRegionExpansion);
|
||||
}
|
||||
virtual nsRegion GetOpaqueRegion(nsDisplayListBuilder* aBuilder,
|
||||
PRBool* aForceTransparentSurface = nsnull)
|
||||
|
@ -1345,8 +1345,7 @@ public:
|
||||
virtual nsRect GetBounds(nsDisplayListBuilder* aBuilder);
|
||||
virtual PRBool ComputeVisibility(nsDisplayListBuilder* aBuilder,
|
||||
nsRegion* aVisibleRegion,
|
||||
const nsRect& aAllowVisibleRegionExpansion,
|
||||
PRBool& aContainsRootContentDocBG);
|
||||
const nsRect& aAllowVisibleRegionExpansion);
|
||||
|
||||
NS_DISPLAY_DECL_NAME("PluginReadback", TYPE_PLUGIN_READBACK)
|
||||
|
||||
@ -1379,12 +1378,10 @@ nsDisplayPluginReadback::GetBounds(nsDisplayListBuilder* aBuilder)
|
||||
PRBool
|
||||
nsDisplayPluginReadback::ComputeVisibility(nsDisplayListBuilder* aBuilder,
|
||||
nsRegion* aVisibleRegion,
|
||||
const nsRect& aAllowVisibleRegionExpansion,
|
||||
PRBool& aContainsRootContentDocBG)
|
||||
const nsRect& aAllowVisibleRegionExpansion)
|
||||
{
|
||||
if (!nsDisplayItem::ComputeVisibility(aBuilder, aVisibleRegion,
|
||||
aAllowVisibleRegionExpansion,
|
||||
aContainsRootContentDocBG))
|
||||
aAllowVisibleRegionExpansion))
|
||||
return PR_FALSE;
|
||||
|
||||
nsRect expand;
|
||||
@ -1413,13 +1410,11 @@ nsDisplayPlugin::Paint(nsDisplayListBuilder* aBuilder,
|
||||
PRBool
|
||||
nsDisplayPlugin::ComputeVisibility(nsDisplayListBuilder* aBuilder,
|
||||
nsRegion* aVisibleRegion,
|
||||
const nsRect& aAllowVisibleRegionExpansion,
|
||||
PRBool& aContainsRootContentDocBG)
|
||||
const nsRect& aAllowVisibleRegionExpansion)
|
||||
{
|
||||
mVisibleRegion.And(*aVisibleRegion, GetBounds(aBuilder));
|
||||
return nsDisplayItem::ComputeVisibility(aBuilder, aVisibleRegion,
|
||||
aAllowVisibleRegionExpansion,
|
||||
aContainsRootContentDocBG);
|
||||
aAllowVisibleRegionExpansion);
|
||||
}
|
||||
|
||||
nsRegion
|
||||
|
@ -339,8 +339,7 @@ public:
|
||||
nsRenderingContext* aCtx);
|
||||
virtual PRBool ComputeVisibility(nsDisplayListBuilder* aBuilder,
|
||||
nsRegion* aVisibleRegion,
|
||||
const nsRect& aAllowVisibleRegionExpansion,
|
||||
PRBool& aContainsRootContentDocBG);
|
||||
const nsRect& aAllowVisibleRegionExpansion);
|
||||
|
||||
NS_DISPLAY_DECL_NAME("Plugin", TYPE_PLUGIN)
|
||||
|
||||
|
@ -387,9 +387,6 @@ nsSubDocumentFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
// happens after we've built the list so that AddCanvasBackgroundColorItem
|
||||
// can monkey with the contents if necessary.
|
||||
PRUint32 flags = nsIPresShell::FORCE_DRAW;
|
||||
if (presContext->IsRootContentDocument()) {
|
||||
flags |= nsIPresShell::ROOT_CONTENT_DOC_BG;
|
||||
}
|
||||
rv = presShell->AddCanvasBackgroundColorItem(
|
||||
*aBuilder, childItems, subdocRootFrame ? subdocRootFrame : this,
|
||||
bounds, NS_RGBA(0,0,0,0), flags);
|
||||
|
Loading…
Reference in New Issue
Block a user