2010-10-22 Cosmin Truta <ctruta@chromium.org>
authorkrit@webkit.org <krit@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 22 Oct 2010 17:43:31 +0000 (17:43 +0000)
committerkrit@webkit.org <krit@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 22 Oct 2010 17:43:31 +0000 (17:43 +0000)
        Reviewed by Nikolas Zimmermann.

        getBoundingClientRect does not work with SVG <text>
        https://bugs.webkit.org/show_bug.cgi?id=46775

        Dispatched the calls from Element::getBoundingClientRect to getBBox
        through SVGElement::boundingBox.
        Recognized SVGTextElement in addition to SVGStyledLocatableElement
        as a class that provides getBBox.
        Fixed the result of zooming: adjusted the getBoundingClientRect rectangle
        for absolute zoom, even for SVG elements.

        Additional cleanup task:
        Removed redundant overloads of SVGStyledTransformableElement
        methods: nearestViewportElement, farthestViewportElement, getBBox.
        These methods are already inherited from SVGStyledLocatableElement.

        Test: css3/zoom-coords.xhtml

        * WebCore.xcodeproj/project.pbxproj: Set role of SVGLocatable.h to private.
        * dom/Element.cpp:
        (Element::getBoundingClientRect): Used SVGElement::boundingBox.
        Adjusted coordinates for absolute zoom, for all kinds of elements.
        * svg/SVGElement.cpp:
        * svg/SVGElement.h:
        (SVGElement::boundingBox): Added.
        * svg/SVGStyledTransformableElement.cpp:
        * svg/SVGStyledTransformableElement.h:
        (SVGStyledTransformableElement::nearestViewportElement): Removed.
        (SVGStyledTransformableElement::farthestViewportElement): Removed.
        (SVGStyledTransformableElement::getBBox): Removed.
2010-10-22  Cosmin Truta  <ctruta@chromium.org>

        Reviewed by Nikolas Zimmermann.

        getBoundingClientRect does not work with SVG <text>
        https://bugs.webkit.org/show_bug.cgi?id=46775

        Added coordinate checks on various zoomed-in and zoomed-out
        XHTML and SVG elements, using getBoundingClientRect.

        * css3/zoom-coords.xhtml: Added.
        * css3/zoom-coords-expected.txt: Added.

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

LayoutTests/ChangeLog
LayoutTests/css3/zoom-coords-expected.txt [new file with mode: 0644]
LayoutTests/css3/zoom-coords.xhtml [new file with mode: 0644]
WebCore/ChangeLog
WebCore/WebCore.xcodeproj/project.pbxproj
WebCore/dom/Element.cpp
WebCore/svg/SVGElement.cpp
WebCore/svg/SVGElement.h
WebCore/svg/SVGStyledTransformableElement.cpp
WebCore/svg/SVGStyledTransformableElement.h

index cb0233c972d798ab22f5c84b1a454c7e428f0e89..b7b208b1cc56c3e7f94066cce9bf8ad2db243307 100644 (file)
@@ -1,3 +1,16 @@
+2010-10-22  Cosmin Truta  <ctruta@chromium.org>
+
+        Reviewed by Nikolas Zimmermann.
+
+        getBoundingClientRect does not work with SVG <text>
+        https://bugs.webkit.org/show_bug.cgi?id=46775
+
+        Added coordinate checks on various zoomed-in and zoomed-out
+        XHTML and SVG elements, using getBoundingClientRect.
+
+        * css3/zoom-coords.xhtml: Added.
+        * css3/zoom-coords-expected.txt: Added.
+
 2010-10-22  Adam Roben  <aroben@apple.com>
 
         Update Windows html5lib results after r70293
 2010-10-22  Adam Roben  <aroben@apple.com>
 
         Update Windows html5lib results after r70293
