Bug 1386986 - Move nsDisplaySVGEffect::mEffectsBounds to nsDisplayFilter.
Put mEffectsBounds in nsDisplyaSVGEffect does not really make sense, since only
nsDisplayFilter need it.
MozReview-Commit-ID: KSvDspZJcMP
--- a/layout/painting/nsDisplayList.cpp
+++ b/layout/painting/nsDisplayList.cpp
@@ -8407,27 +8407,25 @@ nsCharClipDisplayItem::ComputeInvalidati
}
}
nsDisplaySVGEffects::nsDisplaySVGEffects(nsDisplayListBuilder* aBuilder,
nsIFrame* aFrame, nsDisplayList* aList,
bool aHandleOpacity,
const ActiveScrolledRoot* aActiveScrolledRoot)
: nsDisplayWrapList(aBuilder, aFrame, aList, aActiveScrolledRoot)
- , mEffectsBounds(aFrame->GetVisualOverflowRectRelativeToSelf())
, mHandleOpacity(aHandleOpacity)
{
MOZ_COUNT_CTOR(nsDisplaySVGEffects);
}
nsDisplaySVGEffects::nsDisplaySVGEffects(nsDisplayListBuilder* aBuilder,
nsIFrame* aFrame, nsDisplayList* aList,
bool aHandleOpacity)
: nsDisplayWrapList(aBuilder, aFrame, aList)
- , mEffectsBounds(aFrame->GetVisualOverflowRectRelativeToSelf())
, mHandleOpacity(aHandleOpacity)
{
MOZ_COUNT_CTOR(nsDisplaySVGEffects);
}
#ifdef NS_BUILD_REFCNT_LOGGING
nsDisplaySVGEffects::~nsDisplaySVGEffects()
{
@@ -8682,20 +8680,17 @@ bool nsDisplayMask::TryMerge(nsDisplayIt
}
// Do not merge if mFrame has mask. Continuation frames should apply mask
// independently(just like nsDisplayBackgroundImage).
if (mFrame->StyleSVGReset()->HasMask()) {
return false;
}
- nsDisplayMask* other = static_cast<nsDisplayMask*>(aItem);
- MergeFromTrackingMergedFrames(other);
- mEffectsBounds.UnionRect(mEffectsBounds,
- other->mEffectsBounds + other->mFrame->GetOffsetTo(mFrame));
+ MergeFromTrackingMergedFrames(static_cast<nsDisplayMask*>(aItem));
return true;
}
already_AddRefed<Layer>
nsDisplayMask::BuildLayer(nsDisplayListBuilder* aBuilder,
LayerManager* aManager,
const ContainerLayerParameters& aContainerParameters)
@@ -8938,17 +8933,18 @@ nsDisplayMask::PrintEffects(nsACString&
}
aTo += ")";
}
#endif
nsDisplayFilter::nsDisplayFilter(nsDisplayListBuilder* aBuilder,
nsIFrame* aFrame, nsDisplayList* aList,
bool aHandleOpacity)
- : nsDisplaySVGEffects(aBuilder, aFrame, aList, aHandleOpacity)
+ : nsDisplaySVGEffects(aBuilder, aFrame, aList, aHandleOpacity),
+ mEffectsBounds(aFrame->GetVisualOverflowRectRelativeToSelf())
{
MOZ_COUNT_CTOR(nsDisplayFilter);
}
#ifdef NS_BUILD_REFCNT_LOGGING
nsDisplayFilter::~nsDisplayFilter()
{
MOZ_COUNT_DTOR(nsDisplayFilter);
--- a/layout/painting/nsDisplayList.h
+++ b/layout/painting/nsDisplayList.h
@@ -4456,18 +4456,16 @@ public:
gfxPoint UserSpaceOffset() const;
virtual void ComputeInvalidationRegion(nsDisplayListBuilder* aBuilder,
const nsDisplayItemGeometry* aGeometry,
nsRegion* aInvalidRegion) override;
protected:
bool ValidateSVGFrame();
- // relative to mFrame
- nsRect mEffectsBounds;
// True if we need to handle css opacity in this display item.
bool mHandleOpacity;
};
/**
* A display item to paint a stacking context with mask and clip effects
* set by the stacking context root frame's style.
*/
@@ -4571,16 +4569,20 @@ public:
nsRegion* aInvalidRegion) override;
#ifdef MOZ_DUMP_PAINTING
void PrintEffects(nsACString& aTo);
#endif
void PaintAsLayer(nsDisplayListBuilder* aBuilder,
gfxContext* aCtx,
LayerManager* aManager);
+
+private:
+ // relative to mFrame
+ nsRect mEffectsBounds;
};
/* A display item that applies a transformation to all of its descendant
* elements. This wrapper should only be used if there is a transform applied
* to the root element.
*
* The reason that a "bounds" rect is involved in transform calculations is
* because CSS-transforms allow percentage values for the x and y components