Reviewed by Simon Fraser.

        Move more code into SVGRenderBase
        https://bugs.webkit.org/show_bug.cgi?id=25532

        clippedOverflowRectForRepaint, computeRectForRepaint and mapLocalToContainer
        are now all shared via SVGRenderBase.

        RenderForeignObject should also be sharing this code, but I've left it
        alone for now, as changing that would likely cause test changes.

        No test changes.  It's possible that transformed <svg:image> elements will
        now show up with better metrics in the inspector.

        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::clippedOverflowRectForRepaint):
        (WebCore::RenderSVGImage::computeRectForRepaint):
        (WebCore::RenderSVGImage::mapLocalToContainer):
        * rendering/RenderSVGImage.h:
        * rendering/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::clippedOverflowRectForRepaint):
        (WebCore::RenderSVGModelObject::computeRectForRepaint):
        (WebCore::RenderSVGModelObject::mapLocalToContainer):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::clippedOverflowRectForRepaint):
        (WebCore::RenderSVGText::computeRectForRepaint):
        (WebCore::RenderSVGText::mapLocalToContainer):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::clippedOverflowRectForRepaint):
        (WebCore::SVGRenderBase::computeRectForRepaint):
        (WebCore::SVGRenderBase::mapLocalToContainer):
        * rendering/SVGRenderSupport.h:

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@43210 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/rendering/SVGRenderSupport.cpp b/WebCore/rendering/SVGRenderSupport.cpp
index 8c060bf..1ff48bb 100644
--- a/WebCore/rendering/SVGRenderSupport.cpp
+++ b/WebCore/rendering/SVGRenderSupport.cpp
@@ -26,7 +26,6 @@
 #if ENABLE(SVG)
 #include "SVGRenderSupport.h"
 
-#include "TransformationMatrix.h"
 #include "ImageBuffer.h"
 #include "RenderObject.h"
 #include "RenderSVGContainer.h"
@@ -36,10 +35,45 @@
 #include "SVGResourceMasker.h"
 #include "SVGStyledElement.h"
 #include "SVGURIReference.h"
+#include "TransformState.h"
+#include "TransformationMatrix.h"
 #include <wtf/UnusedParam.h>
 
 namespace WebCore {
 
+IntRect SVGRenderBase::clippedOverflowRectForRepaint(RenderObject* object, RenderBoxModelObject* repaintContainer)
+{
+    // Return early for any cases where we don't actually paint
+    if (object->style()->visibility() != VISIBLE && !object->enclosingLayer()->hasVisibleContent())
+        return IntRect();
+
+    // Pass our local paint rect to computeRectForRepaint() which will
+    // map to parent coords and recurse up the parent chain.
+    IntRect repaintRect = enclosingIntRect(object->repaintRectInLocalCoordinates());
+    object->computeRectForRepaint(repaintContainer, repaintRect);
+    return repaintRect;
+}
+
+void SVGRenderBase::computeRectForRepaint(RenderObject* object, RenderBoxModelObject* repaintContainer, IntRect& repaintRect, bool fixed)
+{
+    // Translate to coords in our parent renderer, and then call computeRectForRepaint on our parent
+    repaintRect = object->localToParentTransform().mapRect(repaintRect);
+    object->parent()->computeRectForRepaint(repaintContainer, repaintRect, fixed);
+}
+
+void SVGRenderBase::mapLocalToContainer(const RenderObject* object, RenderBoxModelObject* repaintContainer, bool fixed , bool useTransforms, TransformState& transformState)
+{
+    ASSERT(!fixed); // We should have no fixed content in the SVG rendering tree.
+
+    // FIXME: If we don't respect useTransforms we break SVG text rendering.
+    // Seems RenderSVGInlineText has some own broken translation hacks which depend useTransforms=false
+    // This should instead be ASSERT(useTransforms) once we fix RenderSVGInlineText
+    if (useTransforms)
+        transformState.applyTransform(object->localToParentTransform());
+
+    object->parent()->mapLocalToContainer(repaintContainer, fixed, useTransforms, transformState);
+}
+
 void SVGRenderBase::prepareToRenderSVGContent(RenderObject* object, RenderObject::PaintInfo& paintInfo, const FloatRect& boundingBox, SVGResourceFilter*& filter, SVGResourceFilter* rootFilter)
 {
 #if !ENABLE(SVG_FILTERS)