diff --git a/content/base/src/nsGkAtomList.h b/content/base/src/nsGkAtomList.h index b1eede559805..c3830acaf1bb 100644 --- a/content/base/src/nsGkAtomList.h +++ b/content/base/src/nsGkAtomList.h @@ -1275,6 +1275,8 @@ GK_ATOM(fill, "fill") GK_ATOM(fill_opacity, "fill-opacity") GK_ATOM(fill_rule, "fill-rule") GK_ATOM(filter, "filter") +// Parsing for filterRes may be removed in the future. +// https://bugzilla.mozilla.org/show_bug.cgi?id=979472 GK_ATOM(filterRes, "filterRes") GK_ATOM(filterUnits, "filterUnits") GK_ATOM(flood_color, "flood-color") diff --git a/content/svg/content/src/SVGFilterElement.cpp b/content/svg/content/src/SVGFilterElement.cpp index b5cda94fb037..7539b005e803 100644 --- a/content/svg/content/src/SVGFilterElement.cpp +++ b/content/svg/content/src/SVGFilterElement.cpp @@ -30,11 +30,6 @@ nsSVGElement::LengthInfo SVGFilterElement::sLengthInfo[4] = { &nsGkAtoms::height, 120, nsIDOMSVGLength::SVG_LENGTHTYPE_PERCENTAGE, SVGContentUtils::Y }, }; -nsSVGElement::IntegerPairInfo SVGFilterElement::sIntegerPairInfo[1] = -{ - { &nsGkAtoms::filterRes, 0 } -}; - nsSVGElement::EnumInfo SVGFilterElement::sEnumInfo[2] = { { &nsGkAtoms::filterUnits, @@ -105,26 +100,6 @@ SVGFilterElement::PrimitiveUnits() return mEnumAttributes[PRIMITIVEUNITS].ToDOMAnimatedEnum(this); } -already_AddRefed -SVGFilterElement::FilterResX() -{ - return mIntegerPairAttributes[FILTERRES].ToDOMAnimatedInteger(nsSVGIntegerPair::eFirst, - this); -} - -already_AddRefed -SVGFilterElement::FilterResY() -{ - return mIntegerPairAttributes[FILTERRES].ToDOMAnimatedInteger(nsSVGIntegerPair::eSecond, - this); -} - -void -SVGFilterElement::SetFilterRes(uint32_t filterResX, uint32_t filterResY) -{ - mIntegerPairAttributes[FILTERRES].SetBaseValues(filterResX, filterResY, this); -} - already_AddRefed SVGFilterElement::Href() { @@ -186,13 +161,6 @@ SVGFilterElement::GetLengthInfo() ArrayLength(sLengthInfo)); } -nsSVGElement::IntegerPairAttributesInfo -SVGFilterElement::GetIntegerPairInfo() -{ - return IntegerPairAttributesInfo(mIntegerPairAttributes, sIntegerPairInfo, - ArrayLength(sIntegerPairInfo)); -} - nsSVGElement::EnumAttributesInfo SVGFilterElement::GetEnumInfo() { diff --git a/content/svg/content/src/SVGFilterElement.h b/content/svg/content/src/SVGFilterElement.h index 4e5d77fc839c..253f5d498d75 100644 --- a/content/svg/content/src/SVGFilterElement.h +++ b/content/svg/content/src/SVGFilterElement.h @@ -54,15 +54,11 @@ public: already_AddRefed Height(); already_AddRefed FilterUnits(); already_AddRefed PrimitiveUnits(); - already_AddRefed FilterResX(); - already_AddRefed FilterResY(); - void SetFilterRes(uint32_t filterResX, uint32_t filterResY); already_AddRefed Href(); protected: virtual LengthAttributesInfo GetLengthInfo() MOZ_OVERRIDE; - virtual IntegerPairAttributesInfo GetIntegerPairInfo() MOZ_OVERRIDE; virtual EnumAttributesInfo GetEnumInfo() MOZ_OVERRIDE; virtual StringAttributesInfo GetStringInfo() MOZ_OVERRIDE; @@ -70,10 +66,6 @@ protected: nsSVGLength2 mLengthAttributes[4]; static LengthInfo sLengthInfo[4]; - enum { FILTERRES }; - nsSVGIntegerPair mIntegerPairAttributes[1]; - static IntegerPairInfo sIntegerPairInfo[1]; - enum { FILTERUNITS, PRIMITIVEUNITS }; nsSVGEnum mEnumAttributes[2]; static EnumInfo sEnumInfo[2]; diff --git a/content/svg/content/test/dataTypes-helper.svg b/content/svg/content/test/dataTypes-helper.svg index 8c311642c58b..e2a17e31c3b8 100644 --- a/content/svg/content/test/dataTypes-helper.svg +++ b/content/svg/content/test/dataTypes-helper.svg @@ -1,12 +1,12 @@ - + diff --git a/content/svg/content/test/test_dataTypes.html b/content/svg/content/test/test_dataTypes.html index 44b8eb47c72e..4be3d9c80997 100644 --- a/content/svg/content/test/test_dataTypes.html +++ b/content/svg/content/test/test_dataTypes.html @@ -124,52 +124,52 @@ function runTests() // integer-optional-integer attribute - filter.setAttribute("filterRes", "100"); - is(filter.filterResX.baseVal, 100, "integer-optional-integer first baseVal"); - is(filter.filterResX.animVal, 100, "integer-optional-integer first animVal"); - is(filter.filterResY.baseVal, 100, "integer-optional-integer second baseVal"); - is(filter.filterResY.animVal, 100, "integer-optional-integer second animVal"); + convolve.setAttribute("order", "5"); + is(convolve.orderX.baseVal, 5, "integer-optional-integer first baseVal"); + is(convolve.orderX.animVal, 5, "integer-optional-integer first animVal"); + is(convolve.orderY.baseVal, 5, "integer-optional-integer second baseVal"); + is(convolve.orderY.animVal, 5, "integer-optional-integer second animVal"); - filter.filterResX.baseVal = 50; - is(filter.filterResX.animVal, 50, "integer-optional-integer first animVal"); - is(filter.filterResY.animVal, 100, "integer-optional-integer second animVal"); - is(filter.getAttribute("filterRes"), "50, 100", "integer-optional-integer attribute"); + convolve.orderX.baseVal = 7; + is(convolve.orderX.animVal, 7, "integer-optional-integer first animVal"); + is(convolve.orderY.animVal, 5, "integer-optional-integer second animVal"); + is(convolve.getAttribute("order"), "7, 5", "integer-optional-integer attribute"); - filter.filterResY.baseVal = 50; - is(filter.getAttribute("filterRes"), "50", "integer-optional-integer attribute"); + convolve.orderY.baseVal = 7; + is(convolve.getAttribute("order"), "7", "integer-optional-integer attribute"); - filter.setFilterRes(80, 90); - is(filter.filterResX.baseVal, 80, "integer-optional-integer first baseVal"); - is(filter.filterResX.animVal, 80, "integer-optional-integer first animVal"); - is(filter.filterResY.baseVal, 90, "integer-optional-integer second baseVal"); - is(filter.filterResY.animVal, 90, "integer-optional-integer second animVal"); + convolve.setAttribute("order", "11, 13"); + is(convolve.orderX.baseVal, 11, "integer-optional-integer first baseVal"); + is(convolve.orderX.animVal, 11, "integer-optional-integer first animVal"); + is(convolve.orderY.baseVal, 13, "integer-optional-integer second baseVal"); + is(convolve.orderY.animVal, 13, "integer-optional-integer second animVal"); // 32 bit integer range - filter.setFilterRes(-2147483648, 2147483647); - is(filter.filterResX.baseVal, -2147483648, "integer-optional-integer first baseVal"); - is(filter.filterResX.animVal, -2147483648, "integer-optional-integer first animVal"); - is(filter.filterResY.baseVal, 2147483647, "integer-optional-integer second baseVal"); - is(filter.filterResY.animVal, 2147483647, "integer-optional-integer second animVal"); + convolve.setAttribute("order", "-2147483648, 2147483647"); + is(convolve.orderX.baseVal, -2147483648, "integer-optional-integer first baseVal"); + is(convolve.orderX.animVal, -2147483648, "integer-optional-integer first animVal"); + is(convolve.orderY.baseVal, 2147483647, "integer-optional-integer second baseVal"); + is(convolve.orderY.animVal, 2147483647, "integer-optional-integer second animVal"); // too big, clamp - filter.setAttribute("filterRes", "-2147483649, 2147483648"); - is(filter.filterResX.baseVal, -2147483648, "integer-optional-integer first baseVal"); - is(filter.filterResX.animVal, -2147483648, "integer-optional-integer first animVal"); - is(filter.filterResY.baseVal, 2147483647, "integer-optional-integer second baseVal"); - is(filter.filterResY.animVal, 2147483647, "integer-optional-integer second animVal"); + convolve.setAttribute("order", "-2147483649, 2147483648"); + is(convolve.orderX.baseVal, -2147483648, "integer-optional-integer first baseVal"); + is(convolve.orderX.animVal, -2147483648, "integer-optional-integer first animVal"); + is(convolve.orderY.baseVal, 2147483647, "integer-optional-integer second baseVal"); + is(convolve.orderY.animVal, 2147483647, "integer-optional-integer second animVal"); // invalid - filter.setAttribute("filterRes", "-00000000000invalid, 214748364720invalid"); - is(filter.filterResX.baseVal, 0, "integer-optional-integer first baseVal"); - is(filter.filterResX.animVal, 0, "integer-optional-integer first animVal"); - is(filter.filterResY.baseVal, 0, "integer-optional-integer second baseVal"); - is(filter.filterResY.animVal, 0, "integer-optional-integer second animVal"); + convolve.setAttribute("order", "-00000000000invalid, 214748364720invalid"); + is(convolve.orderX.baseVal, 3, "integer-optional-integer first baseVal"); + is(convolve.orderX.animVal, 3, "integer-optional-integer first animVal"); + is(convolve.orderY.baseVal, 3, "integer-optional-integer second baseVal"); + is(convolve.orderY.animVal, 3, "integer-optional-integer second animVal"); - filter.setAttribute("filterRes", ""); - ok(filter.getAttribute("filterRes") === "", + convolve.setAttribute("order", ""); + ok(convolve.getAttribute("order") === "", "empty integer-optional-integer attribute"); - filter.removeAttribute("filterRes"); - ok(filter.getAttribute("filterRes") === null, + convolve.removeAttribute("order"); + ok(convolve.getAttribute("order") === null, "removed integer-optional-integer attribute"); // angle attribute diff --git a/content/svg/content/test/test_dataTypesModEvents.html b/content/svg/content/test/test_dataTypesModEvents.html index 25a7b95049fc..92270a63b5f6 100644 --- a/content/svg/content/test/test_dataTypesModEvents.html +++ b/content/svg/content/test/test_dataTypesModEvents.html @@ -129,18 +129,18 @@ function runTests() // integer-optional-integer attribute - eventChecker.watchAttr(filter, "filterRes"); + eventChecker.watchAttr(convolve, "order"); eventChecker.expect("add modify remove add"); - filter.setAttribute("filterRes", "60, 70"); - filter.filterResX.baseVal = 50; - filter.removeAttribute("filterRes"); - filter.removeAttributeNS(null, "filterRes"); - filter.setAttribute("filterRes", "50, 60"); + convolve.setAttribute("order", "5, 7"); + convolve.orderX.baseVal = 9; + convolve.removeAttribute("order"); + convolve.removeAttributeNS(null, "order"); + convolve.setAttribute("order", "9, 5"); eventChecker.expect(""); - filter.filterResX.baseVal = 50; - filter.setAttribute("filterRes", "50, 60"); - filter.filterResY.baseVal = 60; + convolve.orderX.baseVal = 9; + convolve.setAttribute("order", "9, 5"); + convolve.orderY.baseVal = 5; // angle attribute diff --git a/dom/webidl/SVGFilterElement.webidl b/dom/webidl/SVGFilterElement.webidl index f0c3129978c3..0e4124b97ee6 100644 --- a/dom/webidl/SVGFilterElement.webidl +++ b/dom/webidl/SVGFilterElement.webidl @@ -17,10 +17,7 @@ interface SVGFilterElement : SVGElement { readonly attribute SVGAnimatedLength y; readonly attribute SVGAnimatedLength width; readonly attribute SVGAnimatedLength height; - readonly attribute SVGAnimatedInteger filterResX; - readonly attribute SVGAnimatedInteger filterResY; - void setFilterRes(unsigned long filterResX, unsigned long filterResY); // ImageData apply(ImageData source); }; diff --git a/layout/reftests/svg/filters/feDiffuseLighting-1.svg b/layout/reftests/svg/filters/feDiffuseLighting-1.svg index 2da7af3915c8..8c5f49b10151 100644 --- a/layout/reftests/svg/filters/feDiffuseLighting-1.svg +++ b/layout/reftests/svg/filters/feDiffuseLighting-1.svg @@ -5,10 +5,10 @@ - + diff --git a/layout/reftests/svg/filters/feDisplacementMap-scale-01.svg b/layout/reftests/svg/filters/feDisplacementMap-scale-01.svg index dd99adbf0730..0b2231e974b9 100644 --- a/layout/reftests/svg/filters/feDisplacementMap-scale-01.svg +++ b/layout/reftests/svg/filters/feDisplacementMap-scale-01.svg @@ -5,7 +5,7 @@ Test that directionless filter primitive attributes are resolved to user units correctly - + diff --git a/layout/reftests/svg/filters/feDistantLight-filterRes-01-ref.svg b/layout/reftests/svg/filters/feDistantLight-filterRes-01-ref.svg deleted file mode 100644 index 5d09327a8e1d..000000000000 --- a/layout/reftests/svg/filters/feDistantLight-filterRes-01-ref.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - Reference for feDistantLight with filterRes larger than filter region - - - - - - - - - - - - - diff --git a/layout/reftests/svg/filters/feDistantLight-filterRes-01.svg b/layout/reftests/svg/filters/feDistantLight-filterRes-01.svg deleted file mode 100644 index b4520116de24..000000000000 --- a/layout/reftests/svg/filters/feDistantLight-filterRes-01.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - Testcase for feDistantLight with filterRes larger than filter region - - - - - - - - - - - - - diff --git a/layout/reftests/svg/filters/feSpecularLighting-1.svg b/layout/reftests/svg/filters/feSpecularLighting-1.svg index 50d363cdcb3d..838a60b7e04f 100644 --- a/layout/reftests/svg/filters/feSpecularLighting-1.svg +++ b/layout/reftests/svg/filters/feSpecularLighting-1.svg @@ -5,10 +5,10 @@ - + diff --git a/layout/reftests/svg/filters/filter-filterRes-high-01.svg b/layout/reftests/svg/filters/filter-filterRes-high-01.svg deleted file mode 100644 index d6fc16475c93..000000000000 --- a/layout/reftests/svg/filters/filter-filterRes-high-01.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - This test checks that the implicit offscreen surface scaling implied by - a high 'filterRes' interacts correctly with other transforms. Specifically - you should see no red if the red filtered circle paints only on the pixels - that it should paint on. - - - - - - - - - - diff --git a/layout/reftests/svg/filters/filter-filterRes-high-02.svg b/layout/reftests/svg/filters/filter-filterRes-high-02.svg deleted file mode 100644 index a64665904436..000000000000 --- a/layout/reftests/svg/filters/filter-filterRes-high-02.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - This test checks that the implicit offscreen surface scaling implied by - a high 'filterRes' interacts correctly with other transforms. Specifically - you should see no red if the lime filtered circle paints on all the pixels - that it should paint on. - - - - - - - - - - diff --git a/layout/reftests/svg/filters/filter-filterRes-low-01.svg b/layout/reftests/svg/filters/filter-filterRes-low-01.svg deleted file mode 100644 index 997007303eb7..000000000000 --- a/layout/reftests/svg/filters/filter-filterRes-low-01.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - This test checks that the implicit offscreen surface scaling implied by - a high 'filterRes' interacts correctly with other transforms. Specifically - you should see only green if the red filtered circle paints only on - the pixels that it should paint on. - - - - - - - - - - - diff --git a/layout/reftests/svg/filters/reftest.list b/layout/reftests/svg/filters/reftest.list index 060b3861ba90..2c37beda3c12 100644 --- a/layout/reftests/svg/filters/reftest.list +++ b/layout/reftests/svg/filters/reftest.list @@ -51,9 +51,6 @@ fuzzy(1,6400) == feGaussianBlur-1.svg feGaussianBlur-1-ref.svg # no tests for feTurbulence == filter-clipped-rect-01.svg pass.svg -== filter-filterRes-high-01.svg pass.svg -== filter-filterRes-high-02.svg pass.svg -random-if(d2d) == filter-filterRes-low-01.svg pass.svg == filter-inner-svg-01.svg pass.svg == filter-inner-svg-02.svg pass.svg == filter-inner-svg-03.svg pass.svg @@ -85,8 +82,6 @@ fuzzy(1,10000) == feConvolveMatrix-bias-01.svg feConvolveMatrix-bias-01-ref.svg fuzzy(2,500) == feDisplacementMap-colour-01.svg feDisplacementMap-colour-01-ref.svg skip-if(B2G) == feDisplacementMap-scale-01.svg pass.svg -skip-if(B2G) fuzzy-if(cocoaWidget,4,184) == feDistantLight-filterRes-01.svg feDistantLight-filterRes-01-ref.svg - == feDropShadow-01.svg feDropShadow-01-ref.svg == feGaussianBlur-alpha-01.svg feGaussianBlur-alpha-01-ref.svg diff --git a/layout/reftests/svg/smil/anim-feConvolveMatrix-order-01-ref.svg b/layout/reftests/svg/smil/anim-feConvolveMatrix-order-01-ref.svg new file mode 100644 index 000000000000..db5ab20e3843 --- /dev/null +++ b/layout/reftests/svg/smil/anim-feConvolveMatrix-order-01-ref.svg @@ -0,0 +1,20 @@ + + + Testcase for animation of the "order" attribute of the "feConvolveMatrix" element + + + + + + + + + + + diff --git a/layout/reftests/svg/smil/anim-feConvolveMatrix-order-01.svg b/layout/reftests/svg/smil/anim-feConvolveMatrix-order-01.svg new file mode 100644 index 000000000000..d24eb3b8d7ba --- /dev/null +++ b/layout/reftests/svg/smil/anim-feConvolveMatrix-order-01.svg @@ -0,0 +1,53 @@ + + + Testcase for animation of the "order" attribute of the "feConvolveMatrix" element + + + + + + + + + + + + + + + + + + + + diff --git a/layout/reftests/svg/smil/anim-feGaussianBlur-01.svg b/layout/reftests/svg/smil/anim-feGaussianBlur-01.svg index 3273c7ea29bb..40f804d74c5d 100644 --- a/layout/reftests/svg/smil/anim-feGaussianBlur-01.svg +++ b/layout/reftests/svg/smil/anim-feGaussianBlur-01.svg @@ -8,7 +8,7 @@ onload="setTimeAndSnapshot(1.9999, true)"> Test animation of the "stdDeviation" <number-optional-number> attribute on "feGaussianBlur" elements - + - - Test animation of the "filterRes" <integer-optional-integer> attribute on "filter" elements - - - - - - - - - - - diff --git a/layout/reftests/svg/smil/reftest.list b/layout/reftests/svg/smil/reftest.list index 5887a5108eed..6295d8d1961e 100644 --- a/layout/reftests/svg/smil/reftest.list +++ b/layout/reftests/svg/smil/reftest.list @@ -116,7 +116,7 @@ fails == anim-fillcolor-1.svg anim-standard-ref.svg # bug 436296 == anim-feTurbulence-numOctaves-01.svg anim-feTurbulence-numOctaves-01-ref.svg # animate some attributes: -random-if(/^Windows\x20NT\x205\.1/.test(http.oscpu)) == anim-filter-filterRes-01.svg lime.svg # bug 818177 +== anim-feConvolveMatrix-order-01.svg anim-feConvolveMatrix-order-01-ref.svg # animate some attributes: == anim-marker-orient-01.svg lime.svg diff --git a/layout/svg/crashtests/453754-1.svg b/layout/svg/crashtests/453754-1.svg index 68f4c5cc06ce..a32d81928194 100644 --- a/layout/svg/crashtests/453754-1.svg +++ b/layout/svg/crashtests/453754-1.svg @@ -1,6 +1,6 @@ - + diff --git a/layout/svg/crashtests/474700-1.svg b/layout/svg/crashtests/474700-1.svg index 7841103533ac..141a1b390359 100644 --- a/layout/svg/crashtests/474700-1.svg +++ b/layout/svg/crashtests/474700-1.svg @@ -1 +1 @@ - + diff --git a/layout/svg/nsSVGFilterFrame.cpp b/layout/svg/nsSVGFilterFrame.cpp index b98961bfb3ab..37b47ae0e86f 100644 --- a/layout/svg/nsSVGFilterFrame.cpp +++ b/layout/svg/nsSVGFilterFrame.cpp @@ -67,22 +67,6 @@ nsSVGFilterFrame::GetEnumValue(uint32_t aIndex, nsIContent *aDefault) mEnumAttributes[aIndex].GetAnimValue(); } -const nsSVGIntegerPair * -nsSVGFilterFrame::GetIntegerPairValue(uint32_t aIndex, nsIContent *aDefault) -{ - const nsSVGIntegerPair *thisIntegerPair = - &static_cast(mContent)->mIntegerPairAttributes[aIndex]; - - if (thisIntegerPair->IsExplicitlySet()) - return thisIntegerPair; - - AutoFilterReferencer filterRef(this); - - nsSVGFilterFrame *next = GetReferencedFilterIfNotInUse(); - return next ? next->GetIntegerPairValue(aIndex, aDefault) : - &static_cast(aDefault)->mIntegerPairAttributes[aIndex]; -} - const nsSVGLength2 * nsSVGFilterFrame::GetLengthValue(uint32_t aIndex, nsIContent *aDefault) { @@ -187,7 +171,6 @@ nsSVGFilterFrame::AttributeChanged(int32_t aNameSpaceID, aAttribute == nsGkAtoms::y || aAttribute == nsGkAtoms::width || aAttribute == nsGkAtoms::height || - aAttribute == nsGkAtoms::filterRes || aAttribute == nsGkAtoms::filterUnits || aAttribute == nsGkAtoms::primitiveUnits)) { nsSVGEffects::InvalidateDirectRenderingObservers(this); diff --git a/layout/svg/nsSVGFilterFrame.h b/layout/svg/nsSVGFilterFrame.h index 907db97ab376..e2f9b8032379 100644 --- a/layout/svg/nsSVGFilterFrame.h +++ b/layout/svg/nsSVGFilterFrame.h @@ -85,11 +85,6 @@ private: { return GetEnumValue(aIndex, mContent); } - const nsSVGIntegerPair *GetIntegerPairValue(uint32_t aIndex, nsIContent *aDefault); - const nsSVGIntegerPair *GetIntegerPairValue(uint32_t aIndex) - { - return GetIntegerPairValue(aIndex, mContent); - } const nsSVGLength2 *GetLengthValue(uint32_t aIndex, nsIContent *aDefault); const nsSVGLength2 *GetLengthValue(uint32_t aIndex) { diff --git a/layout/svg/nsSVGFilterInstance.cpp b/layout/svg/nsSVGFilterInstance.cpp index 82c3dbccd380..a6527e2687a4 100644 --- a/layout/svg/nsSVGFilterInstance.cpp +++ b/layout/svg/nsSVGFilterInstance.cpp @@ -52,9 +52,9 @@ nsSVGFilterInstance::nsSVGFilterInstance(const nsStyleFilter& aFilter, // XXX if filterUnits is set (or has defaulted) to objectBoundingBox, we // should send a warning to the error console if the author has used lengths - // with units. This is a common mistake and can result in filterRes being - // *massive* below (because we ignore the units and interpret the number as - // a factor of the bbox width/height). We should also send a warning if the + // with units. This is a common mistake and can result in the filter region + // being *massive* below (because we ignore the units and interpret the number + // as a factor of the bbox width/height). We should also send a warning if the // user uses a number without units (a future SVG spec should really // deprecate that, since it's too confusing for a bare number to be sometimes // interpreted as a fraction of the bounding box and sometimes as user-space @@ -81,56 +81,31 @@ nsSVGFilterInstance::nsSVGFilterInstance(const nsStyleFilter& aFilter, return; } - // Calculate filterRes (the width and height of the pixel buffer of the + // Calculate the width and height of the pixel buffer of the // temporary offscreen surface that we would/will create to paint into when - // painting the entire filtered element) and, if necessary, adjust + // painting the entire filtered element and, if necessary, adjust // mFilterRegion out slightly so that it aligns with pixel boundaries of this // buffer: - gfxIntSize filterRes; - const nsSVGIntegerPair* filterResAttrs = - mFilterFrame->GetIntegerPairValue(SVGFilterElement::FILTERRES); - if (filterResAttrs->IsExplicitlySet()) { - int32_t filterResX = filterResAttrs->GetAnimValue(nsSVGIntegerPair::eFirst); - int32_t filterResY = filterResAttrs->GetAnimValue(nsSVGIntegerPair::eSecond); - if (filterResX <= 0 || filterResY <= 0) { - // 0 disables rendering, < 0 is error. dispatch error console warning? - return; - } - - mFilterRegion.Scale(filterResX, filterResY); - mFilterRegion.RoundOut(); - mFilterRegion.Scale(1.0 / filterResX, 1.0 / filterResY); - // We don't care if this overflows, because we can handle upscaling/ - // downscaling to filterRes - bool overflow; - filterRes = - nsSVGUtils::ConvertToSurfaceSize(gfxSize(filterResX, filterResY), - &overflow); - // XXX we could send a warning to the error console if the author specified - // filterRes doesn't align well with our outer 'svg' device space. - } else { - // Match filterRes as closely as possible to the pixel density of the nearest - // outer 'svg' device space: - gfxMatrix canvasTM = - nsSVGUtils::GetCanvasTM(mTargetFrame, nsISVGChildFrame::FOR_OUTERSVG_TM); - if (canvasTM.IsSingular()) { - // nothing to draw - return; - } - - gfxSize scale = canvasTM.ScaleFactors(true); - mFilterRegion.Scale(scale.width, scale.height); - mFilterRegion.RoundOut(); - // We don't care if this overflows, because we can handle upscaling/ - // downscaling to filterRes - bool overflow; - filterRes = nsSVGUtils::ConvertToSurfaceSize(mFilterRegion.Size(), - &overflow); - mFilterRegion.Scale(1.0 / scale.width, 1.0 / scale.height); + // Match filter space as closely as possible to the pixel density of the + // nearest outer 'svg' device space: + gfxMatrix canvasTM = + nsSVGUtils::GetCanvasTM(mTargetFrame, nsISVGChildFrame::FOR_OUTERSVG_TM); + if (canvasTM.IsSingular()) { + // nothing to draw + return; } - mFilterSpaceBounds.SetRect(nsIntPoint(0, 0), filterRes); + gfxSize scale = canvasTM.ScaleFactors(true); + mFilterRegion.Scale(scale.width, scale.height); + mFilterRegion.RoundOut(); + + // We don't care if this overflows, because we can handle upscaling/ + // downscaling to filter space. + bool overflow; + mFilterSpaceBounds.SetRect(nsIntPoint(0, 0), + nsSVGUtils::ConvertToSurfaceSize(mFilterRegion.Size(), &overflow)); + mFilterRegion.Scale(1.0 / scale.width, 1.0 / scale.height); mInitialized = true; } diff --git a/layout/svg/nsSVGFilterInstance.h b/layout/svg/nsSVGFilterInstance.h index 5a5d179b2624..f542dfaf6f35 100644 --- a/layout/svg/nsSVGFilterInstance.h +++ b/layout/svg/nsSVGFilterInstance.h @@ -74,9 +74,6 @@ public: /** * Returns the size of the user specified "filter region", in filter space. - * The size will be {filterRes.x by filterRes.y}, whether the user specified - * the filter's filterRes attribute explicitly, or the implementation chose - * the filterRes values. */ nsIntRect GetFilterSpaceBounds() const { return mFilterSpaceBounds; }