diff --git a/LayoutTests/css3/zoom-coords-expected.txt b/LayoutTests/css3/zoom-coords-expected.txt
new file mode 100644 (file)
index 0000000..7162390
--- /dev/null
@@ -0,0 +1,78 @@
+Test
+Test
+This test checks getBoundingClientRect() on zoomed HTML and SVG elements
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+Checking HTML elements:
+
+PASS div1.left is 0
+PASS div1.top is 0
+PASS div1.width is 100
+PASS div1.height is 50
+PASS div1.right is 100
+PASS div1.bottom is 50
+
+PASS div2.left is 0
+PASS div2.top is 200
+PASS div2.width is 200
+PASS div2.height is 100
+PASS div2.right is 200
+PASS div2.bottom is 300
+
+Checking SVG elements:
+
+PASS svg1.left is 0
+PASS svg1.top is 75
+PASS svg1.width is 150
+PASS svg1.height is 50
+PASS svg1.right is 150
+PASS svg1.bottom is 125
+PASS rect1.left is 0
+PASS rect1.top is 75
+PASS rect1.width is 100
+PASS rect1.height is 50
+PASS rect1.right is 100
+PASS rect1.bottom is 125
+PASS image1.left is 100
+PASS image1.top is 75
+PASS image1.width is 50
+PASS image1.height is 25
+PASS image1.right is 150
+PASS image1.bottom is 100
+PASS text1.left == 100 is true
+PASS text1.top >= 75 is true
+PASS text1.width > 0 is true
+PASS text1.height > 0 is true
+PASS text1.right > 100 is true
+PASS text1.bottom > 75 is true
+
+PASS svg2.left is 600
+PASS svg2.top is 400
+PASS svg2.width is 300
+PASS svg2.height is 100
+PASS svg2.right is 900
+PASS svg2.bottom is 500
+PASS rect2.left is 600
+PASS rect2.top is 400
+PASS rect2.width is 200
+PASS rect2.height is 100
+PASS rect2.right is 800
+PASS rect2.bottom is 500
+PASS image2.left is 800
+PASS image2.top is 400
+PASS image2.width is 100
+PASS image2.height is 50
+PASS image2.right is 900
+PASS image2.bottom is 450
+PASS text2.left == 800 is true
+PASS text2.top >= 400 is true
+PASS text2.width > 0 is true
+PASS text2.height > 0 is true
+PASS text2.right > 800 is true
+PASS text2.bottom > 400 is true
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/css3/zoom-coords.xhtml b/LayoutTests/css3/zoom-coords.xhtml
new file mode 100644 (file)
index 0000000..41f6a9d
--- /dev/null
@@ -0,0 +1,126 @@
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xlink="http://www.w3.org/1999/xlink">
+<head>
+<link rel="stylesheet" href="../fast/js/resources/js-test-style.css"/>
+<style type="text/css">
+    body { margin:0px; border:0px; padding:0px; }
+    #div1, #svg1 { zoom:200%; }
+    #div2, #svg2 { zoom:50%; }
+</style>
+<script src="../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+
+<div id="div1" style="width:100px;height:50px;background-color:blue;"></div>
+<div id="div2" style="width:200px;height:100px;background-color:green;"></div>
+<svg id="svg1" xmlns="http://www.w3.org/2000/svg"
+     width="150px" height="50px" viewBox="0 0 150 100"
+     preserveAspectRatio="none">
+  <rect id="rect1" x="0" y="0" width="100px" height="100px" fill="yellow" />
+  <image id="image1" x="100px" y="0" width="50px" height="50px" xlink:href="../svg/dom/resources/magnify.png" />
+  <text id="text1" x="100px" y="75px">Test</text>
+</svg><svg id="svg2" xmlns="http://www.w3.org/2000/svg"
+     width="300px" height="100px" viewBox="0 0 150 100"
+     preserveAspectRatio="none">
+  <rect id="rect2" x="0" y="0" width="100px" height="100px" fill="orange" />
+  <image id="image2" x="100px" y="0" width="50px" height="50px" xlink:href="../svg/dom/resources/magnify.png" />
+  <text id="text2" x="100px" y="75px">Test</text>
+</svg>
+
+<div id="description"></div>
+<div id="console"></div>
+
+<script>
+
+description("This test checks getBoundingClientRect() on zoomed HTML and SVG elements");
+
+debug("Checking HTML elements:");
+debug("");
+
+var div1 = document.getElementById("div1").getBoundingClientRect();
+shouldBe('div1.left', '0');
+shouldBe('div1.top', '0');
+shouldBe('div1.width', '100');
+shouldBe('div1.height', '50');
+shouldBe('div1.right', '100');
+shouldBe('div1.bottom', '50');
+debug("");
+
+var div2 = document.getElementById("div2").getBoundingClientRect();
+shouldBe('div2.left', '0');
+shouldBe('div2.top', '200');
+shouldBe('div2.width', '200');
+shouldBe('div2.height', '100');
+shouldBe('div2.right', '200');
+shouldBe('div2.bottom', '300');
+debug("");
+
+debug("Checking SVG elements:");
+debug("");
+
+var svg1 = document.getElementById("svg1").getBoundingClientRect();
+shouldBe('svg1.left', '0');
+shouldBe('svg1.top', '75');
+shouldBe('svg1.width', '150');
+shouldBe('svg1.height', '50');
+shouldBe('svg1.right', '150');
+shouldBe('svg1.bottom', '125');
+var rect1 = document.getElementById("rect1").getBoundingClientRect();
+shouldBe('rect1.left', '0');
+shouldBe('rect1.top', '75');
+shouldBe('rect1.width', '100');
+shouldBe('rect1.height', '50');
+shouldBe('rect1.right', '100');
+shouldBe('rect1.bottom', '125');
+var image1 = document.getElementById("image1").getBoundingClientRect();
+shouldBe('image1.left', '100');
+shouldBe('image1.top', '75');
+shouldBe('image1.width', '50');
+shouldBe('image1.height', '25');
+shouldBe('image1.right', '150');
+shouldBe('image1.bottom', '100');
+var text1 = document.getElementById("text1").getBoundingClientRect();
+shouldBe('text1.left == 100', 'true');
+shouldBe('text1.top >= 75', 'true');
+shouldBe('text1.width > 0', 'true');
+shouldBe('text1.height > 0', 'true');
+shouldBe('text1.right > 100', 'true');
+shouldBe('text1.bottom > 75', 'true');
+debug("");
+
+var svg2 = document.getElementById("svg2").getBoundingClientRect();
+shouldBe('svg2.left', '600');
+shouldBe('svg2.top', '400');
+shouldBe('svg2.width', '300');
+shouldBe('svg2.height', '100');
+shouldBe('svg2.right', '900');
+shouldBe('svg2.bottom', '500');
+var rect2 = document.getElementById("rect2").getBoundingClientRect();
+shouldBe('rect2.left', '600');
+shouldBe('rect2.top', '400');
+shouldBe('rect2.width', '200');
+shouldBe('rect2.height', '100');
+shouldBe('rect2.right', '800');
+shouldBe('rect2.bottom', '500');
+var image2 = document.getElementById("image2").getBoundingClientRect();
+shouldBe('image2.left', '800');
+shouldBe('image2.top', '400');
+shouldBe('image2.width', '100');
+shouldBe('image2.height', '50');
+shouldBe('image2.right', '900');
+shouldBe('image2.bottom', '450');
+var text2 = document.getElementById("text2").getBoundingClientRect();
+shouldBe('text2.left == 800', 'true');
+shouldBe('text2.top >= 400', 'true');
+shouldBe('text2.width > 0', 'true');
+shouldBe('text2.height > 0', 'true');
+shouldBe('text2.right > 800', 'true');
+shouldBe('text2.bottom > 400', 'true');
+debug("");
+
+successfullyParsed = true;
+
+</script>
+<script src="../fast/js/resources/js-test-post.js"></script>
+
+</body>
+</html>
index da71a3a9a554280411aee13e0c6de0344efcf9d7..b4cfa760284b37ce3f364eb0e8fdfa0ead319ab7 100644 (file)
@@ -1,3 +1,37 @@
+2010-10-22  Cosmin Truta  <ctruta@chromium.org>
+
+        Reviewed by Nikolas Zimmermann.
+
+        getBoundingClientRect does not work with SVG <text>
+        https://bugs.webkit.org/show_bug.cgi?id=46775
+
+        Dispatched the calls from Element::getBoundingClientRect to getBBox
+        through SVGElement::boundingBox.
+        Recognized SVGTextElement in addition to SVGStyledLocatableElement
+        as a class that provides getBBox.
+        Fixed the result of zooming: adjusted the getBoundingClientRect rectangle
+        for absolute zoom, even for SVG elements.
+
+        Additional cleanup task:
+        Removed redundant overloads of SVGStyledTransformableElement
+        methods: nearestViewportElement, farthestViewportElement, getBBox.
+        These methods are already inherited from SVGStyledLocatableElement.
+
+        Test: css3/zoom-coords.xhtml
+
+        * WebCore.xcodeproj/project.pbxproj: Set role of SVGLocatable.h to private.
+        * dom/Element.cpp:
+        (Element::getBoundingClientRect): Used SVGElement::boundingBox.
+        Adjusted coordinates for absolute zoom, for all kinds of elements.
+        * svg/SVGElement.cpp:
+        * svg/SVGElement.h:
+        (SVGElement::boundingBox): Added.
+        * svg/SVGStyledTransformableElement.cpp:
+        * svg/SVGStyledTransformableElement.h:
+        (SVGStyledTransformableElement::nearestViewportElement): Removed.
+        (SVGStyledTransformableElement::farthestViewportElement): Removed.
+        (SVGStyledTransformableElement::getBBox): Removed.
+
 2010-10-22  Patrick Gansterer  <paroga@webkit.org>
 
         Reviewed by Adam Roben.
 2010-10-22  Patrick Gansterer  <paroga@webkit.org>
 
         Reviewed by Adam Roben.
