Changeset 66823 in webkit


Ignore:
Timestamp:
Sep 6, 2010 6:26:29 AM (14 years ago)
Author:
zherczeg@webkit.org
Message:

An individual renderer should be assigned to each SVGFE*Element class
https://bugs.webkit.org/show_bug.cgi?id=43954

Reviewed by Dirk Schulze.

WebCore:

RenderSVGResourceFilterPrimitive renderer is added to
the project, and assigned to each object, which class is
derived from SVGFilterPrimitiveStandardAttributes. The patch
mainly contains build system changes, and it fixes one layout
test in svg/dynamic-updates.

  • Android.mk:
  • CMakeLists.txt:
  • GNUmakefile.am:
  • WebCore.gypi:
  • WebCore.pro:
  • WebCore.vcproj/WebCore.vcproj:
  • WebCore.xcodeproj/project.pbxproj:
  • rendering/RenderObject.h:

(WebCore::RenderObject::isSVGResourceFilterPrimitive):

  • rendering/RenderSVGResourceFilterPrimitive.cpp: Added.

(WebCore::RenderSVGResourceFilterPrimitive::RenderSVGResourceFilterPrimitive):

  • rendering/RenderSVGResourceFilterPrimitive.h: Added.

(WebCore::RenderSVGResourceFilterPrimitive::isSVGResourceFilterPrimitive):

  • rendering/SVGRenderTreeAsText.cpp:

(WebCore::writeSVGContainer):

  • svg/SVGFEDiffuseLightingElement.cpp:

(WebCore::SVGFEDiffuseLightingElement::svgAttributeChanged):

  • svg/SVGFELightElement.cpp:

(WebCore::SVGFELightElement::svgAttributeChanged):
(WebCore::SVGFELightElement::childrenChanged):

  • svg/SVGFEOffsetElement.cpp:

(WebCore::SVGFEOffsetElement::svgAttributeChanged):

  • svg/SVGFilterElement.h:
  • svg/SVGFilterPrimitiveStandardAttributes.cpp:

(WebCore::SVGFilterPrimitiveStandardAttributes::svgAttributeChanged):
(WebCore::SVGFilterPrimitiveStandardAttributes::childrenChanged):
(WebCore::SVGFilterPrimitiveStandardAttributes::createRenderer):

  • svg/SVGFilterPrimitiveStandardAttributes.h:

(WebCore::SVGFilterPrimitiveStandardAttributes::invalidate):

LayoutTests:

The layout test below is fixed by this patch.

  • platform/mac/svg/dynamic-updates/SVGFEDiffuseLightingElement-lighting-color-css-prop-expected.checksum:
  • platform/mac/svg/dynamic-updates/SVGFEDiffuseLightingElement-lighting-color-css-prop-expected.png:
