2006-01-15 Eric Seidel <eseidel@apple.com>
authoreseidel <eseidel@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 15 Jan 2006 10:47:29 +0000 (10:47 +0000)
committereseidel <eseidel@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 15 Jan 2006 10:47:29 +0000 (10:47 +0000)
        Reviewed by mjs.

        Add basic <tspan> support using RenderInline.
        http://bugzilla.opendarwin.org/show_bug.cgi?id=6428
        Also fix <text transform=""> while we're at it.
        http://bugzilla.opendarwin.org/show_bug.cgi?id=6552

        * ksvg2/svg/SVGGradientElementImpl.cpp:
        (SVGGradientElementImpl::parseMappedAttribute): code cleanup
        * ksvg2/svg/SVGPatternElementImpl.cpp:
        (SVGPatternElementImpl::parseMappedAttribute): code cleanup
        * ksvg2/svg/SVGStyledTransformableElementImpl.cpp:
        (SVGStyledTransformableElementImpl::parseMappedAttribute): cleanup
        * ksvg2/svg/SVGTSpanElementImpl.cpp:
        (SVGTSpanElementImpl::childShouldCreateRenderer): added.
        (SVGTSpanElementImpl::createRenderer): added.
        * ksvg2/svg/SVGTSpanElementImpl.h:
        (KSVG::SVGTSpanElementImpl::rendererIsNeeded): added.
        * ksvg2/svg/SVGTextElementImpl.cpp:
        (SVGTextElementImpl::transform): added.
        (SVGTextElementImpl::localMatrix): added.
        (SVGTextElementImpl::parseMappedAttribute): support transform.
        (SVGTextElementImpl::updateLocalTransform): added.
        (SVGTextElementImpl::attach): added.
        (SVGTextElementImpl::childShouldCreateRenderer): allow tspan.
        * ksvg2/svg/SVGTextElementImpl.h:
        * ksvg2/svg/SVGTransformableImpl.cpp:
        (SVGTransformableImpl::parseTransformAttribute): code cleanup.
        * ksvg2/svg/SVGTransformableImpl.h:

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

39 files changed:
LayoutTests/ChangeLog
LayoutTests/svg/W3C-SVG-1.1/animate-elem-24-t-expected.checksum
LayoutTests/svg/W3C-SVG-1.1/animate-elem-24-t-expected.png
LayoutTests/svg/W3C-SVG-1.1/filters-conv-01-f-expected.checksum
LayoutTests/svg/W3C-SVG-1.1/filters-conv-01-f-expected.png
LayoutTests/svg/W3C-SVG-1.1/filters-displace-01-f-expected.checksum
LayoutTests/svg/W3C-SVG-1.1/filters-displace-01-f-expected.png
LayoutTests/svg/W3C-SVG-1.1/filters-displace-01-f-expected.txt
LayoutTests/svg/W3C-SVG-1.1/text-align-02-b-expected.checksum
LayoutTests/svg/W3C-SVG-1.1/text-align-02-b-expected.png
LayoutTests/svg/W3C-SVG-1.1/text-align-02-b-expected.txt
LayoutTests/svg/W3C-SVG-1.1/text-align-03-b-expected.checksum
LayoutTests/svg/W3C-SVG-1.1/text-align-03-b-expected.png
LayoutTests/svg/W3C-SVG-1.1/text-align-03-b-expected.txt
LayoutTests/svg/W3C-SVG-1.1/text-align-04-b-expected.checksum
LayoutTests/svg/W3C-SVG-1.1/text-align-04-b-expected.png
LayoutTests/svg/W3C-SVG-1.1/text-align-04-b-expected.txt
LayoutTests/svg/W3C-SVG-1.1/text-align-06-b-expected.checksum
LayoutTests/svg/W3C-SVG-1.1/text-align-06-b-expected.png
LayoutTests/svg/W3C-SVG-1.1/text-align-06-b-expected.txt
LayoutTests/svg/W3C-SVG-1.1/text-deco-01-b-expected.checksum
LayoutTests/svg/W3C-SVG-1.1/text-deco-01-b-expected.png
LayoutTests/svg/W3C-SVG-1.1/text-deco-01-b-expected.txt
LayoutTests/svg/W3C-SVG-1.1/text-tselect-01-b-expected.checksum
LayoutTests/svg/W3C-SVG-1.1/text-tselect-01-b-expected.png
LayoutTests/svg/W3C-SVG-1.1/text-tselect-01-b-expected.txt
LayoutTests/svg/W3C-SVG-1.1/text-tspan-01-b-expected.checksum
LayoutTests/svg/W3C-SVG-1.1/text-tspan-01-b-expected.png
LayoutTests/svg/W3C-SVG-1.1/text-tspan-01-b-expected.txt
WebCore/ChangeLog
WebCore/ksvg2/svg/SVGGradientElementImpl.cpp
WebCore/ksvg2/svg/SVGPatternElementImpl.cpp
WebCore/ksvg2/svg/SVGStyledTransformableElementImpl.cpp
WebCore/ksvg2/svg/SVGTSpanElementImpl.cpp
WebCore/ksvg2/svg/SVGTSpanElementImpl.h
WebCore/ksvg2/svg/SVGTextElementImpl.cpp
WebCore/ksvg2/svg/SVGTextElementImpl.h
WebCore/ksvg2/svg/SVGTransformableImpl.cpp
WebCore/ksvg2/svg/SVGTransformableImpl.h

index c2d37c9446273a2a54eaef197eb55aa048d1141e..411c3c8bc1ebf5c7129712b0eb0d52869fcb13fc 100644 (file)
@@ -1,3 +1,41 @@
+2006-01-15  Eric Seidel  <eseidel@apple.com>
+
+        Reviewed by mjs.
+
+        Add basic <tspan> support using RenderInline.
+        http://bugzilla.opendarwin.org/show_bug.cgi?id=6428
+        Also fix <text transform=""> while we're at it.
+        http://bugzilla.opendarwin.org/show_bug.cgi?id=6552
+
+        * svg/W3C-SVG-1.1/animate-elem-24-t-expected.checksum:
+        * svg/W3C-SVG-1.1/animate-elem-24-t-expected.png:
+        * svg/W3C-SVG-1.1/filters-conv-01-f-expected.checksum:
+        * svg/W3C-SVG-1.1/filters-conv-01-f-expected.png:
+        * svg/W3C-SVG-1.1/filters-displace-01-f-expected.checksum:
+        * svg/W3C-SVG-1.1/filters-displace-01-f-expected.png:
+        * svg/W3C-SVG-1.1/filters-displace-01-f-expected.txt:
+        * svg/W3C-SVG-1.1/text-align-02-b-expected.checksum:
+        * svg/W3C-SVG-1.1/text-align-02-b-expected.png:
+        * svg/W3C-SVG-1.1/text-align-02-b-expected.txt:
+        * svg/W3C-SVG-1.1/text-align-03-b-expected.checksum:
+        * svg/W3C-SVG-1.1/text-align-03-b-expected.png:
+        * svg/W3C-SVG-1.1/text-align-03-b-expected.txt:
+        * svg/W3C-SVG-1.1/text-align-04-b-expected.checksum:
+        * svg/W3C-SVG-1.1/text-align-04-b-expected.png:
+        * svg/W3C-SVG-1.1/text-align-04-b-expected.txt:
+        * svg/W3C-SVG-1.1/text-align-06-b-expected.checksum:
+        * svg/W3C-SVG-1.1/text-align-06-b-expected.png:
+        * svg/W3C-SVG-1.1/text-align-06-b-expected.txt:
+        * svg/W3C-SVG-1.1/text-deco-01-b-expected.checksum:
+        * svg/W3C-SVG-1.1/text-deco-01-b-expected.png:
+        * svg/W3C-SVG-1.1/text-deco-01-b-expected.txt:
+        * svg/W3C-SVG-1.1/text-tselect-01-b-expected.checksum:
+        * svg/W3C-SVG-1.1/text-tselect-01-b-expected.png:
+        * svg/W3C-SVG-1.1/text-tselect-01-b-expected.txt:
+        * svg/W3C-SVG-1.1/text-tspan-01-b-expected.checksum:
+        * svg/W3C-SVG-1.1/text-tspan-01-b-expected.png:
+        * svg/W3C-SVG-1.1/text-tspan-01-b-expected.txt:
+
 2006-01-14  Eric Seidel  <eseidel@apple.com>
 
         Reviewed by darin.
