Reviewed by Oliver.
authoroliver <oliver@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 12 Oct 2007 13:47:26 +0000 (13:47 +0000)
committeroliver <oliver@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 12 Oct 2007 13:47:26 +0000 (13:47 +0000)
Large SVG filter rework. Bring it back in a useable state.

Fixes: http://bugs.webkit.org/show_bug.cgi?id=5527 (Filters need subregion support)
Fixes: http://bugs.webkit.org/show_bug.cgi?id=5579 (WebKit+SVG renders full-filters-example incorrectly)
Fixes: http://bugs.webkit.org/show_bug.cgi?id=5976 (filterUnits="userSpaceOnUse" is broken (breaking feTile test case))
Fixes: http://bugs.webkit.org/show_bug.cgi?id=12064 (Need function for manual style-resolution for things like gradient stops)

filters-blend-01-b.svg & filters-example-01-b.svg & filters-displace-01-b.svg & filters-diffuse-01-f.svg are fixed now.

In detail:
- flood-color & flood-opacity have been incorrectly resolved on the <feBlend> parent element!
- sizing of filter region was truncated in some cases, as the bbox was used to resolve the needed filter region instead of the filter rect
- add subregion support to all filter primitives (primitiveUnits & filterUnits handled in all cases)
- WKDisplacmentMap.cikernel incorrectly flipped the y-axis.
- Correctly specify default values for all filter primitives in ksvg2/svg!
- Initialize all variables of the SVGFE* classes in platform/graphics/svg/filters.
- Fix 'flood-color' initial value (was set to the _stop_ color initial value)
    -> both initial values were pointing to 'black' though, so it was no visible problem.
- Parse 'lighting-color' css property, no more hacking in SVGFEDiffuseLighting.
    -> Correct it's initial from black to white value fixes SVG lighting filters!
- Add diffuseConstant support to feDiffuseLighting filter.
- Centralize manual style resolution (needed for stop-color, flood-color & flood-opacity, lighting-color)

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

136 files changed:
LayoutTests/ChangeLog
LayoutTests/svg/batik/text/textEffect-expected.checksum
LayoutTests/svg/batik/text/textEffect-expected.png
LayoutTests/svg/batik/text/textEffect-expected.txt
LayoutTests/svg/batik/text/textEffect3-expected.checksum
LayoutTests/svg/batik/text/textEffect3-expected.png
LayoutTests/svg/batik/text/textEffect3-expected.txt
LayoutTests/svg/batik/text/textFeatures-expected.checksum
LayoutTests/svg/batik/text/textFeatures-expected.png
LayoutTests/svg/batik/text/textFeatures-expected.txt
LayoutTests/svg/batik/text/textPosition-expected.checksum
LayoutTests/svg/batik/text/textPosition-expected.png
LayoutTests/svg/batik/text/textPosition-expected.txt
LayoutTests/svg/batik/text/textPosition2-expected.checksum
LayoutTests/svg/batik/text/textPosition2-expected.png
LayoutTests/svg/batik/text/textPosition2-expected.txt
LayoutTests/svg/batik/text/textProperties-expected.checksum
LayoutTests/svg/batik/text/textProperties-expected.png
WebCore/ChangeLog
WebCore/ksvg2/css/SVGCSSParser.cpp
WebCore/ksvg2/css/SVGCSSStyleSelector.cpp
WebCore/ksvg2/css/SVGRenderStyle.h
WebCore/ksvg2/css/SVGRenderStyleDefs.cpp
WebCore/ksvg2/css/SVGRenderStyleDefs.h
WebCore/ksvg2/svg/SVGComponentTransferFunctionElement.cpp
WebCore/ksvg2/svg/SVGFEBlendElement.cpp
WebCore/ksvg2/svg/SVGFEBlendElement.h
WebCore/ksvg2/svg/SVGFEColorMatrixElement.cpp
WebCore/ksvg2/svg/SVGFEColorMatrixElement.h
WebCore/ksvg2/svg/SVGFEComponentTransferElement.cpp
WebCore/ksvg2/svg/SVGFEComponentTransferElement.h
WebCore/ksvg2/svg/SVGFECompositeElement.cpp
WebCore/ksvg2/svg/SVGFECompositeElement.h
WebCore/ksvg2/svg/SVGFEDiffuseLightingElement.cpp
WebCore/ksvg2/svg/SVGFEDiffuseLightingElement.h
WebCore/ksvg2/svg/SVGFEDisplacementMapElement.cpp
WebCore/ksvg2/svg/SVGFEDisplacementMapElement.h
WebCore/ksvg2/svg/SVGFEDistantLightElement.cpp
WebCore/ksvg2/svg/SVGFEDistantLightElement.h
WebCore/ksvg2/svg/SVGFEFloodElement.cpp
WebCore/ksvg2/svg/SVGFEFloodElement.h
WebCore/ksvg2/svg/SVGFEFuncAElement.cpp
WebCore/ksvg2/svg/SVGFEFuncAElement.h
WebCore/ksvg2/svg/SVGFEFuncBElement.cpp
WebCore/ksvg2/svg/SVGFEFuncBElement.h
WebCore/ksvg2/svg/SVGFEFuncGElement.cpp
WebCore/ksvg2/svg/SVGFEFuncGElement.h
WebCore/ksvg2/svg/SVGFEFuncRElement.cpp
WebCore/ksvg2/svg/SVGFEFuncRElement.h
WebCore/ksvg2/svg/SVGFEGaussianBlurElement.cpp
WebCore/ksvg2/svg/SVGFEGaussianBlurElement.h
WebCore/ksvg2/svg/SVGFEImageElement.cpp
WebCore/ksvg2/svg/SVGFEImageElement.h
WebCore/ksvg2/svg/SVGFELightElement.cpp
WebCore/ksvg2/svg/SVGFELightElement.h
WebCore/ksvg2/svg/SVGFEMergeElement.cpp
WebCore/ksvg2/svg/SVGFEMergeElement.h
WebCore/ksvg2/svg/SVGFEMergeNodeElement.cpp
WebCore/ksvg2/svg/SVGFEMergeNodeElement.h
WebCore/ksvg2/svg/SVGFEOffsetElement.cpp
WebCore/ksvg2/svg/SVGFEOffsetElement.h
WebCore/ksvg2/svg/SVGFEPointLightElement.h
WebCore/ksvg2/svg/SVGFESpecularLightingElement.cpp
WebCore/ksvg2/svg/SVGFESpecularLightingElement.h
WebCore/ksvg2/svg/SVGFESpotLightElement.cpp
WebCore/ksvg2/svg/SVGFESpotLightElement.h
WebCore/ksvg2/svg/SVGFETileElement.cpp
WebCore/ksvg2/svg/SVGFETileElement.h
WebCore/ksvg2/svg/SVGFETurbulenceElement.cpp
WebCore/ksvg2/svg/SVGFETurbulenceElement.h
WebCore/ksvg2/svg/SVGFilterElement.cpp
WebCore/ksvg2/svg/SVGFilterElement.h
WebCore/ksvg2/svg/SVGFilterPrimitiveStandardAttributes.cpp
WebCore/ksvg2/svg/SVGFilterPrimitiveStandardAttributes.h
WebCore/ksvg2/svg/SVGGradientElement.cpp
WebCore/ksvg2/svg/SVGStyledElement.cpp
WebCore/ksvg2/svg/SVGStyledElement.h
WebCore/platform/graphics/svg/SVGResourceFilter.cpp
WebCore/platform/graphics/svg/SVGResourceFilter.h
WebCore/platform/graphics/svg/cg/SVGResourceFilterCg.mm
WebCore/platform/graphics/svg/filters/SVGDistantLightSource.h
WebCore/platform/graphics/svg/filters/SVGFEBlend.cpp
WebCore/platform/graphics/svg/filters/SVGFEBlend.h
WebCore/platform/graphics/svg/filters/SVGFEColorMatrix.cpp
WebCore/platform/graphics/svg/filters/SVGFEColorMatrix.h
WebCore/platform/graphics/svg/filters/SVGFEComponentTransfer.cpp
WebCore/platform/graphics/svg/filters/SVGFEComponentTransfer.h
WebCore/platform/graphics/svg/filters/SVGFEComposite.cpp
WebCore/platform/graphics/svg/filters/SVGFEComposite.h
WebCore/platform/graphics/svg/filters/SVGFEConvolveMatrix.cpp
WebCore/platform/graphics/svg/filters/SVGFEConvolveMatrix.h
WebCore/platform/graphics/svg/filters/SVGFEDiffuseLighting.cpp
WebCore/platform/graphics/svg/filters/SVGFEDiffuseLighting.h
WebCore/platform/graphics/svg/filters/SVGFEDisplacementMap.cpp
WebCore/platform/graphics/svg/filters/SVGFEDisplacementMap.h
WebCore/platform/graphics/svg/filters/SVGFEFlood.cpp
WebCore/platform/graphics/svg/filters/SVGFEFlood.h
WebCore/platform/graphics/svg/filters/SVGFEGaussianBlur.cpp
WebCore/platform/graphics/svg/filters/SVGFEGaussianBlur.h
WebCore/platform/graphics/svg/filters/SVGFEImage.cpp
WebCore/platform/graphics/svg/filters/SVGFEImage.h
WebCore/platform/graphics/svg/filters/SVGFEMerge.cpp
WebCore/platform/graphics/svg/filters/SVGFEMerge.h
WebCore/platform/graphics/svg/filters/SVGFEMorphology.cpp
WebCore/platform/graphics/svg/filters/SVGFEMorphology.h
WebCore/platform/graphics/svg/filters/SVGFEOffset.cpp
WebCore/platform/graphics/svg/filters/SVGFEOffset.h
WebCore/platform/graphics/svg/filters/SVGFESpecularLighting.cpp
WebCore/platform/graphics/svg/filters/SVGFESpecularLighting.h
WebCore/platform/graphics/svg/filters/SVGFETile.h
WebCore/platform/graphics/svg/filters/SVGFETurbulence.cpp
WebCore/platform/graphics/svg/filters/SVGFETurbulence.h
WebCore/platform/graphics/svg/filters/SVGFilterEffect.cpp
WebCore/platform/graphics/svg/filters/SVGFilterEffect.h
WebCore/platform/graphics/svg/filters/SVGLightSource.cpp
WebCore/platform/graphics/svg/filters/SVGLightSource.h
WebCore/platform/graphics/svg/filters/SVGPointLightSource.h
WebCore/platform/graphics/svg/filters/SVGSpotLightSource.h
WebCore/platform/graphics/svg/filters/cg/SVGFEBlendCg.mm
WebCore/platform/graphics/svg/filters/cg/SVGFEColorMatrixCg.mm
WebCore/platform/graphics/svg/filters/cg/SVGFEComponentTransferCg.mm
WebCore/platform/graphics/svg/filters/cg/SVGFECompositeCg.mm
WebCore/platform/graphics/svg/filters/cg/SVGFEDiffuseLightingCg.mm
WebCore/platform/graphics/svg/filters/cg/SVGFEDisplacementMapCg.mm
WebCore/platform/graphics/svg/filters/cg/SVGFEFloodCg.mm
WebCore/platform/graphics/svg/filters/cg/SVGFEGaussianBlurCg.mm
WebCore/platform/graphics/svg/filters/cg/SVGFEHelpersCg.h
WebCore/platform/graphics/svg/filters/cg/SVGFEImageCg.mm
WebCore/platform/graphics/svg/filters/cg/SVGFEMergeCg.mm
WebCore/platform/graphics/svg/filters/cg/SVGFEOffsetCg.mm
WebCore/platform/graphics/svg/filters/cg/SVGFESpecularLightingCg.mm
WebCore/platform/graphics/svg/filters/cg/SVGFETileCg.mm
WebCore/platform/graphics/svg/filters/cg/SVGFilterEffectCg.mm
WebCore/platform/graphics/svg/filters/cg/WKDiffuseLightingFilter.cikernel
WebCore/platform/graphics/svg/filters/cg/WKDisplacementMapFilter.cikernel
WebCore/platform/graphics/svg/qt/SVGResourceFilterQt.cpp

index 71c32e3..c38eb5c 100644 (file)
@@ -1,3 +1,80 @@
+2007-08-21  Nikolas Zimmermann  <zimmermann@kde.org>
+
+        Reviewed by Oliver.
+
+        Updated layout tests results after the SVG filter rework.
+
+        * svg/W3C-SVG-1.1/filters-blend-01-b-expected.checksum:
+        * svg/W3C-SVG-1.1/filters-blend-01-b-expected.png:
+        * svg/W3C-SVG-1.1/filters-blend-01-b-expected.txt:
+        * svg/W3C-SVG-1.1/filters-color-01-b-expected.checksum:
+        * svg/W3C-SVG-1.1/filters-color-01-b-expected.png:
+        * svg/W3C-SVG-1.1/filters-color-01-b-expected.txt:
+        * svg/W3C-SVG-1.1/filters-composite-02-b-expected.txt:
+        * svg/W3C-SVG-1.1/filters-comptran-01-b-expected.checksum:
+        * svg/W3C-SVG-1.1/filters-comptran-01-b-expected.png:
+        * svg/W3C-SVG-1.1/filters-comptran-01-b-expected.txt:
+        * svg/W3C-SVG-1.1/filters-diffuse-01-f-expected.checksum:
+        * svg/W3C-SVG-1.1/filters-diffuse-01-f-expected.png:
+        * svg/W3C-SVG-1.1/filters-diffuse-01-f-expected.txt:
+        * svg/W3C-SVG-1.1/filters-displace-01-f-expected.checksum:
+        * svg/W3C-SVG-1.1/filters-displace-01-f-expected.png:
+        * svg/W3C-SVG-1.1/filters-displace-01-f-expected.txt:
+        * svg/W3C-SVG-1.1/filters-example-01-b-expected.checksum:
+        * svg/W3C-SVG-1.1/filters-example-01-b-expected.png:
+        * svg/W3C-SVG-1.1/filters-example-01-b-expected.txt:
+        * svg/W3C-SVG-1.1/filters-gauss-01-b-expected.checksum:
+        * svg/W3C-SVG-1.1/filters-gauss-01-b-expected.png:
+        * svg/W3C-SVG-1.1/filters-gauss-01-b-expected.txt:
+        * svg/W3C-SVG-1.1/filters-image-01-b-expected.checksum:
+        * svg/W3C-SVG-1.1/filters-image-01-b-expected.png:
+        * svg/W3C-SVG-1.1/filters-light-01-f-expected.checksum:
+        * svg/W3C-SVG-1.1/filters-light-01-f-expected.png:
+        * svg/W3C-SVG-1.1/filters-light-01-f-expected.txt:
+        * svg/W3C-SVG-1.1/filters-offset-01-b-expected.checksum:
+        * svg/W3C-SVG-1.1/filters-offset-01-b-expected.png:
+        * svg/W3C-SVG-1.1/filters-offset-01-b-expected.txt:
+        * svg/W3C-SVG-1.1/filters-specular-01-f-expected.checksum:
+        * svg/W3C-SVG-1.1/filters-specular-01-f-expected.png:
+        * svg/W3C-SVG-1.1/filters-specular-01-f-expected.txt:
+        * svg/W3C-SVG-1.1/filters-tile-01-b-expected.txt:
+        * svg/batik/text/textEffect-expected.checksum:
+        * svg/batik/text/textEffect-expected.png:
+        * svg/batik/text/textEffect-expected.txt:
+        * svg/batik/text/textEffect3-expected.checksum:
+        * svg/batik/text/textEffect3-expected.png:
+        * svg/batik/text/textEffect3-expected.txt:
+        * svg/batik/text/textFeatures-expected.checksum:
+        * svg/batik/text/textFeatures-expected.png:
+        * svg/batik/text/textFeatures-expected.txt:
+        * svg/batik/text/textProperties-expected.checksum:
+        * svg/batik/text/textProperties-expected.png:
+        * svg/custom/empty-merge-expected.txt:
+        * svg/custom/feComponentTransfer-Discrete-expected.checksum:
+        * svg/custom/feComponentTransfer-Discrete-expected.png:
+        * svg/custom/feComponentTransfer-Discrete-expected.txt:
+        * svg/custom/feComponentTransfer-Gamma-expected.checksum:
+        * svg/custom/feComponentTransfer-Gamma-expected.png:
+        * svg/custom/feComponentTransfer-Gamma-expected.txt:
+        * svg/custom/feComponentTransfer-Linear-expected.checksum:
+        * svg/custom/feComponentTransfer-Linear-expected.png:
+        * svg/custom/feComponentTransfer-Linear-expected.txt:
+        * svg/custom/feComponentTransfer-Table-expected.checksum:
+        * svg/custom/feComponentTransfer-Table-expected.png:
+        * svg/custom/feComponentTransfer-Table-expected.txt:
+        * svg/custom/filter-source-alpha-expected.txt:
+        * svg/custom/image-with-transform-clip-filter-expected.checksum:
+        * svg/custom/image-with-transform-clip-filter-expected.png:
+        * svg/custom/image-with-transform-clip-filter-expected.txt:
+        * svg/custom/invalid-css-expected.txt:
+        * svg/custom/non-opaque-filters-expected.checksum:
+        * svg/custom/non-opaque-filters-expected.png:
+        * svg/custom/non-opaque-filters-expected.txt:
+        * svg/custom/text-filter-expected.checksum:
+        * svg/custom/text-filter-expected.png:
+        * svg/custom/text-filter-expected.txt:
+        * svg/custom/visibility-override-filter-expected.txt:
+
 2007-08-20  Rob Buis  <buis@kde.org>
 
         Reviewed by Nikolas.
