diff --git a/layout/base/nsDisplayList.cpp b/layout/base/nsDisplayList.cpp index 6465b9c5f81..ae33379b290 100644 --- a/layout/base/nsDisplayList.cpp +++ b/layout/base/nsDisplayList.cpp @@ -64,6 +64,8 @@ #include "BasicLayers.h" #include "nsBoxFrame.h" #include "nsViewportFrame.h" +#include "nsSVGEffects.h" +#include "nsSVGClipPathFrame.h" using namespace mozilla; using namespace mozilla::layers; @@ -2998,3 +3000,44 @@ bool nsDisplaySVGEffects::TryMerge(nsDisplayListBuilder* aBuilder, nsDisplayItem other->mBounds + other->mEffectsFrame->GetOffsetTo(mEffectsFrame)); return true; } + +#ifdef MOZ_DUMP_PAINTING +void +nsDisplaySVGEffects::PrintEffects(FILE* aOutput) +{ + nsIFrame* firstFrame = + nsLayoutUtils::GetFirstContinuationOrSpecialSibling(mEffectsFrame); + nsSVGEffects::EffectProperties effectProperties = + nsSVGEffects::GetEffectProperties(firstFrame); + bool isOK = true; + nsSVGClipPathFrame *clipPathFrame = effectProperties.GetClipPathFrame(&isOK); + bool first = true; + fprintf(aOutput, " effects=("); + if (mEffectsFrame->GetStyleDisplay()->mOpacity != 1.0f) { + first = false; + fprintf(aOutput, "opacity(%f)", mEffectsFrame->GetStyleDisplay()->mOpacity); + } + if (clipPathFrame) { + if (!first) { + fprintf(aOutput, ", "); + } + fprintf(aOutput, "clip(%s)", clipPathFrame->IsTrivial() ? "trivial" : "non-trivial"); + first = false; + } + if (effectProperties.GetFilterFrame(&isOK)) { + if (!first) { + fprintf(aOutput, ", "); + } + fprintf(aOutput, "filter"); + first = false; + } + if (effectProperties.GetMaskFrame(&isOK)) { + if (!first) { + fprintf(aOutput, ", "); + } + fprintf(aOutput, "mask"); + } + fprintf(aOutput, ")"); +} +#endif + diff --git a/layout/base/nsDisplayList.h b/layout/base/nsDisplayList.h index 8e438575ea4..670c6b2dde9 100644 --- a/layout/base/nsDisplayList.h +++ b/layout/base/nsDisplayList.h @@ -2052,6 +2052,10 @@ public: nsIFrame* GetEffectsFrame() { return mEffectsFrame; } +#ifdef MOZ_DUMP_PAINTING + void PrintEffects(FILE* aOutput); +#endif + private: nsIFrame* mEffectsFrame; // relative to mEffectsFrame diff --git a/layout/base/nsLayoutDebugger.cpp b/layout/base/nsLayoutDebugger.cpp index 63259d2e553..734df7453bc 100644 --- a/layout/base/nsLayoutDebugger.cpp +++ b/layout/base/nsLayoutDebugger.cpp @@ -207,6 +207,9 @@ PrintDisplayListTo(nsDisplayListBuilder* aBuilder, const nsDisplayList& aList, fprintf(aOutput, " layer=%p", layer); } } + if (i->GetType() == nsDisplayItem::TYPE_SVG_EFFECTS) { + (static_cast(i))->PrintEffects(aOutput); + } fputc('\n', aOutput); if (list) { PrintDisplayListTo(aBuilder, *list, aIndent + 4, aOutput);