index 9a0bd59124c37a22221888da01b202df7ed0cf26..cb02b3c05d47957676a35851d9f12835c586d36a 100644 (file)
@@ -1 +1 @@
-154538daa9ad4ff1be58236dc1edc3a6
\ No newline at end of file
+32ca02a5a404ea20b47421b2b707aa00
\ No newline at end of file
index aed3f1af2ab849fa42c018bbdb6f6817b3774086..23fb4ac0b41fda7883bb2f793a7eeef5b0f7d29d 100644 (file)
Binary files a/LayoutTests/svg/W3C-SVG-1.1/animate-elem-24-t-expected.png and b/LayoutTests/svg/W3C-SVG-1.1/animate-elem-24-t-expected.png differ
index f6b0eb865d60517ac4a51b931ffc3c6748c3fd74..c682888a8209c9003fce54d590fba108feb8e27e 100644 (file)
@@ -1 +1 @@
-47b1ec0b7e38404ca93773460b972416
\ No newline at end of file
+efbe15256115d122d848d72cba378bca
\ No newline at end of file
index 988e54aa29282b18bb4caf92ace3e3e2a8bd0834..de646bdc8addb2762a78eaa4f4b2cec02f9e1573 100644 (file)
Binary files a/LayoutTests/svg/W3C-SVG-1.1/filters-conv-01-f-expected.png and b/LayoutTests/svg/W3C-SVG-1.1/filters-conv-01-f-expected.png differ
index 4da3795143de325631dacf263d4604725f90ad56..a78ef28b838745629d4ed042e44723bb31ff4a6c 100644 (file)
@@ -1 +1 @@
-188fee55cb366923d24200c0f79fb9c5
\ No newline at end of file
+3472de2d21efb6c7c41752bcfbefccd9
\ No newline at end of file
index bb0bdd35c848e3818b36f5d1bf635f743cc2232c..d6125a94b823bb15d028cac86815f38c48be60b1 100644 (file)
Binary files a/LayoutTests/svg/W3C-SVG-1.1/filters-displace-01-f-expected.png and b/LayoutTests/svg/W3C-SVG-1.1/filters-displace-01-f-expected.png differ
index 14915abe2efcfc2e4dd1fd8ab581eec486d9f5dc..31f5523ff547426992715c7209a75c1da5e6ee2f 100644 (file)
@@ -15,10 +15,31 @@ layer at (0,0) size 480x360
               text run at (0,0) width 115: "Checkerboard Image"
           KCanvasItem {rect} at (158,15) size 128x128 [fill={[type=SOLID] [color=#000000]}] [filter=#RotateMap] [data="M158.00,15.00L286.00,15.00L286.00,143.00L158.00,143.00"]
           KCanvasItem {rect} at (163,112) size 118x30 [fill={[type=SOLID] [color=#DDDDDD]}] [data="M163.00,112.00L281.00,112.00L281.00,142.00L163.00,142.00"]
-          RenderSVGText {text} at (0,0) size 465x0
+          RenderSVGText {text} at (0,0) size 465x14
+            RenderInline {tspan} at (0,0) size 102x14
+              RenderText {TEXT} at (0,0) size 102x14
+                text run at (0,0) width 102: "Displacement Map"
+            RenderText {TEXT} at (102,0) size 3x14
+              text run at (102,0) width 3: " "
+            RenderInline {tspan} at (0,0) size 93x14
+              RenderText {TEXT} at (105,0) size 93x14
+                text run at (105,0) width 93: "(20 deg. rotation)"
           KCanvasItem {rect} at (301,15) size 128x128 [fill={[type=SOLID] [color=#000000]}] [filter=#RotateMapTest] [data="M301.00,15.00L429.00,15.00L429.00,143.00L301.00,143.00"]
           KCanvasItem {rect} at (323.99,37.99) size 82.03x82.03 [transform={m=((30.07,10.94)(-10.94,30.07)) t=(365.00,79.00)}] [fill={[type=SOLID] [color=#0000FF] [opacity=0.50]}] [data="M-1.00,-1.00L1.00,-1.00L1.00,1.00L-1.00,1.00"]
-          RenderSVGText {text} at (0,0) size 465x0
+          RenderSVGText {text} at (0,0) size 465x14
+            RenderInline {tspan} at (0,0) size 35x14
+              RenderText {TEXT} at (0,0) size 35x14
+                text run at (0,0) width 35: "Result"
+            RenderText {TEXT} at (35,0) size 3x14
+              text run at (35,0) width 3: " "
+            RenderInline {tspan} at (0,0) size 127x14
+              RenderText {TEXT} at (38,0) size 127x14
+                text run at (38,0) width 127: "(overlayed with 20 deg."
+            RenderText {TEXT} at (165,0) size 3x14
+              text run at (165,0) width 3: " "
+            RenderInline {tspan} at (0,0) size 123x14
+              RenderText {TEXT} at (168,0) size 123x14
+                text run at (168,0) width 123: "rotated blue rectangle)"
           KCanvasItem {rect} at (15,158) size 128x128 [fill={[type=SOLID] [color=#000000]}] [filter=#DispMapChecker] [data="M15.00,158.00L143.00,158.00L143.00,286.00L15.00,286.00"]
           KCanvasItem {rect} at (20,258) size 118x20 [fill={[type=SOLID] [color=#DDDDDD]}] [data="M20.00,258.00L138.00,258.00L138.00,278.00L20.00,278.00"]
           RenderSVGText {text} at (0,0) size 465x14
@@ -26,7 +47,15 @@ layer at (0,0) size 480x360
               text run at (0,0) width 115: "Checkerboard Image"
           KCanvasItem {rect} at (158,158) size 128x128 [fill={[type=SOLID] [color=#000000]}] [filter=#SphereMap] [data="M158.00,158.00L286.00,158.00L286.00,286.00L158.00,286.00"]
           KCanvasItem {rect} at (163,255) size 118x30 [fill={[type=SOLID] [color=#DDDDDD]}] [data="M163.00,255.00L281.00,255.00L281.00,285.00L163.00,285.00"]
-          RenderSVGText {text} at (0,0) size 465x0
+          RenderSVGText {text} at (0,0) size 465x14
+            RenderInline {tspan} at (0,0) size 102x14
+              RenderText {TEXT} at (0,0) size 102x14
+                text run at (0,0) width 102: "Displacement Map"
+            RenderText {TEXT} at (102,0) size 3x14
+              text run at (102,0) width 3: " "
+            RenderInline {tspan} at (0,0) size 111x14
+              RenderText {TEXT} at (105,0) size 111x14
+                text run at (105,0) width 111: "(spherical distortion)"
           KCanvasItem {rect} at (301,200) size 128x128 [fill={[type=SOLID] [color=#000000]}] [filter=#SphereMapTest] [data="M301.00,200.00L429.00,200.00L429.00,328.00L301.00,328.00"]
           RenderSVGText {text} at (0,0) size 465x14
             RenderText {TEXT} at (0,0) size 35x14
index 5bb9a590f0a0c00c92669d2d6eb98328b59d1d80..f5b2f7338401652a64e34d0245a84c075e3c5991 100644 (file)
@@ -1 +1 @@
-a39fb5a1857e8d965b37a3da0629a9ea
\ No newline at end of file
+ce20a32d9611aa5f4d2880dad97e92d1
\ No newline at end of file
index 0d78c8b2a9375fa0c3e1bdeb2e2bc7c9156c101b..0a3172de79b284cfd4c92ded3cd7782fc1bbc5cd 100644 (file)
Binary files a/LayoutTests/svg/W3C-SVG-1.1/text-align-02-b-expected.png and b/LayoutTests/svg/W3C-SVG-1.1/text-align-02-b-expected.png differ
index 5898e73d9582c63a5ab39c7f168c08f2984071b1..ec52c0e448bb508fa8a05ce9586f0d9d0a6ee203 100644 (file)
@@ -10,18 +10,33 @@ layer at (0,0) size 480x360
           RenderSVGText {text} at (0,0) size 465x34
             RenderText {TEXT} at (0,0) size 98x34
               text run at (0,0) width 98: "Normal"
-            RenderText {TEXT} at (98,0) size 48x34
-              text run at (98,0) width 48: "text"
+            RenderInline {tspan} at (0,0) size 204x33
+              RenderText {TEXT} at (98,0) size 204x34
+                text run at (98,0) width 204: "baseline-shift:7"
+            RenderText {TEXT} at (302,0) size 48x34
+              text run at (302,0) width 48: "text"
           RenderSVGText {text} at (0,0) size 465x34
             RenderText {TEXT} at (0,0) size 98x34
               text run at (0,0) width 98: "Normal"
-            RenderText {TEXT} at (98,0) size 48x34
-              text run at (98,0) width 48: "text"
+            RenderInline {tspan} at (0,0) size 258x33
+              RenderText {TEXT} at (98,0) size 258x34
+                text run at (98,0) width 258: "baseline-shift:-70%"
+            RenderText {TEXT} at (356,0) size 48x34
+              text run at (356,0) width 48: "text"
           RenderSVGText {text} at (0,0) size 465x34
             RenderText {TEXT} at (0,0) size 98x34
               text run at (0,0) width 98: "Normal"
-            RenderText {TEXT} at (98,0) size 23x34
-              text run at (98,0) width 23: "xt"
+            RenderInline {tspan} at (0,0) size 49x33
+              RenderText {TEXT} at (98,0) size 49x34
+                text run at (98,0) width 49: "sub"
+            RenderInline {tspan} at (0,0) size 76x33
+              RenderText {TEXT} at (147,0) size 76x34
+                text run at (147,0) width 76: "super"
+            RenderInline {tspan} at (0,0) size 25x33
+              RenderText {TEXT} at (223,0) size 25x34
+                text run at (223,0) width 25: "te"
+            RenderText {TEXT} at (248,0) size 23x34
+              text run at (248,0) width 23: "xt"
       RenderSVGText {text} at (0,0) size 465x46
         RenderText {TEXT} at (0,0) size 264x46
           text run at (0,0) width 264: "$Revision: 1.1 $"
index 8a85bc8bab45958c628be4c19ff3459e16fad6a4..db296178248412ce8c7678712cce0f6b7db60e08 100644 (file)
@@ -1 +1 @@
-4c4b822ce898706ccd7a0be11149ba97
\ No newline at end of file
+b43a0fb210e7ce4b05f9e2c56644517f
\ No newline at end of file
index 02bd88d228540395362d7956efae7ef4fdfe96ee..11d6daeabed28709041c13f723e174813ace6f96 100644 (file)
Binary files a/LayoutTests/svg/W3C-SVG-1.1/text-align-03-b-expected.png and b/LayoutTests/svg/W3C-SVG-1.1/text-align-03-b-expected.png differ
index 6d918159a61585091d4464c32db9b3f0db2e5379..e1dfc3672ed21b14a067ec95ac6df91c651ac23d 100644 (file)
@@ -7,9 +7,17 @@ layer at (0,0) size 480x360
             text run at (0,0) width 346: "Test of 'text-anchor'"
         KCanvasItem {line} at (224.50,75) size 1x150 [stroke={[type=SOLID] [color=#FF0000]}] [fill={[type=SOLID] [color=#000000]}] [data="M225.00,75.00L225.00,225.00"]
         KCanvasContainer {g} at (0,0) size 0x0
-          RenderSVGText {text} at (0,0) size 465x34
+          RenderSVGText {text} at (0,0) size 465x102
             RenderText {TEXT} at (0,0) size 229x34
               text run at (0,0) width 229: "Begin with \"end\","
+            RenderInline {tspan} at (0,0) size 354x67
+              RenderText {TEXT} at (229,0) size 354x68
+                text run at (229,0) width 125: " switch to"
+                text run at (0,34) width 267: "\"middle\" in a tspan, "
+            RenderInline {tspan} at (0,0) size 406x67
+              RenderText {TEXT} at (267,34) size 406x68
+                text run at (267,34) width 139: "and \"start\""
+                text run at (0,68) width 97: "ends it."
       RenderSVGText {text} at (0,0) size 465x46
         RenderText {TEXT} at (0,0) size 264x46
           text run at (0,0) width 264: "$Revision: 1.1 $"
index d734d494400a035f78cb46df2e33f156f40c2155..3f85c903b18542ad43a30637d411292bdac1847a 100644 (file)
@@ -1 +1 @@
-9a2e756342af1923bad3babdee518ffd
\ No newline at end of file
+92e640343355208816f3f63dea7d0ac3
\ No newline at end of file
index 3475e35df5524c3758f85a9628a27a8cdbce4d20..90b74164714ee982acfd1e3845122c1f63319310 100644 (file)
Binary files a/LayoutTests/svg/W3C-SVG-1.1/text-align-04-b-expected.png and b/LayoutTests/svg/W3C-SVG-1.1/text-align-04-b-expected.png differ
index a747cd47588a67ac56ec80624e4d38006223c0d1..8b0c811cff676f743b01940d09665bd09f7b5d72 100644 (file)
@@ -11,11 +11,17 @@ layer at (0,0) size 480x360
         KCanvasItem {line} at (219.50,120) size 1x140 [stroke={[type=SOLID] [color=#FF0000]}] [fill={[type=SOLID] [color=#000000]}] [data="M220.00,120.00L220.00,260.00"]
         KCanvasContainer {g} at (0,0) size 0x0
           RenderSVGText {text} at (0,0) size 465x34
-            RenderText {TEXT} at (0,0) size 114x34
-              text run at (0,0) width 114: "start text"
+            RenderText {TEXT} at (0,0) size 122x34
+              text run at (0,0) width 122: "start text "
+            RenderInline {tspan} at (0,0) size 126x33
+              RenderText {TEXT} at (122,0) size 126x34
+                text run at (122,0) width 126: "red tspan"
           RenderSVGText {text} at (0,0) size 465x34
-            RenderText {TEXT} at (0,0) size 146x34
-              text run at (0,0) width 146: "middle text"
+            RenderText {TEXT} at (0,0) size 154x34
+              text run at (0,0) width 154: "middle text "
+            RenderInline {tspan} at (0,0) size 150x33
+              RenderText {TEXT} at (154,0) size 150x34
+                text run at (154,0) width 150: "bold tspan"
           RenderSVGText {text} at (0,0) size 465x0
           RenderSVGText {text} at (0,0) size 465x0
       RenderSVGText {text} at (0,0) size 465x46
index d0fcb47312f95f3437bd560416500c23b0bae637..0562eb9aeda04983be052e3853a7f12cbd9ab79c 100644 (file)
@@ -1 +1 @@
-e0ef3652e8a6a4c7ade24dfc1d196ec8
\ No newline at end of file
+8807d95f20a4042740d7c89077a1fcfb
\ No newline at end of file
index 9a514b5328a992b827417dad4a268f1ec78e74e3..517abfddccaf2affbdca6e8f808686e99a7a3337 100644 (file)
Binary files a/LayoutTests/svg/W3C-SVG-1.1/text-align-06-b-expected.png and b/LayoutTests/svg/W3C-SVG-1.1/text-align-06-b-expected.png differ
index a514a8c827f02a1f5bbc276178b2a0070f7584e2..af8ea19953ebe8ecf564f92e06695bab76de62ac 100644 (file)
@@ -11,23 +11,41 @@ layer at (0,0) size 480x360
             RenderSVGText {text} at (0,0) size 465x34
               RenderText {TEXT} at (0,0) size 25x34
                 text run at (0,0) width 25: "te"
-              RenderText {TEXT} at (25,0) size 23x34
-                text run at (25,0) width 23: "xt"
+              RenderInline {tspan} at (0,0) size 17x33
+                RenderText {TEXT} at (25,0) size 17x34
+                  text run at (25,0) width 17: "7"
+              RenderText {TEXT} at (42,0) size 23x34
+                text run at (42,0) width 23: "xt"
             RenderSVGText {text} at (0,0) size 465x34
               RenderText {TEXT} at (0,0) size 25x34
                 text run at (0,0) width 25: "te"
-              RenderText {TEXT} at (25,0) size 23x34
-                text run at (25,0) width 23: "xt"
+              RenderInline {tspan} at (0,0) size 71x33
+                RenderText {TEXT} at (25,0) size 71x34
+                  text run at (25,0) width 71: "-70%"
+              RenderText {TEXT} at (96,0) size 23x34
+                text run at (96,0) width 23: "xt"
             RenderSVGText {text} at (0,0) size 465x34
               RenderText {TEXT} at (0,0) size 25x34
                 text run at (0,0) width 25: "te"
-              RenderText {TEXT} at (25,0) size 8x34
-                text run at (25,0) width 8: "t"
+              RenderInline {tspan} at (0,0) size 49x33
+                RenderText {TEXT} at (25,0) size 49x34
+                  text run at (25,0) width 49: "sub"
+              RenderInline {tspan} at (0,0) size 15x33
+                RenderText {TEXT} at (74,0) size 15x34
+                  text run at (74,0) width 15: "x"
+              RenderText {TEXT} at (89,0) size 8x34
+                text run at (89,0) width 8: "t"
             RenderSVGText {text} at (0,0) size 465x34
               RenderText {TEXT} at (0,0) size 25x34
                 text run at (0,0) width 25: "te"
-              RenderText {TEXT} at (25,0) size 8x34
-                text run at (25,0) width 8: "t"
+              RenderInline {tspan} at (0,0) size 76x33
+                RenderText {TEXT} at (25,0) size 76x34
+                  text run at (25,0) width 76: "super"
+              RenderInline {tspan} at (0,0) size 15x33
+                RenderText {TEXT} at (101,0) size 15x34
+                  text run at (101,0) width 15: "x"
+              RenderText {TEXT} at (116,0) size 8x34
+                text run at (116,0) width 8: "t"
       RenderSVGText {text} at (0,0) size 465x46
         RenderText {TEXT} at (0,0) size 264x46
           text run at (0,0) width 264: "$Revision: 1.1 $"
index 32dc4d69f294765c68bda7717e0436cc75f77a80..97758a7b448970f3c7eff3e82b6b3b02152541cd 100644 (file)
@@ -1 +1 @@
-06ca5de2b35d6903fa214804e934bfb0
\ No newline at end of file
+61f8fdeeaf81129364798026d5fb4aff
\ No newline at end of file
index eae3227885d5f8f5c789473f3d52958d1fd7b50b..f159247760c01ba3957576bbdbbe5956a62ffad5 100644 (file)
Binary files a/LayoutTests/svg/W3C-SVG-1.1/text-deco-01-b-expected.png and b/LayoutTests/svg/W3C-SVG-1.1/text-deco-01-b-expected.png differ
index 40e32920125fbbb8af544a4055a27efcc4bbd9e5..84cd8e43554afd4f34a28a61b760f1fb5ce33ee4 100644 (file)
@@ -15,7 +15,31 @@ layer at (0,0) size 480x360
           RenderSVGText {text} at (0,0) size 465x28
             RenderText {TEXT} at (0,0) size 159x28
               text run at (0,0) width 159: "Underlined text"
-          RenderSVGText {text} at (0,0) size 465x0
+          RenderSVGText {text} at (0,0) size 465x28
+            RenderInline {tspan} at (0,0) size 45x27
+              RenderText {TEXT} at (0,0) size 45x28
+                text run at (0,0) width 45: "One"
+            RenderText {TEXT} at (45,0) size 7x28
+              text run at (45,0) width 7: " "
+            RenderInline {tspan} at (0,0) size 51x27
+              RenderText {TEXT} at (52,0) size 51x28
+                text run at (52,0) width 51: "word"
+            RenderText {TEXT} at (103,0) size 7x28
+              text run at (103,0) width 7: " "
+            RenderInline {tspan} at (0,0) size 38x27
+              RenderText {TEXT} at (110,0) size 38x28
+                text run at (110,0) width 38: "has"
+            RenderText {TEXT} at (148,0) size 7x28
+              text run at (148,0) width 7: " "
+            RenderInline {tspan} at (0,0) size 86x27
+              RenderText {TEXT} at (155,0) size 86x28
+                text run at (155,0) width 86: "different"
+            RenderText {TEXT} at (241,0) size 7x28
+              text run at (241,0) width 7: " "
+            RenderInline {tspan} at (0,0) size 114x27
+              RenderText {TEXT} at (248,0) size 114x28
+                text run at (248,0) width 114: "underlining"
+            RenderText {TEXT} at (0,0) size 0x0
       RenderSVGText {text} at (0,0) size 465x46
         RenderText {TEXT} at (0,0) size 264x46
           text run at (0,0) width 264: "$Revision: 1.1 $"
index 544fd24766fdfc27dccdb7e0f2aef6d9f4806e90..cd89e0e0c8b41747cc5c9117baa80c380d1d6cc3 100644 (file)
@@ -1 +1 @@
-f8bf4a38ae336911d5dffd21b7d21d23
\ No newline at end of file
+f1f22e3a9ad103b144f20040848ca050
\ No newline at end of file
index ee680b035a530bb91ec4dae5e37a919ce7cd6788..945220566ba87e4aaea8249f24a57a73e4a5d512 100644 (file)
Binary files a/LayoutTests/svg/W3C-SVG-1.1/text-tselect-01-b-expected.png and b/LayoutTests/svg/W3C-SVG-1.1/text-tselect-01-b-expected.png differ
index e87fca7836860a175452425b350017341a480c38..434a0e901644f6e997bcaf027b347e8c1e8c1640 100644 (file)
@@ -18,7 +18,28 @@ layer at (0,0) size 480x360
           RenderSVGText {text} at (0,0) size 465x18
             RenderText {TEXT} at (0,0) size 322x18
               text run at (0,0) width 322: "text selection should not go across lines here."
-          RenderSVGText {text} at (0,0) size 465x0
+          RenderSVGText {text} at (0,0) size 465x54
+            RenderInline {tspan} at (0,0) size 355x17
+              RenderText {TEXT} at (0,0) size 355x18
+                text run at (0,0) width 355: "However, these lines of text are achieved by using"
+            RenderText {TEXT} at (355,0) size 4x18
+              text run at (355,0) width 4: " "
+            RenderInline {tspan} at (0,0) size 462x35
+              RenderText {TEXT} at (359,0) size 462x36
+                text run at (359,0) width 103: "one 'tspan' per"
+                text run at (0,18) width 240: "line, all contained within the same"
+            RenderText {TEXT} at (240,18) size 4x18
+              text run at (240,18) width 4: " "
+            RenderInline {tspan} at (0,0) size 465x35
+              RenderText {TEXT} at (244,18) size 465x36
+                text run at (244,18) width 221: "'text' element, so you should be"
+                text run at (0,36) width 115: "able to select all"
+            RenderText {TEXT} at (115,36) size 4x18
+              text run at (115,36) width 4: " "
+            RenderInline {tspan} at (0,0) size 189x17
+              RenderText {TEXT} at (119,36) size 189x18
+                text run at (119,36) width 189: "four lines at the same time."
+            RenderText {TEXT} at (0,0) size 0x0
         RenderSVGText {text} at (0,0) size 465x46
           RenderText {TEXT} at (0,0) size 264x46
             text run at (0,0) width 264: "$Revision: 1.1 $"
index 7574966c2b5b6e17cabd5c5410741a2c53a4eb26..b870de1375a8a83129f2d1906f08e60a1fc3907b 100644 (file)
@@ -1 +1 @@
-0c2faa9790e57f88cd1f7c07ad2986ab
\ No newline at end of file
+dc63dbac9689a21d21c3df66c086fabd
\ No newline at end of file
index b22bd2c65cce81181f0a111e9325c04da6aa412f..56accb01eab91feb6cebad64cf314e7d079c6803 100644 (file)
Binary files a/LayoutTests/svg/W3C-SVG-1.1/text-tspan-01-b-expected.png and b/LayoutTests/svg/W3C-SVG-1.1/text-tspan-01-b-expected.png differ
index 5c559a01a9a0a0cdb4f37235b0c6a0db402bee73..1350d4070d90594ee01e6f5b1bf1cc7191d1106e 100644 (file)
@@ -9,8 +9,11 @@ layer at (0,0) size 480x360
           RenderSVGText {text} at (0,0) size 465x18
             RenderText {TEXT} at (0,0) size 56x18
               text run at (0,0) width 56: "You are"
-            RenderText {TEXT} at (56,0) size 71x18
-              text run at (56,0) width 71: "a banana."
+            RenderInline {tspan} at (0,0) size 33x17
+              RenderText {TEXT} at (56,0) size 33x18
+                text run at (56,0) width 33: " not "
+            RenderText {TEXT} at (89,0) size 71x18
+              text run at (89,0) width 71: "a banana."
           KCanvasItem {rect} at (47,73.75) size 311.50x54.50 [stroke={[type=SOLID] [color=#000000]}] [data="M47.50,74.25L358.00,74.25L358.00,127.75L47.50,127.75"]
           RenderSVGText {text} at (0,0) size 465x18
             RenderText {TEXT} at (0,0) size 208x18
@@ -25,6 +28,12 @@ layer at (0,0) size 480x360
           RenderSVGText {text} at (0,0) size 465x18
             RenderText {TEXT} at (0,0) size 54x18
               text run at (0,0) width 54: "But you"
+            RenderInline {tspan} at (0,0) size 24x17
+              RenderText {TEXT} at (54,0) size 24x18
+                text run at (54,0) width 24: "are"
+            RenderInline {tspan} at (0,0) size 65x17
+              RenderText {TEXT} at (78,0) size 65x18
+                text run at (78,0) width 65: " a peach!"
           KCanvasItem {rect} at (224.50,178.50) size 246.50x54.50 [stroke={[type=SOLID] [color=#000000]}] [data="M225.00,179.00L470.50,179.00L470.50,232.50L225.00,232.50"]
           RenderSVGText {text} at (0,0) size 465x18
             RenderText {TEXT} at (0,0) size 197x18
@@ -36,7 +45,15 @@ layer at (0,0) size 480x360
             RenderText {TEXT} at (0,0) size 173x18
               text run at (0,0) width 173: "'tspan' lowers \"a peach!\""
         KCanvasContainer {g} at (17,244.25) size 336.50x54.50
-          RenderSVGText {text} at (0,0) size 465x0
+          RenderSVGText {text} at (0,0) size 465x18
+            RenderInline {tspan} at (0,0) size 69x17
+              RenderText {TEXT} at (0,0) size 69x18
+                text run at (0,0) width 69: "Cute and "
+            RenderText {TEXT} at (0,0) size 0x0
+            RenderInline {tspan} at (0,0) size 41x17
+              RenderText {TEXT} at (69,0) size 41x18
+                text run at (69,0) width 41: "fuzzy."
+            RenderText {TEXT} at (0,0) size 0x0
           KCanvasItem {rect} at (17,244.25) size 336.50x54.50 [stroke={[type=SOLID] [color=#000000]}] [data="M17.50,244.75L353.00,244.75L353.00,298.25L17.50,298.25"]
           RenderSVGText {text} at (0,0) size 465x18
             RenderText {TEXT} at (0,0) size 161x18
index d0ded457c209483edfad8edcbb0d90a2c371f732..fc4a35dccf9491da8170d3b5e0387a9505be704d 100644 (file)
@@ -1,3 +1,35 @@
+2006-01-15  Eric Seidel  <eseidel@apple.com>
+
+        Reviewed by mjs.
+
+        Add basic <tspan> support using RenderInline.
+        http://bugzilla.opendarwin.org/show_bug.cgi?id=6428
+        Also fix <text transform=""> while we're at it.
+        http://bugzilla.opendarwin.org/show_bug.cgi?id=6552
+
+        * ksvg2/svg/SVGGradientElementImpl.cpp:
+        (SVGGradientElementImpl::parseMappedAttribute): code cleanup
+        * ksvg2/svg/SVGPatternElementImpl.cpp:
+        (SVGPatternElementImpl::parseMappedAttribute): code cleanup
+        * ksvg2/svg/SVGStyledTransformableElementImpl.cpp:
+        (SVGStyledTransformableElementImpl::parseMappedAttribute): cleanup
+        * ksvg2/svg/SVGTSpanElementImpl.cpp:
+        (SVGTSpanElementImpl::childShouldCreateRenderer): added.
+        (SVGTSpanElementImpl::createRenderer): added.
+        * ksvg2/svg/SVGTSpanElementImpl.h:
+        (KSVG::SVGTSpanElementImpl::rendererIsNeeded): added.
+        * ksvg2/svg/SVGTextElementImpl.cpp:
+        (SVGTextElementImpl::transform): added.
+        (SVGTextElementImpl::localMatrix): added.
+        (SVGTextElementImpl::parseMappedAttribute): support transform.
+        (SVGTextElementImpl::updateLocalTransform): added.
+        (SVGTextElementImpl::attach): added.
+        (SVGTextElementImpl::childShouldCreateRenderer): allow tspan.
+        * ksvg2/svg/SVGTextElementImpl.h:
+        * ksvg2/svg/SVGTransformableImpl.cpp:
+        (SVGTransformableImpl::parseTransformAttribute): code cleanup.
+        * ksvg2/svg/SVGTransformableImpl.h:
+
 2006-01-14  David Hyatt  <hyatt@apple.com>
 
         Move arena.cpp/.h out of khtml/misc and into platform/Arena.cpp/h.  Also removed another unused
index 58fc36848bdcd9974f64b92439d1f393d1ee3611..810f603ff82d98fca579aed311f8d4137a1c9672 100644 (file)
@@ -77,31 +77,26 @@ SVGAnimatedEnumerationImpl *SVGGradientElementImpl::spreadMethod() const
 void SVGGradientElementImpl::parseMappedAttribute(KDOM::MappedAttributeImpl *attr)
 {
     KDOM::DOMString value(attr->value());
-    if (attr->name() == SVGNames::gradientUnitsAttr)
-    {
+    if (attr->name() == SVGNames::gradientUnitsAttr) {
         if(value == "userSpaceOnUse")
             gradientUnits()->setBaseVal(SVG_UNIT_TYPE_USERSPACEONUSE);
         else if(value == "objectBoundingBox")
             gradientUnits()->setBaseVal(SVG_UNIT_TYPE_OBJECTBOUNDINGBOX);
-    }
-    else if (attr->name() == SVGNames::gradientTransformAttr)
-    {
+    } else if (attr->name() == SVGNames::gradientTransformAttr) {
         SVGTransformListImpl *gradientTransforms = gradientTransform()->baseVal();
-        SVGTransformableImpl::parseTransformAttribute(gradientTransforms, attr->value().impl());
-    }
-    else if (attr->name() == SVGNames::spreadMethodAttr)
-    {
+        SVGTransformableImpl::parseTransformAttribute(gradientTransforms, attr->value());
+    } else if (attr->name() == SVGNames::spreadMethodAttr) {
         if(value == "reflect")
             spreadMethod()->setBaseVal(SVG_SPREADMETHOD_REFLECT);
         else if(value == "repeat")
             spreadMethod()->setBaseVal(SVG_SPREADMETHOD_REPEAT);
         else if(value == "pad")
             spreadMethod()->setBaseVal(SVG_SPREADMETHOD_PAD);
-    }
-    else
-    {
-        if(SVGURIReferenceImpl::parseMappedAttribute(attr)) return;
-        if(SVGExternalResourcesRequiredImpl::parseMappedAttribute(attr)) return;
+    } else {
+        if (SVGURIReferenceImpl::parseMappedAttribute(attr))
+            return;
+        if (SVGExternalResourcesRequiredImpl::parseMappedAttribute(attr))
+            return;
         
         SVGStyledElementImpl::parseMappedAttribute(attr);
     }
index 3abe1ca24354ebb615c507f960abfc451efc8fd7..e6d717e226458b9edc2b23eaeb1b9050a88b9232 100644 (file)
@@ -108,27 +108,21 @@ SVGAnimatedTransformListImpl *SVGPatternElementImpl::patternTransform() const
 
 void SVGPatternElementImpl::parseMappedAttribute(KDOM::MappedAttributeImpl *attr)
 {
-    KDOM::DOMString value(attr->value());
-    if (attr->name() == SVGNames::patternUnitsAttr)
-    {
-        if(value == "userSpaceOnUse")
+    const KDOM::AtomicString &value = attr->value();
+    if (attr->name() == SVGNames::patternUnitsAttr) {
+        if (value == "userSpaceOnUse")
             patternUnits()->setBaseVal(SVG_UNIT_TYPE_USERSPACEONUSE);
-        else if(value == "objectBoundingBox")
+        else if (value == "objectBoundingBox")
             patternUnits()->setBaseVal(SVG_UNIT_TYPE_OBJECTBOUNDINGBOX);
-    }
-    else if (attr->name() == SVGNames::patternContentUnitsAttr)
-    {
-        if(value == "userSpaceOnUse")
+    } else if (attr->name() == SVGNames::patternContentUnitsAttr) {
+        if (value == "userSpaceOnUse")
             patternContentUnits()->setBaseVal(SVG_UNIT_TYPE_USERSPACEONUSE);
-        else if(value == "objectBoundingBox")
+        else if (value == "objectBoundingBox")
             patternContentUnits()->setBaseVal(SVG_UNIT_TYPE_OBJECTBOUNDINGBOX);
-    }
-    else if (attr->name() == SVGNames::patternTransformAttr)
-    {
+    } else if (attr->name() == SVGNames::patternTransformAttr) {
         SVGTransformListImpl *patternTransforms = patternTransform()->baseVal();
-        SVGTransformableImpl::parseTransformAttribute(patternTransforms, value.impl());
-    }
-    else if (attr->name() == SVGNames::xAttr)
+        SVGTransformableImpl::parseTransformAttribute(patternTransforms, value);
+    } else if (attr->name() == SVGNames::xAttr)
         x()->baseVal()->setValueAsString(value.impl());
     else if (attr->name() == SVGNames::yAttr)
         y()->baseVal()->setValueAsString(value.impl());
@@ -136,13 +130,17 @@ void SVGPatternElementImpl::parseMappedAttribute(KDOM::MappedAttributeImpl *attr
         width()->baseVal()->setValueAsString(value.impl());
     else if (attr->name() == SVGNames::heightAttr)
         height()->baseVal()->setValueAsString(value.impl());
-    else
-    {
-        if(SVGURIReferenceImpl::parseMappedAttribute(attr)) return;
-        if(SVGTestsImpl::parseMappedAttribute(attr)) return;
-        if(SVGLangSpaceImpl::parseMappedAttribute(attr)) return;
-        if(SVGExternalResourcesRequiredImpl::parseMappedAttribute(attr)) return;
-        if(SVGFitToViewBoxImpl::parseMappedAttribute(attr)) return;
+    else {
+        if (SVGURIReferenceImpl::parseMappedAttribute(attr))
+            return;
+        if (SVGTestsImpl::parseMappedAttribute(attr))
+            return;
+        if (SVGLangSpaceImpl::parseMappedAttribute(attr))
+            return;
+        if (SVGExternalResourcesRequiredImpl::parseMappedAttribute(attr))
+            return;
+        if (SVGFitToViewBoxImpl::parseMappedAttribute(attr))
+            return;
 
         SVGStyledElementImpl::parseMappedAttribute(attr);
     }
index 89e4d36ece4ae1f99f4431b5371d77e9154acb7f..f97e761fb618a194891ecd33686055891eb34cbb 100644 (file)
@@ -94,15 +94,13 @@ void SVGStyledTransformableElementImpl::updateLocalTransform(SVGTransformListImp
 
 void SVGStyledTransformableElementImpl::parseMappedAttribute(KDOM::MappedAttributeImpl *attr)
 {
-    if(attr->name() == SVGNames::transformAttr)
-    {
+    if (attr->name() == SVGNames::transformAttr) {
         SVGTransformListImpl *localTransforms = transform()->baseVal();
         localTransforms->clear();
         
-        SVGTransformableImpl::parseTransformAttribute(localTransforms, attr->value().impl());
+        SVGTransformableImpl::parseTransformAttribute(localTransforms, attr->value());
         updateLocalTransform(localTransforms);
-    }
-    else
+    } else
         SVGStyledLocatableElementImpl::parseMappedAttribute(attr);
 }
 
index 43ee6527ea030a643dbb6016fed36da81cbae215..44c8e46e3ac2c7f5172f0c7cd28926b4ac3aa8dd 100644 (file)
     Boston, MA 02111-1307, USA.
 */
 
-//#include "SVGDocument.h"
 #include "config.h"
 #include "SVGTSpanElementImpl.h"
+#include "SVGNames.h"
+#include "render_inline.h"
 
 using namespace KSVG;
 
@@ -35,4 +36,16 @@ SVGTSpanElementImpl::~SVGTSpanElementImpl()
 {
 }
 
+bool SVGTSpanElementImpl::childShouldCreateRenderer(DOM::NodeImpl *child) const
+{
+    if (child->isTextNode() || child->hasTagName(SVGNames::tspanTag))
+        return true;
+    return false;
+}
+
+khtml::RenderObject *SVGTSpanElementImpl::createRenderer(RenderArena *arena, khtml::RenderStyle *)
+{
+    return new (arena) khtml::RenderInline(this);
+}
+
 // vim:ts=4:noet
index 19eeded48eb95da91057c11ca3b3dbe713ef2833..26b28a7422d60f30db241397cefe830611da668b 100644 (file)
@@ -32,8 +32,10 @@ namespace KSVG
     public:
         SVGTSpanElementImpl(const KDOM::QualifiedName& tagName, KDOM::DocumentImpl *doc);
         virtual ~SVGTSpanElementImpl();
-
-        // 'SVGTSpanElement' functions
+                
+        virtual bool rendererIsNeeded(khtml::RenderStyle *) { return true; }
+        virtual khtml::RenderObject *createRenderer(RenderArena *arena, khtml::RenderStyle *style);
+        bool childShouldCreateRenderer(DOM::NodeImpl *child) const;
     };
 };
 
index c2b92694d204410ff48022171b3ecf1c4c11c61c..c7e94ccb08c2e5890dd063761119026f6732be4a 100644 (file)
@@ -25,6 +25,8 @@
 #include "SVGTextElementImpl.h"
 #include "SVGTSpanElementImpl.h"
 #include "SVGAnimatedLengthListImpl.h"
+#include "SVGAnimatedTransformListImpl.h"
+#include "SVGMatrixImpl.h"
 #include "SVGRenderStyle.h"
 #include "KCanvasRenderingStyle.h"
 #include <kdom/css/RenderStyle.h>
@@ -45,10 +47,47 @@ SVGTextElementImpl::~SVGTextElementImpl()
 {
 }
 
+SVGAnimatedTransformListImpl *SVGTextElementImpl::transform() const
+{
+    return lazy_create<SVGAnimatedTransformListImpl>(m_transform, this);
+}
+
+SVGMatrixImpl *SVGTextElementImpl::localMatrix() const
+{
+    return lazy_create<SVGMatrixImpl>(m_localMatrix);
+}
+
 void SVGTextElementImpl::parseMappedAttribute(KDOM::MappedAttributeImpl *attr)
 {
-    //if(SVGTransformableImpl::parseMappedAttribute(attr)) return;
-    SVGTextPositioningElementImpl::parseMappedAttribute(attr);
+    if (attr->name() == SVGNames::transformAttr) {
+        SVGTransformListImpl *localTransforms = transform()->baseVal();
+        localTransforms->clear();
+        
+        SVGTransformableImpl::parseTransformAttribute(localTransforms, attr->value());
+        updateLocalTransform(localTransforms);
+    } else
+        SVGTextPositioningElementImpl::parseMappedAttribute(attr);
+}
+
+void SVGTextElementImpl::updateLocalTransform(SVGTransformListImpl *localTransforms)
+{
+    // Update cached local matrix
+    RefPtr<SVGTransformImpl> localTransform = localTransforms->concatenate();
+    if(localTransform) {
+        m_localMatrix = localTransform->matrix();
+        if (renderer()) {
+            renderer()->setLocalTransform(m_localMatrix->qmatrix());
+            renderer()->setNeedsLayout(true);
+        }
+    }
+}
+
+void SVGTextElementImpl::attach()
+{
+    SVGStyledElementImpl::attach();
+
+    if (renderer() && m_localMatrix)
+        renderer()->setLocalTransform(m_localMatrix->qmatrix());
 }
 
 SVGElementImpl *SVGTextElementImpl::nearestViewportElement() const
@@ -83,7 +122,7 @@ khtml::RenderObject *SVGTextElementImpl::createRenderer(RenderArena *arena, khtm
 
 bool SVGTextElementImpl::childShouldCreateRenderer(DOM::NodeImpl *child) const
 {
-    if (child->isTextNode())
+    if (child->isTextNode() || child->hasTagName(SVGNames::tspanTag))
         return true;
     return false;
 }
index fe4907245bfc7740f68aae632a671379944854a8..15ab0d0c8fd1a74434f2db06315e4979dc6afa15 100644 (file)
@@ -49,12 +49,16 @@ namespace KSVG
         virtual bool rendererIsNeeded(khtml::RenderStyle *) { return true; }
         virtual khtml::RenderObject *createRenderer(RenderArena *arena, khtml::RenderStyle *style);
         virtual bool childShouldCreateRenderer(DOM::NodeImpl *) const;
+        virtual void attach();
 
-        virtual SVGAnimatedTransformListImpl *transform() const { return 0; }
-        virtual SVGMatrixImpl *localMatrix() const { return 0; }
+        virtual SVGAnimatedTransformListImpl *transform() const;
+        virtual SVGMatrixImpl *localMatrix() const;
         
-        // FIXME: HACK
-        virtual void updateLocalTransform(SVGTransformListImpl *localTransforms) { };
+        virtual void updateLocalTransform(SVGTransformListImpl *localTransforms);
+        
+    private:
+        mutable RefPtr<SVGMatrixImpl> m_localMatrix;
+        mutable RefPtr<SVGAnimatedTransformListImpl> m_transform;
     };
 };
 
index 0772c8fe8f015ed92eb72a72c9db49dc318ef600..84a99be7ba34cef45f99c86086fd5ad422871302 100644 (file)
@@ -49,17 +49,13 @@ SVGTransformableImpl::~SVGTransformableImpl()
 {
 }
 
-void SVGTransformableImpl::parseTransformAttribute(SVGTransformListImpl *list, KDOM::DOMStringImpl *transform)
+void SVGTransformableImpl::parseTransformAttribute(SVGTransformListImpl *list, const KDOM::AtomicString& transform)
 {
-    if(!transform)
-        return;
-
     // Split string for handling 1 transform statement at a time
-    QStringList subtransforms = QStringList::split(')', KDOM::DOMString(transform).qstring().simplifyWhiteSpace());
+    QStringList subtransforms = QStringList::split(')', transform.qstring().simplifyWhiteSpace());
     QStringList::ConstIterator it = subtransforms.begin();
     QStringList::ConstIterator end = subtransforms.end();
-    for(; it != end; ++it)
-    {
+    for (; it != end; ++it) {
         QStringList subtransform = QStringList::split('(', (*it));
         
         if (subtransform.count() < 2)
@@ -67,16 +63,14 @@ void SVGTransformableImpl::parseTransformAttribute(SVGTransformListImpl *list, K
 
         subtransform[0] = subtransform[0].stripWhiteSpace().lower();
         subtransform[1] = subtransform[1].simplifyWhiteSpace();
-        QRegExp reg(QString::fromLatin1("([-]?\\d*\\.?\\d+(?:e[-]?\\d+)?)"));
+        QRegExp reg("([-]?\\d*\\.?\\d+(?:e[-]?\\d+)?)");
 
         int pos = 0;
         QStringList params;
         
-        while(pos >= 0)
-        {
+        while (pos >= 0) {
             pos = reg.search(subtransform[1], pos);
-            if(pos != -1)
-            {
+            if (pos != -1) {
                 params += reg.cap(1);
                 pos += reg.matchedLength();
             }
@@ -85,43 +79,33 @@ void SVGTransformableImpl::parseTransformAttribute(SVGTransformListImpl *list, K
         if (params.count() < 1)
             break;
 
-        if(subtransform[0].startsWith(QString::fromLatin1(";")) ||
-           subtransform[0].startsWith(QString::fromLatin1(",")))
-        {
+        if (subtransform[0].startsWith(";") || subtransform[0].startsWith(","))
             subtransform[0] = subtransform[0].right(subtransform[0].length() - 1);
-        }
 
         PassRefPtr<SVGTransformImpl> t(new SVGTransformImpl());
 
-        if(subtransform[0] == QString::fromLatin1("rotate"))
-        {
+        if (subtransform[0] == "rotate") {
             if (params.count() == 3)
                 t->setRotate(params[0].toDouble(),
                              params[1].toDouble(),
                               params[2].toDouble());
             else if (params.count() == 1)
                 t->setRotate(params[0].toDouble(), 0, 0);
-        }
-        else if(subtransform[0] == QString::fromLatin1("translate"))
-        {
+        } else if (subtransform[0] == "translate") {
             if (params.count() == 2)
                 t->setTranslate(params[0].toDouble(), params[1].toDouble());
             else if (params.count() == 1) // Spec: if only one param given, assume 2nd param to be 0
                 t->setTranslate(params[0].toDouble(), 0);
-        }
-        else if(subtransform[0] == QString::fromLatin1("scale"))
-        {
+        } else if (subtransform[0] == "scale") {
             if (params.count() == 2)
                 t->setScale(params[0].toDouble(), params[1].toDouble());
             else if (params.count() == 1) // Spec: if only one param given, assume uniform scaling
                 t->setScale(params[0].toDouble(), params[0].toDouble());
-        }
-        else if(subtransform[0] == QString::fromLatin1("skewx") && (params.count() == 1))
+        } else if (subtransform[0] == "skewx" && (params.count() == 1))
             t->setSkewX(params[0].toDouble());
-        else if(subtransform[0] == QString::fromLatin1("skewy") && (params.count() == 1))
+        else if (subtransform[0] == "skewy" && (params.count() == 1))
             t->setSkewY(params[0].toDouble());
-        else if(subtransform[0] == QString::fromLatin1("matrix") && (params.count() == 6))
-        {
+        else if (subtransform[0] == "matrix" && (params.count() == 6)) {
             SVGMatrixImpl *ret = new SVGMatrixImpl(params[0].toDouble(),
                                                    params[1].toDouble(),
                                                    params[2].toDouble(),
index 5588293138489898f7858ca6422eb9b8a065d623..550155206ed3b4ecc15286a48f42a1872e73dba5 100644 (file)
 
 class QMatrix;
 
-namespace KDOM
-{
+namespace KDOM {
     class NodeImpl;
-    class DOMStringImpl;
+    class AtomicString;
     class AttributeImpl;
 };
 
@@ -51,7 +50,7 @@ namespace KSVG
         
         virtual void updateLocalTransform(SVGTransformListImpl *localTransforms) = 0;
         
-        static void parseTransformAttribute(SVGTransformListImpl *list, KDOM::DOMStringImpl *transform);
+        static void parseTransformAttribute(SVGTransformListImpl *list, const KDOM::AtomicString& transform);
     };
 };