Location:
trunk
Files:
2 added
19 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r66820 r66823  
     12010-09-06  Zoltan Herczeg  <zherczeg@webkit.org>
     2
     3        Reviewed by Dirk Schulze.
     4
     5        An individual renderer should be assigned to each SVGFE*Element class
     6        https://bugs.webkit.org/show_bug.cgi?id=43954
     7
     8        The layout test below is fixed by this patch.
     9
     10        * platform/mac/svg/dynamic-updates/SVGFEDiffuseLightingElement-lighting-color-css-prop-expected.checksum:
     11        * platform/mac/svg/dynamic-updates/SVGFEDiffuseLightingElement-lighting-color-css-prop-expected.png:
     12
    1132010-08-26  Jeremy Orlow  <jorlow@chromium.org>
    214
  • trunk/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEDiffuseLightingElement-lighting-color-css-prop-expected.checksum

    r65138 r66823  
    1 d53a2e4153d3748984be458e53e813f2
     1b843a316e79ec04f5744a15d667492da
  • trunk/WebCore/Android.mk

    r66365 r66823  
    658658        rendering/RenderSVGResourceContainer.cpp \
    659659        rendering/RenderSVGResourceFilter.cpp \
     660        rendering/RenderSVGResourceFilterPrimitive.cpp \
    660661        rendering/RenderSVGResourceGradient.cpp \
    661662        rendering/RenderSVGResourceLinearGradient.cpp \
  • trunk/WebCore/CMakeLists.txt

    r66587 r66823  
    16161616        rendering/RenderSVGResourceContainer.cpp
    16171617        rendering/RenderSVGResourceFilter.cpp
     1618        rendering/RenderSVGResourceFilterPrimitive.cpp
    16181619        rendering/RenderSVGResourceGradient.cpp
    16191620        rendering/RenderSVGResourceLinearGradient.cpp
  • trunk/WebCore/ChangeLog

    r66822 r66823  
     12010-09-06  Zoltan Herczeg  <zherczeg@webkit.org>
     2
     3        Reviewed by Dirk Schulze.
     4
     5        An individual renderer should be assigned to each SVGFE*Element class
     6        https://bugs.webkit.org/show_bug.cgi?id=43954
     7
     8        RenderSVGResourceFilterPrimitive renderer is added to
     9        the project, and assigned to each object, which class is
     10        derived from SVGFilterPrimitiveStandardAttributes. The patch
     11        mainly contains build system changes, and it fixes one layout
     12        test in svg/dynamic-updates.
     13
     14        * Android.mk:
     15        * CMakeLists.txt:
     16        * GNUmakefile.am:
     17        * WebCore.gypi:
     18        * WebCore.pro:
     19        * WebCore.vcproj/WebCore.vcproj:
     20        * WebCore.xcodeproj/project.pbxproj:
     21        * rendering/RenderObject.h:
     22        (WebCore::RenderObject::isSVGResourceFilterPrimitive):
     23        * rendering/RenderSVGResourceFilterPrimitive.cpp: Added.
     24        (WebCore::RenderSVGResourceFilterPrimitive::RenderSVGResourceFilterPrimitive):
     25        * rendering/RenderSVGResourceFilterPrimitive.h: Added.
     26        (WebCore::RenderSVGResourceFilterPrimitive::isSVGResourceFilterPrimitive):
     27        * rendering/SVGRenderTreeAsText.cpp:
     28        (WebCore::writeSVGContainer):
     29        * svg/SVGFEDiffuseLightingElement.cpp:
     30        (WebCore::SVGFEDiffuseLightingElement::svgAttributeChanged):
     31        * svg/SVGFELightElement.cpp:
     32        (WebCore::SVGFELightElement::svgAttributeChanged):
     33        (WebCore::SVGFELightElement::childrenChanged):
     34        * svg/SVGFEOffsetElement.cpp:
     35        (WebCore::SVGFEOffsetElement::svgAttributeChanged):
     36        * svg/SVGFilterElement.h:
     37        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
     38        (WebCore::SVGFilterPrimitiveStandardAttributes::svgAttributeChanged):
     39        (WebCore::SVGFilterPrimitiveStandardAttributes::childrenChanged):
     40        (WebCore::SVGFilterPrimitiveStandardAttributes::createRenderer):
     41        * svg/SVGFilterPrimitiveStandardAttributes.h:
     42        (WebCore::SVGFilterPrimitiveStandardAttributes::invalidate):
     43
    1442010-09-06  Gyuyoung Kim  <gyuyoung.kim@samsung.com>
    245
  • trunk/WebCore/GNUmakefile.am

    r66774 r66823  
    39043904        WebCore/rendering/RenderSVGResourceFilter.cpp \
    39053905        WebCore/rendering/RenderSVGResourceFilter.h \
     3906        WebCore/rendering/RenderSVGResourceFilterPrimitive.cpp \
     3907        WebCore/rendering/RenderSVGResourceFilterPrimitive.h \
    39063908        WebCore/rendering/RenderSVGResourceGradient.cpp \
    39073909        WebCore/rendering/RenderSVGResourceGradient.h \
  • trunk/WebCore/WebCore.gypi

    r66783 r66823  
    34633463            'rendering/RenderSVGResourceFilter.cpp',
    34643464            'rendering/RenderSVGResourceFilter.h',
     3465            'rendering/RenderSVGResourceFilterPrimitive.cpp',
     3466            'rendering/RenderSVGResourceFilterPrimitive.h',
    34653467            'rendering/RenderSVGResourceGradient.cpp',
    34663468            'rendering/RenderSVGResourceGradient.h',
  • trunk/WebCore/WebCore.pro

    r66774 r66823  
    19071907    rendering/RenderSVGResourceContainer.h \
    19081908    rendering/RenderSVGResourceFilter.h \
     1909    rendering/RenderSVGResourceFilterPrimitive.h \
    19091910    rendering/RenderSVGResourceGradient.h \
    19101911    rendering/RenderSVGResourceLinearGradient.h \
     
    30533054        rendering/RenderSVGResourceContainer.cpp \
    30543055        rendering/RenderSVGResourceFilter.cpp \
     3056        rendering/RenderSVGResourceFilterPrimitive.cpp \
    30553057        rendering/RenderSVGResourceGradient.cpp \
    30563058        rendering/RenderSVGResourceLinearGradient.cpp \
  • trunk/WebCore/WebCore.vcproj/WebCore.vcproj

    r66774 r66823  
    3095830958                        </File>
    3095930959                        <File
     30960                                RelativePath="..\rendering\RenderSVGResourceFilterPrimitive.cpp"
     30961                                >
     30962                                <FileConfiguration
     30963                                        Name="Debug|Win32"
     30964                                        ExcludedFromBuild="true"
     30965                                        >
     30966                                        <Tool
     30967                                                Name="VCCLCompilerTool"
     30968                                        />
     30969                                </FileConfiguration>
     30970                                <FileConfiguration
     30971                                        Name="Release|Win32"
     30972                                        ExcludedFromBuild="true"
     30973                                        >
     30974                                        <Tool
     30975                                                Name="VCCLCompilerTool"
     30976                                        />
     30977                                </FileConfiguration>
     30978                                <FileConfiguration
     30979                                        Name="Debug_Internal|Win32"
     30980                                        ExcludedFromBuild="true"
     30981                                        >
     30982                                        <Tool
     30983                                                Name="VCCLCompilerTool"
     30984                                        />
     30985                                </FileConfiguration>
     30986                                <FileConfiguration
     30987                                        Name="Debug_Cairo|Win32"
     30988                                        ExcludedFromBuild="true"
     30989                                        >
     30990                                        <Tool
     30991                                                Name="VCCLCompilerTool"
     30992                                        />
     30993                                </FileConfiguration>
     30994                                <FileConfiguration
     30995                                        Name="Release_Cairo|Win32"
     30996                                        ExcludedFromBuild="true"
     30997                                        >
     30998                                        <Tool
     30999                                                Name="VCCLCompilerTool"
     31000                                        />
     31001                                </FileConfiguration>
     31002                                <FileConfiguration
     31003                                        Name="Debug_All|Win32"
     31004                                        ExcludedFromBuild="true"
     31005                                        >
     31006                                        <Tool
     31007                                                Name="VCCLCompilerTool"
     31008                                        />
     31009                                </FileConfiguration>
     31010                        </File>
     31011                        <File
     31012                                RelativePath="..\rendering\RenderSVGResourceFilterPrimitive.h"
     31013                                >
     31014                        </File>
     31015                        <File
    3096031016                                RelativePath="..\rendering\RenderSVGResourceGradient.cpp"
    3096131017                                >
  • trunk/WebCore/WebCore.xcodeproj/project.pbxproj

    r66783 r66823  
    325325                1921327411C0E6BB00456238 /* SVGFEConvolveMatrixElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1921327111C0E6BB00456238 /* SVGFEConvolveMatrixElement.cpp */; };
    326326                1921327511C0E6BB00456238 /* SVGFEConvolveMatrixElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 1921327211C0E6BB00456238 /* SVGFEConvolveMatrixElement.h */; };
     327                19423B501234E86B00D1EE9E /* RenderSVGResourceFilterPrimitive.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 19423B4E1234E86B00D1EE9E /* RenderSVGResourceFilterPrimitive.cpp */; };
     328                19423B511234E86B00D1EE9E /* RenderSVGResourceFilterPrimitive.h in Headers */ = {isa = PBXBuildFile; fileRef = 19423B4F1234E86B00D1EE9E /* RenderSVGResourceFilterPrimitive.h */; };
    327329                19BFF64B11C0F2AC00B8C04D /* DOMSVGFEConvolveMatrixElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 19BFF64611C0F2AC00B8C04D /* DOMSVGFEConvolveMatrixElement.h */; };
    328330                19BFF64C11C0F2AC00B8C04D /* DOMSVGFEConvolveMatrixElement.mm in Sources */ = {isa = PBXBuildFile; fileRef = 19BFF64711C0F2AC00B8C04D /* DOMSVGFEConvolveMatrixElement.mm */; };
     
    61376139                1921327211C0E6BB00456238 /* SVGFEConvolveMatrixElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGFEConvolveMatrixElement.h; sourceTree = "<group>"; };
    61386140                1921327311C0E6BB00456238 /* SVGFEConvolveMatrixElement.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SVGFEConvolveMatrixElement.idl; sourceTree = "<group>"; };
     6141                19423B4E1234E86B00D1EE9E /* RenderSVGResourceFilterPrimitive.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGResourceFilterPrimitive.cpp; sourceTree = "<group>"; };
     6142                19423B4F1234E86B00D1EE9E /* RenderSVGResourceFilterPrimitive.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGResourceFilterPrimitive.h; sourceTree = "<group>"; };
    61396143                19BFF64611C0F2AC00B8C04D /* DOMSVGFEConvolveMatrixElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMSVGFEConvolveMatrixElement.h; sourceTree = "<group>"; };
    61406144                19BFF64711C0F2AC00B8C04D /* DOMSVGFEConvolveMatrixElement.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DOMSVGFEConvolveMatrixElement.mm; sourceTree = "<group>"; };
     
    1724617250                                841FDC241178C9BE00F8AC9B /* RenderSVGResourceFilter.cpp */,
    1724717251                                841FDC251178C9BE00F8AC9B /* RenderSVGResourceFilter.h */,
     17252                                19423B4E1234E86B00D1EE9E /* RenderSVGResourceFilterPrimitive.cpp */,
     17253                                19423B4F1234E86B00D1EE9E /* RenderSVGResourceFilterPrimitive.h */,
    1724817254                                08C34AF11179C056002D7456 /* RenderSVGResourceGradient.cpp */,
    1724917255                                08C34AF21179C057002D7456 /* RenderSVGResourceGradient.h */,
     
    1972419730                                08082373117987C100241DE8 /* RenderSVGResourceContainer.h in Headers */,
    1972519731                                841FDC271178C9BE00F8AC9B /* RenderSVGResourceFilter.h in Headers */,
     19732                                19423B511234E86B00D1EE9E /* RenderSVGResourceFilterPrimitive.h in Headers */,
    1972619733                                08C34AF61179C057002D7456 /* RenderSVGResourceGradient.h in Headers */,
    1972719734                                08C34AF81179C057002D7456 /* RenderSVGResourceLinearGradient.h in Headers */,
     
    2227822285                                086A400611F6D6B7002CEC53 /* RenderSVGResourceContainer.cpp in Sources */,
    2227922286                                841FDC261178C9BE00F8AC9B /* RenderSVGResourceFilter.cpp in Sources */,
     22287                                19423B501234E86B00D1EE9E /* RenderSVGResourceFilterPrimitive.cpp in Sources */,
    2228022288                                08C34AF51179C057002D7456 /* RenderSVGResourceGradient.cpp in Sources */,
    2228122289                                08C34AF71179C057002D7456 /* RenderSVGResourceLinearGradient.cpp in Sources */,
  • trunk/WebCore/rendering/RenderObject.h

    r66776 r66823  
    321321    virtual bool isSVGForeignObject() const { return false; }
    322322    virtual bool isSVGResourceContainer() const { return false; }
     323    virtual bool isSVGResourceFilterPrimitive() const { return false; }
    323324    virtual bool isSVGShadowTreeRootContainer() const { return false; }
    324325
  • trunk/WebCore/rendering/SVGRenderTreeAsText.cpp

    r65116 r66823  
    677677void writeSVGContainer(TextStream& ts, const RenderObject& container, int indent)
    678678{
     679    // Currently RenderSVGResourceFilterPrimitive has no meaningful output.
     680    if (container.isSVGResourceFilterPrimitive())
     681        return;
    679682    writeStandardPrefix(ts, container, indent);
    680683    writePositionAndStyle(ts, container);
  • trunk/WebCore/svg/SVGFEDiffuseLightingElement.cpp

    r66498 r66823  
    7676        || attrName == SVGNames::kernelUnitLengthAttr
    7777        || attrName == SVGNames::lighting_colorAttr)
    78         SVGFilterElement::invalidateFilter(this);
     78        invalidate();
    7979}
    8080
  • trunk/WebCore/svg/SVGFELightElement.cpp

    r66397 r66823  
    2626
    2727#include "Attribute.h"
     28#include "RenderSVGResource.h"
    2829#include "SVGFilterElement.h"
    2930#include "SVGNames.h"
     
    7778        || attrName == SVGNames::pointsAtZAttr
    7879        || attrName == SVGNames::specularExponentAttr
    79         || attrName == SVGNames::limitingConeAngleAttr)
    80         SVGFilterElement::invalidateFilter(this);
     80        || attrName == SVGNames::limitingConeAngleAttr) {
     81        if (Node* parentNode = parent()) {
     82            RenderObject* renderer = parentNode->renderer();
     83            if (renderer && renderer->isSVGResourceFilterPrimitive())
     84                RenderSVGResource::markForLayoutAndParentResourceInvalidation(renderer);
     85        }
     86    }
    8187}
    8288
     
    125131    SVGElement::childrenChanged(changedByParser, beforeChange, afterChange, childCountDelta);
    126132
    127     if (!changedByParser)
    128         SVGFilterElement::invalidateFilter(this);
     133    if (!changedByParser) {
     134        if (Node* parentNode = parent()) {
     135            RenderObject* renderer = parentNode->renderer();
     136            if (renderer && renderer->isSVGResourceFilterPrimitive())
     137                RenderSVGResource::markForLayoutAndParentResourceInvalidation(renderer);
     138        }
     139    }
    129140}
    130141
  • trunk/WebCore/svg/SVGFEOffsetElement.cpp

    r66498 r66823  
    5858        || attrName == SVGNames::dxAttr
    5959        || attrName == SVGNames::dyAttr)
    60         SVGFilterElement::invalidateFilter(this);
     60        invalidate();
    6161}
    6262
  • trunk/WebCore/svg/SVGFilterElement.h

    r66397 r66823  
    4646    FloatRect filterBoundingBox(const FloatRect&) const;
    4747
    48     static void invalidateFilter(SVGElement* element)
    49     {
    50         ASSERT(element);
    51         if (!element->inDocument())
    52             return;
    53         Node* parent = element->parentNode();
    54         while (parent && !parent->hasTagName(SVGNames::filterTag))
    55             parent = parent->parentNode();
    56 
    57         if (!parent)
    58             return;
    59 
    60         if (RenderObject* object = parent->renderer())
    61             object->setNeedsLayout(true);
    62     }
    63 
    6448private:
    6549    SVGFilterElement(const QualifiedName&, Document*);
  • trunk/WebCore/svg/SVGFilterPrimitiveStandardAttributes.cpp

    r66397 r66823  
    2727#include "Attribute.h"
    2828#include "FilterEffect.h"
     29#include "RenderSVGResourceFilterPrimitive.h"
    2930#include "SVGLength.h"
    3031#include "SVGNames.h"
     
    7172        || attrName == SVGNames::heightAttr
    7273        || attrName == SVGNames::resultAttr)
    73         SVGFilterElement::invalidateFilter(this);
     74        invalidate();
    7475}
    7576
     
    104105
    105106    if (!changedByParser)
    106         SVGFilterElement::invalidateFilter(this);
     107        invalidate();
    107108}
    108109
     
    137138}
    138139
     140RenderObject* SVGFilterPrimitiveStandardAttributes::createRenderer(RenderArena* arena, RenderStyle*)
     141{
     142    return new (arena) RenderSVGResourceFilterPrimitive(this);
     143}
     144
    139145}
    140146
  • trunk/WebCore/svg/SVGFilterPrimitiveStandardAttributes.h

    r66397 r66823  
    2424#if ENABLE(SVG) && ENABLE(FILTERS)
    2525#include "FilterEffect.h"
     26#include "RenderSVGResource.h"
    2627#include "SVGFilterBuilder.h"
    2728#include "SVGFilterElement.h"
     
    4849    virtual void childrenChanged(bool changedByParser = false, Node* beforeChange = 0, Node* afterChange = 0, int childCountDelta = 0);
    4950
     51protected:
     52    inline void invalidate()
     53    {
     54        if (RenderObject* primitiveRenderer = renderer())
     55            RenderSVGResource::markForLayoutAndParentResourceInvalidation(primitiveRenderer);
     56    }
     57
    5058private:
    5159    virtual bool isFilterEffect() const { return true; }
    5260
    53     virtual bool rendererIsNeeded(RenderStyle*) { return false; }
     61    virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
    5462
    5563    DECLARE_ANIMATED_PROPERTY(SVGFilterPrimitiveStandardAttributes, SVGNames::xAttr, SVGLength, X, x)
Note: See TracChangeset for help on using the changeset viewer.