[CTTE] RenderSVGImage always has a SVGImageElement.
authorakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 13 Sep 2013 15:56:08 +0000 (15:56 +0000)
committerakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 13 Sep 2013 15:56:08 +0000 (15:56 +0000)
<https://webkit.org/b/121301>

Reviewed by Anders Carlsson.

This renderer is never anonymous, and always has a corresponding SVGImageElement.

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

Source/WebCore/ChangeLog
Source/WebCore/rendering/svg/RenderSVGImage.cpp
Source/WebCore/rendering/svg/RenderSVGImage.h
Source/WebCore/svg/SVGImageElement.cpp

index 4cef608..1346f17 100644 (file)
@@ -1,5 +1,14 @@
 2013-09-13  Andreas Kling  <akling@apple.com>
 
+        [CTTE] RenderSVGImage always has a SVGImageElement.
+        <https://webkit.org/b/121301>
+
+        Reviewed by Anders Carlsson.
+
+        This renderer is never anonymous, and always has a corresponding SVGImageElement.
+
+2013-09-13  Andreas Kling  <akling@apple.com>
+
         [CTTE] Tighter element types for RenderSVGShape and subclasses.
         <https://webkit.org/b/121302>
 
index 4b04b1b..df1b3a0 100644 (file)
@@ -48,8 +48,8 @@
 
 namespace WebCore {
 
-RenderSVGImage::RenderSVGImage(SVGImageElement* impl)
-    : RenderSVGModelObject(impl)
+RenderSVGImage::RenderSVGImage(SVGImageElement& element)
+    : RenderSVGModelObject(&element)
     , m_needsBoundariesUpdate(true)
     , m_needsTransformUpdate(true)
     , m_imageResource(RenderImageResource::create())
@@ -62,13 +62,17 @@ RenderSVGImage::~RenderSVGImage()
     m_imageResource->shutdown();
 }
 
+SVGImageElement& RenderSVGImage::imageElement() const
+{
+    return toSVGImageElement(*RenderSVGModelObject::element());
+}
+
 bool RenderSVGImage::updateImageViewport()
 {
-    SVGImageElement* image = toSVGImageElement(element());
     FloatRect oldBoundaries = m_objectBoundingBox;
 
-    SVGLengthContext lengthContext(image);
-    m_objectBoundingBox = FloatRect(image->x().value(lengthContext), image->y().value(lengthContext), image->width().value(lengthContext), image->height().value(lengthContext));
+    SVGLengthContext lengthContext(&imageElement());
+    m_objectBoundingBox = FloatRect(imageElement().x().value(lengthContext), imageElement().y().value(lengthContext), imageElement().width().value(lengthContext), imageElement().height().value(lengthContext));
 
     if (oldBoundaries == m_objectBoundingBox)
         return false;
@@ -88,7 +92,7 @@ void RenderSVGImage::layout()
 
     bool transformOrBoundariesUpdate = m_needsTransformUpdate || m_needsBoundariesUpdate;
     if (m_needsTransformUpdate) {
-        m_localTransform = toSVGImageElement(element())->animatedLocalTransform();
+        m_localTransform = imageElement().animatedLocalTransform();
         m_needsTransformUpdate = false;
     }
 
@@ -151,8 +155,7 @@ void RenderSVGImage::paintForeground(PaintInfo& paintInfo)
     FloatRect destRect = m_objectBoundingBox;
     FloatRect srcRect(0, 0, image->width(), image->height());
 
-    SVGImageElement* imageElement = toSVGImageElement(element());
-    imageElement->preserveAspectRatio().transformRect(destRect, srcRect);
+    imageElement().preserveAspectRatio().transformRect(destRect, srcRect);
 
     paintInfo.context->drawImage(image.get(), ColorSpaceDeviceRGB, destRect, srcRect);
 }
index b849a0d..3151bce 100644 (file)
@@ -38,9 +38,11 @@ class SVGImageElement;
 
 class RenderSVGImage FINAL : public RenderSVGModelObject {
 public:
-    RenderSVGImage(SVGImageElement*);
+    explicit RenderSVGImage(SVGImageElement&);
     virtual ~RenderSVGImage();
 
+    SVGImageElement& imageElement() const;
+
     bool updateImageViewport();
     virtual void setNeedsBoundariesUpdate() { m_needsBoundariesUpdate = true; }
     virtual bool needsBoundariesUpdate() OVERRIDE { return m_needsBoundariesUpdate; }
@@ -53,6 +55,8 @@ public:
     void paintForeground(PaintInfo&);
 
 private:
+    void element() const WTF_DELETED_FUNCTION;
+
     virtual const char* renderName() const { return "RenderSVGImage"; }
     virtual bool isSVGImage() const OVERRIDE { return true; }
 
index 52c748f..55adf09 100644 (file)
@@ -185,7 +185,7 @@ bool SVGImageElement::selfHasRelativeLengths() const
 
 RenderObject* SVGImageElement::createRenderer(RenderArena* arena, RenderStyle*)
 {
-    return new (arena) RenderSVGImage(this);
+    return new (arena) RenderSVGImage(*this);
 }
 
 bool SVGImageElement::haveLoadedRequiredResources()