index 24284e4..b7a8465 100644 (file)
@@ -1 +1 @@
-3c8af3933d6e4fac08dbe1e2e86657f9
\ No newline at end of file
+d1d9f18626d1543fb6e584bd4e96daf0
\ No newline at end of file
index ca09df7..cae754f 100644 (file)
Binary files a/LayoutTests/svg/batik/text/textEffect-expected.png and b/LayoutTests/svg/batik/text/textEffect-expected.png differ
index ea2317f..56b23de 100644 (file)
@@ -1,6 +1,6 @@
 KRenderingPaintServer {id="linearGradient" [type=LINEAR-GRADIENT] [stops=[(0.00,#FFD700), (0.50,#FFA500), (1.00,#DC143C)]] [start=(0,0)] [end=(1,0)]}
 KRenderingPaintServer {id="radialGradient" [type=RADIAL-GRADIENT] [stops=[(0.00,#FFD700), (0.50,#FFA500), (1.00,#DC143C)]] [center=(0.50,0.50)] [focal=(0.50,0.50)] [radius=0.50]}
-KCanvasResource {id="dropShadow" [type=FILTER]  [bounding box=at (-10.00%,-10.00%) size 120.00%x120.00%] [effects=[[type=GAUSSIAN-BLUR] [in="SourceGraphic"] [subregion="at (0,0) size 450x500"] [std dev. x=2.00 y=2.00]]]}
+KCanvasResource {id="dropShadow" [type=FILTER]  [bounding box=at (-10.00%,-10.00%) size 120.00%x120.00%] [effects=[[type=GAUSSIAN-BLUR] [in="SourceGraphic"] [subregion="at (0,0) size 1x1"] [std dev. x=2.00 y=2.00]]]}
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 450x500
index 9c31f60..2d3a537 100644 (file)
@@ -1 +1 @@
-6f77cc9b4c94d75ae3dcfac75925981c
\ No newline at end of file
+b3f1482e2f1c655338b87ff6b5945e60
\ No newline at end of file
index 313e8a5..cfc6a3c 100644 (file)
Binary files a/LayoutTests/svg/batik/text/textEffect3-expected.png and b/LayoutTests/svg/batik/text/textEffect3-expected.png differ
index fa7da23..9e5b594 100644 (file)
@@ -1,6 +1,6 @@
 KRenderingPaintServer {id="linearGradient" [type=LINEAR-GRADIENT] [stops=[(0.00,#FFD700), (0.50,#FFA500), (1.00,#DC143C)]] [start=(0,0)] [end=(1,0)]}
 KRenderingPaintServer {id="radialGradient" [type=RADIAL-GRADIENT] [stops=[(0.00,#FFD700), (0.50,#FFA500), (1.00,#DC143C)]] [center=(0.50,0.50)] [focal=(0.50,0.50)] [radius=0.50]}
-KCanvasResource {id="dropShadow" [type=FILTER]  [bounding box=at (-10.00%,-10.00%) size 120.00%x120.00%] [effects=[[type=GAUSSIAN-BLUR] [in="SourceGraphic"] [subregion="at (0,0) size 450x500"] [std dev. x=2.00 y=2.00]]]}
+KCanvasResource {id="dropShadow" [type=FILTER]  [bounding box=at (-10.00%,-10.00%) size 120.00%x120.00%] [effects=[[type=GAUSSIAN-BLUR] [in="SourceGraphic"] [subregion="at (0,0) size 1x1"] [std dev. x=2.00 y=2.00]]]}
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 450x500
index ee2472a..d61a048 100644 (file)
@@ -1 +1 @@
-ba9c8bd4269637a70bcedb31ee753545
\ No newline at end of file
+45364b0f3624bce3e8078a7a919a8a8d
\ No newline at end of file
index b78d750..1bc840e 100644 (file)
Binary files a/LayoutTests/svg/batik/text/textFeatures-expected.png and b/LayoutTests/svg/batik/text/textFeatures-expected.png differ
index 71cd074..47dd2d9 100644 (file)
@@ -1,7 +1,9 @@
+KCanvasResource {id="blur" [type=FILTER]  [bounding box=at (0,-80) size 200x100] [bounding box mode=0] [effects=[[type=GAUSSIAN-BLUR]  [subregion="at (0,-80) size 200x100"] [std dev. x=2.00 y=2.00]]]}
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 450x500
   RenderSVGRoot {svg} at (45,36) size 349x449.20
+    RenderSVGHiddenContainer {defs} at (0,0) size 0x0
     RenderSVGContainer {g} at (45,36) size 349x449.20
       RenderSVGText {text} at (151,50) size 148x17 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-14) size 148x17
index 5a9e172..f1e737c 100644 (file)
@@ -1 +1 @@
-a526c9bb407515eda2ec81f6b2668b72
\ No newline at end of file
+597ffa42c2591b9241118d11c480d3a7
\ No newline at end of file
index 2034929..b47b160 100644 (file)
Binary files a/LayoutTests/svg/batik/text/textPosition-expected.png and b/LayoutTests/svg/batik/text/textPosition-expected.png differ
index 7221755..c6f2ffc 100644 (file)
@@ -12,9 +12,9 @@ layer at (0,0) size 450x500
       RenderSVGText {text} at (50,100) size 103x11 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-9) size 103x11
           chunk 1 text run 1 at (50.00,100.00) startOffset 0 endOffset 21 width 103.00: "<text x=\"100\" y=\"80\">"
-      RenderSVGText {text} at (240,80) size 53x27 contains 1 chunk(s)
-        RenderSVGInlineText {#text} at (0,-22) size 53x27
-          chunk 1 text run 1 at (240.00,80.00) startOffset 0 endOffset 5 width 53.00: "Batik"
+      RenderSVGText {text} at (240,80) size 153x27 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,-22) size 153x27
+          chunk 1 text run 1 at (240.00,80.00) startOffset 0 endOffset 5 width 153.00: "Batik"
       RenderSVGText {text} at (240,100) size 194x11 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-9) size 194x11
           chunk 1 text run 1 at (240.00,100.00) startOffset 0 endOffset 41 width 194.00: "<text x=\"240\" y=\"80\" letter-spacing=\"20\">"
@@ -41,10 +41,10 @@ layer at (0,0) size 450x500
       RenderSVGText {text} at (50,220) size 112x11 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-9) size 112x11
           chunk 1 text run 1 at (50.00,220.00) startOffset 0 endOffset 22 width 112.00: "<tspan x=\"50\" y=\"200\">"
-      RenderSVGText {text} at (240,200) size 53x27 contains 1 chunk(s)
-        RenderSVGTSpan {tspan} at (0,0) size 53x27
-          RenderSVGInlineText {#text} at (0,-22) size 53x27
-            chunk 1 text run 1 at (240.00,200.00) startOffset 0 endOffset 5 width 53.00: "Batik"
+      RenderSVGText {text} at (240,200) size 153x27 contains 1 chunk(s)
+        RenderSVGTSpan {tspan} at (0,0) size 153x27
+          RenderSVGInlineText {#text} at (0,-22) size 153x27
+            chunk 1 text run 1 at (240.00,200.00) startOffset 0 endOffset 5 width 153.00: "Batik"
       RenderSVGText {text} at (240,220) size 209x11 contains 1 chunk(s)
         RenderSVGTSpan {tspan} at (0,0) size 209x11
           RenderSVGInlineText {#text} at (0,-9) size 209x11
@@ -81,10 +81,10 @@ layer at (0,0) size 450x500
         RenderSVGTSpan {tspan} at (0,0) size 137x11
           RenderSVGInlineText {#text} at (33,2) size 137x11
             chunk 2 text run 1 at (83.00,351.00) startOffset 0 endOffset 27 width 137.00: "dx=\"0 10 20 30 40\" y=\"320\">"
-      RenderSVGText {text} at (240,320) size 93x27 contains 1 chunk(s)
-        RenderSVGTSpan {tspan} at (0,0) size 93x27
-          RenderSVGInlineText {#text} at (0,-22) size 93x27
-            chunk 1 text run 1 at (240.00,320.00) startOffset 0 endOffset 5 width 53.00: "Batik"
+      RenderSVGText {text} at (240,320) size 143x27 contains 1 chunk(s)
+        RenderSVGTSpan {tspan} at (0,0) size 143x27
+          RenderSVGInlineText {#text} at (0,-22) size 143x27
+            chunk 1 text run 1 at (240.00,320.00) startOffset 0 endOffset 5 width 103.00: "Batik"
       RenderSVGText {text} at (240,340) size 191x22 contains 2 chunk(s)
         RenderSVGInlineText {#text} at (0,-9) size 169x11
           chunk 1 text run 1 at (240.00,340.00) startOffset 0 endOffset 34 width 169.00: "<tspan x=\"240\" dx=\"0 10 10 10 10\" "
index 14e9000..960f87d 100644 (file)
@@ -1 +1 @@
-4d73af2fa5b048bd51431b1e9579d6bf
\ No newline at end of file
+3dabd5e40e73ab2489f8c77d43618999
\ No newline at end of file
index 12e9ffd..702d6a7 100644 (file)
Binary files a/LayoutTests/svg/batik/text/textPosition2-expected.png and b/LayoutTests/svg/batik/text/textPosition2-expected.png differ
index d439274..c49a42e 100644 (file)
@@ -13,9 +13,9 @@ layer at (0,0) size 450x500
       RenderSVGText {text} at (50,100) size 103x11 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-9) size 103x11
           chunk 1 text run 1 at (50.00,100.00) startOffset 0 endOffset 21 width 103.00: "<text x=\"100\" y=\"80\">"
-      RenderSVGText {text} at (240,80) size 53x28 contains 1 chunk(s)
-        RenderSVGInlineText {#text} at (0,-22) size 53x28
-          chunk 1 text run 1 at (240.00,80.00) startOffset 0 endOffset 5 width 53.00: "Batik"
+      RenderSVGText {text} at (240,80) size 153x28 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,-22) size 153x28
+          chunk 1 text run 1 at (240.00,80.00) startOffset 0 endOffset 5 width 153.00: "Batik"
       RenderSVGText {text} at (240,100) size 194x11 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-9) size 194x11
           chunk 1 text run 1 at (240.00,100.00) startOffset 0 endOffset 41 width 194.00: "<text x=\"240\" y=\"80\" letter-spacing=\"20\">"
@@ -42,10 +42,10 @@ layer at (0,0) size 450x500
       RenderSVGText {text} at (50,220) size 112x11 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-9) size 112x11
           chunk 1 text run 1 at (50.00,220.00) startOffset 0 endOffset 22 width 112.00: "<tspan x=\"50\" y=\"200\">"
-      RenderSVGText {text} at (240,200) size 53x28 contains 1 chunk(s)
-        RenderSVGTSpan {tspan} at (0,0) size 53x28
-          RenderSVGInlineText {#text} at (0,-22) size 53x28
-            chunk 1 text run 1 at (240.00,200.00) startOffset 0 endOffset 5 width 53.00: "Batik"
+      RenderSVGText {text} at (240,200) size 153x28 contains 1 chunk(s)
+        RenderSVGTSpan {tspan} at (0,0) size 153x28
+          RenderSVGInlineText {#text} at (0,-22) size 153x28
+            chunk 1 text run 1 at (240.00,200.00) startOffset 0 endOffset 5 width 153.00: "Batik"
       RenderSVGText {text} at (240,220) size 209x11 contains 1 chunk(s)
         RenderSVGTSpan {tspan} at (0,0) size 209x11
           RenderSVGInlineText {#text} at (0,-9) size 209x11
@@ -82,10 +82,10 @@ layer at (0,0) size 450x500
         RenderSVGTSpan {tspan} at (0,0) size 137x11
           RenderSVGInlineText {#text} at (33,2) size 137x11
             chunk 2 text run 1 at (83.00,351.00) startOffset 0 endOffset 27 width 137.00: "dx=\"0 10 20 30 40\" y=\"320\">"
-      RenderSVGText {text} at (240,320) size 93x28 contains 1 chunk(s)
-        RenderSVGTSpan {tspan} at (0,0) size 93x28
-          RenderSVGInlineText {#text} at (0,-22) size 93x28
-            chunk 1 text run 1 at (240.00,320.00) startOffset 0 endOffset 5 width 53.00: "Batik"
+      RenderSVGText {text} at (240,320) size 143x28 contains 1 chunk(s)
+        RenderSVGTSpan {tspan} at (0,0) size 143x28
+          RenderSVGInlineText {#text} at (0,-22) size 143x28
+            chunk 1 text run 1 at (240.00,320.00) startOffset 0 endOffset 5 width 103.00: "Batik"
       RenderSVGText {text} at (240,340) size 191x22 contains 2 chunk(s)
         RenderSVGInlineText {#text} at (0,-9) size 169x11
           chunk 1 text run 1 at (240.00,340.00) startOffset 0 endOffset 34 width 169.00: "<tspan x=\"240\" dx=\"0 10 10 10 10\" "
index 0ca1827..def6d77 100644 (file)
@@ -1 +1 @@
-95b0e5e1abcf9f574f717ae77805bba6
\ No newline at end of file
+9ebba2885801ad6fa41d6d59ed78a8dd
\ No newline at end of file
index 38cc409..6e1fe03 100644 (file)
Binary files a/LayoutTests/svg/batik/text/textProperties-expected.png and b/LayoutTests/svg/batik/text/textProperties-expected.png differ
index ce5dbe1..04401b2 100644 (file)
@@ -1,3 +1,253 @@
+2007-08-21  Nikolas Zimmermann  <zimmermann@kde.org>
+
+        Reviewed by Oliver.
+
+        Large SVG filter rework. Bring it back in a useable state.
+
+        Fixes: http://bugs.webkit.org/show_bug.cgi?id=5527 (Filters need subregion support)
+        Fixes: http://bugs.webkit.org/show_bug.cgi?id=5579 (WebKit+SVG renders full-filters-example incorrectly)
+        Fixes: http://bugs.webkit.org/show_bug.cgi?id=5976 (filterUnits="userSpaceOnUse" is broken (breaking feTile test case))
+        Fixes: http://bugs.webkit.org/show_bug.cgi?id=12064 (Need function for manual style-resolution for things like gradient stops)
+
+        filters-blend-01-b.svg & filters-example-01-b.svg & filters-displace-01-b.svg & filters-diffuse-01-f.svg are fixed now.
+
+        In detail:
+        - flood-color & flood-opacity have been incorrectly resolved on the <feBlend> parent element!
+        - sizing of filter region was truncated in some cases, as the bbox was used to resolve the needed filter region instead of the filter rect
+        - add subregion support to all filter primitives (primitiveUnits & filterUnits handled in all cases)
+        - WKDisplacmentMap.cikernel incorrectly flipped the y-axis.
+        - Correctly specify default values for all filter primitives in ksvg2/svg!
+        - Initialize all variables of the SVGFE* classes in platform/graphics/svg/filters.
+        - Fix 'flood-color' initial value (was set to the _stop_ color initial value)
+          -> both initial values were pointing to 'black' though, so it was no visible problem.
+        - Parse 'lighting-color' css property, no more hacking in SVGFEDiffuseLighting.
+          -> Correct it's initial from black to white value fixes SVG lighting filters!
+        - Add diffuseConstant support to feDiffuseLighting filter.
+        - Centralize manual style resolution (needed for stop-color, flood-color & flood-opacity, lighting-color)
+
+        * ksvg2/css/SVGCSSParser.cpp:
+        * ksvg2/css/SVGCSSStyleSelector.cpp:
+        (WebCore::CSSStyleSelector::applySVGProperty):
+        * ksvg2/css/SVGRenderStyle.h:
+        * ksvg2/css/SVGRenderStyleDefs.cpp:
+        (StyleMiscData::StyleMiscData):
+        (StyleMiscData::operator==):
+        * ksvg2/css/SVGRenderStyleDefs.h:
+        * ksvg2/svg/SVGComponentTransferFunctionElement.cpp:
+        (WebCore::SVGComponentTransferFunctionElement::SVGComponentTransferFunctionElement):
+        * ksvg2/svg/SVGFEBlendElement.cpp:
+        (WebCore::SVGFEBlendElement::SVGFEBlendElement):
+        (WebCore::SVGFEBlendElement::filterEffect):
+        * ksvg2/svg/SVGFEBlendElement.h:
+        * ksvg2/svg/SVGFEColorMatrixElement.cpp:
+        (WebCore::SVGFEColorMatrixElement::SVGFEColorMatrixElement):
+        (WebCore::SVGFEColorMatrixElement::filterEffect):
+        * ksvg2/svg/SVGFEColorMatrixElement.h:
+        * ksvg2/svg/SVGFEComponentTransferElement.cpp:
+        (WebCore::SVGFEComponentTransferElement::filterEffect):
+        * ksvg2/svg/SVGFEComponentTransferElement.h:
+        * ksvg2/svg/SVGFECompositeElement.cpp:
+        (WebCore::SVGFECompositeElement::SVGFECompositeElement):
+        (WebCore::SVGFECompositeElement::parseMappedAttribute):
+        (WebCore::SVGFECompositeElement::filterEffect):
+        * ksvg2/svg/SVGFECompositeElement.h:
+        * ksvg2/svg/SVGFEDiffuseLightingElement.cpp:
+        (WebCore::SVGFEDiffuseLightingElement::SVGFEDiffuseLightingElement):
+        (WebCore::SVGFEDiffuseLightingElement::parseMappedAttribute):
+        (WebCore::SVGFEDiffuseLightingElement::filterEffect):
+        * ksvg2/svg/SVGFEDiffuseLightingElement.h:
+        * ksvg2/svg/SVGFEDisplacementMapElement.cpp:
+        (WebCore::SVGFEDisplacementMapElement::SVGFEDisplacementMapElement):
+        (WebCore::SVGFEDisplacementMapElement::filterEffect):
+        * ksvg2/svg/SVGFEDisplacementMapElement.h:
+        * ksvg2/svg/SVGFEDistantLightElement.cpp:
+        (WebCore::SVGFEDistantLightElement::SVGFEDistantLightElement):
+        * ksvg2/svg/SVGFEDistantLightElement.h:
+        * ksvg2/svg/SVGFEFloodElement.cpp:
+        (WebCore::SVGFEFloodElement::filterEffect):
+        * ksvg2/svg/SVGFEFloodElement.h:
+        * ksvg2/svg/SVGFEFuncAElement.cpp:
+        * ksvg2/svg/SVGFEFuncAElement.h:
+        * ksvg2/svg/SVGFEFuncBElement.cpp:
+        * ksvg2/svg/SVGFEFuncBElement.h:
+        * ksvg2/svg/SVGFEFuncGElement.cpp:
+        (WebCore::SVGFEFuncGElement::SVGFEFuncGElement):
+        * ksvg2/svg/SVGFEFuncGElement.h:
+        * ksvg2/svg/SVGFEFuncRElement.cpp:
+        * ksvg2/svg/SVGFEFuncRElement.h:
+        * ksvg2/svg/SVGFEGaussianBlurElement.cpp:
+        (WebCore::SVGFEGaussianBlurElement::filterEffect):
+        * ksvg2/svg/SVGFEGaussianBlurElement.h:
+        * ksvg2/svg/SVGFEImageElement.cpp:
+        (WebCore::SVGFEImageElement::notifyFinished):
+        (WebCore::SVGFEImageElement::filterEffect):
+        * ksvg2/svg/SVGFEImageElement.h:
+        * ksvg2/svg/SVGFELightElement.cpp:
+        (WebCore::SVGFELightElement::SVGFELightElement):
+        * ksvg2/svg/SVGFELightElement.h:
+        * ksvg2/svg/SVGFEMergeElement.cpp:
+        (WebCore::SVGFEMergeElement::filterEffect):
+        * ksvg2/svg/SVGFEMergeElement.h:
+        * ksvg2/svg/SVGFEMergeNodeElement.cpp:
+        * ksvg2/svg/SVGFEMergeNodeElement.h:
+        * ksvg2/svg/SVGFEOffsetElement.cpp:
+        (WebCore::SVGFEOffsetElement::filterEffect):
+        * ksvg2/svg/SVGFEOffsetElement.h:
+        * ksvg2/svg/SVGFEPointLightElement.h:
+        * ksvg2/svg/SVGFESpecularLightingElement.cpp:
+        (WebCore::SVGFESpecularLightingElement::SVGFESpecularLightingElement):
+        (WebCore::SVGFESpecularLightingElement::parseMappedAttribute):
+        (WebCore::SVGFESpecularLightingElement::filterEffect):
+        (WebCore::SVGFESpecularLightingElement::updateLights):
+        * ksvg2/svg/SVGFESpecularLightingElement.h:
+        * ksvg2/svg/SVGFESpotLightElement.cpp:
+        (WebCore::SVGFESpotLightElement::lightSource):
+        * ksvg2/svg/SVGFESpotLightElement.h:
+        * ksvg2/svg/SVGFETileElement.cpp:
+        (WebCore::SVGFETileElement::filterEffect):
+        * ksvg2/svg/SVGFETileElement.h:
+        * ksvg2/svg/SVGFETurbulenceElement.cpp:
+        (WebCore::SVGFETurbulenceElement::SVGFETurbulenceElement):
+        (WebCore::SVGFETurbulenceElement::filterEffect):
+        * ksvg2/svg/SVGFETurbulenceElement.h:
+        * ksvg2/svg/SVGFilterElement.cpp:
+        (WebCore::SVGFilterElement::canvasResource):
+        * ksvg2/svg/SVGFilterElement.h:
+        * ksvg2/svg/SVGFilterPrimitiveStandardAttributes.cpp:
+        (WebCore::SVGFilterPrimitiveStandardAttributes::SVGFilterPrimitiveStandardAttributes):
+        (WebCore::SVGFilterPrimitiveStandardAttributes::setStandardAttributes):
+        * ksvg2/svg/SVGFilterPrimitiveStandardAttributes.h:
+        * ksvg2/svg/SVGGradientElement.cpp:
+        (WebCore::SVGGradientElement::buildStops):
+        * ksvg2/svg/SVGStyledElement.cpp:
+        (WebCore::SVGStyledElement::resolveStyle):
+        * ksvg2/svg/SVGStyledElement.h:
+        * platform/graphics/svg/SVGResourceFilter.cpp:
+        (WebCore::SVGResourceFilter::addFilterEffect):
+        (WebCore::SVGResourceFilter::filterBBoxForItemBBox):
+        * platform/graphics/svg/SVGResourceFilter.h:
+        (WebCore::SVGResourceFilter::xBoundingBoxMode):
+        (WebCore::SVGResourceFilter::setXBoundingBoxMode):
+        (WebCore::SVGResourceFilter::yBoundingBoxMode):
+        (WebCore::SVGResourceFilter::setYBoundingBoxMode):
+        * platform/graphics/svg/cg/SVGResourceFilterCg.mm:
+        (WebCore::SVGResourceFilter::SVGResourceFilter):
+        (WebCore::SVGResourceFilter::createFilterEffect):
+        (WebCore::SVGResourceFilter::prepareFilter):
+        (WebCore::dumpOutputImage):
+        (WebCore::SVGResourceFilter::applyFilter):
+        (WebCore::SVGResourceFilter::getCIFilterStack):
+        (WebCore::SVGResourceFilter::imageForName):
+        (WebCore::SVGResourceFilter::setImageForName):
+        (WebCore::SVGResourceFilter::setOutputImage):
+        (WebCore::alphaImageForImage):
+        (WebCore::SVGResourceFilter::inputImage):
+        * platform/graphics/svg/filters/SVGDistantLightSource.h:
+        * platform/graphics/svg/filters/SVGFEBlend.cpp:
+        (WebCore::SVGFEBlend::SVGFEBlend):
+        * platform/graphics/svg/filters/SVGFEBlend.h:
+        * platform/graphics/svg/filters/SVGFEColorMatrix.cpp:
+        (WebCore::SVGFEColorMatrix::SVGFEColorMatrix):
+        * platform/graphics/svg/filters/SVGFEColorMatrix.h:
+        * platform/graphics/svg/filters/SVGFEComponentTransfer.cpp:
+        (WebCore::SVGFEComponentTransfer::SVGFEComponentTransfer):
+        * platform/graphics/svg/filters/SVGFEComponentTransfer.h:
+        (WebCore::SVGComponentTransferFunction::SVGComponentTransferFunction):
+        * platform/graphics/svg/filters/SVGFEComposite.cpp:
+        (WebCore::SVGFEComposite::SVGFEComposite):
+        * platform/graphics/svg/filters/SVGFEComposite.h:
+        * platform/graphics/svg/filters/SVGFEConvolveMatrix.cpp:
+        (WebCore::SVGFEConvolveMatrix::SVGFEConvolveMatrix):
+        * platform/graphics/svg/filters/SVGFEConvolveMatrix.h:
+        * platform/graphics/svg/filters/SVGFEDiffuseLighting.cpp:
+        (WebCore::SVGFEDiffuseLighting::SVGFEDiffuseLighting):
+        * platform/graphics/svg/filters/SVGFEDiffuseLighting.h:
+        * platform/graphics/svg/filters/SVGFEDisplacementMap.cpp:
+        (WebCore::SVGFEDisplacementMap::SVGFEDisplacementMap):
+        * platform/graphics/svg/filters/SVGFEDisplacementMap.h:
+        * platform/graphics/svg/filters/SVGFEFlood.cpp:
+        (WebCore::SVGFEFlood::SVGFEFlood):
+        * platform/graphics/svg/filters/SVGFEFlood.h:
+        * platform/graphics/svg/filters/SVGFEGaussianBlur.cpp:
+        (WebCore::SVGFEGaussianBlur::SVGFEGaussianBlur):
+        * platform/graphics/svg/filters/SVGFEGaussianBlur.h:
+        * platform/graphics/svg/filters/SVGFEImage.cpp:
+        (WebCore::SVGFEImage::SVGFEImage):
+        * platform/graphics/svg/filters/SVGFEImage.h:
+        * platform/graphics/svg/filters/SVGFEMerge.cpp:
+        * platform/graphics/svg/filters/SVGFEMerge.h:
+        (WebCore::SVGFEMerge::SVGFEMerge):
+        * platform/graphics/svg/filters/SVGFEMorphology.cpp:
+        (WebCore::SVGFEMorphology::SVGFEMorphology):
+        * platform/graphics/svg/filters/SVGFEMorphology.h:
+        * platform/graphics/svg/filters/SVGFEOffset.cpp:
+        (WebCore::SVGFEOffset::SVGFEOffset):
+        * platform/graphics/svg/filters/SVGFEOffset.h:
+        * platform/graphics/svg/filters/SVGFESpecularLighting.cpp:
+        (WebCore::SVGFESpecularLighting::SVGFESpecularLighting):
+        * platform/graphics/svg/filters/SVGFESpecularLighting.h:
+        * platform/graphics/svg/filters/SVGFETile.h:
+        (WebCore::SVGFETile::SVGFETile):
+        * platform/graphics/svg/filters/SVGFETurbulence.cpp:
+        (WebCore::SVGFETurbulence::SVGFETurbulence):
+        * platform/graphics/svg/filters/SVGFETurbulence.h:
+        * platform/graphics/svg/filters/SVGFilterEffect.cpp:
+        (WebCore::SVGFilterEffect::SVGFilterEffect):
+        (WebCore::SVGFilterEffect::primitiveBBoxForFilterBBox):
+        (WebCore::SVGFilterEffect::filter):
+        (WebCore::SVGFilterEffect::setFilter):
+        * platform/graphics/svg/filters/SVGFilterEffect.h:
+        (WebCore::SVGFilterEffect::xBoundingBoxMode):
+        (WebCore::SVGFilterEffect::setXBoundingBoxMode):
+        (WebCore::SVGFilterEffect::yBoundingBoxMode):
+        (WebCore::SVGFilterEffect::setYBoundingBoxMode):
+        (WebCore::SVGFilterEffect::widthBoundingBoxMode):
+        (WebCore::SVGFilterEffect::setWidthBoundingBoxMode):
+        (WebCore::SVGFilterEffect::heightBoundingBoxMode):
+        (WebCore::SVGFilterEffect::setHeightBoundingBoxMode):
+        * platform/graphics/svg/filters/SVGLightSource.cpp:
+        * platform/graphics/svg/filters/SVGLightSource.h:
+        * platform/graphics/svg/filters/SVGPointLightSource.h:
+        (WebCore::SVGPointLightSource::SVGPointLightSource):
+        * platform/graphics/svg/filters/SVGSpotLightSource.h:
+        (WebCore::SVGSpotLightSource::SVGSpotLightSource):
+        * platform/graphics/svg/filters/cg/SVGFEBlendCg.mm:
+        (WebCore::SVGFEBlend::getCIFilter):
+        * platform/graphics/svg/filters/cg/SVGFEColorMatrixCg.mm:
+        (WebCore::SVGFEColorMatrix::getCIFilter):
+        * platform/graphics/svg/filters/cg/SVGFEComponentTransferCg.mm:
+        (WebCore::filterForComponentFunc):
+        (WebCore::SVGFEComponentTransfer::getCIFilter):
+        * platform/graphics/svg/filters/cg/SVGFECompositeCg.mm:
+        (WebCore::SVGFEComposite::getCIFilter):
+        * platform/graphics/svg/filters/cg/SVGFEDiffuseLightingCg.mm:
+        (WebCore::SVGFEDiffuseLighting::getCIFilter):
+        * platform/graphics/svg/filters/cg/SVGFEDisplacementMapCg.mm:
+        (WebCore::SVGFEDisplacementMap::getCIFilter):
+        * platform/graphics/svg/filters/cg/SVGFEFloodCg.mm:
+        (WebCore::SVGFEFlood::getCIFilter):
+        * platform/graphics/svg/filters/cg/SVGFEGaussianBlurCg.mm:
+        (WebCore::SVGFEGaussianBlur::getCIFilter):
+        * platform/graphics/svg/filters/cg/SVGFEHelpersCg.h:
+        * platform/graphics/svg/filters/cg/SVGFEImageCg.mm:
+        (WebCore::SVGFEImage::getCIFilter):
+        * platform/graphics/svg/filters/cg/SVGFEMergeCg.mm:
+        (WebCore::SVGFEMerge::getCIFilter):
+        * platform/graphics/svg/filters/cg/SVGFEOffsetCg.mm:
+        (WebCore::SVGFEOffset::getCIFilter):
+        * platform/graphics/svg/filters/cg/SVGFESpecularLightingCg.mm:
+        (WebCore::SVGFESpecularLighting::getCIFilter):
+        * platform/graphics/svg/filters/cg/SVGFETileCg.mm:
+        (WebCore::SVGFETile::getCIFilter):
+        * platform/graphics/svg/filters/cg/SVGFilterEffectCg.mm:
+        (WebCore::SVGFilterEffect::getCIFilter):
+        * platform/graphics/svg/filters/cg/WKDiffuseLightingFilter.cikernel:
+        * platform/graphics/svg/filters/cg/WKDisplacementMapFilter.cikernel:
+        * platform/graphics/svg/filters/cg/WKSpotLightFilter.m:
+        (-[WKSpotLightFilter outputImage]):
+        * platform/graphics/svg/qt/SVGResourceFilterQt.cpp:
+        (WebCore::SVGResourceFilter::createFilterEffect):
+
 2007-08-20  Rob Buis  <buis@kde.org>
 
         Reviewed by Nikolas.
index 7868b1e..0e593d3 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005, 2007 Rob Buis <buis@kde.org>
     Copyright (C) 2005, 2006 Apple Computer, Inc.
 
index b369042..fcfbc1d 100644 (file)
@@ -703,9 +703,27 @@ void CSSStyleSelector::applySVGProperty(int id, CSSValue* value)
                 col = style->color();
             else
                 col = c->color();
+
             svgstyle->setStopColor(col);
             break;
         }
+       case SVGCSS_PROP_LIGHTING_COLOR:
+        {
+            HANDLE_INHERIT_AND_INITIAL(lightingColor, LightingColor);
+
+            SVGColor* c = static_cast<SVGColor*>(value);
+            if (!c)
+                return CSSStyleSelector::applyProperty(id, value);
+
+            Color col;
+            if (c->colorType() == SVGColor::SVG_COLORTYPE_CURRENTCOLOR)
+                col = style->color();
+            else
+                col = c->color();
+
+            svgstyle->setLightingColor(col);
+            break;
+        }
         case SVGCSS_PROP_FLOOD_OPACITY:
         {
             HANDLE_INHERIT_AND_INITIAL(floodOpacity, FloodOpacity)
@@ -728,7 +746,7 @@ void CSSStyleSelector::applySVGProperty(int id, CSSValue* value)
         {
             Color col;
             if (isInitial)
-                col = SVGRenderStyle::initialStopColor();
+                col = SVGRenderStyle::initialFloodColor();
             else {
                 SVGColor *c = static_cast<SVGColor*>(value);
                 if (!c)
index 80b07b3..0b6cafa 100644 (file)
@@ -90,7 +90,7 @@ namespace WebCore {
 
         SVG_RS_DEFINE_ATTRIBUTE_DATAREF_WITH_INITIAL(float, stops, opacity, StopOpacity, stopOpacity, 1.0f)
         SVG_RS_DEFINE_ATTRIBUTE_DATAREF_WITH_INITIAL(Color, stops, color, StopColor, stopColor, Color(0, 0, 0))    
-        
+
         SVG_RS_DEFINE_ATTRIBUTE_DATAREF_WITH_INITIAL(String, clip, clipPath, ClipPath, clipPath, String())
         SVG_RS_DEFINE_ATTRIBUTE_DATAREF_WITH_INITIAL(String, mask, maskElement, MaskElement, maskElement, String())
         SVG_RS_DEFINE_ATTRIBUTE_DATAREF_WITH_INITIAL(String, markers, startMarker, StartMarker, startMarker, String())
@@ -100,6 +100,7 @@ namespace WebCore {
         SVG_RS_DEFINE_ATTRIBUTE_DATAREF_WITH_INITIAL(String, misc, filter, Filter, filter, String())
         SVG_RS_DEFINE_ATTRIBUTE_DATAREF_WITH_INITIAL(float, misc, floodOpacity, FloodOpacity, floodOpacity, 1.0f)
         SVG_RS_DEFINE_ATTRIBUTE_DATAREF_WITH_INITIAL(Color, misc, floodColor, FloodColor, floodColor, Color(0, 0, 0))
+        SVG_RS_DEFINE_ATTRIBUTE_DATAREF_WITH_INITIAL(Color, misc, lightingColor, LightingColor, lightingColor, Color(255, 255, 255))
         SVG_RS_DEFINE_ATTRIBUTE_DATAREF_WITH_INITIAL_REFCOUNTED(CSSValue, misc, baselineShiftValue, BaselineShiftValue, baselineShiftValue, 0)
 
         // convenience
index 67ccd0f..22ac121 100644 (file)
@@ -183,6 +183,7 @@ StyleMiscData::StyleMiscData() : Shared<StyleMiscData>()
 {
     floodColor = SVGRenderStyle::initialFloodColor();
     floodOpacity = SVGRenderStyle::initialFloodOpacity();
+    lightingColor = SVGRenderStyle::initialLightingColor();
     baselineShiftValue = SVGRenderStyle::initialBaselineShiftValue();
 }
 
@@ -191,6 +192,7 @@ StyleMiscData::StyleMiscData(const StyleMiscData &other) : Shared<StyleMiscData>
     filter = other.filter;
     floodColor = other.floodColor;
     floodOpacity = other.floodOpacity;
+    lightingColor = other.lightingColor;
     baselineShiftValue = other.baselineShiftValue;
 }
 
@@ -199,6 +201,7 @@ bool StyleMiscData::operator==(const StyleMiscData &other) const
     return filter == other.filter
            && floodOpacity == other.floodOpacity
            && floodColor == other.floodColor
+           && lightingColor == other.lightingColor
            && baselineShiftValue == other.baselineShiftValue;
 }
 
index 260a3be..d3f4ea5 100644 (file)
@@ -268,6 +268,8 @@ namespace WebCore {
         Color floodColor;
         float floodOpacity;
 
+        Color lightingColor;
+
         // non-inherited text stuff lives here not in StyleTextData.
         RefPtr<CSSValue> baselineShiftValue;
 
index bb0ba40..e05e022 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005, 2006 Rob Buis <buis@kde.org>
 
     This file is part of the KDE project
@@ -21,6 +21,7 @@
 */
 
 #include "config.h"
+
 #if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 #include "SVGComponentTransferFunctionElement.h"
 
@@ -32,12 +33,12 @@ namespace WebCore {
 
 SVGComponentTransferFunctionElement::SVGComponentTransferFunctionElement(const QualifiedName& tagName, Document* doc)
     : SVGElement(tagName, doc)
-    , m_type(0)
+    , m_type(SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN)
     , m_tableValues(new SVGNumberList)
-    , m_slope(0.0)
+    , m_slope(1.0)
     , m_intercept(0.0)
-    , m_amplitude(0.0)
-    , m_exponent(0.0)
+    , m_amplitude(1.0)
+    , m_exponent(1.0)
     , m_offset(0.0)
 {
 }
index 43dc903..58fcf1c 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005, 2006 Rob Buis <buis@kde.org>
 
     This file is part of the KDE project
@@ -21,6 +21,7 @@
 */
 
 #include "config.h"
+
 #if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 #include "SVGFEBlendElement.h"
 
@@ -30,7 +31,7 @@ namespace WebCore {
 
 SVGFEBlendElement::SVGFEBlendElement(const QualifiedName& tagName, Document* doc)
     : SVGFilterPrimitiveStandardAttributes(tagName, doc)
-    , m_mode(0)
+    , m_mode(SVG_FEBLEND_MODE_NORMAL)
     , m_filterEffect(0)
 {
 }
@@ -66,10 +67,10 @@ void SVGFEBlendElement::parseMappedAttribute(MappedAttribute* attr)
         SVGFilterPrimitiveStandardAttributes::parseMappedAttribute(attr);
 }
 
-SVGFEBlend* SVGFEBlendElement::filterEffect() const
+SVGFEBlend* SVGFEBlendElement::filterEffect(SVGResourceFilter* filter) const
 {
     if (!m_filterEffect)
-        m_filterEffect = static_cast<SVGFEBlend*>(SVGResourceFilter::createFilterEffect(FE_BLEND));
+        m_filterEffect = static_cast<SVGFEBlend*>(SVGResourceFilter::createFilterEffect(FE_BLEND, filter));
     if (!m_filterEffect)
         return 0;
     m_filterEffect->setBlendMode((SVGBlendModeType) mode());
@@ -81,6 +82,6 @@ SVGFEBlend* SVGFEBlendElement::filterEffect() const
 
 }
 
-// vim:ts=4:noet
 #endif // ENABLE(SVG)
 
+// vim:ts=4:noet
index dcb7fee..2cb24ea 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005, 2006 Rob Buis <buis@kde.org>
 
     This file is part of the KDE project
@@ -22,8 +22,8 @@
 
 #ifndef SVGFEBlendElement_h
 #define SVGFEBlendElement_h
-#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 
+#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 #include "SVGFEBlend.h"
 #include "SVGFilterPrimitiveStandardAttributes.h"
 
@@ -35,11 +35,8 @@ namespace WebCore
         SVGFEBlendElement(const QualifiedName&, Document*);
         virtual ~SVGFEBlendElement();
 
-        // 'SVGFEBlendElement' functions
-        // Derived from: 'Element'
-        virtual void parseMappedAttribute(MappedAttribute* attr);
-
-        virtual SVGFEBlend* filterEffect() const;
+        virtual void parseMappedAttribute(MappedAttribute*);
+        virtual SVGFEBlend* filterEffect(SVGResourceFilter*) const;
 
     protected:
         virtual const SVGElement* contextElement() const { return this; }
@@ -48,6 +45,7 @@ namespace WebCore
         ANIMATED_PROPERTY_DECLARATIONS(SVGFEBlendElement, String, String, In1, in1)
         ANIMATED_PROPERTY_DECLARATIONS(SVGFEBlendElement, String, String, In2, in2)
         ANIMATED_PROPERTY_DECLARATIONS(SVGFEBlendElement, int, int, Mode, mode)
+
         mutable SVGFEBlend* m_filterEffect;
     };
 
@@ -56,3 +54,4 @@ namespace WebCore
 #endif // ENABLE(SVG)
 #endif
 
+// vim:ts=4:noet
index 1ce8265..a4f6dd4 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005, 2006 Rob Buis <buis@kde.org>
 
     This file is part of the KDE project
@@ -33,7 +33,7 @@ namespace WebCore {
 
 SVGFEColorMatrixElement::SVGFEColorMatrixElement(const QualifiedName& tagName, Document* doc)
     : SVGFilterPrimitiveStandardAttributes(tagName, doc)
-    , m_type(0)
+    , m_type(SVG_FECOLORMATRIX_TYPE_UNKNOWN)
     , m_values(new SVGNumberList)
     , m_filterEffect(0)
 {
@@ -69,15 +69,16 @@ void SVGFEColorMatrixElement::parseMappedAttribute(MappedAttribute* attr)
         SVGFilterPrimitiveStandardAttributes::parseMappedAttribute(attr);
 }
 
-SVGFEColorMatrix* SVGFEColorMatrixElement::filterEffect() const
+SVGFEColorMatrix* SVGFEColorMatrixElement::filterEffect(SVGResourceFilter* filter) const
 {
     if (!m_filterEffect)
-        m_filterEffect = static_cast<SVGFEColorMatrix*>(SVGResourceFilter::createFilterEffect(FE_COLOR_MATRIX));
+        m_filterEffect = static_cast<SVGFEColorMatrix*>(SVGResourceFilter::createFilterEffect(FE_COLOR_MATRIX, filter));
     if (!m_filterEffect)
         return 0;
         
     m_filterEffect->setIn(in1());
     setStandardAttributes(m_filterEffect);
+
     Vector<float> _values;
     SVGNumberList* numbers = values();
 
@@ -85,6 +86,7 @@ SVGFEColorMatrix* SVGFEColorMatrixElement::filterEffect() const
     unsigned int nr = numbers->numberOfItems();
     for (unsigned int i = 0;i < nr;i++)
         _values.append(numbers->getItem(i, ec));
+
     m_filterEffect->setValues(_values);
     m_filterEffect->setType((SVGColorMatrixType) type());
     
index 32c01a8..87a038b 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005, 2006 Rob Buis <buis@kde.org>
 
     This file is part of the KDE project
@@ -22,8 +22,8 @@
 
 #ifndef SVGFEColorMatrixElement_h
 #define SVGFEColorMatrixElement_h
-#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 
+#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 #include "SVGFEColorMatrix.h"
 #include "SVGFilterPrimitiveStandardAttributes.h"
 
@@ -37,11 +37,8 @@ namespace WebCore
         SVGFEColorMatrixElement(const QualifiedName&, Document*);
         virtual ~SVGFEColorMatrixElement();
 
-        // 'SVGFEColorMatrixElement' functions
-        // Derived from: 'Element'
-        virtual void parseMappedAttribute(MappedAttribute* attr);
-        
-        virtual SVGFEColorMatrix* filterEffect() const;
+        virtual void parseMappedAttribute(MappedAttribute*);
+        virtual SVGFEColorMatrix* filterEffect(SVGResourceFilter*) const;
 
     protected:
         virtual const SVGElement* contextElement() const { return this; }
@@ -50,6 +47,7 @@ namespace WebCore
         ANIMATED_PROPERTY_DECLARATIONS(SVGFEColorMatrixElement, String, String, In1, in1)
         ANIMATED_PROPERTY_DECLARATIONS(SVGFEColorMatrixElement, int, int, Type, type)
         ANIMATED_PROPERTY_DECLARATIONS(SVGFEColorMatrixElement, SVGNumberList*, RefPtr<SVGNumberList>, Values, values)
+
         mutable SVGFEColorMatrix* m_filterEffect;
     };
 
index 0a268cd..ce0ad53 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
 
     This file is part of the KDE project
@@ -58,17 +58,17 @@ void SVGFEComponentTransferElement::parseMappedAttribute(MappedAttribute* attr)
         SVGFilterPrimitiveStandardAttributes::parseMappedAttribute(attr);
 }
 
-SVGFEComponentTransfer* SVGFEComponentTransferElement::filterEffect() const
+SVGFEComponentTransfer* SVGFEComponentTransferElement::filterEffect(SVGResourceFilter* filter) const
 {
     if (!m_filterEffect)
-        m_filterEffect = static_cast<SVGFEComponentTransfer*>(SVGResourceFilter::createFilterEffect(FE_COMPONENT_TRANSFER));
+        m_filterEffect = static_cast<SVGFEComponentTransfer*>(SVGResourceFilter::createFilterEffect(FE_COMPONENT_TRANSFER, filter));
     if (!m_filterEffect)
         return 0;
     
     m_filterEffect->setIn(in1());
     setStandardAttributes(m_filterEffect);
     
-    for (Node *n = firstChild(); n != 0; n = n->nextSibling()) {
+    for (Noden = firstChild(); n != 0; n = n->nextSibling()) {
         if (n->hasTagName(SVGNames::feFuncRTag))
             m_filterEffect->setRedFunction(static_cast<SVGFEFuncRElement*>(n)->transferFunction());
         else if (n->hasTagName(SVGNames::feFuncGTag))
index 45e8c04..6b06736 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
 
     This file is part of the KDE project
@@ -22,8 +22,8 @@
 
 #ifndef SVGFEComponentTransferElement_h
 #define SVGFEComponentTransferElement_h
-#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 
+#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 #include "SVGFilterPrimitiveStandardAttributes.h"
 #include "SVGFEComponentTransfer.h"
 
@@ -36,17 +36,15 @@ namespace WebCore
         SVGFEComponentTransferElement(const QualifiedName&, Document*);
         virtual ~SVGFEComponentTransferElement();
 
-        // 'SVGFEComponentTransferElement' functions
-        // Derived from: 'Element'
-        virtual void parseMappedAttribute(MappedAttribute *attr);
-
-        virtual SVGFEComponentTransfer *filterEffect() const;
+        virtual void parseMappedAttribute(MappedAttribute*);
+        virtual SVGFEComponentTransfer* filterEffect(SVGResourceFilter*) const;
 
     protected:
         virtual const SVGElement* contextElement() const { return this; }
 
     private:
         ANIMATED_PROPERTY_DECLARATIONS(SVGFEComponentTransferElement, String, String, In1, in1)
+
         mutable SVGFEComponentTransfer *m_filterEffect;
     };
 
index 040679d..e806002 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005, 2006 Rob Buis <buis@kde.org>
 
     This file is part of the KDE project
@@ -32,7 +32,7 @@ namespace WebCore {
 
 SVGFECompositeElement::SVGFECompositeElement(const QualifiedName& tagName, Document* doc)
     : SVGFilterPrimitiveStandardAttributes(tagName, doc)
-    , m__operator(0)
+    , m__operator(SVG_FECOMPOSITE_OPERATOR_OVER)
     , m_k1(0.0)
     , m_k2(0.0)
     , m_k3(0.0)
@@ -57,8 +57,7 @@ ANIMATED_PROPERTY_DEFINITIONS(SVGFECompositeElement, double, Number, number, K4,
 void SVGFECompositeElement::parseMappedAttribute(MappedAttribute *attr)
 {
     const String& value = attr->value();
-    if (attr->name() == SVGNames::operatorAttr)
-    {
+    if (attr->name() == SVGNames::operatorAttr) {
         if (value == "over")
             set_operatorBaseValue(SVG_FECOMPOSITE_OPERATOR_OVER);
         else if (value == "in")
@@ -88,20 +87,22 @@ void SVGFECompositeElement::parseMappedAttribute(MappedAttribute *attr)
         SVGFilterPrimitiveStandardAttributes::parseMappedAttribute(attr);
 }
 
-SVGFEComposite* SVGFECompositeElement::filterEffect() const
+SVGFEComposite* SVGFECompositeElement::filterEffect(SVGResourceFilter* filter) const
 {
     if (!m_filterEffect)
-        m_filterEffect = static_cast<SVGFEComposite*>(SVGResourceFilter::createFilterEffect(FE_COMPOSITE));
+        m_filterEffect = static_cast<SVGFEComposite*>(SVGResourceFilter::createFilterEffect(FE_COMPOSITE, filter));
     if (!m_filterEffect)
         return 0;
+
     m_filterEffect->setOperation((SVGCompositeOperationType) _operator());
     m_filterEffect->setIn(in1());
     m_filterEffect->setIn2(in2());
-    setStandardAttributes(m_filterEffect);
     m_filterEffect->setK1(k1());
     m_filterEffect->setK2(k2());
     m_filterEffect->setK3(k3());
     m_filterEffect->setK4(k4());
+
+    setStandardAttributes(m_filterEffect);
     return m_filterEffect;
 }
 
index 03e077b..189a078 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005, 2006 Rob Buis <buis@kde.org>
 
     This file is part of the KDE project
@@ -22,8 +22,8 @@
 
 #ifndef SVGFECompositeElement_h
 #define SVGFECompositeElement_h
-#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 
+#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 #include "SVGFEComposite.h"
 #include "SVGFilterPrimitiveStandardAttributes.h"
 
@@ -36,11 +36,8 @@ namespace WebCore
         SVGFECompositeElement(const QualifiedName&, Document*);
         virtual ~SVGFECompositeElement();
 
-        // 'SVGFECompositeElement' functions
-        // Derived from: 'Element'
-        virtual void parseMappedAttribute(MappedAttribute* attr);
-
-        virtual SVGFEComposite* filterEffect() const;
+        virtual void parseMappedAttribute(MappedAttribute*);
+        virtual SVGFEComposite* filterEffect(SVGResourceFilter*) const;
 
     protected:
         virtual const SVGElement* contextElement() const { return this; }
@@ -53,6 +50,7 @@ namespace WebCore
         ANIMATED_PROPERTY_DECLARATIONS(SVGFECompositeElement, double, double, K2, k2)
         ANIMATED_PROPERTY_DECLARATIONS(SVGFECompositeElement, double, double, K3, k3)
         ANIMATED_PROPERTY_DECLARATIONS(SVGFECompositeElement, double, double, K4, k4)
+
         mutable SVGFEComposite* m_filterEffect;
     };
 
index 65d74f6..6977b1d 100644 (file)
@@ -23,6 +23,7 @@
 #include "SVGFEDiffuseLightingElement.h"
 
 #include "Attr.h"
+#include "RenderObject.h"
 #include "SVGColor.h"
 #include "SVGFELightElement.h"
 #include "SVGNames.h"
@@ -35,9 +36,8 @@ namespace WebCore {
 
 SVGFEDiffuseLightingElement::SVGFEDiffuseLightingElement(const QualifiedName& tagName, Document* doc)
     : SVGFilterPrimitiveStandardAttributes(tagName, doc)
-    , m_diffuseConstant(0.0)
-    , m_surfaceScale(0.0)
-    , m_lightingColor(new SVGColor())
+    , m_diffuseConstant(1.0)
+    , m_surfaceScale(1.0)
     , m_kernelUnitLengthX(0.0)
     , m_kernelUnitLengthY(0.0)
     , m_filterEffect(0)
@@ -54,7 +54,6 @@ ANIMATED_PROPERTY_DEFINITIONS(SVGFEDiffuseLightingElement, double, Number, numbe
 ANIMATED_PROPERTY_DEFINITIONS(SVGFEDiffuseLightingElement, double, Number, number, SurfaceScale, surfaceScale, SVGNames::surfaceScaleAttr.localName(), m_surfaceScale)
 ANIMATED_PROPERTY_DEFINITIONS(SVGFEDiffuseLightingElement, double, Number, number, KernelUnitLengthX, kernelUnitLengthX, "kernelUnitLengthX", m_kernelUnitLengthX)
 ANIMATED_PROPERTY_DEFINITIONS(SVGFEDiffuseLightingElement, double, Number, number, KernelUnitLengthY, kernelUnitLengthY, "kernelUnitLengthY", m_kernelUnitLengthY)
-ANIMATED_PROPERTY_DEFINITIONS(SVGFEDiffuseLightingElement, SVGColor*, Color, color, LightingColor, lightingColor, SVGNames::lighting_colorAttr.localName(), m_lightingColor.get())
 
 void SVGFEDiffuseLightingElement::parseMappedAttribute(MappedAttribute *attr)
 {
@@ -71,26 +70,34 @@ void SVGFEDiffuseLightingElement::parseMappedAttribute(MappedAttribute *attr)
             setKernelUnitLengthXBaseValue(x);
             setKernelUnitLengthYBaseValue(y);
         }
-    } else if (attr->name() == SVGNames::lighting_colorAttr)
-        setLightingColorBaseValue(new SVGColor(value));
-    else
+    } else
         SVGFilterPrimitiveStandardAttributes::parseMappedAttribute(attr);
 }
 
-SVGFilterEffect* SVGFEDiffuseLightingElement::filterEffect() const
+SVGFilterEffect* SVGFEDiffuseLightingElement::filterEffect(SVGResourceFilter* filter) const
 {
     if (!m_filterEffect) 
-        m_filterEffect = static_cast<SVGFEDiffuseLighting*>(SVGResourceFilter::createFilterEffect(FE_DIFFUSE_LIGHTING));
+        m_filterEffect = static_cast<SVGFEDiffuseLighting*>(SVGResourceFilter::createFilterEffect(FE_DIFFUSE_LIGHTING, filter));
     if (!m_filterEffect)
         return 0;
 
     m_filterEffect->setIn(in1());
-    setStandardAttributes(m_filterEffect);
     m_filterEffect->setDiffuseConstant(diffuseConstant());
     m_filterEffect->setSurfaceScale(surfaceScale());
     m_filterEffect->setKernelUnitLengthX(kernelUnitLengthX());
     m_filterEffect->setKernelUnitLengthY(kernelUnitLengthY());
-    m_filterEffect->setLightingColor(lightingColor()->color());
+
+    SVGFEDiffuseLightingElement* nonConstThis = const_cast<SVGFEDiffuseLightingElement*>(this);
+
+    RenderStyle* parentStyle = 0;
+    if (!renderer())
+        parentStyle = nonConstThis->styleForRenderer(parent()->renderer());
+
+    RenderStyle* filterStyle = nonConstThis->resolveStyle(parentStyle);
+    m_filterEffect->setLightingColor(filterStyle->svgStyle()->lightingColor());
+
+    setStandardAttributes(m_filterEffect);
     updateLights();
     return m_filterEffect;
 }
index 7eb61ae..fd67bfd 100644 (file)
@@ -1,7 +1,7 @@
 /*
-    Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
-                  2005 Oliver Hunt <ojh16@student.canterbury.ac.nz>
+                  2005 Oliver Hunt <oliver@nerget.com>
 
     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Library General Public
 
 #ifndef SVGFEDiffuseLightingElement_h
 #define SVGFEDiffuseLightingElement_h
-#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 
+#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 #include "SVGFilterPrimitiveStandardAttributes.h"
 
 namespace WebCore {
     class SVGFEDiffuseLighting;
     class SVGColor;
-    
+
     class SVGFEDiffuseLightingElement : public SVGFilterPrimitiveStandardAttributes
     {
     public:
         SVGFEDiffuseLightingElement(const QualifiedName&, Document*);
         virtual ~SVGFEDiffuseLightingElement();
 
-        // 'SVGFEDiffuseLightingElement' functions
-        // Derived from: 'Element'
-        virtual void parseMappedAttribute(MappedAttribute *attr);
-
-        virtual SVGFilterEffect *filterEffect() const;
+        virtual void parseMappedAttribute(MappedAttribute*);
+        virtual SVGFilterEffect* filterEffect(SVGResourceFilter*) const;
 
     protected:
         virtual const SVGElement* contextElement() const { return this; }
@@ -48,13 +45,11 @@ namespace WebCore {
         ANIMATED_PROPERTY_DECLARATIONS(SVGFEDiffuseLightingElement, String, String, In1, in1)
         ANIMATED_PROPERTY_DECLARATIONS(SVGFEDiffuseLightingElement, double, double, DiffuseConstant, diffuseConstant)
         ANIMATED_PROPERTY_DECLARATIONS(SVGFEDiffuseLightingElement, double, double, SurfaceScale, surfaceScale)
-        ANIMATED_PROPERTY_DECLARATIONS(SVGFEDiffuseLightingElement, SVGColor*, RefPtr<SVGColor>, LightingColor, lightingColor)
         ANIMATED_PROPERTY_DECLARATIONS(SVGFEDiffuseLightingElement, double, double, KernelUnitLengthX, kernelUnitLengthX)
         ANIMATED_PROPERTY_DECLARATIONS(SVGFEDiffuseLightingElement, double, double, KernelUnitLengthY, kernelUnitLengthY)
-        //need other properties here...
-        mutable SVGFEDiffuseLighting *m_filterEffect;
+
+        mutable SVGFEDiffuseLightingm_filterEffect;
         
-        //light management
         void updateLights() const;
     };
 
index 9392b0c..fa9b1c7 100644 (file)
@@ -1,5 +1,5 @@
 /*
- Copyright (C) 2006 Oliver Hunt <ojh16@student.canterbury.ac.nz>
+ Copyright (C) 2006 Oliver Hunt <oliver@nerget.com>
  
  This library is free software; you can redistribute it and/or
  modify it under the terms of the GNU Library General Public
@@ -29,8 +29,8 @@ namespace WebCore {
 
 SVGFEDisplacementMapElement::SVGFEDisplacementMapElement(const QualifiedName& tagName, Document* doc)
     : SVGFilterPrimitiveStandardAttributes(tagName, doc)
-    , m_xChannelSelector(0)
-    , m_yChannelSelector(0)
+    , m_xChannelSelector(SVG_CHANNEL_A)
+    , m_yChannelSelector(SVG_CHANNEL_A)
     , m_scale(0.0)
     , m_filterEffect(0)
 {
@@ -78,17 +78,19 @@ void SVGFEDisplacementMapElement::parseMappedAttribute(MappedAttribute* attr)
         SVGFilterPrimitiveStandardAttributes::parseMappedAttribute(attr);
 }
 
-SVGFEDisplacementMap* SVGFEDisplacementMapElement::filterEffect() const
+SVGFEDisplacementMap* SVGFEDisplacementMapElement::filterEffect(SVGResourceFilter* filter) const
 {
     if (!m_filterEffect)
-        m_filterEffect = static_cast<SVGFEDisplacementMap*>(SVGResourceFilter::createFilterEffect(FE_DISPLACEMENT_MAP));
+        m_filterEffect = static_cast<SVGFEDisplacementMap*>(SVGResourceFilter::createFilterEffect(FE_DISPLACEMENT_MAP, filter));
     if (!m_filterEffect)
         return 0;
+
     m_filterEffect->setXChannelSelector((SVGChannelSelectorType) xChannelSelector());
     m_filterEffect->setYChannelSelector((SVGChannelSelectorType) yChannelSelector());
     m_filterEffect->setIn(in1());
     m_filterEffect->setIn2(in2());
     m_filterEffect->setScale(scale());
+
     setStandardAttributes(m_filterEffect);
     return m_filterEffect;
 }
index fdeb0f7..afd517d 100644 (file)
@@ -1,5 +1,5 @@
 /*
- Copyright (C) 2006 Oliver Hunt <ojh16@student.canterbury.ac.nz>
+ Copyright (C) 2006 Oliver Hunt <oliver@nerget.com>
  
  This library is free software; you can redistribute it and/or
  modify it under the terms of the GNU Library General Public
@@ -19,8 +19,8 @@
 
 #ifndef SVGFEDisplacementMapElement_h
 #define SVGFEDisplacementMapElement_h
-#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 
+#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 #include "SVGFEDisplacementMap.h"
 #include "SVGFilterPrimitiveStandardAttributes.h"
 
@@ -31,13 +31,10 @@ namespace WebCore {
         SVGFEDisplacementMapElement(const QualifiedName& tagName, Document*);
         virtual ~SVGFEDisplacementMapElement();
         
-        // 'SVGFEDisplacementMapElement' functions
         static SVGChannelSelectorType stringToChannel(const String&);
         
-        // Derived from: 'Element'
         virtual void parseMappedAttribute(MappedAttribute*);
-        
-        virtual SVGFEDisplacementMap* filterEffect() const;
+        virtual SVGFEDisplacementMap* filterEffect(SVGResourceFilter*) const;
         
     protected:
         virtual const SVGElement* contextElement() const { return this; }
@@ -48,6 +45,7 @@ namespace WebCore {
         ANIMATED_PROPERTY_DECLARATIONS(SVGFEDisplacementMapElement, int, int, XChannelSelector, xChannelSelector)
         ANIMATED_PROPERTY_DECLARATIONS(SVGFEDisplacementMapElement, int, int, YChannelSelector, yChannelSelector)
         ANIMATED_PROPERTY_DECLARATIONS(SVGFEDisplacementMapElement, double, double, Scale, scale)
+
         mutable SVGFEDisplacementMap* m_filterEffect;
     };
 
index 3a7c962..94d56d6 100644 (file)
@@ -25,8 +25,8 @@
 
 namespace WebCore {
 
-SVGFEDistantLightElement::SVGFEDistantLightElement(const QualifiedName& tagName, Document* doc) : 
-    SVGFELightElement(tagName, doc)
+SVGFEDistantLightElement::SVGFEDistantLightElement(const QualifiedName& tagName, Document* doc)
+    SVGFELightElement(tagName, doc)
 {
 }
 
@@ -40,5 +40,5 @@ SVGLightSource* SVGFEDistantLightElement::lightSource() const
 }
 
 }
-#endif // ENABLE(SVG)
 
+#endif // ENABLE(SVG)
index 570023a..b1c2407 100644 (file)
@@ -19,8 +19,8 @@
 
 #ifndef SVGFEDistantLightElement_h
 #define SVGFEDistantLightElement_h
-#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 
+#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 #include "SVGFELightElement.h"
 
 namespace WebCore
@@ -30,7 +30,8 @@ namespace WebCore
     public:
         SVGFEDistantLightElement(const QualifiedName&, Document*);
         virtual ~SVGFEDistantLightElement();
-        virtual SVGLightSource *lightSource() const;
+
+        virtual SVGLightSource* lightSource() const;
     };
 
 } // namespace WebCore
index 3e4abb2..7961cd8 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005, 2007 Rob Buis <buis@kde.org>
 
     This file is part of the KDE project
@@ -55,19 +55,25 @@ void SVGFEFloodElement::parseMappedAttribute(MappedAttribute* attr)
         SVGFilterPrimitiveStandardAttributes::parseMappedAttribute(attr);
 }
 
-SVGFEFlood* SVGFEFloodElement::filterEffect() const
+SVGFEFlood* SVGFEFloodElement::filterEffect(SVGResourceFilter* filter) const
 {
     if (!m_filterEffect)
-        m_filterEffect = static_cast<SVGFEFlood*>(SVGResourceFilter::createFilterEffect(FE_FLOOD));
+        m_filterEffect = static_cast<SVGFEFlood*>(SVGResourceFilter::createFilterEffect(FE_FLOOD, filter));
     if (!m_filterEffect)
         return 0;
+
     m_filterEffect->setIn(in1());
     setStandardAttributes(m_filterEffect);
-    RenderStyle* filterStyle = const_cast<SVGFEFloodElement *>(this)->styleForRenderer(parentNode()->renderer());
-    const SVGRenderStyle* svgStyle = filterStyle->svgStyle();
-    m_filterEffect->setFloodColor(svgStyle->floodColor());
-    m_filterEffect->setFloodOpacity(svgStyle->floodOpacity());
-    filterStyle->deref(document()->renderArena());
+
+    SVGFEFloodElement* nonConstThis = const_cast<SVGFEFloodElement*>(this);
+
+    RenderStyle* parentStyle = 0;
+    if (!renderer())
+        parentStyle = nonConstThis->styleForRenderer(parent()->renderer());
+
+    RenderStyle* filterStyle = nonConstThis->resolveStyle(parentStyle);
+    m_filterEffect->setFloodColor(filterStyle->svgStyle()->floodColor());
+    m_filterEffect->setFloodOpacity(filterStyle->svgStyle()->floodOpacity());
 
     return m_filterEffect;
 }
index e32b15c..9b5c025 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
 
     This file is part of the KDE project
 
 #ifndef SVGFEFloodElement_h
 #define SVGFEFloodElement_h
-#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 
+#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 #include "SVGFilterPrimitiveStandardAttributes.h"
 #include "SVGFEFlood.h"
 
 namespace WebCore
 {
-
     class SVGFEFloodElement : public SVGFilterPrimitiveStandardAttributes
     {
     public:
         SVGFEFloodElement(const QualifiedName&, Document*);
         virtual ~SVGFEFloodElement();
 
-        // 'SVGFEFloodElement' functions
-        // Derived from: 'Element'
-        virtual void parseMappedAttribute(MappedAttribute *attr);
-
-        virtual SVGFEFlood *filterEffect() const;
+        virtual void parseMappedAttribute(MappedAttribute*);
+        virtual SVGFEFlood* filterEffect(SVGResourceFilter*) const;
 
     protected:
         virtual const SVGElement* contextElement() const { return this; }
 
     private:
         ANIMATED_PROPERTY_DECLARATIONS(SVGFEFloodElement, String, String, In1, in1)
+
         mutable SVGFEFlood *m_filterEffect;
     };
 
index d9a15fe..4e88464 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005, 2006 Rob Buis <buis@kde.org>
 
     This file is part of the KDE project
index fbfd823..63d1ffa 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
 
     This file is part of the KDE project
@@ -22,8 +22,8 @@
 
 #ifndef SVGFEFuncAElement_h
 #define SVGFEFuncAElement_h
-#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 
+#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 #include "SVGComponentTransferFunctionElement.h"
 
 namespace WebCore
index e031437..63fd67e 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005, 2006 Rob Buis <buis@kde.org>
 
     This file is part of the KDE project
index 3c9e9f4..2217246 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
 
     This file is part of the KDE project
@@ -22,8 +22,8 @@
 
 #ifndef SVGFEFuncBElement_h
 #define SVGFEFuncBElement_h
-#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 
+#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 #include "SVGComponentTransferFunctionElement.h"
 
 namespace WebCore
index 8c79cef..945f3c2 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005, 2006 Rob Buis <buis@kde.org>
 
     This file is part of the KDE project
@@ -27,8 +27,8 @@
 
 namespace WebCore {
 
-SVGFEFuncGElement::SVGFEFuncGElement(const QualifiedName& tagName, Document* doc) : 
-    SVGComponentTransferFunctionElement(tagName, doc)
+SVGFEFuncGElement::SVGFEFuncGElement(const QualifiedName& tagName, Document* doc)
+    SVGComponentTransferFunctionElement(tagName, doc)
 {
 }
 
index 5161524..513927c 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
 
     This file is part of the KDE project
@@ -22,8 +22,8 @@
 
 #ifndef SVGFEFuncGElement_h
 #define SVGFEFuncGElement_h
-#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 
+#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 #include "SVGComponentTransferFunctionElement.h"
 
 namespace WebCore
index adf9eaa..b404bbc 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005, 2006 Rob Buis <buis@kde.org>
 
     This file is part of the KDE project
index bfa0c3b..e440d52 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
 
     This file is part of the KDE project
@@ -22,8 +22,8 @@
 
 #ifndef SVGFEFuncRElement_h
 #define SVGFEFuncRElement_h
-#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 
+#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 #include "SVGComponentTransferFunctionElement.h"
 
 namespace WebCore
index b782dca..bfff559 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005, 2006 Rob Buis <buis@kde.org>
 
     This file is part of the KDE project
@@ -67,16 +67,18 @@ void SVGFEGaussianBlurElement::parseMappedAttribute(MappedAttribute* attr)
         SVGFilterPrimitiveStandardAttributes::parseMappedAttribute(attr);
 }
 
-SVGFEGaussianBlur* SVGFEGaussianBlurElement::filterEffect() const
+SVGFEGaussianBlur* SVGFEGaussianBlurElement::filterEffect(SVGResourceFilter* filter) const
 {
     if (!m_filterEffect)
-        m_filterEffect = static_cast<SVGFEGaussianBlur*>(SVGResourceFilter::createFilterEffect(FE_GAUSSIAN_BLUR));
+        m_filterEffect = static_cast<SVGFEGaussianBlur*>(SVGResourceFilter::createFilterEffect(FE_GAUSSIAN_BLUR, filter));
     if (!m_filterEffect)
         return 0;
+
     m_filterEffect->setIn(in1());
-    setStandardAttributes(m_filterEffect);
     m_filterEffect->setStdDeviationX(stdDeviationX());
     m_filterEffect->setStdDeviationY(stdDeviationY());
+
+    setStandardAttributes(m_filterEffect); 
     return m_filterEffect;
 }
 
index f31c745..784eed1 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005, 2006 Rob Buis <buis@kde.org>
 
     This file is part of the KDE project
@@ -22,8 +22,8 @@
 
 #ifndef SVGFEGaussianBlurElement_h
 #define SVGFEGaussianBlurElement_h
-#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 
+#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 #include "SVGFEGaussianBlur.h"
 #include "SVGFilterPrimitiveStandardAttributes.h"
 
@@ -36,13 +36,10 @@ namespace WebCore
         SVGFEGaussianBlurElement(const QualifiedName&, Document*);
         virtual ~SVGFEGaussianBlurElement();
 
-        // 'SVGFEGaussianBlurElement' functions
         void setStdDeviation(float stdDeviationX, float stdDeviationY);
 
-        // Derived from: 'Element'
-        virtual void parseMappedAttribute(MappedAttribute* attr);
-
-        virtual SVGFEGaussianBlur* filterEffect() const;
+        virtual void parseMappedAttribute(MappedAttribute*);
+        virtual SVGFEGaussianBlur* filterEffect(SVGResourceFilter*) const;
 
     protected:
         virtual const SVGElement* contextElement() const { return this; }
@@ -51,6 +48,7 @@ namespace WebCore
         ANIMATED_PROPERTY_DECLARATIONS(SVGFEGaussianBlurElement, String, String, In1, in1)
         ANIMATED_PROPERTY_DECLARATIONS(SVGFEGaussianBlurElement, double, double, StdDeviationX, stdDeviationX)
         ANIMATED_PROPERTY_DECLARATIONS(SVGFEGaussianBlurElement, double, double, StdDeviationY, stdDeviationY)
+
         mutable SVGFEGaussianBlur* m_filterEffect;
     };
 
index 7a166de..e36513c 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
 
     This file is part of the KDE project
@@ -86,16 +86,21 @@ void SVGFEImageElement::parseMappedAttribute(MappedAttribute* attr)
 
 void SVGFEImageElement::notifyFinished(CachedResource* finishedObj)
 {
-    if (finishedObj == m_cachedImage && filterEffect())
-        filterEffect()->setCachedImage(m_cachedImage);
+    if (finishedObj == m_cachedImage && m_filterEffect)
+        m_filterEffect->setCachedImage(m_cachedImage);
 }
 
-SVGFEImage* SVGFEImageElement::filterEffect() const
+SVGFEImage* SVGFEImageElement::filterEffect(SVGResourceFilter* filter) const
 {
     if (!m_filterEffect)
-        m_filterEffect = static_cast<SVGFEImage*>(SVGResourceFilter::createFilterEffect(FE_IMAGE));
+        m_filterEffect = static_cast<SVGFEImage*>(SVGResourceFilter::createFilterEffect(FE_IMAGE, filter));
     if (!m_filterEffect)
         return 0;
+
+    // The resource may already be loaded!
+    if (m_cachedImage)
+        m_filterEffect->setCachedImage(m_cachedImage);
+
     setStandardAttributes(m_filterEffect);
     return m_filterEffect;
 }
index ca4e349..e3eb20a 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
 
     This file is part of the KDE project
@@ -22,8 +22,8 @@
 
 #ifndef SVGFEImageElement_h
 #define SVGFEImageElement_h
-#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 
+#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 #include "SVGFilterPrimitiveStandardAttributes.h"
 #include "SVGURIReference.h"
 #include "SVGLangSpace.h"
@@ -34,21 +34,20 @@ namespace WebCore {
     class SVGPreserveAspectRatio;
 
     class SVGFEImageElement : public SVGFilterPrimitiveStandardAttributes,
-                                  public SVGURIReference,
-                                  public SVGLangSpace,
-                                  public SVGExternalResourcesRequired,
-                                  public CachedResourceClient
+                              public SVGURIReference,
+                              public SVGLangSpace,
+                              public SVGExternalResourcesRequired,
+                              public CachedResourceClient
     {
     public:
         SVGFEImageElement(const QualifiedName&, Document*);
         virtual ~SVGFEImageElement();
 
-        // 'SVGFEImageElement' functions
-        virtual void parseMappedAttribute(MappedAttribute *attr);
-        virtual void notifyFinished(CachedResource *finishedObj);
+        virtual void parseMappedAttribute(MappedAttribute*);
+        virtual void notifyFinished(CachedResource*);
 
     protected:
-        virtual SVGFEImage *filterEffect() const;
+        virtual SVGFEImage* filterEffect(SVGResourceFilter*) const;
 
     protected:
         virtual const SVGElement* contextElement() const { return this; }
@@ -59,8 +58,8 @@ namespace WebCore {
  
         ANIMATED_PROPERTY_DECLARATIONS(SVGFEImageElement, SVGPreserveAspectRatio*, RefPtr<SVGPreserveAspectRatio>, PreserveAspectRatio, preserveAspectRatio)
 
-        CachedImage *m_cachedImage;
-        mutable SVGFEImage *m_filterEffect;
+        CachedImagem_cachedImage;
+        mutable SVGFEImagem_filterEffect;
     };
 
 } // namespace WebCore
index ae81688..53460ac 100644 (file)
@@ -1,7 +1,7 @@
 /*
-    Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005, 2006 Rob Buis <buis@kde.org>
-                  2005 Oliver Hunt <ojh16@student.canterbury.ac.nz>
+                  2005 Oliver Hunt <oliver@nerget.com>
 
     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Library General Public
@@ -38,7 +38,7 @@ SVGFELightElement::SVGFELightElement(const QualifiedName& tagName, Document* doc
     , m_pointsAtX(0.0)
     , m_pointsAtY(0.0)
     , m_pointsAtZ(0.0)
-    , m_specularExponent(0.0)
+    , m_specularExponent(1.0)
     , m_limitingConeAngle(0.0)
 {
 }
index d6ddccf..b54201d 100644 (file)
@@ -1,7 +1,7 @@
 /*
-    Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005, 2006 Rob Buis <buis@kde.org>
-                  2005 Oliver Hunt <ojh16@student.canterbury.ac.nz>
+                  2005 Oliver Hunt <oliver@nerget.com>
 
     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Library General Public
@@ -21,8 +21,8 @@
 
 #ifndef SVGFELightElement_h
 #define SVGFELightElement_h
-#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 
+#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 #include "SVGElement.h"
 #include "SVGLightSource.h"
 
@@ -36,11 +36,9 @@ namespace WebCore
         SVGFELightElement(const QualifiedName&, Document*);
         virtual ~SVGFELightElement();
         
-        // 'SVGComponentTransferFunctionElement' functions
         virtual SVGLightSource* lightSource() const = 0;
-        
-        // Derived from: 'Element'
-        virtual void parseMappedAttribute(MappedAttribute* attr);        
+        virtual void parseMappedAttribute(MappedAttribute*);
+
     private:
         ANIMATED_PROPERTY_DECLARATIONS(SVGFELightElement, double, double, Azimuth, azimuth)
         ANIMATED_PROPERTY_DECLARATIONS(SVGFELightElement, double, double, Elevation, elevation)
index 89ca162..1ede4c5 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005, 2006 Rob Buis <buis@kde.org>
 
     This file is part of the KDE project
@@ -41,12 +41,13 @@ SVGFEMergeElement::~SVGFEMergeElement()
     delete m_filterEffect;
 }
 
-SVGFEMerge* SVGFEMergeElement::filterEffect() const
+SVGFEMerge* SVGFEMergeElement::filterEffect(SVGResourceFilter* filter) const
 {
     if (!m_filterEffect)
-        m_filterEffect = static_cast<SVGFEMerge*>(SVGResourceFilter::createFilterEffect(FE_MERGE));
+        m_filterEffect = static_cast<SVGFEMerge*>(SVGResourceFilter::createFilterEffect(FE_MERGE, filter));
     if (!m_filterEffect)
         return 0;
+
     setStandardAttributes(m_filterEffect);
 
     Vector<String> mergeInputs;
@@ -61,7 +62,6 @@ SVGFEMerge* SVGFEMergeElement::filterEffect() const
 
 }
 
-
 #endif // ENABLE(SVG)
 
 // vim:ts=4:noet
index ad90268..abb525d 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005, 2006 Rob Buis <buis@kde.org>
 
     This file is part of the KDE project
@@ -22,8 +22,8 @@
 
 #ifndef SVGFEMergeElement_h
 #define SVGFEMergeElement_h
-#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 
+#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 #include "SVGFEMerge.h"
 #include "SVGFilterPrimitiveStandardAttributes.h"
 
@@ -35,7 +35,7 @@ namespace WebCore
         SVGFEMergeElement(const QualifiedName&, Document*);
         virtual ~SVGFEMergeElement();
 
-        virtual SVGFEMerge* filterEffect() const;
+        virtual SVGFEMerge* filterEffect(SVGResourceFilter*) const;
 
     protected:
         virtual const SVGElement* contextElement() const { return this; }
@@ -48,4 +48,3 @@ namespace WebCore
 
 #endif // ENABLE(SVG)
 #endif
-
index 4c5c31d..d8f559e 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005, 2006 Rob Buis <buis@kde.org>
 
     This file is part of the KDE project
index e7acca9..469382e 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005, 2006 Rob Buis <buis@kde.org>
 
     This file is part of the KDE project
@@ -22,9 +22,9 @@
 
 #ifndef SVGFEMergeNodeElement_h
 #define SVGFEMergeNodeElement_h
-#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 
-#include <SVGElement.h>
+#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
+#include "SVGElement.h"
 
 namespace WebCore
 {
@@ -34,11 +34,8 @@ namespace WebCore
         SVGFEMergeNodeElement(const QualifiedName&, Document*);
         virtual ~SVGFEMergeNodeElement();
 
-        // Derived from: 'Element'
-        virtual void parseMappedAttribute(MappedAttribute* attr);
+        virtual void parseMappedAttribute(MappedAttribute*);
 
-        // 'SVGFEMergeNodeElement' functions
-    
     protected:
         virtual const SVGElement* contextElement() const { return this; }
 
index aeda1b6..30de863 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
 
     This file is part of the KDE project
@@ -26,7 +26,6 @@
 #include "SVGFEOffsetElement.h"
 
 #include "Attr.h"
-#include "SVGRenderStyle.h"
 #include "SVGResourceFilter.h"
 
 namespace WebCore {
@@ -61,16 +60,18 @@ void SVGFEOffsetElement::parseMappedAttribute(MappedAttribute* attr)
         SVGFilterPrimitiveStandardAttributes::parseMappedAttribute(attr);
 }
 
-SVGFEOffset* SVGFEOffsetElement::filterEffect() const
+SVGFEOffset* SVGFEOffsetElement::filterEffect(SVGResourceFilter* filter) const
 {
     if (!m_filterEffect)
-        m_filterEffect = static_cast<SVGFEOffset*>(SVGResourceFilter::createFilterEffect(FE_OFFSET));
+        m_filterEffect = static_cast<SVGFEOffset*>(SVGResourceFilter::createFilterEffect(FE_OFFSET, filter));
     if (!m_filterEffect)
         return 0;
+
     m_filterEffect->setIn(in1());
-    setStandardAttributes(m_filterEffect);
     m_filterEffect->setDx(dx());
     m_filterEffect->setDy(dy());
+
+    setStandardAttributes(m_filterEffect); 
     return m_filterEffect;
 }
 
index 57f07d1..2ece528 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
 
     This file is part of the KDE project
@@ -22,8 +22,8 @@
 
 #ifndef SVGFEOffsetElement_h
 #define SVGFEOffsetElement_h
-#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 
+#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 #include "SVGFilterPrimitiveStandardAttributes.h"
 #include "SVGFEOffset.h"
 
@@ -36,11 +36,8 @@ namespace WebCore
         SVGFEOffsetElement(const QualifiedName&, Document*);
         virtual ~SVGFEOffsetElement();
 
-        // 'SVGFEOffsetElement' functions
-        // Derived from: 'Element'
-        virtual void parseMappedAttribute(MappedAttribute *attr);
-
-        virtual SVGFEOffset *filterEffect() const;
+        virtual void parseMappedAttribute(MappedAttribute*);
+        virtual SVGFEOffset* filterEffect(SVGResourceFilter*) const;
 
     protected:
         virtual const SVGElement* contextElement() const { return this; }
@@ -49,7 +46,8 @@ namespace WebCore
         ANIMATED_PROPERTY_DECLARATIONS(SVGFEOffsetElement, String, String, In1, in1)
         ANIMATED_PROPERTY_DECLARATIONS(SVGFEOffsetElement, double, double, Dx, dx)
         ANIMATED_PROPERTY_DECLARATIONS(SVGFEOffsetElement, double, double, Dy, dy)
-        mutable SVGFEOffset *m_filterEffect;
+
+        mutable SVGFEOffset* m_filterEffect;
     };
 
 } // namespace WebCore
index 2a4681b..e79d15e 100644 (file)
@@ -19,8 +19,8 @@
 
 #ifndef SVGFEPointLightElement_h
 #define SVGFEPointLightElement_h
-#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 
+#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 #include "SVGFELightElement.h"
 
 namespace WebCore
@@ -30,7 +30,8 @@ namespace WebCore
         public:
         SVGFEPointLightElement(const QualifiedName&, Document*);
         virtual ~SVGFEPointLightElement();
-        virtual SVGLightSource *lightSource() const;
+
+        virtual SVGLightSource* lightSource() const;
     };
 
 } // namespace WebCore
index 915c040..95ffb1a 100644 (file)
@@ -1,7 +1,7 @@
 /*
-    Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005, 2006 Rob Buis <buis@kde.org>
-                  2005 Oliver Hunt <ojh16@student.canterbury.ac.nz>
+                  2005 Oliver Hunt <oliver@nerget.com>
 
     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Library General Public
@@ -24,6 +24,7 @@
 #if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 #include "SVGFESpecularLightingElement.h"
 
+#include "RenderObject.h"
 #include "SVGColor.h"
 #include "SVGNames.h"
 #include "SVGFELightElement.h"
@@ -34,10 +35,9 @@ namespace WebCore {
 
 SVGFESpecularLightingElement::SVGFESpecularLightingElement(const QualifiedName& tagName, Document* doc)
     : SVGFilterPrimitiveStandardAttributes(tagName, doc)
-    , m_specularConstant(0.0)
-    , m_specularExponent(0.0)
-    , m_surfaceScale(0.0)
-    , m_lightingColor(new SVGColor)
+    , m_specularConstant(1.0)
+    , m_specularExponent(1.0)
+    , m_surfaceScale(1.0)
     , m_kernelUnitLengthX(0.0)
     , m_kernelUnitLengthY(0.0)
     , m_filterEffect(0)
@@ -55,7 +55,6 @@ ANIMATED_PROPERTY_DEFINITIONS(SVGFESpecularLightingElement, double, Number, numb
 ANIMATED_PROPERTY_DEFINITIONS(SVGFESpecularLightingElement, double, Number, number, SurfaceScale, surfaceScale, SVGNames::surfaceScaleAttr.localName(), m_surfaceScale)
 ANIMATED_PROPERTY_DEFINITIONS(SVGFESpecularLightingElement, double, Number, number, KernelUnitLengthX, kernelUnitLengthX, "kernelUnitLengthX", m_kernelUnitLengthX)
 ANIMATED_PROPERTY_DEFINITIONS(SVGFESpecularLightingElement, double, Number, number, KernelUnitLengthY, kernelUnitLengthY, "kernelUnitLengthY", m_kernelUnitLengthY)
-ANIMATED_PROPERTY_DEFINITIONS(SVGFESpecularLightingElement, SVGColor*, Color, color, LightingColor, lightingColor, SVGNames::lighting_colorAttr.localName(), m_lightingColor.get())
 
 void SVGFESpecularLightingElement::parseMappedAttribute(MappedAttribute* attr)
 {    
@@ -74,26 +73,35 @@ void SVGFESpecularLightingElement::parseMappedAttribute(MappedAttribute* attr)
             setKernelUnitLengthXBaseValue(x);
             setKernelUnitLengthYBaseValue(y);
         }
-    } else if (attr->name() == SVGNames::lighting_colorAttr)
-        setLightingColorBaseValue(new SVGColor(value));
-    else
+    } else
         SVGFilterPrimitiveStandardAttributes::parseMappedAttribute(attr);
 }
 
-SVGFESpecularLighting* SVGFESpecularLightingElement::filterEffect() const
+SVGFESpecularLighting* SVGFESpecularLightingElement::filterEffect(SVGResourceFilter* filter) const
 {
     if (!m_filterEffect) 
-        m_filterEffect = static_cast<SVGFESpecularLighting*>(SVGResourceFilter::createFilterEffect(FE_SPECULAR_LIGHTING));
+        m_filterEffect = static_cast<SVGFESpecularLighting*>(SVGResourceFilter::createFilterEffect(FE_SPECULAR_LIGHTING, filter));
     if (!m_filterEffect)
         return 0;
+
     m_filterEffect->setIn(in1());
-    setStandardAttributes(m_filterEffect);
     m_filterEffect->setSpecularConstant((specularConstant()));
     m_filterEffect->setSpecularExponent((specularExponent()));
     m_filterEffect->setSurfaceScale((surfaceScale()));
     m_filterEffect->setKernelUnitLengthX((kernelUnitLengthX()));
     m_filterEffect->setKernelUnitLengthY((kernelUnitLengthY()));
-    m_filterEffect->setLightingColor(lightingColor()->color());
+
+    SVGFESpecularLightingElement* nonConstThis = const_cast<SVGFESpecularLightingElement*>(this);
+
+    RenderStyle* parentStyle = 0;
+    if (!renderer())
+        parentStyle = nonConstThis->styleForRenderer(parent()->renderer());
+
+    RenderStyle* filterStyle = nonConstThis->resolveStyle(parentStyle);
+    m_filterEffect->setLightingColor(filterStyle->svgStyle()->lightingColor());
+
+    setStandardAttributes(m_filterEffect);
+
     updateLights();
     return m_filterEffect;
 }
@@ -113,6 +121,7 @@ void SVGFESpecularLightingElement::updateLights() const
             break;
         }
     }
+
     m_filterEffect->setLightSource(light);
 }
 
index 2019237..5d4dee9 100644 (file)
@@ -1,7 +1,7 @@
 /*
-    Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005, 2006 Rob Buis <buis@kde.org>
-                  2005 Oliver Hunt <ojh16@student.canterbury.ac.nz>
+                  2005 Oliver Hunt <oliver@nerget.com>
 
     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Library General Public
@@ -21,8 +21,8 @@
 
 #ifndef SVGFESpecularLightingElement_h
 #define SVGFESpecularLightingElement_h
-#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 
+#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 #include "SVGFESpecularLighting.h"
 #include "SVGFilterPrimitiveStandardAttributes.h"
 
@@ -36,11 +36,8 @@ namespace WebCore
         SVGFESpecularLightingElement(const QualifiedName&, Document*);
         virtual ~SVGFESpecularLightingElement();
         
-        // 'SVGFEDiffuseLightingElement' functions
-        // Derived from: 'Element'
-        virtual void parseMappedAttribute(MappedAttribute* attr);
-        
-        virtual SVGFESpecularLighting* filterEffect() const;
+        virtual void parseMappedAttribute(MappedAttribute*);
+        virtual SVGFESpecularLighting* filterEffect(SVGResourceFilter*) const;
 
     protected:
         virtual const SVGElement* contextElement() const { return this; }
@@ -50,13 +47,11 @@ namespace WebCore
         ANIMATED_PROPERTY_DECLARATIONS(SVGFESpecularLightingElement, double, double, SpecularConstant, specularConstant)
         ANIMATED_PROPERTY_DECLARATIONS(SVGFESpecularLightingElement, double, double, SpecularExponent, specularExponent)
         ANIMATED_PROPERTY_DECLARATIONS(SVGFESpecularLightingElement, double, double, SurfaceScale, surfaceScale)
-        ANIMATED_PROPERTY_DECLARATIONS(SVGFESpecularLightingElement, SVGColor*, RefPtr<SVGColor>, LightingColor, lightingColor)
         ANIMATED_PROPERTY_DECLARATIONS(SVGFESpecularLightingElement, double, double, KernelUnitLengthX, kernelUnitLengthX)
         ANIMATED_PROPERTY_DECLARATIONS(SVGFESpecularLightingElement, double, double, KernelUnitLengthY, kernelUnitLengthY)
-        //need other properties here...
+
         mutable SVGFESpecularLighting* m_filterEffect;
         
-        //light management
         void updateLights() const;
     };
 
index 9fb603f..68301cf 100644 (file)
@@ -40,8 +40,9 @@ SVGLightSource* SVGFESpotLightElement::lightSource() const
 
     // convert lookAt to a direction
     FloatPoint3D direction(pointsAtX() - pos.x(), 
-                             pointsAtY() - pos.y(), 
-                             pointsAtZ() - pos.z());
+                           pointsAtY() - pos.y(), 
+                           pointsAtZ() - pos.z());
+
     direction.normalize();
     return new SVGSpotLightSource(pos, direction, specularExponent(), limitingConeAngle());
 }
index e3f2569..b109d55 100644 (file)
@@ -19,8 +19,8 @@
 
 #ifndef SVGFESpotLightElement_h
 #define SVGFESpotLightElement_h
-#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 
+#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 #include "SVGFELightElement.h"
 
 namespace WebCore
@@ -30,7 +30,8 @@ namespace WebCore
     public:
         SVGFESpotLightElement(const QualifiedName&, Document*);
         virtual ~SVGFESpotLightElement();
-        virtual SVGLightSource *lightSource() const;
+
+        virtual SVGLightSource* lightSource() const;
     };
 
 } // namespace WebCore
index 208399f..0e54d30 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
 
     This file is part of the KDE project
@@ -53,13 +53,15 @@ void SVGFETileElement::parseMappedAttribute(MappedAttribute* attr)
         SVGFilterPrimitiveStandardAttributes::parseMappedAttribute(attr);
 }
 
-SVGFETile* SVGFETileElement::filterEffect() const
+SVGFETile* SVGFETileElement::filterEffect(SVGResourceFilter* filter) const
 {
     if (!m_filterEffect)
-        m_filterEffect = static_cast<SVGFETile*>(SVGResourceFilter::createFilterEffect(FE_TILE));
+        m_filterEffect = static_cast<SVGFETile*>(SVGResourceFilter::createFilterEffect(FE_TILE, filter));
     if (!m_filterEffect)
         return 0;
+
     m_filterEffect->setIn(in1());
+
     setStandardAttributes(m_filterEffect);
     return m_filterEffect;
 }
index fe5c73f..0a11d56 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
 
     This file is part of the KDE project
@@ -22,8 +22,8 @@
 
 #ifndef SVGFETileElement_h
 #define SVGFETileElement_h
-#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 
+#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 #include "SVGFilterPrimitiveStandardAttributes.h"
 #include "SVGFETile.h"
 
@@ -36,18 +36,16 @@ namespace WebCore
         SVGFETileElement(const QualifiedName&, Document*);
         virtual ~SVGFETileElement();
 
-        // 'SVGFETileElement' functions
-        // Derived from: 'Element'
-        virtual void parseMappedAttribute(MappedAttribute *attr);
-
-        virtual SVGFETile *filterEffect() const;
+        virtual void parseMappedAttribute(MappedAttribute*);
+        virtual SVGFETile* filterEffect(SVGResourceFilter*) const;
 
     protected:
         virtual const SVGElement* contextElement() const { return this; }
 
     private:
         ANIMATED_PROPERTY_DECLARATIONS(SVGFETileElement, String, String, In1, in1)
-        mutable SVGFETile *m_filterEffect;
+
+        mutable SVGFETile* m_filterEffect;
     };
 
 } // namespace WebCore
index c3c895b..34848ef 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005, 2006 Rob Buis <buis@kde.org>
 
     This file is part of the KDE project
@@ -34,10 +34,10 @@ SVGFETurbulenceElement::SVGFETurbulenceElement(const QualifiedName& tagName, Doc
     : SVGFilterPrimitiveStandardAttributes(tagName, doc)
     , m_baseFrequencyX(0.0)
     , m_baseFrequencyY(0.0)
-    , m_numOctaves(0)
+    , m_numOctaves(1)
     , m_seed(0.0)
-    , m_stitchTiles(0)
-    , m_type(0)
+    , m_stitchTiles(SVG_STITCHTYPE_NOSTITCH)
+    , m_type(SVG_TURBULENCE_TYPE_TURBULENCE)
     , m_filterEffect(0)
 {
 }
@@ -81,20 +81,21 @@ void SVGFETurbulenceElement::parseMappedAttribute(MappedAttribute* attr)
         SVGFilterPrimitiveStandardAttributes::parseMappedAttribute(attr);
 }
 
-SVGFETurbulence* SVGFETurbulenceElement::filterEffect() const
+SVGFETurbulence* SVGFETurbulenceElement::filterEffect(SVGResourceFilter* filter) const
 {
     if (!m_filterEffect)
-        m_filterEffect = static_cast<SVGFETurbulence*>(SVGResourceFilter::createFilterEffect(FE_TURBULENCE));
+        m_filterEffect = static_cast<SVGFETurbulence*>(SVGResourceFilter::createFilterEffect(FE_TURBULENCE, filter));
     if (!m_filterEffect)
         return 0;
     
     m_filterEffect->setType((SVGTurbulanceType) type());
-    setStandardAttributes(m_filterEffect);
     m_filterEffect->setBaseFrequencyX(baseFrequencyX());
     m_filterEffect->setBaseFrequencyY(baseFrequencyY());
     m_filterEffect->setNumOctaves(numOctaves());
     m_filterEffect->setSeed(seed());
     m_filterEffect->setStitchTiles(stitchTiles() == SVG_STITCHTYPE_STITCH);
+
+    setStandardAttributes(m_filterEffect); 
     return m_filterEffect;
 }
 
index 1561148..2238751 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005, 2006 Rob Buis <buis@kde.org>
 
     This file is part of the KDE project
@@ -22,8 +22,8 @@
 
 #ifndef SVGFETurbulenceElement_h
 #define SVGFETurbulenceElement_h
-#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 
+#if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 #include "SVGFETurbulence.h"
 #include "SVGFilterPrimitiveStandardAttributes.h"
 
@@ -41,11 +41,8 @@ namespace WebCore
         SVGFETurbulenceElement(const QualifiedName&, Document*);
         virtual ~SVGFETurbulenceElement();
 
-        // 'SVGFETurbulenceElement' functions
-        // Derived from: 'Element'
-        virtual void parseMappedAttribute(MappedAttribute* attr);
-
-        virtual SVGFETurbulence* filterEffect() const;
+        virtual void parseMappedAttribute(MappedAttribute*);
+        virtual SVGFETurbulence* filterEffect(SVGResourceFilter*) const;
 
     protected:
         virtual const SVGElement* contextElement() const { return this; }
@@ -57,6 +54,7 @@ namespace WebCore
         ANIMATED_PROPERTY_DECLARATIONS(SVGFETurbulenceElement, double, double, Seed, seed)
         ANIMATED_PROPERTY_DECLARATIONS(SVGFETurbulenceElement, int, int, StitchTiles, stitchTiles)
         ANIMATED_PROPERTY_DECLARATIONS(SVGFETurbulenceElement, int, int, Type, type)
+
         mutable SVGFETurbulence* m_filterEffect;
     };
 
index ad209b0..e6f03f7 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
     Copyright (C) 2004, 2005, 2006 Rob Buis <buis@kde.org>
     Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
 
@@ -116,44 +116,42 @@ SVGResource* SVGFilterElement::canvasResource()
     bool filterBBoxMode = filterUnits() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX;
     m_filter->setFilterBoundingBoxMode(filterBBoxMode);
 
-    float _x, _y, w, h;
+    float _x, _y, _width, _height;
 
-    if (filterBBoxMode && x().unitType() == LengthTypePercentage)
-        _x = x().valueInSpecifiedUnits() / 100.0;
-    else
-        _x = x().value();
+    if (filterBBoxMode) {
+        _x = x().valueAsPercentage();
+        _y = y().valueAsPercentage();
+        _width = width().valueAsPercentage();
+        _height = height().valueAsPercentage();
+    } else {
+        m_filter->setXBoundingBoxMode(x().unitType() == LengthTypePercentage);
+        m_filter->setYBoundingBoxMode(y().unitType() == LengthTypePercentage);
 
-    if (filterBBoxMode && y().unitType() == LengthTypePercentage)
-        _y = y().valueInSpecifiedUnits() / 100.0;
-    else
+        _x = x().value();
         _y = y().value();
+        _width = width().value();
+        _height = height().value();
+    } 
 
-    if (filterBBoxMode && width().unitType() == LengthTypePercentage)
-        w = width().valueInSpecifiedUnits() / 100.0;
-    else
-        w = width().value();
-
-    if (filterBBoxMode && height().unitType() == LengthTypePercentage)
-        h = height().valueInSpecifiedUnits() / 100.0;
-    else
-        h = height().value();
-
-    m_filter->setFilterRect(FloatRect(_x, _y, w, h));
+    m_filter->setFilterRect(FloatRect(_x, _y, _width, _height));
 
     bool primitiveBBoxMode = primitiveUnits() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX;
     m_filter->setEffectBoundingBoxMode(primitiveBBoxMode);
-    // FIXME: When does this info get passed to the filters elements?
 
     // TODO : use switch/case instead?
     m_filter->clearEffects();
     for (Node* n = firstChild(); n != 0; n = n->nextSibling()) {
         SVGElement* element = svg_dynamic_cast(n);
         if (element && element->isFilterEffect()) {
-            SVGFilterPrimitiveStandardAttributes* fe = static_cast<SVGFilterPrimitiveStandardAttributes*>(element);
-            if (fe->filterEffect())
-                m_filter->addFilterEffect(fe->filterEffect());
+            SVGFilterPrimitiveStandardAttributes* filterAttributes = static_cast<SVGFilterPrimitiveStandardAttributes*>(element);
+            SVGFilterEffect* filterEffect = filterAttributes->filterEffect(m_filter.get());
+            if (!filterEffect)
+                continue;
+
+            m_filter->addFilterEffect(filterEffect);
         }
     }
+
     return m_filter.get();
 }
 
index 840b115..acd0d3a 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
     Copyright (C) 2004, 2005, 2006 Rob Buis <buis@kde.org>
     Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
 
@@ -25,7 +25,6 @@
 #define SVGFilterElement_h
 
 #if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
-
 #include "SVGResourceFilter.h"
 #include "SVGExternalResourcesRequired.h"
 #include "SVGLangSpace.h"
@@ -46,11 +45,9 @@ namespace WebCore {
 
         virtual SVGResource* canvasResource();
 
-        // 'SVGFilterElement' functions
         void setFilterRes(unsigned long filterResX, unsigned long filterResY) const;
 
-        virtual void parseMappedAttribute(MappedAttribute* attr);
-
+        virtual void parseMappedAttribute(MappedAttribute*);
         virtual bool rendererIsNeeded(RenderStyle*) { return false; }
 
     protected:
index 9a137cc..de2f552 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005, 2006 Rob Buis <buis@kde.org>
 
     This file is part of the KDE project
@@ -41,6 +41,10 @@ SVGFilterPrimitiveStandardAttributes::SVGFilterPrimitiveStandardAttributes(const
     , m_width(this, LengthModeWidth)
     , m_height(this, LengthModeHeight)
 {
+    // Spec: If the attribute is not specified, the effect is as if a value of "0%" were specified.
+    setXBaseValue(SVGLength(this, LengthModeWidth, "0%"));
+    setYBaseValue(SVGLength(this, LengthModeHeight, "0%"));
+
     // Spec: If the attribute is not specified, the effect is as if a value of "100%" were specified.
     setWidthBaseValue(SVGLength(this, LengthModeWidth, "100%"));
     setHeightBaseValue(SVGLength(this, LengthModeHeight, "100%"));
@@ -79,24 +83,50 @@ void SVGFilterPrimitiveStandardAttributes::setStandardAttributes(SVGFilterEffect
     if (!filterEffect)
         return;
 
-    bool bbox = false;
-    if (parentNode() && parentNode()->hasTagName(SVGNames::filterTag))
-        bbox = static_cast<SVGFilterElement*>(parentNode())->primitiveUnits() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX;
+    ASSERT(filterEffect->filter());
 
     float _x, _y, _width, _height;
-  
-    if (bbox) {
-        _x = x().valueInSpecifiedUnits();
-        _y = y().valueInSpecifiedUnits();
-        _width = width().valueInSpecifiedUnits();
-        _height = height().valueInSpecifiedUnits();
+
+    if (filterEffect->filter()->effectBoundingBoxMode()) {
+        _x = x().valueAsPercentage();
+        _y = y().valueAsPercentage();
+        _width = width().valueAsPercentage();
+        _height = height().valueAsPercentage();
     } else {
-        _x = x().value();
-        _y = y().value();
-        _width = width().value();
-        _height = height().value();
-    } 
-    
+        // We need to resolve any percentages in filter rect space.
+        if (x().unitType() == LengthTypePercentage) {
+            filterEffect->setXBoundingBoxMode(true);
+            _x = x().valueAsPercentage();
+        } else {
+            filterEffect->setXBoundingBoxMode(false);
+            _x = x().value();
+        }
+
+        if (y().unitType() == LengthTypePercentage) {
+            filterEffect->setYBoundingBoxMode(true);
+            _y = y().valueAsPercentage();
+        } else {
+            filterEffect->setYBoundingBoxMode(false);
+            _y = y().value();
+        }
+
+        if (width().unitType() == LengthTypePercentage) {
+            filterEffect->setWidthBoundingBoxMode(true);
+            _width = width().valueAsPercentage();
+        } else {
+            filterEffect->setWidthBoundingBoxMode(false);
+            _width = width().value();
+        }
+
+        if (height().unitType() == LengthTypePercentage) {
+            filterEffect->setHeightBoundingBoxMode(true);
+            _height = height().valueAsPercentage();
+        } else {
+            filterEffect->setHeightBoundingBoxMode(false);
+            _height = height().value();
+        }
+    }
+
     filterEffect->setSubRegion(FloatRect(_x, _y, _width, _height));
     filterEffect->setResult(result());
 }
index baa42be..b639282 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005, 2006 Rob Buis <buis@kde.org>
 
     This file is part of the KDE project
 #define SVGFilterPrimitiveStandardAttributes_h
 
 #if ENABLE(SVG)
-
 #include "SVGStyledElement.h"
 
 namespace WebCore {
     class SVGFilterEffect;
+    class SVGResourceFilter;
 
     class SVGFilterPrimitiveStandardAttributes : public SVGStyledElement
     {
@@ -38,15 +38,13 @@ namespace WebCore {
         
         virtual bool isFilterEffect() const { return true; }
 
-        // 'SVGFilterPrimitiveStandardAttributes' functions
-        virtual void parseMappedAttribute(MappedAttribute *attr);
-
-        virtual SVGFilterEffect* filterEffect() const = 0;
+        virtual void parseMappedAttribute(MappedAttribute*);
+        virtual SVGFilterEffect* filterEffect(SVGResourceFilter*) const = 0;
 
         virtual bool rendererIsNeeded(RenderStyle*) { return false; }
 
     protected:
-        void setStandardAttributes(SVGFilterEffect* filterEffect) const;
+        void setStandardAttributes(SVGFilterEffect*) const;
 
     protected:
         virtual const SVGElement* contextElement() const { return this; }
index b852ee2..8e082f6 100644 (file)
@@ -115,7 +115,7 @@ SVGResource* SVGGradientElement::canvasResource()
 Vector<SVGGradientStop> SVGGradientElement::buildStops() const
 {
     Vector<SVGGradientStop> stops;
-    
+
     // FIXME: Manual style resolution is a hack
     RenderStyle* gradientStyle = 0;
     for (Node* n = firstChild(); n; n = n->nextSibling()) {
@@ -123,19 +123,11 @@ Vector<SVGGradientStop> SVGGradientElement::buildStops() const
         if (element && element->isGradientStop()) {
             SVGStopElement* stop = static_cast<SVGStopElement*>(element);
             float stopOffset = stop->offset();
-            
-            RenderStyle* stopStyle;
-            if (stop->renderer())
-                stopStyle = stop->renderer()->style();
-            else {
-                if (!gradientStyle)
-                    gradientStyle = const_cast<SVGGradientElement*>(this)->styleForRenderer(parent()->renderer());
-                // FIXME: The renderer tree has no way for us to force stops to always have a renderer
-                // (display: none) on a parent will cause them to not.  Until we have a way to force renderers
-                // we have a manual style resolution hack.
-                stopStyle = document()->styleSelector()->styleForElement(stop, gradientStyle);
-            }
-            
+
+            if (!stop->renderer() && !gradientStyle)
+                gradientStyle = const_cast<SVGGradientElement*>(this)->styleForRenderer(parent()->renderer());
+
+            RenderStyle* stopStyle = stop->resolveStyle(gradientStyle);
             Color c = stopStyle->svgStyle()->stopColor();
             float opacity = stopStyle->svgStyle()->stopOpacity();
             
index 49311b5..1c0bd30 100644 (file)
@@ -258,6 +258,14 @@ void SVGStyledElement::attributeChanged(Attribute* attr, bool preserveDecls)
     notifyAttributeChange();
 }
 
+RenderStyle* SVGStyledElement::resolveStyle(RenderStyle* parentStyle)
+{
+    if (renderer())
+        return renderer()->style();
+
+    return document()->styleSelector()->styleForElement(this, parentStyle);
+}
+
 PassRefPtr<CSSValue> SVGStyledElement::getPresentationAttribute(const String& name)
 {
     MappedAttribute* cssSVGAttr = mappedAttributes()->getAttributeItem(name);
index 9478121..c6f0dbb 100644 (file)
@@ -61,6 +61,9 @@ namespace WebCore {
 
         virtual void attributeChanged(Attribute*, bool preserveDecls = false);
 
+        // Centralized place to force a manual style resolution. Hacky but needed for now.
+        RenderStyle* resolveStyle(RenderStyle* parentStyle);
+
     protected:
         friend class RenderPath;
         void rebuildRenderer() const;
index b19a4da..9d22f1e 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
                   2005 Eric Seidel <eric.seidel@kdemail.net>
 
@@ -41,19 +41,36 @@ void SVGResourceFilter::addFilterEffect(SVGFilterEffect* effect)
 {
     ASSERT(effect);
 
-    if (effect)
+    if (effect) {
+        ASSERT(effect->filter() == this);
         m_effects.append(effect);
+    }
 }
 
-FloatRect SVGResourceFilter::filterBBoxForItemBBox(FloatRect itemBBox) const
+FloatRect SVGResourceFilter::filterBBoxForItemBBox(const FloatRect& itemBBox) const
 {
     FloatRect filterBBox = filterRect();
 
-    if (filterBoundingBoxMode())
-        filterBBox = FloatRect(filterBBox.x() * itemBBox.width(),
-                               filterBBox.y() * itemBBox.height(),
+    float xOffset = 0.0;
+    float yOffset = 0.0;
+
+    if (!effectBoundingBoxMode()) {
+        xOffset = itemBBox.x();
+        yOffset = itemBBox.y();
+    }
+
+    if (filterBoundingBoxMode()) {
+        filterBBox = FloatRect(xOffset + filterBBox.x() * itemBBox.width(),
+                               yOffset + filterBBox.y() * itemBBox.height(),
                                filterBBox.width() * itemBBox.width(),
                                filterBBox.height() * itemBBox.height());
+    } else {
+        if (xBoundingBoxMode())
+            filterBBox.setX(xOffset + filterBBox.x());
+
+        if (yBoundingBoxMode())
+            filterBBox.setY(yOffset + filterBBox.y());
+    }
 
     return filterBBox;
 }
index 29eb1f5..8309b5d 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
                   2005 Eric Seidel <eric.seidel@kdemail.net>
 
@@ -48,6 +48,8 @@ class NSMutableDictionary;
 #endif
 #endif
 
+#include <wtf/RetainPtr.h>
+
 namespace WebCore {
 
 class GraphicsContext;
@@ -59,7 +61,7 @@ public:
     SVGResourceFilter();
     virtual ~SVGResourceFilter();
 
-    static SVGFilterEffect* createFilterEffect(const SVGFilterEffectType&);
+    static SVGFilterEffect* createFilterEffect(const SVGFilterEffectType&, SVGResourceFilter*);
 
     virtual bool isFilter() const { return true; }
 
@@ -69,10 +71,16 @@ public:
     bool effectBoundingBoxMode() const { return m_effectBBoxMode; }
     void setEffectBoundingBoxMode(bool bboxMode) { m_effectBBoxMode = bboxMode; }
 
+    bool xBoundingBoxMode() const { return m_xBBoxMode; }
+    void setXBoundingBoxMode(bool bboxMode) { m_xBBoxMode = bboxMode; }
+
+    bool yBoundingBoxMode() const { return m_yBBoxMode; }
+    void setYBoundingBoxMode(bool bboxMode) { m_yBBoxMode = bboxMode; }
+
     FloatRect filterRect() const { return m_filterRect; }
     void setFilterRect(const FloatRect& rect) { m_filterRect = rect; }
 
-    FloatRect filterBBoxForItemBBox(FloatRect itemBBox) const;
+    FloatRect filterBBoxForItemBBox(const FloatRect& itemBBox) const;
 
     void clearEffects();
     void addFilterEffect(SVGFilterEffect*);
@@ -93,18 +101,21 @@ public:
 
 private:
 #if PLATFORM(CI)
-    NSArray* getCIFilterStack(CIImage* inputImage);
+    NSArray* getCIFilterStack(CIImage* inputImage, const FloatRect& bbox);
 
     CIContext* m_filterCIContext;
     CGLayerRef m_filterCGLayer;
-    NSMutableDictionary* m_imagesByName;
+    RetainPtr<NSMutableDictionary> m_imagesByName;
 #endif
 
+    bool m_filterBBoxMode : 1;
+    bool m_effectBBoxMode : 1;
+
+    bool m_xBBoxMode : 1;
+    bool m_yBBoxMode : 1;
+
     FloatRect m_filterRect;
     Vector<SVGFilterEffect*> m_effects;
-
-    bool m_filterBBoxMode;
-    bool m_effectBBoxMode;
 };
 
 SVGResourceFilter* getFilterById(Document*, const AtomicString&);
index a01cd62..ed753f4 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2005 Apple Computer, Inc.  All rights reserved.
+ *           (C) 2007 Nikolas Zimmermann <zimmermann@kde.org>
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -47,6 +48,9 @@
 
 #include <QuartzCore/CoreImage.h>
 
+// Setting to a value > 0 allows to dump the output image as JPEG.
+#define DEBUG_OUTPUT_IMAGE 0
+
 namespace WebCore {
 
 static const char* const SVGPreviousFilterOutputName = "__previousOutput__";
@@ -54,41 +58,44 @@ static const char* const SVGPreviousFilterOutputName = "__previousOutput__";
 SVGResourceFilter::SVGResourceFilter()
     : m_filterCIContext(0)
     , m_filterCGLayer(0)
+    , m_imagesByName(AdoptNS, [[NSMutableDictionary alloc] init])
+    , m_filterBBoxMode(false)
+    , m_effectBBoxMode(false)
+    , m_xBBoxMode(false)
+    , m_yBBoxMode(false)
 {
-    m_imagesByName = HardRetainWithNSRelease([[NSMutableDictionary alloc] init]);
 }
 
 SVGResourceFilter::~SVGResourceFilter()
 {
     ASSERT(!m_filterCGLayer);
     ASSERT(!m_filterCIContext);
-    HardRelease(m_imagesByName);
 }
 
-SVGFilterEffect* SVGResourceFilter::createFilterEffect(const SVGFilterEffectType& type)
+SVGFilterEffect* SVGResourceFilter::createFilterEffect(const SVGFilterEffectType& type, SVGResourceFilter* filter)
 {
-    switch(type)
+    switch (type)
     {
     /* Light sources are contained by the diffuse/specular light blocks 
     case FE_DISTANT_LIGHT: 
     case FE_POINT_LIGHT: 
     case FE_SPOT_LIGHT: 
     */
-    case FE_BLEND: return new SVGFEBlend();
-    case FE_COLOR_MATRIX: return new SVGFEColorMatrix();
-    case FE_COMPONENT_TRANSFER: return new SVGFEComponentTransfer();
-    case FE_COMPOSITE: return new SVGFEComposite();
+    case FE_BLEND: return new SVGFEBlend(filter);
+    case FE_COLOR_MATRIX: return new SVGFEColorMatrix(filter);
+    case FE_COMPONENT_TRANSFER: return new SVGFEComponentTransfer(filter);
+    case FE_COMPOSITE: return new SVGFEComposite(filter);
 //  case FE_CONVOLVE_MATRIX:
-    case FE_DIFFUSE_LIGHTING: return new SVGFEDiffuseLighting();
-    case FE_DISPLACEMENT_MAP: return new SVGFEDisplacementMap();
-    case FE_FLOOD: return new SVGFEFlood();
-    case FE_GAUSSIAN_BLUR: return new SVGFEGaussianBlur();
-    case FE_IMAGE: return new SVGFEImage();
-    case FE_MERGE: return new SVGFEMerge();
+    case FE_DIFFUSE_LIGHTING: return new SVGFEDiffuseLighting(filter);
+    case FE_DISPLACEMENT_MAP: return new SVGFEDisplacementMap(filter);
+    case FE_FLOOD: return new SVGFEFlood(filter);
+    case FE_GAUSSIAN_BLUR: return new SVGFEGaussianBlur(filter);
+    case FE_IMAGE: return new SVGFEImage(filter);
+    case FE_MERGE: return new SVGFEMerge(filter);
 //  case FE_MORPHOLOGY:
-    case FE_OFFSET: return new SVGFEOffset();
-    case FE_SPECULAR_LIGHTING: return new SVGFESpecularLighting();
-    case FE_TILE: return new SVGFETile();
+    case FE_OFFSET: return new SVGFEOffset(filter);
+    case FE_SPECULAR_LIGHTING: return new SVGFESpecularLighting(filter);
+    case FE_TILE: return new SVGFETile(filter);
 //  case FE_TURBULENCE:
     default:
         return 0;
@@ -112,13 +119,38 @@ void SVGResourceFilter::prepareFilter(GraphicsContext*& context, const FloatRect
     m_filterCIContext = HardRetain([CIContext contextWithCGContext:cgContext options:nil]);
     [filterContextPool drain];
 
-    m_filterCGLayer = [m_filterCIContext createCGLayerWithSize:CGRect(bbox).size info:NULL];
+    FloatRect filterRect = filterBBoxForItemBBox(bbox);
+
+    // TODO: Ensure the size is not greater than the nearest <svg> size and/or the window size.
+    // This is also needed for masking & gradients-on-stroke-of-text. File a bug on this.
+    float width = filterRect.width();
+    float height = filterRect.height();
+
+    m_filterCGLayer = [m_filterCIContext createCGLayerWithSize:CGSizeMake(width, height) info:NULL];
 
     context = new GraphicsContext(CGLayerGetContext(m_filterCGLayer));
     context->save();
 
-    context->translate(-bbox.x(), -bbox.y());
+    context->translate(-filterRect.x(), -filterRect.y());
+}
+
+#if DEBUG_OUTPUT_IMAGE > 0
+void dumpOutputImage(CIImage* outputImage)
+{
+    CGSize extentSize = [outputImage extent].size;
+    NSImage* image = [[[NSImage alloc] initWithSize:NSMakeSize(extentSize.width, extentSize.height)] autorelease];
+    [image addRepresentation:[NSCIImageRep imageRepWithCIImage:outputImage]];
+
+    NSData* imageData = [image TIFFRepresentation];
+    NSBitmapImageRep* imageRep = [NSBitmapImageRep imageRepWithData:imageData];
+    imageData = [imageRep representationUsingType:NSJPEGFileType properties:nil];
+
+    static unsigned int s_counter = 0;
+    s_counter++;
+
+    [imageData writeToFile:[NSString stringWithFormat:@"/Users/nikoz/outputImages/%d.jpeg", s_counter] atomically:YES];
 }
+#endif
 
 void SVGResourceFilter::applyFilter(GraphicsContext*& context, const FloatRect& bbox)
 {
@@ -127,20 +159,20 @@ void SVGResourceFilter::applyFilter(GraphicsContext*& context, const FloatRect&
 
     // actually apply the filter effects
     CIImage* inputImage = [CIImage imageWithCGLayer:m_filterCGLayer];
-    NSArray* filterStack = getCIFilterStack(inputImage);
+    NSArray* filterStack = getCIFilterStack(inputImage, bbox);
     if ([filterStack count]) {
         CIImage* outputImage = [[filterStack lastObject] valueForKey:@"outputImage"];
-        if (outputImage) {
-            CGRect filterRect = CGRect(filterBBoxForItemBBox(bbox));
-            CGRect sourceRect = CGRectIntersection(filterRect, [outputImage extent]);
 
-            CGPoint bboxOrigin = CGRect(bbox).origin;
-            CGPoint destOrigin = sourceRect.origin;
+        if (outputImage) {
+#if DEBUG_OUTPUT_IMAGE > 0
+            dumpOutputImage(outputImage);
+#endif
 
-            destOrigin.x += bboxOrigin.x;
-            destOrigin.y += bboxOrigin.y;
+            FloatRect filterRect = filterBBoxForItemBBox(bbox);
+            FloatPoint destOrigin = filterRect.location();
+            filterRect.setLocation(FloatPoint(0.0, 0.0));
 
-            [m_filterCIContext drawImage:outputImage atPoint:destOrigin fromRect:sourceRect];
+            [m_filterCIContext drawImage:outputImage atPoint:CGPoint(destOrigin) fromRect:filterRect];
         }
     }
 
@@ -154,43 +186,44 @@ void SVGResourceFilter::applyFilter(GraphicsContext*& context, const FloatRect&
     context = 0;
 }
 
-NSArray* SVGResourceFilter::getCIFilterStack(CIImage* inputImage)
+NSArray* SVGResourceFilter::getCIFilterStack(CIImage* inputImage, const FloatRect& bbox)
 {
     NSMutableArray* filterEffects = [NSMutableArray array];
 
     setImageForName(inputImage, "SourceGraphic"); // input
 
     for (unsigned int i = 0; i < m_effects.size(); i++) {
-        CIFilter* filter = m_effects[i]->getCIFilter(this);
+        CIFilter* filter = m_effects[i]->getCIFilter(bbox);
         if (filter)
             [filterEffects addObject:filter];
     }
 
-    [m_imagesByName removeAllObjects]; // clean up before next time.
+    [m_imagesByName.get() removeAllObjects]; // clean up before next time.
 
     return filterEffects;
 }
 
-CIImage *SVGResourceFilter::imageForName(const String& name) const
+CIImageSVGResourceFilter::imageForName(const String& name) const
 {
-    return [m_imagesByName objectForKey:name];
+    return [m_imagesByName.get() objectForKey:name];
 }
 
-void SVGResourceFilter::setImageForName(CIImage *image, const String &name)
+void SVGResourceFilter::setImageForName(CIImage* image, const String& name)
 {
-    [m_imagesByName setValue:image forKey:name];
+    [m_imagesByName.get() setValue:image forKey:name];
 }
 
-void SVGResourceFilter::setOutputImage(const SVGFilterEffect *filterEffect, CIImage *output)
+void SVGResourceFilter::setOutputImage(const SVGFilterEffect* filterEffect, CIImage* output)
 {
     if (!filterEffect->result().isEmpty())
         setImageForName(output, filterEffect->result());
+
     setImageForName(output, SVGPreviousFilterOutputName);
 }
 
-static inline CIImage *alphaImageForImage(CIImage *image)
+static inline CIImage* alphaImageForImage(CIImage* image)
 {
-    CIFilter *onlyAlpha = [CIFilter filterWithName:@"CIColorMatrix"];
+    CIFilteronlyAlpha = [CIFilter filterWithName:@"CIColorMatrix"];
     CGFloat zero[4] = {0, 0, 0, 0};
     [onlyAlpha setDefaults];
     [onlyAlpha setValue:image forKey:@"inputImage"];
@@ -200,22 +233,28 @@ static inline CIImage *alphaImageForImage(CIImage *image)
     return [onlyAlpha valueForKey:@"outputImage"];
 }
 
-CIImage *SVGResourceFilter::inputImage(const SVGFilterEffect *filterEffect)
+CIImage* SVGResourceFilter::inputImage(const SVGFilterEffect* filterEffect)
 {
     if (filterEffect->in().isEmpty()) {
-        CIImage *inImage = imageForName(SVGPreviousFilterOutputName);
+        CIImage* inImage = imageForName(SVGPreviousFilterOutputName);
+
         if (!inImage)
             inImage = imageForName("SourceGraphic");
+
         return inImage;
     } else if (filterEffect->in() == "SourceAlpha") {
-        CIImage *sourceAlpha = imageForName(filterEffect->in());
+        CIImage* sourceAlpha = imageForName(filterEffect->in());
+
         if (!sourceAlpha) {
-            CIImage *sourceGraphic = imageForName("SourceGraphic");
+            CIImage* sourceGraphic = imageForName("SourceGraphic");
+
             if (!sourceGraphic)
                 return nil;
+
             sourceAlpha = alphaImageForImage(sourceGraphic);
             setImageForName(sourceAlpha, "SourceAlpha");
         }
+
         return sourceAlpha;
     }
 
index 34f985c..3546095 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
                   2005 Eric Seidel <eric.seidel@kdemail.net>
 
index 1ee5cd9..370a0ee 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
                   2005 Eric Seidel <eric.seidel@kdemail.net>
 
 
 namespace WebCore {
 
+SVGFEBlend::SVGFEBlend(SVGResourceFilter* filter)
+    : SVGFilterEffect(filter)
+    , m_mode(SVG_FEBLEND_MODE_UNKNOWN)
+{
+}
+
 String SVGFEBlend::in2() const
 {
     return m_in2;
index d199016..ad1beab 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
                   2005 Eric Seidel <eric.seidel@kdemail.net>
 
@@ -40,6 +40,8 @@ enum SVGBlendModeType {
 
 class SVGFEBlend : public SVGFilterEffect {
 public:
+    SVGFEBlend(SVGResourceFilter*);
+
     String in2() const;
     void setIn2(const String&);
 
@@ -49,7 +51,7 @@ public:
     virtual TextStream& externalRepresentation(TextStream&) const;
 
 #if PLATFORM(CI)
-    virtual CIFilter* getCIFilter(SVGResourceFilter*) const;
+    virtual CIFilter* getCIFilter(const FloatRect& bbox) const;
 #endif
 
 private:
index 2aaa7a0..deb83ab 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
                   2005 Eric Seidel <eric.seidel@kdemail.net>
 
 
 namespace WebCore {
 
+SVGFEColorMatrix::SVGFEColorMatrix(SVGResourceFilter* filter)
+    : SVGFilterEffect(filter)
+    , m_type(SVG_FECOLORMATRIX_TYPE_UNKNOWN)
+{
+}
+
 SVGColorMatrixType SVGFEColorMatrix::type() const
 {
     return m_type;
index 5ac7fb0..cc22af5 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
                   2005 Eric Seidel <eric.seidel@kdemail.net>
 
@@ -40,6 +40,8 @@ enum SVGColorMatrixType {
 
 class SVGFEColorMatrix : public SVGFilterEffect {
 public:
+    SVGFEColorMatrix(SVGResourceFilter*);
+
     SVGColorMatrixType type() const;
     void setType(SVGColorMatrixType);
 
@@ -49,7 +51,7 @@ public:
     virtual TextStream& externalRepresentation(TextStream&) const;
 
 #if PLATFORM(CI)
-    virtual CIFilter* getCIFilter(SVGResourceFilter*) const;
+    virtual CIFilter* getCIFilter(const FloatRect& bbox) const;
 #endif
 
 private:
index 04a72ea..270ee22 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
                   2005 Eric Seidel <eric.seidel@kdemail.net>
 
 
 namespace WebCore {
 
+SVGFEComponentTransfer::SVGFEComponentTransfer(SVGResourceFilter* filter)
+    : SVGFilterEffect(filter)
+{
+}
+
 SVGComponentTransferFunction SVGFEComponentTransfer::redFunction() const
 {
     return m_redFunc;
index 97b7f6e..d57d4f1 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
                   2005 Eric Seidel <eric.seidel@kdemail.net>
 
@@ -53,21 +53,30 @@ enum SVGComponentTransferType {
 
 struct SVGComponentTransferFunction {
     SVGComponentTransferFunction()
-        : type(SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY)
+        : type(SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN)
+        , slope(0.0)
+        , intercept(0.0)
+        , amplitude(0.0)
+        , exponent(0.0)
+        , offset(0.0)
     {
     }
 
     SVGComponentTransferType type;
-    Vector<float> tableValues;
+
     float slope;
     float intercept;
     float amplitude;
     float exponent;
     float offset;
+
+    Vector<float> tableValues;
 };
 
 class SVGFEComponentTransfer : public SVGFilterEffect {
 public:
+    SVGFEComponentTransfer(SVGResourceFilter*);
+
     SVGComponentTransferFunction redFunction() const;
     void setRedFunction(const SVGComponentTransferFunction&);
 
@@ -83,7 +92,7 @@ public:
     virtual TextStream& externalRepresentation(TextStream&) const;
 
 #if PLATFORM(CI)
-    virtual CIFilter* getCIFilter(SVGResourceFilter*) const;
+    virtual CIFilter* getCIFilter(const FloatRect& bbox) const;
 
 private:
     CIFilter* getFunctionFilter(SVGChannelSelectorType, CIImage* inputImage) const;
index 99f0b78..0097135 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
                   2005 Eric Seidel <eric.seidel@kdemail.net>
 
 
 namespace WebCore {
 
+SVGFEComposite::SVGFEComposite(SVGResourceFilter* filter)
+    : SVGFilterEffect(filter)
+    , m_operation(SVG_FECOMPOSITE_OPERATOR_UNKNOWN)
+    , m_k1(0.0)
+    , m_k2(0.0)
+    , m_k3(0.0)
+    , m_k4(0.0)
+{
+}
+
 String SVGFEComposite::in2() const
 {
     return m_in2;
index 72370ce..ce3dfa2 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
                   2005 Eric Seidel <eric.seidel@kdemail.net>
 
@@ -41,6 +41,8 @@ enum SVGCompositeOperationType {
 
 class SVGFEComposite : public SVGFilterEffect {
 public:
+    SVGFEComposite(SVGResourceFilter*);
+
     String in2() const;
     void setIn2(const String&);
 
@@ -62,16 +64,16 @@ public:
     virtual TextStream& externalRepresentation(TextStream&) const;
 
 #if PLATFORM(CI)
-    virtual CIFilter* getCIFilter(SVGResourceFilter*) const;
+    virtual CIFilter* getCIFilter(const FloatRect& bbox) const;
 #endif
 
 private:
-    String m_in2;
     SVGCompositeOperationType m_operation;
     float m_k1;
     float m_k2;
     float m_k3;
     float m_k4;
+    String m_in2;
 };
 
 } // namespace WebCore
index e63a9f4..8ac70e9 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
                   2005 Eric Seidel <eric.seidel@kdemail.net>
 
 
 namespace WebCore {
 
+SVGFEConvolveMatrix::SVGFEConvolveMatrix(SVGResourceFilter* filter)
+    : SVGFilterEffect(filter)
+    , m_kernelSize()
+    , m_divisor(0.0)
+    , m_bias(0.0)
+    , m_targetOffset()
+    , m_edgeMode(SVG_EDGEMODE_UNKNOWN)
+    , m_kernelUnitLength()
+    , m_preserveAlpha(false)
+{
+}
+
 FloatSize SVGFEConvolveMatrix::kernelSize() const
 {
     return m_kernelSize;
index cf6ccf6..ed50270 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
                   2005 Eric Seidel <eric.seidel@kdemail.net>
 
@@ -38,6 +38,8 @@ enum SVGEdgeModeType {
 
 class SVGFEConvolveMatrix : public SVGFilterEffect {
 public:
+    SVGFEConvolveMatrix(SVGResourceFilter*);
+
     FloatSize kernelSize() const;
     void setKernelSize(FloatSize);
 
@@ -66,13 +68,13 @@ public:
 
 private:
     FloatSize m_kernelSize;
-    Vector<float> m_kernelMatrix; // maybe should be a real matrix?
     float m_divisor;
     float m_bias;
     FloatSize m_targetOffset;
     SVGEdgeModeType m_edgeMode;
     FloatPoint m_kernelUnitLength;
     bool m_preserveAlpha;
+    Vector<float> m_kernelMatrix; // maybe should be a real matrix?
 };
 
 } // namespace WebCore
index 03168b6..884db2b 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
                   2005 Eric Seidel <eric.seidel@kdemail.net>
 
 
 namespace WebCore {
 
-SVGFEDiffuseLighting::SVGFEDiffuseLighting()
-    : m_lightSource(0)
+SVGFEDiffuseLighting::SVGFEDiffuseLighting(SVGResourceFilter* filter)
+    : SVGFilterEffect(filter)
+    , m_lightingColor()
+    , m_surfaceScale(0.0)
+    , m_diffuseConstant(0.0)
+    , m_kernelUnitLengthX(0.0)
+    , m_kernelUnitLengthY(0.0)
+    , m_lightSource(0)
 {
 }
 
index 0febe6e..1daa021 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
                   2005 Eric Seidel <eric.seidel@kdemail.net>
 
@@ -34,7 +34,7 @@ class SVGLightSource;
 
 class SVGFEDiffuseLighting : public SVGFilterEffect {
 public:
-    SVGFEDiffuseLighting();
+    SVGFEDiffuseLighting(SVGResourceFilter*);
     virtual ~SVGFEDiffuseLighting();
 
     Color lightingColor() const;
@@ -58,7 +58,7 @@ public:
     virtual TextStream& externalRepresentation(TextStream&) const;
 
 #if PLATFORM(CI)
-    virtual CIFilter* getCIFilter(SVGResourceFilter*) const;
+    virtual CIFilter* getCIFilter(const FloatRect& bbox) const;
 #endif
 
 private:
index 843b756..fa24e09 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
                   2005 Eric Seidel <eric.seidel@kdemail.net>
 
 
 namespace WebCore {
 
-SVGFEDisplacementMap::SVGFEDisplacementMap()
-    : m_xChannelSelector(SVG_CHANNEL_R)
-    , m_yChannelSelector(SVG_CHANNEL_R)
+SVGFEDisplacementMap::SVGFEDisplacementMap(SVGResourceFilter* filter)
+    : SVGFilterEffect(filter)
+    , m_xChannelSelector(SVG_CHANNEL_UNKNOWN)
+    , m_yChannelSelector(SVG_CHANNEL_UNKNOWN)
     , m_scale(0)
 {
 }
index 44992e0..8df4d23 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
                   2005 Eric Seidel <eric.seidel@kdemail.net>
 
@@ -39,7 +39,7 @@ enum SVGChannelSelectorType {
 
 class SVGFEDisplacementMap : public SVGFilterEffect {
 public:
-    SVGFEDisplacementMap();
+    SVGFEDisplacementMap(SVGResourceFilter*);
 
     String in2() const;
     void setIn2(const String&);
@@ -56,14 +56,14 @@ public:
     virtual TextStream& externalRepresentation(TextStream&) const;
 
 #if PLATFORM(CI)
-    virtual CIFilter* getCIFilter(SVGResourceFilter*) const;
+    virtual CIFilter* getCIFilter(const FloatRect& bbox) const;
 #endif
 
 private:
-    String m_in2;
     SVGChannelSelectorType m_xChannelSelector;
     SVGChannelSelectorType m_yChannelSelector;
     float m_scale;
+    String m_in2;
 };
 
 } // namespace WebCore
index df0b871..6e0e0c0 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
                   2005 Eric Seidel <eric.seidel@kdemail.net>
 
 
 namespace WebCore {
 
+SVGFEFlood::SVGFEFlood(SVGResourceFilter* filter)
+    : SVGFilterEffect(filter)
+    , m_floodColor()
+    , m_floodOpacity(0.0)
+{
+}
+
 Color SVGFEFlood::floodColor() const
 {
     return m_floodColor;
index 8443506..dd6bdab 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
                   2005 Eric Seidel <eric.seidel@kdemail.net>
 
@@ -32,6 +32,8 @@ namespace WebCore {
 
 class SVGFEFlood : public SVGFilterEffect {
 public:
+    SVGFEFlood(SVGResourceFilter*);
+
     Color floodColor() const;
     void setFloodColor(const Color &);
 
@@ -41,7 +43,7 @@ public:
     virtual TextStream& externalRepresentation(TextStream&) const;
 
 #if PLATFORM(CI)
-    virtual CIFilter* getCIFilter(SVGResourceFilter*) const;
+    virtual CIFilter* getCIFilter(const FloatRect& bbox) const;
 #endif
 
 private:
index 116a12e..91fc8eb 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
                   2005 Eric Seidel <eric.seidel@kdemail.net>
 
 
 namespace WebCore {
 
+SVGFEGaussianBlur::SVGFEGaussianBlur(SVGResourceFilter* filter)
+    : SVGFilterEffect(filter)
+    , m_x(0.0)
+    , m_y(0.0)
+{
+}
+
 float SVGFEGaussianBlur::stdDeviationX() const
 {
     return m_x;
index 4421cfa..2ca161c 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
                   2005 Eric Seidel <eric.seidel@kdemail.net>
 
@@ -31,6 +31,8 @@ namespace WebCore {
 
 class SVGFEGaussianBlur : public SVGFilterEffect {
 public:
+    SVGFEGaussianBlur(SVGResourceFilter*);
+
     float stdDeviationX() const;
     void setStdDeviationX(float);
 
@@ -40,7 +42,7 @@ public:
     virtual TextStream& externalRepresentation(TextStream&) const;
 
 #if PLATFORM(CI)
-    virtual CIFilter* getCIFilter(SVGResourceFilter*) const;
+    virtual CIFilter* getCIFilter(const FloatRect& bbox) const;
 #endif
 
 private:
index 07c4e76..1e533d0 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
                   2005 Eric Seidel <eric.seidel@kdemail.net>
 
@@ -29,8 +29,9 @@
 
 namespace WebCore {
 
-SVGFEImage::SVGFEImage()
-    : m_cachedImage(0)
+SVGFEImage::SVGFEImage(SVGResourceFilter* filter)
+    : SVGFilterEffect(filter)
+    , m_cachedImage(0)
 {
 }
 
index 2e3254c..8fab54b 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
                   2005 Eric Seidel <eric.seidel@kdemail.net>
 
 namespace WebCore {
 
 class SVGFEImage : public SVGFilterEffect
-                         , public CachedResourceClient {
+                 , public CachedResourceClient {
 public:
-    SVGFEImage();
+    SVGFEImage(SVGResourceFilter*);
     virtual ~SVGFEImage();
 
-    // FIXME: Eventually we need to support <svg> (RenderObject*) as well as image data.
+    // FIXME: We need to support <svg> (RenderObject*) as well as image data.
 
     CachedImage* cachedImage() const;
     void setCachedImage(CachedImage*);
@@ -45,7 +45,7 @@ public:
     virtual TextStream& externalRepresentation(TextStream&) const;
 
 #if PLATFORM(CI)
-    virtual CIFilter* getCIFilter(SVGResourceFilter*) const;
+    virtual CIFilter* getCIFilter(const FloatRect& bbox) const;
 #endif
 
 private:
index caae33d..7927ee6 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
                   2005 Eric Seidel <eric.seidel@kdemail.net>
 
index a2fd24b..29845e3 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
                   2005 Eric Seidel <eric.seidel@kdemail.net>
 
@@ -31,13 +31,15 @@ namespace WebCore {
 
 class SVGFEMerge : public SVGFilterEffect {
 public:
+    SVGFEMerge(SVGResourceFilter* filter) : SVGFilterEffect(filter) { }
+
     const Vector<String>& mergeInputs() const;
     void setMergeInputs(const Vector<String>& mergeInputs);
 
     virtual TextStream& externalRepresentation(TextStream&) const;
 
 #if PLATFORM(CI)
-    virtual CIFilter* getCIFilter(SVGResourceFilter*) const;
+    virtual CIFilter* getCIFilter(const FloatRect& bbox) const;
 #endif
 
 private:
index 87e0407..e65f219 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
                   2005 Eric Seidel <eric.seidel@kdemail.net>
 
 
 namespace WebCore {
 
+SVGFEMorphology::SVGFEMorphology(SVGResourceFilter* filter)
+    : SVGFilterEffect(filter)
+    , m_operator(SVG_MORPHOLOGY_OPERATOR_UNKNOWN)
+    , m_radiusX(0.0)
+    , m_radiusY(0.0)
+{
+}
+
 SVGMorphologyOperatorType SVGFEMorphology::morphologyOperator() const
 {
     return m_operator;
index 8e35a5d..ae8e00e 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
                   2005 Eric Seidel <eric.seidel@kdemail.net>
 
@@ -37,6 +37,8 @@ enum SVGMorphologyOperatorType {
 
 class SVGFEMorphology : public SVGFilterEffect {
 public:
+    SVGFEMorphology(SVGResourceFilter*);
+
     SVGMorphologyOperatorType morphologyOperator() const;
     void setMorphologyOperator(SVGMorphologyOperatorType);
 
index bebbd7b..fdf2371 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
                   2005 Eric Seidel <eric.seidel@kdemail.net>
 
 
 namespace WebCore {
 
+SVGFEOffset::SVGFEOffset(SVGResourceFilter* filter)
+    : SVGFilterEffect(filter)
+    , m_dx(0.0)
+    , m_dy(0.0)
+{
+}
+
 float SVGFEOffset::dx() const
 {
     return m_dx;
index 39a1515..7283425 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
                   2005 Eric Seidel <eric.seidel@kdemail.net>
 
@@ -31,6 +31,8 @@ namespace WebCore {
 
 class SVGFEOffset : public SVGFilterEffect {
 public:
+    SVGFEOffset(SVGResourceFilter*);
+
     float dx() const;
     void setDx(float);
 
@@ -40,7 +42,7 @@ public:
     virtual TextStream& externalRepresentation(TextStream&) const;
 
 #if PLATFORM(CI)
-    virtual CIFilter* getCIFilter(SVGResourceFilter*) const;
+    virtual CIFilter* getCIFilter(const FloatRect& bbox) const;
 #endif
 
 private:
index 2b11cf4..ae561c7 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
                   2005 Eric Seidel <eric.seidel@kdemail.net>
 
 
 namespace WebCore {
 
-SVGFESpecularLighting::SVGFESpecularLighting()
-    : m_lightSource(0)
+SVGFESpecularLighting::SVGFESpecularLighting(SVGResourceFilter* filter)
+    : SVGFilterEffect(filter)
+    , m_lightingColor()
+    , m_surfaceScale(0.0)
+    , m_specularConstant(0.0)
+    , m_specularExponent(0.0)
+    , m_kernelUnitLengthX(0.0)
+    , m_kernelUnitLengthY(0.0)
+    , m_lightSource(0)
 {
 }
 
index 44da0d3..b7213f5 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
                   2005 Eric Seidel <eric.seidel@kdemail.net>
 
@@ -33,8 +33,8 @@ namespace WebCore {
 
 class SVGFESpecularLighting : public SVGFilterEffect {
 public:
-    SVGFESpecularLighting();
-    ~SVGFESpecularLighting();
+    SVGFESpecularLighting(SVGResourceFilter*);
+    virtual ~SVGFESpecularLighting();
 
     Color lightingColor() const;
     void setLightingColor(const Color&);
@@ -60,7 +60,7 @@ public:
     virtual TextStream& externalRepresentation(TextStream&) const;
 
 #if PLATFORM(CI)
-    virtual CIFilter* getCIFilter(SVGResourceFilter*) const;
+    virtual CIFilter* getCIFilter(const FloatRect& bbox) const;
 #endif
 
 private:
index 821d584..fe8fe65 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
                   2005 Eric Seidel <eric.seidel@kdemail.net>
 
@@ -32,8 +32,10 @@ namespace WebCore {
 class SVGFETile : public SVGFilterEffect
 {
 public:
+    SVGFETile(SVGResourceFilter* filter) : SVGFilterEffect(filter) { }
+
 #if PLATFORM(CI)
-    virtual CIFilter* getCIFilter(SVGResourceFilter*) const;
+    virtual CIFilter* getCIFilter(const FloatRect& bbox) const;
 #endif
 };
 
index de6c9cf..f26687e 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
                   2005 Eric Seidel <eric.seidel@kdemail.net>
 
 
 namespace WebCore {
 
+SVGFETurbulence::SVGFETurbulence(SVGResourceFilter* filter)
+    : SVGFilterEffect(filter)
+    , m_baseFrequencyX(0.0)
+    , m_baseFrequencyY(0.0)
+    , m_numOctaves(0)
+    , m_seed(0)
+    , m_stitchTiles(false)
+    , m_type(SVG_TURBULENCE_TYPE_UNKNOWN)
+{
+}
+
 SVGTurbulanceType SVGFETurbulence::type() const
 {
     return m_type;
@@ -103,7 +114,6 @@ static TextStream& operator<<(TextStream& ts, SVGTurbulanceType t)
     return ts;
 }
 
-
 TextStream& SVGFETurbulence::externalRepresentation(TextStream& ts) const
 {
     ts << "[type=TURBULENCE] ";
index 55b8871..28d3a1d 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
                   2005 Eric Seidel <eric.seidel@kdemail.net>
 
@@ -37,6 +37,8 @@ enum SVGTurbulanceType {
 
 class SVGFETurbulence : public SVGFilterEffect {
 public:
+    SVGFETurbulence(SVGResourceFilter*);
+
     SVGTurbulanceType type() const;
     void setType(SVGTurbulanceType);
 
index 49deae2..581dede 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
                   2005 Eric Seidel <eric.seidel@kdemail.net>
 
 #include "SVGFilterEffect.h"
 
 #include "SVGRenderTreeAsText.h"
+#include "SVGResourceFilter.h"
 #include "TextStream.h"
 
 namespace WebCore {
 
+SVGFilterEffect::SVGFilterEffect(SVGResourceFilter* filter)
+    : m_filter(filter)
+    , m_xBBoxMode(false)
+    , m_yBBoxMode(false)
+    , m_widthBBoxMode(false)
+    , m_heightBBoxMode(false)
+{
+}
+
+FloatRect SVGFilterEffect::primitiveBBoxForFilterBBox(const FloatRect& filterBBox, const FloatRect& itemBBox) const
+{
+    FloatRect subRegionBBox = subRegion();
+    FloatRect useBBox = filterBBox;
+
+    ASSERT(m_filter);
+    if (!m_filter)
+        return FloatRect();
+
+    if (m_filter->effectBoundingBoxMode()) {
+        if (!m_filter->filterBoundingBoxMode())
+            useBBox = itemBBox;
+
+        subRegionBBox = FloatRect(useBBox.x() + subRegionBBox.x() * useBBox.width(),
+                                  useBBox.y() + subRegionBBox.y() * useBBox.height(),
+                                  subRegionBBox.width() * useBBox.width(),
+                                  subRegionBBox.height() * useBBox.height());
+    } else {
+        if (xBoundingBoxMode())
+            subRegionBBox.setX(useBBox.x() + subRegionBBox.x() * useBBox.width());
+
+        if (yBoundingBoxMode())
+            subRegionBBox.setY(useBBox.y() + subRegionBBox.y() * useBBox.height());
+
+        if (widthBoundingBoxMode())
+            subRegionBBox.setWidth(subRegionBBox.width() * useBBox.width());
+
+        if (heightBoundingBoxMode())
+            subRegionBBox.setHeight(subRegionBBox.height() * useBBox.height());
+    }
+
+    return subRegionBBox;
+}
+
 FloatRect SVGFilterEffect::subRegion() const
 {
     return m_subRegion;
@@ -61,6 +105,16 @@ void SVGFilterEffect::setResult(const String& result)
     m_result = result;
 }
 
+SVGResourceFilter* SVGFilterEffect::filter() const
+{
+    return m_filter;
+}
+
+void SVGFilterEffect::setFilter(SVGResourceFilter* filter)
+{
+    m_filter = filter;
+}
+
 TextStream& SVGFilterEffect::externalRepresentation(TextStream& ts) const
 {
     if (!in().isEmpty())
index 64fbe73..74d10a7 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
                   2005 Eric Seidel <eric.seidel@kdemail.net>
 
@@ -65,12 +65,25 @@ class TextStream;
 
 class SVGFilterEffect {
 public:
-    // this default constructor is only needed for gcc 3.3
-    SVGFilterEffect() { }
+    SVGFilterEffect(SVGResourceFilter*);
     virtual ~SVGFilterEffect() { }
 
     virtual SVGFilterEffectType effectType() const { return FE_TURBULENCE; }
 
+    bool xBoundingBoxMode() const { return m_xBBoxMode; }
+    void setXBoundingBoxMode(bool bboxMode) { m_xBBoxMode = bboxMode; }
+
+    bool yBoundingBoxMode() const { return m_yBBoxMode; }
+    void setYBoundingBoxMode(bool bboxMode) { m_yBBoxMode = bboxMode; }
+
+    bool widthBoundingBoxMode() const { return m_widthBBoxMode; }
+    void setWidthBoundingBoxMode(bool bboxMode) { m_widthBBoxMode = bboxMode; }
+
+    bool heightBoundingBoxMode() const { return m_heightBBoxMode; }
+    void setHeightBoundingBoxMode(bool bboxMode) { m_heightBBoxMode = bboxMode; }
+
+    FloatRect primitiveBBoxForFilterBBox(const FloatRect& filterBBox, const FloatRect& itemBBox) const;
+
     FloatRect subRegion() const;
     void setSubRegion(const FloatRect&);
 
@@ -80,15 +93,25 @@ public:
     String result() const;
     void setResult(const String&);
 
+    SVGResourceFilter* filter() const;
+    void setFilter(SVGResourceFilter*);
+
     virtual TextStream& externalRepresentation(TextStream&) const;
 
 #if PLATFORM(CI)
-    virtual CIFilter* getCIFilter(SVGResourceFilter*) const;
+    virtual CIFilter* getCIFilter(const FloatRect& bbox) const;
 #endif
 
 private:
-    FloatRect m_subRegion;
+    SVGResourceFilter* m_filter;
 
+    bool m_xBBoxMode : 1;
+    bool m_yBBoxMode : 1;
+    bool m_widthBBoxMode : 1;
+    bool m_heightBBoxMode : 1;
+
+    FloatRect m_subRegion;
     String m_in;
     String m_result;
 };
index 53a6765..84670fa 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
                   2005 Eric Seidel <eric.seidel@kdemail.net>
 
index ecdae23..6bc98a1 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
                   2005 Eric Seidel <eric.seidel@kdemail.net>
 
index d1c2fc3..b726211 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
                   2005 Eric Seidel <eric.seidel@kdemail.net>
 
@@ -32,7 +32,7 @@ namespace WebCore {
 
 class SVGPointLightSource : public SVGLightSource {
 public:
-    SVGPointLightSource(FloatPoint3D& position)
+    SVGPointLightSource(const FloatPoint3D& position)
         : SVGLightSource(LS_POINT)
         , m_position(position)
     { }
index 692c527..c42165f 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <wildfox@kde.org>
+    Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
                   2004, 2005 Rob Buis <buis@kde.org>
                   2005 Eric Seidel <eric.seidel@kdemail.net>
 
@@ -32,7 +32,7 @@ namespace WebCore {
 
 class SVGSpotLightSource : public SVGLightSource {
 public:
-    SVGSpotLightSource(FloatPoint3D& position, FloatPoint3D& direction, float specularExponent, float limitingConeAngle)
+    SVGSpotLightSource(const FloatPoint3D& position, const FloatPoint3D& direction, float specularExponent, float limitingConeAngle)
         : SVGLightSource(LS_SPOT)
         , m_position(position)
         , m_direction(direction)
index 790abfb..1f7e3c1 100644 (file)
 
 namespace WebCore {
 
-CIFilter* SVGFEBlend::getCIFilter(SVGResourceFilter* svgFilter) const
+CIFilter* SVGFEBlend::getCIFilter(const FloatRect& bbox) const
 {
-    CIFilter *filter = nil;
+    SVGResourceFilter* svgFilter = filter();
+    CIFilter* filter = nil;
     BEGIN_BLOCK_OBJC_EXCEPTIONS;
 
     switch (blendMode()) {
@@ -57,13 +58,16 @@ CIFilter* SVGFEBlend::getCIFilter(SVGResourceFilter* svgFilter) const
     }
 
     [filter setDefaults];
-    CIImage *inputImage = svgFilter->inputImage(this);
+
+    CIImage* inputImage = svgFilter->inputImage(this);
     FE_QUARTZ_CHECK_INPUT(inputImage);
     [filter setValue:inputImage forKey:@"inputImage"];
-    CIImage *backgroundImage = svgFilter->imageForName(in2());
+
+    CIImage* backgroundImage = svgFilter->imageForName(in2());
     FE_QUARTZ_CHECK_INPUT(backgroundImage);
     [filter setValue:backgroundImage forKey:@"inputBackgroundImage"];
 
+    FE_QUARTZ_MAP_TO_SUBREGION(bbox);
     FE_QUARTZ_OUTPUT_RETURN;
 }
 
index dff1822..b3ee034 100644 (file)
@@ -35,8 +35,9 @@ namespace WebCore {
         return nil; \
     }
 
-CIFilter* SVGFEColorMatrix::getCIFilter(SVGResourceFilter* svgFilter) const
+CIFilter* SVGFEColorMatrix::getCIFilter(const FloatRect& bbox) const
 {
+    SVGResourceFilter* svgFilter = filter();
     CIFilter* filter = nil;
     BEGIN_BLOCK_OBJC_EXCEPTIONS;
     switch (type()) {
@@ -98,6 +99,7 @@ CIFilter* SVGFEColorMatrix::getCIFilter(SVGResourceFilter* svgFilter) const
     FE_QUARTZ_CHECK_INPUT(inputImage);
     [filter setValue:inputImage forKey:@"inputImage"];
 
+    FE_QUARTZ_MAP_TO_SUBREGION(bbox);
     FE_QUARTZ_OUTPUT_RETURN;
 }
 
index b1b21f6..6b06f01 100644 (file)
@@ -82,6 +82,7 @@ static CIFilter* filterForComponentFunc(const SVGComponentTransferFunction& func
 {
     CIFilter *filter;
     switch (func.type) {
+    case SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN:
     case SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY:
         filter = [CIFilter filterWithName:@"WKIdentityTransfer"];
         break;
@@ -132,7 +133,7 @@ CIFilter* SVGFEComponentTransfer::getFunctionFilter(SVGChannelSelectorType chann
     }
 }
 
-CIFilter* SVGFEComponentTransfer::getCIFilter(SVGResourceFilter* svgFilter) const
+CIFilter* SVGFEComponentTransfer::getCIFilter(const FloatRect& bbox) const
 {
     [WKComponentMergeFilter class];
     [WKIdentityTransferFilter class];
@@ -141,6 +142,7 @@ CIFilter* SVGFEComponentTransfer::getCIFilter(SVGResourceFilter* svgFilter) cons
     [WKLinearTransferFilter class];
     [WKGammaTransferFilter class];
 
+    SVGResourceFilter* svgFilter = filter();
     CIFilter* filter = nil;
     BEGIN_BLOCK_OBJC_EXCEPTIONS;
     filter = [CIFilter filterWithName:@"WKComponentMerge"];
@@ -155,6 +157,7 @@ CIFilter* SVGFEComponentTransfer::getCIFilter(SVGResourceFilter* svgFilter) cons
     [filter setValue:getFunctionFilter(SVG_CHANNEL_B, inputImage) forKey:@"inputFuncB"];
     [filter setValue:getFunctionFilter(SVG_CHANNEL_A, inputImage) forKey:@"inputFuncA"];
 
+    FE_QUARTZ_MAP_TO_SUBREGION(bbox);
     FE_QUARTZ_OUTPUT_RETURN;
     return nil;
 }
index 8328a64..c40ef4b 100644 (file)
@@ -29,8 +29,9 @@
 
 namespace WebCore {
 
-CIFilter* SVGFEComposite::getCIFilter(SVGResourceFilter* svgFilter) const
+CIFilter* SVGFEComposite::getCIFilter(const FloatRect& bbox) const
 {
+    SVGResourceFilter* svgFilter = filter();
     CIFilter* filter = nil;
     BEGIN_BLOCK_OBJC_EXCEPTIONS;
 
@@ -73,6 +74,8 @@ CIFilter* SVGFEComposite::getCIFilter(SVGResourceFilter* svgFilter) const
         [filter setValue:[NSNumber numberWithFloat:k3()] forKey:@"inputK3"];
         [filter setValue:[NSNumber numberWithFloat:k4()] forKey:@"inputK4"];
     }
+
+    FE_QUARTZ_MAP_TO_SUBREGION(bbox);
     FE_QUARTZ_OUTPUT_RETURN;
 }
 
index 22978a1..526e6f0 100644 (file)
@@ -29,7 +29,7 @@
 
 namespace WebCore {
 
-CIFilter* SVGFEDiffuseLighting::getCIFilter(SVGResourceFilter* svgFilter) const
+CIFilter* SVGFEDiffuseLighting::getCIFilter(const FloatRect& bbox) const
 {
     const SVGLightSource* light = lightSource();
     if (!light)
@@ -37,6 +37,7 @@ CIFilter* SVGFEDiffuseLighting::getCIFilter(SVGResourceFilter* svgFilter) const
 
     [WKDiffuseLightingFilter class];
 
+    SVGResourceFilter* svgFilter = filter();
     CIFilter* filter;
     BEGIN_BLOCK_OBJC_EXCEPTIONS;
     filter = [CIFilter filterWithName:@"WKDiffuseLighting"];
@@ -62,6 +63,7 @@ CIFilter* SVGFEDiffuseLighting::getCIFilter(SVGResourceFilter* svgFilter) const
     [filter setValue:[NSNumber numberWithFloat:kernelUnitLengthX()] forKey:@"inputKernelUnitLengthX"];
     [filter setValue:[NSNumber numberWithFloat:kernelUnitLengthY()] forKey:@"inputKernelUnitLengthY"];
 
+    FE_QUARTZ_MAP_TO_SUBREGION(bbox);
     FE_QUARTZ_OUTPUT_RETURN;
 }
 
index 2b8cc5a..ec78fa4 100644 (file)
@@ -29,8 +29,9 @@
 
 namespace WebCore {
 
-CIFilter* SVGFEDisplacementMap::getCIFilter(SVGResourceFilter* svgFilter) const
+CIFilter* SVGFEDisplacementMap::getCIFilter(const FloatRect& bbox) const
 {
+    SVGResourceFilter* svgFilter = filter();
     CIFilter* filter = nil;
     BEGIN_BLOCK_OBJC_EXCEPTIONS;
     [WKDisplacementMapFilter class];
@@ -45,6 +46,8 @@ CIFilter* SVGFEDisplacementMap::getCIFilter(SVGResourceFilter* svgFilter) const
     [filter setValue:getVectorForChannel(xChannelSelector()) forKey:@"inputXChannelSelector"];
     [filter setValue:getVectorForChannel(yChannelSelector()) forKey:@"inputYChannelSelector"];
     [filter setValue:[NSNumber numberWithFloat:scale()] forKey:@"inputScale"];
+
+    FE_QUARTZ_MAP_TO_SUBREGION(bbox);
     FE_QUARTZ_OUTPUT_RETURN;
 }
 
index 639f417..ba539e3 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2006 Nikolas Zimmermann <zimmermann@kde.org>
+    Copyright (C) 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
 
     This file is part of the KDE project
 
 
 #if ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
 #include "SVGFEFlood.h"
+
+#include "AffineTransform.h"
 #include "SVGFEHelpersCg.h"
+#include "CgSupport.h"
 
 namespace WebCore {
 
-CIFilter* SVGFEFlood::getCIFilter(SVGResourceFilter* svgFilter) const
+CIFilter* SVGFEFlood::getCIFilter(const FloatRect& bbox) const
 {
+    SVGResourceFilter* svgFilter = filter();
     CIFilter* filter;
     BEGIN_BLOCK_OBJC_EXCEPTIONS;
     filter = [CIFilter filterWithName:@"CIConstantColorGenerator"];
     [filter setDefaults];
     CGColorRef color = cgColor(floodColor());
-    CGColorRef withAlpha = CGColorCreateCopyWithAlpha(color,CGColorGetAlpha(color) * floodOpacity());
+    CGColorRef withAlpha = CGColorCreateCopyWithAlpha(color, CGColorGetAlpha(color) * floodOpacity());
     CIColor* inputColor = [CIColor colorWithCGColor:withAlpha];
     CGColorRelease(color);
     CGColorRelease(withAlpha);
     [filter setValue:inputColor forKey:@"inputColor"];
 
-    CGRect cropRect = CGRectMake(-100,-100,1000,1000); // HACK
-    if (!subRegion().isEmpty())
-        cropRect = subRegion();
-    FE_QUARTZ_CROP_TO_RECT(cropRect);
-
+    FE_QUARTZ_MAP_TO_SUBREGION(bbox);
     FE_QUARTZ_OUTPUT_RETURN;
 }
 
index 9cfcba4..f2760d4 100644 (file)
@@ -27,8 +27,9 @@
 
 namespace WebCore {
 
-CIFilter* SVGFEGaussianBlur::getCIFilter(SVGResourceFilter* svgFilter) const
+CIFilter* SVGFEGaussianBlur::getCIFilter(const FloatRect& bbox) const
 {
+    SVGResourceFilter* svgFilter = filter();
     FE_QUARTZ_SETUP_INPUT(@"CIGaussianPyramid");
 
     float inputRadius = stdDeviationX();
@@ -39,6 +40,7 @@ CIFilter* SVGFEGaussianBlur::getCIFilter(SVGResourceFilter* svgFilter) const
     }
     [filter setValue:[NSNumber numberWithFloat:inputRadius] forKey:@"inputRadius"];
 
+    FE_QUARTZ_MAP_TO_SUBREGION(bbox);
     FE_QUARTZ_OUTPUT_RETURN;
 }
 
index d89fa83..3ad5b69 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2006 Nikolas Zimmermann <zimmermann@kde.org>
+    Copyright (C) 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
 
     This file is part of the KDE project
 
@@ -62,15 +62,25 @@ CIFilter* getNormalMap(CIImage* bumpMap, float scale);
     END_BLOCK_OBJC_EXCEPTIONS; \
     return nil;
 
-#define FE_QUARTZ_CROP_TO_RECT(rect) \
+#define FE_QUARTZ_MAP_TO_SUBREGION_PREPARE(bbox) \
+    FloatRect filterRect = svgFilter->filterBBoxForItemBBox(bbox); \
+    FloatRect cropRect = primitiveBBoxForFilterBBox(filterRect, bbox); \
+    cropRect.intersect(filterRect); \
+    cropRect.move(-filterRect.x(), -filterRect.y());
+
+#define FE_QUARTZ_MAP_TO_SUBREGION_APPLY(cropRect) \
     { \
         CIFilter* crop = [CIFilter filterWithName:@"CICrop"]; \
         [crop setDefaults]; \
         [crop setValue:[filter valueForKey:@"outputImage"] forKey:@"inputImage"]; \
-        [crop setValue:[CIVector vectorWithX:rect.origin.x Y:rect.origin.y Z:rect.size.width W:rect.size.height] forKey:@"inputRectangle"]; \
+        [crop setValue:[CIVector vectorWithX:cropRect.x() Y:cropRect.y() Z:cropRect.width() W:cropRect.height()] forKey:@"inputRectangle"]; \
         filter = crop; \
     }
 
-#define deg2rad(d) ((d * (2.0 * piDouble)) / 360.0)
+#define FE_QUARTZ_MAP_TO_SUBREGION(bbox) \
+    FE_QUARTZ_MAP_TO_SUBREGION_PREPARE(bbox); \
+    FE_QUARTZ_MAP_TO_SUBREGION_APPLY(cropRect);
+
+#define deg2rad(d) ((d * (2.0 * M_PI)) / 360.0)
 
 #endif // ENABLE(SVG) && ENABLE(SVG_EXPERIMENTAL_FEATURES)
index fd675a1..7b693d9 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2006 Nikolas Zimmermann <zimmermann@kde.org>
+    Copyright (C) 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
 
     This file is part of the KDE project
 
 
 namespace WebCore {
 
-CIFilter* SVGFEImage::getCIFilter(SVGResourceFilter* svgFilter) const
+CIFilter* SVGFEImage::getCIFilter(const FloatRect& bbox) const
 {
     if (!cachedImage())
         return nil;
 
+    SVGResourceFilter* svgFilter = filter();
     CIFilter* filter;
     BEGIN_BLOCK_OBJC_EXCEPTIONS;
     CIImage* ciImage = [CIImage imageWithCGImage:cachedImage()->image()->getCGImageRef()];
 
-    // FIXME: There is probably a nicer way to perform both of these transforms.
     filter = [CIFilter filterWithName:@"CIAffineTransform"];
     [filter setDefaults];
     [filter setValue:ciImage forKey:@"inputImage"];
 
-    CGAffineTransform cgTransform = CGAffineTransformMake(1,0,0,-1,0,cachedImage()->image()->rect().bottom());
+    FloatRect imageRect = cachedImage()->image()->rect();
+
+    // Flip image into right origin
+    CGAffineTransform cgTransform = CGAffineTransformMake(1.0, 0.0, 0.0, -1.0, 0.0, imageRect.bottom());
     NSAffineTransform* nsTransform = [NSAffineTransform transform];
     [nsTransform setTransformStruct:*((NSAffineTransformStruct *)&cgTransform)];
     [filter setValue:nsTransform forKey:@"inputTransform"];
 
-    if (!subRegion().isEmpty()) {
+    // Calculate crop rect
+    FE_QUARTZ_MAP_TO_SUBREGION_PREPARE(bbox);
+
+    // Map between the image rectangle and the crop rect
+    if (!cropRect.isEmpty()) {
         CIFilter* scaleImage = [CIFilter filterWithName:@"CIAffineTransform"];
         [scaleImage setDefaults];
         [scaleImage setValue:[filter valueForKey:@"outputImage"] forKey:@"inputImage"];
 
-        cgTransform = CGAffineTransformMakeMapBetweenRects(CGRect(cachedImage()->image()->rect()), subRegion());
+        cgTransform = CGAffineTransformMakeMapBetweenRects(CGRect(imageRect), CGRect(cropRect));
         [nsTransform setTransformStruct:*((NSAffineTransformStruct *)&cgTransform)];
         [scaleImage setValue:nsTransform forKey:@"inputTransform"];
+
         filter = scaleImage;
     }
 
+    // Actually apply cropping
+    FE_QUARTZ_MAP_TO_SUBREGION_APPLY(cropRect);
     FE_QUARTZ_OUTPUT_RETURN;
 }
 
index 015ab5e..fb50e93 100644 (file)
@@ -27,8 +27,9 @@
 
 namespace WebCore {
 
-CIFilter* SVGFEMerge::getCIFilter(SVGResourceFilter* svgFilter) const
+CIFilter* SVGFEMerge::getCIFilter(const FloatRect& bbox) const
 {
+    SVGResourceFilter* svgFilter = filter();
     CIFilter* filter = nil;
     BEGIN_BLOCK_OBJC_EXCEPTIONS;
     const Vector<String>& inputs = mergeInputs();
@@ -44,6 +45,8 @@ CIFilter* SVGFEMerge::getCIFilter(SVGResourceFilter* svgFilter) const
         [filter setValue:previousOutput forKey:@"inputBackgroundImage"];
         previousOutput = [filter valueForKey:@"outputImage"];
     }
+
+    FE_QUARTZ_MAP_TO_SUBREGION(bbox);
     FE_QUARTZ_OUTPUT_RETURN;
 }
 
index 63d7d1e..f9a9432 100644 (file)
 
 namespace WebCore {
 
-CIFilter* SVGFEOffset::getCIFilter(SVGResourceFilter* svgFilter) const
+CIFilter* SVGFEOffset::getCIFilter(const FloatRect& bbox) const
 {
+    SVGResourceFilter* svgFilter = filter();
     FE_QUARTZ_SETUP_INPUT(@"CIAffineTransform");
     NSAffineTransform* offsetTransform = [NSAffineTransform transform];
     [offsetTransform translateXBy:dx() yBy:dy()];
     [filter setValue:offsetTransform  forKey:@"inputTransform"];
+
+    FE_QUARTZ_MAP_TO_SUBREGION(bbox);
     FE_QUARTZ_OUTPUT_RETURN;
 }
 
index 99e7c1e..c944e16 100644 (file)
 
 namespace WebCore {
 
-CIFilter* SVGFESpecularLighting::getCIFilter(SVGResourceFilter* svgFilter) const
+CIFilter* SVGFESpecularLighting::getCIFilter(const FloatRect& bbox) const
 {
     const SVGLightSource* light = lightSource();
-    if(!light)
+    if (!light)
         return nil;
 
     [WKSpecularLightingFilter class];
 
+    SVGResourceFilter* svgFilter = filter();
     CIFilter* filter;
     BEGIN_BLOCK_OBJC_EXCEPTIONS;
     filter = [CIFilter filterWithName:@"WKSpecularLighting"];
@@ -58,6 +59,7 @@ CIFilter* SVGFESpecularLighting::getCIFilter(SVGResourceFilter* svgFilter) const
     [filter setValue:[NSNumber numberWithFloat:kernelUnitLengthX()] forKey:@"inputKernelUnitLengthX"];
     [filter setValue:[NSNumber numberWithFloat:kernelUnitLengthY()] forKey:@"inputKernelUnitLengthY"];
 
+    FE_QUARTZ_MAP_TO_SUBREGION(bbox);
     FE_QUARTZ_OUTPUT_RETURN;
 }
 
index 1e9a951..d658de8 100644 (file)
 
 namespace WebCore {
 
-CIFilter* SVGFETile::getCIFilter(SVGResourceFilter* svgFilter) const
+CIFilter* SVGFETile::getCIFilter(const FloatRect& bbox) const
 {
+    SVGResourceFilter* svgFilter = filter();
     FE_QUARTZ_SETUP_INPUT(@"CIAffineTile");
+
+    FE_QUARTZ_MAP_TO_SUBREGION(bbox);
     FE_QUARTZ_OUTPUT_RETURN;
 }
 
index ed9d118..7664934 100644 (file)
@@ -27,7 +27,7 @@
 
 namespace WebCore {
 
-CIFilter* SVGFilterEffect::getCIFilter(SVGResourceFilter* svgFilter) const
+CIFilter* SVGFilterEffect::getCIFilter(const FloatRect& bbox) const
 {
     return nil;
 }
index 01487df..870956a 100644 (file)
@@ -24,8 +24,7 @@
  */
 
 kernel vec4 diffuseLighting(sampler normalVectors, sampler lightVectors, __color lightingColor, 
-    float surfaceScale, float diffuseConstant, float kernelLengthX,
-    float kernelLengthY)
+    float surfaceScale, float diffuseConstant, float kernelLengthX, float kernelLengthY)
 {
     vec2 pos = samplerCoord(lightVectors);
     vec2 posn = samplerCoord(normalVectors);
@@ -33,7 +32,7 @@ kernel vec4 diffuseLighting(sampler normalVectors, sampler lightVectors, __color
     vec3 l = l4.xyz;
     l = normalize(l);
     vec3 n = sample(normalVectors, posn).xyz;
-    float nl = dot(l, n);
+    float nl = dot(l, n) * diffuseConstant;
     vec4 res = vec4(lightingColor.r * nl, lightingColor.g * nl, lightingColor.b * nl, 1.0);
     res.xyz *= l4.w;
     return res;
index ee48000..95b19c6 100644 (file)
@@ -40,7 +40,6 @@ kernel vec4 displacementMap(sampler image, sampler map, vec4 xchannel, vec4 ycha
     float xc = dot(XCYC, xchannel);
     float yc = dot(XCYC, ychannel);
     samplePos.x += scale*(xc-0.5);
-    //flip the y-axis
-    samplePos.y -= scale*(yc-0.5);
+    samplePos.y += scale*(yc-0.5);
     return sample(image, samplePos);
 }
index 5dea474..d7bef10 100644 (file)
@@ -34,7 +34,7 @@ SVGResourceFilter::~SVGResourceFilter()
 {
 }
 
-SVGFilterEffect* SVGResourceFilter::createFilterEffect(const SVGFilterEffectType&)
+SVGFilterEffect* SVGResourceFilter::createFilterEffect(const SVGFilterEffectType&, SVGResourceFilter*)
 {
     // FIXME: implement me :-)
     return 0;