WebKit Bugzilla
Attachment 339070 Details for
Bug 185113
: Fix color-filter to apply to SVG colors
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-185113-20180428102247.patch (text/plain), 21.07 KB, created by
Simon Fraser (smfr)
on 2018-04-28 10:22:48 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Simon Fraser (smfr)
Created:
2018-04-28 10:22:48 PDT
Size:
21.07 KB
patch
obsolete
>Subversion Revision: 231129 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 0cd1acf0eb73fae09535746f121f94ef10b11c66..ae98c214c2fef69894f888a46762e32272fa5d2f 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,39 @@ >+2018-04-28 Simon Fraser <simon.fraser@apple.com> >+ >+ Fix color-filter to apply to SVG colors >+ https://bugs.webkit.org/show_bug.cgi?id=185113 >+ rdar://problem/39665082 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Convert SVG colors through color-filter operations for the places in SVG >+ that use color, namely fill and stroke, gradients, lighting colors and >+ drop-shadow. >+ >+ Test: css3/color-filters/svg/color-filter-inline-svg.html >+ >+ * rendering/svg/RenderSVGResourceGradient.cpp: >+ (WebCore::RenderSVGResourceGradient::applyResource): >+ * rendering/svg/RenderSVGResourceGradient.h: >+ * rendering/svg/RenderSVGResourceLinearGradient.cpp: >+ (WebCore::RenderSVGResourceLinearGradient::buildGradient const): >+ * rendering/svg/RenderSVGResourceLinearGradient.h: >+ * rendering/svg/RenderSVGResourceRadialGradient.cpp: >+ (WebCore::RenderSVGResourceRadialGradient::buildGradient const): >+ * rendering/svg/RenderSVGResourceRadialGradient.h: >+ * rendering/svg/RenderSVGResourceSolidColor.cpp: >+ (WebCore::RenderSVGResourceSolidColor::applyResource): >+ * svg/SVGFEDiffuseLightingElement.cpp: >+ (WebCore::SVGFEDiffuseLightingElement::setFilterEffectAttribute): >+ (WebCore::SVGFEDiffuseLightingElement::build): >+ * svg/SVGFEDropShadowElement.cpp: >+ (WebCore::SVGFEDropShadowElement::build): >+ * svg/SVGFEFloodElement.cpp: >+ (WebCore::SVGFEFloodElement::build): >+ * svg/SVGFESpecularLightingElement.cpp: >+ (WebCore::SVGFESpecularLightingElement::setFilterEffectAttribute): >+ (WebCore::SVGFESpecularLightingElement::build): >+ > 2018-04-27 Keith Rollin <krollin@apple.com> > > Fix crash in DocumentLoader::startLoadingMainResource >diff --git a/Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp b/Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp >index 0b5d9b6f03859e3bb16ac0cdaeb7926077060e90..9781c4e83c171ae48414b20ac573c8c6cf62ae67 100644 >--- a/Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp >+++ b/Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp >@@ -125,7 +125,7 @@ bool RenderSVGResourceGradient::applyResource(RenderElement& renderer, const Ren > > // Create gradient object > if (!gradientData->gradient) { >- buildGradient(gradientData.get()); >+ buildGradient(gradientData.get(), style); > > // CG platforms will handle the gradient space transform for text after applying the > // resource, so don't apply it here. For non-CG platforms, we want the text bounding >@@ -232,13 +232,14 @@ void RenderSVGResourceGradient::postApplyResource(RenderElement& renderer, Graph > context->restore(); > } > >-void RenderSVGResourceGradient::addStops(GradientData* gradientData, const Vector<Gradient::ColorStop>& stops) const >+void RenderSVGResourceGradient::addStops(GradientData* gradientData, const Vector<Gradient::ColorStop>& stops, const RenderStyle& style) const > { > ASSERT(gradientData->gradient); > >- const Vector<Gradient::ColorStop>::const_iterator end = stops.end(); >- for (Vector<Gradient::ColorStop>::const_iterator it = stops.begin(); it != end; ++it) >- gradientData->gradient->addColorStop(*it); >+ for (Gradient::ColorStop stop : stops) { >+ stop.color = style.colorByApplyingColorFilter(stop.color); >+ gradientData->gradient->addColorStop(stop); >+ } > } > > GradientSpreadMethod RenderSVGResourceGradient::platformSpreadMethodFromSVGType(SVGSpreadMethodType method) const >diff --git a/Source/WebCore/rendering/svg/RenderSVGResourceGradient.h b/Source/WebCore/rendering/svg/RenderSVGResourceGradient.h >index cc360f4dcb151192dbb0404c9b4bc96c9e7533e5..140c70ed535a0730af4808c579aade9db4896841 100644 >--- a/Source/WebCore/rendering/svg/RenderSVGResourceGradient.h >+++ b/Source/WebCore/rendering/svg/RenderSVGResourceGradient.h >@@ -56,12 +56,12 @@ protected: > > void element() const = delete; > >- void addStops(GradientData*, const Vector<Gradient::ColorStop>&) const; >+ void addStops(GradientData*, const Vector<Gradient::ColorStop>&, const RenderStyle&) const; > > virtual SVGUnitTypes::SVGUnitType gradientUnits() const = 0; > virtual void calculateGradientTransform(AffineTransform&) = 0; > virtual bool collectGradientAttributes() = 0; >- virtual void buildGradient(GradientData*) const = 0; >+ virtual void buildGradient(GradientData*, const RenderStyle&) const = 0; > > GradientSpreadMethod platformSpreadMethodFromSVGType(SVGSpreadMethodType) const; > >diff --git a/Source/WebCore/rendering/svg/RenderSVGResourceLinearGradient.cpp b/Source/WebCore/rendering/svg/RenderSVGResourceLinearGradient.cpp >index 457b20cf2dab460d628ca4bf9db2f5406891b77c..9dd3250e02d5e85741884420f57a7613114d9b41 100644 >--- a/Source/WebCore/rendering/svg/RenderSVGResourceLinearGradient.cpp >+++ b/Source/WebCore/rendering/svg/RenderSVGResourceLinearGradient.cpp >@@ -50,11 +50,11 @@ FloatPoint RenderSVGResourceLinearGradient::endPoint(const LinearGradientAttribu > return SVGLengthContext::resolvePoint(&linearGradientElement(), attributes.gradientUnits(), attributes.x2(), attributes.y2()); > } > >-void RenderSVGResourceLinearGradient::buildGradient(GradientData* gradientData) const >+void RenderSVGResourceLinearGradient::buildGradient(GradientData* gradientData, const RenderStyle& style) const > { > gradientData->gradient = Gradient::create(Gradient::LinearData { startPoint(m_attributes), endPoint(m_attributes) }); > gradientData->gradient->setSpreadMethod(platformSpreadMethodFromSVGType(m_attributes.spreadMethod())); >- addStops(gradientData, m_attributes.stops()); >+ addStops(gradientData, m_attributes.stops(), style); > } > > } >diff --git a/Source/WebCore/rendering/svg/RenderSVGResourceLinearGradient.h b/Source/WebCore/rendering/svg/RenderSVGResourceLinearGradient.h >index ba2ab89d26534a942e2b2d7bfc913772453b0cfc..4b93c87046cbdc539313ac703e82af6c1892a5ee 100644 >--- a/Source/WebCore/rendering/svg/RenderSVGResourceLinearGradient.h >+++ b/Source/WebCore/rendering/svg/RenderSVGResourceLinearGradient.h >@@ -39,7 +39,7 @@ public: > SVGUnitTypes::SVGUnitType gradientUnits() const override { return m_attributes.gradientUnits(); } > void calculateGradientTransform(AffineTransform& transform) override { transform = m_attributes.gradientTransform(); } > bool collectGradientAttributes() override; >- void buildGradient(GradientData*) const override; >+ void buildGradient(GradientData*, const RenderStyle&) const override; > > FloatPoint startPoint(const LinearGradientAttributes&) const; > FloatPoint endPoint(const LinearGradientAttributes&) const; >diff --git a/Source/WebCore/rendering/svg/RenderSVGResourceRadialGradient.cpp b/Source/WebCore/rendering/svg/RenderSVGResourceRadialGradient.cpp >index 7af48c65019a518db2cde97c92cb1df3896756fa..09a5cc2b0d5eca6625308a70b0ffb10417947dac 100644 >--- a/Source/WebCore/rendering/svg/RenderSVGResourceRadialGradient.cpp >+++ b/Source/WebCore/rendering/svg/RenderSVGResourceRadialGradient.cpp >@@ -61,12 +61,12 @@ float RenderSVGResourceRadialGradient::focalRadius(const RadialGradientAttribute > return SVGLengthContext::resolveLength(&radialGradientElement(), attributes.gradientUnits(), attributes.fr()); > } > >-void RenderSVGResourceRadialGradient::buildGradient(GradientData* gradientData) const >+void RenderSVGResourceRadialGradient::buildGradient(GradientData* gradientData, const RenderStyle& style) const > { > gradientData->gradient = Gradient::create(Gradient::RadialData { this->focalPoint(m_attributes), this->centerPoint(m_attributes), this->focalRadius(m_attributes), this->radius(m_attributes), 1 }); > gradientData->gradient->setSpreadMethod(platformSpreadMethodFromSVGType(m_attributes.spreadMethod())); > >- addStops(gradientData, m_attributes.stops()); >+ addStops(gradientData, m_attributes.stops(), style); > } > > } >diff --git a/Source/WebCore/rendering/svg/RenderSVGResourceRadialGradient.h b/Source/WebCore/rendering/svg/RenderSVGResourceRadialGradient.h >index fb3050bbeaa0e568202931fc185ac5d6af8f87e8..809930cf9c912ce4a6a9d6426b85c8c5c59267c7 100644 >--- a/Source/WebCore/rendering/svg/RenderSVGResourceRadialGradient.h >+++ b/Source/WebCore/rendering/svg/RenderSVGResourceRadialGradient.h >@@ -40,7 +40,7 @@ public: > > SVGUnitTypes::SVGUnitType gradientUnits() const override { return m_attributes.gradientUnits(); } > void calculateGradientTransform(AffineTransform& transform) override { transform = m_attributes.gradientTransform(); } >- void buildGradient(GradientData*) const override; >+ void buildGradient(GradientData*, const RenderStyle&) const override; > > FloatPoint centerPoint(const RadialGradientAttributes&) const; > FloatPoint focalPoint(const RadialGradientAttributes&) const; >diff --git a/Source/WebCore/rendering/svg/RenderSVGResourceSolidColor.cpp b/Source/WebCore/rendering/svg/RenderSVGResourceSolidColor.cpp >index 09a6e0c985bb118086d769a1a7ecb7800681251c..6520c416a5378f0b57d84df8a3c77cf7d0b4bea5 100644 >--- a/Source/WebCore/rendering/svg/RenderSVGResourceSolidColor.cpp >+++ b/Source/WebCore/rendering/svg/RenderSVGResourceSolidColor.cpp >@@ -46,7 +46,7 @@ bool RenderSVGResourceSolidColor::applyResource(RenderElement& renderer, const R > context->setAlpha(svgStyle.fillOpacity()); > else > context->setAlpha(1); >- context->setFillColor(m_color); >+ context->setFillColor(style.colorByApplyingColorFilter(m_color)); > if (!isRenderingMask) > context->setFillRule(svgStyle.fillRule()); > >@@ -56,7 +56,7 @@ bool RenderSVGResourceSolidColor::applyResource(RenderElement& renderer, const R > // When rendering the mask for a RenderSVGResourceClipper, the stroke code path is never hit. > ASSERT(!isRenderingMask); > context->setAlpha(svgStyle.strokeOpacity()); >- context->setStrokeColor(m_color); >+ context->setStrokeColor(style.colorByApplyingColorFilter(m_color)); > > SVGRenderSupport::applyStrokeStyleToContext(context, style, renderer); > >diff --git a/Source/WebCore/svg/SVGFEDiffuseLightingElement.cpp b/Source/WebCore/svg/SVGFEDiffuseLightingElement.cpp >index 66c5dbb117dce23faf7b252531feab0ac81ce7e5..3ea3b16e762d0eac40f7c3c9e9b5dc8b9471fd5a 100644 >--- a/Source/WebCore/svg/SVGFEDiffuseLightingElement.cpp >+++ b/Source/WebCore/svg/SVGFEDiffuseLightingElement.cpp >@@ -111,7 +111,8 @@ bool SVGFEDiffuseLightingElement::setFilterEffectAttribute(FilterEffect* effect, > if (attrName == SVGNames::lighting_colorAttr) { > RenderObject* renderer = this->renderer(); > ASSERT(renderer); >- return diffuseLighting->setLightingColor(renderer->style().svgStyle().lightingColor()); >+ Color color = renderer->style().colorByApplyingColorFilter(renderer->style().svgStyle().lightingColor()); >+ return diffuseLighting->setLightingColor(color); > } > if (attrName == SVGNames::surfaceScaleAttr) > return diffuseLighting->setSurfaceScale(surfaceScale()); >@@ -190,7 +191,7 @@ RefPtr<FilterEffect> SVGFEDiffuseLightingElement::build(SVGFilterBuilder* filter > if (!renderer) > return nullptr; > >- const Color& color = renderer->style().svgStyle().lightingColor(); >+ Color color = renderer->style().colorByApplyingColorFilter(renderer->style().svgStyle().lightingColor()); > > RefPtr<FilterEffect> effect = FEDiffuseLighting::create(filter, color, surfaceScale(), diffuseConstant(), kernelUnitLengthX(), kernelUnitLengthY(), WTFMove(lightSource)); > effect->inputEffects().append(input1); >diff --git a/Source/WebCore/svg/SVGFEDropShadowElement.cpp b/Source/WebCore/svg/SVGFEDropShadowElement.cpp >index ed53a5405b0d4472bde98b33e8cc66b512e782be..cc4bba116013a7a75a3ded9308e3522ff3d2ca82 100644 >--- a/Source/WebCore/svg/SVGFEDropShadowElement.cpp >+++ b/Source/WebCore/svg/SVGFEDropShadowElement.cpp >@@ -133,7 +133,7 @@ RefPtr<FilterEffect> SVGFEDropShadowElement::build(SVGFilterBuilder* filterBuild > > const SVGRenderStyle& svgStyle = renderer->style().svgStyle(); > >- const Color& color = svgStyle.floodColor(); >+ Color color = renderer->style().colorByApplyingColorFilter(svgStyle.floodColor()); > float opacity = svgStyle.floodOpacity(); > > auto input1 = filterBuilder->getEffectById(in1()); >diff --git a/Source/WebCore/svg/SVGFEFloodElement.cpp b/Source/WebCore/svg/SVGFEFloodElement.cpp >index 7f7e0d4cd5c713f01441d5199f4033e9b7a3645c..cfe642a332f72dfba87fee6b3ba6857bf92610bd 100644 >--- a/Source/WebCore/svg/SVGFEFloodElement.cpp >+++ b/Source/WebCore/svg/SVGFEFloodElement.cpp >@@ -66,7 +66,7 @@ RefPtr<FilterEffect> SVGFEFloodElement::build(SVGFilterBuilder*, Filter& filter) > > const SVGRenderStyle& svgStyle = renderer->style().svgStyle(); > >- const Color& color = svgStyle.floodColor(); >+ Color color = renderer->style().colorByApplyingColorFilter(svgStyle.floodColor()); > float opacity = svgStyle.floodOpacity(); > > return FEFlood::create(filter, color, opacity); >diff --git a/Source/WebCore/svg/SVGFESpecularLightingElement.cpp b/Source/WebCore/svg/SVGFESpecularLightingElement.cpp >index 57510cffb011ffd5ed55412e3c37221640a9d54c..b0454c21209b463c759bd050721b3996c194a439 100644 >--- a/Source/WebCore/svg/SVGFESpecularLightingElement.cpp >+++ b/Source/WebCore/svg/SVGFESpecularLightingElement.cpp >@@ -120,7 +120,8 @@ bool SVGFESpecularLightingElement::setFilterEffectAttribute(FilterEffect* effect > if (attrName == SVGNames::lighting_colorAttr) { > RenderObject* renderer = this->renderer(); > ASSERT(renderer); >- return specularLighting->setLightingColor(renderer->style().svgStyle().lightingColor()); >+ Color color = renderer->style().colorByApplyingColorFilter(renderer->style().svgStyle().lightingColor()); >+ return specularLighting->setLightingColor(color); > } > if (attrName == SVGNames::surfaceScaleAttr) > return specularLighting->setSurfaceScale(surfaceScale()); >@@ -201,7 +202,7 @@ RefPtr<FilterEffect> SVGFESpecularLightingElement::build(SVGFilterBuilder* filte > if (!renderer) > return nullptr; > >- const Color& color = renderer->style().svgStyle().lightingColor(); >+ Color color = renderer->style().colorByApplyingColorFilter(renderer->style().svgStyle().lightingColor()); > > RefPtr<FilterEffect> effect = FESpecularLighting::create(filter, color, surfaceScale(), specularConstant(), specularExponent(), kernelUnitLengthX(), kernelUnitLengthY(), WTFMove(lightSource)); > effect->inputEffects().append(input1); >diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog >index c0b2e457f0f773484941def29ca239fc425e2832..fd3ed7169912a090278f114d18724f311a2ed52b 100644 >--- a/LayoutTests/ChangeLog >+++ b/LayoutTests/ChangeLog >@@ -1,3 +1,14 @@ >+2018-04-28 Simon Fraser <simon.fraser@apple.com> >+ >+ Fix color-filter to apply to SVG colors >+ https://bugs.webkit.org/show_bug.cgi?id=185113 >+ rdar://problem/39665082 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * css3/color-filters/svg/color-filter-inline-svg-expected.html: Added. >+ * css3/color-filters/svg/color-filter-inline-svg.html: Added. >+ > 2018-04-27 Ryan Haddad <ryanhaddad@apple.com> > > Unreviewed test gardening for iOS and macOS. >diff --git a/LayoutTests/css3/color-filters/svg/color-filter-inline-svg-expected.html b/LayoutTests/css3/color-filters/svg/color-filter-inline-svg-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..db5f65c4b7da502ae2b7bfcf4cd20cdd90693e3d >--- /dev/null >+++ b/LayoutTests/css3/color-filters/svg/color-filter-inline-svg-expected.html >@@ -0,0 +1,63 @@ >+<!DOCTYPE html> >+<html > >+ <head> >+ <title>CSS Test: color-filter reference</title> >+ <link rel="author" title="Apple" href="http://www.apple.com/"> >+ >+ <style type="text/css"> >+ body { >+ margin: 0; >+ } >+ </style> >+ </head> >+<body> >+ >+<svg viewBox="0 0 800 600" style="width: 800px; height: 600px"> >+ <defs> >+ <radialGradient id="grad"> >+ <stop offset="0" stop-color="cyan" /> >+ <stop offset="0.5" stop-color="green" /> >+ <stop offset="0.75" stop-color="blue" /> >+ </radialGradient> >+ >+ <filter id="flood" filterUnits="objectBoundingBox" x="0" y="0" width="100%" height="100%"> >+ <feFlood flood-color="green" /> >+ </filter> >+ >+ <filter id="diffuse-light" filterUnits="objectBoundingBox" x="0" y="0" width="100%" height="100%"> >+ <feDiffuseLighting lighting-color="green"> >+ <feDistantLight azimuth="100" elevation="100"/> >+ </feDiffuseLighting> >+ </filter> >+ >+ <filter id="specular-light" filterUnits="objectBoundingBox" x="0" y="0" width="100%" height="100%"> >+ <feSpecularLighting surfaceScale="2" specularExponent="2" specularConstant="2" lighting-color="green"> >+ <fePointLight x="20" y="20" z="2"/> >+ </feSpecularLighting> >+ </filter> >+ >+ <filter id="shadow" x="0" y="0" width="160%" height="160%"> >+ <feDropShadow dx="50" dy="50" stdDeviation="0" flood-color="green" flood-opacity="1" /> >+ </filter> >+ >+ <pattern id="pattern" patternUnits="userSpaceOnUse" x="20" y="0" width="50" height="50"> >+ <rect x="5" y="5" width="30" height="30" fill="green"/> >+ </pattern> >+ </defs> >+ >+ <rect x="20" y="10" width="150" height="150" fill="url(#grad)" /> >+ >+ <rect x="200" y="10" width="150" height="150" fill="green" /> >+ <rect x="400" y="10" width="150" height="150" fill="green" stroke="blue" stroke-width="15" /> >+ >+ <rect x="20" y="200" width="150" height="150" filter="url(#flood)"/> >+ <rect x="200" y="200" width="150" height="150" filter="url(#diffuse-light)"/> >+ <rect x="400" y="200" width="150" height="150" filter="url(#specular-light)"/> >+ >+ <rect x="20" y="400" width="150" height="150" fill="url(#pattern)"/> >+ >+ <rect x="200" y="400" width="150" height="150" fill="gray" filter="url(#shadow)"/> >+</svg> >+ >+</body> >+</html> >diff --git a/LayoutTests/css3/color-filters/svg/color-filter-inline-svg.html b/LayoutTests/css3/color-filters/svg/color-filter-inline-svg.html >new file mode 100644 >index 0000000000000000000000000000000000000000..3654142fc2f6ff436c7065381ae0f764f5cbc032 >--- /dev/null >+++ b/LayoutTests/css3/color-filters/svg/color-filter-inline-svg.html >@@ -0,0 +1,69 @@ >+<!DOCTYPE html> >+<html > >+ <head> >+ <title>CSS Test: color-filter affects colors in inline SVG</title> >+ <link rel="author" title="Apple" href="http://www.apple.com/"> >+ <link rel="match" href="color-filter-inline-svg-expected.html"> >+ >+ <meta name="assert" content="color-filter affects colors in inline SVG"> >+ <style> >+ html { >+ color-filter: invert(); >+ } >+ >+ body { >+ margin: 0; >+ } >+ </style> >+ </head> >+<body> >+ >+<svg viewBox="0 0 800 600" style="width: 800px; height: 600px"> >+ <defs> >+ <radialGradient id="grad"> >+ <stop offset="0" stop-color="red" /> >+ <stop offset="0.5" stop-color="rgb(255, 128, 255)" /> >+ <stop offset="0.75" stop-color="yellow" /> >+ </radialGradient> >+ >+ <filter id="flood" filterUnits="objectBoundingBox" x="0" y="0" width="100%" height="100%"> >+ <feFlood flood-color="rgb(255, 128, 255)" /> >+ </filter> >+ >+ <filter id="diffuse-light" filterUnits="objectBoundingBox" x="0" y="0" width="100%" height="100%"> >+ <feDiffuseLighting lighting-color="rgb(255, 128, 255)"> >+ <feDistantLight azimuth="100" elevation="100"/> >+ </feDiffuseLighting> >+ </filter> >+ >+ <filter id="specular-light" filterUnits="objectBoundingBox" x="0" y="0" width="100%" height="100%"> >+ <feSpecularLighting surfaceScale="2" specularExponent="2" specularConstant="2" lighting-color="rgb(255, 128, 255)"> >+ <fePointLight x="20" y="20" z="2"/> >+ </feSpecularLighting> >+ </filter> >+ >+ <filter id="shadow" x="0" y="0" width="160%" height="160%"> >+ <feDropShadow dx="50" dy="50" stdDeviation="0" flood-color="rgb(255, 128, 255)" flood-opacity="1" /> >+ </filter> >+ >+ <pattern id="pattern" patternUnits="userSpaceOnUse" x="20" y="0" width="50" height="50"> >+ <rect x="5" y="5" width="30" height="30" fill="rgb(255, 128, 255)"/> >+ </pattern> >+ </defs> >+ >+ <rect x="20" y="10" width="150" height="150" fill="url(#grad)" /> >+ >+ <rect x="200" y="10" width="150" height="150" fill="rgb(255, 128, 255)" /> >+ <rect x="400" y="10" width="150" height="150" fill="rgb(255, 128, 255)" stroke="yellow" stroke-width="15" /> >+ >+ <rect x="20" y="200" width="150" height="150" filter="url(#flood)"/> >+ <rect x="200" y="200" width="150" height="150" filter="url(#diffuse-light)"/> >+ <rect x="400" y="200" width="150" height="150" filter="url(#specular-light)"/> >+ >+ <rect x="20" y="400" width="150" height="150" fill="url(#pattern)"/> >+ >+ <rect x="200" y="400" width="150" height="150" fill="gray" filter="url(#shadow)"/> >+</svg> >+ >+</body> >+</html>
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Flags:
dino
:
review+
ews-watchlist
:
commit-queue-
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 185113
:
339065
|
339066
|
339067
|
339069
| 339070 |
339071
|
339072
|
339073
|
339074