index 098f916d5a3c1cd763f5bec754118cfb7a28f73a..9e3abd4dfb7a9d02822e52de4d70b3294779720c 100644 (file)
                B2227A3E0D00BF220071B782 /* SVGList.h in Headers */ = {isa = PBXBuildFile; fileRef = B22278A80D00BF200071B782 /* SVGList.h */; settings = {ATTRIBUTES = (Private, ); }; };
                B2227A3F0D00BF220071B782 /* SVGListTraits.h in Headers */ = {isa = PBXBuildFile; fileRef = B22278A90D00BF200071B782 /* SVGListTraits.h */; settings = {ATTRIBUTES = (Private, ); }; };
                B2227A400D00BF220071B782 /* SVGLocatable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B22278AA0D00BF200071B782 /* SVGLocatable.cpp */; };
                B2227A3E0D00BF220071B782 /* SVGList.h in Headers */ = {isa = PBXBuildFile; fileRef = B22278A80D00BF200071B782 /* SVGList.h */; settings = {ATTRIBUTES = (Private, ); }; };
                B2227A3F0D00BF220071B782 /* SVGListTraits.h in Headers */ = {isa = PBXBuildFile; fileRef = B22278A90D00BF200071B782 /* SVGListTraits.h */; settings = {ATTRIBUTES = (Private, ); }; };
                B2227A400D00BF220071B782 /* SVGLocatable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B22278AA0D00BF200071B782 /* SVGLocatable.cpp */; };
