From a7bbcb15308f6c0bbf525bf7db483bdacb8432a2 Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Mon, 9 Jun 2014 16:47:59 +1200 Subject: [PATCH] Bug 1022612. Part 8: nsDisplayWrapList (but not subclasses) should return true for ShouldFlattenAway. r=mattwoodrow Also the assertion in TryMerge is going away because we're going to do TryMerge first in FrameLayerBuilder. --HG-- extra : rebase_source : d6343f0a7cb26f9848c2d2b8d46bb1787d3ae632 --- layout/base/nsDisplayList.h | 16 +++++++++++++++- layout/forms/nsSelectsAreaFrame.cpp | 3 +++ layout/xul/nsBoxFrame.cpp | 3 +++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/layout/base/nsDisplayList.h b/layout/base/nsDisplayList.h index 714fc07ac6d..f3ca92732f5 100644 --- a/layout/base/nsDisplayList.h +++ b/layout/base/nsDisplayList.h @@ -2619,13 +2619,15 @@ public: nsRegion* aVisibleRegion, const nsRect& aAllowVisibleRegionExpansion) MOZ_OVERRIDE; virtual bool TryMerge(nsDisplayListBuilder* aBuilder, nsDisplayItem* aItem) MOZ_OVERRIDE { - NS_WARNING("This list should already have been flattened!!!"); return false; } virtual void GetMergedFrames(nsTArray* aFrames) MOZ_OVERRIDE { aFrames->AppendElements(mMergedFrames); } + virtual bool ShouldFlattenAway(nsDisplayListBuilder* aBuilder) { + return true; + } virtual bool IsInvalid(nsRect& aRect) MOZ_OVERRIDE { if (mFrame->IsInvalid(aRect) && aRect.IsEmpty()) { @@ -2798,6 +2800,9 @@ public: nsRegion* aVisibleRegion, const nsRect& aAllowVisibleRegionExpansion) MOZ_OVERRIDE; virtual bool TryMerge(nsDisplayListBuilder* aBuilder, nsDisplayItem* aItem) MOZ_OVERRIDE; + virtual bool ShouldFlattenAway(nsDisplayListBuilder* aBuilder) MOZ_OVERRIDE { + return false; + } NS_DISPLAY_DECL_NAME("MixBlendMode", TYPE_MIX_BLEND_MODE) }; @@ -2825,6 +2830,9 @@ public: return mozilla::LAYER_INACTIVE; } virtual bool TryMerge(nsDisplayListBuilder* aBuilder, nsDisplayItem* aItem) MOZ_OVERRIDE; + virtual bool ShouldFlattenAway(nsDisplayListBuilder* aBuilder) MOZ_OVERRIDE { + return false; + } NS_DISPLAY_DECL_NAME("BlendContainer", TYPE_BLEND_CONTAINER) private: @@ -2884,6 +2892,9 @@ public: // Don't allow merging, each sublist must have its own layer return false; } + virtual bool ShouldFlattenAway(nsDisplayListBuilder* aBuilder) MOZ_OVERRIDE { + return false; + } uint32_t GetFlags() { return mFlags; } NS_DISPLAY_DECL_NAME("OwnLayer", TYPE_OWN_LAYER) protected: @@ -3171,6 +3182,9 @@ public: const nsRect& aAllowVisibleRegionExpansion) MOZ_OVERRIDE; virtual bool TryMerge(nsDisplayListBuilder* aBuilder, nsDisplayItem* aItem) MOZ_OVERRIDE; + virtual bool ShouldFlattenAway(nsDisplayListBuilder* aBuilder) MOZ_OVERRIDE { + return false; + } NS_DISPLAY_DECL_NAME("SVGEffects", TYPE_SVG_EFFECTS) virtual LayerState GetLayerState(nsDisplayListBuilder* aBuilder, diff --git a/layout/forms/nsSelectsAreaFrame.cpp b/layout/forms/nsSelectsAreaFrame.cpp index 14f33a94a11..006ba401c48 100644 --- a/layout/forms/nsSelectsAreaFrame.cpp +++ b/layout/forms/nsSelectsAreaFrame.cpp @@ -37,6 +37,9 @@ public: : nsDisplayWrapList(aBuilder, aFrame, aList) {} virtual void HitTest(nsDisplayListBuilder* aBuilder, const nsRect& aRect, HitTestState* aState, nsTArray *aOutFrames); + virtual bool ShouldFlattenAway(nsDisplayListBuilder* aBuilder) MOZ_OVERRIDE { + return false; + } NS_DISPLAY_DECL_NAME("OptionEventGrabber", TYPE_OPTION_EVENT_GRABBER) }; diff --git a/layout/xul/nsBoxFrame.cpp b/layout/xul/nsBoxFrame.cpp index 3c8d47ad58d..21ad008bef4 100644 --- a/layout/xul/nsBoxFrame.cpp +++ b/layout/xul/nsBoxFrame.cpp @@ -2012,6 +2012,9 @@ public: virtual void HitTest(nsDisplayListBuilder* aBuilder, const nsRect& aRect, HitTestState* aState, nsTArray *aOutFrames) MOZ_OVERRIDE; + virtual bool ShouldFlattenAway(nsDisplayListBuilder* aBuilder) MOZ_OVERRIDE { + return false; + } NS_DISPLAY_DECL_NAME("XULEventRedirector", TYPE_XUL_EVENT_REDIRECTOR) private: nsIFrame* mTargetFrame;