diff --git a/content/svg/content/src/nsSVGMaskElement.cpp b/content/svg/content/src/nsSVGMaskElement.cpp index 6e8f4372c7c..46857b57417 100644 --- a/content/svg/content/src/nsSVGMaskElement.cpp +++ b/content/svg/content/src/nsSVGMaskElement.cpp @@ -157,6 +157,7 @@ nsSVGMaskElement::IsAttributeMapped(const nsIAtom* name) const sFiltersMap, sFontSpecificationMap, sGradientStopMap, + sGraphicsMap, sMarkersMap, sTextContentElementsMap, sViewportsMap diff --git a/layout/reftests/svg/mask-basic-02-ref.svg b/layout/reftests/svg/mask-basic-02-ref.svg new file mode 100644 index 00000000000..ac4e7f3f32b --- /dev/null +++ b/layout/reftests/svg/mask-basic-02-ref.svg @@ -0,0 +1,11 @@ + + + + Reference that mask defaults to sRGB + + + + diff --git a/layout/reftests/svg/mask-basic-02.svg b/layout/reftests/svg/mask-basic-02.svg new file mode 100644 index 00000000000..71204df0e7a --- /dev/null +++ b/layout/reftests/svg/mask-basic-02.svg @@ -0,0 +1,17 @@ + + + + Testcase that mask defaults to sRGB + + + + + + + + + + diff --git a/layout/reftests/svg/reftest.list b/layout/reftests/svg/reftest.list index cbe068d19f5..015e98541f9 100644 --- a/layout/reftests/svg/reftest.list +++ b/layout/reftests/svg/reftest.list @@ -145,6 +145,7 @@ fails == inline-in-xul-basic-01.xul pass.svg == marker-attribute-01.svg pass.svg == marker-viewBox-01.svg marker-viewBox-01-ref.svg == mask-basic-01.svg pass.svg +== mask-basic-02.svg mask-basic-02-ref.svg == mask-containing-masked-content-01.svg pass.svg == mask-transformed-01.svg mask-transformed-01-ref.svg == nested-viewBox-01.svg pass.svg diff --git a/layout/svg/base/src/nsSVGMaskFrame.cpp b/layout/svg/base/src/nsSVGMaskFrame.cpp index 7102e97afba..c7589ffecff 100644 --- a/layout/svg/base/src/nsSVGMaskFrame.cpp +++ b/layout/svg/base/src/nsSVGMaskFrame.cpp @@ -138,7 +138,10 @@ nsSVGMaskFrame::ComputeMaskAlpha(nsSVGRenderState *aContext, nsIntRect rect(0, 0, surfaceSize.width, surfaceSize.height); nsSVGUtils::UnPremultiplyImageDataAlpha(data, stride, rect); - nsSVGUtils::ConvertImageDataToLinearRGB(data, stride, rect); + if (GetStyleSVG()->mColorInterpolation == + NS_STYLE_COLOR_INTERPOLATION_LINEARRGB) { + nsSVGUtils::ConvertImageDataToLinearRGB(data, stride, rect); + } for (PRInt32 y = 0; y < surfaceSize.height; y++) for (PRInt32 x = 0; x < surfaceSize.width; x++) { @@ -160,6 +163,13 @@ nsSVGMaskFrame::ComputeMaskAlpha(nsSVGRenderState *aContext, return retval; } +/* virtual */ void +nsSVGMaskFrame::DidSetStyleContext(nsStyleContext* aOldStyleContext) +{ + nsSVGEffects::InvalidateRenderingObservers(this); + nsSVGMaskFrameBase::DidSetStyleContext(aOldStyleContext); +} + NS_IMETHODIMP nsSVGMaskFrame::AttributeChanged(PRInt32 aNameSpaceID, nsIAtom* aAttribute, diff --git a/layout/svg/base/src/nsSVGMaskFrame.h b/layout/svg/base/src/nsSVGMaskFrame.h index f069b8d387d..245645ca816 100644 --- a/layout/svg/base/src/nsSVGMaskFrame.h +++ b/layout/svg/base/src/nsSVGMaskFrame.h @@ -63,6 +63,8 @@ public: const gfxMatrix &aMatrix, float aOpacity = 1.0f); + virtual void DidSetStyleContext(nsStyleContext* aOldStyleContext); + NS_IMETHOD AttributeChanged(PRInt32 aNameSpaceID, nsIAtom* aAttribute, PRInt32 aModType);