[SCM] WebKit Debian packaging branch, webkit-1.2, updated. upstream/1.1.90-6072-g9a69373

krit at webkit.org krit at webkit.org
Thu Apr 8 00:52:01 UTC 2010


The following commit has been merged in the webkit-1.2 branch:
commit 4dc21c168618be6e54c5b4284458b160cce786fa
Author: krit at webkit.org <krit at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Wed Dec 30 08:10:44 2009 +0000

    2009-12-29  Dirk Schulze  <krit at webkit.org>
    
            Reviewed by Nikolas Zimmermann.
    
            Detailed boundingBoxes in SVG Renderer
            https://bugs.webkit.org/show_bug.cgi?id=32815
    
            Add new bounding boxes for strokes, filters, masker and clipper in SVG.
            These new bounding boxes help to fix repaintRectInLocalCoordinates.
            We calculate the smallest repaint rect considering the new bounding boxes
            now, filters get the correct paint area, masker clip the mask image size
            to the visible area of the target.
    
            Tests: Many tests need an update. The changes in repaintRectInLocalCoordinates
                   affect the LayoutTests.
    
            * rendering/RenderForeignObject.h:
            (WebCore::RenderForeignObject::strokeBoundingBox):
            * rendering/RenderObject.cpp:
            (WebCore::RenderObject::toSVGRenderBase):
            * rendering/RenderObject.h:
            * rendering/RenderPath.cpp:
            (WebCore::RenderPath::strokeBoundingBox):
            (WebCore::RenderPath::repaintRectInLocalCoordinates):
            (WebCore::RenderPath::setPath):
            * rendering/RenderPath.h:
            (WebCore::RenderPath::markerBoundingBox):
            * rendering/RenderSVGBlock.h:
            (WebCore::RenderSVGBlock::toSVGRenderBase):
            * rendering/RenderSVGContainer.cpp:
            (WebCore::RenderSVGContainer::strokeBoundingBox):
            (WebCore::RenderSVGContainer::repaintRectInLocalCoordinates):
            * rendering/RenderSVGContainer.h:
            * rendering/RenderSVGImage.cpp:
            (WebCore::RenderSVGImage::layout):
            (WebCore::RenderSVGImage::repaintRectInLocalCoordinates):
            * rendering/RenderSVGImage.h:
            (WebCore::RenderSVGImage::toSVGRenderBase):
            (WebCore::RenderSVGImage::strokeBoundingBox):
            * rendering/RenderSVGInline.h:
            (WebCore::RenderSVGInline::objectBoundingBox):
            (WebCore::RenderSVGInline::repaintRectInLocalCoordinates):
            * rendering/RenderSVGModelObject.h:
            (WebCore::RenderSVGModelObject::toSVGRenderBase):
            * rendering/RenderSVGRoot.h:
            (WebCore::RenderSVGRoot::strokeBoundingBox):
            * rendering/RenderSVGText.cpp:
            (WebCore::RenderSVGText::strokeBoundingBox):
            (WebCore::RenderSVGText::repaintRectInLocalCoordinates):
            * rendering/RenderSVGText.h:
            (WebCore::RenderSVGText::toSVGRenderBase):
            * rendering/SVGRenderSupport.cpp:
            (WebCore::SVGRenderBase::~SVGRenderBase):
            (WebCore::SVGRenderBase::prepareToRenderSVGContent):
            (WebCore::SVGRenderBase::filterBoundingBoxForRenderer):
            (WebCore::SVGRenderBase::clipperBoundingBoxForRenderer):
            (WebCore::SVGRenderBase::maskerBoundingBoxForRenderer):
            * rendering/SVGRenderSupport.h:
            (WebCore::SVGRenderBase::toSVGRenderBase):
            (WebCore::SVGRenderBase::strokeBoundingBox):
            (WebCore::SVGRenderBase::markerBoundingBox):
            * rendering/SVGRootInlineBox.h:
            (WebCore::SVGRootInlineBox::toSVGRenderBase):
            (WebCore::SVGRootInlineBox::objectBoundingBox):
            (WebCore::SVGRootInlineBox::repaintRectInLocalCoordinates):
            * svg/SVGFilterElement.cpp:
            (WebCore::SVGFilterElement::filterBoundingBox):
            * svg/SVGFilterElement.h:
            * svg/SVGMaskElement.cpp:
            (WebCore::SVGMaskElement::maskBoundingBox):
            (WebCore::SVGMaskElement::drawMaskerContent):
            * svg/SVGMaskElement.h:
            * svg/graphics/SVGResourceClipper.cpp:
            (WebCore::SVGResourceClipper::clipperBoundingBox):
            * svg/graphics/SVGResourceClipper.h:
            * svg/graphics/SVGResourceFilter.cpp:
            (WebCore::SVGResourceFilter::filterBoundingBox):
            (WebCore::shouldProcessFilter):
            (WebCore::SVGResourceFilter::prepareFilter):
            * svg/graphics/SVGResourceFilter.h:
            * svg/graphics/SVGResourceMasker.cpp:
            (WebCore::SVGResourceMasker::maskerBoundingBox):
            (WebCore::SVGResourceMasker::applyMask):
            * svg/graphics/SVGResourceMasker.h:
    
    2009-12-30  Dirk Schulze  <krit at webkit.org>
    
            Reviewed by Nikolas Zimmmermann.
    
            Detailed boundingBoxes in SVG Renderer
            https://bugs.webkit.org/show_bug.cgi?id=32815
    
            Mainly Filter and Masker tests need new test results.
            repaintRectInLocalCoordinates changed to calculate the smallest
            repaint area considering the bounding bo of masker, filter and
            clipper as well as the stroke and marker boundaries.
    
            * platform/mac/svg/W3C-SVG-1.1/filters-color-01-b-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/filters-example-01-b-expected.checksum:
            * platform/mac/svg/W3C-SVG-1.1/filters-example-01-b-expected.png:
            * platform/mac/svg/W3C-SVG-1.1/filters-example-01-b-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/filters-felem-01-b-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/filters-image-01-b-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/filters-morph-01-f-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/filters-offset-01-b-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/masking-intro-01-f-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/masking-mask-01-b-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/masking-path-01-b-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/masking-path-02-b-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/painting-marker-02-f-expected.txt:
            * platform/mac/svg/batik/filters/feTile-expected.txt:
            * platform/mac/svg/batik/filters/filterRegions-expected.txt:
            * platform/mac/svg/batik/masking/maskRegions-expected.txt:
            * platform/mac/svg/batik/text/textEffect-expected.txt:
            * platform/mac/svg/batik/text/textEffect3-expected.txt:
            * platform/mac/svg/css/clippath-with-shadow-expected.txt:
            * platform/mac/svg/custom/clip-path-display-none-child-expected.txt:
            * platform/mac/svg/custom/clip-path-href-changes-expected.txt:
            * platform/mac/svg/custom/clip-path-referencing-use-expected.txt:
            * platform/mac/svg/custom/clip-path-referencing-use2-expected.txt:
            * platform/mac/svg/custom/clip-path-with-transform-expected.txt:
            * platform/mac/svg/custom/empty-merge-expected.txt:
            * platform/mac/svg/custom/feDisplacementMap-01-expected.txt:
            * platform/mac/svg/custom/focus-ring-expected.checksum:
            * platform/mac/svg/custom/focus-ring-expected.png:
            * platform/mac/svg/custom/focus-ring-expected.txt:
            * platform/mac/svg/custom/image-with-transform-clip-filter-expected.txt:
            * platform/mac/svg/custom/js-late-clipPath-and-object-creation-expected.txt:
            * platform/mac/svg/custom/js-late-clipPath-creation-expected.txt:
            * platform/mac/svg/custom/mask-excessive-malloc-expected.checksum:
            * platform/mac/svg/custom/mask-excessive-malloc-expected.png:
            * platform/mac/svg/custom/mask-with-all-units-expected.txt:
            * platform/mac/svg/custom/non-opaque-filters-expected.txt:
            * platform/mac/svg/custom/recursive-clippath-expected.txt:
            * platform/mac/svg/custom/text-clip-expected.txt:
            * platform/mac/svg/custom/visibility-override-clip-expected.txt:
            * platform/mac/svg/filters/big-sized-filter-2-expected.txt:
            * platform/mac/svg/filters/big-sized-filter-expected.txt:
            * platform/mac/svg/filters/feDisplacementMap-expected.txt:
            * platform/mac/svg/filters/feMerge-expected.txt:
            * platform/mac/svg/filters/feOffset-expected.txt:
            * platform/mac/svg/filters/feTile-expected.txt:
            * platform/mac/svg/filters/filter-source-position-expected.txt:
            * platform/mac/svg/filters/filterRes-expected.txt:
            * platform/mac/svg/filters/shadow-on-filter-expected.txt:
            * platform/mac/svg/filters/shadow-on-rect-with-filter-expected.txt:
            * platform/mac/svg/filters/subRegion-one-effect-expected.txt:
            * platform/mac/svg/filters/subRegion-two-effects-expected.txt:
            * svg/custom/use-clipped-transform-expected.txt:
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@52647 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index 00c2a55..f215d8c 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,68 @@
+2009-12-30  Dirk Schulze  <krit at webkit.org>
+
+        Reviewed by Nikolas Zimmmermann.
+
+        Detailed boundingBoxes in SVG Renderer
+        https://bugs.webkit.org/show_bug.cgi?id=32815
+
+        Mainly Filter and Masker tests need new test results.
+        repaintRectInLocalCoordinates changed to calculate the smallest
+        repaint area considering the bounding bo of masker, filter and
+        clipper as well as the stroke and marker boundaries.            
+
+        * platform/mac/svg/W3C-SVG-1.1/filters-color-01-b-expected.txt:
+        * platform/mac/svg/W3C-SVG-1.1/filters-example-01-b-expected.checksum:
+        * platform/mac/svg/W3C-SVG-1.1/filters-example-01-b-expected.png:
+        * platform/mac/svg/W3C-SVG-1.1/filters-example-01-b-expected.txt:
+        * platform/mac/svg/W3C-SVG-1.1/filters-felem-01-b-expected.txt:
+        * platform/mac/svg/W3C-SVG-1.1/filters-image-01-b-expected.txt:
+        * platform/mac/svg/W3C-SVG-1.1/filters-morph-01-f-expected.txt:
+        * platform/mac/svg/W3C-SVG-1.1/filters-offset-01-b-expected.txt:
+        * platform/mac/svg/W3C-SVG-1.1/masking-intro-01-f-expected.txt:
+        * platform/mac/svg/W3C-SVG-1.1/masking-mask-01-b-expected.txt:
+        * platform/mac/svg/W3C-SVG-1.1/masking-path-01-b-expected.txt:
+        * platform/mac/svg/W3C-SVG-1.1/masking-path-02-b-expected.txt:
+        * platform/mac/svg/W3C-SVG-1.1/painting-marker-02-f-expected.txt:
+        * platform/mac/svg/batik/filters/feTile-expected.txt:
+        * platform/mac/svg/batik/filters/filterRegions-expected.txt:
+        * platform/mac/svg/batik/masking/maskRegions-expected.txt:
+        * platform/mac/svg/batik/text/textEffect-expected.txt:
+        * platform/mac/svg/batik/text/textEffect3-expected.txt:
+        * platform/mac/svg/css/clippath-with-shadow-expected.txt:
+        * platform/mac/svg/custom/clip-path-display-none-child-expected.txt:
+        * platform/mac/svg/custom/clip-path-href-changes-expected.txt:
+        * platform/mac/svg/custom/clip-path-referencing-use-expected.txt:
+        * platform/mac/svg/custom/clip-path-referencing-use2-expected.txt:
+        * platform/mac/svg/custom/clip-path-with-transform-expected.txt:
+        * platform/mac/svg/custom/empty-merge-expected.txt:
+        * platform/mac/svg/custom/feDisplacementMap-01-expected.txt:
+        * platform/mac/svg/custom/focus-ring-expected.checksum:
+        * platform/mac/svg/custom/focus-ring-expected.png:
+        * platform/mac/svg/custom/focus-ring-expected.txt:
+        * platform/mac/svg/custom/image-with-transform-clip-filter-expected.txt:
+        * platform/mac/svg/custom/js-late-clipPath-and-object-creation-expected.txt:
+        * platform/mac/svg/custom/js-late-clipPath-creation-expected.txt:
+        * platform/mac/svg/custom/mask-excessive-malloc-expected.checksum:
+        * platform/mac/svg/custom/mask-excessive-malloc-expected.png:
+        * platform/mac/svg/custom/mask-with-all-units-expected.txt:
+        * platform/mac/svg/custom/non-opaque-filters-expected.txt:
+        * platform/mac/svg/custom/recursive-clippath-expected.txt:
+        * platform/mac/svg/custom/text-clip-expected.txt:
+        * platform/mac/svg/custom/visibility-override-clip-expected.txt:
+        * platform/mac/svg/filters/big-sized-filter-2-expected.txt:
+        * platform/mac/svg/filters/big-sized-filter-expected.txt:
+        * platform/mac/svg/filters/feDisplacementMap-expected.txt:
+        * platform/mac/svg/filters/feMerge-expected.txt:
+        * platform/mac/svg/filters/feOffset-expected.txt:
+        * platform/mac/svg/filters/feTile-expected.txt:
+        * platform/mac/svg/filters/filter-source-position-expected.txt:
+        * platform/mac/svg/filters/filterRes-expected.txt:
+        * platform/mac/svg/filters/shadow-on-filter-expected.txt:
+        * platform/mac/svg/filters/shadow-on-rect-with-filter-expected.txt:
+        * platform/mac/svg/filters/subRegion-one-effect-expected.txt:
+        * platform/mac/svg/filters/subRegion-two-effects-expected.txt:
+        * svg/custom/use-clipped-transform-expected.txt:
+
 2009-12-29  Adam Barth  <abarth at webkit.org>
 
         Reviewed by Sam Weinig.
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1/filters-color-01-b-expected.txt b/LayoutTests/platform/mac/svg/W3C-SVG-1.1/filters-color-01-b-expected.txt
index b788e87..fa8accd 100644
--- a/LayoutTests/platform/mac/svg/W3C-SVG-1.1/filters-color-01-b-expected.txt
+++ b/LayoutTests/platform/mac/svg/W3C-SVG-1.1/filters-color-01-b-expected.txt
@@ -6,16 +6,16 @@ KCanvasResource {id="LuminanceToAlpha" [type=FILTER]  [bounding box=at (-5.00%,-
 layer at (0,0) size 480x360
   RenderView at (0,0) size 480x360
 layer at (0,0) size 480x360
-  RenderSVGRoot {svg} at (0.50,0.50) size 479x359
-    RenderSVGContainer {g} at (8.29,5.29) size 463.42x291.45
-      RenderSVGViewportContainer {svg} at (8.29,5.29) size 463.42x291.45
+  RenderSVGRoot {svg} at (-2.44,0.50) size 484.88x359
+    RenderSVGContainer {g} at (-2.44,5.29) size 484.88x291.45
+      RenderSVGViewportContainer {svg} at (-2.44,5.29) size 484.88x291.45
         RenderSVGHiddenContainer {defs} at (0,0) size 0x0
           RenderSVGHiddenContainer {linearGradient} at (0,0) size 0x0
             RenderSVGGradientStop {stop} at (0,0) size 0x0
             RenderSVGGradientStop {stop} at (0,0) size 0x0
             RenderSVGGradientStop {stop} at (0,0) size 0x0
             RenderSVGGradientStop {stop} at (0,0) size 0x0
-        RenderSVGContainer {g} at (8.29,5.29) size 463.42x291.45
+        RenderSVGContainer {g} at (-2.44,5.29) size 484.88x291.45
           RenderPath {rect} at (8.29,5.29) size 463.42x289.42 [stroke={[type=SOLID] [color=#0000FF]}] [data="M1.00,1.00 L799.00,1.00 L799.00,499.00 L1.00,499.00 Z"]
           RenderPath {rect} at (19.60,16.60) size 440.80x23.20 [fill={[type=LINEAR-GRADIENT] [stops=[(0.00,#DD00DD), (0.33,#22CC22), (0.67,#400000), (1.00,#A0A0FF)]] [bounding box mode=0] [start=(20,0)] [end=(760,0)]}] [data="M20.00,20.00 L780.00,20.00 L780.00,60.00 L20.00,60.00 Z"]
           RenderSVGText {text} at (20,95) size 196x48 contains 1 chunk(s)
@@ -25,15 +25,15 @@ layer at (0,0) size 480x360
           RenderSVGText {text} at (20,195) size 675x48 contains 1 chunk(s)
             RenderSVGInlineText {#text} at (0,-40) size 675x48
               chunk 1 text run 1 at (20.00,195.00) startOffset 0 endOffset 32 width 675.00: "type=\"matrix\" (grayscale matrix)"
-          RenderPath {rect} at (19.60,132.60) size 440.80x23.20 [fill={[type=LINEAR-GRADIENT] [stops=[(0.00,#DD00DD), (0.33,#22CC22), (0.67,#400000), (1.00,#A0A0FF)]] [bounding box mode=0] [start=(20,0)] [end=(760,0)]}] [filter=Saturate40] [data="M20.00,220.00 L780.00,220.00 L780.00,260.00 L20.00,260.00 Z"]
+          RenderPath {rect} at (-2.44,131.44) size 484.88x25.52 [fill={[type=LINEAR-GRADIENT] [stops=[(0.00,#DD00DD), (0.33,#22CC22), (0.67,#400000), (1.00,#A0A0FF)]] [bounding box mode=0] [start=(20,0)] [end=(760,0)]}] [filter=Saturate40] [data="M20.00,220.00 L780.00,220.00 L780.00,260.00 L20.00,260.00 Z"]
           RenderSVGText {text} at (20,295) size 577x48 contains 1 chunk(s)
             RenderSVGInlineText {#text} at (0,-40) size 577x48
               chunk 1 text run 1 at (20.00,295.00) startOffset 0 endOffset 27 width 577.00: "type=\"saturate\" values=\".4\""
-          RenderPath {rect} at (19.60,190.60) size 440.80x23.20 [fill={[type=LINEAR-GRADIENT] [stops=[(0.00,#DD00DD), (0.33,#22CC22), (0.67,#400000), (1.00,#A0A0FF)]] [bounding box mode=0] [start=(20,0)] [end=(760,0)]}] [filter=HueRotate90] [data="M20.00,320.00 L780.00,320.00 L780.00,360.00 L20.00,360.00 Z"]
+          RenderPath {rect} at (-2.44,189.44) size 484.88x25.52 [fill={[type=LINEAR-GRADIENT] [stops=[(0.00,#DD00DD), (0.33,#22CC22), (0.67,#400000), (1.00,#A0A0FF)]] [bounding box mode=0] [start=(20,0)] [end=(760,0)]}] [filter=HueRotate90] [data="M20.00,320.00 L780.00,320.00 L780.00,360.00 L20.00,360.00 Z"]
           RenderSVGText {text} at (20,395) size 626x48 contains 1 chunk(s)
             RenderSVGInlineText {#text} at (0,-40) size 626x48
               chunk 1 text run 1 at (20.00,395.00) startOffset 0 endOffset 28 width 626.00: "type=\"hueRotate\" values=\"90\""
-          RenderPath {rect} at (19.60,248.60) size 440.80x23.20 [fill={[type=LINEAR-GRADIENT] [stops=[(0.00,#DD00DD), (0.33,#22CC22), (0.67,#400000), (1.00,#A0A0FF)]] [bounding box mode=0] [start=(20,0)] [end=(760,0)]}] [filter=LuminanceToAlpha] [data="M20.00,420.00 L780.00,420.00 L780.00,460.00 L20.00,460.00 Z"]
+          RenderPath {rect} at (-2.44,247.44) size 484.88x25.52 [fill={[type=LINEAR-GRADIENT] [stops=[(0.00,#DD00DD), (0.33,#22CC22), (0.67,#400000), (1.00,#A0A0FF)]] [bounding box mode=0] [start=(20,0)] [end=(760,0)]}] [filter=LuminanceToAlpha] [data="M20.00,420.00 L780.00,420.00 L780.00,460.00 L20.00,460.00 Z"]
           RenderSVGText {text} at (20,495) size 524x48 contains 1 chunk(s)
             RenderSVGInlineText {#text} at (0,-40) size 524x48
               chunk 1 text run 1 at (20.00,495.00) startOffset 0 endOffset 23 width 524.00: "type=\"luminanceToAlpha\""
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1/filters-example-01-b-expected.checksum b/LayoutTests/platform/mac/svg/W3C-SVG-1.1/filters-example-01-b-expected.checksum
index e9092f0..d283320 100644
--- a/LayoutTests/platform/mac/svg/W3C-SVG-1.1/filters-example-01-b-expected.checksum
+++ b/LayoutTests/platform/mac/svg/W3C-SVG-1.1/filters-example-01-b-expected.checksum
@@ -1 +1 @@
-6da30331382b43aa1d94df431c06cfb9
\ No newline at end of file
+c0ccdff2628158da021f32ba7af1e47c
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1/filters-example-01-b-expected.png b/LayoutTests/platform/mac/svg/W3C-SVG-1.1/filters-example-01-b-expected.png
index 94d5de8..e62ad85 100644
Binary files a/LayoutTests/platform/mac/svg/W3C-SVG-1.1/filters-example-01-b-expected.png and b/LayoutTests/platform/mac/svg/W3C-SVG-1.1/filters-example-01-b-expected.png differ
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1/filters-example-01-b-expected.txt b/LayoutTests/platform/mac/svg/W3C-SVG-1.1/filters-example-01-b-expected.txt
index 623fa85..6e1bccf 100644
--- a/LayoutTests/platform/mac/svg/W3C-SVG-1.1/filters-example-01-b-expected.txt
+++ b/LayoutTests/platform/mac/svg/W3C-SVG-1.1/filters-example-01-b-expected.txt
@@ -3,11 +3,11 @@ layer at (0,0) size 480x360
   RenderView at (0,0) size 480x360
 layer at (0,0) size 480x360
   RenderSVGRoot {svg} at (0.50,0.50) size 479x359
-    RenderSVGContainer {g} at (70,110) size 320x180
-      RenderSVGViewportContainer {svg} at (70,110) size 320x180
+    RenderSVGContainer {g} at (80,110) size 300x180
+      RenderSVGViewportContainer {svg} at (80,110) size 300x180
         RenderSVGHiddenContainer {defs} at (0,0) size 0x0
         RenderPath {rect} at (80.75,110.75) size 298.50x178.50 [stroke={[type=SOLID] [color=#0000FF]}] [fill={[type=SOLID] [color=#888888]}] [data="M1.00,1.00 L199.00,1.00 L199.00,119.00 L1.00,119.00 Z"]
-        RenderSVGContainer {g} at (70,110) size 320x180 [filter=MyFilter]
+        RenderSVGContainer {g} at (80,110) size 300x180 [filter=MyFilter]
           RenderSVGContainer {g} at (70,147.50) size 320x105
             RenderPath {path} at (70,147.50) size 320x105 [stroke={[type=SOLID] [color=#D90000] [stroke width=10.00]}] [data="M50.00,90.00 C0.00,90.00,0.00,30.00,50.00,30.00 L150.00,30.00 C200.00,30.00,200.00,90.00,150.00,90.00 Z"]
             RenderPath {path} at (125,170) size 210x60 [fill={[type=SOLID] [color=#D90000]}] [data="M60.00,80.00 C30.00,80.00,30.00,40.00,60.00,40.00 L140.00,40.00 C170.00,40.00,170.00,80.00,140.00,80.00 Z"]
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1/filters-felem-01-b-expected.txt b/LayoutTests/platform/mac/svg/W3C-SVG-1.1/filters-felem-01-b-expected.txt
index 390a740..a9f0d01 100644
--- a/LayoutTests/platform/mac/svg/W3C-SVG-1.1/filters-felem-01-b-expected.txt
+++ b/LayoutTests/platform/mac/svg/W3C-SVG-1.1/filters-felem-01-b-expected.txt
@@ -4,7 +4,7 @@ layer at (0,0) size 480x360
   RenderView at (0,0) size 480x360
 layer at (0,0) size 480x360
   RenderSVGRoot {svg} at (0.50,0.50) size 479x359
-    RenderSVGContainer {g} at (89,20) size 356x265
+    RenderSVGContainer {g} at (82,20) size 363x265
       RenderSVGHiddenContainer {defs} at (0,0) size 0x0
       RenderSVGContainer {g} at (90,20) size 80x115
         RenderPath {circle} at (100,30) size 60x60 [fill={[type=SOLID] [color=#FF0000]}] [data="M160.00,60.00 L159.94,61.88 L159.76,63.76 L159.47,65.62 L159.06,67.46 L158.53,69.27 L157.89,71.04 L157.14,72.77 L156.29,74.45 L155.33,76.07 L154.27,77.63 L153.12,79.12 L151.87,80.54 L150.54,81.87 L149.12,83.12 L147.63,84.27 L146.07,85.33 L144.45,86.29 L142.77,87.14 L141.04,87.89 L139.27,88.53 L137.46,89.06 L135.62,89.47 L133.76,89.76 L131.88,89.94 L130.00,90.00 L128.12,89.94 L126.24,89.76 L124.38,89.47 L122.54,89.06 L120.73,88.53 L118.96,87.89 L117.23,87.14 L115.55,86.29 L113.93,85.33 L112.37,84.27 L110.88,83.12 L109.46,81.87 L108.13,80.54 L106.88,79.12 L105.73,77.63 L104.67,76.07 L103.71,74.45 L102.86,72.77 L102.11,71.04 L101.47,69.27 L100.94,67.46 L100.53,65.62 L100.24,63.76 L100.06,61.88 L100.00,60.00 L100.06,58.12 L100.24,56.24 L100.53,54.38 L100.94,52.54 L101.47,50.73 L102.11,48.96 L102.86,47.23 L103.71,45.55 L104.67,43.93 L105.73,42.37 L106.88,40.88 L108.13,39.46 L109.46,38.13 L110.88,36.88 L112.37,35.73 L113.93,34.67 L115.55,33.71 L117.23,32.86 L118.96,32.11 L120.73,31.47 L122.54,30.94 L124.38,30.53 L126.24,30.24 L128.12,30.06 L130.00,30.00 L131.88,30.06 L133.76,30.24 L135.62,30.53 L137.46,30.94 L139.27,31.47 L141.04,32.11 L142.77,32.86 L144.45,33.71 L146.07,34.67 L147.63,35.73 L149.12,36.88 L150.54,38.13 L151.87,39.46 L153.12,40.88 L154.27,42.37 L155.33,43.93 L156.29,45.55 L157.14,47.23 L157.89,48.96 L158.53,50.73 L159.06,52.54 L159.47,54.38 L159.76,56.24 L159.94,58.12 Z"]
@@ -12,9 +12,9 @@ layer at (0,0) size 480x360
         RenderSVGText {text} at (95,130) size 70x23 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-18) size 70x23
             chunk 1 (middle anchor) text run 1 at (95.00,130.00) startOffset 0 endOffset 9 width 70.00: "No filter"
-      RenderSVGContainer {g} at (89,170) size 82x115
+      RenderSVGContainer {g} at (82,162) size 96x123
         RenderPath {circle} at (100,180) size 60x60 [fill={[type=SOLID] [color=#FF0000]}] [data="M160.00,210.00 L159.94,211.88 L159.76,213.76 L159.47,215.62 L159.06,217.46 L158.53,219.27 L157.89,221.04 L157.14,222.77 L156.29,224.45 L155.33,226.07 L154.27,227.63 L153.12,229.12 L151.87,230.54 L150.54,231.87 L149.12,233.12 L147.63,234.27 L146.07,235.33 L144.45,236.29 L142.77,237.14 L141.04,237.89 L139.27,238.53 L137.46,239.06 L135.62,239.47 L133.76,239.76 L131.88,239.94 L130.00,240.00 L128.12,239.94 L126.24,239.76 L124.38,239.47 L122.54,239.06 L120.73,238.53 L118.96,237.89 L117.23,237.14 L115.55,236.29 L113.93,235.33 L112.37,234.27 L110.88,233.12 L109.46,231.87 L108.13,230.54 L106.88,229.12 L105.73,227.63 L104.67,226.07 L103.71,224.45 L102.86,222.77 L102.11,221.04 L101.47,219.27 L100.94,217.46 L100.53,215.62 L100.24,213.76 L100.06,211.88 L100.00,210.00 L100.06,208.12 L100.24,206.24 L100.53,204.38 L100.94,202.54 L101.47,200.73 L102.11,198.96 L102.86,197.23 L103.71,195.55 L104.67,193.93 L105.73,192.37 L106.88,190.88 L108.13,189.46 L109.46,188.13 L110.88,186.88 L112.37,185.73 L113.93,184.67 L115.55,183.71 L117.23,182.86 L118.96,182.11 L120.73,181.47 L122.54,180.94 L124.38,180.53 L126.24,180.24 L128.12,180.06 L130.00,180.00 L131.88,180.06 L133.76,180.24 L135.62,180.53 L137.46,180.94 L139.27,181.47 L141.04,182.11 L142.77,182.86 L144.45,183.71 L146.07,184.67 L147.63,185.73 L149.12,186.88 L150.54,188.13 L151.87,189.46 L153.12,190.88 L154.27,192.37 L155.33,193.93 L156.29,195.55 L157.14,197.23 L157.89,198.96 L158.53,200.73 L159.06,202.54 L159.47,204.38 L159.76,206.24 L159.94,208.12 Z"]
-        RenderPath {circle} at (90,170) size 80x80 [fill={[type=SOLID] [color=#000000]}] [filter=null] [data="M170.00,210.00 L169.92,212.51 L169.68,215.01 L169.29,217.50 L168.74,219.95 L168.04,222.36 L167.19,224.72 L166.19,227.03 L165.05,229.27 L163.77,231.43 L162.36,233.51 L160.82,235.50 L159.16,237.38 L157.38,239.16 L155.50,240.82 L153.51,242.36 L151.43,243.77 L149.27,245.05 L147.03,246.19 L144.72,247.19 L142.36,248.04 L139.95,248.74 L137.50,249.29 L135.01,249.68 L132.51,249.92 L130.00,250.00 L127.49,249.92 L124.99,249.68 L122.50,249.29 L120.05,248.74 L117.64,248.04 L115.28,247.19 L112.97,246.19 L110.73,245.05 L108.57,243.77 L106.49,242.36 L104.50,240.82 L102.62,239.16 L100.84,237.38 L99.18,235.50 L97.64,233.51 L96.23,231.43 L94.95,229.27 L93.81,227.03 L92.81,224.72 L91.96,222.36 L91.26,219.95 L90.71,217.50 L90.32,215.01 L90.08,212.51 L90.00,210.00 L90.08,207.49 L90.32,204.99 L90.71,202.50 L91.26,200.05 L91.96,197.64 L92.81,195.28 L93.81,192.97 L94.95,190.73 L96.23,188.57 L97.64,186.49 L99.18,184.50 L100.84,182.62 L102.62,180.84 L104.50,179.18 L106.49,177.64 L108.57,176.23 L110.73,174.95 L112.97,173.81 L115.28,172.81 L117.64,171.96 L120.05,171.26 L122.50,170.71 L124.99,170.32 L127.49,170.08 L130.00,170.00 L132.51,170.08 L135.01,170.32 L137.50,170.71 L139.95,171.26 L142.36,171.96 L144.72,172.81 L147.03,173.81 L149.27,174.95 L151.43,176.23 L153.51,177.64 L155.50,179.18 L157.38,180.84 L159.16,182.62 L160.82,184.50 L162.36,186.49 L163.77,188.57 L165.05,190.73 L166.19,192.97 L167.19,195.28 L168.04,197.64 L168.74,200.05 L169.29,202.50 L169.68,204.99 L169.92,207.49 Z"]
+        RenderPath {circle} at (82,162) size 96x96 [fill={[type=SOLID] [color=#000000]}] [filter=null] [data="M170.00,210.00 L169.92,212.51 L169.68,215.01 L169.29,217.50 L168.74,219.95 L168.04,222.36 L167.19,224.72 L166.19,227.03 L165.05,229.27 L163.77,231.43 L162.36,233.51 L160.82,235.50 L159.16,237.38 L157.38,239.16 L155.50,240.82 L153.51,242.36 L151.43,243.77 L149.27,245.05 L147.03,246.19 L144.72,247.19 L142.36,248.04 L139.95,248.74 L137.50,249.29 L135.01,249.68 L132.51,249.92 L130.00,250.00 L127.49,249.92 L124.99,249.68 L122.50,249.29 L120.05,248.74 L117.64,248.04 L115.28,247.19 L112.97,246.19 L110.73,245.05 L108.57,243.77 L106.49,242.36 L104.50,240.82 L102.62,239.16 L100.84,237.38 L99.18,235.50 L97.64,233.51 L96.23,231.43 L94.95,229.27 L93.81,227.03 L92.81,224.72 L91.96,222.36 L91.26,219.95 L90.71,217.50 L90.32,215.01 L90.08,212.51 L90.00,210.00 L90.08,207.49 L90.32,204.99 L90.71,202.50 L91.26,200.05 L91.96,197.64 L92.81,195.28 L93.81,192.97 L94.95,190.73 L96.23,188.57 L97.64,186.49 L99.18,184.50 L100.84,182.62 L102.62,180.84 L104.50,179.18 L106.49,177.64 L108.57,176.23 L110.73,174.95 L112.97,173.81 L115.28,172.81 L117.64,171.96 L120.05,171.26 L122.50,170.71 L124.99,170.32 L127.49,170.08 L130.00,170.00 L132.51,170.08 L135.01,170.32 L137.50,170.71 L139.95,171.26 L142.36,171.96 L144.72,172.81 L147.03,173.81 L149.27,174.95 L151.43,176.23 L153.51,177.64 L155.50,179.18 L157.38,180.84 L159.16,182.62 L160.82,184.50 L162.36,186.49 L163.77,188.57 L165.05,190.73 L166.19,192.97 L167.19,195.28 L168.04,197.64 L168.74,200.05 L169.29,202.50 L169.68,204.99 L169.92,207.49 Z"]
         RenderSVGText {text} at (89,280) size 82x23 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-18) size 82x23
             chunk 1 (middle anchor) text run 1 at (89.00,280.00) startOffset 0 endOffset 11 width 82.00: "Null filter"
@@ -24,9 +24,9 @@ layer at (0,0) size 480x360
         RenderSVGText {text} at (254,130) size 152x23 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-18) size 152x23
             chunk 1 (middle anchor) text run 1 at (254.50,130.00) startOffset 0 endOffset 19 width 151.00: "Non-existant filter"
-      RenderSVGContainer {g} at (215,170) size 230x115
+      RenderSVGContainer {g} at (215,180) size 230x105
         RenderPath {circle} at (300,180) size 60x60 [fill={[type=SOLID] [color=#FF0000]}] [data="M360.00,210.00 L359.94,211.88 L359.76,213.76 L359.47,215.62 L359.06,217.46 L358.53,219.27 L357.89,221.04 L357.14,222.77 L356.29,224.45 L355.33,226.07 L354.27,227.63 L353.12,229.12 L351.87,230.54 L350.54,231.87 L349.12,233.12 L347.63,234.27 L346.07,235.33 L344.45,236.29 L342.77,237.14 L341.04,237.89 L339.27,238.53 L337.46,239.06 L335.62,239.47 L333.76,239.76 L331.88,239.94 L330.00,240.00 L328.12,239.94 L326.24,239.76 L324.38,239.47 L322.54,239.06 L320.73,238.53 L318.96,237.89 L317.23,237.14 L315.55,236.29 L313.93,235.33 L312.37,234.27 L310.88,233.12 L309.46,231.87 L308.13,230.54 L306.88,229.12 L305.73,227.63 L304.67,226.07 L303.71,224.45 L302.86,222.77 L302.11,221.04 L301.47,219.27 L300.94,217.46 L300.53,215.62 L300.24,213.76 L300.06,211.88 L300.00,210.00 L300.06,208.12 L300.24,206.24 L300.53,204.38 L300.94,202.54 L301.47,200.73 L302.11,198.96 L302.86,197.23 L303.71,195.55 L304.67,193.93 L305.73,192.37 L306.88,190.88 L308.13,189.46 L309.46,188.13 L310.88,186.88 L312.37,185.73 L313.93,184.67 L315.55,183.71 L317.23,182.86 L318.96,182.11 L320.73,181.47 L322.54,180.94 L324.38,180.53 L326.24,180.24 L328.12,180.06 L330.00,180.00 L331.88,180.06 L333.76,180.24 L335.62,180.53 L337.46,180.94 L339.27,181.47 L341.04,182.11 L342.77,182.86 L344.45,183.71 L346.07,184.67 L347.63,185.73 L349.12,186.88 L350.54,188.13 L351.87,189.46 L353.12,190.88 L354.27,192.37 L355.33,193.93 L356.29,195.55 L357.14,197.23 L357.89,198.96 L358.53,200.73 L359.06,202.54 L359.47,204.38 L359.76,206.24 L359.94,208.12 Z"]
-        RenderPath {circle} at (290,170) size 80x80 [fill={[type=SOLID] [color=#000000]}] [filter=nullreg] [data="M370.00,210.00 L369.92,212.51 L369.68,215.01 L369.29,217.50 L368.74,219.95 L368.04,222.36 L367.19,224.72 L366.19,227.03 L365.05,229.27 L363.77,231.43 L362.36,233.51 L360.82,235.50 L359.16,237.38 L357.38,239.16 L355.50,240.82 L353.51,242.36 L351.43,243.77 L349.27,245.05 L347.03,246.19 L344.72,247.19 L342.36,248.04 L339.95,248.74 L337.50,249.29 L335.01,249.68 L332.51,249.92 L330.00,250.00 L327.49,249.92 L324.99,249.68 L322.50,249.29 L320.05,248.74 L317.64,248.04 L315.28,247.19 L312.97,246.19 L310.73,245.05 L308.57,243.77 L306.49,242.36 L304.50,240.82 L302.62,239.16 L300.84,237.38 L299.18,235.50 L297.64,233.51 L296.23,231.43 L294.95,229.27 L293.81,227.03 L292.81,224.72 L291.96,222.36 L291.26,219.95 L290.71,217.50 L290.32,215.01 L290.08,212.51 L290.00,210.00 L290.08,207.49 L290.32,204.99 L290.71,202.50 L291.26,200.05 L291.96,197.64 L292.81,195.28 L293.81,192.97 L294.95,190.73 L296.23,188.57 L297.64,186.49 L299.18,184.50 L300.84,182.62 L302.62,180.84 L304.50,179.18 L306.49,177.64 L308.57,176.23 L310.73,174.95 L312.97,173.81 L315.28,172.81 L317.64,171.96 L320.05,171.26 L322.50,170.71 L324.99,170.32 L327.49,170.08 L330.00,170.00 L332.51,170.08 L335.01,170.32 L337.50,170.71 L339.95,171.26 L342.36,171.96 L344.72,172.81 L347.03,173.81 L349.27,174.95 L351.43,176.23 L353.51,177.64 L355.50,179.18 L357.38,180.84 L359.16,182.62 L360.82,184.50 L362.36,186.49 L363.77,188.57 L365.05,190.73 L366.19,192.97 L367.19,195.28 L368.04,197.64 L368.74,200.05 L369.29,202.50 L369.68,204.99 L369.92,207.49 Z"]
+        RenderPath {circle} at (322,202) size 16x16 [fill={[type=SOLID] [color=#000000]}] [filter=nullreg] [data="M370.00,210.00 L369.92,212.51 L369.68,215.01 L369.29,217.50 L368.74,219.95 L368.04,222.36 L367.19,224.72 L366.19,227.03 L365.05,229.27 L363.77,231.43 L362.36,233.51 L360.82,235.50 L359.16,237.38 L357.38,239.16 L355.50,240.82 L353.51,242.36 L351.43,243.77 L349.27,245.05 L347.03,246.19 L344.72,247.19 L342.36,248.04 L339.95,248.74 L337.50,249.29 L335.01,249.68 L332.51,249.92 L330.00,250.00 L327.49,249.92 L324.99,249.68 L322.50,249.29 L320.05,248.74 L317.64,248.04 L315.28,247.19 L312.97,246.19 L310.73,245.05 L308.57,243.77 L306.49,242.36 L304.50,240.82 L302.62,239.16 L300.84,237.38 L299.18,235.50 L297.64,233.51 L296.23,231.43 L294.95,229.27 L293.81,227.03 L292.81,224.72 L291.96,222.36 L291.26,219.95 L290.71,217.50 L290.32,215.01 L290.08,212.51 L290.00,210.00 L290.08,207.49 L290.32,204.99 L290.71,202.50 L291.26,200.05 L291.96,197.64 L292.81,195.28 L293.81,192.97 L294.95,190.73 L296.23,188.57 L297.64,186.49 L299.18,184.50 L300.84,182.62 L302.62,180.84 L304.50,179.18 L306.49,177.64 L308.57,176.23 L310.73,174.95 L312.97,173.81 L315.28,172.81 L317.64,171.96 L320.05,171.26 L322.50,170.71 L324.99,170.32 L327.49,170.08 L330.00,170.00 L332.51,170.08 L335.01,170.32 L337.50,170.71 L339.95,171.26 L342.36,171.96 L344.72,172.81 L347.03,173.81 L349.27,174.95 L351.43,176.23 L353.51,177.64 L355.50,179.18 L357.38,180.84 L359.16,182.62 L360.82,184.50 L362.36,186.49 L363.77,188.57 L365.05,190.73 L366.19,192.97 L367.19,195.28 L368.04,197.64 L368.74,200.05 L369.29,202.50 L369.68,204.99 L369.92,207.49 Z"]
         RenderSVGText {text} at (215,280) size 230x23 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-18) size 230x23
             chunk 1 (middle anchor) text run 1 at (215.00,280.00) startOffset 0 endOffset 29 width 230.00: "Null with small region filter"
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1/filters-image-01-b-expected.txt b/LayoutTests/platform/mac/svg/W3C-SVG-1.1/filters-image-01-b-expected.txt
index dc34ccb..6afe475 100644
--- a/LayoutTests/platform/mac/svg/W3C-SVG-1.1/filters-image-01-b-expected.txt
+++ b/LayoutTests/platform/mac/svg/W3C-SVG-1.1/filters-image-01-b-expected.txt
@@ -2,13 +2,13 @@ KCanvasResource {id="image" [type=FILTER]  [bounding box=at (-10.00%,-10.00%) si
 layer at (0,0) size 480x360
   RenderView at (0,0) size 480x360
 layer at (0,0) size 480x360
-  RenderSVGRoot {svg} at (0,0) size 480x360
-    RenderSVGContainer {g} at (0,0) size 480x360
+  RenderSVGRoot {svg} at (-48,-36) size 576x432
+    RenderSVGContainer {g} at (-48,-36) size 576x432
       RenderSVGHiddenContainer {defs} at (0,0) size 0x0
       RenderSVGText {text} at (147,20) size 186x14 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-11) size 186x14
           chunk 1 (middle anchor) text run 1 at (147.50,20.00) startOffset 0 endOffset 37 width 185.00: "Basic test of feImage filter support."
-      RenderPath {rect} at (0,0) size 480x360 [fill={[type=SOLID] [color=#000000]}] [filter=image] [data="M0.00,0.00 L480.00,0.00 L480.00,360.00 L0.00,360.00 Z"]
+      RenderPath {rect} at (-48,-36) size 576x432 [fill={[type=SOLID] [color=#000000]}] [filter=image] [data="M0.00,0.00 L480.00,0.00 L480.00,360.00 L0.00,360.00 Z"]
     RenderSVGText {text} at (10,340) size 264x46 contains 1 chunk(s)
       RenderSVGInlineText {#text} at (0,-36) size 264x46
         chunk 1 text run 1 at (10.00,340.00) startOffset 0 endOffset 16 width 264.00: "$Revision: 1.7 $"
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1/filters-morph-01-f-expected.txt b/LayoutTests/platform/mac/svg/W3C-SVG-1.1/filters-morph-01-f-expected.txt
index 93f9cdc..78e0c6a 100644
--- a/LayoutTests/platform/mac/svg/W3C-SVG-1.1/filters-morph-01-f-expected.txt
+++ b/LayoutTests/platform/mac/svg/W3C-SVG-1.1/filters-morph-01-f-expected.txt
@@ -6,11 +6,11 @@ layer at (0,0) size 480x360
   RenderView at (0,0) size 480x360
 layer at (0,0) size 480x360
   RenderSVGRoot {svg} at (0.50,0.50) size 479x359
-    RenderSVGContainer {g} at (35.00,2) size 403.93x292
+    RenderSVGContainer {g} at (38.58,2) size 392.73x292
       RenderSVGText {text} at (153,16) size 174x18 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-14) size 174x18
           chunk 1 (middle anchor) text run 1 at (153.00,16.00) startOffset 0 endOffset 27 width 174.00: "Filter Effect: feMorphology"
-      RenderSVGContainer {g} at (35.00,19.00) size 403.93x275.00 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,-6.00)}]
+      RenderSVGContainer {g} at (38.58,22.58) size 392.73x271.42 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,-6.00)}]
         RenderSVGHiddenContainer {defs} at (0,0) size 0x0
           RenderSVGContainer {g} at (-0.00,-0.00) size 148.93x123.29
             RenderSVGContainer {g} at (-0.00,-0.00) size 148.93x123.29
@@ -19,9 +19,9 @@ layer at (0,0) size 480x360
                 RenderPath {path} at (6.67,31.79) size 90.18x91.50 [stroke={[type=SOLID] [color=#00FF00] [stroke width=7.17]}] [data="M93.26,77.54 C93.26,100.82,74.68,119.70,51.76,119.70 C28.84,119.70,10.26,100.82,10.26,77.54 C10.26,54.25,28.84,35.37,51.76,35.37 C74.68,35.37,93.26,54.25,93.26,77.54 Z"]
                 RenderPath {path} at (47.69,20.24) size 101.25x97.90 [stroke={[type=SOLID] [color=#FF0000] [stroke width=7.17]}] [data="M98.31,28.44 L111.60,55.80 L141.31,60.18 L119.81,81.48 L124.89,111.54 L98.31,97.35 L71.73,111.54 L76.81,81.48 L55.31,60.18 L85.02,55.80 L98.31,28.44 Z"]
                 RenderPath {path} at (36.36,-0.00) size 98.79x81.63 [stroke={[type=SOLID] [color=#FFFF00] [stroke width=7.17]}] [data="M131.56,26.34 C131.56,54.90,108.77,78.05,80.66,78.05 C58.17,78.05,39.94,59.53,39.94,36.68 C39.94,18.40,54.53,3.59,72.52,3.59 C86.91,3.59,98.58,15.44,98.58,30.06 C98.58,41.76,89.25,51.24,77.73,51.24 C68.52,51.24,61.05,43.65,61.05,34.30 C61.05,26.81,67.03,20.74,74.39,20.74 C80.29,20.74,85.07,25.60,85.07,31.59 C85.07,36.38,81.25,40.26,76.53,40.26 C72.75,40.26,69.70,37.15,69.70,33.32"]
-        RenderSVGContainer {g} at (35.00,19.00) size 403.93x275.00
-          RenderSVGContainer {g} at (35.00,19.00) size 148.93x135.00
-            RenderSVGContainer {use} at (35.00,19.00) size 148.93x123.29 [filter=erode1]
+        RenderSVGContainer {g} at (38.58,22.58) size 392.73x271.42
+          RenderSVGContainer {g} at (38.58,22.58) size 137.73x131.42
+            RenderSVGContainer {use} at (38.58,22.58) size 137.73x116.11 [filter=erode1]
               RenderSVGContainer {g} at (35.00,19.00) size 148.93x123.29 [transform={m=((1.00,0.00)(0.00,1.00)) t=(35.00,25.00)}]
                 RenderSVGContainer {g} at (35.00,19.00) size 148.93x123.29
                   RenderSVGContainer {g} at (35.00,19.00) size 148.93x123.29
@@ -33,8 +33,8 @@ layer at (0,0) size 480x360
             RenderSVGText {text} at (45,156) size 130x18 contains 1 chunk(s)
               RenderSVGInlineText {#text} at (0,-14) size 130x18
                 chunk 1 (middle anchor) text run 1 at (45.00,156.00) startOffset 0 endOffset 19 width 130.00: "type=erode radius=1"
-          RenderSVGContainer {g} at (290.00,19.00) size 148.93x135.00 [transform={m=((1.00,0.00)(0.00,1.00)) t=(255.00,0.00)}]
-            RenderSVGContainer {use} at (290.00,19.00) size 148.93x123.29 [filter=erode2]
+          RenderSVGContainer {g} at (293.58,22.58) size 137.73x131.42 [transform={m=((1.00,0.00)(0.00,1.00)) t=(255.00,0.00)}]
+            RenderSVGContainer {use} at (293.58,22.58) size 137.73x116.11 [filter=erode2]
               RenderSVGContainer {g} at (290.00,19.00) size 148.93x123.29 [transform={m=((1.00,0.00)(0.00,1.00)) t=(35.00,25.00)}]
                 RenderSVGContainer {g} at (290.00,19.00) size 148.93x123.29
                   RenderSVGContainer {g} at (290.00,19.00) size 148.93x123.29
@@ -46,8 +46,8 @@ layer at (0,0) size 480x360
             RenderSVGText {text} at (45,156) size 130x18 contains 1 chunk(s)
               RenderSVGInlineText {#text} at (0,-14) size 130x18
                 chunk 1 (middle anchor) text run 1 at (45.00,156.00) startOffset 0 endOffset 19 width 130.00: "type=erode radius=2"
-          RenderSVGContainer {g} at (35.00,159.00) size 148.93x135.00 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,140.00)}]
-            RenderSVGContainer {use} at (35.00,159.00) size 148.93x123.29 [filter=dilate1]
+          RenderSVGContainer {g} at (38.58,162.58) size 137.73x131.42 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,140.00)}]
+            RenderSVGContainer {use} at (38.58,162.58) size 137.73x116.11 [filter=dilate1]
               RenderSVGContainer {g} at (35.00,159.00) size 148.93x123.29 [transform={m=((1.00,0.00)(0.00,1.00)) t=(35.00,25.00)}]
                 RenderSVGContainer {g} at (35.00,159.00) size 148.93x123.29
                   RenderSVGContainer {g} at (35.00,159.00) size 148.93x123.29
@@ -59,8 +59,8 @@ layer at (0,0) size 480x360
             RenderSVGText {text} at (45,156) size 130x18 contains 1 chunk(s)
               RenderSVGInlineText {#text} at (0,-14) size 130x18
                 chunk 1 (middle anchor) text run 1 at (45.50,156.00) startOffset 0 endOffset 20 width 129.00: "type=dilate radius=1"
-          RenderSVGContainer {g} at (290.00,159.00) size 148.93x135.00 [transform={m=((1.00,0.00)(0.00,1.00)) t=(255.00,140.00)}]
-            RenderSVGContainer {use} at (290.00,159.00) size 148.93x123.29 [filter=dilate2]
+          RenderSVGContainer {g} at (293.58,162.58) size 137.73x131.42 [transform={m=((1.00,0.00)(0.00,1.00)) t=(255.00,140.00)}]
+            RenderSVGContainer {use} at (293.58,162.58) size 137.73x116.11 [filter=dilate2]
               RenderSVGContainer {g} at (290.00,159.00) size 148.93x123.29 [transform={m=((1.00,0.00)(0.00,1.00)) t=(35.00,25.00)}]
                 RenderSVGContainer {g} at (290.00,159.00) size 148.93x123.29
                   RenderSVGContainer {g} at (290.00,159.00) size 148.93x123.29
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1/filters-offset-01-b-expected.txt b/LayoutTests/platform/mac/svg/W3C-SVG-1.1/filters-offset-01-b-expected.txt
index 28101a4..1a9b4a5 100644
--- a/LayoutTests/platform/mac/svg/W3C-SVG-1.1/filters-offset-01-b-expected.txt
+++ b/LayoutTests/platform/mac/svg/W3C-SVG-1.1/filters-offset-01-b-expected.txt
@@ -3,9 +3,9 @@ layer at (0,0) size 480x360
   RenderView at (0,0) size 480x360
 layer at (0,0) size 480x360
   RenderSVGRoot {svg} at (0.50,0.50) size 479x359
-    RenderSVGContainer {g} at (109,10) size 142x181
+    RenderSVGContainer {g} at (109,10) size 211x320
       RenderSVGHiddenContainer {defs} at (0,0) size 0x0
-      RenderPath {circle} at (120,10) size 80x80 [fill={[type=SOLID] [color=#000000]}] [filter=FOMTest] [data="M200.00,50.00 L199.92,52.51 L199.68,55.01 L199.29,57.50 L198.74,59.95 L198.04,62.36 L197.19,64.72 L196.19,67.03 L195.05,69.27 L193.77,71.43 L192.36,73.51 L190.82,75.50 L189.16,77.38 L187.38,79.16 L185.50,80.82 L183.51,82.36 L181.43,83.77 L179.27,85.05 L177.03,86.19 L174.72,87.19 L172.36,88.04 L169.95,88.74 L167.50,89.29 L165.01,89.68 L162.51,89.92 L160.00,90.00 L157.49,89.92 L154.99,89.68 L152.50,89.29 L150.05,88.74 L147.64,88.04 L145.28,87.19 L142.97,86.19 L140.73,85.05 L138.57,83.77 L136.49,82.36 L134.50,80.82 L132.62,79.16 L130.84,77.38 L129.18,75.50 L127.64,73.51 L126.23,71.43 L124.95,69.27 L123.81,67.03 L122.81,64.72 L121.96,62.36 L121.26,59.95 L120.71,57.50 L120.32,55.01 L120.08,52.51 L120.00,50.00 L120.08,47.49 L120.32,44.99 L120.71,42.50 L121.26,40.05 L121.96,37.64 L122.81,35.28 L123.81,32.97 L124.95,30.73 L126.23,28.57 L127.64,26.49 L129.18,24.50 L130.84,22.62 L132.62,20.84 L134.50,19.18 L136.49,17.64 L138.57,16.23 L140.73,14.95 L142.97,13.81 L145.28,12.81 L147.64,11.96 L150.05,11.26 L152.50,10.71 L154.99,10.32 L157.49,10.08 L160.00,10.00 L162.51,10.08 L165.01,10.32 L167.50,10.71 L169.95,11.26 L172.36,11.96 L174.72,12.81 L177.03,13.81 L179.27,14.95 L181.43,16.23 L183.51,17.64 L185.50,19.18 L187.38,20.84 L189.16,22.62 L190.82,24.50 L192.36,26.49 L193.77,28.57 L195.05,30.73 L196.19,32.97 L197.19,35.28 L198.04,37.64 L198.74,40.05 L199.29,42.50 L199.68,44.99 L199.92,47.49 Z"]
+      RenderPath {circle} at (120,10) size 200x320 [fill={[type=SOLID] [color=#000000]}] [filter=FOMTest] [data="M200.00,50.00 L199.92,52.51 L199.68,55.01 L199.29,57.50 L198.74,59.95 L198.04,62.36 L197.19,64.72 L196.19,67.03 L195.05,69.27 L193.77,71.43 L192.36,73.51 L190.82,75.50 L189.16,77.38 L187.38,79.16 L185.50,80.82 L183.51,82.36 L181.43,83.77 L179.27,85.05 L177.03,86.19 L174.72,87.19 L172.36,88.04 L169.95,88.74 L167.50,89.29 L165.01,89.68 L162.51,89.92 L160.00,90.00 L157.49,89.92 L154.99,89.68 L152.50,89.29 L150.05,88.74 L147.64,88.04 L145.28,87.19 L142.97,86.19 L140.73,85.05 L138.57,83.77 L136.49,82.36 L134.50,80.82 L132.62,79.16 L130.84,77.38 L129.18,75.50 L127.64,73.51 L126.23,71.43 L124.95,69.27 L123.81,67.03 L122.81,64.72 L121.96,62.36 L121.26,59.95 L120.71,57.50 L120.32,55.01 L120.08,52.51 L120.00,50.00 L120.08,47.49 L120.32,44.99 L120.71,42.50 L121.26,40.05 L121.96,37.64 L122.81,35.28 L123.81,32.97 L124.95,30.73 L126.23,28.57 L127.64,26.49 L129.18,24.50 L130.84,22.62 L132.62,20.84 L134.50,19.18 L136.49,17.64 L138.57,16.23 L140.73,14.95 L142.97,13.81 L145.28,12.81 L147.64,11.96 L150.05,11.26 L152.50,10.71 L154.99,10.32 L157.49,10.08 L160.00,10.00 L162.51,10.08 L165.01,10.32 L167.50,10.71 L169.95,11.26 L172.36,11.96 L174.72,12.81 L177.03,13.81 L179.27,14.95 L181.43,16.23 L183.51,17.64 L185.50,19.18 L187.38,20.84 L189.16,22.62 L190.82,24.50 L192.36,26.49 L193.77,28.57 L195.05,30.73 L196.19,32.97 L197.19,35.28 L198.04,37.64 L198.74,40.05 L199.29,42.50 L199.68,44.99 L199.92,47.49 Z"]
       RenderPath {path} at (109,79) size 22x22 [transform={m=((1.00,0.00)(0.00,1.00)) t=(120.00,90.00)}] [fill={[type=SOLID] [color=#000000]}] [data="M-1.00,-11.00 L1.00,-11.00 L1.00,-1.00 L11.00,-1.00 L11.00,1.00 L1.00,1.00 L1.00,11.00 L-1.00,11.00 L-1.00,1.00 L-11.00,1.00 L-11.00,-1.00 L-1.00,-1.00 L-1.00,-11.00"]
       RenderPath {path} at (149,109) size 22x22 [transform={m=((1.00,0.00)(0.00,1.00)) t=(160.00,120.00)}] [fill={[type=SOLID] [color=#408000] [opacity=0.80]}] [data="M-1.00,-11.00 L1.00,-11.00 L1.00,-1.00 L11.00,-1.00 L11.00,1.00 L1.00,1.00 L1.00,11.00 L-1.00,11.00 L-1.00,1.00 L-11.00,1.00 L-11.00,-1.00 L-1.00,-1.00 L-1.00,-11.00"]
       RenderPath {path} at (189,139) size 22x22 [transform={m=((1.00,0.00)(0.00,1.00)) t=(200.00,150.00)}] [fill={[type=SOLID] [color=#408000] [opacity=0.60]}] [data="M-1.00,-11.00 L1.00,-11.00 L1.00,-1.00 L11.00,-1.00 L11.00,1.00 L1.00,1.00 L1.00,11.00 L-1.00,11.00 L-1.00,1.00 L-11.00,1.00 L-11.00,-1.00 L-1.00,-1.00 L-1.00,-11.00"]
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1/masking-intro-01-f-expected.txt b/LayoutTests/platform/mac/svg/W3C-SVG-1.1/masking-intro-01-f-expected.txt
index c9b9919..96ad8c6 100644
--- a/LayoutTests/platform/mac/svg/W3C-SVG-1.1/masking-intro-01-f-expected.txt
+++ b/LayoutTests/platform/mac/svg/W3C-SVG-1.1/masking-intro-01-f-expected.txt
@@ -3,12 +3,12 @@ KCanvasResource {id="two" [type=MASKER]}
 layer at (0,0) size 480x360
   RenderView at (0,0) size 480x360
 layer at (0,0) size 480x360
-  RenderSVGRoot {svg} at (0.50,0) size 479x359.50
+  RenderSVGRoot {svg} at (0.50,0.50) size 479x359
     RenderSVGText {text} at (62,35) size 356x22 contains 1 chunk(s)
       RenderSVGInlineText {#text} at (0,-17) size 356x22
         chunk 1 (middle anchor) text run 1 at (62.50,35.00) startOffset 0 endOffset 51 width 355.00: "Testing stroke inclusion for 'clip-path' and 'mask'"
     RenderSVGHiddenContainer {defs} at (0,0) size 0x0
-    RenderPath {rect} at (150,0) size 200x200 [fill={[type=SOLID] [color=#00008B]}] [clip path="one"] [data="M150.00,0.00 L350.00,0.00 L350.00,200.00 L150.00,200.00 Z"]
+    RenderPath {rect} at (170,60) size 160x80 [fill={[type=SOLID] [color=#00008B]}] [clip path="one"] [data="M150.00,0.00 L350.00,0.00 L350.00,200.00 L150.00,200.00 Z"]
     RenderSVGText {text} at (50,110) size 111x18 contains 1 chunk(s)
       RenderSVGInlineText {#text} at (0,-14) size 111x18
         chunk 1 text run 1 at (50.00,110.00) startOffset 0 endOffset 19 width 111.00: "With a 'clip-path':"
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1/masking-mask-01-b-expected.txt b/LayoutTests/platform/mac/svg/W3C-SVG-1.1/masking-mask-01-b-expected.txt
index 27127e9..552737c 100644
--- a/LayoutTests/platform/mac/svg/W3C-SVG-1.1/masking-mask-01-b-expected.txt
+++ b/LayoutTests/platform/mac/svg/W3C-SVG-1.1/masking-mask-01-b-expected.txt
@@ -6,7 +6,7 @@ layer at (0,0) size 480x360
   RenderView at (0,0) size 480x360
 layer at (0,0) size 480x360
   RenderSVGRoot {svg} at (0.50,0.50) size 479x359
-    RenderSVGContainer {g} at (10,7) size 390x306
+    RenderSVGContainer {g} at (10,7) size 390x293
       RenderSVGHiddenContainer {defs} at (0,0) size 0x0
       RenderSVGText {text} at (10,20) size 139x16 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-13) size 139x16
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1/masking-path-01-b-expected.txt b/LayoutTests/platform/mac/svg/W3C-SVG-1.1/masking-path-01-b-expected.txt
index d032607..5b6bfad 100644
--- a/LayoutTests/platform/mac/svg/W3C-SVG-1.1/masking-path-01-b-expected.txt
+++ b/LayoutTests/platform/mac/svg/W3C-SVG-1.1/masking-path-01-b-expected.txt
@@ -4,13 +4,13 @@ layer at (0,0) size 480x360
   RenderView at (0,0) size 480x360
 layer at (0,0) size 480x360
   RenderSVGRoot {svg} at (0.50,0.50) size 479x359
-    RenderSVGContainer {g} at (17.50,17.50) size 445x268.50
+    RenderSVGContainer {g} at (20,17.50) size 325x268.50
       RenderSVGHiddenContainer {defs} at (0,0) size 0x0
-      RenderPath {rect} at (17.50,17.50) size 445x65 [stroke={[type=SOLID] [color=#000000] [stroke width=5.00]}] [fill={[type=SOLID] [color=#FF0000]}] [clip path="clip1"] [data="M20.00,20.00 L460.00,20.00 L460.00,80.00 L20.00,80.00 Z"]
+      RenderPath {rect} at (200,17.50) size 60x65 [stroke={[type=SOLID] [color=#000000] [stroke width=5.00]}] [fill={[type=SOLID] [color=#FF0000]}] [clip path="clip1"] [data="M20.00,20.00 L460.00,20.00 L460.00,80.00 L20.00,80.00 Z"]
       RenderSVGText {text} at (20,130) size 325x33 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-27) size 325x33
           chunk 1 text run 1 at (20.00,130.00) startOffset 0 endOffset 23 width 325.00: "Rectangle being clipped"
-      RenderSVGContainer {g} at (112.50,153) size 329.50x129.50 [clip path="clip2"]
+      RenderSVGContainer {g} at (112.50,153) size 207.50x97 [clip path="clip2"]
         RenderPath {rect} at (112.50,187.50) size 230x45 [stroke={[type=SOLID] [color=#0000FF] [stroke width=5.00]}] [fill={[type=SOLID] [color=#00FFFF]}] [data="M115.00,190.00 L340.00,190.00 L340.00,230.00 L115.00,230.00 Z"]
         RenderPath {rect} at (112.50,237.50) size 230x45 [stroke={[type=SOLID] [color=#008000] [stroke width=5.00]}] [fill={[type=SOLID] [color=#00FF00]}] [data="M115.00,240.00 L340.00,240.00 L340.00,280.00 L115.00,280.00 Z"]
         RenderSVGText {text} at (115,180) size 327x33 contains 1 chunk(s)
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1/masking-path-02-b-expected.txt b/LayoutTests/platform/mac/svg/W3C-SVG-1.1/masking-path-02-b-expected.txt
index 187e9c7..6fbf9ee 100644
--- a/LayoutTests/platform/mac/svg/W3C-SVG-1.1/masking-path-02-b-expected.txt
+++ b/LayoutTests/platform/mac/svg/W3C-SVG-1.1/masking-path-02-b-expected.txt
@@ -4,12 +4,12 @@ layer at (0,0) size 480x360
   RenderView at (0,0) size 480x360
 layer at (0,0) size 480x360
   RenderSVGRoot {svg} at (0.50,0.50) size 479x359
-    RenderSVGContainer {g} at (10,10) size 467x276
-      RenderPath {rect} at (10,10) size 430x80 [fill={[type=SOLID] [color=#FF0000]}] [clip path="clip1"] [data="M10.00,10.00 L440.00,10.00 L440.00,90.00 L10.00,90.00 Z"]
+    RenderSVGContainer {g} at (20,50) size 457x236
+      RenderPath {rect} at (117.50,50) size 258x40 [fill={[type=SOLID] [color=#FF0000]}] [clip path="clip1"] [data="M10.00,10.00 L440.00,10.00 L440.00,90.00 L10.00,90.00 Z"]
       RenderSVGText {text} at (20,130) size 457x33 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-27) size 457x33
           chunk 1 text run 1 at (20.00,130.00) startOffset 0 endOffset 31 width 457.00: "clipPathUnits=objectBoundingBox"
-      RenderPath {rect} at (100,115.15) size 169.71x169.71 [transform={m=((0.71,-0.71)(0.71,0.71)) t=(100.00,200.00)}] [fill={[type=SOLID] [color=#0000FF]}] [clip path="clip2"] [data="M0.00,0.00 L120.00,0.00 L120.00,120.00 L0.00,120.00 Z"]
+      RenderPath {rect} at (184.85,157.57) size 84.85x84.85 [transform={m=((0.71,-0.71)(0.71,0.71)) t=(100.00,200.00)}] [fill={[type=SOLID] [color=#0000FF]}] [clip path="clip2"] [data="M0.00,0.00 L120.00,0.00 L120.00,120.00 L0.00,120.00 Z"]
       RenderSVGText {text} at (20,280) size 434x33 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-27) size 434x33
           chunk 1 text run 1 at (20.00,280.00) startOffset 0 endOffset 28 width 434.00: "clipPathUnits=userSpaceOnUse"
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1/painting-marker-02-f-expected.txt b/LayoutTests/platform/mac/svg/W3C-SVG-1.1/painting-marker-02-f-expected.txt
index e923ea6..821ef25 100644
--- a/LayoutTests/platform/mac/svg/W3C-SVG-1.1/painting-marker-02-f-expected.txt
+++ b/LayoutTests/platform/mac/svg/W3C-SVG-1.1/painting-marker-02-f-expected.txt
@@ -8,7 +8,7 @@ layer at (0,0) size 480x360
   RenderView at (0,0) size 480x360
 layer at (0,0) size 480x360
   RenderSVGRoot {svg} at (-0.80,-0.80) size 480.30x360.30
-    RenderSVGContainer {g} at (-0.80,-0.80) size 452x272.80
+    RenderSVGContainer {g} at (-0.80,-0.80) size 448.80x272.80
       RenderSVGHiddenContainer {defs} at (0,0) size 0x0
       RenderSVGText {text} at (125,30) size 184x16 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-13) size 184x16
@@ -34,25 +34,25 @@ layer at (0,0) size 480x360
             RenderSVGContainer {g} at (192,102) size 16x16 [clip path="overflowHiddenClip1"]
               RenderSVGContainer {g} at (192,102) size 16x16 [transform={m=((0.20,0.00)(0.00,0.20)) t=(0.00,0.00)}]
                 RenderPath {rect} at (192,102) size 16x16 [fill={[type=SOLID] [color=#000000]}] [data="M0.00,0.00 L10.00,0.00 L10.00,10.00 L0.00,10.00 Z"]
-      RenderSVGContainer {g} at (-0.40,-0.40) size 450x142.40
+      RenderSVGContainer {g} at (-0.40,-0.40) size 448.40x142.40
         RenderSVGViewportContainer {marker} at (-0.40,-0.40) size 4.80x4.80
           RenderPath {rect} at (-0.40,-0.40) size 4.80x4.80 [stroke={[type=SOLID] [color=#000000] [stroke width=4.00]}] [data="M0.00,0.00 L20.00,0.00 L20.00,20.00 L0.00,20.00 Z"]
         RenderSVGText {text} at (340,140) size 72x11 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-9) size 72x11
             chunk 1 text run 1 at (340.00,140.00) startOffset 0 endOffset 15 width 72.00: "Stroke Property"
         RenderPath {path} at (265.17,58) size 56.83x56.83 [stroke={[type=SOLID] [color=#000000] [stroke width=4.00]}] [start marker=marker2] [middle marker=marker2] [end marker=marker2] [data="M270.00,60.00 L320.00,60.00 L320.00,110.00 Z"]
-        RenderSVGContainer {g} at (380.40,50.40) size 69.20x69.20 [transform={m=((1.00,0.00)(0.00,1.00)) t=(120.00,0.00)}]
+        RenderSVGContainer {g} at (382,52) size 66x66 [transform={m=((1.00,0.00)(0.00,1.00)) t=(120.00,0.00)}]
           RenderPath {path} at (385.17,58) size 56.83x56.83 [stroke={[type=SOLID] [color=#000000] [stroke width=4.00]}] [data="M270.00,60.00 L320.00,60.00 L320.00,110.00 Z"]
-          RenderSVGContainer {g} at (380.40,50.40) size 19.20x19.20 [transform={m=((4.00,0.00)(0.00,4.00)) t=(262.00,52.00)}]
-            RenderSVGContainer {g} at (380.40,50.40) size 19.20x19.20 [clip path="overflowHiddenClip"]
+          RenderSVGContainer {g} at (382,52) size 16x16 [transform={m=((4.00,0.00)(0.00,4.00)) t=(262.00,52.00)}]
+            RenderSVGContainer {g} at (382,52) size 16x16 [clip path="overflowHiddenClip"]
               RenderSVGContainer {g} at (380.40,50.40) size 19.20x19.20 [transform={m=((0.20,0.00)(0.00,0.20)) t=(0.00,0.00)}]
                 RenderPath {rect} at (380.40,50.40) size 19.20x19.20 [stroke={[type=SOLID] [color=#000000] [stroke width=4.00]}] [data="M0.00,0.00 L20.00,0.00 L20.00,20.00 L0.00,20.00 Z"]
-          RenderSVGContainer {g} at (430.40,50.40) size 19.20x19.20 [transform={m=((4.00,0.00)(0.00,4.00)) t=(312.00,52.00)}]
-            RenderSVGContainer {g} at (430.40,50.40) size 19.20x19.20 [clip path="overflowHiddenClip"]
+          RenderSVGContainer {g} at (432,52) size 16x16 [transform={m=((4.00,0.00)(0.00,4.00)) t=(312.00,52.00)}]
+            RenderSVGContainer {g} at (432,52) size 16x16 [clip path="overflowHiddenClip"]
               RenderSVGContainer {g} at (430.40,50.40) size 19.20x19.20 [transform={m=((0.20,0.00)(0.00,0.20)) t=(0.00,0.00)}]
                 RenderPath {rect} at (430.40,50.40) size 19.20x19.20 [stroke={[type=SOLID] [color=#000000] [stroke width=4.00]}] [data="M0.00,0.00 L20.00,0.00 L20.00,20.00 L0.00,20.00 Z"]
-          RenderSVGContainer {g} at (430.40,100.40) size 19.20x19.20 [transform={m=((4.00,0.00)(0.00,4.00)) t=(312.00,102.00)}]
-            RenderSVGContainer {g} at (430.40,100.40) size 19.20x19.20 [clip path="overflowHiddenClip"]
+          RenderSVGContainer {g} at (432,102) size 16x16 [transform={m=((4.00,0.00)(0.00,4.00)) t=(312.00,102.00)}]
+            RenderSVGContainer {g} at (432,102) size 16x16 [clip path="overflowHiddenClip"]
               RenderSVGContainer {g} at (430.40,100.40) size 19.20x19.20 [transform={m=((0.20,0.00)(0.00,0.20)) t=(0.00,0.00)}]
                 RenderPath {rect} at (430.40,100.40) size 19.20x19.20 [stroke={[type=SOLID] [color=#000000] [stroke width=4.00]}] [data="M0.00,0.00 L20.00,0.00 L20.00,20.00 L0.00,20.00 Z"]
       RenderSVGContainer {g} at (-0.80,-0.80) size 5.60x5.60
@@ -60,44 +60,44 @@ layer at (0,0) size 480x360
           RenderPath {rect} at (-0.80,-0.80) size 5.60x5.60 [stroke={[type=SOLID] [color=#000000] [stroke width=8.00]}] [fill={[type=SOLID] [color=#008000]}] [data="M0.00,0.00 L20.00,0.00 L20.00,20.00 L0.00,20.00 Z"]
         RenderSVGViewportContainer {marker} at (-0.80,-0.80) size 5.60x5.60
           RenderPath {rect} at (-0.80,-0.80) size 5.60x5.60 [stroke={[type=SOLID] [color=#0000FF] [stroke width=4.00]}] [fill={[type=SOLID] [color=#000000]}] [data="M0.00,0.00 L10.00,0.00 L10.00,10.00 L0.00,10.00 Z"]
-      RenderSVGContainer {g} at (25.17,178.80) size 186.03x93.20
+      RenderSVGContainer {g} at (25.17,182) size 182.83x90
         RenderSVGText {text} at (90,270) size 77x11 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-9) size 77x11
             chunk 1 text run 1 at (90.00,270.00) startOffset 0 endOffset 16 width 77.00: "Mixed Properties"
         RenderPath {path} at (25.17,188) size 56.83x56.83 [stroke={[type=SOLID] [color=#800080] [stroke width=4.00]}] [fill={[type=SOLID] [color=#FF0000]}] [start marker=marker3] [middle marker=marker3] [end marker=marker3] [data="M30.00,190.00 L80.00,190.00 L80.00,240.00 Z"]
-        RenderSVGContainer {g} at (138.80,178.80) size 72.40x72.40 [transform={m=((1.00,0.00)(0.00,1.00)) t=(120.00,0.00)}]
+        RenderSVGContainer {g} at (142,182) size 66x66 [transform={m=((1.00,0.00)(0.00,1.00)) t=(120.00,0.00)}]
           RenderPath {path} at (145.17,188) size 56.83x56.83 [stroke={[type=SOLID] [color=#800080] [stroke width=4.00]}] [fill={[type=SOLID] [color=#FF0000]}] [data="M30.00,190.00 L80.00,190.00 L80.00,240.00 Z"]
-          RenderSVGContainer {g} at (138.80,178.80) size 72.40x72.40
-            RenderSVGContainer {g} at (138.80,178.80) size 22.40x22.40 [transform={m=((4.00,0.00)(0.00,4.00)) t=(22.00,182.00)}]
-              RenderSVGContainer {g} at (138.80,178.80) size 22.40x22.40 [clip path="overflowHiddenClip"]
+          RenderSVGContainer {g} at (142,182) size 66x66
+            RenderSVGContainer {g} at (142,182) size 16x16 [transform={m=((4.00,0.00)(0.00,4.00)) t=(22.00,182.00)}]
+              RenderSVGContainer {g} at (142,182) size 16x16 [clip path="overflowHiddenClip"]
                 RenderSVGContainer {g} at (138.80,178.80) size 22.40x22.40 [transform={m=((0.20,0.00)(0.00,0.20)) t=(0.00,0.00)}]
                   RenderPath {rect} at (138.80,178.80) size 22.40x22.40 [stroke={[type=SOLID] [color=#000000] [stroke width=8.00]}] [fill={[type=SOLID] [color=#008000]}] [data="M0.00,0.00 L20.00,0.00 L20.00,20.00 L0.00,20.00 Z"]
-            RenderSVGContainer {g} at (188.80,178.80) size 22.40x22.40 [transform={m=((4.00,0.00)(0.00,4.00)) t=(72.00,182.00)}]
-              RenderSVGContainer {g} at (188.80,178.80) size 22.40x22.40 [clip path="overflowHiddenClip"]
+            RenderSVGContainer {g} at (192,182) size 16x16 [transform={m=((4.00,0.00)(0.00,4.00)) t=(72.00,182.00)}]
+              RenderSVGContainer {g} at (192,182) size 16x16 [clip path="overflowHiddenClip"]
                 RenderSVGContainer {g} at (188.80,178.80) size 22.40x22.40 [transform={m=((0.20,0.00)(0.00,0.20)) t=(0.00,0.00)}]
                   RenderPath {rect} at (188.80,178.80) size 22.40x22.40 [stroke={[type=SOLID] [color=#000000] [stroke width=8.00]}] [fill={[type=SOLID] [color=#008000]}] [data="M0.00,0.00 L20.00,0.00 L20.00,20.00 L0.00,20.00 Z"]
-            RenderSVGContainer {g} at (188.80,228.80) size 22.40x22.40 [transform={m=((4.00,0.00)(0.00,4.00)) t=(72.00,232.00)}]
-              RenderSVGContainer {g} at (188.80,228.80) size 22.40x22.40 [clip path="overflowHiddenClip"]
+            RenderSVGContainer {g} at (192,232) size 16x16 [transform={m=((4.00,0.00)(0.00,4.00)) t=(72.00,232.00)}]
+              RenderSVGContainer {g} at (192,232) size 16x16 [clip path="overflowHiddenClip"]
                 RenderSVGContainer {g} at (188.80,228.80) size 22.40x22.40 [transform={m=((0.20,0.00)(0.00,0.20)) t=(0.00,0.00)}]
                   RenderPath {rect} at (188.80,228.80) size 22.40x22.40 [stroke={[type=SOLID] [color=#000000] [stroke width=8.00]}] [fill={[type=SOLID] [color=#008000]}] [data="M0.00,0.00 L20.00,0.00 L20.00,20.00 L0.00,20.00 Z"]
-      RenderSVGContainer {g} at (265.17,178.80) size 186.03x93.20
+      RenderSVGContainer {g} at (265.17,182) size 182.83x90
         RenderSVGText {text} at (340,270) size 77x11 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-9) size 77x11
             chunk 1 text run 1 at (340.00,270.00) startOffset 0 endOffset 16 width 77.00: "Mixed Properties"
         RenderPath {path} at (265.17,188) size 56.83x56.83 [stroke={[type=SOLID] [color=#800080] [stroke width=4.00]}] [fill={[type=SOLID] [color=#FF0000]}] [start marker=marker4] [middle marker=marker4] [end marker=marker4] [data="M270.00,190.00 L320.00,190.00 L320.00,240.00 Z"]
-        RenderSVGContainer {g} at (378.80,178.80) size 72.40x72.40 [transform={m=((1.00,0.00)(0.00,1.00)) t=(120.00,0.00)}]
+        RenderSVGContainer {g} at (382,182) size 66x66 [transform={m=((1.00,0.00)(0.00,1.00)) t=(120.00,0.00)}]
           RenderPath {path} at (385.17,188) size 56.83x56.83 [stroke={[type=SOLID] [color=#800080] [stroke width=4.00]}] [fill={[type=SOLID] [color=#FF0000]}] [data="M270.00,190.00 L320.00,190.00 L320.00,240.00 Z"]
-          RenderSVGContainer {g} at (378.80,178.80) size 72.40x72.40
-            RenderSVGContainer {g} at (378.80,178.80) size 22.40x22.40 [transform={m=((4.00,0.00)(0.00,4.00)) t=(262.00,182.00)}]
-              RenderSVGContainer {g} at (378.80,178.80) size 22.40x22.40 [clip path="overflowHiddenClip"]
+          RenderSVGContainer {g} at (382,182) size 66x66
+            RenderSVGContainer {g} at (382,182) size 16x16 [transform={m=((4.00,0.00)(0.00,4.00)) t=(262.00,182.00)}]
+              RenderSVGContainer {g} at (382,182) size 16x16 [clip path="overflowHiddenClip"]
                 RenderSVGContainer {g} at (378.80,178.80) size 22.40x22.40 [transform={m=((0.40,0.00)(0.00,0.40)) t=(0.00,0.00)}]
                   RenderPath {rect} at (378.80,178.80) size 22.40x22.40 [stroke={[type=SOLID] [color=#0000FF] [stroke width=4.00]}] [fill={[type=SOLID] [color=#000000]}] [data="M0.00,0.00 L10.00,0.00 L10.00,10.00 L0.00,10.00 Z"]
-            RenderSVGContainer {g} at (428.80,178.80) size 22.40x22.40 [transform={m=((4.00,0.00)(0.00,4.00)) t=(312.00,182.00)}]
-              RenderSVGContainer {g} at (428.80,178.80) size 22.40x22.40 [clip path="overflowHiddenClip"]
+            RenderSVGContainer {g} at (432,182) size 16x16 [transform={m=((4.00,0.00)(0.00,4.00)) t=(312.00,182.00)}]
+              RenderSVGContainer {g} at (432,182) size 16x16 [clip path="overflowHiddenClip"]
                 RenderSVGContainer {g} at (428.80,178.80) size 22.40x22.40 [transform={m=((0.40,0.00)(0.00,0.40)) t=(0.00,0.00)}]
                   RenderPath {rect} at (428.80,178.80) size 22.40x22.40 [stroke={[type=SOLID] [color=#0000FF] [stroke width=4.00]}] [fill={[type=SOLID] [color=#000000]}] [data="M0.00,0.00 L10.00,0.00 L10.00,10.00 L0.00,10.00 Z"]
-            RenderSVGContainer {g} at (428.80,228.80) size 22.40x22.40 [transform={m=((4.00,0.00)(0.00,4.00)) t=(312.00,232.00)}]
-              RenderSVGContainer {g} at (428.80,228.80) size 22.40x22.40 [clip path="overflowHiddenClip"]
+            RenderSVGContainer {g} at (432,232) size 16x16 [transform={m=((4.00,0.00)(0.00,4.00)) t=(312.00,232.00)}]
+              RenderSVGContainer {g} at (432,232) size 16x16 [clip path="overflowHiddenClip"]
                 RenderSVGContainer {g} at (428.80,228.80) size 22.40x22.40 [transform={m=((0.40,0.00)(0.00,0.40)) t=(0.00,0.00)}]
                   RenderPath {rect} at (428.80,228.80) size 22.40x22.40 [stroke={[type=SOLID] [color=#0000FF] [stroke width=4.00]}] [fill={[type=SOLID] [color=#000000]}] [data="M0.00,0.00 L10.00,0.00 L10.00,10.00 L0.00,10.00 Z"]
     RenderSVGText {text} at (10,340) size 264x46 contains 1 chunk(s)
diff --git a/LayoutTests/platform/mac/svg/batik/filters/feTile-expected.txt b/LayoutTests/platform/mac/svg/batik/filters/feTile-expected.txt
index 7b5a982..dce6a79 100644
--- a/LayoutTests/platform/mac/svg/batik/filters/feTile-expected.txt
+++ b/LayoutTests/platform/mac/svg/batik/filters/feTile-expected.txt
@@ -16,7 +16,7 @@ layer at (0,0) size 450x500
           RenderSVGGradientStop {stop} at (0,0) size 0x0
           RenderSVGGradientStop {stop} at (0,0) size 0x0
       RenderSVGContainer {g} at (11,71) size 118x79.50 [transform={m=((1.00,0.00)(0.00,1.00)) t=(20.00,100.00)}]
-        RenderPath {rect} at (20,100) size 50x25 [fill={[type=LINEAR-GRADIENT] [stops=[(0.00,#FFFFFF), (0.50,#44CCFF), (1.00,#000033)]] [start=(0,0)] [end=(1,1)]}] [filter=tile_1] [data="M0.00,0.00 L50.00,0.00 L50.00,25.00 L0.00,25.00 Z"]
+        RenderPath {rect} at (20,100) size 100x50 [fill={[type=LINEAR-GRADIENT] [stops=[(0.00,#FFFFFF), (0.50,#44CCFF), (1.00,#000033)]] [start=(0,0)] [end=(1,1)]}] [filter=tile_1] [data="M0.00,0.00 L50.00,0.00 L50.00,25.00 L0.00,25.00 Z"]
         RenderPath {rect} at (19.50,99.50) size 101x51 [stroke={[type=SOLID] [color=#000000]}] [data="M0.00,0.00 L100.00,0.00 L100.00,50.00 L0.00,50.00 Z"]
         RenderSVGText {text} at (32,-15) size 36x18 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-14) size 36x18
@@ -25,7 +25,7 @@ layer at (0,0) size 450x500
           RenderSVGInlineText {#text} at (0,-14) size 118x18
             chunk 1 (middle anchor) text run 1 at (-8.50,-3.00) startOffset 0 endOffset 21 width 117.00: "4 tiles, quarter size"
       RenderSVGContainer {g} at (1,171) size 138x79.50 [transform={m=((1.00,0.00)(0.00,1.00)) t=(20.00,200.00)}]
-        RenderPath {rect} at (45,212.50) size 50x25 [fill={[type=LINEAR-GRADIENT] [stops=[(0.00,#FFFFFF), (0.50,#44CCFF), (1.00,#000033)]] [start=(0,0)] [end=(1,1)]}] [filter=tile_2] [data="M25.00,12.50 L75.00,12.50 L75.00,37.50 L25.00,37.50 Z"]
+        RenderPath {rect} at (20,200) size 100x50 [fill={[type=LINEAR-GRADIENT] [stops=[(0.00,#FFFFFF), (0.50,#44CCFF), (1.00,#000033)]] [start=(0,0)] [end=(1,1)]}] [filter=tile_2] [data="M25.00,12.50 L75.00,12.50 L75.00,37.50 L25.00,37.50 Z"]
         RenderPath {rect} at (19.50,199.50) size 101x51 [stroke={[type=SOLID] [color=#000000]}] [data="M0.00,0.00 L100.00,0.00 L100.00,50.00 L0.00,50.00 Z"]
         RenderSVGText {text} at (-1,-15) size 102x18 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-14) size 102x18
@@ -33,8 +33,8 @@ layer at (0,0) size 450x500
         RenderSVGText {text} at (-19,-3) size 138x18 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-14) size 138x18
             chunk 1 (middle anchor) text run 1 at (-18.50,-3.00) startOffset 0 endOffset 26 width 137.00: "9 tiles, 1 full, 8 partial"
-      RenderSVGContainer {g} at (1.50,270.25) size 137x80.25 [transform={m=((1.00,0.00)(0.00,1.00)) t=(32.50,307.25)}]
-        RenderPath {rect} at (32.50,307.25) size 50x25 [fill={[type=LINEAR-GRADIENT] [stops=[(0.00,#FFFFFF), (0.50,#44CCFF), (1.00,#000033)]] [start=(0,0)] [end=(1,1)]}] [filter=tile_3] [data="M0.00,0.00 L50.00,0.00 L50.00,25.00 L0.00,25.00 Z"]
+      RenderSVGContainer {g} at (1.50,270.25) size 137x80.75 [transform={m=((1.00,0.00)(0.00,1.00)) t=(32.50,307.25)}]
+        RenderPath {rect} at (20,301) size 100x50 [fill={[type=LINEAR-GRADIENT] [stops=[(0.00,#FFFFFF), (0.50,#44CCFF), (1.00,#000033)]] [start=(0,0)] [end=(1,1)]}] [filter=tile_3] [data="M0.00,0.00 L50.00,0.00 L50.00,25.00 L0.00,25.00 Z"]
         RenderPath {rect} at (19.50,299.50) size 101x51 [stroke={[type=SOLID] [color=#000000]}] [data="M-12.50,-7.25 L87.50,-7.25 L87.50,42.75 L-12.50,42.75 Z"]
         RenderSVGText {text} at (-29,-23) size 133x19 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-14) size 133x19
@@ -43,7 +43,7 @@ layer at (0,0) size 450x500
           RenderSVGInlineText {#text} at (0,-14) size 137x19
             chunk 1 (middle anchor) text run 1 at (-31.00,-10.25) startOffset 0 endOffset 26 width 137.00: "9 tiles, 1 full, 8 partial"
       RenderSVGContainer {g} at (244.21,99.50) size 130.44x51 [transform={m=((1.00,0.00)(0.58,1.00)) t=(245.00,100.00)}]
-        RenderPath {rect} at (245,100) size 64.43x25 [fill={[type=LINEAR-GRADIENT] [stops=[(0.00,#FFFFFF), (0.50,#44CCFF), (1.00,#000033)]] [start=(0,0)] [end=(1,1)]}] [filter=tile_1] [data="M0.00,0.00 L50.00,0.00 L50.00,25.00 L0.00,25.00 Z"]
+        RenderPath {rect} at (245,100) size 128.87x50 [fill={[type=LINEAR-GRADIENT] [stops=[(0.00,#FFFFFF), (0.50,#44CCFF), (1.00,#000033)]] [start=(0,0)] [end=(1,1)]}] [filter=tile_1] [data="M0.00,0.00 L50.00,0.00 L50.00,25.00 L0.00,25.00 Z"]
         RenderPath {rect} at (244.21,99.50) size 130.44x51 [stroke={[type=SOLID] [color=#000000]}] [data="M0.00,0.00 L100.00,0.00 L100.00,50.00 L0.00,50.00 Z"]
       RenderSVGContainer {g} at (263,71) size 64x30 [transform={m=((1.00,0.00)(0.00,1.00)) t=(245.00,100.00)}]
         RenderSVGText {text} at (32,-15) size 36x18 contains 1 chunk(s)
@@ -53,7 +53,7 @@ layer at (0,0) size 450x500
           RenderSVGInlineText {#text} at (0,-14) size 64x18
             chunk 1 (middle anchor) text run 1 at (18.00,-3.00) startOffset 0 endOffset 8 width 64.00: "skewed X"
       RenderSVGContainer {g} at (255.68,201.14) size 78.65x57.73 [transform={m=((0.66,0.24)(-0.24,0.66)) t=(268.10,201.58)}]
-        RenderPath {rect} at (275.56,215.79) size 38.87x28.42 [fill={[type=LINEAR-GRADIENT] [stops=[(0.00,#FFFFFF), (0.50,#44CCFF), (1.00,#000033)]] [start=(0,0)] [end=(1,1)]}] [filter=tile_2] [data="M25.00,12.50 L75.00,12.50 L75.00,37.50 L25.00,37.50 Z"]
+        RenderPath {rect} at (256.13,201.58) size 77.75x56.83 [fill={[type=LINEAR-GRADIENT] [stops=[(0.00,#FFFFFF), (0.50,#44CCFF), (1.00,#000033)]] [start=(0,0)] [end=(1,1)]}] [filter=tile_2] [data="M25.00,12.50 L75.00,12.50 L75.00,37.50 L25.00,37.50 Z"]
         RenderPath {rect} at (255.68,201.14) size 78.65x57.73 [stroke={[type=SOLID] [color=#000000]}] [data="M0.00,0.00 L100.00,0.00 L100.00,50.00 L0.00,50.00 Z"]
       RenderSVGContainer {g} at (216,171) size 158x30 [transform={m=((1.00,0.00)(0.00,1.00)) t=(245.00,200.00)}]
         RenderSVGText {text} at (32,-15) size 36x18 contains 1 chunk(s)
@@ -63,7 +63,7 @@ layer at (0,0) size 450x500
           RenderSVGInlineText {#text} at (0,-14) size 158x18
             chunk 1 (middle anchor) text run 1 at (-28.50,-3.00) startOffset 0 endOffset 26 width 157.00: "(centered, rotate & scale)"
       RenderSVGContainer {g} at (244.50,300.37) size 101x78.06 [transform={m=((1.00,0.27)(0.00,1.00)) t=(257.50,310.60)}]
-        RenderPath {rect} at (257.50,310.60) size 50x38.40 [fill={[type=LINEAR-GRADIENT] [stops=[(0.00,#FFFFFF), (0.50,#44CCFF), (1.00,#000033)]] [start=(0,0)] [end=(1,1)]}] [filter=tile_3] [data="M0.00,0.00 L50.00,0.00 L50.00,25.00 L0.00,25.00 Z"]
+        RenderPath {rect} at (245,301) size 100x76.79 [fill={[type=LINEAR-GRADIENT] [stops=[(0.00,#FFFFFF), (0.50,#44CCFF), (1.00,#000033)]] [start=(0,0)] [end=(1,1)]}] [filter=tile_3] [data="M0.00,0.00 L50.00,0.00 L50.00,25.00 L0.00,25.00 Z"]
         RenderPath {rect} at (244.50,300.37) size 101x78.06 [stroke={[type=SOLID] [color=#000000]}] [data="M-12.50,-6.25 L87.50,-6.25 L87.50,43.75 L-12.50,43.75 Z"]
       RenderSVGContainer {g} at (228.50,270.25) size 133x31 [transform={m=((1.00,0.00)(0.00,1.00)) t=(257.50,307.25)}]
         RenderSVGText {text} at (-29,-23) size 133x19 contains 1 chunk(s)
diff --git a/LayoutTests/platform/mac/svg/batik/filters/filterRegions-expected.txt b/LayoutTests/platform/mac/svg/batik/filters/filterRegions-expected.txt
index 5a8e8bf..0442824 100644
--- a/LayoutTests/platform/mac/svg/batik/filters/filterRegions-expected.txt
+++ b/LayoutTests/platform/mac/svg/batik/filters/filterRegions-expected.txt
@@ -18,48 +18,48 @@ KCanvasResource {id="filterRegion_3_3" [type=FILTER]  [bounding box=at (-50.00%,
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 450x500
-  RenderSVGRoot {svg} at (-15,26) size 20000344x3124
+  RenderSVGRoot {svg} at (-15,26) size 840x849
     RenderSVGText {text} at (175,40) size 100x17 contains 1 chunk(s)
       RenderSVGInlineText {#text} at (0,-14) size 100x17
         chunk 1 (middle anchor) text run 1 at (175.00,40.00) startOffset 0 endOffset 14 width 100.00: "Filter Regions"
     RenderSVGHiddenContainer {defs} at (0,0) size 0x0
-    RenderSVGContainer {g} at (-15,59) size 20000344x3091 [transform={m=((1.00,0.00)(0.00,1.00)) t=(30.00,50.00)}]
+    RenderSVGContainer {g} at (-15,59) size 840x816 [transform={m=((1.00,0.00)(0.00,1.00)) t=(30.00,50.00)}]
       RenderSVGContainer {g} at (259,119) size 121.50x81.50 [transform={m=((1.00,0.00)(0.00,1.00)) t=(240.00,95.00)}]
-        RenderPath {rect} at (270,145) size 100x50 [fill={[type=SOLID] [color=#000000]}] [filter=filterRegion_0] [data="M0.00,0.00 L100.00,0.00 L100.00,50.00 L0.00,50.00 Z"]
+        RenderPath {rect} at (260,140) size 120x60 [fill={[type=SOLID] [color=#000000]}] [filter=filterRegion_0] [data="M0.00,0.00 L100.00,0.00 L100.00,50.00 L0.00,50.00 Z"]
         RenderPath {rect} at (259.50,139.50) size 121x61 [stroke={[type=SOLID] [color=#000000] [opacity=0.50]}] [data="M-10.00,-5.00 L110.00,-5.00 L110.00,55.00 L-10.00,55.00 Z"]
         RenderSVGText {text} at (-11,-10) size 112x19 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-16) size 112x19
             chunk 1 (middle anchor) text run 1 at (-11.00,-10.00) startOffset 0 endOffset 14 width 112.00: "filterRegion_0"
-      RenderPath {rect} at (30,3050) size 20000000x25 [fill={[type=SOLID] [color=#000000]}] [filter=filterRegion_1] [data="M0.00,3000.00 L20000000.00,3000.00 L20000000.00,3025.00 L0.00,3025.00 Z"]
+      RenderPath {rect} at (50,80) size 50x40 [fill={[type=SOLID] [color=#000000]}] [filter=filterRegion_1] [data="M0.00,3000.00 L20000000.00,3000.00 L20000000.00,3025.00 L0.00,3025.00 Z"]
       RenderPath {rect} at (49.50,79.50) size 51x41 [stroke={[type=SOLID] [color=#000000] [opacity=0.50]}] [data="M20.00,30.00 L70.00,30.00 L70.00,70.00 L20.00,70.00 Z"]
       RenderSVGText {text} at (-11,25) size 112x19 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-16) size 112x19
           chunk 1 (middle anchor) text run 1 at (-11.00,25.00) startOffset 0 endOffset 14 width 112.00: "filterRegion_1"
-      RenderSVGContainer {g} at (119,59) size 20000012x3016 [transform={m=((1.00,0.00)(0.00,1.00)) t=(100.00,0.00)}]
-        RenderPath {rect} at (130,3050) size 20000000x25 [fill={[type=SOLID] [color=#000000]}] [filter=filterRegion_2] [data="M0.00,3000.00 L20000000.00,3000.00 L20000000.00,3025.00 L0.00,3025.00 Z"]
+      RenderSVGContainer {g} at (119,59) size 112x61.50 [transform={m=((1.00,0.00)(0.00,1.00)) t=(100.00,0.00)}]
+        RenderPath {rect} at (150,80) size 50x40 [fill={[type=SOLID] [color=#000000]}] [filter=filterRegion_2] [data="M0.00,3000.00 L20000000.00,3000.00 L20000000.00,3025.00 L0.00,3025.00 Z"]
         RenderPath {rect} at (154.50,84.50) size 46x36 [stroke={[type=SOLID] [color=#000000] [opacity=0.50]}] [data="M25.00,35.00 L70.00,35.00 L70.00,70.00 L25.00,70.00 Z"]
         RenderSVGText {text} at (-11,25) size 112x19 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-16) size 112x19
             chunk 1 (middle anchor) text run 1 at (-11.00,25.00) startOffset 0 endOffset 14 width 112.00: "filterRegion_2"
-      RenderSVGContainer {g} at (219,59) size 20000012x3016 [transform={m=((1.00,0.00)(0.00,1.00)) t=(200.00,0.00)}]
-        RenderPath {rect} at (230,3050) size 20000000x25 [fill={[type=SOLID] [color=#000000]}] [filter=filterRegion_3] [data="M0.00,3000.00 L20000000.00,3000.00 L20000000.00,3025.00 L0.00,3025.00 Z"]
+      RenderSVGContainer {g} at (219,59) size 112x61 [transform={m=((1.00,0.00)(0.00,1.00)) t=(200.00,0.00)}]
+        RenderPath {rect} at (250,80) size 50x40 [fill={[type=SOLID] [color=#000000]}] [filter=filterRegion_3] [data="M0.00,3000.00 L20000000.00,3000.00 L20000000.00,3025.00 L0.00,3025.00 Z"]
         RenderPath {rect} at (249.50,79.50) size 51x21 [stroke={[type=SOLID] [color=#000000] [opacity=0.50]}] [data="M20.00,30.00 L70.00,30.00 L70.00,50.00 L20.00,50.00 Z"]
         RenderSVGText {text} at (-11,25) size 112x19 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-16) size 112x19
             chunk 1 (middle anchor) text run 1 at (-11.00,25.00) startOffset 0 endOffset 14 width 112.00: "filterRegion_3"
-      RenderSVGContainer {g} at (319,59) size 20000012x3016 [transform={m=((1.00,0.00)(0.00,1.00)) t=(300.00,0.00)}]
-        RenderPath {rect} at (330,3050) size 20000000x25 [fill={[type=SOLID] [color=#000000]}] [filter=filterRegion_4] [data="M0.00,3000.00 L20000000.00,3000.00 L20000000.00,3025.00 L0.00,3025.00 Z"]
+      RenderSVGContainer {g} at (319,59) size 112x61.50 [transform={m=((1.00,0.00)(0.00,1.00)) t=(300.00,0.00)}]
+        RenderPath {rect} at (350,80) size 50x40 [fill={[type=SOLID] [color=#000000]}] [filter=filterRegion_4] [data="M0.00,3000.00 L20000000.00,3000.00 L20000000.00,3025.00 L0.00,3025.00 Z"]
         RenderPath {rect} at (349.50,79.50) size 26x41 [stroke={[type=SOLID] [color=#000000] [opacity=0.50]}] [data="M20.00,30.00 L45.00,30.00 L45.00,70.00 L20.00,70.00 Z"]
         RenderSVGText {text} at (-11,25) size 112x19 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-16) size 112x19
             chunk 1 (middle anchor) text run 1 at (-11.00,25.00) startOffset 0 endOffset 14 width 112.00: "filterRegion_4"
-      RenderSVGContainer {g} at (19,134) size 20000012x3016 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,75.00)}]
-        RenderPath {rect} at (30,3125) size 20000000x25 [fill={[type=SOLID] [color=#000000]}] [filter=filterRegion_5] [data="M0.00,3000.00 L20000000.00,3000.00 L20000000.00,3025.00 L0.00,3025.00 Z"]
+      RenderSVGContainer {g} at (19,134) size 112x61 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,75.00)}]
+        RenderPath {rect} at (50,155) size 50x40 [fill={[type=SOLID] [color=#000000]}] [filter=filterRegion_5] [data="M0.00,3000.00 L20000000.00,3000.00 L20000000.00,3025.00 L0.00,3025.00 Z"]
         RenderPath {rect} at (49.50,154.50) size 51x21 [stroke={[type=SOLID] [color=#000000] [opacity=0.50]}] [data="M20.00,30.00 L70.00,30.00 L70.00,50.00 L20.00,50.00 Z"]
         RenderSVGText {text} at (-11,25) size 112x19 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-16) size 112x19
             chunk 1 (middle anchor) text run 1 at (-11.00,25.00) startOffset 0 endOffset 14 width 112.00: "filterRegion_5"
-      RenderSVGContainer {g} at (130,155) size 20000000x2995 [transform={m=((1.00,0.00)(0.00,1.00)) t=(100.00,75.00)}] [filter=filterRegion_6]
+      RenderSVGContainer {g} at (150,155) size 50x40 [transform={m=((1.00,0.00)(0.00,1.00)) t=(100.00,75.00)}] [filter=filterRegion_6]
         RenderPath {rect} at (130,3125) size 20000000x25 [fill={[type=SOLID] [color=#000000]}] [data="M0.00,3000.00 L20000000.00,3000.00 L20000000.00,3025.00 L0.00,3025.00 Z"]
       RenderSVGContainer {g} at (119,134) size 112x61.50 [transform={m=((1.00,0.00)(0.00,1.00)) t=(100.00,75.00)}]
         RenderPath {rect} at (149.50,154.50) size 41x41 [stroke={[type=SOLID] [color=#000000] [opacity=0.50]}] [data="M20.00,30.00 L60.00,30.00 L60.00,70.00 L20.00,70.00 Z"]
@@ -67,7 +67,7 @@ layer at (0,0) size 450x500
           RenderSVGInlineText {#text} at (0,-16) size 112x19
             chunk 1 (middle anchor) text run 1 at (-11.00,25.00) startOffset 0 endOffset 14 width 112.00: "filterRegion_6"
       RenderSVGContainer {g} at (109,294) size 132x64 [transform={m=((1.00,0.00)(0.00,1.00)) t=(120.00,280.00)}]
-        RenderPath {rect} at (150,330) size 50x25 [fill={[type=SOLID] [color=#000000]}] [filter=filterRegion_2_0] [data="M0.00,0.00 L50.00,0.00 L50.00,25.00 L0.00,25.00 Z"]
+        RenderPath {rect} at (145,327.50) size 60x30 [fill={[type=SOLID] [color=#000000]}] [filter=filterRegion_2_0] [data="M0.00,0.00 L50.00,0.00 L50.00,25.00 L0.00,25.00 Z"]
         RenderPath {rect} at (144.50,327) size 61x31 [stroke={[type=SOLID] [color=#000000] [opacity=0.50]}] [data="M-5.00,-2.50 L55.00,-2.50 L55.00,27.50 L-5.00,27.50 Z"]
         RenderSVGText {text} at (-41,-20) size 132x19 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-16) size 132x19
@@ -79,8 +79,8 @@ layer at (0,0) size 450x500
         RenderSVGText {text} at (-21,25) size 132x19 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-16) size 132x19
             chunk 1 (middle anchor) text run 1 at (-21.00,25.00) startOffset 0 endOffset 16 width 132.00: "filterRegion_2_1"
-      RenderSVGContainer {g} at (150,240) size 50x40 [transform={m=((1.00,0.00)(0.00,1.00)) t=(100.00,160.00)}]
-        RenderPath {rect} at (150,240) size 50x40 [fill={[type=SOLID] [color=#000000]}] [filter=filterRegion_2_2] [data="M20.00,30.00 L70.00,30.00 L70.00,70.00 L20.00,70.00 Z"]
+      RenderSVGContainer {g} at (85,160) size 540x600 [transform={m=((1.00,0.00)(0.00,1.00)) t=(100.00,160.00)}]
+        RenderPath {rect} at (85,160) size 540x600 [fill={[type=SOLID] [color=#000000]}] [filter=filterRegion_2_2] [data="M20.00,30.00 L70.00,30.00 L70.00,70.00 L20.00,70.00 Z"]
       RenderSVGContainer {g} at (109,219) size 132x61.50 [transform={m=((1.00,0.00)(0.00,1.00)) t=(100.00,160.00)}]
         RenderPath {rect} at (149.50,239.50) size 51x41 [stroke={[type=SOLID] [color=#000000] [opacity=0.50]}] [data="M20.00,30.00 L70.00,30.00 L70.00,70.00 L20.00,70.00 Z"]
         RenderSVGText {text} at (-21,25) size 132x19 contains 1 chunk(s)
@@ -128,7 +128,7 @@ layer at (0,0) size 450x500
         RenderSVGText {text} at (-21,25) size 132x19 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-16) size 132x19
             chunk 1 (middle anchor) text run 1 at (-21.00,25.00) startOffset 0 endOffset 16 width 132.00: "filterRegion_3_2"
-      RenderSVGContainer {g} at (255,400) size 75x60 [transform={m=((1.00,0.00)(0.00,1.00)) t=(200.00,330.00)}] [filter=filterRegion_3_3]
+      RenderSVGContainer {g} at (255,400) size 37.50x30 [transform={m=((1.00,0.00)(0.00,1.00)) t=(200.00,330.00)}] [filter=filterRegion_3_3]
         RenderPath {rect} at (280,420) size 50x40 [fill={[type=SOLID] [color=#000000]}] [data="M50.00,40.00 L100.00,40.00 L100.00,80.00 L50.00,80.00 Z"]
       RenderSVGContainer {g} at (209,389) size 132x41.50 [transform={m=((1.00,0.00)(0.00,1.00)) t=(200.00,330.00)}]
         RenderPath {rect} at (254.50,399.50) size 38.50x31 [stroke={[type=SOLID] [color=#000000] [opacity=0.50]}] [data="M25.00,20.00 L62.50,20.00 L62.50,50.00 L25.00,50.00 Z"]
diff --git a/LayoutTests/platform/mac/svg/batik/masking/maskRegions-expected.txt b/LayoutTests/platform/mac/svg/batik/masking/maskRegions-expected.txt
index 109b64d..e6a86c0 100644
--- a/LayoutTests/platform/mac/svg/batik/masking/maskRegions-expected.txt
+++ b/LayoutTests/platform/mac/svg/batik/masking/maskRegions-expected.txt
@@ -50,15 +50,15 @@ layer at (0,0) size 450x500
         RenderSVGText {text} at (24,-3) size 52x17 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-14) size 52x17
             chunk 1 (middle anchor) text run 1 at (24.50,-3.00) startOffset 0 endOffset 6 width 51.00: "Mask 1"
-      RenderSVGContainer {g} at (85,323) size 100x97 [transform={m=((1.00,0.00)(0.00,1.00)) t=(85.00,340.00)}]
-        RenderSVGContainer {use} at (85,340) size 100x80
+      RenderSVGContainer {g} at (109,323) size 52x77 [transform={m=((1.00,0.00)(0.00,1.00)) t=(85.00,340.00)}]
+        RenderSVGContainer {use} at (110,360) size 50x40
           RenderSVGContainer {g} at (85,340) size 100x80
             RenderPath {rect} at (85,340) size 100x80 [fill={[type=LINEAR-GRADIENT] [stops=[(0.00,#0000FF), (1.00,#FF0000)]] [start=(0,0)] [end=(1,1)]}] [data="M0.00,0.00 L100.00,0.00 L100.00,80.00 L0.00,80.00 Z"]
         RenderSVGText {text} at (24,-3) size 52x17 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-14) size 52x17
             chunk 1 (middle anchor) text run 1 at (24.50,-3.00) startOffset 0 endOffset 6 width 51.00: "Mask 2"
-      RenderSVGContainer {g} at (260,203) size 100x97 [transform={m=((1.00,0.00)(0.00,1.00)) t=(260.00,220.00)}]
-        RenderSVGContainer {use} at (260,220) size 100x80
+      RenderSVGContainer {g} at (284,203) size 52x77 [transform={m=((1.00,0.00)(0.00,1.00)) t=(260.00,220.00)}]
+        RenderSVGContainer {use} at (285,240) size 50x40
           RenderSVGContainer {g} at (260,220) size 100x80
             RenderPath {rect} at (260,220) size 100x80 [fill={[type=LINEAR-GRADIENT] [stops=[(0.00,#0000FF), (1.00,#FF0000)]] [start=(0,0)] [end=(1,1)]}] [data="M0.00,0.00 L100.00,0.00 L100.00,80.00 L0.00,80.00 Z"]
         RenderSVGText {text} at (24,-3) size 52x17 contains 1 chunk(s)
diff --git a/LayoutTests/platform/mac/svg/batik/text/textEffect-expected.txt b/LayoutTests/platform/mac/svg/batik/text/textEffect-expected.txt
index dc701fb..e3724e6 100644
--- a/LayoutTests/platform/mac/svg/batik/text/textEffect-expected.txt
+++ b/LayoutTests/platform/mac/svg/batik/text/textEffect-expected.txt
@@ -4,8 +4,8 @@ KCanvasResource {id="dropShadow" [type=FILTER]  [bounding box=at (-10.00%,-10.00
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 450x500
-  RenderSVGRoot {svg} at (42,16) size 442.80x387
-    RenderSVGContainer {g} at (42,16) size 442.80x387
+  RenderSVGRoot {svg} at (28.80,16) size 456x387
+    RenderSVGContainer {g} at (28.80,16) size 456x387
       RenderSVGText {text} at (136,30) size 178x17 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-14) size 178x17
           chunk 1 (middle anchor) text run 1 at (136.50,30.00) startOffset 0 endOffset 27 width 177.00: "Gradient and filter on text"
diff --git a/LayoutTests/platform/mac/svg/batik/text/textEffect3-expected.txt b/LayoutTests/platform/mac/svg/batik/text/textEffect3-expected.txt
index d04d04c..5f05349 100644
--- a/LayoutTests/platform/mac/svg/batik/text/textEffect3-expected.txt
+++ b/LayoutTests/platform/mac/svg/batik/text/textEffect3-expected.txt
@@ -4,8 +4,8 @@ KCanvasResource {id="dropShadow" [type=FILTER]  [bounding box=at (-10.00%,-10.00
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 450x500
-  RenderSVGRoot {svg} at (52,16) size 435.80x387
-    RenderSVGContainer {g} at (52,16) size 435.80x387
+  RenderSVGRoot {svg} at (39.40,16) size 448.40x387
+    RenderSVGContainer {g} at (39.40,16) size 448.40x387
       RenderSVGText {text} at (99,30) size 252x17 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-14) size 252x17
           chunk 1 (middle anchor) text run 1 at (99.50,30.00) startOffset 0 endOffset 37 width 251.00: "Gradient and filter on text and tspan"
diff --git a/LayoutTests/platform/mac/svg/css/clippath-with-shadow-expected.txt b/LayoutTests/platform/mac/svg/css/clippath-with-shadow-expected.txt
index d5b687b..9205359 100644
--- a/LayoutTests/platform/mac/svg/css/clippath-with-shadow-expected.txt
+++ b/LayoutTests/platform/mac/svg/css/clippath-with-shadow-expected.txt
@@ -2,7 +2,7 @@ KCanvasResource {id="clip" [type=CLIPPER] [clip data=[[winding=NON-ZERO] [path=M
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 800x600
-  RenderSVGRoot {svg} at (0,0) size 400x200
+  RenderSVGRoot {svg} at (0,0) size 200x200
     RenderPath {rect} at (0,0) size 200x200 [fill={[type=SOLID] [color=#FF0000]}] [data="M0.00,0.00 L200.00,0.00 L200.00,200.00 L0.00,200.00 Z"]
     RenderPath {rect} at (0,0) size 200x200 [transform={m=((1.00,0.00)(0.00,1.00)) t=(-200.00,0.00)}] [data="M200.00,0.00 L400.00,0.00 L400.00,200.00 L200.00,200.00 Z"]
-    RenderPath {rect} at (0,0) size 400x200 [fill={[type=SOLID] [color=#008000]}] [clip path="clip"] [data="M0.00,0.00 L400.00,0.00 L400.00,200.00 L0.00,200.00 Z"]
+    RenderPath {rect} at (0,0) size 200x200 [fill={[type=SOLID] [color=#008000]}] [clip path="clip"] [data="M0.00,0.00 L400.00,0.00 L400.00,200.00 L0.00,200.00 Z"]
diff --git a/LayoutTests/platform/mac/svg/custom/clip-path-display-none-child-expected.txt b/LayoutTests/platform/mac/svg/custom/clip-path-display-none-child-expected.txt
index 3cc31cd..c819e31 100644
--- a/LayoutTests/platform/mac/svg/custom/clip-path-display-none-child-expected.txt
+++ b/LayoutTests/platform/mac/svg/custom/clip-path-display-none-child-expected.txt
@@ -4,7 +4,7 @@ layer at (0,0) size 800x600
 layer at (0,0) size 800x600
   RenderSVGRoot {svg} at (0,0) size 356x194
     RenderSVGHiddenContainer {defs} at (0,0) size 0x0
-    RenderSVGContainer {g} at (0,0) size 200x100 [clip path="c"]
+    RenderSVGContainer {g} at (0,0) size 100x100 [clip path="c"]
       RenderPath {rect} at (0,0) size 200x100 [fill={[type=SOLID] [color=#FF0000]}] [data="M0.00,0.00 L200.00,0.00 L200.00,100.00 L0.00,100.00 Z"]
       RenderPath {rect} at (0,0) size 100x100 [fill={[type=SOLID] [color=#008000]}] [data="M0.00,0.00 L100.00,0.00 L100.00,100.00 L0.00,100.00 Z"]
     RenderSVGContainer {g} at (0,116) size 356x78
diff --git a/LayoutTests/platform/mac/svg/custom/clip-path-href-changes-expected.txt b/LayoutTests/platform/mac/svg/custom/clip-path-href-changes-expected.txt
index 66cb406..54602fd 100644
--- a/LayoutTests/platform/mac/svg/custom/clip-path-href-changes-expected.txt
+++ b/LayoutTests/platform/mac/svg/custom/clip-path-href-changes-expected.txt
@@ -2,8 +2,8 @@ KCanvasResource {id="myclip" [type=CLIPPER] [clip data=[[winding=NON-ZERO] [path
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 800x600
-  RenderSVGRoot {svg} at (0,0) size 200x200
+  RenderSVGRoot {svg} at (0,0) size 100x100
     RenderSVGHiddenContainer {defs} at (0,0) size 0x0
-    RenderSVGContainer {g} at (0,0) size 200x200 [clip path="myclip"]
+    RenderSVGContainer {g} at (0,0) size 100x100 [clip path="myclip"]
       RenderPath {rect} at (0,0) size 200x200 [fill={[type=SOLID] [color=#FF0000]}] [data="M0.00,0.00 L200.00,0.00 L200.00,200.00 L0.00,200.00 Z"]
       RenderPath {rect} at (0,0) size 100x100 [fill={[type=SOLID] [color=#008000]}] [data="M0.00,0.00 L100.00,0.00 L100.00,100.00 L0.00,100.00 Z"]
diff --git a/LayoutTests/platform/mac/svg/custom/clip-path-referencing-use-expected.txt b/LayoutTests/platform/mac/svg/custom/clip-path-referencing-use-expected.txt
index 50c4321..0b70deb 100644
--- a/LayoutTests/platform/mac/svg/custom/clip-path-referencing-use-expected.txt
+++ b/LayoutTests/platform/mac/svg/custom/clip-path-referencing-use-expected.txt
@@ -2,10 +2,10 @@ KCanvasResource {id="clip" [type=CLIPPER] [clip data=[[winding=NON-ZERO] [path=M
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 800x600
-  RenderSVGRoot {svg} at (0,0) size 602x200
+  RenderSVGRoot {svg} at (0,0) size 602x144
     RenderSVGHiddenContainer {defs} at (0,0) size 0x0
       RenderPath {rect} at (0,0) size 100x100 [fill={[type=SOLID] [color=#000000]}] [data="M0.00,0.00 L100.00,0.00 L100.00,100.00 L0.00,100.00 Z"]
-    RenderSVGContainer {g} at (0,0) size 200x200 [clip path="clip"]
+    RenderSVGContainer {g} at (0,0) size 100x100 [clip path="clip"]
       RenderPath {rect} at (0,0) size 200x200 [fill={[type=SOLID] [color=#FF0000]}] [data="M0.00,0.00 L200.00,0.00 L200.00,200.00 L0.00,200.00 Z"]
       RenderPath {rect} at (0,0) size 100x100 [fill={[type=SOLID] [color=#008000]}] [data="M0.00,0.00 L100.00,0.00 L100.00,100.00 L0.00,100.00 Z"]
     RenderSVGText {text} at (10,120) size 489x18 contains 1 chunk(s)
diff --git a/LayoutTests/platform/mac/svg/custom/clip-path-referencing-use2-expected.txt b/LayoutTests/platform/mac/svg/custom/clip-path-referencing-use2-expected.txt
index 82e34e0..5fdee4b 100644
--- a/LayoutTests/platform/mac/svg/custom/clip-path-referencing-use2-expected.txt
+++ b/LayoutTests/platform/mac/svg/custom/clip-path-referencing-use2-expected.txt
@@ -1,5 +1,25 @@
 CONSOLE MESSAGE: line 1: Error: Not allowed to use indirect reference in <clip-path>
 CONSOLE MESSAGE: line 1: Error: Not allowed to use indirect reference in <clip-path>
+CONSOLE MESSAGE: line 1: Error: Not allowed to use indirect reference in <clip-path>
+CONSOLE MESSAGE: line 1: Error: Not allowed to use indirect reference in <clip-path>
+CONSOLE MESSAGE: line 1: Error: Not allowed to use indirect reference in <clip-path>
+CONSOLE MESSAGE: line 1: Error: Not allowed to use indirect reference in <clip-path>
+CONSOLE MESSAGE: line 1: Error: Not allowed to use indirect reference in <clip-path>
+CONSOLE MESSAGE: line 1: Error: Not allowed to use indirect reference in <clip-path>
+CONSOLE MESSAGE: line 1: Error: Not allowed to use indirect reference in <clip-path>
+CONSOLE MESSAGE: line 1: Error: Not allowed to use indirect reference in <clip-path>
+CONSOLE MESSAGE: line 1: Error: Not allowed to use indirect reference in <clip-path>
+CONSOLE MESSAGE: line 1: Error: Not allowed to use indirect reference in <clip-path>
+CONSOLE MESSAGE: line 1: Error: Not allowed to use indirect reference in <clip-path>
+CONSOLE MESSAGE: line 1: Error: Not allowed to use indirect reference in <clip-path>
+CONSOLE MESSAGE: line 1: Error: Not allowed to use indirect reference in <clip-path>
+CONSOLE MESSAGE: line 1: Error: Not allowed to use indirect reference in <clip-path>
+CONSOLE MESSAGE: line 1: Error: Not allowed to use indirect reference in <clip-path>
+CONSOLE MESSAGE: line 1: Error: Not allowed to use indirect reference in <clip-path>
+CONSOLE MESSAGE: line 1: Error: Not allowed to use indirect reference in <clip-path>
+CONSOLE MESSAGE: line 1: Error: Not allowed to use indirect reference in <clip-path>
+CONSOLE MESSAGE: line 1: Error: Not allowed to use indirect reference in <clip-path>
+CONSOLE MESSAGE: line 1: Error: Not allowed to use indirect reference in <clip-path>
 KCanvasResource {id="clip" [type=CLIPPER] [clip data=[[winding=EVEN-ODD] [path=M0.00,0.00 L0.00,0.00 L0.00,0.00 L0.00,0.00 Z]]]}
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
diff --git a/LayoutTests/platform/mac/svg/custom/clip-path-with-transform-expected.txt b/LayoutTests/platform/mac/svg/custom/clip-path-with-transform-expected.txt
index 66cb406..54602fd 100644
--- a/LayoutTests/platform/mac/svg/custom/clip-path-with-transform-expected.txt
+++ b/LayoutTests/platform/mac/svg/custom/clip-path-with-transform-expected.txt
@@ -2,8 +2,8 @@ KCanvasResource {id="myclip" [type=CLIPPER] [clip data=[[winding=NON-ZERO] [path
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 800x600
-  RenderSVGRoot {svg} at (0,0) size 200x200
+  RenderSVGRoot {svg} at (0,0) size 100x100
     RenderSVGHiddenContainer {defs} at (0,0) size 0x0
-    RenderSVGContainer {g} at (0,0) size 200x200 [clip path="myclip"]
+    RenderSVGContainer {g} at (0,0) size 100x100 [clip path="myclip"]
       RenderPath {rect} at (0,0) size 200x200 [fill={[type=SOLID] [color=#FF0000]}] [data="M0.00,0.00 L200.00,0.00 L200.00,200.00 L0.00,200.00 Z"]
       RenderPath {rect} at (0,0) size 100x100 [fill={[type=SOLID] [color=#008000]}] [data="M0.00,0.00 L100.00,0.00 L100.00,100.00 L0.00,100.00 Z"]
diff --git a/LayoutTests/platform/mac/svg/custom/empty-merge-expected.txt b/LayoutTests/platform/mac/svg/custom/empty-merge-expected.txt
index 0e43bb5..06674ce 100644
--- a/LayoutTests/platform/mac/svg/custom/empty-merge-expected.txt
+++ b/LayoutTests/platform/mac/svg/custom/empty-merge-expected.txt
@@ -3,7 +3,7 @@ KCanvasResource {id="MyFilter2" [type=FILTER]  [bounding box=at (-10.00%,-10.00%
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 800x600
-  RenderSVGRoot {svg} at (10,10) size 220x100
+  RenderSVGRoot {svg} at (0,0) size 240x120
     RenderSVGHiddenContainer {defs} at (0,0) size 0x0
-    RenderPath {rect} at (10,10) size 100x100 [fill={[type=SOLID] [color=#008000]}] [filter=MyFilter1] [data="M10.00,10.00 L110.00,10.00 L110.00,110.00 L10.00,110.00 Z"]
-    RenderPath {rect} at (130,10) size 100x100 [fill={[type=SOLID] [color=#008000]}] [filter=MyFilter2] [data="M130.00,10.00 L230.00,10.00 L230.00,110.00 L130.00,110.00 Z"]
+    RenderPath {rect} at (0,0) size 120x120 [fill={[type=SOLID] [color=#008000]}] [filter=MyFilter1] [data="M10.00,10.00 L110.00,10.00 L110.00,110.00 L10.00,110.00 Z"]
+    RenderPath {rect} at (120,0) size 120x120 [fill={[type=SOLID] [color=#008000]}] [filter=MyFilter2] [data="M130.00,10.00 L230.00,10.00 L230.00,110.00 L130.00,110.00 Z"]
diff --git a/LayoutTests/platform/mac/svg/custom/feDisplacementMap-01-expected.txt b/LayoutTests/platform/mac/svg/custom/feDisplacementMap-01-expected.txt
index 977e560..1fda214 100644
--- a/LayoutTests/platform/mac/svg/custom/feDisplacementMap-01-expected.txt
+++ b/LayoutTests/platform/mac/svg/custom/feDisplacementMap-01-expected.txt
@@ -2,8 +2,8 @@ KCanvasResource {id="ResultImage" [type=FILTER]  [bounding box=at (-10.00%,-10.0
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 800x600
-  RenderSVGRoot {svg} at (-0.50,-0.50) size 101x101
-    RenderSVGContainer {g} at (-0.50,-0.50) size 101x101
+  RenderSVGRoot {svg} at (-10,-10) size 120x120
+    RenderSVGContainer {g} at (-10,-10) size 120x120
       RenderSVGHiddenContainer {defs} at (0,0) size 0x0
-      RenderPath {rect} at (0,0) size 100x100 [fill={[type=SOLID] [color=#000000]}] [filter=ResultImage] [data="M0.00,0.00 L100.00,0.00 L100.00,100.00 L0.00,100.00 Z"]
+      RenderPath {rect} at (-10,-10) size 120x120 [fill={[type=SOLID] [color=#000000]}] [filter=ResultImage] [data="M0.00,0.00 L100.00,0.00 L100.00,100.00 L0.00,100.00 Z"]
       RenderPath {rect} at (-0.50,-0.50) size 101x101 [stroke={[type=SOLID] [color=#0000FF]}] [data="M0.00,0.00 L100.00,0.00 L100.00,100.00 L0.00,100.00 Z"]
diff --git a/LayoutTests/platform/mac/svg/custom/focus-ring-expected.checksum b/LayoutTests/platform/mac/svg/custom/focus-ring-expected.checksum
index 42d48cd..1ae7a59 100644
--- a/LayoutTests/platform/mac/svg/custom/focus-ring-expected.checksum
+++ b/LayoutTests/platform/mac/svg/custom/focus-ring-expected.checksum
@@ -1 +1 @@
-d0a84f06b85b6bef6c204269ea8fa63e
\ No newline at end of file
+3e1daa368d66af6e9564c157d1ce666b
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/svg/custom/focus-ring-expected.png b/LayoutTests/platform/mac/svg/custom/focus-ring-expected.png
index e36eddc..eed8248 100644
Binary files a/LayoutTests/platform/mac/svg/custom/focus-ring-expected.png and b/LayoutTests/platform/mac/svg/custom/focus-ring-expected.png differ
diff --git a/LayoutTests/platform/mac/svg/custom/focus-ring-expected.txt b/LayoutTests/platform/mac/svg/custom/focus-ring-expected.txt
index 2f63ad8..df2acfc 100644
--- a/LayoutTests/platform/mac/svg/custom/focus-ring-expected.txt
+++ b/LayoutTests/platform/mac/svg/custom/focus-ring-expected.txt
@@ -2,7 +2,7 @@ KCanvasResource {id="clip" [type=CLIPPER] [clip data=[[winding=NON-ZERO] [path=M
 layer at (0,0) size 800x1000
   RenderView at (0,0) size 800x600
 layer at (0,0) size 800x1000
-  RenderSVGRoot {svg} at (-5,10) size 823.99x1010.07
+  RenderSVGRoot {svg} at (10,10) size 436.60x526.60
     RenderPath {circle} at (15,10) size 100x100 [fill={[type=SOLID] [color=#FFA500]}] [data="M115.00,60.00 L114.90,63.14 L114.61,66.27 L114.11,69.37 L113.43,72.43 L112.55,75.45 L111.49,78.41 L110.24,81.29 L108.82,84.09 L107.22,86.79 L105.45,89.39 L103.53,91.87 L101.45,94.23 L99.23,96.45 L96.87,98.53 L94.39,100.45 L91.79,102.22 L89.09,103.82 L86.29,105.24 L83.41,106.49 L80.45,107.55 L77.43,108.43 L74.37,109.11 L71.27,109.61 L68.14,109.90 L65.00,110.00 L61.86,109.90 L58.73,109.61 L55.63,109.11 L52.57,108.43 L49.55,107.55 L46.59,106.49 L43.71,105.24 L40.91,103.82 L38.21,102.22 L35.61,100.45 L33.13,98.53 L30.77,96.45 L28.55,94.23 L26.47,91.87 L24.55,89.39 L22.78,86.79 L21.18,84.09 L19.76,81.29 L18.51,78.41 L17.45,75.45 L16.57,72.43 L15.89,69.37 L15.39,66.27 L15.10,63.14 L15.00,60.00 L15.10,56.86 L15.39,53.73 L15.89,50.63 L16.57,47.57 L17.45,44.55 L18.51,41.59 L19.76,38.71 L21.18,35.91 L22.78,33.21 L24.55,30.61 L26.47,28.13 L28.55,25.77 L30.77,23.55 L33.13,21.47 L35.61,19.55 L38.21,17.78 L40.91,16.18 L43.71,14.76 L46.59,13.51 L49.55,12.45 L52.57,11.57 L55.63,10.89 L58.73,10.39 L61.86,10.10 L65.00,10.00 L68.14,10.10 L71.27,10.39 L74.37,10.89 L77.43,11.57 L80.45,12.45 L83.41,13.51 L86.29,14.76 L89.09,16.18 L91.79,17.78 L94.39,19.55 L96.87,21.47 L99.23,23.55 L101.45,25.77 L103.53,28.13 L105.45,30.61 L107.22,33.21 L108.82,35.91 L110.24,38.71 L111.49,41.59 L112.55,44.55 L113.43,47.57 L114.11,50.63 L114.61,53.73 L114.90,56.86 Z"]
     RenderPath {path} at (140,10) size 100x100 [fill={[type=SOLID] [color=#FFA500]}] [data="M140.00,10.00 L190.00,110.00 L240.00,60.00 L220.00,60.00 L200.00,30.00 Z"]
     RenderSVGContainer {g} at (270,10) size 100x100
@@ -22,7 +22,7 @@ layer at (0,0) size 800x1000
       RenderSVGText {text} at (0,0) size 76x18 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-14) size 76x18
           chunk 1 text run 1 at (0.00,0.00) startOffset 0 endOffset 12 width 76.00: "focused text"
-    RenderSVGImage {image} at (10,400) size 530x410 [clip path="clip"]
-    RenderSVGImage {image} at (-5,400) size 663.99x620.07 [transform={m=((0.87,0.50)(-0.50,0.87)) t=(200.00,400.00)}] [clip path="clip"]
-    RenderSVGContainer {g} at (155,400) size 663.99x620.07 [transform={m=((0.87,0.50)(-0.50,0.87)) t=(360.00,400.00)}]
-      RenderSVGImage {image} at (155,400) size 663.99x620.07 [clip path="clip"]
+    RenderSVGImage {image} at (0,0) size 0x0 [clip path="clip"]
+    RenderSVGImage {image} at (150,400) size 136.60x136.60 [transform={m=((0.87,0.50)(-0.50,0.87)) t=(200.00,400.00)}] [clip path="clip"]
+    RenderSVGContainer {g} at (310,400) size 136.60x136.60 [transform={m=((0.87,0.50)(-0.50,0.87)) t=(360.00,400.00)}]
+      RenderSVGImage {image} at (310,400) size 136.60x136.60 [clip path="clip"]
diff --git a/LayoutTests/platform/mac/svg/custom/image-with-transform-clip-filter-expected.txt b/LayoutTests/platform/mac/svg/custom/image-with-transform-clip-filter-expected.txt
index d5fe8af..ab7a241 100644
--- a/LayoutTests/platform/mac/svg/custom/image-with-transform-clip-filter-expected.txt
+++ b/LayoutTests/platform/mac/svg/custom/image-with-transform-clip-filter-expected.txt
@@ -3,9 +3,9 @@ KCanvasResource {id="myfilter" [type=FILTER]  [bounding box=at (-10.00%,-10.00%)
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 800x600
-  RenderSVGRoot {svg} at (-50.30,-16) size 603.60x492
+  RenderSVGRoot {svg} at (0,-16) size 542x145
     RenderSVGHiddenContainer {defs} at (0,0) size 0x0
-    RenderSVGImage {image} at (-50.30,-16) size 603.60x492 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,-25.00)}] [clip path="myclip"] [filter=myfilter]
+    RenderSVGImage {image} at (0,-16) size 100x91 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,-25.00)}] [clip path="myclip"] [filter=myfilter]
     RenderSVGText {text} at (0,125) size 542x18 contains 1 chunk(s)
       RenderSVGInlineText {#text} at (0,-14) size 542x18
         chunk 1 text run 1 at (0.00,125.00) startOffset 0 endOffset 84 width 542.00: "You should see a solid green block above (a blurred and clipped green checkerboard)."
diff --git a/LayoutTests/platform/mac/svg/custom/js-late-clipPath-and-object-creation-expected.txt b/LayoutTests/platform/mac/svg/custom/js-late-clipPath-and-object-creation-expected.txt
index f2c2bfd..b6471a3 100644
--- a/LayoutTests/platform/mac/svg/custom/js-late-clipPath-and-object-creation-expected.txt
+++ b/LayoutTests/platform/mac/svg/custom/js-late-clipPath-and-object-creation-expected.txt
@@ -2,8 +2,8 @@ KCanvasResource {id="dynClip" [type=CLIPPER] [clip data=[[winding=NON-ZERO] [pat
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 800x600
-  RenderSVGRoot {svg} at (16.67,40) size 881.67x172.50
-    RenderSVGContainer {g} at (16.67,40) size 881.67x172.50 [transform={m=((1.00,0.00)(0.00,1.50)) t=(0.00,0.00)}]
+  RenderSVGRoot {svg} at (16.67,40) size 316.67x172.50
+    RenderSVGContainer {g} at (16.67,40) size 316.67x172.50 [transform={m=((1.00,0.00)(0.00,1.50)) t=(0.00,0.00)}]
       RenderSVGText {text} at (10,70) size 529x69 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-54) size 529x69
           chunk 1 text run 1 at (10.00,70.00) startOffset 0 endOffset 19 width 529.00: "Clipped. INVISIBLE."
diff --git a/LayoutTests/platform/mac/svg/custom/js-late-clipPath-creation-expected.txt b/LayoutTests/platform/mac/svg/custom/js-late-clipPath-creation-expected.txt
index f2c2bfd..b6471a3 100644
--- a/LayoutTests/platform/mac/svg/custom/js-late-clipPath-creation-expected.txt
+++ b/LayoutTests/platform/mac/svg/custom/js-late-clipPath-creation-expected.txt
@@ -2,8 +2,8 @@ KCanvasResource {id="dynClip" [type=CLIPPER] [clip data=[[winding=NON-ZERO] [pat
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 800x600
-  RenderSVGRoot {svg} at (16.67,40) size 881.67x172.50
-    RenderSVGContainer {g} at (16.67,40) size 881.67x172.50 [transform={m=((1.00,0.00)(0.00,1.50)) t=(0.00,0.00)}]
+  RenderSVGRoot {svg} at (16.67,40) size 316.67x172.50
+    RenderSVGContainer {g} at (16.67,40) size 316.67x172.50 [transform={m=((1.00,0.00)(0.00,1.50)) t=(0.00,0.00)}]
       RenderSVGText {text} at (10,70) size 529x69 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-54) size 529x69
           chunk 1 text run 1 at (10.00,70.00) startOffset 0 endOffset 19 width 529.00: "Clipped. INVISIBLE."
diff --git a/LayoutTests/platform/mac/svg/custom/mask-excessive-malloc-expected.checksum b/LayoutTests/platform/mac/svg/custom/mask-excessive-malloc-expected.checksum
index d69a371..759d4e5 100644
--- a/LayoutTests/platform/mac/svg/custom/mask-excessive-malloc-expected.checksum
+++ b/LayoutTests/platform/mac/svg/custom/mask-excessive-malloc-expected.checksum
@@ -1 +1 @@
-853de00567d121bea0b7bece66a5d61c
\ No newline at end of file
+ab530b29c2e0ac4b08a0534e355ac7f6
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/svg/custom/mask-excessive-malloc-expected.png b/LayoutTests/platform/mac/svg/custom/mask-excessive-malloc-expected.png
index 12fde95..cdbb726 100644
Binary files a/LayoutTests/platform/mac/svg/custom/mask-excessive-malloc-expected.png and b/LayoutTests/platform/mac/svg/custom/mask-excessive-malloc-expected.png differ
diff --git a/LayoutTests/platform/mac/svg/custom/mask-with-all-units-expected.txt b/LayoutTests/platform/mac/svg/custom/mask-with-all-units-expected.txt
index 5e52b9b..774606c 100644
--- a/LayoutTests/platform/mac/svg/custom/mask-with-all-units-expected.txt
+++ b/LayoutTests/platform/mac/svg/custom/mask-with-all-units-expected.txt
@@ -17,5 +17,5 @@ layer at (0,0) size 250x250
         RenderPath {rect} at (0.50,0.50) size 0.50x0.50 [fill={[type=SOLID] [color=#FFFFFF] [opacity=0.50]}] [data="M0.50,0.50 L1.00,0.50 L1.00,1.00 L0.50,1.00 Z"]
     RenderPath {rect} at (10,10) size 100x100 [fill={[type=SOLID] [color=#008000]}] [data="M10.00,10.00 L110.00,10.00 L110.00,110.00 L10.00,110.00 Z"]
     RenderPath {rect} at (120,10) size 100x100 [fill={[type=SOLID] [color=#008000]}] [data="M120.00,10.00 L220.00,10.00 L220.00,110.00 L120.00,110.00 Z"]
-    RenderPath {rect} at (10,120) size 100x100 [fill={[type=SOLID] [color=#008000]}] [data="M10.00,120.00 L110.00,120.00 L110.00,220.00 L10.00,220.00 Z"]
+    RenderPath {rect} at (10,170) size 100x50 [fill={[type=SOLID] [color=#008000]}] [data="M10.00,120.00 L110.00,120.00 L110.00,220.00 L10.00,220.00 Z"]
     RenderPath {rect} at (120,120) size 100x100 [fill={[type=SOLID] [color=#008000]}] [data="M120.00,120.00 L220.00,120.00 L220.00,220.00 L120.00,220.00 Z"]
diff --git a/LayoutTests/platform/mac/svg/custom/non-opaque-filters-expected.txt b/LayoutTests/platform/mac/svg/custom/non-opaque-filters-expected.txt
index 3b71d98..c39ca0d 100644
--- a/LayoutTests/platform/mac/svg/custom/non-opaque-filters-expected.txt
+++ b/LayoutTests/platform/mac/svg/custom/non-opaque-filters-expected.txt
@@ -2,10 +2,10 @@ KCanvasResource {id="gblur" [type=FILTER]  [bounding box=at (-10.00%,-10.00%) si
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 800x600
-  RenderSVGRoot {svg} at (0,0) size 139x64
+  RenderSVGRoot {svg} at (-8.70,-4) size 147.70x68
     RenderSVGHiddenContainer {defs} at (0,0) size 0x0
-    RenderSVGContainer {g} at (0,0) size 87x40 [opacity=0.50]
-      RenderPath {rect} at (0,0) size 87x40 [fill={[type=SOLID] [color=#008000]}] [filter=gblur] [data="M0.00,0.00 L87.00,0.00 L87.00,40.00 L0.00,40.00 Z"]
+    RenderSVGContainer {g} at (-8.70,-4) size 104.40x48 [opacity=0.50]
+      RenderPath {rect} at (-8.70,-4) size 104.40x48 [fill={[type=SOLID] [color=#008000]}] [filter=gblur] [data="M0.00,0.00 L87.00,0.00 L87.00,40.00 L0.00,40.00 Z"]
     RenderSVGText {text} at (0,60) size 139x18 contains 1 chunk(s)
       RenderSVGInlineText {#text} at (0,-14) size 139x18
         chunk 1 text run 1 at (0.00,60.00) startOffset 0 endOffset 22 width 139.00: "This should not crash."
diff --git a/LayoutTests/platform/mac/svg/custom/recursive-clippath-expected.txt b/LayoutTests/platform/mac/svg/custom/recursive-clippath-expected.txt
index f45dd43..5e5443c 100644
--- a/LayoutTests/platform/mac/svg/custom/recursive-clippath-expected.txt
+++ b/LayoutTests/platform/mac/svg/custom/recursive-clippath-expected.txt
@@ -2,6 +2,6 @@ KCanvasResource {id="clipPath_0" [type=CLIPPER] [clip data=[[winding=NON-ZERO] [
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 800x600
-  RenderSVGRoot {svg} at (0,0) size 200x200
-    RenderPath {rect} at (0,0) size 200x200 [fill={[type=SOLID] [color=#FF0000]}] [clip path="clipPath_0"] [data="M0.00,0.00 L200.00,0.00 L200.00,200.00 L0.00,200.00 Z"]
+  RenderSVGRoot {svg} at (0,0) size 100x100
+    RenderPath {rect} at (0,0) size 100x100 [fill={[type=SOLID] [color=#FF0000]}] [clip path="clipPath_0"] [data="M0.00,0.00 L200.00,0.00 L200.00,200.00 L0.00,200.00 Z"]
     RenderPath {rect} at (0,0) size 100x100 [fill={[type=SOLID] [color=#008000]}] [data="M0.00,0.00 L100.00,0.00 L100.00,100.00 L0.00,100.00 Z"]
diff --git a/LayoutTests/platform/mac/svg/custom/text-clip-expected.txt b/LayoutTests/platform/mac/svg/custom/text-clip-expected.txt
index a3bed44..d040f4a 100644
--- a/LayoutTests/platform/mac/svg/custom/text-clip-expected.txt
+++ b/LayoutTests/platform/mac/svg/custom/text-clip-expected.txt
@@ -2,9 +2,9 @@ KCanvasResource {id="myclip" [type=CLIPPER] [clip data=[[winding=NON-ZERO] [path
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 800x600
-  RenderSVGRoot {svg} at (0,76) size 648x63
+  RenderSVGRoot {svg} at (0,76) size 133x63
     RenderSVGHiddenContainer {defs} at (0,0) size 0x0
-    RenderSVGContainer {g} at (0,76) size 648x63
+    RenderSVGContainer {g} at (0,76) size 133x63
       RenderSVGText {text} at (0,125) size 133x63 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-49) size 133x63
           chunk 1 text run 1 at (0.00,125.00) startOffset 0 endOffset 4 width 133.00: "PASS"
diff --git a/LayoutTests/platform/mac/svg/custom/visibility-override-clip-expected.txt b/LayoutTests/platform/mac/svg/custom/visibility-override-clip-expected.txt
index 9d1c7dd..2da978d 100644
--- a/LayoutTests/platform/mac/svg/custom/visibility-override-clip-expected.txt
+++ b/LayoutTests/platform/mac/svg/custom/visibility-override-clip-expected.txt
@@ -2,10 +2,10 @@ KCanvasResource {id="myclip" [type=CLIPPER] [clip data=[[winding=NON-ZERO] [path
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 800x600
-  RenderSVGRoot {svg} at (0,0) size 200x200
+  RenderSVGRoot {svg} at (0,0) size 100x100
     RenderSVGHiddenContainer {defs} at (0,0) size 0x0
     RenderPath {rect} at (0,0) size 100x100 [fill={[type=SOLID] [color=#FF0000]}] [data="M0.00,0.00 L100.00,0.00 L100.00,100.00 L0.00,100.00 Z"]
-    RenderSVGContainer {g} at (0,0) size 200x200 [clip path="myclip"]
+    RenderSVGContainer {g} at (0,0) size 100x100 [clip path="myclip"]
       RenderSVGContainer {g} at (0,0) size 200x200
         RenderPath {rect} at (0,0) size 200x200 [fill={[type=SOLID] [color=#FF0000]}] [data="M0.00,0.00 L200.00,0.00 L200.00,200.00 L0.00,200.00 Z"]
         RenderPath {rect} at (0,0) size 100x100 [fill={[type=SOLID] [color=#008000]}] [data="M0.00,0.00 L100.00,0.00 L100.00,100.00 L0.00,100.00 Z"]
diff --git a/LayoutTests/platform/mac/svg/filters/big-sized-filter-2-expected.txt b/LayoutTests/platform/mac/svg/filters/big-sized-filter-2-expected.txt
index 92b9910..12d4bf8 100644
--- a/LayoutTests/platform/mac/svg/filters/big-sized-filter-2-expected.txt
+++ b/LayoutTests/platform/mac/svg/filters/big-sized-filter-2-expected.txt
@@ -2,7 +2,7 @@ KCanvasResource {id="filter" [type=FILTER]  [bounding box=at (0,0) size 20000x20
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 800x600
-  RenderSVGRoot {svg} at (0,0) size 20x20
+  RenderSVGRoot {svg} at (0,0) size 20000x20000
     RenderSVGHiddenContainer {defs} at (0,0) size 0x0
-    RenderSVGContainer {g} at (0,0) size 20x20
-      RenderPath {rect} at (0,0) size 20x20 [fill={[type=SOLID] [color=#FF0000]}] [filter=filter] [data="M0.00,0.00 L20.00,0.00 L20.00,20.00 L0.00,20.00 Z"]
+    RenderSVGContainer {g} at (0,0) size 20000x20000
+      RenderPath {rect} at (0,0) size 20000x20000 [fill={[type=SOLID] [color=#FF0000]}] [filter=filter] [data="M0.00,0.00 L20.00,0.00 L20.00,20.00 L0.00,20.00 Z"]
diff --git a/LayoutTests/platform/mac/svg/filters/big-sized-filter-expected.txt b/LayoutTests/platform/mac/svg/filters/big-sized-filter-expected.txt
index 7acfaff..a71c726 100644
--- a/LayoutTests/platform/mac/svg/filters/big-sized-filter-expected.txt
+++ b/LayoutTests/platform/mac/svg/filters/big-sized-filter-expected.txt
@@ -3,10 +3,10 @@ KCanvasResource {id="filter" [type=FILTER]  [bounding box=at (-10.00%,-10.00%) s
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 800x600
-  RenderSVGRoot {svg} at (0,0) size 20000x20000
+  RenderSVGRoot {svg} at (-2000,-2000) size 24000x24000
     RenderSVGHiddenContainer {defs} at (0,0) size 0x0
       RenderSVGHiddenContainer {linearGradient} at (0,0) size 0x0
         RenderSVGGradientStop {stop} at (0,0) size 0x0
         RenderSVGGradientStop {stop} at (0,0) size 0x0
-    RenderSVGContainer {g} at (0,0) size 20000x20000
-      RenderPath {rect} at (0,0) size 20000x20000 [fill={[type=LINEAR-GRADIENT] [stops=[(0.00,#008000), (0.10,#FF0000)]] [start=(0,0)] [end=(1,1)]}] [filter=filter] [data="M0.00,0.00 L20000.00,0.00 L20000.00,20000.00 L0.00,20000.00 Z"]
+    RenderSVGContainer {g} at (-2000,-2000) size 24000x24000
+      RenderPath {rect} at (-2000,-2000) size 24000x24000 [fill={[type=LINEAR-GRADIENT] [stops=[(0.00,#008000), (0.10,#FF0000)]] [start=(0,0)] [end=(1,1)]}] [filter=filter] [data="M0.00,0.00 L20000.00,0.00 L20000.00,20000.00 L0.00,20000.00 Z"]
diff --git a/LayoutTests/platform/mac/svg/filters/feDisplacementMap-expected.txt b/LayoutTests/platform/mac/svg/filters/feDisplacementMap-expected.txt
index a03e641..d7d078a 100644
--- a/LayoutTests/platform/mac/svg/filters/feDisplacementMap-expected.txt
+++ b/LayoutTests/platform/mac/svg/filters/feDisplacementMap-expected.txt
@@ -12,5 +12,5 @@ layer at (0,0) size 800x600
       RenderSVGHiddenContainer {radialGradient} at (0,0) size 0x0
         RenderSVGGradientStop {stop} at (0,0) size 0x0
         RenderSVGGradientStop {stop} at (0,0) size 0x0
-    RenderSVGImage {image} at (10,10) size 220x100 [filter=f1]
+    RenderSVGImage {image} at (10,10) size 100x100 [filter=f1]
     RenderSVGImage {image} at (130,10) size 100x100 [filter=f1]
diff --git a/LayoutTests/platform/mac/svg/filters/feMerge-expected.txt b/LayoutTests/platform/mac/svg/filters/feMerge-expected.txt
index 26228c1..7dd0275 100644
--- a/LayoutTests/platform/mac/svg/filters/feMerge-expected.txt
+++ b/LayoutTests/platform/mac/svg/filters/feMerge-expected.txt
@@ -4,8 +4,8 @@ KCanvasResource {id="filter_3" [type=FILTER]  [bounding box=at (-10.00%,-10.00%)
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 800x600
-  RenderSVGRoot {svg} at (10,10) size 550x150
+  RenderSVGRoot {svg} at (-5,-5) size 580x180
     RenderSVGHiddenContainer {defs} at (0,0) size 0x0
-    RenderPath {rect} at (10,10) size 150x150 [fill={[type=SOLID] [color=#000000]}] [filter=filter_1] [data="M10.00,10.00 L160.00,10.00 L160.00,160.00 L10.00,160.00 Z"]
-    RenderPath {rect} at (210,10) size 150x150 [fill={[type=SOLID] [color=#000000]}] [filter=filter_2] [data="M210.00,10.00 L360.00,10.00 L360.00,160.00 L210.00,160.00 Z"]
-    RenderPath {rect} at (410,10) size 150x150 [fill={[type=SOLID] [color=#000000]}] [filter=filter_3] [data="M410.00,10.00 L560.00,10.00 L560.00,160.00 L410.00,160.00 Z"]
+    RenderPath {rect} at (-5,-5) size 180x180 [fill={[type=SOLID] [color=#000000]}] [filter=filter_1] [data="M10.00,10.00 L160.00,10.00 L160.00,160.00 L10.00,160.00 Z"]
+    RenderPath {rect} at (195,-5) size 180x180 [fill={[type=SOLID] [color=#000000]}] [filter=filter_2] [data="M210.00,10.00 L360.00,10.00 L360.00,160.00 L210.00,160.00 Z"]
+    RenderPath {rect} at (395,-5) size 180x180 [fill={[type=SOLID] [color=#000000]}] [filter=filter_3] [data="M410.00,10.00 L560.00,10.00 L560.00,160.00 L410.00,160.00 Z"]
diff --git a/LayoutTests/platform/mac/svg/filters/feOffset-expected.txt b/LayoutTests/platform/mac/svg/filters/feOffset-expected.txt
index ec3f637..aa75a09 100644
--- a/LayoutTests/platform/mac/svg/filters/feOffset-expected.txt
+++ b/LayoutTests/platform/mac/svg/filters/feOffset-expected.txt
@@ -8,19 +8,19 @@ KCanvasResource {id="filter_1effect_07" [type=FILTER]  [bounding box=at (-10.00%
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 800x600
-  RenderSVGRoot {svg} at (35,35) size 650x50
+  RenderSVGRoot {svg} at (30,30) size 660x60
     RenderSVGHiddenContainer {defs} at (0,0) size 0x0
-    RenderSVGContainer {g} at (35,35) size 50x50 [transform={m=((1.00,0.00)(0.00,1.00)) t=(10.00,10.00)}]
-      RenderPath {rect} at (35,35) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_01] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
-    RenderSVGContainer {g} at (135,35) size 50x50 [transform={m=((1.00,0.00)(0.00,1.00)) t=(110.00,10.00)}]
-      RenderPath {rect} at (135,35) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_02] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
-    RenderSVGContainer {g} at (235,35) size 50x50 [transform={m=((1.00,0.00)(0.00,1.00)) t=(210.00,10.00)}]
-      RenderPath {rect} at (235,35) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_03] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
-    RenderSVGContainer {g} at (335,35) size 50x50 [transform={m=((1.00,0.00)(0.00,1.00)) t=(310.00,10.00)}]
-      RenderPath {rect} at (335,35) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_04] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
-    RenderSVGContainer {g} at (435,35) size 50x50 [transform={m=((1.00,0.00)(0.00,1.00)) t=(410.00,10.00)}]
-      RenderPath {rect} at (435,35) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_05] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
-    RenderSVGContainer {g} at (535,35) size 50x50 [transform={m=((1.00,0.00)(0.00,1.00)) t=(510.00,10.00)}]
-      RenderPath {rect} at (535,35) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_06] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
-    RenderSVGContainer {g} at (635,35) size 50x50 [transform={m=((1.00,0.00)(0.00,1.00)) t=(610.00,10.00)}]
-      RenderPath {rect} at (635,35) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_07] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
+    RenderSVGContainer {g} at (30,30) size 60x60 [transform={m=((1.00,0.00)(0.00,1.00)) t=(10.00,10.00)}]
+      RenderPath {rect} at (30,30) size 60x60 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_01] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
+    RenderSVGContainer {g} at (130,30) size 60x60 [transform={m=((1.00,0.00)(0.00,1.00)) t=(110.00,10.00)}]
+      RenderPath {rect} at (130,30) size 60x60 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_02] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
+    RenderSVGContainer {g} at (230,30) size 60x60 [transform={m=((1.00,0.00)(0.00,1.00)) t=(210.00,10.00)}]
+      RenderPath {rect} at (230,30) size 60x60 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_03] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
+    RenderSVGContainer {g} at (330,30) size 60x60 [transform={m=((1.00,0.00)(0.00,1.00)) t=(310.00,10.00)}]
+      RenderPath {rect} at (330,30) size 60x60 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_04] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
+    RenderSVGContainer {g} at (430,30) size 60x60 [transform={m=((1.00,0.00)(0.00,1.00)) t=(410.00,10.00)}]
+      RenderPath {rect} at (430,30) size 60x60 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_05] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
+    RenderSVGContainer {g} at (530,30) size 60x60 [transform={m=((1.00,0.00)(0.00,1.00)) t=(510.00,10.00)}]
+      RenderPath {rect} at (530,30) size 60x60 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_06] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
+    RenderSVGContainer {g} at (630,30) size 60x60 [transform={m=((1.00,0.00)(0.00,1.00)) t=(610.00,10.00)}]
+      RenderPath {rect} at (630,30) size 60x60 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_07] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
diff --git a/LayoutTests/platform/mac/svg/filters/feTile-expected.txt b/LayoutTests/platform/mac/svg/filters/feTile-expected.txt
index 809c14e..ffecdc9 100644
--- a/LayoutTests/platform/mac/svg/filters/feTile-expected.txt
+++ b/LayoutTests/platform/mac/svg/filters/feTile-expected.txt
@@ -5,12 +5,12 @@ KCanvasResource {id="filter_3" [type=FILTER]  [bounding box=at (-25.00%,-25.00%)
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 800x600
-  RenderSVGRoot {svg} at (10,10) size 372x100
+  RenderSVGRoot {svg} at (-40,-40) size 459.50x200
     RenderSVGHiddenContainer {defs} at (0,0) size 0x0
       RenderSVGHiddenContainer {linearGradient} at (0,0) size 0x0
         RenderSVGGradientStop {stop} at (0,0) size 0x0
         RenderSVGGradientStop {stop} at (0,0) size 0x0
-    RenderSVGContainer {g} at (10,10) size 372x100
-      RenderPath {rect} at (10,10) size 100x100 [fill={[type=LINEAR-GRADIENT] [stops=[(0.00,#FFFFFF), (1.00,#0000FF)]] [start=(0,0)] [end=(1,1)]}] [filter=filter_1] [data="M10.00,10.00 L110.00,10.00 L110.00,110.00 L10.00,110.00 Z"]
-      RenderPath {rect} at (160,10) size 50x50 [fill={[type=LINEAR-GRADIENT] [stops=[(0.00,#FFFFFF), (1.00,#0000FF)]] [start=(0,0)] [end=(1,1)]}] [filter=filter_2] [data="M160.00,10.00 L210.00,10.00 L210.00,60.00 L160.00,60.00 Z"]
-      RenderPath {rect} at (332,22) size 50x50 [fill={[type=LINEAR-GRADIENT] [stops=[(0.00,#FFFFFF), (1.00,#0000FF)]] [start=(0,0)] [end=(1,1)]}] [filter=filter_3] [data="M332.00,22.00 L382.00,22.00 L382.00,72.00 L332.00,72.00 Z"]
+    RenderSVGContainer {g} at (-40,-40) size 459.50x200
+      RenderPath {rect} at (-40,-40) size 200x200 [fill={[type=LINEAR-GRADIENT] [stops=[(0.00,#FFFFFF), (1.00,#0000FF)]] [start=(0,0)] [end=(1,1)]}] [filter=filter_1] [data="M10.00,10.00 L110.00,10.00 L110.00,110.00 L10.00,110.00 Z"]
+      RenderPath {rect} at (160,10) size 100x100 [fill={[type=LINEAR-GRADIENT] [stops=[(0.00,#FFFFFF), (1.00,#0000FF)]] [start=(0,0)] [end=(1,1)]}] [filter=filter_2] [data="M160.00,10.00 L210.00,10.00 L210.00,60.00 L160.00,60.00 Z"]
+      RenderPath {rect} at (319.50,9.50) size 100x100 [fill={[type=LINEAR-GRADIENT] [stops=[(0.00,#FFFFFF), (1.00,#0000FF)]] [start=(0,0)] [end=(1,1)]}] [filter=filter_3] [data="M332.00,22.00 L382.00,22.00 L382.00,72.00 L332.00,72.00 Z"]
diff --git a/LayoutTests/platform/mac/svg/filters/filter-source-position-expected.txt b/LayoutTests/platform/mac/svg/filters/filter-source-position-expected.txt
index f728ac1..8a397f4 100644
--- a/LayoutTests/platform/mac/svg/filters/filter-source-position-expected.txt
+++ b/LayoutTests/platform/mac/svg/filters/filter-source-position-expected.txt
@@ -5,18 +5,18 @@ KCanvasResource {id="filter4" [type=FILTER]  [bounding box=at (-20.00%,-20.00%)
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 800x600
-  RenderSVGRoot {svg} at (20,20) size 240x240
+  RenderSVGRoot {svg} at (42,42) size 196x196
     RenderSVGHiddenContainer {defs} at (0,0) size 0x0
       RenderSVGImage {image} at (20,20) size 110x110
-    RenderSVGContainer {use} at (20,20) size 110x110 [filter=filter1]
+    RenderSVGContainer {use} at (42,42) size 88x88 [filter=filter1]
       RenderSVGContainer {g} at (20,20) size 110x110
         RenderSVGImage {image} at (20,20) size 110x110
-    RenderSVGContainer {use} at (128,20) size 132x110 [filter=filter2]
+    RenderSVGContainer {use} at (128,42) size 110x88 [filter=filter2]
       RenderSVGContainer {g} at (150,20) size 110x110 [transform={m=((1.00,0.00)(0.00,1.00)) t=(130.00,0.00)}]
         RenderSVGImage {image} at (150,20) size 110x110
-    RenderSVGContainer {use} at (20,128) size 110x132 [filter=filter3]
+    RenderSVGContainer {use} at (42,128) size 88x110 [filter=filter3]
       RenderSVGContainer {g} at (20,150) size 110x110 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,130.00)}]
         RenderSVGImage {image} at (20,150) size 110x110
-    RenderSVGContainer {use} at (128,128) size 132x132 [filter=filter4]
+    RenderSVGContainer {use} at (128,128) size 110x110 [filter=filter4]
       RenderSVGContainer {g} at (150,150) size 110x110 [transform={m=((1.00,0.00)(0.00,1.00)) t=(130.00,130.00)}]
         RenderSVGImage {image} at (150,150) size 110x110
diff --git a/LayoutTests/platform/mac/svg/filters/filterRes-expected.txt b/LayoutTests/platform/mac/svg/filters/filterRes-expected.txt
index 3e1316c..1456362 100644
--- a/LayoutTests/platform/mac/svg/filters/filterRes-expected.txt
+++ b/LayoutTests/platform/mac/svg/filters/filterRes-expected.txt
@@ -7,7 +7,7 @@ KCanvasResource {id="dilate2" [type=FILTER] }
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 800x600
-  RenderSVGRoot {svg} at (10,0) size 445.50x120
+  RenderSVGRoot {svg} at (10,0) size 445x120
     RenderSVGHiddenContainer {defs} at (0,0) size 0x0
       RenderSVGHiddenContainer {linearGradient} at (0,0) size 0x0
         RenderSVGGradientStop {stop} at (0,0) size 0x0
@@ -20,6 +20,6 @@ layer at (0,0) size 800x600
     RenderSVGContainer {g} at (240,0) size 120x120 [transform={m=((1.00,0.00)(0.00,1.00)) t=(250.00,10.00)}] [filter=gauss]
       RenderPath {rect} at (250,10) size 75x75 [fill={[type=SOLID] [color=#FF0000]}] [data="M0.00,0.00 L75.00,0.00 L75.00,75.00 L0.00,75.00 Z"]
       RenderPath {rect} at (275,35) size 75x75 [fill={[type=SOLID] [color=#0000FF]}] [data="M25.00,25.00 L100.00,25.00 L100.00,100.00 L25.00,100.00 Z"]
-    RenderSVGContainer {g} at (389.50,29.50) size 66x66 [transform={m=((1.00,0.00)(0.00,1.00)) t=(370.00,10.00)}] [filter=dilate2]
+    RenderSVGContainer {g} at (390,30) size 65x65 [transform={m=((1.00,0.00)(0.00,1.00)) t=(370.00,10.00)}] [filter=dilate2]
       RenderPath {rect} at (389.50,29.50) size 51x51 [stroke={[type=SOLID] [color=#FF0000]}] [data="M20.00,20.00 L70.00,20.00 L70.00,70.00 L20.00,70.00 Z"]
       RenderPath {rect} at (404.50,44.50) size 51x51 [stroke={[type=SOLID] [color=#0000FF]}] [data="M35.00,35.00 L85.00,35.00 L85.00,85.00 L35.00,85.00 Z"]
diff --git a/LayoutTests/platform/mac/svg/filters/shadow-on-filter-expected.txt b/LayoutTests/platform/mac/svg/filters/shadow-on-filter-expected.txt
index 803aee3..944e049 100644
--- a/LayoutTests/platform/mac/svg/filters/shadow-on-filter-expected.txt
+++ b/LayoutTests/platform/mac/svg/filters/shadow-on-filter-expected.txt
@@ -2,6 +2,6 @@ KCanvasResource {id="filter" [type=FILTER]  [bounding box=at (-50.00%,-50.00%) s
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 800x600
-  RenderSVGRoot {svg} at (200,200) size 300x300
+  RenderSVGRoot {svg} at (50,50) size 480x480
     RenderSVGHiddenContainer {defs} at (0,0) size 0x0
-    RenderPath {rect} at (200,200) size 300x300 [fill={[type=SOLID] [color=#008000]}] [filter=filter] [data="M200.00,200.00 L500.00,200.00 L500.00,500.00 L200.00,500.00 Z"]
+    RenderPath {rect} at (50,50) size 480x480 [fill={[type=SOLID] [color=#008000]}] [filter=filter] [data="M200.00,200.00 L500.00,200.00 L500.00,500.00 L200.00,500.00 Z"]
diff --git a/LayoutTests/platform/mac/svg/filters/shadow-on-rect-with-filter-expected.txt b/LayoutTests/platform/mac/svg/filters/shadow-on-rect-with-filter-expected.txt
index 803aee3..944e049 100644
--- a/LayoutTests/platform/mac/svg/filters/shadow-on-rect-with-filter-expected.txt
+++ b/LayoutTests/platform/mac/svg/filters/shadow-on-rect-with-filter-expected.txt
@@ -2,6 +2,6 @@ KCanvasResource {id="filter" [type=FILTER]  [bounding box=at (-50.00%,-50.00%) s
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 800x600
-  RenderSVGRoot {svg} at (200,200) size 300x300
+  RenderSVGRoot {svg} at (50,50) size 480x480
     RenderSVGHiddenContainer {defs} at (0,0) size 0x0
-    RenderPath {rect} at (200,200) size 300x300 [fill={[type=SOLID] [color=#008000]}] [filter=filter] [data="M200.00,200.00 L500.00,200.00 L500.00,500.00 L200.00,500.00 Z"]
+    RenderPath {rect} at (50,50) size 480x480 [fill={[type=SOLID] [color=#008000]}] [filter=filter] [data="M200.00,200.00 L500.00,200.00 L500.00,500.00 L200.00,500.00 Z"]
diff --git a/LayoutTests/platform/mac/svg/filters/subRegion-one-effect-expected.txt b/LayoutTests/platform/mac/svg/filters/subRegion-one-effect-expected.txt
index cb4fdf4..6751f3a 100644
--- a/LayoutTests/platform/mac/svg/filters/subRegion-one-effect-expected.txt
+++ b/LayoutTests/platform/mac/svg/filters/subRegion-one-effect-expected.txt
@@ -15,75 +15,75 @@ KCanvasResource {id="filter_1effect_14" [type=FILTER]  [bounding box=at (-10.00%
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 800x600
-  RenderSVGRoot {svg} at (9.90,9.90) size 687.85x375.10
+  RenderSVGRoot {svg} at (9.90,9.90) size 687.85x380.10
     RenderSVGHiddenContainer {defs} at (0,0) size 0x0
-    RenderSVGContainer {g} at (9.90,9.90) size 75.35x175.10 [transform={m=((1.00,0.00)(0.00,1.00)) t=(10.00,10.00)}]
+    RenderSVGContainer {g} at (9.90,9.90) size 75.35x150.10 [transform={m=((1.00,0.00)(0.00,1.00)) t=(10.00,10.00)}]
       RenderPath {rect} at (34.90,34.90) size 50.20x50.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={5.00}]}] [fill={[type=SOLID] [color=#96FF96]}] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
       RenderPath {rect} at (9.90,9.90) size 50.20x50.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={3.00}]}] [fill={[type=SOLID] [color=#C8C8C8] [opacity=0.40]}] [data="M0.00,0.00 L50.00,0.00 L50.00,50.00 L0.00,50.00 Z"]
       RenderPath {rect} at (34.75,34.75) size 50.50x50.50 [stroke={[type=SOLID] [color=#000000] [stroke width=0.50]}] [fill={[type=SOLID] [color=#000096] [opacity=0.40]}] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
-      RenderPath {rect} at (35,135) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_01] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
-    RenderSVGContainer {g} at (109.90,9.90) size 75.20x175.10 [transform={m=((1.00,0.00)(0.00,1.00)) t=(110.00,10.00)}]
+      RenderPath {rect} at (10,110) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_01] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
+    RenderSVGContainer {g} at (109.90,9.90) size 75.20x150.10 [transform={m=((1.00,0.00)(0.00,1.00)) t=(110.00,10.00)}]
       RenderPath {rect} at (134.90,34.90) size 50.20x50.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={5.00}]}] [fill={[type=SOLID] [color=#96FF96]}] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
       RenderPath {rect} at (109.90,9.90) size 50.20x50.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={3.00}]}] [fill={[type=SOLID] [color=#C8C8C8] [opacity=0.40]}] [data="M0.00,0.00 L50.00,0.00 L50.00,50.00 L0.00,50.00 Z"]
       RenderPath {rect} at (122.25,22.25) size 25.50x38 [stroke={[type=SOLID] [color=#000000] [stroke width=0.50]}] [fill={[type=SOLID] [color=#000096] [opacity=0.40]}] [data="M12.50,12.50 L37.50,12.50 L37.50,50.00 L12.50,50.00 Z"]
-      RenderPath {rect} at (135,135) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_02] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
-    RenderSVGContainer {g} at (209.90,9.90) size 75.20x175.10 [transform={m=((1.00,0.00)(0.00,1.00)) t=(210.00,10.00)}]
+      RenderPath {rect} at (110,110) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_02] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
+    RenderSVGContainer {g} at (209.90,9.90) size 75.20x150.10 [transform={m=((1.00,0.00)(0.00,1.00)) t=(210.00,10.00)}]
       RenderPath {rect} at (234.90,34.90) size 50.20x50.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={5.00}]}] [fill={[type=SOLID] [color=#96FF96]}] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
       RenderPath {rect} at (209.90,9.90) size 50.20x50.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={3.00}]}] [fill={[type=SOLID] [color=#C8C8C8] [opacity=0.40]}] [data="M0.00,0.00 L50.00,0.00 L50.00,50.00 L0.00,50.00 Z"]
       RenderPath {rect} at (234.75,34.75) size 25.50x25.50 [stroke={[type=SOLID] [color=#000000] [stroke width=0.50]}] [fill={[type=SOLID] [color=#000096] [opacity=0.40]}] [data="M25.00,25.00 L50.00,25.00 L50.00,50.00 L25.00,50.00 Z"]
-      RenderPath {rect} at (235,135) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_03] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
-    RenderSVGContainer {g} at (309.90,9.90) size 75.35x175.10 [transform={m=((1.00,0.00)(0.00,1.00)) t=(310.00,10.00)}]
+      RenderPath {rect} at (210,110) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_03] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
+    RenderSVGContainer {g} at (309.90,9.90) size 75.35x150.10 [transform={m=((1.00,0.00)(0.00,1.00)) t=(310.00,10.00)}]
       RenderPath {rect} at (334.90,34.90) size 50.20x50.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={5.00}]}] [fill={[type=SOLID] [color=#96FF96]}] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
       RenderPath {rect} at (309.90,9.90) size 50.20x50.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={3.00}]}] [fill={[type=SOLID] [color=#C8C8C8] [opacity=0.40]}] [data="M0.00,0.00 L50.00,0.00 L50.00,50.00 L0.00,50.00 Z"]
       RenderPath {rect} at (359.75,47.25) size 25.50x13 [stroke={[type=SOLID] [color=#000000] [stroke width=0.50]}] [fill={[type=SOLID] [color=#000096] [opacity=0.40]}] [data="M50.00,37.50 L75.00,37.50 L75.00,50.00 L50.00,50.00 Z"]
-      RenderPath {rect} at (335,135) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_04] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
-    RenderSVGContainer {g} at (409.90,9.90) size 75.20x175.10 [transform={m=((1.00,0.00)(0.00,1.00)) t=(410.00,10.00)}]
+      RenderPath {rect} at (310,110) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_04] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
+    RenderSVGContainer {g} at (409.90,9.90) size 75.20x150.10 [transform={m=((1.00,0.00)(0.00,1.00)) t=(410.00,10.00)}]
       RenderPath {rect} at (434.90,34.90) size 50.20x50.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={5.00}]}] [fill={[type=SOLID] [color=#96FF96]}] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
       RenderPath {rect} at (409.90,9.90) size 50.20x50.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={3.00}]}] [fill={[type=SOLID] [color=#C8C8C8] [opacity=0.40]}] [data="M0.00,0.00 L50.00,0.00 L50.00,50.00 L0.00,50.00 Z"]
       RenderPath {rect} at (447.25,47.25) size 25.50x25.50 [stroke={[type=SOLID] [color=#000000] [stroke width=0.50]}] [fill={[type=SOLID] [color=#000096] [opacity=0.40]}] [data="M37.50,37.50 L62.50,37.50 L62.50,62.50 L37.50,62.50 Z"]
-      RenderPath {rect} at (435,135) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_05] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
-    RenderSVGContainer {g} at (509.90,9.90) size 75.20x175.10 [transform={m=((1.00,0.00)(0.00,1.00)) t=(510.00,10.00)}]
+      RenderPath {rect} at (410,110) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_05] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
+    RenderSVGContainer {g} at (509.90,9.90) size 75.20x150.10 [transform={m=((1.00,0.00)(0.00,1.00)) t=(510.00,10.00)}]
       RenderPath {rect} at (534.90,34.90) size 50.20x50.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={5.00}]}] [fill={[type=SOLID] [color=#96FF96]}] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
       RenderPath {rect} at (509.90,9.90) size 50.20x50.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={3.00}]}] [fill={[type=SOLID] [color=#C8C8C8] [opacity=0.40]}] [data="M0.00,0.00 L50.00,0.00 L50.00,50.00 L0.00,50.00 Z"]
       RenderPath {rect} at (522.25,22.25) size 50.50x50.50 [stroke={[type=SOLID] [color=#000000] [stroke width=0.50]}] [fill={[type=SOLID] [color=#000096] [opacity=0.40]}] [data="M12.50,12.50 L62.50,12.50 L62.50,62.50 L12.50,62.50 Z"]
-      RenderPath {rect} at (535,135) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_06] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
-    RenderSVGContainer {g} at (609.90,9.90) size 75.20x175.10 [transform={m=((1.00,0.00)(0.00,1.00)) t=(610.00,10.00)}]
+      RenderPath {rect} at (510,110) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_06] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
+    RenderSVGContainer {g} at (609.90,9.90) size 75.20x150.10 [transform={m=((1.00,0.00)(0.00,1.00)) t=(610.00,10.00)}]
       RenderPath {rect} at (634.90,34.90) size 50.20x50.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={5.00}]}] [fill={[type=SOLID] [color=#96FF96]}] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
       RenderPath {rect} at (609.90,9.90) size 50.20x50.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={3.00}]}] [fill={[type=SOLID] [color=#C8C8C8] [opacity=0.40]}] [data="M0.00,0.00 L50.00,0.00 L50.00,50.00 L0.00,50.00 Z"]
       RenderPath {rect} at (641,41) size 13x13 [stroke={[type=SOLID] [color=#000000] [stroke width=0.50]}] [fill={[type=SOLID] [color=#000096] [opacity=0.40]}] [data="M31.25,31.25 L43.75,31.25 L43.75,43.75 L31.25,43.75 Z"]
-      RenderPath {rect} at (635,135) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_07] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
-    RenderSVGContainer {g} at (29.90,229.90) size 60.20x155.10 [transform={m=((1.00,0.00)(0.00,1.00)) t=(10.00,210.00)}]
+      RenderPath {rect} at (610,110) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_07] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
+    RenderSVGContainer {g} at (29.90,229.90) size 60.20x160.10 [transform={m=((1.00,0.00)(0.00,1.00)) t=(10.00,210.00)}]
       RenderPath {rect} at (34.90,234.90) size 50.20x50.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={5.00}]}] [fill={[type=SOLID] [color=#96FF96]}] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
       RenderPath {rect} at (29.90,229.90) size 60.20x60.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={3.00}]}] [fill={[type=SOLID] [color=#C8C8C8] [opacity=0.40]}] [data="M20.00,20.00 L80.00,20.00 L80.00,80.00 L20.00,80.00 Z"]
       RenderPath {rect} at (34.75,234.75) size 50.50x50.50 [stroke={[type=SOLID] [color=#000000] [stroke width=0.50]}] [fill={[type=SOLID] [color=#000096] [opacity=0.40]}] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
-      RenderPath {rect} at (35,335) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_08] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
-    RenderSVGContainer {g} at (122.25,222.25) size 67.85x162.75 [transform={m=((1.00,0.00)(0.00,1.00)) t=(110.00,210.00)}]
+      RenderPath {rect} at (30,330) size 60x60 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_08] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
+    RenderSVGContainer {g} at (122.25,222.25) size 67.85x167.75 [transform={m=((1.00,0.00)(0.00,1.00)) t=(110.00,210.00)}]
       RenderPath {rect} at (134.90,234.90) size 50.20x50.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={5.00}]}] [fill={[type=SOLID] [color=#96FF96]}] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
       RenderPath {rect} at (129.90,229.90) size 60.20x60.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={3.00}]}] [fill={[type=SOLID] [color=#C8C8C8] [opacity=0.40]}] [data="M20.00,20.00 L80.00,20.00 L80.00,80.00 L20.00,80.00 Z"]
       RenderPath {rect} at (122.25,222.25) size 25.50x38 [stroke={[type=SOLID] [color=#000000] [stroke width=0.50]}] [fill={[type=SOLID] [color=#000096] [opacity=0.40]}] [data="M12.50,12.50 L37.50,12.50 L37.50,50.00 L12.50,50.00 Z"]
-      RenderPath {rect} at (135,335) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_09] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
-    RenderSVGContainer {g} at (229.90,229.90) size 60.20x155.10 [transform={m=((1.00,0.00)(0.00,1.00)) t=(210.00,210.00)}]
+      RenderPath {rect} at (130,330) size 60x60 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_09] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
+    RenderSVGContainer {g} at (229.90,229.90) size 60.20x160.10 [transform={m=((1.00,0.00)(0.00,1.00)) t=(210.00,210.00)}]
       RenderPath {rect} at (234.90,234.90) size 50.20x50.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={5.00}]}] [fill={[type=SOLID] [color=#96FF96]}] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
       RenderPath {rect} at (229.90,229.90) size 60.20x60.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={3.00}]}] [fill={[type=SOLID] [color=#C8C8C8] [opacity=0.40]}] [data="M20.00,20.00 L80.00,20.00 L80.00,80.00 L20.00,80.00 Z"]
       RenderPath {rect} at (234.75,234.75) size 25.50x25.50 [stroke={[type=SOLID] [color=#000000] [stroke width=0.50]}] [fill={[type=SOLID] [color=#000096] [opacity=0.40]}] [data="M25.00,25.00 L50.00,25.00 L50.00,50.00 L25.00,50.00 Z"]
-      RenderPath {rect} at (235,335) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_10] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
-    RenderSVGContainer {g} at (329.90,229.90) size 80.35x155.10 [transform={m=((1.00,0.00)(0.00,1.00)) t=(310.00,210.00)}]
+      RenderPath {rect} at (230,330) size 60x60 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_10] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
+    RenderSVGContainer {g} at (329.90,229.90) size 80.35x160.10 [transform={m=((1.00,0.00)(0.00,1.00)) t=(310.00,210.00)}]
       RenderPath {rect} at (334.90,234.90) size 50.20x50.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={5.00}]}] [fill={[type=SOLID] [color=#96FF96]}] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
       RenderPath {rect} at (329.90,229.90) size 60.20x60.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={3.00}]}] [fill={[type=SOLID] [color=#C8C8C8] [opacity=0.40]}] [data="M20.00,20.00 L80.00,20.00 L80.00,80.00 L20.00,80.00 Z"]
       RenderPath {rect} at (359.75,259.75) size 50.50x50.50 [stroke={[type=SOLID] [color=#000000] [stroke width=0.50]}] [fill={[type=SOLID] [color=#000096] [opacity=0.40]}] [data="M50.00,50.00 L100.00,50.00 L100.00,100.00 L50.00,100.00 Z"]
-      RenderPath {rect} at (335,335) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_11] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
-    RenderSVGContainer {g} at (429.90,229.90) size 60.20x155.10 [transform={m=((1.00,0.00)(0.00,1.00)) t=(410.00,210.00)}]
+      RenderPath {rect} at (330,330) size 60x60 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_11] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
+    RenderSVGContainer {g} at (429.90,229.90) size 60.20x160.10 [transform={m=((1.00,0.00)(0.00,1.00)) t=(410.00,210.00)}]
       RenderPath {rect} at (434.90,234.90) size 50.20x50.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={5.00}]}] [fill={[type=SOLID] [color=#96FF96]}] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
       RenderPath {rect} at (429.90,229.90) size 60.20x60.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={3.00}]}] [fill={[type=SOLID] [color=#C8C8C8] [opacity=0.40]}] [data="M20.00,20.00 L80.00,20.00 L80.00,80.00 L20.00,80.00 Z"]
       RenderPath {rect} at (447.25,247.25) size 25.50x25.50 [stroke={[type=SOLID] [color=#000000] [stroke width=0.50]}] [fill={[type=SOLID] [color=#000096] [opacity=0.40]}] [data="M37.50,37.50 L62.50,37.50 L62.50,62.50 L37.50,62.50 Z"]
-      RenderPath {rect} at (435,335) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_12] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
-    RenderSVGContainer {g} at (522.25,222.25) size 67.85x162.75 [transform={m=((1.00,0.00)(0.00,1.00)) t=(510.00,210.00)}]
+      RenderPath {rect} at (430,330) size 60x60 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_12] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
+    RenderSVGContainer {g} at (522.25,222.25) size 67.85x167.75 [transform={m=((1.00,0.00)(0.00,1.00)) t=(510.00,210.00)}]
       RenderPath {rect} at (534.90,234.90) size 50.20x50.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={5.00}]}] [fill={[type=SOLID] [color=#96FF96]}] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
       RenderPath {rect} at (529.90,229.90) size 60.20x60.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={3.00}]}] [fill={[type=SOLID] [color=#C8C8C8] [opacity=0.40]}] [data="M20.00,20.00 L80.00,20.00 L80.00,80.00 L20.00,80.00 Z"]
       RenderPath {rect} at (522.25,222.25) size 50.50x50.50 [stroke={[type=SOLID] [color=#000000] [stroke width=0.50]}] [fill={[type=SOLID] [color=#000096] [opacity=0.40]}] [data="M12.50,12.50 L62.50,12.50 L62.50,62.50 L12.50,62.50 Z"]
-      RenderPath {rect} at (535,335) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_13] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
-    RenderSVGContainer {g} at (622.25,222.25) size 75.50x162.75 [transform={m=((1.00,0.00)(0.00,1.00)) t=(610.00,210.00)}]
+      RenderPath {rect} at (530,330) size 60x60 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_13] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
+    RenderSVGContainer {g} at (622.25,222.25) size 75.50x167.75 [transform={m=((1.00,0.00)(0.00,1.00)) t=(610.00,210.00)}]
       RenderPath {rect} at (634.90,234.90) size 50.20x50.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={5.00}]}] [fill={[type=SOLID] [color=#96FF96]}] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
       RenderPath {rect} at (629.90,229.90) size 60.20x60.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={3.00}]}] [fill={[type=SOLID] [color=#C8C8C8] [opacity=0.40]}] [data="M20.00,20.00 L80.00,20.00 L80.00,80.00 L20.00,80.00 Z"]
       RenderPath {rect} at (622.25,222.25) size 75.50x75.50 [stroke={[type=SOLID] [color=#000000] [stroke width=0.50]}] [fill={[type=SOLID] [color=#000096] [opacity=0.40]}] [data="M12.50,12.50 L87.50,12.50 L87.50,87.50 L12.50,87.50 Z"]
-      RenderPath {rect} at (635,335) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_14] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
+      RenderPath {rect} at (630,330) size 60x60 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_14] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
diff --git a/LayoutTests/platform/mac/svg/filters/subRegion-two-effects-expected.txt b/LayoutTests/platform/mac/svg/filters/subRegion-two-effects-expected.txt
index 32c70a3..4bdc8c0 100644
--- a/LayoutTests/platform/mac/svg/filters/subRegion-two-effects-expected.txt
+++ b/LayoutTests/platform/mac/svg/filters/subRegion-two-effects-expected.txt
@@ -15,89 +15,89 @@ KCanvasResource {id="filter_1effect_14" [type=FILTER]  [bounding box=at (-10.00%
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 800x600
-  RenderSVGRoot {svg} at (9.75,9.75) size 700.50x375.25
+  RenderSVGRoot {svg} at (9.75,9.75) size 700.50x380.25
     RenderSVGHiddenContainer {defs} at (0,0) size 0x0
-    RenderSVGContainer {g} at (9.75,9.75) size 75.50x175.25 [transform={m=((1.00,0.00)(0.00,1.00)) t=(10.00,10.00)}]
+    RenderSVGContainer {g} at (9.75,9.75) size 75.50x150.25 [transform={m=((1.00,0.00)(0.00,1.00)) t=(10.00,10.00)}]
       RenderPath {rect} at (34.90,34.90) size 50.20x50.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={5.00}]}] [fill={[type=SOLID] [color=#96FF96]}] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
       RenderPath {rect} at (9.90,9.90) size 50.20x50.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={3.00}]}] [fill={[type=SOLID] [color=#C8C8C8] [opacity=0.40]}] [data="M0.00,0.00 L50.00,0.00 L50.00,50.00 L0.00,50.00 Z"]
       RenderPath {rect} at (34.75,34.75) size 50.50x50.50 [stroke={[type=SOLID] [color=#000000] [stroke width=0.50]}] [fill={[type=SOLID] [color=#000096] [opacity=0.40]}] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
       RenderPath {rect} at (9.75,9.75) size 50.50x50.50 [stroke={[type=SOLID] [color=#000000] [stroke width=0.50]}] [fill={[type=SOLID] [color=#960000] [opacity=0.40]}] [data="M0.00,0.00 L50.00,0.00 L50.00,50.00 L0.00,50.00 Z"]
-      RenderPath {rect} at (35,135) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_01] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
-    RenderSVGContainer {g} at (109.90,9.90) size 87.85x175.10 [transform={m=((1.00,0.00)(0.00,1.00)) t=(110.00,10.00)}]
+      RenderPath {rect} at (10,110) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_01] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
+    RenderSVGContainer {g} at (109.90,9.90) size 87.85x150.10 [transform={m=((1.00,0.00)(0.00,1.00)) t=(110.00,10.00)}]
       RenderPath {rect} at (134.90,34.90) size 50.20x50.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={5.00}]}] [fill={[type=SOLID] [color=#96FF96]}] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
       RenderPath {rect} at (109.90,9.90) size 50.20x50.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={3.00}]}] [fill={[type=SOLID] [color=#C8C8C8] [opacity=0.40]}] [data="M0.00,0.00 L50.00,0.00 L50.00,50.00 L0.00,50.00 Z"]
       RenderPath {rect} at (122.25,22.25) size 25.50x38 [stroke={[type=SOLID] [color=#000000] [stroke width=0.50]}] [fill={[type=SOLID] [color=#000096] [opacity=0.40]}] [data="M12.50,12.50 L37.50,12.50 L37.50,50.00 L12.50,50.00 Z"]
       RenderPath {rect} at (159.75,59.75) size 38x38 [stroke={[type=SOLID] [color=#000000] [stroke width=0.50]}] [fill={[type=SOLID] [color=#960000] [opacity=0.40]}] [data="M50.00,50.00 L87.50,50.00 L87.50,87.50 L50.00,87.50 Z"]
-      RenderPath {rect} at (135,135) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_02] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
-    RenderSVGContainer {g} at (209.75,9.75) size 75.35x175.25 [transform={m=((1.00,0.00)(0.00,1.00)) t=(210.00,10.00)}]
+      RenderPath {rect} at (110,110) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_02] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
+    RenderSVGContainer {g} at (209.75,9.75) size 75.35x150.25 [transform={m=((1.00,0.00)(0.00,1.00)) t=(210.00,10.00)}]
       RenderPath {rect} at (234.90,34.90) size 50.20x50.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={5.00}]}] [fill={[type=SOLID] [color=#96FF96]}] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
       RenderPath {rect} at (209.90,9.90) size 50.20x50.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={3.00}]}] [fill={[type=SOLID] [color=#C8C8C8] [opacity=0.40]}] [data="M0.00,0.00 L50.00,0.00 L50.00,50.00 L0.00,50.00 Z"]
       RenderPath {rect} at (209.75,9.75) size 50.50x50.50 [stroke={[type=SOLID] [color=#000000] [stroke width=0.50]}] [fill={[type=SOLID] [color=#000096] [opacity=0.40]}] [data="M0.00,0.00 L50.00,0.00 L50.00,50.00 L0.00,50.00 Z"]
       RenderPath {rect} at (209.75,9.75) size 50.50x50.50 [stroke={[type=SOLID] [color=#000000] [stroke width=0.50]}] [fill={[type=SOLID] [color=#960000] [opacity=0.40]}] [data="M0.00,0.00 L50.00,0.00 L50.00,50.00 L0.00,50.00 Z"]
-      RenderPath {rect} at (235,135) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_03] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
-    RenderSVGContainer {g} at (309.75,9.90) size 88x175.10 [transform={m=((1.00,0.00)(0.00,1.00)) t=(310.00,10.00)}]
+      RenderPath {rect} at (210,110) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_03] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
+    RenderSVGContainer {g} at (309.75,9.90) size 88x150.10 [transform={m=((1.00,0.00)(0.00,1.00)) t=(310.00,10.00)}]
       RenderPath {rect} at (334.90,34.90) size 50.20x50.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={5.00}]}] [fill={[type=SOLID] [color=#96FF96]}] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
       RenderPath {rect} at (309.90,9.90) size 50.20x50.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={3.00}]}] [fill={[type=SOLID] [color=#C8C8C8] [opacity=0.40]}] [data="M0.00,0.00 L50.00,0.00 L50.00,50.00 L0.00,50.00 Z"]
       RenderPath {rect} at (309.75,34.75) size 50.50x25.50 [stroke={[type=SOLID] [color=#000000] [stroke width=0.50]}] [fill={[type=SOLID] [color=#000096] [opacity=0.40]}] [data="M0.00,25.00 L50.00,25.00 L50.00,50.00 L0.00,50.00 Z"]
       RenderPath {rect} at (347.25,34.75) size 50.50x25.50 [stroke={[type=SOLID] [color=#000000] [stroke width=0.50]}] [fill={[type=SOLID] [color=#960000] [opacity=0.40]}] [data="M37.50,25.00 L87.50,25.00 L87.50,50.00 L37.50,50.00 Z"]
-      RenderPath {rect} at (335,135) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_04] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
-    RenderSVGContainer {g} at (409.90,9.90) size 75.35x175.10 [transform={m=((1.00,0.00)(0.00,1.00)) t=(410.00,10.00)}]
+      RenderPath {rect} at (310,110) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_04] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
+    RenderSVGContainer {g} at (409.90,9.90) size 75.35x150.10 [transform={m=((1.00,0.00)(0.00,1.00)) t=(410.00,10.00)}]
       RenderPath {rect} at (434.90,34.90) size 50.20x50.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={5.00}]}] [fill={[type=SOLID] [color=#96FF96]}] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
       RenderPath {rect} at (409.90,9.90) size 50.20x50.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={3.00}]}] [fill={[type=SOLID] [color=#C8C8C8] [opacity=0.40]}] [data="M0.00,0.00 L50.00,0.00 L50.00,50.00 L0.00,50.00 Z"]
       RenderPath {rect} at (434.75,34.75) size 50.50x50.50 [stroke={[type=SOLID] [color=#000000] [stroke width=0.50]}] [fill={[type=SOLID] [color=#000096] [opacity=0.40]}] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
       RenderPath {rect} at (434.75,34.75) size 50.50x50.50 [stroke={[type=SOLID] [color=#000000] [stroke width=0.50]}] [fill={[type=SOLID] [color=#960000] [opacity=0.40]}] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
-      RenderPath {rect} at (435,135) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_05] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
-    RenderSVGContainer {g} at (509.75,9.75) size 75.50x175.25 [transform={m=((1.00,0.00)(0.00,1.00)) t=(510.00,10.00)}]
+      RenderPath {rect} at (410,110) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_05] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
+    RenderSVGContainer {g} at (509.75,9.75) size 75.50x150.25 [transform={m=((1.00,0.00)(0.00,1.00)) t=(510.00,10.00)}]
       RenderPath {rect} at (534.90,34.90) size 50.20x50.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={5.00}]}] [fill={[type=SOLID] [color=#96FF96]}] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
       RenderPath {rect} at (509.90,9.90) size 50.20x50.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={3.00}]}] [fill={[type=SOLID] [color=#C8C8C8] [opacity=0.40]}] [data="M0.00,0.00 L50.00,0.00 L50.00,50.00 L0.00,50.00 Z"]
       RenderPath {rect} at (509.75,9.75) size 25.50x25.50 [stroke={[type=SOLID] [color=#000000] [stroke width=0.50]}] [fill={[type=SOLID] [color=#000096] [opacity=0.40]}] [data="M0.00,0.00 L25.00,0.00 L25.00,25.00 L0.00,25.00 Z"]
       RenderPath {rect} at (534.75,34.75) size 50.50x50.50 [stroke={[type=SOLID] [color=#000000] [stroke width=0.50]}] [fill={[type=SOLID] [color=#960000] [opacity=0.40]}] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
-      RenderPath {rect} at (535,135) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_06] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
-    RenderSVGContainer {g} at (609.90,9.90) size 75.20x175.10 [transform={m=((1.00,0.00)(0.00,1.00)) t=(610.00,10.00)}]
+      RenderPath {rect} at (510,110) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_06] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
+    RenderSVGContainer {g} at (609.90,9.90) size 75.20x150.10 [transform={m=((1.00,0.00)(0.00,1.00)) t=(610.00,10.00)}]
       RenderPath {rect} at (634.90,34.90) size 50.20x50.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={5.00}]}] [fill={[type=SOLID] [color=#96FF96]}] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
       RenderPath {rect} at (609.90,9.90) size 50.20x50.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={3.00}]}] [fill={[type=SOLID] [color=#C8C8C8] [opacity=0.40]}] [data="M0.00,0.00 L50.00,0.00 L50.00,50.00 L0.00,50.00 Z"]
       RenderPath {rect} at (622.25,22.25) size 25.50x25.50 [stroke={[type=SOLID] [color=#000000] [stroke width=0.50]}] [fill={[type=SOLID] [color=#000096] [opacity=0.40]}] [data="M12.50,12.50 L37.50,12.50 L37.50,37.50 L12.50,37.50 Z"]
       RenderPath {rect} at (634.75,34.75) size 38x25.50 [stroke={[type=SOLID] [color=#000000] [stroke width=0.50]}] [fill={[type=SOLID] [color=#960000] [opacity=0.40]}] [data="M25.00,25.00 L62.50,25.00 L62.50,50.00 L25.00,50.00 Z"]
-      RenderPath {rect} at (635,135) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_07] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
-    RenderSVGContainer {g} at (22.25,222.25) size 67.85x162.75 [transform={m=((1.00,0.00)(0.00,1.00)) t=(10.00,210.00)}]
+      RenderPath {rect} at (610,110) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_07] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
+    RenderSVGContainer {g} at (22.25,222.25) size 67.85x167.75 [transform={m=((1.00,0.00)(0.00,1.00)) t=(10.00,210.00)}]
       RenderPath {rect} at (34.90,234.90) size 50.20x50.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={5.00}]}] [fill={[type=SOLID] [color=#96FF96]}] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
       RenderPath {rect} at (29.90,229.90) size 60.20x60.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={3.00}]}] [fill={[type=SOLID] [color=#C8C8C8] [opacity=0.40]}] [data="M20.00,20.00 L80.00,20.00 L80.00,80.00 L20.00,80.00 Z"]
       RenderPath {rect} at (34.75,234.75) size 50.50x50.50 [stroke={[type=SOLID] [color=#000000] [stroke width=0.50]}] [fill={[type=SOLID] [color=#000096] [opacity=0.40]}] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
       RenderPath {rect} at (22.25,222.25) size 25.50x25.50 [stroke={[type=SOLID] [color=#000000] [stroke width=0.50]}] [fill={[type=SOLID] [color=#960000] [opacity=0.40]}] [data="M12.50,12.50 L37.50,12.50 L37.50,37.50 L12.50,37.50 Z"]
-      RenderPath {rect} at (35,335) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_08] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
-    RenderSVGContainer {g} at (122.25,222.25) size 67.85x162.75 [transform={m=((1.00,0.00)(0.00,1.00)) t=(110.00,210.00)}]
+      RenderPath {rect} at (30,330) size 60x60 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_08] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
+    RenderSVGContainer {g} at (122.25,222.25) size 67.85x167.75 [transform={m=((1.00,0.00)(0.00,1.00)) t=(110.00,210.00)}]
       RenderPath {rect} at (134.90,234.90) size 50.20x50.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={5.00}]}] [fill={[type=SOLID] [color=#96FF96]}] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
       RenderPath {rect} at (129.90,229.90) size 60.20x60.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={3.00}]}] [fill={[type=SOLID] [color=#C8C8C8] [opacity=0.40]}] [data="M20.00,20.00 L80.00,20.00 L80.00,80.00 L20.00,80.00 Z"]
       RenderPath {rect} at (122.25,222.25) size 25.50x38 [stroke={[type=SOLID] [color=#000000] [stroke width=0.50]}] [fill={[type=SOLID] [color=#000096] [opacity=0.40]}] [data="M12.50,12.50 L37.50,12.50 L37.50,50.00 L12.50,50.00 Z"]
       RenderPath {rect} at (147.25,247.25) size 25.50x25.50 [stroke={[type=SOLID] [color=#000000] [stroke width=0.50]}] [fill={[type=SOLID] [color=#960000] [opacity=0.40]}] [data="M37.50,37.50 L62.50,37.50 L62.50,62.50 L37.50,62.50 Z"]
-      RenderPath {rect} at (135,335) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_09] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
-    RenderSVGContainer {g} at (229.75,229.75) size 65.50x155.25 [transform={m=((1.00,0.00)(0.00,1.00)) t=(210.00,210.00)}]
+      RenderPath {rect} at (130,330) size 60x60 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_09] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
+    RenderSVGContainer {g} at (229.75,229.75) size 65.50x160.25 [transform={m=((1.00,0.00)(0.00,1.00)) t=(210.00,210.00)}]
       RenderPath {rect} at (234.90,234.90) size 50.20x50.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={5.00}]}] [fill={[type=SOLID] [color=#96FF96]}] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
       RenderPath {rect} at (229.90,229.90) size 60.20x60.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={3.00}]}] [fill={[type=SOLID] [color=#C8C8C8] [opacity=0.40]}] [data="M20.00,20.00 L80.00,20.00 L80.00,80.00 L20.00,80.00 Z"]
       RenderPath {rect} at (234.75,234.75) size 60.50x25.50 [stroke={[type=SOLID] [color=#000000] [stroke width=0.50]}] [fill={[type=SOLID] [color=#000096] [opacity=0.40]}] [data="M25.00,25.00 L85.00,25.00 L85.00,50.00 L25.00,50.00 Z"]
       RenderPath {rect} at (229.75,229.75) size 60.50x60.50 [stroke={[type=SOLID] [color=#000000] [stroke width=0.50]}] [fill={[type=SOLID] [color=#960000] [opacity=0.40]}] [data="M20.00,20.00 L80.00,20.00 L80.00,80.00 L20.00,80.00 Z"]
-      RenderPath {rect} at (235,335) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_10] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
-    RenderSVGContainer {g} at (329.75,229.75) size 60.50x155.25 [transform={m=((1.00,0.00)(0.00,1.00)) t=(310.00,210.00)}]
+      RenderPath {rect} at (230,330) size 60x60 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_10] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
+    RenderSVGContainer {g} at (329.75,229.75) size 60.50x160.25 [transform={m=((1.00,0.00)(0.00,1.00)) t=(310.00,210.00)}]
       RenderPath {rect} at (334.90,234.90) size 50.20x50.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={5.00}]}] [fill={[type=SOLID] [color=#96FF96]}] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
       RenderPath {rect} at (329.90,229.90) size 60.20x60.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={3.00}]}] [fill={[type=SOLID] [color=#C8C8C8] [opacity=0.40]}] [data="M20.00,20.00 L80.00,20.00 L80.00,80.00 L20.00,80.00 Z"]
       RenderPath {rect} at (329.75,229.75) size 60.50x60.50 [stroke={[type=SOLID] [color=#000000] [stroke width=0.50]}] [fill={[type=SOLID] [color=#000096] [opacity=0.40]}] [data="M20.00,20.00 L80.00,20.00 L80.00,80.00 L20.00,80.00 Z"]
       RenderPath {rect} at (329.75,229.75) size 60.50x60.50 [stroke={[type=SOLID] [color=#000000] [stroke width=0.50]}] [fill={[type=SOLID] [color=#960000] [opacity=0.40]}] [data="M20.00,20.00 L80.00,20.00 L80.00,80.00 L20.00,80.00 Z"]
-      RenderPath {rect} at (335,335) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_11] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
-    RenderSVGContainer {g} at (422.25,222.25) size 67.85x162.75 [transform={m=((1.00,0.00)(0.00,1.00)) t=(410.00,210.00)}]
+      RenderPath {rect} at (330,330) size 60x60 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_11] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
+    RenderSVGContainer {g} at (422.25,222.25) size 67.85x167.75 [transform={m=((1.00,0.00)(0.00,1.00)) t=(410.00,210.00)}]
       RenderPath {rect} at (434.90,234.90) size 50.20x50.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={5.00}]}] [fill={[type=SOLID] [color=#96FF96]}] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
       RenderPath {rect} at (429.90,229.90) size 60.20x60.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={3.00}]}] [fill={[type=SOLID] [color=#C8C8C8] [opacity=0.40]}] [data="M20.00,20.00 L80.00,20.00 L80.00,80.00 L20.00,80.00 Z"]
       RenderPath {rect} at (422.25,222.25) size 60.50x60.50 [stroke={[type=SOLID] [color=#000000] [stroke width=0.50]}] [fill={[type=SOLID] [color=#000096] [opacity=0.40]}] [data="M12.50,12.50 L72.50,12.50 L72.50,72.50 L12.50,72.50 Z"]
       RenderPath {rect} at (447.25,247.25) size 25.50x25.50 [stroke={[type=SOLID] [color=#000000] [stroke width=0.50]}] [fill={[type=SOLID] [color=#960000] [opacity=0.40]}] [data="M37.50,37.50 L62.50,37.50 L62.50,62.50 L37.50,62.50 Z"]
-      RenderPath {rect} at (435,335) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_12] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
-    RenderSVGContainer {g} at (522.25,222.25) size 75.50x162.75 [transform={m=((1.00,0.00)(0.00,1.00)) t=(510.00,210.00)}]
+      RenderPath {rect} at (430,330) size 60x60 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_12] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
+    RenderSVGContainer {g} at (522.25,222.25) size 75.50x167.75 [transform={m=((1.00,0.00)(0.00,1.00)) t=(510.00,210.00)}]
       RenderPath {rect} at (534.90,234.90) size 50.20x50.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={5.00}]}] [fill={[type=SOLID] [color=#96FF96]}] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
       RenderPath {rect} at (529.90,229.90) size 60.20x60.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={3.00}]}] [fill={[type=SOLID] [color=#C8C8C8] [opacity=0.40]}] [data="M20.00,20.00 L80.00,20.00 L80.00,80.00 L20.00,80.00 Z"]
       RenderPath {rect} at (522.25,222.25) size 50.50x50.50 [stroke={[type=SOLID] [color=#000000] [stroke width=0.50]}] [fill={[type=SOLID] [color=#000096] [opacity=0.40]}] [data="M12.50,12.50 L62.50,12.50 L62.50,62.50 L12.50,62.50 Z"]
       RenderPath {rect} at (559.75,259.75) size 38x38 [stroke={[type=SOLID] [color=#000000] [stroke width=0.50]}] [fill={[type=SOLID] [color=#960000] [opacity=0.40]}] [data="M50.00,50.00 L87.50,50.00 L87.50,87.50 L50.00,87.50 Z"]
-      RenderPath {rect} at (535,335) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_13] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
-    RenderSVGContainer {g} at (609.75,209.75) size 100.50x175.25 [transform={m=((1.00,0.00)(0.00,1.00)) t=(610.00,210.00)}]
+      RenderPath {rect} at (530,330) size 60x60 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_13] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
+    RenderSVGContainer {g} at (609.75,209.75) size 100.50x180.25 [transform={m=((1.00,0.00)(0.00,1.00)) t=(610.00,210.00)}]
       RenderPath {rect} at (634.90,234.90) size 50.20x50.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={5.00}]}] [fill={[type=SOLID] [color=#96FF96]}] [data="M25.00,25.00 L75.00,25.00 L75.00,75.00 L25.00,75.00 Z"]
       RenderPath {rect} at (629.90,229.90) size 60.20x60.20 [stroke={[type=SOLID] [color=#000000] [stroke width=0.20] [dash array={3.00}]}] [fill={[type=SOLID] [color=#C8C8C8] [opacity=0.40]}] [data="M20.00,20.00 L80.00,20.00 L80.00,80.00 L20.00,80.00 Z"]
       RenderPath {rect} at (622.25,222.25) size 75.50x75.50 [stroke={[type=SOLID] [color=#000000] [stroke width=0.50]}] [fill={[type=SOLID] [color=#000096] [opacity=0.40]}] [data="M12.50,12.50 L87.50,12.50 L87.50,87.50 L12.50,87.50 Z"]
       RenderPath {rect} at (609.75,209.75) size 100.50x100.50 [stroke={[type=SOLID] [color=#000000] [stroke width=0.50]}] [fill={[type=SOLID] [color=#960000] [opacity=0.40]}] [data="M0.00,0.00 L100.00,0.00 L100.00,100.00 L0.00,100.00 Z"]
-      RenderPath {rect} at (635,335) size 50x50 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_14] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
+      RenderPath {rect} at (630,330) size 60x60 [fill={[type=SOLID] [color=#00FF00]}] [filter=filter_1effect_14] [data="M25.00,125.00 L75.00,125.00 L75.00,175.00 L25.00,175.00 Z"]
diff --git a/LayoutTests/svg/custom/use-clipped-transform-expected.txt b/LayoutTests/svg/custom/use-clipped-transform-expected.txt
index d5b687b..9205359 100644
--- a/LayoutTests/svg/custom/use-clipped-transform-expected.txt
+++ b/LayoutTests/svg/custom/use-clipped-transform-expected.txt
@@ -2,7 +2,7 @@ KCanvasResource {id="clip" [type=CLIPPER] [clip data=[[winding=NON-ZERO] [path=M
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 800x600
-  RenderSVGRoot {svg} at (0,0) size 400x200
+  RenderSVGRoot {svg} at (0,0) size 200x200
     RenderPath {rect} at (0,0) size 200x200 [fill={[type=SOLID] [color=#FF0000]}] [data="M0.00,0.00 L200.00,0.00 L200.00,200.00 L0.00,200.00 Z"]
     RenderPath {rect} at (0,0) size 200x200 [transform={m=((1.00,0.00)(0.00,1.00)) t=(-200.00,0.00)}] [data="M200.00,0.00 L400.00,0.00 L400.00,200.00 L200.00,200.00 Z"]
-    RenderPath {rect} at (0,0) size 400x200 [fill={[type=SOLID] [color=#008000]}] [clip path="clip"] [data="M0.00,0.00 L400.00,0.00 L400.00,200.00 L0.00,200.00 Z"]
+    RenderPath {rect} at (0,0) size 200x200 [fill={[type=SOLID] [color=#008000]}] [clip path="clip"] [data="M0.00,0.00 L400.00,0.00 L400.00,200.00 L0.00,200.00 Z"]
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index d27e481..3612fd1 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,88 @@
+2009-12-29  Dirk Schulze  <krit at webkit.org>
+
+        Reviewed by Nikolas Zimmermann.
+
+        Detailed boundingBoxes in SVG Renderer
+        https://bugs.webkit.org/show_bug.cgi?id=32815
+
+        Add new bounding boxes for strokes, filters, masker and clipper in SVG.
+        These new bounding boxes help to fix repaintRectInLocalCoordinates.
+        We calculate the smallest repaint rect considering the new bounding boxes
+        now, filters get the correct paint area, masker clip the mask image size
+        to the visible area of the target.
+
+        Tests: Many tests need an update. The changes in repaintRectInLocalCoordinates
+               affect the LayoutTests.     
+
+        * rendering/RenderForeignObject.h:
+        (WebCore::RenderForeignObject::strokeBoundingBox):
+        * rendering/RenderObject.cpp:
+        (WebCore::RenderObject::toSVGRenderBase):
+        * rendering/RenderObject.h:
+        * rendering/RenderPath.cpp:
+        (WebCore::RenderPath::strokeBoundingBox):
+        (WebCore::RenderPath::repaintRectInLocalCoordinates):
+        (WebCore::RenderPath::setPath):
+        * rendering/RenderPath.h:
+        (WebCore::RenderPath::markerBoundingBox):
+        * rendering/RenderSVGBlock.h:
+        (WebCore::RenderSVGBlock::toSVGRenderBase):
+        * rendering/RenderSVGContainer.cpp:
+        (WebCore::RenderSVGContainer::strokeBoundingBox):
+        (WebCore::RenderSVGContainer::repaintRectInLocalCoordinates):
+        * rendering/RenderSVGContainer.h:
+        * rendering/RenderSVGImage.cpp:
+        (WebCore::RenderSVGImage::layout):
+        (WebCore::RenderSVGImage::repaintRectInLocalCoordinates):
+        * rendering/RenderSVGImage.h:
+        (WebCore::RenderSVGImage::toSVGRenderBase):
+        (WebCore::RenderSVGImage::strokeBoundingBox):
+        * rendering/RenderSVGInline.h:
+        (WebCore::RenderSVGInline::objectBoundingBox):
+        (WebCore::RenderSVGInline::repaintRectInLocalCoordinates):
+        * rendering/RenderSVGModelObject.h:
+        (WebCore::RenderSVGModelObject::toSVGRenderBase):
+        * rendering/RenderSVGRoot.h:
+        (WebCore::RenderSVGRoot::strokeBoundingBox):
+        * rendering/RenderSVGText.cpp:
+        (WebCore::RenderSVGText::strokeBoundingBox):
+        (WebCore::RenderSVGText::repaintRectInLocalCoordinates):
+        * rendering/RenderSVGText.h:
+        (WebCore::RenderSVGText::toSVGRenderBase):
+        * rendering/SVGRenderSupport.cpp:
+        (WebCore::SVGRenderBase::~SVGRenderBase):
+        (WebCore::SVGRenderBase::prepareToRenderSVGContent):
+        (WebCore::SVGRenderBase::filterBoundingBoxForRenderer):
+        (WebCore::SVGRenderBase::clipperBoundingBoxForRenderer):
+        (WebCore::SVGRenderBase::maskerBoundingBoxForRenderer):
+        * rendering/SVGRenderSupport.h:
+        (WebCore::SVGRenderBase::toSVGRenderBase):
+        (WebCore::SVGRenderBase::strokeBoundingBox):
+        (WebCore::SVGRenderBase::markerBoundingBox):
+        * rendering/SVGRootInlineBox.h:
+        (WebCore::SVGRootInlineBox::toSVGRenderBase):
+        (WebCore::SVGRootInlineBox::objectBoundingBox):
+        (WebCore::SVGRootInlineBox::repaintRectInLocalCoordinates):
+        * svg/SVGFilterElement.cpp:
+        (WebCore::SVGFilterElement::filterBoundingBox):
+        * svg/SVGFilterElement.h:
+        * svg/SVGMaskElement.cpp:
+        (WebCore::SVGMaskElement::maskBoundingBox):
+        (WebCore::SVGMaskElement::drawMaskerContent):
+        * svg/SVGMaskElement.h:
+        * svg/graphics/SVGResourceClipper.cpp:
+        (WebCore::SVGResourceClipper::clipperBoundingBox):
+        * svg/graphics/SVGResourceClipper.h:
+        * svg/graphics/SVGResourceFilter.cpp:
+        (WebCore::SVGResourceFilter::filterBoundingBox):
+        (WebCore::shouldProcessFilter):
+        (WebCore::SVGResourceFilter::prepareFilter):
+        * svg/graphics/SVGResourceFilter.h:
+        * svg/graphics/SVGResourceMasker.cpp:
+        (WebCore::SVGResourceMasker::maskerBoundingBox):
+        (WebCore::SVGResourceMasker::applyMask):
+        * svg/graphics/SVGResourceMasker.h:
+
 2009-12-29  Andrei Popescu  <andreip at google.com>
 
         Reviewed by Adam Barth.
diff --git a/WebCore/rendering/RenderForeignObject.h b/WebCore/rendering/RenderForeignObject.h
index e014f22..d64c015 100644
--- a/WebCore/rendering/RenderForeignObject.h
+++ b/WebCore/rendering/RenderForeignObject.h
@@ -45,6 +45,7 @@ public:
     virtual void layout();
 
     virtual FloatRect objectBoundingBox() const;
+    virtual FloatRect strokeBoundingBox() const { return borderBoxRect(); }
     virtual FloatRect repaintRectInLocalCoordinates() const;
 
     virtual bool nodeAtFloatPoint(const HitTestRequest&, HitTestResult&, const FloatPoint& pointInParent, HitTestAction);
diff --git a/WebCore/rendering/RenderObject.cpp b/WebCore/rendering/RenderObject.cpp
index d2161ac..52ae602 100644
--- a/WebCore/rendering/RenderObject.cpp
+++ b/WebCore/rendering/RenderObject.cpp
@@ -65,6 +65,10 @@
 #include "WMLNames.h"
 #endif
 
+#if ENABLE(SVG)
+#include "SVGRenderSupport.h"
+#endif
+
 using namespace std;
 
 namespace WebCore {
@@ -2471,6 +2475,11 @@ VisiblePosition RenderObject::createVisiblePosition(const Position& position)
 }
 
 #if ENABLE(SVG)
+const SVGRenderBase* RenderObject::toSVGRenderBase() const
+{
+    ASSERT_NOT_REACHED();
+    return 0;
+}
 
 FloatRect RenderObject::objectBoundingBox() const
 {
diff --git a/WebCore/rendering/RenderObject.h b/WebCore/rendering/RenderObject.h
index f899027..c099053 100644
--- a/WebCore/rendering/RenderObject.h
+++ b/WebCore/rendering/RenderObject.h
@@ -52,6 +52,9 @@ class RenderLayer;
 class RenderTheme;
 class TransformState;
 class VisiblePosition;
+#if ENABLE(SVG)
+class SVGRenderBase;
+#endif
 
 /*
  *  The painting of a layer occurs in three distinct phases.  Each phase involves
@@ -321,6 +324,8 @@ public:
     virtual bool isSVGImage() const { return false; }
     virtual bool isSVGForeignObject() const { return false; }
 
+    virtual const SVGRenderBase* toSVGRenderBase() const;
+
     // Per SVG 1.1 objectBoundingBox ignores clipping, masking, filter effects, opacity and stroke-width.
     // This is used for all computation of objectBoundingBox relative units and by SVGLocateable::getBBox().
     // NOTE: Markers are not specifically ignored here by SVG 1.1 spec, but we ignore them
diff --git a/WebCore/rendering/RenderPath.cpp b/WebCore/rendering/RenderPath.cpp
index 5eaf97b..a919d01 100644
--- a/WebCore/rendering/RenderPath.cpp
+++ b/WebCore/rendering/RenderPath.cpp
@@ -3,6 +3,7 @@
                   2004, 2005, 2008 Rob Buis <buis at kde.org>
                   2005, 2007 Eric Seidel <eric at webkit.org>
                   2009 Google, Inc.
+                  2009 Dirk Schulze <krit at webkit.org>
 
     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Library General Public
@@ -112,25 +113,51 @@ FloatRect RenderPath::objectBoundingBox() const
     return m_cachedLocalFillBBox;
 }
 
-FloatRect RenderPath::repaintRectInLocalCoordinates() const
+FloatRect RenderPath::strokeBoundingBox() const
 {
     if (m_path.isEmpty())
         return FloatRect();
 
-    // If we already have a cached repaint rect, return that
-    if (!m_cachedLocalRepaintRect.isEmpty())
-        return m_cachedLocalRepaintRect;
+    if (!m_cachedLocalStrokeBBox.isEmpty())
+        return m_cachedLocalStrokeBBox;
 
     if (!style()->svgStyle()->hasStroke())
-        m_cachedLocalRepaintRect = objectBoundingBox();
+        m_cachedLocalStrokeBBox = objectBoundingBox();
     else {
         BoundingRectStrokeStyleApplier strokeStyle(this, style());
-        m_cachedLocalRepaintRect = m_path.strokeBoundingRect(&strokeStyle);
+        m_cachedLocalStrokeBBox = m_path.strokeBoundingRect(&strokeStyle);
     }
 
+    return m_cachedLocalStrokeBBox;
+}
+
+FloatRect RenderPath::repaintRectInLocalCoordinates() const
+{
+    if (m_path.isEmpty())
+        return FloatRect();
+
+    // If we already have a cached repaint rect, return that
+    if (!m_cachedLocalRepaintRect.isEmpty())
+        return m_cachedLocalRepaintRect;
+
+    m_cachedLocalRepaintRect = strokeBoundingBox();
+
     // Markers and filters can paint outside of the stroke path
     m_cachedLocalRepaintRect.unite(m_markerBounds);
-    m_cachedLocalRepaintRect.unite(filterBoundingBoxForRenderer(this));
+
+    // FIXME: We need to be careful here. We assume that there is no filter,
+    // clipper or masker if the rects are empty.
+    FloatRect rect = filterBoundingBoxForRenderer(this);
+    if (!rect.isEmpty())
+        m_cachedLocalRepaintRect = rect;
+
+    rect = clipperBoundingBoxForRenderer(this);
+    if (!rect.isEmpty())
+        m_cachedLocalRepaintRect.intersect(rect);
+
+    rect = maskerBoundingBoxForRenderer(this);
+    if (!rect.isEmpty())
+        m_cachedLocalRepaintRect.intersect(rect);
 
     return m_cachedLocalRepaintRect;
 }
@@ -139,6 +166,7 @@ void RenderPath::setPath(const Path& newPath)
 {
     m_path = newPath;
     m_cachedLocalRepaintRect = FloatRect();
+    m_cachedLocalStrokeBBox = FloatRect();
     m_cachedLocalFillBBox = FloatRect();
 }
 
diff --git a/WebCore/rendering/RenderPath.h b/WebCore/rendering/RenderPath.h
index b17cc30..44ead17 100644
--- a/WebCore/rendering/RenderPath.h
+++ b/WebCore/rendering/RenderPath.h
@@ -48,6 +48,8 @@ private:
     bool strokeContains(const FloatPoint&, bool requiresStroke = true) const;
 
     virtual FloatRect objectBoundingBox() const;
+    virtual FloatRect strokeBoundingBox() const;
+    virtual FloatRect markerBoundingBox() const { return m_markerBounds; }
     virtual FloatRect repaintRectInLocalCoordinates() const;
 
     virtual TransformationMatrix localToParentTransform() const;
@@ -70,6 +72,7 @@ private:
 
     mutable Path m_path;
     mutable FloatRect m_cachedLocalFillBBox;
+    mutable FloatRect m_cachedLocalStrokeBBox;
     mutable FloatRect m_cachedLocalRepaintRect;
     FloatRect m_markerBounds;
     TransformationMatrix m_localTransform;
diff --git a/WebCore/rendering/RenderSVGBlock.h b/WebCore/rendering/RenderSVGBlock.h
index a4ececb..0b0d107 100644
--- a/WebCore/rendering/RenderSVGBlock.h
+++ b/WebCore/rendering/RenderSVGBlock.h
@@ -35,6 +35,8 @@ class RenderSVGBlock : public RenderBlock, protected SVGRenderBase {
 public:
     RenderSVGBlock(SVGElement*);
 
+    virtual const SVGRenderBase* toSVGRenderBase() const { return this; }
+
 private:
     virtual void setStyle(PassRefPtr<RenderStyle>);
 };
diff --git a/WebCore/rendering/RenderSVGContainer.cpp b/WebCore/rendering/RenderSVGContainer.cpp
index 3984ddd..8e82f53 100644
--- a/WebCore/rendering/RenderSVGContainer.cpp
+++ b/WebCore/rendering/RenderSVGContainer.cpp
@@ -3,6 +3,7 @@
                   2004, 2005, 2007, 2008 Rob Buis <buis at kde.org>
                   2007 Eric Seidel <eric at webkit.org>
     Copyright (C) 2009 Google, Inc.  All rights reserved.
+                  2009 Dirk Schulze <krit at webkit.org>
 
     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Library General Public
@@ -148,14 +149,28 @@ FloatRect RenderSVGContainer::objectBoundingBox() const
     return computeContainerBoundingBox(this, false);
 }
 
+FloatRect RenderSVGContainer::strokeBoundingBox() const
+{
+    return computeContainerBoundingBox(this, true);
+}
+
 // RenderSVGContainer is used for <g> elements which do not themselves have a
 // width or height, so we union all of our child rects as our repaint rect.
 FloatRect RenderSVGContainer::repaintRectInLocalCoordinates() const
 {
     FloatRect repaintRect = computeContainerBoundingBox(this, true);
 
-    // A filter on this container can paint outside of the union of the child repaint rects
-    repaintRect.unite(filterBoundingBoxForRenderer(this));
+    FloatRect rect = filterBoundingBoxForRenderer(this);
+    if (!rect.isEmpty())
+        repaintRect = rect;
+
+    rect = clipperBoundingBoxForRenderer(this);
+    if (!rect.isEmpty())
+        repaintRect.intersect(rect);
+
+    rect = maskerBoundingBoxForRenderer(this);
+    if (!rect.isEmpty())
+        repaintRect.intersect(rect);
 
     return repaintRect;
 }
diff --git a/WebCore/rendering/RenderSVGContainer.h b/WebCore/rendering/RenderSVGContainer.h
index 33e4659..318c1cc 100644
--- a/WebCore/rendering/RenderSVGContainer.h
+++ b/WebCore/rendering/RenderSVGContainer.h
@@ -57,6 +57,7 @@ private:
     virtual void addFocusRingRects(Vector<IntRect>&, int tx, int ty);
 
     virtual FloatRect objectBoundingBox() const;
+    virtual FloatRect strokeBoundingBox() const;
     virtual FloatRect repaintRectInLocalCoordinates() const;
 
     virtual bool nodeAtFloatPoint(const HitTestRequest&, HitTestResult&, const FloatPoint& pointInParent, HitTestAction);
diff --git a/WebCore/rendering/RenderSVGImage.cpp b/WebCore/rendering/RenderSVGImage.cpp
index 9d0d921..246b1bb 100644
--- a/WebCore/rendering/RenderSVGImage.cpp
+++ b/WebCore/rendering/RenderSVGImage.cpp
@@ -4,6 +4,7 @@
     Copyright (C) 2007 Nikolas Zimmermann <zimmermann at kde.org>
     Copyright (C) 2007, 2008, 2009 Rob Buis <buis at kde.org>
     Copyright (C) 2009, Google, Inc.
+    Copyright (C) 2009 Dirk Schulze <krit at webkit.org>
 
     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Library General Public
@@ -138,6 +139,7 @@ void RenderSVGImage::layout()
     calcHeight();
 
     m_localBounds = FloatRect(image->x().value(image), image->y().value(image), image->width().value(image), image->height().value(image));
+    m_cachedLocalRepaintRect = FloatRect();
 
     repainter.repaintAfterLayout();
     
@@ -212,12 +214,27 @@ FloatRect RenderSVGImage::objectBoundingBox() const
 
 FloatRect RenderSVGImage::repaintRectInLocalCoordinates() const
 {
-    FloatRect repaintRect = m_localBounds;
+    // If we already have a cached repaint rect, return that
+    if (!m_cachedLocalRepaintRect.isEmpty())
+        return m_cachedLocalRepaintRect;
 
-    // Filters can paint outside the image content
-    repaintRect.unite(filterBoundingBoxForRenderer(this));
+    m_cachedLocalRepaintRect = m_localBounds;
 
-    return repaintRect;
+    // FIXME: We need to be careful here. We assume that there is no filter,
+    // clipper or masker if the rects are empty.
+    FloatRect rect = filterBoundingBoxForRenderer(this);
+    if (!rect.isEmpty())
+        m_cachedLocalRepaintRect = rect;
+
+    rect = clipperBoundingBoxForRenderer(this);
+    if (!rect.isEmpty())
+        m_cachedLocalRepaintRect.intersect(rect);
+
+    rect = maskerBoundingBoxForRenderer(this);
+    if (!rect.isEmpty())
+        m_cachedLocalRepaintRect.intersect(rect);
+
+    return m_cachedLocalRepaintRect;
 }
 
 void RenderSVGImage::imageChanged(WrappedImagePtr image, const IntRect* rect)
diff --git a/WebCore/rendering/RenderSVGImage.h b/WebCore/rendering/RenderSVGImage.h
index 398c008..044d63b 100644
--- a/WebCore/rendering/RenderSVGImage.h
+++ b/WebCore/rendering/RenderSVGImage.h
@@ -39,12 +39,14 @@ namespace WebCore {
         RenderSVGImage(SVGImageElement*);
 
     private:
+        virtual const SVGRenderBase* toSVGRenderBase() const { return this; }
         virtual const char* renderName() const { return "RenderSVGImage"; }
         virtual bool isSVGImage() const { return true; }
 
         virtual TransformationMatrix localToParentTransform() const { return m_localTransform; }
 
         virtual FloatRect objectBoundingBox() const;
+        virtual FloatRect strokeBoundingBox() const { return m_localBounds; }
         virtual FloatRect repaintRectInLocalCoordinates() const;
 
         virtual IntRect clippedOverflowRectForRepaint(RenderBoxModelObject* repaintContainer);
@@ -71,6 +73,7 @@ namespace WebCore {
 
         TransformationMatrix m_localTransform;
         FloatRect m_localBounds;
+        mutable FloatRect m_cachedLocalRepaintRect;
     };
 
 } // namespace WebCore
diff --git a/WebCore/rendering/RenderSVGInline.h b/WebCore/rendering/RenderSVGInline.h
index 9f9f3f5..53fd4b7 100644
--- a/WebCore/rendering/RenderSVGInline.h
+++ b/WebCore/rendering/RenderSVGInline.h
@@ -27,6 +27,8 @@
 #if ENABLE(SVG)
 #include "RenderInline.h"
 
+#include "SVGRenderSupport.h"
+
 namespace WebCore {
 
 class RenderSVGInline : public RenderInline {
@@ -38,6 +40,9 @@ public:
     // These are shared between RenderSVGTSpan and RenderSVGTextPath
     virtual void absoluteRects(Vector<IntRect>& rects, int tx, int ty);
     virtual void absoluteQuads(Vector<FloatQuad>&);
+
+    virtual FloatRect objectBoundingBox() const { return FloatRect(); }
+    virtual FloatRect repaintRectInLocalCoordinates() const { return FloatRect(); }
     
 private:
     virtual InlineFlowBox* createInlineFlowBox();
diff --git a/WebCore/rendering/RenderSVGModelObject.h b/WebCore/rendering/RenderSVGModelObject.h
index 0aa13ad..4c50734 100644
--- a/WebCore/rendering/RenderSVGModelObject.h
+++ b/WebCore/rendering/RenderSVGModelObject.h
@@ -49,6 +49,8 @@ class RenderSVGModelObject : public RenderObject, protected SVGRenderBase {
 public:
     RenderSVGModelObject(SVGStyledElement*);
 
+    virtual const SVGRenderBase* toSVGRenderBase() const { return this; }
+
     virtual bool requiresLayer() const { return false; }
 
     virtual IntRect clippedOverflowRectForRepaint(RenderBoxModelObject* repaintContainer);
diff --git a/WebCore/rendering/RenderSVGRoot.h b/WebCore/rendering/RenderSVGRoot.h
index 08c3058..3937b41 100644
--- a/WebCore/rendering/RenderSVGRoot.h
+++ b/WebCore/rendering/RenderSVGRoot.h
@@ -60,6 +60,7 @@ private:
     bool strokeContains(const FloatPoint&) const;
 
     virtual FloatRect objectBoundingBox() const;
+    virtual FloatRect strokeBoundingBox() const { return computeContainerBoundingBox(this, true); }
     virtual FloatRect repaintRectInLocalCoordinates() const;
 
     // FIXME: Both of these overrides should be removed.
diff --git a/WebCore/rendering/RenderSVGText.cpp b/WebCore/rendering/RenderSVGText.cpp
index 3919d7f..88ef87e 100644
--- a/WebCore/rendering/RenderSVGText.cpp
+++ b/WebCore/rendering/RenderSVGText.cpp
@@ -6,6 +6,7 @@
  *               2006 Oliver Hunt <ojh16 at student.canterbury.ac.nz>
  *               2007 Nikolas Zimmermann <zimmermann at kde.org>
  *               2008 Rob Buis <buis at kde.org>
+ *               2009 Dirk Schulze <krit at webkit.org>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
@@ -184,7 +185,7 @@ FloatRect RenderSVGText::objectBoundingBox() const
     return boundingBox;
 }
 
-FloatRect RenderSVGText::repaintRectInLocalCoordinates() const
+FloatRect RenderSVGText::strokeBoundingBox() const
 {
     FloatRect repaintRect = objectBoundingBox();
 
@@ -205,7 +206,26 @@ FloatRect RenderSVGText::repaintRectInLocalCoordinates() const
         repaintRect.inflate(strokeWidth);
     }
 
-    repaintRect.unite(filterBoundingBoxForRenderer(this));
+    return repaintRect;
+}
+
+FloatRect RenderSVGText::repaintRectInLocalCoordinates() const
+{
+    FloatRect repaintRect = strokeBoundingBox();
+
+    // FIXME: We need to be careful here. We assume that there is no filter,
+    // clipper or masker if the rects are empty.
+    FloatRect rect = filterBoundingBoxForRenderer(this);
+    if (!rect.isEmpty())
+        repaintRect = rect;
+
+    rect = clipperBoundingBoxForRenderer(this);
+    if (!rect.isEmpty())
+        repaintRect.intersect(rect);
+
+    rect = maskerBoundingBoxForRenderer(this);
+    if (!rect.isEmpty())
+        repaintRect.intersect(rect);
 
     return repaintRect;
 }
diff --git a/WebCore/rendering/RenderSVGText.h b/WebCore/rendering/RenderSVGText.h
index 9a2770b..3a36fde 100644
--- a/WebCore/rendering/RenderSVGText.h
+++ b/WebCore/rendering/RenderSVGText.h
@@ -40,6 +40,8 @@ public:
 private:
     virtual const char* renderName() const { return "RenderSVGText"; }
 
+    virtual const SVGRenderBase* toSVGRenderBase() const { return this; }
+
     virtual bool isSVGText() const { return true; }
 
     virtual TransformationMatrix localToParentTransform() const { return m_localTransform; }
@@ -60,6 +62,7 @@ private:
     virtual void mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool useTransforms, bool fixed, TransformState&) const;
 
     virtual FloatRect objectBoundingBox() const;
+    virtual FloatRect strokeBoundingBox() const;
     virtual FloatRect repaintRectInLocalCoordinates() const;
 
     // FIXME: This can be removed when localTransform() is removed from RenderObject
diff --git a/WebCore/rendering/SVGRenderSupport.cpp b/WebCore/rendering/SVGRenderSupport.cpp
index 1ff70b2..efc224c 100644
--- a/WebCore/rendering/SVGRenderSupport.cpp
+++ b/WebCore/rendering/SVGRenderSupport.cpp
@@ -2,7 +2,8 @@
  * Copyright (C) 2007, 2008 Rob Buis <buis at kde.org>
  *           (C) 2007 Nikolas Zimmermann <zimmermann at kde.org>
  *           (C) 2007 Eric Seidel <eric at webkit.org>
- * Copyright (C) 2009 Google, Inc.  All rights reserved.
+ *           (C) 2009 Google, Inc.  All rights reserved.
+ *           (C) 2009 Dirk Schulze <krit at webkit.org>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
@@ -41,6 +42,10 @@
 
 namespace WebCore {
 
+SVGRenderBase::~SVGRenderBase()
+{
+}
+
 IntRect SVGRenderBase::clippedOverflowRectForRepaint(RenderObject* object, RenderBoxModelObject* repaintContainer)
 {
     // Return early for any cases where we don't actually paint
@@ -69,7 +74,7 @@ void SVGRenderBase::mapLocalToContainer(const RenderObject* object, RenderBoxMod
     object->parent()->mapLocalToContainer(repaintContainer, fixed, useTransforms, transformState);
 }
 
-bool SVGRenderBase::prepareToRenderSVGContent(RenderObject* object, RenderObject::PaintInfo& paintInfo, const FloatRect& boundingBox, SVGResourceFilter*& filter, SVGResourceFilter* rootFilter)
+bool SVGRenderBase::prepareToRenderSVGContent(RenderObject* object, RenderObject::PaintInfo& paintInfo, const FloatRect& repaintRect, SVGResourceFilter*& filter, SVGResourceFilter* rootFilter)
 {
 #if !ENABLE(FILTERS)
     UNUSED_PARAM(filter);
@@ -90,7 +95,7 @@ bool SVGRenderBase::prepareToRenderSVGContent(RenderObject* object, RenderObject
     // Setup transparency layers before setting up filters!
     float opacity = style->opacity(); 
     if (opacity < 1.0f) {
-        paintInfo.context->clip(enclosingIntRect(boundingBox));
+        paintInfo.context->clip(enclosingIntRect(repaintRect));
         paintInfo.context->beginTransparencyLayer(opacity);
     }
 
@@ -99,8 +104,8 @@ bool SVGRenderBase::prepareToRenderSVGContent(RenderObject* object, RenderObject
         int yShift = shadow->y < 0 ? shadow->y :0;
         int widthShift = shadow->x < 0 ? 0 : shadow->x;
         int heightShift = shadow->y < 0 ? 0 : shadow->y;
-        FloatRect shadowRect = FloatRect(boundingBox.x() + xShift, boundingBox.y() + yShift,
-            boundingBox.width() + widthShift, boundingBox.height() + heightShift);
+        FloatRect shadowRect = FloatRect(repaintRect.x() + xShift, repaintRect.y() + yShift,
+            repaintRect.width() + widthShift, repaintRect.height() + heightShift);
         paintInfo.context->clip(enclosingIntRect(shadowRect));
         paintInfo.context->setShadow(IntSize(shadow->x, shadow->y), shadow->blur, shadow->color, style->colorSpace());
         paintInfo.context->beginTransparencyLayer(1.0f);
@@ -131,14 +136,14 @@ bool SVGRenderBase::prepareToRenderSVGContent(RenderObject* object, RenderObject
 
     if (masker) {
         masker->addClient(styledElement);
-        if (!masker->applyMask(paintInfo.context, boundingBox))
+        if (!masker->applyMask(paintInfo.context, object))
             return false;
     } else if (!maskerId.isEmpty())
         svgElement->document()->accessSVGExtensions()->addPendingResource(maskerId, styledElement);
 
     if (clipper) {
         clipper->addClient(styledElement);
-        clipper->applyClip(paintInfo.context, boundingBox);
+        clipper->applyClip(paintInfo.context, object->objectBoundingBox());
     } else if (!clipperId.isEmpty())
         svgElement->document()->accessSVGExtensions()->addPendingResource(clipperId, styledElement);
 
@@ -236,18 +241,36 @@ FloatRect SVGRenderBase::computeContainerBoundingBox(const RenderObject* contain
     return boundingBox;
 }
 
-FloatRect SVGRenderBase::filterBoundingBoxForRenderer(const RenderObject* object)
+FloatRect SVGRenderBase::filterBoundingBoxForRenderer(const RenderObject* object) const
 {
 #if ENABLE(FILTERS)
     SVGResourceFilter* filter = getFilterById(object->document(), object->style()->svgStyle()->filter(), object);
     if (filter)
-        return filter->filterBoundingBox();
+        return filter->filterBoundingBox(object->objectBoundingBox());
 #else
     UNUSED_PARAM(object);
 #endif
     return FloatRect();
 }
 
+FloatRect SVGRenderBase::clipperBoundingBoxForRenderer(const RenderObject* object) const
+{
+    SVGResourceClipper* clipper = getClipperById(object->document(), object->style()->svgStyle()->clipPath(), object);
+    if (clipper)
+        return clipper->clipperBoundingBox(object->objectBoundingBox());
+
+    return FloatRect();
+}
+
+FloatRect SVGRenderBase::maskerBoundingBoxForRenderer(const RenderObject* object) const
+{
+    SVGResourceMasker* masker = getMaskerById(object->document(), object->style()->svgStyle()->maskElement(), object);
+    if (masker)
+        return masker->maskerBoundingBox(object->objectBoundingBox());
+
+    return FloatRect();
+}
+
 void applyTransformToPaintInfo(RenderObject::PaintInfo& paintInfo, const TransformationMatrix& localToAncestorTransform)
 {
     if (localToAncestorTransform.isIdentity())
diff --git a/WebCore/rendering/SVGRenderSupport.h b/WebCore/rendering/SVGRenderSupport.h
index 431f579..d1f3e8b 100644
--- a/WebCore/rendering/SVGRenderSupport.h
+++ b/WebCore/rendering/SVGRenderSupport.h
@@ -38,12 +38,23 @@ namespace WebCore {
     // all SVG renderers inherit from RenderSVGModelObject.
     class SVGRenderBase {
     public:
+        virtual ~SVGRenderBase();
+
+        virtual const SVGRenderBase* toSVGRenderBase() const { return this; }
+
         // FIXME: These are only public for SVGRootInlineBox.
         // It's unclear if these should be exposed or not.  SVGRootInlineBox may
         // pass the wrong RenderObject* and boundingBox to these functions.
         static bool prepareToRenderSVGContent(RenderObject*, RenderObject::PaintInfo&, const FloatRect& boundingBox, SVGResourceFilter*&, SVGResourceFilter* rootFilter = 0);
         static void finishRenderSVGContent(RenderObject*, RenderObject::PaintInfo&, SVGResourceFilter*&, GraphicsContext* savedContext);
 
+        virtual FloatRect strokeBoundingBox() const { return FloatRect(); }
+        virtual FloatRect markerBoundingBox() const { return FloatRect(); }
+
+        // returns the bounding box of filter, clipper, marker and masker (or the empty rect if no filter) in local coordinates
+        FloatRect filterBoundingBoxForRenderer(const RenderObject*) const;
+        FloatRect clipperBoundingBoxForRenderer(const RenderObject*) const;
+        FloatRect maskerBoundingBoxForRenderer(const RenderObject*) const;
     protected:
         static IntRect clippedOverflowRectForRepaint(RenderObject*, RenderBoxModelObject* repaintContainer);
         static void computeRectForRepaint(RenderObject*, RenderBoxModelObject* repaintContainer, IntRect&, bool fixed);
@@ -53,9 +64,6 @@ namespace WebCore {
         // Used to share the "walk all the children" logic between objectBoundingBox
         // and repaintRectInLocalCoordinates in RenderSVGRoot and RenderSVGContainer
         static FloatRect computeContainerBoundingBox(const RenderObject* container, bool includeAllPaintedContent);
-
-        // returns the filter bounding box (or the empty rect if no filter) in local coordinates
-        static FloatRect filterBoundingBoxForRenderer(const RenderObject*);
     };
 
     // FIXME: This should move to RenderObject or PaintInfo
diff --git a/WebCore/rendering/SVGRootInlineBox.h b/WebCore/rendering/SVGRootInlineBox.h
index 65bade0..d2dab98 100644
--- a/WebCore/rendering/SVGRootInlineBox.h
+++ b/WebCore/rendering/SVGRootInlineBox.h
@@ -28,6 +28,7 @@
 #if ENABLE(SVG)
 #include "RootInlineBox.h"
 #include "SVGCharacterLayoutInfo.h"
+#include "SVGRenderSupport.h"
 
 namespace WebCore {
 
@@ -43,13 +44,14 @@ struct LastGlyphInfo {
     bool isValid;
 };
 
-class SVGRootInlineBox : public RootInlineBox {
+class SVGRootInlineBox : public RootInlineBox, SVGRenderBase {
 public:
     SVGRootInlineBox(RenderObject* obj)
         : RootInlineBox(obj)
         , m_height(0)
     {
     }
+    virtual const SVGRenderBase* toSVGRenderBase() const { return this; }
 
     virtual bool isSVGRootInlineBox() { return true; }
 
@@ -63,6 +65,9 @@ public:
 
     virtual void computePerCharacterLayoutInformation();
 
+    virtual FloatRect objectBoundingBox() const { return FloatRect(); }
+    virtual FloatRect repaintRectInLocalCoordinates() const { return FloatRect(); }
+
     // Used by SVGInlineTextBox
     const Vector<SVGTextChunk>& svgTextChunks() const;
 
diff --git a/WebCore/svg/SVGFilterElement.cpp b/WebCore/svg/SVGFilterElement.cpp
index cb01ca8..3f6f8c7 100644
--- a/WebCore/svg/SVGFilterElement.cpp
+++ b/WebCore/svg/SVGFilterElement.cpp
@@ -109,6 +109,23 @@ void SVGFilterElement::parseMappedAttribute(MappedAttribute* attr)
     }
 }
 
+FloatRect SVGFilterElement::filterBoundingBox(const FloatRect& objectBoundingBox) const
+{
+    FloatRect filterBBox;
+    if (filterUnits() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX)
+        filterBBox = FloatRect(x().valueAsPercentage() * objectBoundingBox.width() + objectBoundingBox.x(),
+                               y().valueAsPercentage() * objectBoundingBox.height() + objectBoundingBox.y(),
+                               width().valueAsPercentage() * objectBoundingBox.width(),
+                               height().valueAsPercentage() * objectBoundingBox.height());
+    else
+        filterBBox = FloatRect(x().value(this),
+                               y().value(this),
+                               width().value(this),
+                               height().value(this));
+
+    return filterBBox;
+}
+
 void SVGFilterElement::buildFilter(const FloatRect& targetRect) const
 {
     bool filterBBoxMode = filterUnits() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX;
diff --git a/WebCore/svg/SVGFilterElement.h b/WebCore/svg/SVGFilterElement.h
index b25e213..0f2c711 100644
--- a/WebCore/svg/SVGFilterElement.h
+++ b/WebCore/svg/SVGFilterElement.h
@@ -35,6 +35,8 @@ namespace WebCore {
     extern char SVGFilterResXIdentifier[];
     extern char SVGFilterResYIdentifier[];
 
+    class SVGResourceFilter;
+
     class SVGFilterElement : public SVGStyledElement,
                              public SVGURIReference,
                              public SVGLangSpace,
@@ -72,6 +74,7 @@ namespace WebCore {
 
     private:
         friend class SVGResourceFilter;
+        FloatRect filterBoundingBox(const FloatRect&) const;
         void buildFilter(const FloatRect& targetRect) const;
     };
 
diff --git a/WebCore/svg/SVGMaskElement.cpp b/WebCore/svg/SVGMaskElement.cpp
index 8ad96ab..e7e3e4b 100644
--- a/WebCore/svg/SVGMaskElement.cpp
+++ b/WebCore/svg/SVGMaskElement.cpp
@@ -133,19 +133,33 @@ void SVGMaskElement::childrenChanged(bool changedByParser, Node* beforeChange, N
         it->second->invalidate();
 }
 
-PassOwnPtr<ImageBuffer> SVGMaskElement::drawMaskerContent(const FloatRect& objectBoundingBox, FloatRect& maskDestRect, bool& emptyMask) const
-{    
-    // Determine specified mask size
+FloatRect SVGMaskElement::maskBoundingBox(const FloatRect& objectBoundingBox) const
+{
+    FloatRect maskBBox;
     if (maskUnits() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX)
-        maskDestRect = FloatRect(x().valueAsPercentage() * objectBoundingBox.width() + objectBoundingBox.x(),
-                                 y().valueAsPercentage() * objectBoundingBox.height() + objectBoundingBox.y(),
-                                 width().valueAsPercentage() * objectBoundingBox.width(),
-                                 height().valueAsPercentage() * objectBoundingBox.height());
+        maskBBox = FloatRect(x().valueAsPercentage() * objectBoundingBox.width() + objectBoundingBox.x(),
+                             y().valueAsPercentage() * objectBoundingBox.height() + objectBoundingBox.y(),
+                             width().valueAsPercentage() * objectBoundingBox.width(),
+                             height().valueAsPercentage() * objectBoundingBox.height());
     else
-        maskDestRect = FloatRect(x().value(this),
-                                 y().value(this),
-                                 width().value(this),
-                                 height().value(this));
+        maskBBox = FloatRect(x().value(this),
+                             y().value(this),
+                             width().value(this),
+                             height().value(this));
+
+    return maskBBox;
+}
+
+PassOwnPtr<ImageBuffer> SVGMaskElement::drawMaskerContent(const RenderObject* object, FloatRect& maskDestRect, bool& emptyMask) const
+{    
+    FloatRect objectBoundingBox = object->objectBoundingBox();
+
+    // Mask rect clipped with clippingBoundingBox and filterBoundingBox as long as they are present.
+    maskDestRect = object->repaintRectInLocalCoordinates();
+    if (maskDestRect.isEmpty()) {
+        emptyMask = true;
+        return 0;
+    }
 
     // Calculate the smallest rect for the mask ImageBuffer.
     FloatRect repaintRect;
@@ -153,11 +167,7 @@ PassOwnPtr<ImageBuffer> SVGMaskElement::drawMaskerContent(const FloatRect& objec
     for (Node* node = firstChild(); node; node = node->nextSibling()) {
         if (!node->isSVGElement() || !static_cast<SVGElement*>(node)->isStyled() || !node->renderer())
             continue;
-        // FIXME: repaintRectInLocalCoordinates() is not correctly implemented.
-        // The current implementation gives back the union rect of the
-        // the stroke and marker from every child. This is what we need here.
-        // We create the union of all direct childs to get the common drawing area.
-        // See also bug: https://bugs.webkit.org/show_bug.cgi?id=32815
+
         rendererList.append(node->renderer());
         repaintRect.unite(node->renderer()->repaintRectInLocalCoordinates());
     }
diff --git a/WebCore/svg/SVGMaskElement.h b/WebCore/svg/SVGMaskElement.h
index 3da5f25..fadcbba 100644
--- a/WebCore/svg/SVGMaskElement.h
+++ b/WebCore/svg/SVGMaskElement.h
@@ -21,6 +21,7 @@
 #define SVGMaskElement_h
 
 #if ENABLE(SVG)
+#include "RenderObject.h"
 #include "SVGResourceMasker.h"
 #include "SVGExternalResourcesRequired.h"
 #include "SVGLangSpace.h"
@@ -33,6 +34,7 @@
 namespace WebCore {
 
     class SVGLength;
+    class SVGResourceMasker;
 
     class SVGMaskElement : public SVGStyledLocatableElement,
                            public SVGURIReference,
@@ -44,6 +46,7 @@ namespace WebCore {
         virtual ~SVGMaskElement();
         virtual bool isValid() const { return SVGTests::isValid(); }
 
+        FloatRect maskBoundingBox(const FloatRect&) const;
         virtual void parseMappedAttribute(MappedAttribute*);
         virtual void svgAttributeChanged(const QualifiedName&);
         virtual void childrenChanged(bool changedByParser = false, Node* beforeChange = 0, Node* afterChange = 0, int childCountDelta = 0);
@@ -51,7 +54,7 @@ namespace WebCore {
         virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
         virtual SVGResource* canvasResource(const RenderObject*);
 
-        PassOwnPtr<ImageBuffer> drawMaskerContent(const FloatRect& targetRect, FloatRect& maskRect, bool& emptyMask) const;
+        PassOwnPtr<ImageBuffer> drawMaskerContent(const RenderObject*, FloatRect& maskRect, bool& emptyMask) const;
 
     private:
         ANIMATED_PROPERTY_DECLARATIONS(SVGMaskElement, SVGNames::maskTagString, SVGNames::maskUnitsAttrString, int, MaskUnits, maskUnits)
diff --git a/WebCore/svg/graphics/SVGResourceClipper.cpp b/WebCore/svg/graphics/SVGResourceClipper.cpp
index 1f12e85..f267b14 100644
--- a/WebCore/svg/graphics/SVGResourceClipper.cpp
+++ b/WebCore/svg/graphics/SVGResourceClipper.cpp
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2006 Nikolas Zimmermann <zimmermann at kde.org>
+ *           (C) 2009 Dirk Schulze <krit at webkit.org>
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -28,9 +29,9 @@
 #if ENABLE(SVG)
 #include "SVGResourceClipper.h"
 
-#include "TransformationMatrix.h"
 #include "GraphicsContext.h"
 #include "SVGRenderTreeAsText.h"
+#include "TransformationMatrix.h"
 
 #if PLATFORM(CG)
 #include <ApplicationServices/ApplicationServices.h>
@@ -52,6 +53,29 @@ void SVGResourceClipper::resetClipData()
     m_clipData.clear();
 }
 
+FloatRect SVGResourceClipper::clipperBoundingBox(const FloatRect& objectBoundingBox)
+{
+    // FIXME: We need a different calculation for other clip content than paths.
+    if (!m_clipperBoundingBox.isEmpty())
+        return m_clipperBoundingBox;
+
+    if (m_clipData.clipData().isEmpty())
+        return FloatRect();
+
+    for (unsigned x = 0; x < m_clipData.clipData().size(); x++) {
+        ClipData clipData = m_clipData.clipData()[x];
+
+        FloatRect clipPathRect = clipData.path.boundingRect();
+        if (clipData.bboxUnits) {
+            clipPathRect.scale(objectBoundingBox.width(), objectBoundingBox.height());
+            clipPathRect.move(objectBoundingBox.x(), objectBoundingBox.y());
+        }
+        m_clipperBoundingBox.unite(clipPathRect);
+    }
+
+    return m_clipperBoundingBox;
+}
+
 void SVGResourceClipper::applyClip(GraphicsContext* context, const FloatRect& boundingBox) const
 {
     if (m_clipData.clipData().isEmpty())
diff --git a/WebCore/svg/graphics/SVGResourceClipper.h b/WebCore/svg/graphics/SVGResourceClipper.h
index 1056647..5aa279f 100644
--- a/WebCore/svg/graphics/SVGResourceClipper.h
+++ b/WebCore/svg/graphics/SVGResourceClipper.h
@@ -27,6 +27,7 @@
 #define SVGResourceClipper_h
 
 #if ENABLE(SVG)
+#include "FloatRect.h"
 #include "Path.h"
 #include "RenderObject.h"
 #include "SVGResource.h"
@@ -76,9 +77,11 @@ namespace WebCore {
 
         // To be implemented by the specific rendering devices
         void applyClip(GraphicsContext*, const FloatRect& boundingBox) const;
+        FloatRect clipperBoundingBox(const FloatRect& oob);
     private:
         SVGResourceClipper();
         ClipDataList m_clipData;
+        FloatRect m_clipperBoundingBox;
     };
 
     TextStream& operator<<(TextStream&, WindRule);
diff --git a/WebCore/svg/graphics/SVGResourceFilter.cpp b/WebCore/svg/graphics/SVGResourceFilter.cpp
index aaa4332..72ae203 100644
--- a/WebCore/svg/graphics/SVGResourceFilter.cpp
+++ b/WebCore/svg/graphics/SVGResourceFilter.cpp
@@ -32,6 +32,7 @@
 #include "SVGFilter.h"
 #include "SVGFilterBuilder.h"
 #include "SVGFilterElement.h"
+#include "SVGRenderSupport.h"
 #include "SVGRenderTreeAsText.h"
 #include "SVGFilterPrimitiveStandardAttributes.h"
 
@@ -59,10 +60,14 @@ SVGResourceFilter::~SVGResourceFilter()
 {
 }
 
-static inline bool shouldProcessFilter(SVGResourceFilter* filter)
+FloatRect SVGResourceFilter::filterBoundingBox(const FloatRect& obb) const
 {
-    return (!filter->scaleX() || !filter->scaleY() || !filter->filterBoundingBox().width()
-            || !filter->filterBoundingBox().height());
+    return m_ownerElement->filterBoundingBox(obb);
+}
+
+static inline bool shouldProcessFilter(SVGResourceFilter* filter, const FloatRect& filterRect)
+{
+    return (!filter->scaleX() || !filter->scaleY() || !filterRect.width() || !filterRect.height());
 }
 
 void SVGResourceFilter::addFilterEffect(SVGFilterPrimitiveStandardAttributes* effectAttributes, PassRefPtr<FilterEffect> effect)
@@ -88,14 +93,19 @@ bool SVGResourceFilter::fitsInMaximumImageSize(const FloatSize& size)
 
 bool SVGResourceFilter::prepareFilter(GraphicsContext*& context, const RenderObject* object)
 {
-    FloatRect targetRect = object->objectBoundingBox();
-    m_ownerElement->buildFilter(targetRect);
+    m_ownerElement->buildFilter(object->objectBoundingBox());
+    const SVGRenderBase* renderer = object->toSVGRenderBase();
+    if (!renderer)
+        return false;
+
+    FloatRect paintRect = renderer->strokeBoundingBox();
+    paintRect.unite(renderer->markerBoundingBox());
 
-    if (shouldProcessFilter(this))
+    if (shouldProcessFilter(this, m_filterBBox))
         return false;
 
     // clip sourceImage to filterRegion
-    FloatRect clippedSourceRect = targetRect;
+    FloatRect clippedSourceRect = paintRect;
     clippedSourceRect.intersect(m_filterBBox);
 
     // scale filter size to filterRes
@@ -110,7 +120,7 @@ bool SVGResourceFilter::prepareFilter(GraphicsContext*& context, const RenderObj
     fitsInMaximumImageSize(tempSourceRect.size());
 
     // prepare Filters
-    m_filter = SVGFilter::create(targetRect, m_filterBBox, m_effectBBoxMode);
+    m_filter = SVGFilter::create(paintRect, m_filterBBox, m_effectBBoxMode);
     m_filter->setFilterResolution(FloatSize(m_scaleX, m_scaleY));
 
     FilterEffect* lastEffect = m_filterBuilder->lastEffect();
@@ -138,7 +148,7 @@ bool SVGResourceFilter::prepareFilter(GraphicsContext*& context, const RenderObj
     GraphicsContext* sourceGraphicContext = sourceGraphic->context();
     sourceGraphicContext->translate(-clippedSourceRect.x(), -clippedSourceRect.y());
     sourceGraphicContext->scale(FloatSize(m_scaleX, m_scaleY));
-    sourceGraphicContext->clearRect(FloatRect(FloatPoint(), targetRect.size()));
+    sourceGraphicContext->clearRect(FloatRect(FloatPoint(), paintRect.size()));
     m_sourceGraphicBuffer.set(sourceGraphic.release());
     m_savedContext = context;
 
diff --git a/WebCore/svg/graphics/SVGResourceFilter.h b/WebCore/svg/graphics/SVGResourceFilter.h
index aab3414..ee8627c 100644
--- a/WebCore/svg/graphics/SVGResourceFilter.h
+++ b/WebCore/svg/graphics/SVGResourceFilter.h
@@ -68,7 +68,7 @@ public:
     float scaleX() const { return m_scaleX; }
     float scaleY() const { return m_scaleY; }
 
-    FloatRect filterBoundingBox() { return m_filterBBox; }
+    FloatRect filterBoundingBox(const FloatRect& obb) const;
     void setFilterBoundingBox(const FloatRect& rect) { m_filterBBox = rect; }
 
     bool prepareFilter(GraphicsContext*&, const RenderObject*);
diff --git a/WebCore/svg/graphics/SVGResourceMasker.cpp b/WebCore/svg/graphics/SVGResourceMasker.cpp
index e2e9a5c..18bc71a 100644
--- a/WebCore/svg/graphics/SVGResourceMasker.cpp
+++ b/WebCore/svg/graphics/SVGResourceMasker.cpp
@@ -34,6 +34,7 @@
 #include "ImageBuffer.h"
 #include "ImageData.h"
 #include "GraphicsContext.h"
+#include "RenderObject.h"
 #include "SVGMaskElement.h"
 #include "SVGRenderSupport.h"
 #include "SVGRenderStyle.h"
@@ -61,10 +62,15 @@ void SVGResourceMasker::invalidate()
     m_emptyMask = false;
 }
 
-bool SVGResourceMasker::applyMask(GraphicsContext* context, const FloatRect& boundingBox)
+FloatRect SVGResourceMasker::maskerBoundingBox(const FloatRect& objectBoundingBox) const
+{
+    return m_ownerElement->maskBoundingBox(objectBoundingBox);
+}
+
+bool SVGResourceMasker::applyMask(GraphicsContext* context, const RenderObject* object)
 {
     if (!m_mask && !m_emptyMask)
-        m_mask = m_ownerElement->drawMaskerContent(boundingBox, m_maskRect, m_emptyMask);
+        m_mask = m_ownerElement->drawMaskerContent(object, m_maskRect, m_emptyMask);
 
     if (!m_mask)
         return false;
diff --git a/WebCore/svg/graphics/SVGResourceMasker.h b/WebCore/svg/graphics/SVGResourceMasker.h
index ac71818..27364c2 100644
--- a/WebCore/svg/graphics/SVGResourceMasker.h
+++ b/WebCore/svg/graphics/SVGResourceMasker.h
@@ -30,6 +30,7 @@
 
 #include "GraphicsContext.h"
 #include "RenderObject.h"
+#include "SVGMaskElement.h"
 #include "SVGResource.h"
 
 #include <memory>
@@ -53,8 +54,8 @@ namespace WebCore {
         virtual SVGResourceType resourceType() const { return MaskerResourceType; }
         virtual TextStream& externalRepresentation(TextStream&) const;
 
-        // To be implemented by the specific rendering devices
-        bool applyMask(GraphicsContext*, const FloatRect& boundingBox);
+        FloatRect maskerBoundingBox(const FloatRect&) const;
+        bool applyMask(GraphicsContext*, const RenderObject*);
 
     private:
         SVGResourceMasker(const SVGMaskElement*);

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list