Reviewed by Oliver.
authorbdakin@apple.com <bdakin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 12 Dec 2007 21:24:23 +0000 (21:24 +0000)
committerbdakin@apple.com <bdakin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 12 Dec 2007 21:24:23 +0000 (21:24 +0000)
        Fix for <rdar://problem/5643770> REGRESSION: Free-standing SVGs
        with width and height 100% clip to 300 x 150

        Though it was correct in an earlier iteration of my patch, it is
        not sufficient in the final, committed version to ask if the
        relativeWidthValue() or relativeHeightValue() is greater than 0
        just to determine if one has been set, for, they are now
        initialized to 300 and 150 respectively! This patch instead adds a
        bool to keep track of whether a container size has been set, and
        only used the relative value if it has.

        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::calcViewport):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement):
        * svg/SVGSVGElement.h:
        (WebCore::SVGSVGElement::setContainerSize):
        (WebCore::SVGSVGElement::hasSetContainerSize):

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

WebCore/ChangeLog
WebCore/rendering/RenderSVGRoot.cpp
WebCore/svg/SVGSVGElement.cpp
WebCore/svg/SVGSVGElement.h

index 7b313e4b3731b6a44ea2ebdfd4233551b610a7e8..b93eff87fdabc66a82ea423d760454db8d1dd5fb 100644 (file)
@@ -1,3 +1,26 @@
+2007-12-12  Beth Dakin  <bdakin@apple.com>
+
+        Reviewed by Oliver.
+
+        Fix for <rdar://problem/5643770> REGRESSION: Free-standing SVGs 
+        with width and height 100% clip to 300 x 150
+
+        Though it was correct in an earlier iteration of my patch, it is 
+        not sufficient in the final, committed version to ask if the 
+        relativeWidthValue() or relativeHeightValue() is greater than 0 
+        just to determine if one has been set, for, they are now 
+        initialized to 300 and 150 respectively! This patch instead adds a 
+        bool to keep track of whether a container size has been set, and 
+        only used the relative value if it has.
+
+        * rendering/RenderSVGRoot.cpp:
+        (WebCore::RenderSVGRoot::calcViewport):
+        * svg/SVGSVGElement.cpp:
+        (WebCore::SVGSVGElement::SVGSVGElement):
+        * svg/SVGSVGElement.h:
+        (WebCore::SVGSVGElement::setContainerSize):
+        (WebCore::SVGSVGElement::hasSetContainerSize):
+
 2007-12-12  Brady Eidson  <beidson@apple.com>
 
         Reviewed by Steve Falkenburg 
index e76a78677b0ecea686257153b84f16a97fcb0331..aa2f2ca860dd7fa3d28521aab6aec6a62d7506a4 100644 (file)
@@ -196,13 +196,13 @@ void RenderSVGRoot::calcViewport()
 
         float w, h;
         SVGLength width = svg->width();
-        if (width.unitType() == LengthTypePercentage && svg->relativeWidthValue() > 0)
+        if (width.unitType() == LengthTypePercentage && svg->hasSetContainerSize())
             w = svg->relativeWidthValue();
         else
             w = width.value();
         
         SVGLength height = svg->height();
-        if (height.unitType() == LengthTypePercentage && svg->relativeHeightValue() > 0)
+        if (height.unitType() == LengthTypePercentage && svg->hasSetContainerSize())
             h = svg->relativeHeightValue();
         else
             h = height.value();
index ce9e5e9f1ab5760972c884bf6c5b3769204f44e2..ce47d8e2173f7edbc0bd446f679fb58d61dc1cef 100644 (file)
@@ -72,6 +72,7 @@ SVGSVGElement::SVGSVGElement(const QualifiedName& tagName, Document* doc)
     , m_timeScheduler(new TimeScheduler(doc))
     , m_viewSpec(0)
     , m_containerSize(300, 150)
+    , m_hasSetContainerSize(false)
 {
     setWidthBaseValue(SVGLength(this, LengthModeWidth, "100%"));
     setHeightBaseValue(SVGLength(this, LengthModeHeight, "100%"));
index 19742c21d4c87b2c78511ace574743ded280262b..1c05898792584942d547ab49b01897eaac9ba011 100644 (file)
@@ -65,8 +65,9 @@ namespace WebCore
 
         FloatRect viewport() const;
 
-        void setContainerSize(const IntSize& containerSize) { m_containerSize = containerSize; }
+        void setContainerSize(const IntSize& containerSize) { m_containerSize = containerSize; m_hasSetContainerSize = true; }
         IntSize containerSize() const { return m_containerSize; }
+        bool hasSetContainerSize() const { return m_hasSetContainerSize; }
         int relativeWidthValue() const;
         int relativeHeightValue() const;
 
@@ -160,6 +161,7 @@ namespace WebCore
         FloatPoint m_translation;
         mutable OwnPtr<SVGViewSpec> m_viewSpec;
         IntSize m_containerSize;
+        bool m_hasSetContainerSize;
     };
 
 } // namespace WebCore