2011-02-25 Renata Hodovan <reni@webkit.org>
authorreni@webkit.org <reni@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 25 Feb 2011 08:30:27 +0000 (08:30 +0000)
committerreni@webkit.org <reni@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 25 Feb 2011 08:30:27 +0000 (08:30 +0000)
        Reviewed by Andreas Kling.

        FEBlendElement changes doesn't require relayout
        https://bugs.webkit.org/show_bug.cgi?id=55138

        When the FEBlendElement receives an update message but the given value remains the same we don't need
        to relayout the filter.

        No new tests are needed because this modificiation is covered by the dynamic update tests of FEBlend.

        * platform/graphics/filters/FEBlend.cpp:
        (WebCore::FEBlend::setBlendMode):
        * platform/graphics/filters/FEBlend.h:
        * svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::setFilterEffectAttribute):
        (WebCore::SVGFEBlendElement::svgAttributeChanged):
        (WebCore::SVGFEBlendElement::synchronizeProperty):
        * svg/SVGFEBlendElement.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@79664 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/platform/graphics/filters/FEBlend.cpp
Source/WebCore/platform/graphics/filters/FEBlend.h
Source/WebCore/svg/SVGFEBlendElement.cpp
Source/WebCore/svg/SVGFEBlendElement.h

index b784f6e..ed26228 100644 (file)
@@ -1,3 +1,24 @@
+2011-02-25  Renata Hodovan  <reni@webkit.org>
+
+        Reviewed by Andreas Kling.
+
+        FEBlendElement changes doesn't require relayout
+        https://bugs.webkit.org/show_bug.cgi?id=55138
+
+        When the FEBlendElement receives an update message but the given value remains the same we don't need
+        to relayout the filter.
+
+        No new tests are needed because this modificiation is covered by the dynamic update tests of FEBlend.
+
+        * platform/graphics/filters/FEBlend.cpp:
+        (WebCore::FEBlend::setBlendMode):
+        * platform/graphics/filters/FEBlend.h:
+        * svg/SVGFEBlendElement.cpp:
+        (WebCore::SVGFEBlendElement::setFilterEffectAttribute):
+        (WebCore::SVGFEBlendElement::svgAttributeChanged):
+        (WebCore::SVGFEBlendElement::synchronizeProperty):
+        * svg/SVGFEBlendElement.h:
+
 2011-02-24  Daniel Bates  <dbates@rim.com>
 
         Reviewed by Antonio Gomes.
index ac68266..e5db03e 100644 (file)
@@ -53,9 +53,12 @@ BlendModeType FEBlend::blendMode() const
     return m_mode;
 }
 
-void FEBlend::setBlendMode(BlendModeType mode)
+bool FEBlend::setBlendMode(BlendModeType mode)
 {
+    if (m_mode == mode)
+        return false;
     m_mode = mode;
+    return true;
 }
 
 static unsigned char unknown(unsigned char, unsigned char, unsigned char, unsigned char)
index 4c59578..def33be 100644 (file)
@@ -43,7 +43,7 @@ public:
     static PassRefPtr<FEBlend> create(Filter*, BlendModeType);
 
     BlendModeType blendMode() const;
-    void setBlendMode(BlendModeType);
+    bool setBlendMode(BlendModeType);
 
     virtual void apply();
     virtual void dump();
index b0f580c..ff2f197 100644 (file)
@@ -68,12 +68,24 @@ void SVGFEBlendElement::parseMappedAttribute(Attribute* attr)
         SVGFilterPrimitiveStandardAttributes::parseMappedAttribute(attr);
 }
 
+bool SVGFEBlendElement::setFilterEffectAttribute(FilterEffect* effect, const QualifiedName& attrName)
+{
+    FEBlend* blend = static_cast<FEBlend*>(effect);
+    if (attrName == SVGNames::modeAttr)
+        return blend->setBlendMode(static_cast<BlendModeType>(mode()));
+
+    ASSERT_NOT_REACHED();
+    return false;
+}
+
 void SVGFEBlendElement::svgAttributeChanged(const QualifiedName& attrName)
 {
     SVGFilterPrimitiveStandardAttributes::svgAttributeChanged(attrName);
 
-    if (attrName == SVGNames::modeAttr
-        || attrName == SVGNames::inAttr
+    if (attrName == SVGNames::modeAttr)
+        primitiveAttributeChanged(attrName);
+
+    if (attrName == SVGNames::inAttr
         || attrName == SVGNames::in2Attr)
         invalidate();
 }
index c579ac5..b429d4b 100644 (file)
@@ -36,6 +36,7 @@ private:
     SVGFEBlendElement(const QualifiedName&, Document*);
 
     virtual void parseMappedAttribute(Attribute*);
+    virtual bool setFilterEffectAttribute(FilterEffect*, const QualifiedName& attrName);
     virtual void svgAttributeChanged(const QualifiedName&);
     virtual void synchronizeProperty(const QualifiedName&);
     virtual void fillAttributeToPropertyTypeMap();