-               B2227A410D00BF220071B782 /* SVGLocatable.h in Headers */ = {isa = PBXBuildFile; fileRef = B22278AB0D00BF200071B782 /* SVGLocatable.h */; };
+               B2227A410D00BF220071B782 /* SVGLocatable.h in Headers */ = {isa = PBXBuildFile; fileRef = B22278AB0D00BF200071B782 /* SVGLocatable.h */; settings = {ATTRIBUTES = (Private, ); }; };
                B2227A430D00BF220071B782 /* SVGMarkerElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B22278AD0D00BF200071B782 /* SVGMarkerElement.cpp */; };
                B2227A440D00BF220071B782 /* SVGMarkerElement.h in Headers */ = {isa = PBXBuildFile; fileRef = B22278AE0D00BF200071B782 /* SVGMarkerElement.h */; };
                B2227A460D00BF220071B782 /* SVGMaskElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B22278B00D00BF200071B782 /* SVGMaskElement.cpp */; };
                B2227A430D00BF220071B782 /* SVGMarkerElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B22278AD0D00BF200071B782 /* SVGMarkerElement.cpp */; };
                B2227A440D00BF220071B782 /* SVGMarkerElement.h in Headers */ = {isa = PBXBuildFile; fileRef = B22278AE0D00BF200071B782 /* SVGMarkerElement.h */; };
                B2227A460D00BF220071B782 /* SVGMaskElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B22278B00D00BF200071B782 /* SVGMaskElement.cpp */; };
