Bug 1386986 - Move nsDisplaySVGEffect::mEffectsBounds to nsDisplayFilter. draft
authorcku <cku@mozilla.com>
Thu, 03 Aug 2017 16:50:06 +0800
changeset 620279 02923179717120af1bbb07016151f402af8890d0
parent 620112 d942ef54fdf726840a698d2ddcaf989d2c00edbc
child 640643 9b2c89cc0513e8ff4ac70dabb6bdb4a5c50dc2b7
push id71979
push userbmo:cku@mozilla.com
push dateThu, 03 Aug 2017 08:52:48 +0000
bugs1386986
milestone57.0a1
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
layout/painting/nsDisplayList.cpp
layout/painting/nsDisplayList.h
--- 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