2011-02-28 Renata Hodovan <reni@webkit.org>
authorreni@webkit.org <reni@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 28 Feb 2011 14:03:06 +0000 (14:03 +0000)
committerreni@webkit.org <reni@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 28 Feb 2011 14:03:06 +0000 (14:03 +0000)
        Reviewed by Andreas Kling.

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

        When the FECompositeElement 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 modification is covered by the dynamic update tests of FEComposite.

        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::setOperation):
        (WebCore::FEComposite::setK1):
        (WebCore::FEComposite::setK2):
        (WebCore::FEComposite::setK3):
        (WebCore::FEComposite::setK4):
        * platform/graphics/filters/FEComposite.h:
        * svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::setFilterEffectAttribute):
        (WebCore::SVGFECompositeElement::svgAttributeChanged):
        * svg/SVGFECompositeElement.h:

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

Source/WebCore/ChangeLog
Source/WebCore/platform/graphics/filters/FEComposite.cpp
Source/WebCore/platform/graphics/filters/FEComposite.h
Source/WebCore/svg/SVGFECompositeElement.cpp
Source/WebCore/svg/SVGFECompositeElement.h

index 450332e..536f9cf 100644 (file)
@@ -1,3 +1,27 @@
+2011-02-28  Renata Hodovan  <reni@webkit.org>
+
+        Reviewed by Andreas Kling.
+
+        FECompositeElement changes doesn't require relayout.
+        https://bugs.webkit.org/show_bug.cgi?id=55367
+
+        When the FECompositeElement 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 modification is covered by the dynamic update tests of FEComposite.
+
+        * platform/graphics/filters/FEComposite.cpp:
+        (WebCore::FEComposite::setOperation):
+        (WebCore::FEComposite::setK1):
+        (WebCore::FEComposite::setK2):
+        (WebCore::FEComposite::setK3):
+        (WebCore::FEComposite::setK4):
+        * platform/graphics/filters/FEComposite.h:
+        * svg/SVGFECompositeElement.cpp:
+        (WebCore::SVGFECompositeElement::setFilterEffectAttribute):
+        (WebCore::SVGFECompositeElement::svgAttributeChanged):
+        * svg/SVGFECompositeElement.h:
+
 2011-02-28  Andreas Kling  <kling@webkit.org>
 
         Reviewed by Kenneth Rohde Christiansen.
index bc7fa80..eead000 100644 (file)
@@ -55,9 +55,12 @@ CompositeOperationType FEComposite::operation() const
     return m_type;
 }
 
-void FEComposite::setOperation(CompositeOperationType type)
+bool FEComposite::setOperation(CompositeOperationType type)
 {
+    if (m_type == type)
+        return false;
     m_type = type;
+    return true;
 }
 
 float FEComposite::k1() const
@@ -65,9 +68,12 @@ float FEComposite::k1() const
     return m_k1;
 }
 
-void FEComposite::setK1(float k1)
+bool FEComposite::setK1(float k1)
 {
+    if (m_k1 == k1)
+        return false;
     m_k1 = k1;
+    return true;
 }
 
 float FEComposite::k2() const
@@ -75,9 +81,12 @@ float FEComposite::k2() const
     return m_k2;
 }
 
-void FEComposite::setK2(float k2)
+bool FEComposite::setK2(float k2)
 {
+    if (m_k2 == k2)
+        return false;
     m_k2 = k2;
+    return true;
 }
 
 float FEComposite::k3() const
@@ -85,9 +94,12 @@ float FEComposite::k3() const
     return m_k3;
 }
 
-void FEComposite::setK3(float k3)
+bool FEComposite::setK3(float k3)
 {
+    if (m_k3 == k3)
+        return false;
     m_k3 = k3;
+    return true;
 }
 
 float FEComposite::k4() const
@@ -95,9 +107,12 @@ float FEComposite::k4() const
     return m_k4;
 }
 
-void FEComposite::setK4(float k4)
+bool FEComposite::setK4(float k4)
 {
+    if (m_k4 == k4)
+        return false;
     m_k4 = k4;
+    return true;
 }
 
 template <int b1, int b2, int b3, int b4>
index b846902..481c6a7 100644 (file)
@@ -45,19 +45,19 @@ public:
     static PassRefPtr<FEComposite> create(Filter*, const CompositeOperationType&, float, float, float, float);
 
     CompositeOperationType operation() const;
-    void setOperation(CompositeOperationType);
+    bool setOperation(CompositeOperationType);
 
     float k1() const;
-    void setK1(float);
+    bool setK1(float);
 
     float k2() const;
-    void setK2(float);
+    bool setK2(float);
 
     float k3() const;
-    void setK3(float);
+    bool setK3(float);
 
     float k4() const;
-    void setK4(float);
+    bool setK4(float);
 
     virtual void apply();
     virtual void dump();
index af738a9..1c40921 100644 (file)
@@ -82,17 +82,38 @@ void SVGFECompositeElement::parseMappedAttribute(Attribute* attr)
         SVGFilterPrimitiveStandardAttributes::parseMappedAttribute(attr);
 }
 
+bool SVGFECompositeElement::setFilterEffectAttribute(FilterEffect* effect, const QualifiedName& attrName)
+{
+    FEComposite* composite = static_cast<FEComposite*>(effect);
+    if (attrName == SVGNames::operatorAttr)
+        return composite->setOperation(static_cast<CompositeOperationType>(_operator()));
+    if (attrName == SVGNames::k1Attr)
+        return composite->setK1(k1());
+    if (attrName == SVGNames::k2Attr)
+        return composite->setK2(k2());
+    if (attrName == SVGNames::k3Attr)
+        return composite->setK3(k3());
+    if (attrName == SVGNames::k4Attr)
+        return composite->setK4(k4());
+
+    ASSERT_NOT_REACHED();
+    return false;
+}
+
+
 void SVGFECompositeElement::svgAttributeChanged(const QualifiedName& attrName)
 {
     SVGFilterPrimitiveStandardAttributes::svgAttributeChanged(attrName);
 
-    if (attrName == SVGNames::inAttr
-        || attrName == SVGNames::in2Attr
-        || attrName == SVGNames::operatorAttr
+    if (attrName == SVGNames::operatorAttr
         || attrName == SVGNames::k1Attr
         || attrName == SVGNames::k2Attr
         || attrName == SVGNames::k3Attr
         || attrName == SVGNames::k4Attr)
+        primitiveAttributeChanged(attrName);
+
+    if (attrName == SVGNames::inAttr
+        || attrName == SVGNames::in2Attr)
         invalidate();
 }
 
index a4a9617..6557d0b 100644 (file)
@@ -37,6 +37,7 @@ private:
     SVGFECompositeElement(const QualifiedName&, Document*);
 
     virtual void parseMappedAttribute(Attribute*);
+    virtual bool setFilterEffectAttribute(FilterEffect*, const QualifiedName&);
     virtual void svgAttributeChanged(const QualifiedName&);
     virtual void synchronizeProperty(const QualifiedName&);
     virtual void fillAttributeToPropertyTypeMap();