First step towards http://webkit.org/b/70025
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 23 Nov 2011 11:34:37 +0000 (11:34 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 23 Nov 2011 11:34:37 +0000 (11:34 +0000)
Allow -webkit-transform to be have effect to SVG elements.
Currently, the CSS transform takes precedence over the SVG transform attribute

Allow SVG elements to be transformed using webkit-transform
https://bugs.webkit.org/show_bug.cgi?id=71309

Patch by Raul Hudea <rhudea@adobe.com> on 2011-11-23
Reviewed by Nikolas Zimmermann.

Source/WebCore:

Tests: svg/clip-path/clip-path-css-transform-1.svg
       svg/clip-path/clip-path-css-transform-2.svg
       svg/custom/clip-path-with-css-transform-1.svg
       svg/custom/clip-path-with-css-transform-2.svg
       svg/custom/pointer-events-image-css-transform.svg
       svg/custom/pointer-events-text-css-transform.svg
       svg/dom/css-transforms.xhtml
       svg/dynamic-updates/SVG-dynamic-css-transform.html
       svg/dynamic-updates/SVGClipPathElement-css-transform-influences-hitTesting.html
       svg/transforms/svg-css-transforms-clip-path.xhtml
       svg/transforms/svg-css-transforms.xhtml

* manual-tests/svg-animation-css-transform.html: Added.
* manual-tests/svg-css-animate-compound.html: Added.
* manual-tests/svg-css-transition-compound.html: Added.
* rendering/svg/RenderSVGModelObject.cpp:
(WebCore::RenderSVGModelObject::styleWillChange):

Set the updateTransform flag on SVG elements whenever a CSS transform is present on the style

* svg/SVGStyledTransformableElement.cpp:
(WebCore::SVGStyledTransformableElement::animatedLocalTransform):

Use the RenderStyle's transform (if it exists) over the SVG's transform

* svg/SVGTextElement.cpp:
(WebCore::SVGTextElement::animatedLocalTransform):

Use the RenderStyle's transform (if it exists) over the SVG's transform

LayoutTests:

* platform/chromium/test_expectations.txt:
* platform/mac/svg/clip-path/clip-path-css-transform-1-expected.png: Added.
* platform/mac/svg/clip-path/clip-path-css-transform-1-expected.txt: Added.
* platform/mac/svg/clip-path/clip-path-css-transform-2-expected.png: Added.
* platform/mac/svg/clip-path/clip-path-css-transform-2-expected.txt: Added.
* platform/mac/svg/custom/clip-path-with-css-transform-1-expected.png: Added.
* platform/mac/svg/custom/clip-path-with-css-transform-1-expected.txt: Added.
* platform/mac/svg/custom/clip-path-with-css-transform-2-expected.png: Added.
* platform/mac/svg/custom/clip-path-with-css-transform-2-expected.txt: Added.
* platform/mac/svg/custom/pointer-events-image-css-transform-expected.png: Added.
* platform/mac/svg/custom/pointer-events-image-css-transform-expected.txt: Added.
* platform/mac/svg/custom/pointer-events-text-css-transform-expected.png: Added.
* platform/mac/svg/custom/pointer-events-text-css-transform-expected.txt: Added.
* platform/mac/svg/dom/css-transforms-expected.png: Added.
* platform/mac/svg/dynamic-updates/SVG-dynamic-css-transform-expected.png: Added.
* platform/mac/svg/dynamic-updates/SVGClipPathElement-css-transform-influences-hitTesting-expected.png: Added.
* platform/mac/svg/transforms/svg-css-transforms-clip-path-expected.png: Added.
* platform/mac/svg/transforms/svg-css-transforms-clip-path-expected.txt: Added.
* platform/mac/svg/transforms/svg-css-transforms-expected.png: Added.
* platform/mac/svg/transforms/svg-css-transforms-expected.txt: Added.
* svg/clip-path/clip-path-css-transform-1.svg: Added.
* svg/clip-path/clip-path-css-transform-2.svg: Added.
* svg/custom/clip-path-with-css-transform-1.svg: Added.
* svg/custom/clip-path-with-css-transform-2.svg: Added.
* svg/custom/pointer-events-image-css-transform.svg: Added.
* svg/custom/pointer-events-text-css-transform.svg: Added.
* svg/dom/css-transforms-expected.txt: Added.
* svg/dom/css-transforms.xhtml: Added.
* svg/dynamic-updates/SVG-dynamic-css-transform-expected.txt: Added.
* svg/dynamic-updates/SVG-dynamic-css-transform.html: Added.
* svg/dynamic-updates/SVGClipPathElement-css-transform-influences-hitTesting-expected.txt: Added.
* svg/dynamic-updates/SVGClipPathElement-css-transform-influences-hitTesting.html: Added.
* svg/dynamic-updates/script-tests/SVGClipPathElement-css-transform-influences-hitTesting.js: Added.
(executeBackgroundTest):
(executeTest):
* svg/transforms/svg-css-transforms-clip-path.xhtml: Added.
* svg/transforms/svg-css-transforms.xhtml: Added.

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

43 files changed:
LayoutTests/ChangeLog
LayoutTests/platform/chromium/test_expectations.txt
LayoutTests/platform/mac/svg/clip-path/clip-path-css-transform-1-expected.png [new file with mode: 0644]
LayoutTests/platform/mac/svg/clip-path/clip-path-css-transform-1-expected.txt [new file with mode: 0644]
LayoutTests/platform/mac/svg/clip-path/clip-path-css-transform-2-expected.png [new file with mode: 0644]
LayoutTests/platform/mac/svg/clip-path/clip-path-css-transform-2-expected.txt [new file with mode: 0644]
LayoutTests/platform/mac/svg/custom/clip-path-with-css-transform-1-expected.png [new file with mode: 0644]
LayoutTests/platform/mac/svg/custom/clip-path-with-css-transform-1-expected.txt [new file with mode: 0644]
LayoutTests/platform/mac/svg/custom/clip-path-with-css-transform-2-expected.png [new file with mode: 0644]
LayoutTests/platform/mac/svg/custom/clip-path-with-css-transform-2-expected.txt [new file with mode: 0644]
LayoutTests/platform/mac/svg/custom/pointer-events-image-css-transform-expected.png [new file with mode: 0644]
LayoutTests/platform/mac/svg/custom/pointer-events-image-css-transform-expected.txt [new file with mode: 0644]
LayoutTests/platform/mac/svg/custom/pointer-events-text-css-transform-expected.png [new file with mode: 0644]
LayoutTests/platform/mac/svg/custom/pointer-events-text-css-transform-expected.txt [new file with mode: 0644]
LayoutTests/platform/mac/svg/dom/css-transforms-expected.png [new file with mode: 0644]
LayoutTests/platform/mac/svg/dynamic-updates/SVG-dynamic-css-transform-expected.png [new file with mode: 0644]
LayoutTests/platform/mac/svg/dynamic-updates/SVGClipPathElement-css-transform-influences-hitTesting-expected.png [new file with mode: 0644]
LayoutTests/platform/mac/svg/transforms/svg-css-transforms-clip-path-expected.png [new file with mode: 0644]
LayoutTests/platform/mac/svg/transforms/svg-css-transforms-clip-path-expected.txt [new file with mode: 0644]
LayoutTests/platform/mac/svg/transforms/svg-css-transforms-expected.png [new file with mode: 0644]
LayoutTests/platform/mac/svg/transforms/svg-css-transforms-expected.txt [new file with mode: 0644]
LayoutTests/svg/clip-path/clip-path-css-transform-1.svg [new file with mode: 0644]
LayoutTests/svg/clip-path/clip-path-css-transform-2.svg [new file with mode: 0644]
LayoutTests/svg/custom/clip-path-with-css-transform-1.svg [new file with mode: 0644]
LayoutTests/svg/custom/clip-path-with-css-transform-2.svg [new file with mode: 0644]
LayoutTests/svg/custom/pointer-events-image-css-transform.svg [new file with mode: 0644]
LayoutTests/svg/custom/pointer-events-text-css-transform.svg [new file with mode: 0644]
LayoutTests/svg/dom/css-transforms-expected.txt [new file with mode: 0644]
LayoutTests/svg/dom/css-transforms.xhtml [new file with mode: 0644]
LayoutTests/svg/dynamic-updates/SVG-dynamic-css-transform-expected.txt [new file with mode: 0644]
LayoutTests/svg/dynamic-updates/SVG-dynamic-css-transform.html [new file with mode: 0644]
LayoutTests/svg/dynamic-updates/SVGClipPathElement-css-transform-influences-hitTesting-expected.txt [new file with mode: 0644]
LayoutTests/svg/dynamic-updates/SVGClipPathElement-css-transform-influences-hitTesting.html [new file with mode: 0644]
LayoutTests/svg/dynamic-updates/script-tests/SVGClipPathElement-css-transform-influences-hitTesting.js [new file with mode: 0644]
LayoutTests/svg/transforms/svg-css-transforms-clip-path.xhtml [new file with mode: 0644]
LayoutTests/svg/transforms/svg-css-transforms.xhtml [new file with mode: 0644]
Source/WebCore/ChangeLog
Source/WebCore/manual-tests/svg-animation-css-transform.html [new file with mode: 0644]
Source/WebCore/manual-tests/svg-css-animate-compound.html [new file with mode: 0644]
Source/WebCore/manual-tests/svg-css-transition-compound.html [new file with mode: 0644]
Source/WebCore/rendering/svg/RenderSVGModelObject.cpp
Source/WebCore/svg/SVGStyledTransformableElement.cpp
Source/WebCore/svg/SVGTextElement.cpp

index d87785b..6a82357 100644 (file)
@@ -1,3 +1,53 @@
+2011-11-23  Raul Hudea  <rhudea@adobe.com>
+
+        First step towards http://webkit.org/b/70025
+
+        Allow -webkit-transform to be have effect to SVG elements.
+        Currently, the CSS transform takes precedence over the SVG transform attribute
+
+        Allow SVG elements to be transformed using webkit-transform
+        https://bugs.webkit.org/show_bug.cgi?id=71309
+
+        Reviewed by Nikolas Zimmermann.
+
+        * platform/chromium/test_expectations.txt:
+        * platform/mac/svg/clip-path/clip-path-css-transform-1-expected.png: Added.
+        * platform/mac/svg/clip-path/clip-path-css-transform-1-expected.txt: Added.
+        * platform/mac/svg/clip-path/clip-path-css-transform-2-expected.png: Added.
+        * platform/mac/svg/clip-path/clip-path-css-transform-2-expected.txt: Added.
+        * platform/mac/svg/custom/clip-path-with-css-transform-1-expected.png: Added.
+        * platform/mac/svg/custom/clip-path-with-css-transform-1-expected.txt: Added.
+        * platform/mac/svg/custom/clip-path-with-css-transform-2-expected.png: Added.
+        * platform/mac/svg/custom/clip-path-with-css-transform-2-expected.txt: Added.
+        * platform/mac/svg/custom/pointer-events-image-css-transform-expected.png: Added.
+        * platform/mac/svg/custom/pointer-events-image-css-transform-expected.txt: Added.
+        * platform/mac/svg/custom/pointer-events-text-css-transform-expected.png: Added.
+        * platform/mac/svg/custom/pointer-events-text-css-transform-expected.txt: Added.
+        * platform/mac/svg/dom/css-transforms-expected.png: Added.
+        * platform/mac/svg/dynamic-updates/SVG-dynamic-css-transform-expected.png: Added.
+        * platform/mac/svg/dynamic-updates/SVGClipPathElement-css-transform-influences-hitTesting-expected.png: Added.
+        * platform/mac/svg/transforms/svg-css-transforms-clip-path-expected.png: Added.
+        * platform/mac/svg/transforms/svg-css-transforms-clip-path-expected.txt: Added.
+        * platform/mac/svg/transforms/svg-css-transforms-expected.png: Added.
+        * platform/mac/svg/transforms/svg-css-transforms-expected.txt: Added.
+        * svg/clip-path/clip-path-css-transform-1.svg: Added.
+        * svg/clip-path/clip-path-css-transform-2.svg: Added.
+        * svg/custom/clip-path-with-css-transform-1.svg: Added.
+        * svg/custom/clip-path-with-css-transform-2.svg: Added.
+        * svg/custom/pointer-events-image-css-transform.svg: Added.
+        * svg/custom/pointer-events-text-css-transform.svg: Added.
+        * svg/dom/css-transforms-expected.txt: Added.
+        * svg/dom/css-transforms.xhtml: Added.
+        * svg/dynamic-updates/SVG-dynamic-css-transform-expected.txt: Added.
+        * svg/dynamic-updates/SVG-dynamic-css-transform.html: Added.
+        * svg/dynamic-updates/SVGClipPathElement-css-transform-influences-hitTesting-expected.txt: Added.
+        * svg/dynamic-updates/SVGClipPathElement-css-transform-influences-hitTesting.html: Added.
+        * svg/dynamic-updates/script-tests/SVGClipPathElement-css-transform-influences-hitTesting.js: Added.
+        (executeBackgroundTest):
+        (executeTest):
+        * svg/transforms/svg-css-transforms-clip-path.xhtml: Added.
+        * svg/transforms/svg-css-transforms.xhtml: Added.
+
 2011-10-08  Martin Robinson  <mrobinson@igalia.com>
 
         [GTK] Enable WebGL by default
index a832547..be0a306 100644 (file)
@@ -3450,6 +3450,19 @@ BUGWK68436 SNOWLEOPARD CPU DEBUG : fast/repaint/background-clip-text.html = TIME
 BUGWK68436 SNOWLEOPARD CPU : fast/repaint/text-emphasis-h.html = TIMEOUT IMAGE
 BUGWK68436 SNOWLEOPARD CPU : svg/W3C-SVG-1.1/paths-data-12-t.svg = IMAGE+TEXT
 
+// New tests that needs rebaseling for chromium ports
+BUGWK71309 : svg/clip-path/clip-path-css-transform-1.svg = IMAGE
+BUGWK71309 : svg/clip-path/clip-path-css-transform-2.svg = IMAGE
+BUGWK71309 : svg/custom/clip-path-with-css-transform-1.svg = IMAGE
+BUGWK71309 : svg/custom/clip-path-with-css-transform-2.svg = IMAGE
+BUGWK71309 : svg/custom/pointer-events-image-css-transform.svg = IMAGE
+BUGWK71309 : svg/custom/pointer-events-text-css-transform.svg = IMAGE
+BUGWK71309 : svg/dynamic-updates/SVG-dynamic-css-transform.html = IMAGE
+BUGWK71309 : svg/dynamic-updates/SVGClipPathElement-css-transform-influences-hitTesting.html = IMAGE
+BUGWK71309 : svg/dom/css-transforms.xhtml = IMAGE
+BUGWK71309 : svg/transforms/svg-css-transforms-clip-path.xhtml = IMAGE
+BUGWK71309 : svg/transforms/svg-css-transforms.xhtml = IMAGE
+
 // Tests that are known to exhibit TEXT failures on Mac10.5 with Skia (CPU and/or GPU) graphics.
 BUGWK68437 LEOPARD CPU : canvas/philip/tests/2d.text.draw.fontface.notinpage.html = TEXT
 
diff --git a/LayoutTests/platform/mac/svg/clip-path/clip-path-css-transform-1-expected.png b/LayoutTests/platform/mac/svg/clip-path/clip-path-css-transform-1-expected.png
new file mode 100644 (file)
index 0000000..d6972ba
Binary files /dev/null and b/LayoutTests/platform/mac/svg/clip-path/clip-path-css-transform-1-expected.png differ
diff --git a/LayoutTests/platform/mac/svg/clip-path/clip-path-css-transform-1-expected.txt b/LayoutTests/platform/mac/svg/clip-path/clip-path-css-transform-1-expected.txt
new file mode 100644 (file)
index 0000000..f10265e
--- /dev/null
@@ -0,0 +1,12 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderSVGRoot {svg} at (20,20) size 200x200
+    RenderSVGHiddenContainer {defs} at (0,0) size 0x0
+      RenderSVGResourceClipper {clipPath} [id="clip"] [clipPathUnits=userSpaceOnUse]
+        RenderSVGPath {circle} at (0,0) size 20x20 [fill={[type=SOLID] [color=#000000]}] [cx=10.00] [cy=10.00] [r=10.00]
+        RenderSVGPath {circle} at (0,0) size 20x20 [fill={[type=SOLID] [color=#000000]}] [cx=10.00] [cy=10.00] [r=10.00]
+    RenderSVGPath {circle} at (21,21) size 198x198 [fill={[type=SOLID] [color=#FF0000]}] [cx=120.00] [cy=120.00] [r=99.00]
+    RenderSVGContainer {a} at (20,20) size 200x200
+      RenderSVGPath {rect} at (20,20) size 200x200 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=220.00] [height=220.00]
+        [clipPath="clip"] RenderSVGResourceClipper {clipPath} at (20,20) size 200x200
diff --git a/LayoutTests/platform/mac/svg/clip-path/clip-path-css-transform-2-expected.png b/LayoutTests/platform/mac/svg/clip-path/clip-path-css-transform-2-expected.png
new file mode 100644 (file)
index 0000000..1bff805
Binary files /dev/null and b/LayoutTests/platform/mac/svg/clip-path/clip-path-css-transform-2-expected.png differ
diff --git a/LayoutTests/platform/mac/svg/clip-path/clip-path-css-transform-2-expected.txt b/LayoutTests/platform/mac/svg/clip-path/clip-path-css-transform-2-expected.txt
new file mode 100644 (file)
index 0000000..6ad2175
--- /dev/null
@@ -0,0 +1,11 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderSVGRoot {svg} at (20,20) size 200x200
+    RenderSVGHiddenContainer {defs} at (0,0) size 0x0
+      RenderSVGResourceClipper {clipPath} [id="clip"] [clipPathUnits=userSpaceOnUse]
+        RenderSVGPath {circle} at (0,0) size 20x20 [fill={[type=SOLID] [color=#000000]}] [cx=10.00] [cy=10.00] [r=10.00]
+    RenderSVGPath {circle} at (21,21) size 198x198 [fill={[type=SOLID] [color=#FF0000]}] [cx=120.00] [cy=120.00] [r=99.00]
+    RenderSVGContainer {a} at (20,20) size 200x200
+      RenderSVGPath {rect} at (20,20) size 200x200 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=220.00] [height=220.00]
+        [clipPath="clip"] RenderSVGResourceClipper {clipPath} at (20,20) size 200x200
diff --git a/LayoutTests/platform/mac/svg/custom/clip-path-with-css-transform-1-expected.png b/LayoutTests/platform/mac/svg/custom/clip-path-with-css-transform-1-expected.png
new file mode 100644 (file)
index 0000000..7cf2d00
Binary files /dev/null and b/LayoutTests/platform/mac/svg/custom/clip-path-with-css-transform-1-expected.png differ
diff --git a/LayoutTests/platform/mac/svg/custom/clip-path-with-css-transform-1-expected.txt b/LayoutTests/platform/mac/svg/custom/clip-path-with-css-transform-1-expected.txt
new file mode 100644 (file)
index 0000000..47f26f5
--- /dev/null
@@ -0,0 +1,11 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderSVGRoot {svg} at (0,0) size 100x100
+    RenderSVGHiddenContainer {defs} at (0,0) size 0x0
+      RenderSVGResourceClipper {clipPath} [id="myclip"] [clipPathUnits=userSpaceOnUse]
+        RenderSVGPath {path} at (0,0) size 100x100 [transform={m=((0.50,0.00)(0.00,0.50)) t=(0.00,0.00)}] [fill={[type=SOLID] [color=#000000]}] [data="M 0 0 L 200 0 L 200 200 L 0 200 Z"]
+    RenderSVGContainer {g} at (0,0) size 100x100
+      [clipPath="myclip"] RenderSVGResourceClipper {clipPath} at (0,0) size 100x100
+      RenderSVGPath {rect} at (0,0) size 200x200 [fill={[type=SOLID] [color=#FF0000]}] [x=0.00] [y=0.00] [width=200.00] [height=200.00]
+      RenderSVGPath {rect} at (0,0) size 100x100 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
diff --git a/LayoutTests/platform/mac/svg/custom/clip-path-with-css-transform-2-expected.png b/LayoutTests/platform/mac/svg/custom/clip-path-with-css-transform-2-expected.png
new file mode 100644 (file)
index 0000000..7cf2d00
Binary files /dev/null and b/LayoutTests/platform/mac/svg/custom/clip-path-with-css-transform-2-expected.png differ
diff --git a/LayoutTests/platform/mac/svg/custom/clip-path-with-css-transform-2-expected.txt b/LayoutTests/platform/mac/svg/custom/clip-path-with-css-transform-2-expected.txt
new file mode 100644 (file)
index 0000000..9987642
--- /dev/null
@@ -0,0 +1,12 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderSVGRoot {svg} at (0,0) size 100x100
+    RenderSVGHiddenContainer {defs} at (0,0) size 0x0
+      RenderSVGResourceClipper {clipPath} [id="myclip"] [clipPathUnits=userSpaceOnUse]
+        RenderSVGPath {rect} at (0,0) size 100x100 [transform={m=((0.50,0.00)(0.00,0.50)) t=(0.00,0.00)}] [fill={[type=SOLID] [color=#000000]}] [x=0.00] [y=0.00] [width=200.00] [height=200.00]
+        RenderSVGPath {rect} at (0,0) size 100x100 [transform={m=((0.50,0.00)(0.00,0.50)) t=(0.00,0.00)}] [fill={[type=SOLID] [color=#000000]}] [x=0.00] [y=0.00] [width=200.00] [height=200.00]
+    RenderSVGContainer {g} at (0,0) size 100x100
+      [clipPath="myclip"] RenderSVGResourceClipper {clipPath} at (0,0) size 100x100
+      RenderSVGPath {rect} at (0,0) size 200x200 [fill={[type=SOLID] [color=#FF0000]}] [x=0.00] [y=0.00] [width=200.00] [height=200.00]
+      RenderSVGPath {rect} at (0,0) size 100x100 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
diff --git a/LayoutTests/platform/mac/svg/custom/pointer-events-image-css-transform-expected.png b/LayoutTests/platform/mac/svg/custom/pointer-events-image-css-transform-expected.png
new file mode 100644 (file)
index 0000000..f7b1f25
Binary files /dev/null and b/LayoutTests/platform/mac/svg/custom/pointer-events-image-css-transform-expected.png differ
diff --git a/LayoutTests/platform/mac/svg/custom/pointer-events-image-css-transform-expected.txt b/LayoutTests/platform/mac/svg/custom/pointer-events-image-css-transform-expected.txt
new file mode 100644 (file)
index 0000000..f054cc0
--- /dev/null
@@ -0,0 +1,362 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderSVGRoot {svg} at (0,6) size 549x587
+    RenderSVGText {text} at (110,6) size 107x18 contains 1 chunk(s)
+      RenderSVGInlineText {#text} at (0,0) size 107x18
+        chunk 1 text run 1 at (110.00,20.00) startOffset 0 endOffset 19 width 107.00: "Visibility: visible"
+    RenderSVGText {text} at (340,6) size 109x18 contains 1 chunk(s)
+      RenderSVGInlineText {#text} at (0,0) size 109x18
+        chunk 1 text run 1 at (340.00,20.00) startOffset 0 endOffset 18 width 109.00: "Visibility: hidden"
+    RenderSVGContainer {g} at (0,30) size 549x563
+      RenderSVGText {text} at (0,46) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (0.00,60.00) startOffset 0 endOffset 4 width 27.00: "auto"
+      RenderSVGImage {image} at (100,30) size 50x50 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (105,36) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (105.00,50.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (156,30) size 52x50 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (162,36) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (162.00,50.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (214,30) size 50x50 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (219,36) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (219.00,50.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (270,30) size 52x50 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (276,36) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (276.00,50.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (328,30) size 50x50 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (333,36) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (333.00,50.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGImage {image} at (384,30) size 52x50 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (390,36) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (390.00,50.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGImage {image} at (442,30) size 50x50 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (447,36) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (447.00,50.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGImage {image} at (498,30) size 52x50 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (504,36) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (504.00,50.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGText {text} at (0,103) size 88x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 88x18
+          chunk 1 text run 1 at (0.00,117.00) startOffset 0 endOffset 14 width 88.00: "visiblePainted"
+      RenderSVGImage {image} at (100,86) size 50x52 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (105,93) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (105.00,107.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (156,86) size 52x52 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (162,93) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (162.00,107.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (214,86) size 50x52 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (219,93) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (219.00,107.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (270,86) size 52x52 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (276,93) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (276.00,107.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (328,86) size 50x52 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (333,93) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (333.00,107.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGImage {image} at (384,86) size 52x52 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (390,93) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (390.00,107.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGImage {image} at (442,86) size 50x52 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (447,93) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (447.00,107.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGImage {image} at (498,86) size 52x52 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (504,93) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (504.00,107.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGText {text} at (0,160) size 62x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 62x18
+          chunk 1 text run 1 at (0.00,174.00) startOffset 0 endOffset 11 width 62.00: "visibleFill"
+      RenderSVGImage {image} at (100,144) size 50x50 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (105,150) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (105.00,164.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (156,144) size 52x50 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (162,150) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (162.00,164.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (214,144) size 50x50 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (219,150) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (219.00,164.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (270,144) size 52x50 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (276,150) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (276.00,164.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (328,144) size 50x50 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (333,150) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (333.00,164.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGImage {image} at (384,144) size 52x50 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (390,150) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (390.00,164.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGImage {image} at (442,144) size 50x50 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (447,150) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (447.00,164.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGImage {image} at (498,144) size 52x50 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (504,150) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (504.00,164.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGText {text} at (0,217) size 82x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 82x18
+          chunk 1 text run 1 at (0.00,231.00) startOffset 0 endOffset 13 width 82.00: "visibleStroke"
+      RenderSVGImage {image} at (100,200) size 50x52 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (105,207) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (105.00,221.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (156,200) size 52x52 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (162,207) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (162.00,221.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (214,200) size 50x52 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (219,207) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (219.00,221.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (270,200) size 52x52 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (276,207) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (276.00,221.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (328,200) size 50x52 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (333,207) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (333.00,221.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGImage {image} at (384,200) size 52x52 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (390,207) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (390.00,221.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGImage {image} at (442,200) size 50x52 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (447,207) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (447.00,221.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGImage {image} at (498,200) size 52x52 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (504,207) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (504.00,221.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGText {text} at (0,274) size 41x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 41x18
+          chunk 1 text run 1 at (0.00,288.00) startOffset 0 endOffset 7 width 41.00: "visible"
+      RenderSVGImage {image} at (100,258) size 50x50 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (105,264) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (105.00,278.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (156,258) size 52x50 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (162,264) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (162.00,278.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (214,258) size 50x50 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (219,264) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (219.00,278.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (270,258) size 52x50 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (276,264) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (276.00,278.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (328,258) size 50x50 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (333,264) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (333.00,278.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGImage {image} at (384,258) size 52x50 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (390,264) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (390.00,278.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGImage {image} at (442,258) size 50x50 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (447,264) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (447.00,278.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGImage {image} at (498,258) size 52x50 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (504,264) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (504.00,278.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGText {text} at (0,331) size 46x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 46x18
+          chunk 1 text run 1 at (0.00,345.00) startOffset 0 endOffset 7 width 46.00: "painted"
+      RenderSVGImage {image} at (100,314) size 50x52 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (105,321) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (105.00,335.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (156,314) size 52x52 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (162,321) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (162.00,335.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (214,314) size 50x52 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (219,321) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (219.00,335.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (270,314) size 52x52 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (276,321) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (276.00,335.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (328,314) size 50x52 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (333,321) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (333.00,335.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (384,314) size 52x52 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (390,321) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (390.00,335.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (442,314) size 50x52 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (447,321) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (447.00,335.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (498,314) size 52x52 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (504,321) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (504.00,335.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (0,388) size 17x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 17x18
+          chunk 1 text run 1 at (0.00,402.00) startOffset 0 endOffset 4 width 17.00: "fill"
+      RenderSVGImage {image} at (100,372) size 50x50 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (105,378) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (105.00,392.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (156,372) size 52x50 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (162,378) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (162.00,392.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (214,372) size 50x50 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (219,378) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (219.00,392.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (270,372) size 52x50 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (276,378) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (276.00,392.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (328,372) size 50x50 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (333,378) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (333.00,392.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (384,372) size 52x50 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (390,378) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (390.00,392.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (442,372) size 50x50 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (447,378) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (447.00,392.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (498,372) size 52x50 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (504,378) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (504.00,392.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (0,445) size 38x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 38x18
+          chunk 1 text run 1 at (0.00,459.00) startOffset 0 endOffset 6 width 38.00: "stroke"
+      RenderSVGImage {image} at (100,428) size 50x52 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (105,435) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (105.00,449.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (156,428) size 52x52 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (162,435) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (162.00,449.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (214,428) size 50x52 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (219,435) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (219.00,449.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (270,428) size 52x52 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (276,435) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (276.00,449.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (328,428) size 50x52 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (333,435) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (333.00,449.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (384,428) size 52x52 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (390,435) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (390.00,449.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (442,428) size 50x52 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (447,435) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (447.00,449.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (498,428) size 52x52 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (504,435) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (504.00,449.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (0,502) size 15x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 15x18
+          chunk 1 text run 1 at (0.00,516.00) startOffset 0 endOffset 3 width 15.00: "all"
+      RenderSVGImage {image} at (100,486) size 50x50 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (105,492) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (105.00,506.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (156,486) size 52x50 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (162,492) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (162.00,506.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (214,486) size 50x50 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (219,492) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (219.00,506.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (270,486) size 52x50 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (276,492) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (276.00,506.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (328,486) size 50x50 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (333,492) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (333.00,506.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (384,486) size 52x50 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (390,492) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (390.00,506.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (442,486) size 50x50 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (447,492) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (447.00,506.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGImage {image} at (498,486) size 52x50 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (504,492) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (504.00,506.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (0,559) size 31x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 31x18
+          chunk 1 text run 1 at (0.00,573.00) startOffset 0 endOffset 4 width 31.00: "none"
+      RenderSVGImage {image} at (100,542) size 50x52 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (105,549) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (105.00,563.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGImage {image} at (156,542) size 52x52 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (162,549) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (162.00,563.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGImage {image} at (214,542) size 50x52 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (219,549) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (219.00,563.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGImage {image} at (270,542) size 52x52 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (276,549) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (276.00,563.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGImage {image} at (328,542) size 50x52 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (333,549) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (333.00,563.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGImage {image} at (384,542) size 52x52 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (390,549) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (390.00,563.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGImage {image} at (442,542) size 50x52 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (447,549) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (447.00,563.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGImage {image} at (498,542) size 52x52 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+      RenderSVGText {text} at (504,549) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (504.00,563.00) startOffset 0 endOffset 4 width 28.00: "miss"
+caret: position 18 of child 0 {#text} of child 5 {text} of child 1 {svg} of document
diff --git a/LayoutTests/platform/mac/svg/custom/pointer-events-text-css-transform-expected.png b/LayoutTests/platform/mac/svg/custom/pointer-events-text-css-transform-expected.png
new file mode 100644 (file)
index 0000000..b12ecec
Binary files /dev/null and b/LayoutTests/platform/mac/svg/custom/pointer-events-text-css-transform-expected.png differ
diff --git a/LayoutTests/platform/mac/svg/custom/pointer-events-text-css-transform-expected.txt b/LayoutTests/platform/mac/svg/custom/pointer-events-text-css-transform-expected.txt
new file mode 100644 (file)
index 0000000..5ec3c43
--- /dev/null
@@ -0,0 +1,522 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderSVGRoot {svg} at (0,6) size 532x580
+    RenderSVGText {text} at (110,6) size 107x18 contains 1 chunk(s)
+      RenderSVGInlineText {#text} at (0,0) size 107x18
+        chunk 1 text run 1 at (110.00,20.00) startOffset 0 endOffset 19 width 107.00: "Visibility: visible"
+    RenderSVGText {text} at (340,6) size 109x18 contains 1 chunk(s)
+      RenderSVGInlineText {#text} at (0,0) size 109x18
+        chunk 1 text run 1 at (340.00,20.00) startOffset 0 endOffset 18 width 109.00: "Visibility: hidden"
+    RenderSVGContainer {g} at (0,22) size 532x564
+      RenderSVGText {text} at (0,46) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (0.00,60.00) startOffset 0 endOffset 4 width 27.00: "auto"
+      RenderSVGText {text} at (50,12) size 10x23 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 10x23
+          chunk 1 text run 1 at (50.00,30.00) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (105,36) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (105.00,50.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGText {text} at (78,12) size 11x23 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 11x23
+          chunk 1 text run 1 at (78.50,30.00) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (162,36) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (162.00,50.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (107,12) size 10x23 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 10x23
+          chunk 1 text run 1 at (107.00,30.00) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (219,36) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (219.00,50.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (135,12) size 11x23 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 11x23
+          chunk 1 text run 1 at (135.50,30.00) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (276,36) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (276.00,50.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (164,12) size 10x23 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 10x23
+          chunk 1 text run 1 at (164.00,30.00) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (333,36) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (333.00,50.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGText {text} at (192,12) size 11x23 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 11x23
+          chunk 1 text run 1 at (192.50,30.00) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (390,36) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (390.00,50.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGText {text} at (221,12) size 10x23 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 10x23
+          chunk 1 text run 1 at (221.00,30.00) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (447,36) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (447.00,50.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGText {text} at (249,12) size 11x23 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 11x23
+          chunk 1 text run 1 at (249.50,30.00) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (504,36) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (504.00,50.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGText {text} at (0,103) size 88x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 88x18
+          chunk 1 text run 1 at (0.00,117.00) startOffset 0 endOffset 14 width 88.00: "visiblePainted"
+      RenderSVGText {text} at (50,40) size 10x24 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 10x24
+          chunk 1 text run 1 at (50.00,58.50) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (105,93) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (105.00,107.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGText {text} at (78,40) size 11x24 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 11x24
+          chunk 1 text run 1 at (78.50,58.50) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (162,93) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (162.00,107.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (107,40) size 10x24 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 10x24
+          chunk 1 text run 1 at (107.00,58.50) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (219,93) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (219.00,107.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (135,40) size 11x24 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 11x24
+          chunk 1 text run 1 at (135.50,58.50) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (276,93) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (276.00,107.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (164,40) size 10x24 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 10x24
+          chunk 1 text run 1 at (164.00,58.50) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (333,93) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (333.00,107.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGText {text} at (192,40) size 11x24 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 11x24
+          chunk 1 text run 1 at (192.50,58.50) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (390,93) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (390.00,107.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGText {text} at (221,40) size 10x24 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 10x24
+          chunk 1 text run 1 at (221.00,58.50) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (447,93) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (447.00,107.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGText {text} at (249,40) size 11x24 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 11x24
+          chunk 1 text run 1 at (249.50,58.50) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (504,93) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (504.00,107.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGText {text} at (0,160) size 62x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 62x18
+          chunk 1 text run 1 at (0.00,174.00) startOffset 0 endOffset 11 width 62.00: "visibleFill"
+      RenderSVGText {text} at (50,69) size 10x23 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 10x23
+          chunk 1 text run 1 at (50.00,87.00) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (105,150) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (105.00,164.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (78,69) size 11x23 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 11x23
+          chunk 1 text run 1 at (78.50,87.00) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (162,150) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (162.00,164.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (107,69) size 10x23 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 10x23
+          chunk 1 text run 1 at (107.00,87.00) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (219,150) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (219.00,164.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (135,69) size 11x23 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 11x23
+          chunk 1 text run 1 at (135.50,87.00) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (276,150) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (276.00,164.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (164,69) size 10x23 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 10x23
+          chunk 1 text run 1 at (164.00,87.00) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (333,150) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (333.00,164.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGText {text} at (192,69) size 11x23 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 11x23
+          chunk 1 text run 1 at (192.50,87.00) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (390,150) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (390.00,164.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGText {text} at (221,69) size 10x23 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 10x23
+          chunk 1 text run 1 at (221.00,87.00) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (447,150) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (447.00,164.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGText {text} at (249,69) size 11x23 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 11x23
+          chunk 1 text run 1 at (249.50,87.00) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (504,150) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (504.00,164.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGText {text} at (0,217) size 82x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 82x18
+          chunk 1 text run 1 at (0.00,231.00) startOffset 0 endOffset 13 width 82.00: "visibleStroke"
+      RenderSVGText {text} at (50,97) size 10x24 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 10x24
+          chunk 1 text run 1 at (50.00,115.50) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (105,207) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (105.00,221.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (78,97) size 11x24 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 11x24
+          chunk 1 text run 1 at (78.50,115.50) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (162,207) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (162.00,221.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (107,97) size 10x24 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 10x24
+          chunk 1 text run 1 at (107.00,115.50) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (219,207) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (219.00,221.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (135,97) size 11x24 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 11x24
+          chunk 1 text run 1 at (135.50,115.50) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (276,207) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (276.00,221.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (164,97) size 10x24 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 10x24
+          chunk 1 text run 1 at (164.00,115.50) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (333,207) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (333.00,221.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGText {text} at (192,97) size 11x24 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 11x24
+          chunk 1 text run 1 at (192.50,115.50) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (390,207) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (390.00,221.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGText {text} at (221,97) size 10x24 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 10x24
+          chunk 1 text run 1 at (221.00,115.50) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (447,207) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (447.00,221.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGText {text} at (249,97) size 11x24 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 11x24
+          chunk 1 text run 1 at (249.50,115.50) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (504,207) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (504.00,221.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGText {text} at (0,274) size 41x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 41x18
+          chunk 1 text run 1 at (0.00,288.00) startOffset 0 endOffset 7 width 41.00: "visible"
+      RenderSVGText {text} at (50,126) size 10x23 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 10x23
+          chunk 1 text run 1 at (50.00,144.00) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (105,264) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (105.00,278.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (78,126) size 11x23 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 11x23
+          chunk 1 text run 1 at (78.50,144.00) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (162,264) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (162.00,278.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (107,126) size 10x23 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 10x23
+          chunk 1 text run 1 at (107.00,144.00) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (219,264) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (219.00,278.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (135,126) size 11x23 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 11x23
+          chunk 1 text run 1 at (135.50,144.00) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (276,264) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (276.00,278.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (164,126) size 10x23 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 10x23
+          chunk 1 text run 1 at (164.00,144.00) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (333,264) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (333.00,278.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGText {text} at (192,126) size 11x23 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 11x23
+          chunk 1 text run 1 at (192.50,144.00) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (390,264) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (390.00,278.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGText {text} at (221,126) size 10x23 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 10x23
+          chunk 1 text run 1 at (221.00,144.00) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (447,264) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (447.00,278.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGText {text} at (249,126) size 11x23 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 11x23
+          chunk 1 text run 1 at (249.50,144.00) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (504,264) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (504.00,278.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGText {text} at (0,331) size 46x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 46x18
+          chunk 1 text run 1 at (0.00,345.00) startOffset 0 endOffset 7 width 46.00: "painted"
+      RenderSVGText {text} at (50,154) size 10x24 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 10x24
+          chunk 1 text run 1 at (50.00,172.50) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (105,321) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (105.00,335.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGText {text} at (78,154) size 11x24 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 11x24
+          chunk 1 text run 1 at (78.50,172.50) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (162,321) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (162.00,335.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (107,154) size 10x24 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 10x24
+          chunk 1 text run 1 at (107.00,172.50) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (219,321) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (219.00,335.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (135,154) size 11x24 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 11x24
+          chunk 1 text run 1 at (135.50,172.50) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (276,321) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (276.00,335.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (164,154) size 10x24 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 10x24
+          chunk 1 text run 1 at (164.00,172.50) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (333,321) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (333.00,335.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGText {text} at (192,154) size 11x24 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 11x24
+          chunk 1 text run 1 at (192.50,172.50) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (390,321) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (390.00,335.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (221,154) size 10x24 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 10x24
+          chunk 1 text run 1 at (221.00,172.50) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (447,321) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (447.00,335.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (249,154) size 11x24 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 11x24
+          chunk 1 text run 1 at (249.50,172.50) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (504,321) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (504.00,335.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (0,388) size 17x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 17x18
+          chunk 1 text run 1 at (0.00,402.00) startOffset 0 endOffset 4 width 17.00: "fill"
+      RenderSVGText {text} at (50,183) size 10x23 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 10x23
+          chunk 1 text run 1 at (50.00,201.00) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (105,378) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (105.00,392.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (78,183) size 11x23 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 11x23
+          chunk 1 text run 1 at (78.50,201.00) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (162,378) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (162.00,392.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (107,183) size 10x23 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 10x23
+          chunk 1 text run 1 at (107.00,201.00) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (219,378) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (219.00,392.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (135,183) size 11x23 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 11x23
+          chunk 1 text run 1 at (135.50,201.00) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (276,378) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (276.00,392.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (164,183) size 10x23 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 10x23
+          chunk 1 text run 1 at (164.00,201.00) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (333,378) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (333.00,392.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (192,183) size 11x23 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 11x23
+          chunk 1 text run 1 at (192.50,201.00) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (390,378) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (390.00,392.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (221,183) size 10x23 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 10x23
+          chunk 1 text run 1 at (221.00,201.00) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (447,378) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (447.00,392.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (249,183) size 11x23 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 11x23
+          chunk 1 text run 1 at (249.50,201.00) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (504,378) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (504.00,392.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (0,445) size 38x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 38x18
+          chunk 1 text run 1 at (0.00,459.00) startOffset 0 endOffset 6 width 38.00: "stroke"
+      RenderSVGText {text} at (50,211) size 10x24 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 10x24
+          chunk 1 text run 1 at (50.00,229.50) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (105,435) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (105.00,449.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (78,211) size 11x24 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 11x24
+          chunk 1 text run 1 at (78.50,229.50) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (162,435) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (162.00,449.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (107,211) size 10x24 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 10x24
+          chunk 1 text run 1 at (107.00,229.50) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (219,435) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (219.00,449.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (135,211) size 11x24 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 11x24
+          chunk 1 text run 1 at (135.50,229.50) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (276,435) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (276.00,449.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (164,211) size 10x24 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 10x24
+          chunk 1 text run 1 at (164.00,229.50) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (333,435) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (333.00,449.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (192,211) size 11x24 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 11x24
+          chunk 1 text run 1 at (192.50,229.50) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (390,435) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (390.00,449.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (221,211) size 10x24 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 10x24
+          chunk 1 text run 1 at (221.00,229.50) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (447,435) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (447.00,449.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (249,211) size 11x24 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 11x24
+          chunk 1 text run 1 at (249.50,229.50) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (504,435) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (504.00,449.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (0,502) size 15x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 15x18
+          chunk 1 text run 1 at (0.00,516.00) startOffset 0 endOffset 3 width 15.00: "all"
+      RenderSVGText {text} at (50,240) size 10x23 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 10x23
+          chunk 1 text run 1 at (50.00,258.00) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (105,492) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (105.00,506.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (78,240) size 11x23 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 11x23
+          chunk 1 text run 1 at (78.50,258.00) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (162,492) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (162.00,506.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (107,240) size 10x23 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 10x23
+          chunk 1 text run 1 at (107.00,258.00) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (219,492) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (219.00,506.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (135,240) size 11x23 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 11x23
+          chunk 1 text run 1 at (135.50,258.00) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (276,492) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (276.00,506.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (164,240) size 10x23 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 10x23
+          chunk 1 text run 1 at (164.00,258.00) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (333,492) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (333.00,506.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (192,240) size 11x23 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 11x23
+          chunk 1 text run 1 at (192.50,258.00) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (390,492) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (390.00,506.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (221,240) size 10x23 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 10x23
+          chunk 1 text run 1 at (221.00,258.00) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (447,492) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (447.00,506.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (249,240) size 11x23 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 11x23
+          chunk 1 text run 1 at (249.50,258.00) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (504,492) size 27x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 27x18
+          chunk 1 text run 1 at (504.00,506.00) startOffset 0 endOffset 3 width 27.00: "HIT"
+      RenderSVGText {text} at (0,559) size 31x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 31x18
+          chunk 1 text run 1 at (0.00,573.00) startOffset 0 endOffset 4 width 31.00: "none"
+      RenderSVGText {text} at (50,268) size 10x24 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 10x24
+          chunk 1 text run 1 at (50.00,286.50) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (105,549) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (105.00,563.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGText {text} at (78,268) size 11x24 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 11x24
+          chunk 1 text run 1 at (78.50,286.50) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (162,549) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (162.00,563.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGText {text} at (107,268) size 10x24 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 10x24
+          chunk 1 text run 1 at (107.00,286.50) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (219,549) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (219.00,563.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGText {text} at (135,268) size 11x24 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 11x24
+          chunk 1 text run 1 at (135.50,286.50) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (276,549) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (276.00,563.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGText {text} at (164,268) size 10x24 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 10x24
+          chunk 1 text run 1 at (164.00,286.50) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (333,549) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (333.00,563.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGText {text} at (192,268) size 11x24 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 11x24
+          chunk 1 text run 1 at (192.50,286.50) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (390,549) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (390.00,563.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGText {text} at (221,268) size 10x24 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 10x24
+          chunk 1 text run 1 at (221.00,286.50) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (447,549) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (447.00,563.00) startOffset 0 endOffset 4 width 28.00: "miss"
+      RenderSVGText {text} at (249,268) size 11x24 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 11x24
+          chunk 1 text run 1 at (249.50,286.50) startOffset 0 endOffset 1 width 10.00: "#"
+      RenderSVGText {text} at (504,549) size 28x18 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 28x18
+          chunk 1 text run 1 at (504.00,563.00) startOffset 0 endOffset 4 width 28.00: "miss"
+caret: position 18 of child 0 {#text} of child 5 {text} of child 1 {svg} of document
diff --git a/LayoutTests/platform/mac/svg/dom/css-transforms-expected.png b/LayoutTests/platform/mac/svg/dom/css-transforms-expected.png
new file mode 100644 (file)
index 0000000..761df97
Binary files /dev/null and b/LayoutTests/platform/mac/svg/dom/css-transforms-expected.png differ
diff --git a/LayoutTests/platform/mac/svg/dynamic-updates/SVG-dynamic-css-transform-expected.png b/LayoutTests/platform/mac/svg/dynamic-updates/SVG-dynamic-css-transform-expected.png
new file mode 100644 (file)
index 0000000..e3c1b63
Binary files /dev/null and b/LayoutTests/platform/mac/svg/dynamic-updates/SVG-dynamic-css-transform-expected.png differ
diff --git a/LayoutTests/platform/mac/svg/dynamic-updates/SVGClipPathElement-css-transform-influences-hitTesting-expected.png b/LayoutTests/platform/mac/svg/dynamic-updates/SVGClipPathElement-css-transform-influences-hitTesting-expected.png
new file mode 100644 (file)
index 0000000..0ecb476
Binary files /dev/null and b/LayoutTests/platform/mac/svg/dynamic-updates/SVGClipPathElement-css-transform-influences-hitTesting-expected.png differ
diff --git a/LayoutTests/platform/mac/svg/transforms/svg-css-transforms-clip-path-expected.png b/LayoutTests/platform/mac/svg/transforms/svg-css-transforms-clip-path-expected.png
new file mode 100644 (file)
index 0000000..28cf41a
Binary files /dev/null and b/LayoutTests/platform/mac/svg/transforms/svg-css-transforms-clip-path-expected.png differ
diff --git a/LayoutTests/platform/mac/svg/transforms/svg-css-transforms-clip-path-expected.txt b/LayoutTests/platform/mac/svg/transforms/svg-css-transforms-clip-path-expected.txt
new file mode 100644 (file)
index 0000000..0858173
--- /dev/null
@@ -0,0 +1,70 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x578
+  RenderBlock {html} at (0,0) size 800x578
+    RenderBody {body} at (8,8) size 784x562
+      RenderBlock {div} at (10,10) size 220x542
+        RenderBlock {h2} at (0,19) size 220x28
+          RenderText {#text} at (0,0) size 154x28
+            text run at (0,0) width 154: "SVG CSS scale"
+        RenderBlock {h2} at (0,285) size 220x28
+          RenderText {#text} at (0,0) size 105x28
+            text run at (0,0) width 105: "SVG scale"
+      RenderText {#text} at (240,0) size 4x18
+        text run at (240,0) width 4: " "
+      RenderBlock {div} at (254,10) size 220x542
+        RenderBlock {h2} at (0,19) size 220x28
+          RenderText {#text} at (0,0) size 211x28
+            text run at (0,0) width 211: "SVG CSS compound"
+        RenderBlock {h2} at (0,285) size 220x28
+          RenderText {#text} at (0,0) size 162x28
+            text run at (0,0) width 162: "SVG compound"
+      RenderText {#text} at (0,0) size 0x0
+layer at (28,84) size 200x200
+  RenderBlock (relative positioned) {div} at (10,66) size 200x200 [bgcolor=#C0C0C0] [border: (1px solid #000000)]
+    RenderSVGRoot {svg} at (39,95) size 140x140
+      RenderSVGHiddenContainer {defs} at (0,0) size 0x0
+        RenderSVGPath {circle} at (29,85) size 150x150 [transform={m=((5.00,0.00)(0.00,5.00)) t=(0.00,0.00)}] [fill={[type=SOLID] [color=#000000]}] [cx=10.00] [cy=10.00] [r=20.00]
+        RenderSVGResourceClipper {clipPath} [id="clip-circle1"] [clipPathUnits=userSpaceOnUse]
+          RenderSVGContainer {use} at (29,85) size 150x150
+            RenderSVGContainer {g} at (29,85) size 150x150
+              RenderSVGPath {circle} at (29,85) size 150x150 [transform={m=((5.00,0.00)(0.00,5.00)) t=(0.00,0.00)}] [fill={[type=SOLID] [color=#000000]}] [cx=10.00] [cy=10.00] [r=20.00]
+      RenderSVGPath {rect} at (39,95) size 140x140 [fill={[type=SOLID] [color=#008000]}] [x=10.00] [y=10.00] [width=200.00] [height=200.00]
+        [clipPath="clip-circle1"] RenderSVGResourceClipper {clipPath} at (-50,-50) size 200x200
+    RenderText {#text} at (0,0) size 0x0
+layer at (28,350) size 200x200
+  RenderBlock (relative positioned) {div} at (10,332) size 200x200 [bgcolor=#C0C0C0] [border: (1px solid #000000)]
+    RenderSVGRoot {svg} at (39,361) size 140x140
+      RenderSVGHiddenContainer {defs} at (0,0) size 0x0
+        RenderSVGPath {circle} at (29,351) size 150x150 [transform={m=((5.00,0.00)(0.00,5.00)) t=(0.00,0.00)}] [fill={[type=SOLID] [color=#000000]}] [cx=10.00] [cy=10.00] [r=20.00]
+        RenderSVGResourceClipper {clipPath} [id="clip-circle2"] [clipPathUnits=userSpaceOnUse]
+          RenderSVGContainer {use} at (29,351) size 150x150
+            RenderSVGContainer {g} at (29,351) size 150x150
+              RenderSVGPath {circle} at (29,351) size 150x150 [transform={m=((5.00,0.00)(0.00,5.00)) t=(0.00,0.00)}] [fill={[type=SOLID] [color=#000000]}] [cx=10.00] [cy=10.00] [r=20.00]
+      RenderSVGPath {rect} at (39,361) size 140x140 [fill={[type=SOLID] [color=#008000]}] [x=10.00] [y=10.00] [width=200.00] [height=200.00]
+        [clipPath="clip-circle2"] RenderSVGResourceClipper {clipPath} at (-50,-50) size 200x200
+    RenderText {#text} at (0,0) size 0x0
+layer at (272,84) size 200x200
+  RenderBlock (relative positioned) {div} at (10,66) size 200x200 [bgcolor=#C0C0C0] [border: (1px solid #000000)]
+    RenderSVGRoot {svg} at (283,95) size 132x188
+      RenderSVGHiddenContainer {defs} at (0,0) size 0x0
+        RenderSVGPath {rect} at (273,92) size 142x191 [transform={m=((3.54,3.54)(-3.54,3.54)) t=(0.00,0.00)}] [fill={[type=SOLID] [color=#000000]}] [x=1.00] [y=1.00] [width=40.00] [height=40.00]
+        RenderSVGResourceClipper {clipPath} [id="clip-rect1"] [clipPathUnits=userSpaceOnUse]
+          RenderSVGContainer {use} at (273,92) size 142x191
+            RenderSVGContainer {g} at (273,92) size 142x191
+              RenderSVGPath {rect} at (273,92) size 142x191 [transform={m=((3.54,3.54)(-3.54,3.54)) t=(0.00,0.00)}] [fill={[type=SOLID] [color=#000000]}] [x=1.00] [y=1.00] [width=40.00] [height=40.00]
+      RenderSVGPath {rect} at (283,95) size 132x188 [fill={[type=SOLID] [color=#008000]}] [x=10.00] [y=10.00] [width=200.00] [height=200.00]
+        [clipPath="clip-rect1"] RenderSVGResourceClipper {clipPath} at (-141.42,7.07) size 282.84x282.84
+    RenderText {#text} at (0,0) size 0x0
+layer at (272,350) size 200x200
+  RenderBlock (relative positioned) {div} at (10,332) size 200x200 [bgcolor=#C0C0C0] [border: (1px solid #000000)]
+    RenderSVGRoot {svg} at (283,361) size 132x188
+      RenderSVGHiddenContainer {defs} at (0,0) size 0x0
+        RenderSVGPath {rect} at (273,358) size 142x191 [transform={m=((3.54,3.54)(-3.54,3.54)) t=(0.00,0.00)}] [fill={[type=SOLID] [color=#000000]}] [x=1.00] [y=1.00] [width=40.00] [height=40.00]
+        RenderSVGResourceClipper {clipPath} [id="clip-rect2"] [clipPathUnits=userSpaceOnUse]
+          RenderSVGContainer {use} at (273,358) size 142x191
+            RenderSVGContainer {g} at (273,358) size 142x191
+              RenderSVGPath {rect} at (273,358) size 142x191 [transform={m=((3.54,3.54)(-3.54,3.54)) t=(0.00,0.00)}] [fill={[type=SOLID] [color=#000000]}] [x=1.00] [y=1.00] [width=40.00] [height=40.00]
+      RenderSVGPath {rect} at (283,361) size 132x188 [fill={[type=SOLID] [color=#008000]}] [x=10.00] [y=10.00] [width=200.00] [height=200.00]
+        [clipPath="clip-rect2"] RenderSVGResourceClipper {clipPath} at (-141.42,7.07) size 282.84x282.84
+    RenderText {#text} at (0,0) size 0x0
diff --git a/LayoutTests/platform/mac/svg/transforms/svg-css-transforms-expected.png b/LayoutTests/platform/mac/svg/transforms/svg-css-transforms-expected.png
new file mode 100644 (file)
index 0000000..4170f04
Binary files /dev/null and b/LayoutTests/platform/mac/svg/transforms/svg-css-transforms-expected.png differ
diff --git a/LayoutTests/platform/mac/svg/transforms/svg-css-transforms-expected.txt b/LayoutTests/platform/mac/svg/transforms/svg-css-transforms-expected.txt
new file mode 100644 (file)
index 0000000..c5826ab
--- /dev/null
@@ -0,0 +1,48 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x578
+  RenderBlock {html} at (0,0) size 800x578
+    RenderBody {body} at (8,8) size 784x562
+      RenderBlock {div} at (10,10) size 220x542
+        RenderBlock {h2} at (0,19) size 220x28
+          RenderText {#text} at (0,0) size 120x28
+            text run at (0,0) width 120: "SVG nested"
+        RenderBlock {h2} at (0,285) size 220x28
+          RenderText {#text} at (0,0) size 114x28
+            text run at (0,0) width 114: "CSS nested"
+      RenderText {#text} at (240,0) size 4x18
+        text run at (240,0) width 4: " "
+      RenderBlock {div} at (254,10) size 220x542
+        RenderBlock {h2} at (0,19) size 220x28
+          RenderText {#text} at (0,0) size 162x28
+            text run at (0,0) width 162: "SVG compound"
+        RenderBlock {h2} at (0,285) size 220x28
+          RenderText {#text} at (0,0) size 156x28
+            text run at (0,0) width 156: "CSS compound"
+      RenderText {#text} at (0,0) size 0x0
+layer at (28,84) size 200x200
+  RenderBlock (relative positioned) {div} at (10,66) size 200x200 [bgcolor=#C0C0C0] [border: (1px solid #000000)]
+    RenderSVGRoot {svg} at (29,108) size 196x174
+      RenderSVGContainer {g} at (29,108) size 196x174 [transform={m=((1.00,0.00)(0.00,1.00)) t=(75.00,25.00)}]
+        RenderSVGPath {rect} at (103,109) size 62x62 [stroke={[type=SOLID] [color=#000000] [dash array={1.00, 1.00}]}] [x=0.00] [y=0.00] [width=60.00] [height=60.00]
+        RenderSVGContainer {g} at (29,108) size 197x174 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}]
+          RenderSVGPath {rect} at (102,108) size 124x124 [stroke={[type=SOLID] [color=#000000] [dash array={1.00, 1.00}]}] [x=0.00] [y=0.00] [width=60.00] [height=60.00]
+          RenderSVGPath {rect} at (29,106) size 163x178 [transform={m=((0.71,0.71)(-0.71,0.71)) t=(0.00,0.00)}] [stroke={[type=SOLID] [color=#0000FF]}] [x=0.00] [y=0.00] [width=60.00] [height=60.00]
+    RenderText {#text} at (0,0) size 0x0
+layer at (28,350) size 200x200
+  RenderBlock (relative positioned) {div} at (10,332) size 200x200 [bgcolor=#C0C0C0] [border: (1px solid #000000)]
+layer at (29,351) size 60x60
+  RenderBlock (positioned) {div} at (1,1) size 60x60 [border: (1px dotted #000000)]
+layer at (30,352) size 60x60
+  RenderBlock (positioned) {div} at (1,1) size 60x60 [border: (1px dotted #000000)]
+layer at (31,353) size 60x60
+  RenderBlock (positioned) {div} at (1,1) size 60x60 [border: (1px solid #0000FF)]
+layer at (272,84) size 200x200
+  RenderBlock (relative positioned) {div} at (10,66) size 200x200 [bgcolor=#C0C0C0] [border: (1px solid #000000)]
+    RenderSVGRoot {svg} at (273,108) size 162x174
+      RenderSVGPath {rect} at (273,107) size 163x176 [transform={m=((1.41,1.41)(-1.41,1.41)) t=(75.00,25.00)}] [stroke={[type=SOLID] [color=#0000FF]}] [x=0.00] [y=0.00] [width=60.00] [height=60.00]
+    RenderText {#text} at (0,0) size 0x0
+layer at (272,350) size 200x200
+  RenderBlock (relative positioned) {div} at (10,332) size 200x200 [bgcolor=#C0C0C0] [border: (1px solid #000000)]
+layer at (273,351) size 60x60
+  RenderBlock (positioned) {div} at (1,1) size 60x60 [border: (1px solid #0000FF)]
diff --git a/LayoutTests/svg/clip-path/clip-path-css-transform-1.svg b/LayoutTests/svg/clip-path/clip-path-css-transform-1.svg
new file mode 100644 (file)
index 0000000..9735b9f
--- /dev/null
@@ -0,0 +1,11 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<defs>
+<clipPath id="clip" clipPathUnits="userSpaceOnUse" style="-webkit-transform: scale(10) translate(2px, 2px)">
+  <circle cx="10" cy="10" r="10"/>
+  <!-- second circle causes masking -->
+  <circle cx="10" cy="10" r="10"/>
+</clipPath>
+</defs>
+<circle cx="120" cy="120" r="99" fill="red"/>
+<a xlink:href="#"><rect width="220" height="220" fill="green" clip-path="url(#clip)"/></a>
+</svg>
\ No newline at end of file
diff --git a/LayoutTests/svg/clip-path/clip-path-css-transform-2.svg b/LayoutTests/svg/clip-path/clip-path-css-transform-2.svg
new file mode 100644 (file)
index 0000000..2dbbbe7
--- /dev/null
@@ -0,0 +1,9 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<defs>
+<clipPath id="clip" clipPathUnits="userSpaceOnUse" style="-webkit-transform: scale(10) translate(2px, 2px) ">
+  <circle cx="10" cy="10" r="10"/>
+</clipPath>
+</defs>
+<circle cx="120" cy="120" r="99" fill="red"/>
+<a xlink:href="#"><rect width="220" height="220" fill="green" clip-path="url(#clip)"/></a>
+</svg>
\ No newline at end of file
diff --git a/LayoutTests/svg/custom/clip-path-with-css-transform-1.svg b/LayoutTests/svg/custom/clip-path-with-css-transform-1.svg
new file mode 100644 (file)
index 0000000..71cc803
--- /dev/null
@@ -0,0 +1,13 @@
+<svg xmlns="http://www.w3.org/2000/svg"
+     xmlns:xlink="http://www.w3.org/1999/xlink">
+<defs>
+    <clipPath id="myclip">
+        <path style="-webkit-transform: scale(.5)" d="M 0 0 l 200 0 l 0 200 l -200 0 Z"/>
+    </clipPath>
+</defs>
+<g  clip-path="url(#myclip)">
+<rect x="0" y="0" width="200" height="200" fill="red"/>
+<rect x="0" y="0" width="100" height="100" fill="green"/>
+</g>
+</svg>
+
diff --git a/LayoutTests/svg/custom/clip-path-with-css-transform-2.svg b/LayoutTests/svg/custom/clip-path-with-css-transform-2.svg
new file mode 100644 (file)
index 0000000..1d33e5b
--- /dev/null
@@ -0,0 +1,14 @@
+<svg xmlns="http://www.w3.org/2000/svg" 
+     xmlns:xlink="http://www.w3.org/1999/xlink">
+<defs>
+  <clipPath id="myclip">
+    <rect x="0" y="0" width="200" height="200" style="-webkit-transform: scale(.5)"/>
+    <!-- second rect causes masking -->
+    <rect x="0" y="0" width="200" height="200" style="-webkit-transform: scale(.5)"/>
+  </clipPath>
+</defs>
+<g  clip-path="url(#myclip)">
+  <rect x="0" y="0" width="200" height="200" fill="red"/>
+  <rect x="0" y="0" width="100" height="100" fill="green"/>
+</g>
+</svg>
\ No newline at end of file
diff --git a/LayoutTests/svg/custom/pointer-events-image-css-transform.svg b/LayoutTests/svg/custom/pointer-events-image-css-transform.svg
new file mode 100644 (file)
index 0000000..7297ce2
--- /dev/null
@@ -0,0 +1,94 @@
+<?xml version="1.0"?>
+<!-- This a 1-1 copy of pointer-events-image.svg tests with the addition of -webkit-transform -->
+<svg xmlns="http://www.w3.org/2000/svg"
+     xmlns:xlink="http://www.w3.org/1999/xlink" onload="fillTestContent()">
+  <script type="text/javascript">
+  <![CDATA[
+    
+    if (window.layoutTestController)
+        layoutTestController.waitUntilDone();
+  
+    var visibleValues = [ 'visible', 'hidden' ];
+    var fillValues = ['none', 'orange' ];
+    var strokeValues = ['none', 'blue' ];
+  
+    var pointerEventsValues = ['auto', 'visiblePainted', 'visibleFill', 'visibleStroke', 'visible', 'painted', 'fill', 'stroke', 'all', 'none'];
+  
+    var leftEdge = 100;
+    var topEdge = 30;
+    
+    var rectSpacing = 57;
+  
+    var svgNS = "http://www.w3.org/2000/svg";
+    
+    function clickHit(event, identifierString) {
+      var fillText = document.getElementById('fill-text' + identifierString);
+      fillText.textContent = 'HIT';
+    }
+  
+    function fillTestContent() {    
+      var xOffset = leftEdge;
+      var yOffset = topEdge;
+    
+      var testContent = document.getElementById("test-content");
+    
+      for (var pi = 0; pi < pointerEventsValues.length; pi++) {
+        var eventLabel = document.createElementNS(svgNS, 'text');
+        eventLabel.setAttribute('x', 0);
+        eventLabel.setAttribute('y', yOffset + 30);
+        eventLabel.textContent = pointerEventsValues[pi];
+        testContent.appendChild(eventLabel);
+      
+        for (var vi = 0; vi < visibleValues.length; vi++) {
+          for (var fi = 0; fi < fillValues.length; fi++) {
+            for (var si = 0; si < strokeValues.length; si++) {
+            
+              var identString = "_" + pi + "_" + vi + "_" + fi + "_" + si;
+            
+              var img = document.createElementNS(svgNS, 'image');
+              img.setAttributeNS("http://www.w3.org/1999/xlink", 'href', 'resources/red-checker.png');
+              img.setAttribute('x', xOffset/2);
+              img.setAttribute('y', yOffset/2);
+              img.setAttribute('width', 25);
+              img.setAttribute('height', 25);
+              img.setAttribute('visibility', visibleValues[vi]);
+              img.setAttribute('fill', fillValues[fi]);
+              img.setAttribute('stroke', strokeValues[si]);
+              img.setAttribute('pointer-events', pointerEventsValues[pi]);
+              img.setAttribute('style', "-webkit-transform: scale(2)");
+              img.setAttribute('onclick', 'clickHit(evt, "' + identString + '")');
+              
+              testContent.appendChild(img);
+            
+              var fillText = document.createElementNS(svgNS, 'text');
+              fillText.setAttribute('x', xOffset + 5);
+              fillText.setAttribute('y', yOffset + 20);
+              fillText.textContent = "miss";
+              fillText.setAttribute('id', 'fill-text' + identString);
+              fillText.setAttribute('pointer-events', 'none');
+              testContent.appendChild(fillText);
+            
+              if (window.eventSender) {
+                // Fill click
+                eventSender.mouseMoveTo(xOffset + 30, yOffset + 30);
+                eventSender.mouseDown();
+                eventSender.mouseUp();
+              }
+              xOffset += rectSpacing;
+            }
+          }
+        }
+        xOffset = leftEdge;
+        yOffset += rectSpacing;
+      }
+      
+      if (window.layoutTestController)
+        layoutTestController.notifyDone();
+    }
+  ]]>
+  </script>
+  
+  <text x="110" y="20">Visibility: visible</text>
+  <text x="340" y="20">Visibility: hidden</text>
+  <g id="test-content"/>
+</svg>
diff --git a/LayoutTests/svg/custom/pointer-events-text-css-transform.svg b/LayoutTests/svg/custom/pointer-events-text-css-transform.svg
new file mode 100644 (file)
index 0000000..e5d83aa
--- /dev/null
@@ -0,0 +1,92 @@
+<?xml version="1.0"?>
+<!-- This a 1-1 copy of pointer-events-text.svg tests with the addition of -webkit-transform -->
+<svg xmlns="http://www.w3.org/2000/svg" onload="fillTestContent()">
+  <script type="text/javascript">
+  <![CDATA[
+    
+    if (window.layoutTestController)
+        layoutTestController.waitUntilDone();
+  
+    var visibleValues = [ 'visible', 'hidden' ];
+    var fillValues = ['none', 'orange' ];
+    var strokeValues = ['none', 'blue' ];
+  
+    var pointerEventsValues = ['auto', 'visiblePainted', 'visibleFill', 'visibleStroke', 'visible', 'painted', 'fill', 'stroke', 'all', 'none'];
+  
+    var leftEdge = 100;
+    var topEdge = 30;
+    
+    var rectSpacing = 57;
+  
+    var svgNS = "http://www.w3.org/2000/svg";
+    
+    function clickHit(event, identifierString) {
+      var fillText = document.getElementById('fill-text' + identifierString);
+      fillText.textContent = 'HIT';
+    }
+  
+    function fillTestContent() {    
+      var xOffset = leftEdge;
+      var yOffset = topEdge;
+    
+      var testContent = document.getElementById("test-content");
+    
+      for (var pi = 0; pi < pointerEventsValues.length; pi++) {
+        var eventLabel = document.createElementNS(svgNS, 'text');
+        eventLabel.setAttribute('x', 0);
+        eventLabel.setAttribute('y', yOffset + 30);
+        eventLabel.textContent = pointerEventsValues[pi];
+        testContent.appendChild(eventLabel);
+      
+        for (var vi = 0; vi < visibleValues.length; vi++) {
+          for (var fi = 0; fi < fillValues.length; fi++) {
+            for (var si = 0; si < strokeValues.length; si++) {
+            
+              var identString = "_" + pi + "_" + vi + "_" + fi + "_" + si;
+            
+              var txt = document.createElementNS(svgNS, 'text');
+              txt.setAttribute('x', xOffset/2);
+              txt.setAttribute('y', yOffset/2 + 15);
+              txt.setAttribute('font-size', 20);
+              txt.setAttribute('visibility', visibleValues[vi]);
+              txt.setAttribute('fill', fillValues[fi]);
+              txt.setAttribute('stroke', strokeValues[si]);
+              txt.setAttribute('pointer-events', pointerEventsValues[pi]);
+              txt.setAttribute('style', "-webkit-transform: scale(2)");
+              txt.setAttribute('onclick', 'clickHit(evt, "' + identString + '")');
+              txt.appendChild(document.createTextNode("#"));
+              
+              testContent.appendChild(txt);
+            
+              var fillText = document.createElementNS(svgNS, 'text');
+              fillText.setAttribute('x', xOffset + 5);
+              fillText.setAttribute('y', yOffset + 20);
+              fillText.textContent = "miss";
+              fillText.setAttribute('id', 'fill-text' + identString);
+              fillText.setAttribute('pointer-events', 'none');
+              testContent.appendChild(fillText);
+            
+              if (window.eventSender) {
+                // Cell click
+                eventSender.mouseMoveTo(xOffset + 5, yOffset);
+                eventSender.mouseDown();
+                eventSender.mouseUp();
+              }
+              xOffset += rectSpacing;
+            }
+          }
+        }
+        xOffset = leftEdge;
+        yOffset += rectSpacing;
+      }
+      
+      if (window.layoutTestController)
+        layoutTestController.notifyDone();
+    }
+  ]]>
+  </script>
+  
+  <text x="110" y="20">Visibility: visible</text>
+  <text x="340" y="20">Visibility: hidden</text>
+  <g id="test-content"/>
+</svg>
diff --git a/LayoutTests/svg/dom/css-transforms-expected.txt b/LayoutTests/svg/dom/css-transforms-expected.txt
new file mode 100644 (file)
index 0000000..19f4f65
--- /dev/null
@@ -0,0 +1,40 @@
+This is a test of precedency between CSS and SVG transform
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Also, to pass the test, the rectangle should be rotated with 45deg
+
+
+Test SVGTransformList interface
+PASS circle.transform.baseVal.numberOfItems is 0
+PASS circle.getAttribute('transform') is null
+PASS rect.transform.baseVal.numberOfItems is 2
+PASS rect.getAttribute('transform') is "translate(1000, 1000) rotate(90)"
+PASS dumpTransform(rect.transform.baseVal.getItem(0)) is "type=SVG_TRANSFORM_TRANSLATE matrix=[1.0 0.0 0.0 1.0 1000.0 1000.0]"
+PASS dumpTransform(rect.transform.baseVal.getItem(1)) is "type=SVG_TRANSFORM_ROTATE matrix=[0.0 1.0 -1.0 0.0 0.0 0.0]"
+
+Test SVGLocatable interface
+PASS dumpMatrix(circle.getCTM()) is "[2.0 0.0 0.0 2.0 20.0 20.0]"
+PASS dumpMatrix(circle.getScreenCTM()) is "[2.0 0.0 0.0 2.0 28.0 28.0]"
+PASS dumpRect(circle.getBBox()) is "[0 0 80 80]"
+PASS dumpMatrix(circle.getTransformToElement(circle)) is "[1.0 0.0 0.0 1.0 0.0 0.0]"
+PASS dumpMatrix(rect.getCTM()) is "[0.7 0.7 -0.7 0.7 100.0 0.0]"
+PASS dumpMatrix(rect.getScreenCTM()) is "[0.7 0.7 -0.7 0.7 312.0 8.0]"
+PASS dumpRect(rect.getBBox()) is "[40 40 100 100]"
+PASS dumpMatrix(rect.getTransformToElement(rect)) is "[1.0 0.0 0.0 1.0 0.0 0.0]"
+
+Test CSSMatrix
+PASS circle.style.webkitTransform is "scale(2, 2) translate(10px, 10px)"
+PASS dumpMatrix(new WebKitCSSMatrix(circle.style.webkitTransform)) is "[2.0 0.0 0.0 2.0 20.0 20.0]"
+PASS rect.style.webkitTransform is "translate(100px) rotate(45deg)"
+PASS dumpMatrix(new WebKitCSSMatrix(rect.style.webkitTransform)) is "[0.7 0.7 -0.7 0.7 100.0 0.0]"
+
+PASS dumpMatrix(new WebKitCSSMatrix(circle.style.webkitTransform)) is dumpMatrix(circle.getCTM())
+PASS dumpMatrix(new WebKitCSSMatrix(rect.style.webkitTransform)) is dumpMatrix(rect.getCTM())
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dom/css-transforms.xhtml b/LayoutTests/svg/dom/css-transforms.xhtml
new file mode 100644 (file)
index 0000000..18e21ba
--- /dev/null
@@ -0,0 +1,101 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css"/>
+<script>window.enablePixelTesting = true;</script>
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+
+<svg id="svg1" xmlns="http://www.w3.org/2000/svg" width="200" height="200">
+  <circle id="circle" cx="40" cy="40" r="40" fill="green" style="-webkit-transform: scale(2, 2) translate(10px, 10px)"/>
+</svg>
+
+<svg id="svg2" xmlns="http://www.w3.org/2000/svg" width="200" height="200">
+    <rect id="rect" x="40" y="40" height="100" width="100" fill="green" transform="translate(1000, 1000) rotate(90)" style="-webkit-transform: translate(100px) rotate(45deg)"/>
+</svg>
+
+<p id="description"></p>
+<p>Also, to pass the test, the rectangle should be rotated with 45deg</p>
+<div id="console"></div>
+<script type="text/javascript">
+<![CDATA[
+  description("This is a test of precedency between CSS and SVG transform");
+
+
+  function dumpRect(r) {
+    return "[" + r.x
+          + " " + r.y
+          + " " + r.width 
+          + " " + r.height
+          + "]";
+  }
+
+  function dumpMatrix(matrix) {
+    return "[" + matrix.a.toFixed(1)
+          + " " + matrix.b.toFixed(1)
+          + " " + matrix.c.toFixed(1)
+          + " " + matrix.d.toFixed(1)
+          + " " + matrix.e.toFixed(1)
+          + " " + matrix.f.toFixed(1)
+          + "]";
+  }
+
+  function dumpTransform(transform) {
+    var transformTypes = {
+      "0": "SVG_TRANSFORM_UNKNOWN",
+      "1": "SVG_TRANSFORM_MATRIX",
+      "2": "SVG_TRANSFORM_TRANSLATE",
+      "3": "SVG_TRANSFORM_SCALE",
+      "4": "SVG_TRANSFORM_ROTATE",
+      "5": "SVG_TRANSFORM_SKEWX",
+      "6": "SVG_TRANSFORM_SKEWY"
+    };
+
+    return "type=" + transformTypes[transform.type] + " matrix=" + dumpMatrix(transform.matrix);
+  }
+
+  var svg1 = document.getElementById("svg1");
+  var circle = document.getElementById("circle");
+
+  var svg2 = document.getElementById("svg2");
+  var rect = document.getElementById("rect");
+
+  debug("");
+  debug("Test SVGTransformList interface");
+  shouldBe("circle.transform.baseVal.numberOfItems", "0");
+  shouldBeNull("circle.getAttribute('transform')");
+  shouldBe("rect.transform.baseVal.numberOfItems", "2");
+  shouldBeEqualToString("rect.getAttribute('transform')", "translate(1000, 1000) rotate(90)");
+  shouldBeEqualToString("dumpTransform(rect.transform.baseVal.getItem(0))", "type=SVG_TRANSFORM_TRANSLATE matrix=[1.0 0.0 0.0 1.0 1000.0 1000.0]");
+  shouldBeEqualToString("dumpTransform(rect.transform.baseVal.getItem(1))", "type=SVG_TRANSFORM_ROTATE matrix=[0.0 1.0 -1.0 0.0 0.0 0.0]");
+
+  debug("");
+  debug("Test SVGLocatable interface");
+  shouldBeEqualToString("dumpMatrix(circle.getCTM())", "[2.0 0.0 0.0 2.0 20.0 20.0]");
+  shouldBeEqualToString("dumpMatrix(circle.getScreenCTM())", "[2.0 0.0 0.0 2.0 28.0 28.0]");
+  shouldBeEqualToString("dumpRect(circle.getBBox())", "[0 0 80 80]");
+  shouldBeEqualToString("dumpMatrix(circle.getTransformToElement(circle))", "[1.0 0.0 0.0 1.0 0.0 0.0]");
+
+  shouldBeEqualToString("dumpMatrix(rect.getCTM())", "[0.7 0.7 -0.7 0.7 100.0 0.0]");
+  shouldBeEqualToString("dumpMatrix(rect.getScreenCTM())", "[0.7 0.7 -0.7 0.7 312.0 8.0]");
+  shouldBeEqualToString("dumpRect(rect.getBBox())", "[40 40 100 100]");
+  shouldBeEqualToString("dumpMatrix(rect.getTransformToElement(rect))", "[1.0 0.0 0.0 1.0 0.0 0.0]");
+
+  debug("");
+  debug("Test CSSMatrix");
+  shouldBeEqualToString("circle.style.webkitTransform", "scale(2, 2) translate(10px, 10px)");
+  shouldBeEqualToString("dumpMatrix(new WebKitCSSMatrix(circle.style.webkitTransform))", "[2.0 0.0 0.0 2.0 20.0 20.0]");
+  shouldBeEqualToString("rect.style.webkitTransform", "translate(100px) rotate(45deg)");
+  shouldBeEqualToString("dumpMatrix(new WebKitCSSMatrix(rect.style.webkitTransform))", "[0.7 0.7 -0.7 0.7 100.0 0.0]");
+
+  debug("");
+  shouldBe("dumpMatrix(new WebKitCSSMatrix(circle.style.webkitTransform))", "dumpMatrix(circle.getCTM())");
+  shouldBe("dumpMatrix(new WebKitCSSMatrix(rect.style.webkitTransform))", "dumpMatrix(rect.getCTM())");
+
+  debug("");
+  successfullyParsed = true;
+]]>
+</script>
+<script src="../../fast/js/resources/js-test-post.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/svg/dynamic-updates/SVG-dynamic-css-transform-expected.txt b/LayoutTests/svg/dynamic-updates/SVG-dynamic-css-transform-expected.txt
new file mode 100644 (file)
index 0000000..9c4952c
--- /dev/null
@@ -0,0 +1,60 @@
+SVG 1.1 dynamic update tests
+
+Tests dynamic updates of the '-webkit-transform' on SVG element
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Also, to pass the test, the rectangles should be rotated with 45deg
+
+
+Transform via style attribute
+PASS rect1.style.webkitTransform is "translate(100px, 25px) scale(2) rotate(45deg)"
+PASS dumpMatrix(rect1.getCTM()) is "[1.4 1.4 -1.4 1.4 100.0 25.0]"
+PASS dumpMatrix(new WebKitCSSMatrix(rect1.style.webkitTransform)) is "[1.4 1.4 -1.4 1.4 100.0 25.0]"
+PASS dumpMatrix(new WebKitCSSMatrix(rect1.style.webkitTransform)) is dumpMatrix(rect1.getCTM())
+PASS rect1.transform.baseVal.numberOfItems is 0
+PASS rect1.getAttribute('transform') is null
+PASS dumpMatrix(rect2.getCTM()) is "[0.0 1.0 -1.0 0.0 1000.0 1000.0]"
+PASS dumpMatrix(new WebKitCSSMatrix(rect2.style.webkitTransform)) is "[1.0 0.0 0.0 1.0 0.0 0.0]"
+PASS rect2.style.webkitTransform is "translate(100px, 25px) scale(2) rotate(45deg)"
+PASS dumpMatrix(rect2.getCTM()) is "[1.4 1.4 -1.4 1.4 100.0 25.0]"
+PASS dumpMatrix(new WebKitCSSMatrix(rect2.style.webkitTransform)) is "[1.4 1.4 -1.4 1.4 100.0 25.0]"
+PASS dumpMatrix(new WebKitCSSMatrix(rect2.style.webkitTransform)) is dumpMatrix(rect2.getCTM())
+PASS rect2.transform.baseVal.numberOfItems is 2
+PASS rect2.getAttribute('transform') is "translate(1000, 1000) rotate(90)"
+PASS dumpTransform(rect2.transform.baseVal.getItem(0)) is "type=SVG_TRANSFORM_TRANSLATE matrix=[1.0 0.0 0.0 1.0 1000.0 1000.0]"
+PASS dumpTransform(rect2.transform.baseVal.getItem(1)) is "type=SVG_TRANSFORM_ROTATE matrix=[0.0 1.0 -1.0 0.0 0.0 0.0]"
+
+Transform via CSS
+PASS rect3.style.webkitTransform is "translate(100px, 25px) scale(2) rotate(45deg)"
+PASS dumpMatrix(rect3.getCTM()) is "[1.4 1.4 -1.4 1.4 100.0 25.0]"
+PASS dumpMatrix(new WebKitCSSMatrix(rect3.style.webkitTransform)) is "[1.4 1.4 -1.4 1.4 100.0 25.0]"
+PASS dumpMatrix(new WebKitCSSMatrix(rect3.style.webkitTransform)) is dumpMatrix(rect3.getCTM())
+PASS rect3.transform.baseVal.numberOfItems is 0
+PASS rect3.getAttribute('transform') is null
+PASS dumpMatrix(rect2.getCTM()) is "[1.4 1.4 -1.4 1.4 100.0 25.0]"
+PASS dumpMatrix(new WebKitCSSMatrix(rect2.style.webkitTransform)) is "[1.4 1.4 -1.4 1.4 100.0 25.0]"
+PASS rect4.style.webkitTransform is "translate(100px, 25px) scale(2) rotate(45deg)"
+PASS dumpMatrix(rect4.getCTM()) is "[1.4 1.4 -1.4 1.4 100.0 25.0]"
+PASS dumpMatrix(new WebKitCSSMatrix(rect4.style.webkitTransform)) is "[1.4 1.4 -1.4 1.4 100.0 25.0]"
+PASS dumpMatrix(new WebKitCSSMatrix(rect4.style.webkitTransform)) is dumpMatrix(rect4.getCTM())
+PASS rect4.transform.baseVal.numberOfItems is 2
+PASS rect4.getAttribute('transform') is "translate(1000, 1000) rotate(90)"
+PASS dumpTransform(rect4.transform.baseVal.getItem(0)) is "type=SVG_TRANSFORM_TRANSLATE matrix=[1.0 0.0 0.0 1.0 1000.0 1000.0]"
+PASS dumpTransform(rect4.transform.baseVal.getItem(1)) is "type=SVG_TRANSFORM_ROTATE matrix=[0.0 1.0 -1.0 0.0 0.0 0.0]"
+
+Transform on wrapper div
+PASS rect5.style.webkitTransform is ""
+PASS dumpMatrix(rect5.getCTM()) is "[1.0 0.0 0.0 1.0 0.0 0.0]"
+PASS dumpMatrix(new WebKitCSSMatrix(rect5.style.webkitTransform)) is "[1.0 0.0 0.0 1.0 0.0 0.0]"
+PASS dumpMatrix(new WebKitCSSMatrix(rect5.style.webkitTransform)) is dumpMatrix(rect5.getCTM())
+PASS rect5.transform.baseVal.numberOfItems is 0
+PASS rect5.getAttribute('transform') is null
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dynamic-updates/SVG-dynamic-css-transform.html b/LayoutTests/svg/dynamic-updates/SVG-dynamic-css-transform.html
new file mode 100644 (file)
index 0000000..ef2f994
--- /dev/null
@@ -0,0 +1,182 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="resources/SVGTestCase.js"></script>
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+<style type="text/css" media="screen">
+  .column {
+    margin: 10px;
+    display: inline-block;
+    vertical-align: top;
+  }
+  .container {
+    position: relative;
+    height: 200px;
+    width: 200px;
+    margin: 10px;
+    background-color: silver;
+    border: 1px solid black;
+  }
+  #wrapper {
+      position: relative;
+      top: 0;
+      left: 0;
+      height: 60px;
+      width: 60px;
+      -webkit-transform-origin: top left; /* to match SVG */
+  }
+</style>
+</head>
+<body>
+<div class="column">
+  <div class="container">
+    <svg id="svg1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200" style="width:200px; height:200px;">
+      <rect id="rect1" x="0" y="0" height="60" width="60" fill="green"/>
+    </svg>
+  </div>
+  <div class="container">
+    <svg id="svg2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200" style="width:200px; height:200px;">
+      <rect id="rect2" x="0" y="0" height="60" width="60" fill="green" transform="translate(1000, 1000) rotate(90)"/>
+    </svg>
+  </div>
+</div>
+<div class="column">
+  <div class="container">
+    <svg id="svg1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200" style="width:200px; height:200px;">
+      <rect id="rect3" x="0" y="0" height="60" width="60" fill="green"/>
+    </svg>
+  </div>
+  <div class="container">
+    <svg id="svg2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200" style="width:200px; height:200px;">
+      <rect id="rect4" x="0" y="0" height="60" width="60" fill="green" transform="translate(1000, 1000) rotate(90)"/>
+    </svg>
+  </div>
+</div>
+<div class="column">
+  <div class="container">
+    <div id="wrapper">
+      <svg id="svg3" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200" style="width:200px; height:200px;">
+        <rect id="rect5" x="0" y="0" height="60" width="60" fill="green"/>
+      </svg>
+    </div>
+  </div>
+</div>
+<h1>SVG 1.1 dynamic update tests</h1>
+<p id="description"></p>
+<p>Also, to pass the test, the rectangles should be rotated with 45deg</p>
+<div id="console"></div>
+<script>
+// [Expected rendering result] 'Test passed' message - and a series of PASS messages
+
+description("Tests dynamic updates of the '-webkit-transform' on SVG element");
+//createSVGTestCase();
+
+function dumpRect(r) {
+  return "[" + r.x
+        + " " + r.y
+        + " " + r.width 
+        + " " + r.height
+        + "]";
+}
+
+function dumpMatrix(matrix) {
+  return "[" + matrix.a.toFixed(1)
+        + " " + matrix.b.toFixed(1)
+        + " " + matrix.c.toFixed(1)
+        + " " + matrix.d.toFixed(1)
+        + " " + matrix.e.toFixed(1)
+        + " " + matrix.f.toFixed(1)
+        + "]";
+}
+
+function dumpTransform(transform) {
+  var transformTypes = {
+    "0": "SVG_TRANSFORM_UNKNOWN",
+    "1": "SVG_TRANSFORM_MATRIX",
+    "2": "SVG_TRANSFORM_TRANSLATE",
+    "3": "SVG_TRANSFORM_SCALE",
+    "4": "SVG_TRANSFORM_ROTATE",
+    "5": "SVG_TRANSFORM_SKEWX",
+    "6": "SVG_TRANSFORM_SKEWY"
+  };
+
+  return "type=" + transformTypes[transform.type] + " matrix=" + dumpMatrix(transform.matrix);
+}
+
+var rect1 = document.getElementById("rect1");
+var rect2 = document.getElementById("rect2");
+var rect3 = document.getElementById("rect3");
+var rect4 = document.getElementById("rect4");
+var rect5 = document.getElementById("rect5");
+
+var wrapper = document.getElementById("wrapper");
+
+debug("");
+debug("Transform via style attribute");
+rect1.setAttribute("style", "-webkit-transform: translate(100px, 25px) scale(2) rotate(45deg)");
+
+shouldBeEqualToString("rect1.style.webkitTransform", "translate(100px, 25px) scale(2) rotate(45deg)");
+shouldBeEqualToString("dumpMatrix(rect1.getCTM())", "[1.4 1.4 -1.4 1.4 100.0 25.0]");
+shouldBeEqualToString("dumpMatrix(new WebKitCSSMatrix(rect1.style.webkitTransform))", "[1.4 1.4 -1.4 1.4 100.0 25.0]");
+shouldBe("dumpMatrix(new WebKitCSSMatrix(rect1.style.webkitTransform))", "dumpMatrix(rect1.getCTM())");
+shouldBe("rect1.transform.baseVal.numberOfItems", "0");
+shouldBeNull("rect1.getAttribute('transform')");
+
+
+shouldBeEqualToString("dumpMatrix(rect2.getCTM())", "[0.0 1.0 -1.0 0.0 1000.0 1000.0]");
+shouldBeEqualToString("dumpMatrix(new WebKitCSSMatrix(rect2.style.webkitTransform))", "[1.0 0.0 0.0 1.0 0.0 0.0]");
+
+rect2.setAttribute("style", "-webkit-transform: translate(100px, 25px) scale(2) rotate(45deg)");
+
+shouldBeEqualToString("rect2.style.webkitTransform", "translate(100px, 25px) scale(2) rotate(45deg)");
+shouldBeEqualToString("dumpMatrix(rect2.getCTM())", "[1.4 1.4 -1.4 1.4 100.0 25.0]");
+shouldBeEqualToString("dumpMatrix(new WebKitCSSMatrix(rect2.style.webkitTransform))", "[1.4 1.4 -1.4 1.4 100.0 25.0]");
+shouldBe("dumpMatrix(new WebKitCSSMatrix(rect2.style.webkitTransform))", "dumpMatrix(rect2.getCTM())");
+shouldBe("rect2.transform.baseVal.numberOfItems", "2");
+shouldBeEqualToString("rect2.getAttribute('transform')", "translate(1000, 1000) rotate(90)");
+shouldBeEqualToString("dumpTransform(rect2.transform.baseVal.getItem(0))", "type=SVG_TRANSFORM_TRANSLATE matrix=[1.0 0.0 0.0 1.0 1000.0 1000.0]");
+shouldBeEqualToString("dumpTransform(rect2.transform.baseVal.getItem(1))", "type=SVG_TRANSFORM_ROTATE matrix=[0.0 1.0 -1.0 0.0 0.0 0.0]");
+
+debug("");
+debug("Transform via CSS");
+rect3.style.webkitTransform = "translate(100px, 25px) scale(2) rotate(45deg)";
+
+shouldBeEqualToString("rect3.style.webkitTransform", "translate(100px, 25px) scale(2) rotate(45deg)");
+shouldBeEqualToString("dumpMatrix(rect3.getCTM())", "[1.4 1.4 -1.4 1.4 100.0 25.0]");
+shouldBeEqualToString("dumpMatrix(new WebKitCSSMatrix(rect3.style.webkitTransform))", "[1.4 1.4 -1.4 1.4 100.0 25.0]");
+shouldBe("dumpMatrix(new WebKitCSSMatrix(rect3.style.webkitTransform))", "dumpMatrix(rect3.getCTM())");
+shouldBe("rect3.transform.baseVal.numberOfItems", "0");
+shouldBeNull("rect3.getAttribute('transform')");
+
+
+shouldBeEqualToString("dumpMatrix(rect2.getCTM())", "[1.4 1.4 -1.4 1.4 100.0 25.0]");
+shouldBeEqualToString("dumpMatrix(new WebKitCSSMatrix(rect2.style.webkitTransform))", "[1.4 1.4 -1.4 1.4 100.0 25.0]");
+
+rect4.style.webkitTransform = "translate(100px, 25px) scale(2) rotate(45deg)";
+
+shouldBeEqualToString("rect4.style.webkitTransform", "translate(100px, 25px) scale(2) rotate(45deg)");
+shouldBeEqualToString("dumpMatrix(rect4.getCTM())", "[1.4 1.4 -1.4 1.4 100.0 25.0]");
+shouldBeEqualToString("dumpMatrix(new WebKitCSSMatrix(rect4.style.webkitTransform))", "[1.4 1.4 -1.4 1.4 100.0 25.0]");
+shouldBe("dumpMatrix(new WebKitCSSMatrix(rect4.style.webkitTransform))", "dumpMatrix(rect4.getCTM())");
+shouldBe("rect4.transform.baseVal.numberOfItems", "2");
+shouldBeEqualToString("rect4.getAttribute('transform')", "translate(1000, 1000) rotate(90)");
+shouldBeEqualToString("dumpTransform(rect4.transform.baseVal.getItem(0))", "type=SVG_TRANSFORM_TRANSLATE matrix=[1.0 0.0 0.0 1.0 1000.0 1000.0]");
+shouldBeEqualToString("dumpTransform(rect4.transform.baseVal.getItem(1))", "type=SVG_TRANSFORM_ROTATE matrix=[0.0 1.0 -1.0 0.0 0.0 0.0]");
+
+debug("");
+debug("Transform on wrapper div");
+wrapper.style.webkitTransform = "translate(100px, 25px) scale(2) rotate(45deg)";
+shouldBeEqualToString("rect5.style.webkitTransform", "");
+shouldBeEqualToString("dumpMatrix(rect5.getCTM())", "[1.0 0.0 0.0 1.0 0.0 0.0]");
+shouldBeEqualToString("dumpMatrix(new WebKitCSSMatrix(rect5.style.webkitTransform))", "[1.0 0.0 0.0 1.0 0.0 0.0]");
+shouldBe("dumpMatrix(new WebKitCSSMatrix(rect5.style.webkitTransform))", "dumpMatrix(rect5.getCTM())");
+shouldBe("rect5.transform.baseVal.numberOfItems", "0");
+shouldBeNull("rect5.getAttribute('transform')");
+
+debug("");
+var successfullyParsed = true;
+</script>
+<script src="../../fast/js/resources/js-test-post.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/svg/dynamic-updates/SVGClipPathElement-css-transform-influences-hitTesting-expected.txt b/LayoutTests/svg/dynamic-updates/SVGClipPathElement-css-transform-influences-hitTesting-expected.txt
new file mode 100644 (file)
index 0000000..ba5f7e5
--- /dev/null
@@ -0,0 +1,13 @@
+SVG 1.1 dynamic update tests
+
+Tests hitTesting on clipped Elements. Clip-path gets CSS transformed.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS Hit thrown on not clipped area of rect.
+PASS Hit thrown on not clipped area of rect.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dynamic-updates/SVGClipPathElement-css-transform-influences-hitTesting.html b/LayoutTests/svg/dynamic-updates/SVGClipPathElement-css-transform-influences-hitTesting.html
new file mode 100644 (file)
index 0000000..9bcbee4
--- /dev/null
@@ -0,0 +1,14 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="resources/SVGTestCase.js"></script>
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<h1>SVG 1.1 dynamic update tests</h1>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/SVGClipPathElement-css-transform-influences-hitTesting.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dynamic-updates/script-tests/SVGClipPathElement-css-transform-influences-hitTesting.js b/LayoutTests/svg/dynamic-updates/script-tests/SVGClipPathElement-css-transform-influences-hitTesting.js
new file mode 100644 (file)
index 0000000..6798f52
--- /dev/null
@@ -0,0 +1,44 @@
+// [Name] SVGClipPathElement-transform-influences-hitTesting.js
+// [Expected rendering result] green circle - and a series of PASS messages
+
+description("Tests hitTesting on clipped Elements. Clip-path gets CSS transformed.")
+createSVGTestCase();
+
+var defsElement = createSVGElement("defs");
+rootSVGElement.appendChild(defsElement);
+
+var clipPathElement = createSVGElement("clipPath");
+clipPathElement.setAttribute("id", "clipper");
+
+var clipRectElement = createSVGElement("rect");
+clipRectElement.setAttribute("width", "5");
+clipRectElement.setAttribute("height", "5");
+clipRectElement.setAttribute("style", "-webkit-transform: scale(20)");
+clipPathElement.appendChild(clipRectElement);
+
+defsElement.appendChild(clipPathElement);
+
+var foregroundRect = createSVGElement("rect");
+foregroundRect.setAttribute("width", "100");
+foregroundRect.setAttribute("height", "100");
+foregroundRect.setAttribute("fill", "green");
+foregroundRect.setAttribute("clip-path", "url(#clipper)");
+foregroundRect.setAttribute("onclick", "executeBackgroundTest()");
+rootSVGElement.appendChild(foregroundRect);
+
+// The clipPath gets scaled by 20. This should influence the hit testing,
+// since the area of the clipped content is affected as well. 
+function executeBackgroundTest() {
+    window.setTimeout("triggerUpdate(75,50)", 0);
+    startTest(foregroundRect, 25, 50);
+}
+
+function executeTest() {
+    testPassed("Hit thrown on not clipped area of rect.");
+
+    completeTest();
+}
+
+executeBackgroundTest();
+
+var successfullyParsed = true;
diff --git a/LayoutTests/svg/transforms/svg-css-transforms-clip-path.xhtml b/LayoutTests/svg/transforms/svg-css-transforms-clip-path.xhtml
new file mode 100644 (file)
index 0000000..6132631
--- /dev/null
@@ -0,0 +1,101 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+  <title>SVG clip-path CSS transform</title>
+  <style type="text/css" media="screen">
+    div {
+      -webkit-box-sizing: border-box;
+    }
+    
+    .column {
+      margin: 10px;
+      display: inline-block;
+      vertical-align: top;
+    }
+    .container {
+      position: relative;
+      height: 200px;
+      width: 200px;
+      margin: 10px;
+      background-color: silver;
+      border: 1px solid black;
+    }
+    
+    .box {
+      position: absolute;
+      top: 0;
+      left: 0;
+      height: 60px;
+      width: 60px;
+      border: 1px dotted black;
+      -webkit-transform-origin: top left; /* to match SVG */
+    }
+    
+    .final {
+      border: 1px solid blue;
+    }
+  </style>
+</head>
+
+<body>
+
+<div class="column">
+  <h2>SVG CSS scale</h2>
+  <div class="container">
+    <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <defs>
+      <circle id="circle1" cx="10" cy="10" r="20" style="-webkit-transform:scale(5)"/>
+      <clipPath id="clip-circle1">
+        <use xlink:href="#circle1"/>
+      </clipPath>
+    </defs>
+    <rect id="rect" x="10" y="10" width="200" height="200" fill="green" clip-path="url(#clip-circle1)"/>
+    </svg>
+  </div>
+
+  <h2>SVG scale</h2>
+  <div class="container">
+    <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <defs>
+      <circle id="circle2" cx="10" cy="10" r="20" transform="scale(5)"/>
+      <clipPath id="clip-circle2">
+        <use xlink:href="#circle2"/>
+      </clipPath>
+    </defs>
+    <rect id="rect" x="10" y="10" width="200" height="200" fill="green" clip-path="url(#clip-circle2)"/>
+    </svg>
+  </div>
+</div>
+
+<div class="column">
+  <h2>SVG CSS compound</h2>
+  <div class="container">
+    <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <defs>
+      <rect id="rect1" x="1" y="1" width="40" height="40" style="-webkit-transform:rotate(45deg) scale(5)"/>
+      <clipPath id="clip-rect1">
+        <use xlink:href="#rect1"/>
+      </clipPath>
+    </defs>
+    <rect id="rect" x="10" y="10" width="200" height="200" fill="green" clip-path="url(#clip-rect1)"/>
+    </svg>
+  </div>
+
+  <h2>SVG compound</h2>
+  <div class="container">
+    <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+      <defs>
+        <rect id="rect2" x="1" y="1" width="40" height="40" transform="rotate(45) scale(5)"/>
+        <clipPath id="clip-rect2">
+          <use xlink:href="#rect2"/>
+        </clipPath>
+      </defs>
+      <rect id="rect" x="10" y="10" width="200" height="200" fill="green" clip-path="url(#clip-rect2)"/>
+    </svg>
+  </div>
+</div>
+
+</body>
+</html>
diff --git a/LayoutTests/svg/transforms/svg-css-transforms.xhtml b/LayoutTests/svg/transforms/svg-css-transforms.xhtml
new file mode 100644 (file)
index 0000000..bae40ad
--- /dev/null
@@ -0,0 +1,102 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+  <title>Matrix testing</title>
+  <style type="text/css" media="screen">
+    div {
+      -webkit-box-sizing: border-box;
+    }
+    
+    .column {
+      margin: 10px;
+      display: inline-block;
+      vertical-align: top;
+    }
+    .container {
+      position: relative;
+      height: 200px;
+      width: 200px;
+      margin: 10px;
+      background-color: silver;
+      border: 1px solid black;
+    }
+    
+    .box {
+      position: absolute;
+      top: 0;
+      left: 0;
+      height: 60px;
+      width: 60px;
+      border: 1px dotted black;
+      -webkit-transform-origin: top left; /* to match SVG */
+    }
+
+    #group1 {
+      -webkit-transform: translate(75px, 25px);
+    }
+
+    #group2 {
+      -webkit-transform: scale(2);
+    }
+
+    #group3 {
+      -webkit-transform: rotate(45deg);
+    }
+
+    #rect1 {
+      -webkit-transform: translate(75px, 25px) scale(2) rotate(45deg);
+    }
+    
+    .final {
+      border: 1px solid blue;
+    }
+  </style>
+</head>
+
+<body>
+
+<div class="column">
+  <h2>SVG nested</h2>
+  <div class="container">
+    <svg xmlns="http://www.w3.org/2000/svg" version="1.1"  
+         viewBox="0 0 200 200" style="width:200px; height:200px;">
+      <g id="group1" x="0" y="0" width="60" height="60">
+        <rect x="0" y="0" width="60" height="60" stroke="black" stroke-width="1px" stroke-dasharray="1 1" fill="none" />
+        <g id="group2" x="0" y="0" width="60" height="60" >
+          <rect x="0" y="0" width="60" height="60" stroke="black" stroke-dasharray="1 1" stroke-width="1px" fill="none" />
+          <rect id="group3" x="0" y="0" width="60" height="60" stroke="blue" fill="none" />
+        </g>
+      </g>
+    </svg>
+  </div>
+
+  <h2>CSS nested</h2>
+  <div class="container">
+    <div id="box1" class="box" style="-webkit-transform: translate(75px, 25px)">
+      <div id="box2" class="box" style="-webkit-transform: scale(2)">
+        <div id="box3" class="final box" style="-webkit-transform: rotate(45deg)">
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
+
+<div class="column">
+  <h2>SVG compound</h2>
+  <div class="container">
+    <svg xmlns="http://www.w3.org/2000/svg" version="1.1"  
+         viewBox="0 0 200 200" style="width:200px; height:200px;">
+      <rect id="rect1" x="0" y="0" width="60" height="60" stroke="blue" fill="none"/>
+    </svg>
+  </div>
+
+  <h2>CSS compound</h2>
+  <div class="container">
+    <div class="final box" style="-webkit-transform: translate(75px, 25px) scale(2) rotate(45deg)">
+    </div>
+  </div>
+</div>
+</body>
+</html>
index 0348372..437ab2c 100644 (file)
@@ -1,3 +1,45 @@
+2011-11-23  Raul Hudea  <rhudea@adobe.com>
+
+        First step towards http://webkit.org/b/70025
+
+        Allow -webkit-transform to be have effect to SVG elements.
+        Currently, the CSS transform takes precedence over the SVG transform attribute
+
+        Allow SVG elements to be transformed using webkit-transform
+        https://bugs.webkit.org/show_bug.cgi?id=71309
+
+        Reviewed by Nikolas Zimmermann.
+
+        Tests: svg/clip-path/clip-path-css-transform-1.svg
+               svg/clip-path/clip-path-css-transform-2.svg
+               svg/custom/clip-path-with-css-transform-1.svg
+               svg/custom/clip-path-with-css-transform-2.svg
+               svg/custom/pointer-events-image-css-transform.svg
+               svg/custom/pointer-events-text-css-transform.svg
+               svg/dom/css-transforms.xhtml
+               svg/dynamic-updates/SVG-dynamic-css-transform.html
+               svg/dynamic-updates/SVGClipPathElement-css-transform-influences-hitTesting.html
+               svg/transforms/svg-css-transforms-clip-path.xhtml
+               svg/transforms/svg-css-transforms.xhtml
+
+        * manual-tests/svg-animation-css-transform.html: Added.
+        * manual-tests/svg-css-animate-compound.html: Added.
+        * manual-tests/svg-css-transition-compound.html: Added.
+        * rendering/svg/RenderSVGModelObject.cpp:
+        (WebCore::RenderSVGModelObject::styleWillChange):
+
+        Set the updateTransform flag on SVG elements whenever a CSS transform is present on the style
+
+        * svg/SVGStyledTransformableElement.cpp:
+        (WebCore::SVGStyledTransformableElement::animatedLocalTransform):
+
+        Use the RenderStyle's transform (if it exists) over the SVG's transform
+
+        * svg/SVGTextElement.cpp:
+        (WebCore::SVGTextElement::animatedLocalTransform):
+
+        Use the RenderStyle's transform (if it exists) over the SVG's transform
+
 2011-11-23  Rafael Weinstein  <rafaelw@chromium.org>
 
         [MutationObservers] Cleanup duplicated code in Element & CharacterData
diff --git a/Source/WebCore/manual-tests/svg-animation-css-transform.html b/Source/WebCore/manual-tests/svg-animation-css-transform.html
new file mode 100644 (file)
index 0000000..320cdcb
--- /dev/null
@@ -0,0 +1,20 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+   "http://www.w3.org/TR/html4/loose.dtd">
+
+<html lang="en">
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+  <title>SVG Animation of elements transformed using -webkit-transform</title>
+</head>
+<body>
+  <h1>SVG Animation of SVG element rotated using '-webkit-transform'</h1>
+
+  <p>The rotated rect should from 0,0 to 100,0 over 3 seconds.</p>
+
+  <svg xmlns='http://www.w3.org/2000/svg'>
+    <rect id="target" width='100' height='100' stroke="blue" fill="none" style="-webkit-transform: rotate(45deg)">
+      <animateMotion to='100,0' dur='3s' />
+    </rect>
+  </svg>
+</body>
+</html>
\ No newline at end of file
diff --git a/Source/WebCore/manual-tests/svg-css-animate-compound.html b/Source/WebCore/manual-tests/svg-css-animate-compound.html
new file mode 100644 (file)
index 0000000..23b84fb
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+   "http://www.w3.org/TR/html4/loose.dtd">
+
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>Animation of rotate property</title>
+<style type="text/css" media="screen">
+  div {
+    -webkit-box-sizing: border-box;
+  }
+  
+  .column {
+    margin: 10px;
+    display: inline-block;
+    vertical-align: top;
+  }
+  .container {
+    position: relative;
+    height: 200px;
+    width: 200px;
+    margin: 10px;
+    background-color: silver;
+    border: 1px solid black;
+  }
+  
+  .box {
+    position: absolute;
+    top: 0;
+    left: 0;
+    height: 60px;
+    width: 60px;
+    border: 1px dotted black;
+    -webkit-transform-origin: top left; /* to match SVG */
+  }
+
+  .final {
+    border: 1px solid blue;
+  }
+  
+  #target, #ref {
+    -webkit-animation-name: bounce;
+    -webkit-animation-duration: 2s;
+    -webkit-animation-iteration-count: infinite;
+    -webkit-animation-direction: alternate;
+    -webkit-animation-timing-function: ease-in-out;
+  }
+       
+  @-webkit-keyframes bounce {
+    from {
+      -webkit-transform: translate(0px, 0px) scale(1) rotate(0deg);
+    }
+    to {
+      -webkit-transform: translate(75px, 25px) scale(2) rotate(45deg);
+    }
+  }    
+</style>
+</head>
+<body>
+  <h1>CSS Animation of 'webkit-transform:' property for SVG</h1>
+
+  <p>The SVG animation should be identical with the CSS one</p>
+
+  <div class="column">
+    <h2>SVG compound</h2>
+    <div class="container">
+      <svg xmlns="http://www.w3.org/2000/svg" version="1.1"  
+           viewBox="0 0 200 200" style="width:200px; height:200px;">
+        <rect id="target" x="0" y="0" width="60" height="60" stroke="blue" fill="none">
+        </rect>
+      </svg>
+    </div>
+
+    <h2>CSS compound</h2>
+    <div class="container">
+      <div class="final box" id="ref">
+      </div>
+    </div>
+  </div>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/Source/WebCore/manual-tests/svg-css-transition-compound.html b/Source/WebCore/manual-tests/svg-css-transition-compound.html
new file mode 100644 (file)
index 0000000..0cd9069
--- /dev/null
@@ -0,0 +1,93 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+   "http://www.w3.org/TR/html4/loose.dtd">
+
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>CSS Transition of SVG elements</title>
+
+<style type="text/css" media="screen">
+  div {
+    -webkit-box-sizing: border-box;
+  }
+  
+  .column {
+    margin: 10px;
+    display: inline-block;
+    vertical-align: top;
+  }
+  .container {
+    position: relative;
+    height: 200px;
+    width: 200px;
+    margin: 10px;
+    background-color: silver;
+    border: 1px solid black;
+  }
+  
+  .box {
+    position: absolute;
+    top: 0;
+    left: 0;
+    height: 60px;
+    width: 60px;
+    border: 1px dotted black;
+    -webkit-transform-origin: top left; /* to match SVG */
+  }
+
+  .final {
+    border: 1px solid blue;
+  }
+  
+  #target, #ref {
+    -webkit-transition-property: -webkit-transform;
+    -webkit-transition-duration: 1s;
+  }   
+</style>
+
+<script type="text/javascript" charset="utf-8">
+  var flag = true;
+  
+  function transition() {
+    var svgElm = document.getElementById("target");
+    var divElm = document.getElementById("ref");
+
+    if (flag) {
+      svgElm.style.webkitTransform = "translate(75px, 25px) scale(2) rotate(45deg)";
+      divElm.style.webkitTransform = "translate(75px, 25px) scale(2) rotate(45deg)";
+    }
+    else {
+      svgElm.style.webkitTransform = "translate(0px, 0px) scale(1) rotate(0deg)";
+      divElm.style.webkitTransform = "translate(0px, 0px) scale(1) rotate(0deg)";
+    }
+    flag = !flag;
+  }
+</script>
+</head>
+<body>
+  <h1>CSS Transition of "-webkit-trasform" property for SVG elements</h1>
+
+  <p>The element below should transition when button is clicked</p> 
+  <p>The SVG transition should be identical with the CSS one</p>
+
+  <input type="button" value="Transition" onclick="transition()" />
+
+  <div class="column">
+    <h2>SVG compound</h2>
+    <div class="container">
+      <svg xmlns="http://www.w3.org/2000/svg" version="1.1"  
+          viewBox="0 0 200 200" style="width:200px; height:200px;">
+        <rect id="target" x="0" y="0" width="60" height="60" stroke="blue" fill="none">
+        </rect>
+      </svg>
+    </div>
+
+    <h2>CSS compound</h2>
+    <div class="container">
+      <div class="final box" id="ref">
+      </div>
+    </div>
+  </div>
+
+</body>
+</html>
\ No newline at end of file
index 7e09c76..7d236af 100644 (file)
@@ -91,8 +91,11 @@ void RenderSVGModelObject::willBeDestroyed()
 
 void RenderSVGModelObject::styleWillChange(StyleDifference diff, const RenderStyle* newStyle)
 {
-    if (diff == StyleDifferenceLayout)
+    if (diff == StyleDifferenceLayout) {
         setNeedsBoundariesUpdate();
+        if (newStyle->hasTransform())
+            setNeedsTransformUpdate();
+    }
     RenderObject::styleWillChange(diff, newStyle);
 }
 
index 6c96569..7ccebb9 100644 (file)
@@ -64,7 +64,19 @@ AffineTransform SVGStyledTransformableElement::getScreenCTM(StyleUpdateStrategy
 AffineTransform SVGStyledTransformableElement::animatedLocalTransform() const
 {
     AffineTransform matrix;
-    transform().concatenate(matrix);
+    RenderStyle* style = renderer()->style();
+
+    // if CSS property was set, use that, otherwise fallback to attribute (if set)
+    if (style->hasTransform()) {
+        TransformationMatrix t;
+        // For now, the transform-origin is not taken into account
+        // Also, any percentage values will not be taken into account
+        style->applyTransform(t, IntSize(0, 0), RenderStyle::ExcludeTransformOrigin);
+        // Flatten any 3D transform
+        matrix = t.toAffineTransform();
+    } else
+        transform().concatenate(matrix);
+
     if (m_supplementalTransform)
         return *m_supplementalTransform * matrix;
     return matrix;
index e0f5eba..ab92324 100644 (file)
@@ -111,7 +111,19 @@ AffineTransform SVGTextElement::getScreenCTM(StyleUpdateStrategy styleUpdateStra
 AffineTransform SVGTextElement::animatedLocalTransform() const
 {
     AffineTransform matrix;
-    transform().concatenate(matrix);
+    RenderStyle* style = renderer()->style();
+
+    // if CSS property was set, use that, otherwise fallback to attribute (if set)
+    if (style->hasTransform()) {
+        TransformationMatrix t;
+        // For now, the transform-origin is not taken into account
+        // Also, any percentage values will not be taken into account
+        style->applyTransform(t, IntSize(0, 0), RenderStyle::ExcludeTransformOrigin);
+        // Flatten any 3D transform
+        matrix = t.toAffineTransform();
+    } else
+        transform().concatenate(matrix);
+
     if (m_supplementalTransform)
         return *m_supplementalTransform * matrix;
     return matrix;