index 83e129e8e28cfa510ee0d8156d24385d1e93dcf9..da7bf38cc86a0076813e949e5ddb9130f8afc244 100644 (file)
 #include "RenderLayer.h"
 #include "RenderView.h"
 #include "RenderWidget.h"
 #include "RenderLayer.h"
 #include "RenderView.h"
 #include "RenderWidget.h"
-#include "SVGStyledLocatableElement.h"
 #include "Settings.h"
 #include "TextIterator.h"
 #include "XMLNames.h"
 #include <wtf/text/CString.h>
 
 #if ENABLE(SVG)
 #include "Settings.h"
 #include "TextIterator.h"
 #include "XMLNames.h"
 #include <wtf/text/CString.h>
 
 #if ENABLE(SVG)
+#include "SVGElement.h"
 #include "SVGNames.h"
 #endif
 
 #include "SVGNames.h"
 #endif
 
@@ -488,15 +488,12 @@ PassRefPtr<ClientRect> Element::getBoundingClientRect() const
 
     Vector<FloatQuad> quads;
 #if ENABLE(SVG)
 
     Vector<FloatQuad> quads;
 #if ENABLE(SVG)
-    if (isSVGElement()) {
+    if (isSVGElement() && renderer()) {
         // Get the bounding rectangle from the SVG model.
         const SVGElement* svgElement = static_cast<const SVGElement*>(this);
         // Get the bounding rectangle from the SVG model.
         const SVGElement* svgElement = static_cast<const SVGElement*>(this);
-        if (svgElement->isStyledLocatable()) {
-            if (renderer()) {
-                const FloatRect& localRect = static_cast<const SVGStyledLocatableElement*>(svgElement)->getBBox();
-                quads.append(renderer()->localToAbsoluteQuad(localRect));
-            }
-        }
+        FloatRect localRect;
+        if (svgElement->boundingBox(localRect))
+            quads.append(renderer()->localToAbsoluteQuad(localRect));
     } else
 #endif
     {
     } else
 #endif
     {
@@ -517,9 +514,7 @@ PassRefPtr<ClientRect> Element::getBoundingClientRect() const
         result.move(-visibleContentRect.x(), -visibleContentRect.y());
     }
 
         result.move(-visibleContentRect.x(), -visibleContentRect.y());
     }
 
-    if (renderBoxModelObject())
-        adjustIntRectForAbsoluteZoom(result, renderBoxModelObject());
-
+    adjustIntRectForAbsoluteZoom(result, renderer());
     return ClientRect::create(result);
 }
 
     return ClientRect::create(result);
 }
 
index ea79e78e7ca8481cff37dc5d6e7cc614cd4bd03c..6c2c4a2783ea9e38aaff97db9db5560fbcf4b04a 100644 (file)
@@ -42,6 +42,8 @@
 #include "SVGElementRareData.h"
 #include "SVGNames.h"
 #include "SVGSVGElement.h"
 #include "SVGElementRareData.h"
 #include "SVGNames.h"
 #include "SVGSVGElement.h"
+#include "SVGStyledLocatableElement.h"
+#include "SVGTextElement.h"
 #include "SVGURIReference.h"
 #include "SVGUseElement.h"
 #include "ScriptEventListener.h"
 #include "SVGURIReference.h"
 #include "SVGUseElement.h"
 #include "ScriptEventListener.h"
@@ -179,6 +181,19 @@ const HashSet<SVGElementInstance*>& SVGElement::instancesForElement() const
     return rareSVGData()->elementInstances();
 }
 
     return rareSVGData()->elementInstances();
 }
 
+bool SVGElement::boundingBox(FloatRect& rect, SVGLocatable::StyleUpdateStrategy styleUpdateStrategy) const
+{
+    if (isStyledLocatable()) {
+        rect = static_cast<const SVGStyledLocatableElement*>(this)->getBBox(styleUpdateStrategy);
+        return true;
+    }
+    if (hasTagName(SVGNames::textTag)) {
+        rect = static_cast<const SVGTextElement*>(this)->getBBox(styleUpdateStrategy);
+        return true;
+    }
+    return false;
+}
+
 void SVGElement::setCursorElement(SVGCursorElement* cursorElement)
 {
     ensureRareSVGData()->setCursorElement(cursorElement);
 void SVGElement::setCursorElement(SVGCursorElement* cursorElement)
 {
     ensureRareSVGData()->setCursorElement(cursorElement);
index 568128470f7d98076c6dcddfe52f31b9ec02ece5..517515f939853049da167074d3ee3e498bc30a68 100644 (file)
@@ -24,6 +24,7 @@
 
 #if ENABLE(SVG)
 #include "SVGDocumentExtensions.h"
 
 #if ENABLE(SVG)
 #include "SVGDocumentExtensions.h"
+#include "SVGLocatable.h"
 #include "StyledElement.h"
 
 namespace WebCore {
 #include "StyledElement.h"
 
 namespace WebCore {
@@ -71,6 +72,8 @@ namespace WebCore {
 
         const HashSet<SVGElementInstance*>& instancesForElement() const;
 
 
         const HashSet<SVGElementInstance*>& instancesForElement() const;
 
+        bool boundingBox(FloatRect&, SVGLocatable::StyleUpdateStrategy = SVGLocatable::AllowStyleUpdate) const;
+
         void setCursorElement(SVGCursorElement*);
         void setCursorImageValue(CSSCursorImageValue*);
 
         void setCursorElement(SVGCursorElement*);
         void setCursorImageValue(CSSCursorImageValue*);
 
index 9b34203141636d66048cbebe67c13853a5a46ca9..b1619ca953df16a69febd3e8a69b751cf80066c6 100644 (file)
@@ -90,21 +90,6 @@ bool SVGStyledTransformableElement::isKnownAttribute(const QualifiedName& attrNa
            SVGStyledLocatableElement::isKnownAttribute(attrName);
 }
 
            SVGStyledLocatableElement::isKnownAttribute(attrName);
 }
 
-SVGElement* SVGStyledTransformableElement::nearestViewportElement() const
-{
-    return SVGTransformable::nearestViewportElement(this);
-}
-
-SVGElement* SVGStyledTransformableElement::farthestViewportElement() const
-{
-    return SVGTransformable::farthestViewportElement(this);
-}
-
-FloatRect SVGStyledTransformableElement::getBBox(StyleUpdateStrategy styleUpdateStrategy) const
-{
-    return SVGTransformable::getBBox(this, styleUpdateStrategy);
-}
-
 RenderObject* SVGStyledTransformableElement::createRenderer(RenderArena* arena, RenderStyle*)
 {
     // By default, any subclass is expected to do path-based drawing
 RenderObject* SVGStyledTransformableElement::createRenderer(RenderArena* arena, RenderStyle*)
 {
     // By default, any subclass is expected to do path-based drawing
index 5349cfa1f1f6ab63a376946ffc197ffcdfae6197..cbb7da642659974280f37b7cc813b3450375140f 100644 (file)
@@ -37,15 +37,11 @@ public:
 
     virtual AffineTransform getCTM(StyleUpdateStrategy = AllowStyleUpdate) const;
     virtual AffineTransform getScreenCTM(StyleUpdateStrategy = AllowStyleUpdate) const;
 
     virtual AffineTransform getCTM(StyleUpdateStrategy = AllowStyleUpdate) const;
     virtual AffineTransform getScreenCTM(StyleUpdateStrategy = AllowStyleUpdate) const;
-    virtual SVGElement* nearestViewportElement() const;
-    virtual SVGElement* farthestViewportElement() const;
 
     virtual AffineTransform localCoordinateSpaceTransform(SVGLocatable::CTMScope mode) const { return SVGTransformable::localCoordinateSpaceTransform(mode); }
     virtual AffineTransform animatedLocalTransform() const;
     virtual AffineTransform* supplementalTransform();
 
 
     virtual AffineTransform localCoordinateSpaceTransform(SVGLocatable::CTMScope mode) const { return SVGTransformable::localCoordinateSpaceTransform(mode); }
     virtual AffineTransform animatedLocalTransform() const;
     virtual AffineTransform* supplementalTransform();
 
-    virtual FloatRect getBBox(StyleUpdateStrategy = AllowStyleUpdate) const;
-
     bool isKnownAttribute(const QualifiedName&);
 
     // "base class" methods for all the elements which render as paths
     bool isKnownAttribute(const QualifiedName&);
 
     // "base class" methods for all the elements which render as paths