Title: [157940] trunk/Source/WebCore
Revision
157940
Author
[email protected]
Date
2013-10-24 11:41:42 -0700 (Thu, 24 Oct 2013)

Log Message

SVG: RenderElement-ize intersectRepaintRectWithResources().
<https://webkit.org/b/123278>

SVGRenderSupport::intersectRepaintRectWithResources() is only ever
called with non-text renderers so make it take RenderElement&.

Had to tweak RenderSVGResource::resourceBoundingBox() to take the
renderer by reference.

Reviewed by Antti Koivisto.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (157939 => 157940)


--- trunk/Source/WebCore/ChangeLog	2013-10-24 18:22:21 UTC (rev 157939)
+++ trunk/Source/WebCore/ChangeLog	2013-10-24 18:41:42 UTC (rev 157940)
@@ -1,3 +1,16 @@
+2013-10-24  Andreas Kling  <[email protected]>
+
+        SVG: RenderElement-ize intersectRepaintRectWithResources().
+        <https://webkit.org/b/123278>
+
+        SVGRenderSupport::intersectRepaintRectWithResources() is only ever
+        called with non-text renderers so make it take RenderElement&.
+
+        Had to tweak RenderSVGResource::resourceBoundingBox() to take the
+        renderer by reference.
+
+        Reviewed by Antti Koivisto.
+
 2013-10-24  Joseph Pecoraro  <[email protected]>
 
         Web Inspector: Breakpoints in sourceURL named scripts do not work

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGContainer.cpp (157939 => 157940)


--- trunk/Source/WebCore/rendering/svg/RenderSVGContainer.cpp	2013-10-24 18:22:21 UTC (rev 157939)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGContainer.cpp	2013-10-24 18:41:42 UTC (rev 157940)
@@ -169,7 +169,7 @@
 void RenderSVGContainer::updateCachedBoundaries()
 {
     SVGRenderSupport::computeContainerBoundingBoxes(this, m_objectBoundingBox, m_objectBoundingBoxValid, m_strokeBoundingBox, m_repaintBoundingBox);
-    SVGRenderSupport::intersectRepaintRectWithResources(this, m_repaintBoundingBox);
+    SVGRenderSupport::intersectRepaintRectWithResources(*this, m_repaintBoundingBox);
 }
 
 bool RenderSVGContainer::nodeAtFloatPoint(const HitTestRequest& request, HitTestResult& result, const FloatPoint& pointInParent, HitTestAction hitTestAction)

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGImage.cpp (157939 => 157940)


--- trunk/Source/WebCore/rendering/svg/RenderSVGImage.cpp	2013-10-24 18:22:21 UTC (rev 157939)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGImage.cpp	2013-10-24 18:41:42 UTC (rev 157940)
@@ -98,7 +98,7 @@
 
     if (m_needsBoundariesUpdate) {
         m_repaintBoundingBoxExcludingShadow = m_objectBoundingBox;
-        SVGRenderSupport::intersectRepaintRectWithResources(this, m_repaintBoundingBoxExcludingShadow);
+        SVGRenderSupport::intersectRepaintRectWithResources(*this, m_repaintBoundingBoxExcludingShadow);
 
         m_repaintBoundingBox = m_repaintBoundingBoxExcludingShadow;
         SVGRenderSupport::intersectRepaintRectWithShadows(this, m_repaintBoundingBox);

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGResource.h (157939 => 157940)


--- trunk/Source/WebCore/rendering/svg/RenderSVGResource.h	2013-10-24 18:22:21 UTC (rev 157939)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGResource.h	2013-10-24 18:41:42 UTC (rev 157940)
@@ -64,7 +64,7 @@
 
     virtual bool applyResource(RenderObject*, RenderStyle*, GraphicsContext*&, unsigned short resourceMode) = 0;
     virtual void postApplyResource(RenderObject*, GraphicsContext*&, unsigned short, const Path*, const RenderSVGShape*) { }
-    virtual FloatRect resourceBoundingBox(RenderObject*) = 0;
+    virtual FloatRect resourceBoundingBox(const RenderObject&) = 0;
 
     virtual RenderSVGResourceType resourceType() const = 0;
 

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp (157939 => 157940)


--- trunk/Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp	2013-10-24 18:22:21 UTC (rev 157939)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp	2013-10-24 18:41:42 UTC (rev 157940)
@@ -309,17 +309,17 @@
     return false;
 }
 
-FloatRect RenderSVGResourceClipper::resourceBoundingBox(RenderObject* object)
+FloatRect RenderSVGResourceClipper::resourceBoundingBox(const RenderObject& object)
 {
     // Resource was not layouted yet. Give back the boundingBox of the object.
     if (selfNeedsLayout())
-        return object->objectBoundingBox();
+        return object.objectBoundingBox();
     
     if (m_clipBoundaries.isEmpty())
         calculateClipContentRepaintRect();
 
     if (clipPathElement().clipPathUnits() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX) {
-        FloatRect objectBoundingBox = object->objectBoundingBox();
+        FloatRect objectBoundingBox = object.objectBoundingBox();
         AffineTransform transform;
         transform.translate(objectBoundingBox.x(), objectBoundingBox.y());
         transform.scaleNonUniform(objectBoundingBox.width(), objectBoundingBox.height());

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGResourceClipper.h (157939 => 157940)


--- trunk/Source/WebCore/rendering/svg/RenderSVGResourceClipper.h	2013-10-24 18:22:21 UTC (rev 157939)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGResourceClipper.h	2013-10-24 18:41:42 UTC (rev 157940)
@@ -56,7 +56,7 @@
     // applyResource directly and use the rects from the object, since they are empty for RenderSVGResources
     // FIXME: We made applyClippingToContext public because we cannot call applyResource on HTML elements (it asserts on RenderObject::objectBoundingBox)
     bool applyClippingToContext(RenderObject*, const FloatRect&, const FloatRect&, GraphicsContext*);
-    virtual FloatRect resourceBoundingBox(RenderObject*);
+    virtual FloatRect resourceBoundingBox(const RenderObject&) OVERRIDE;
 
     virtual RenderSVGResourceType resourceType() const { return ClipperResourceType; }
     

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGResourceFilter.cpp (157939 => 157940)


--- trunk/Source/WebCore/rendering/svg/RenderSVGResourceFilter.cpp	2013-10-24 18:22:21 UTC (rev 157939)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGResourceFilter.cpp	2013-10-24 18:41:42 UTC (rev 157940)
@@ -311,9 +311,9 @@
     filterData->sourceGraphicBuffer.clear();
 }
 
-FloatRect RenderSVGResourceFilter::resourceBoundingBox(RenderObject* object)
+FloatRect RenderSVGResourceFilter::resourceBoundingBox(const RenderObject& object)
 {
-    return SVGLengthContext::resolveRectangle<SVGFilterElement>(&filterElement(), filterElement().filterUnits(), object->objectBoundingBox());
+    return SVGLengthContext::resolveRectangle<SVGFilterElement>(&filterElement(), filterElement().filterUnits(), object.objectBoundingBox());
 }
 
 void RenderSVGResourceFilter::primitiveAttributeChanged(RenderObject* object, const QualifiedName& attribute)

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGResourceFilter.h (157939 => 157940)


--- trunk/Source/WebCore/rendering/svg/RenderSVGResourceFilter.h	2013-10-24 18:22:21 UTC (rev 157939)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGResourceFilter.h	2013-10-24 18:41:42 UTC (rev 157940)
@@ -77,7 +77,7 @@
     virtual bool applyResource(RenderObject*, RenderStyle*, GraphicsContext*&, unsigned short resourceMode);
     virtual void postApplyResource(RenderObject*, GraphicsContext*&, unsigned short resourceMode, const Path*, const RenderSVGShape*);
 
-    virtual FloatRect resourceBoundingBox(RenderObject*);
+    virtual FloatRect resourceBoundingBox(const RenderObject&) OVERRIDE;
 
     std::unique_ptr<SVGFilterBuilder> buildPrimitives(SVGFilter*);
 

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGResourceGradient.h (157939 => 157940)


--- trunk/Source/WebCore/rendering/svg/RenderSVGResourceGradient.h	2013-10-24 18:22:21 UTC (rev 157939)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGResourceGradient.h	2013-10-24 18:41:42 UTC (rev 157940)
@@ -52,7 +52,7 @@
 
     virtual bool applyResource(RenderObject*, RenderStyle*, GraphicsContext*&, unsigned short resourceMode) OVERRIDE FINAL;
     virtual void postApplyResource(RenderObject*, GraphicsContext*&, unsigned short resourceMode, const Path*, const RenderSVGShape*) OVERRIDE FINAL;
-    virtual FloatRect resourceBoundingBox(RenderObject*) OVERRIDE FINAL { return FloatRect(); }
+    virtual FloatRect resourceBoundingBox(const RenderObject&) OVERRIDE FINAL { return FloatRect(); }
 
 protected:
     explicit RenderSVGResourceGradient(SVGGradientElement&);

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGResourceMarker.h (157939 => 157940)


--- trunk/Source/WebCore/rendering/svg/RenderSVGResourceMarker.h	2013-10-24 18:22:21 UTC (rev 157939)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGResourceMarker.h	2013-10-24 18:41:42 UTC (rev 157940)
@@ -56,7 +56,7 @@
     AffineTransform markerTransformation(const FloatPoint& origin, float angle, float strokeWidth) const;
 
     virtual bool applyResource(RenderObject*, RenderStyle*, GraphicsContext*&, unsigned short) { return false; }
-    virtual FloatRect resourceBoundingBox(RenderObject*) { return FloatRect(); }
+    virtual FloatRect resourceBoundingBox(const RenderObject&) OVERRIDE { return FloatRect(); }
 
     FloatPoint referencePoint() const;
     float angle() const;

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp (157939 => 157940)


--- trunk/Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp	2013-10-24 18:22:21 UTC (rev 157939)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp	2013-10-24 18:41:42 UTC (rev 157940)
@@ -161,9 +161,9 @@
     }
 }
 
-FloatRect RenderSVGResourceMasker::resourceBoundingBox(RenderObject* object)
+FloatRect RenderSVGResourceMasker::resourceBoundingBox(const RenderObject& object)
 {
-    FloatRect objectBoundingBox = object->objectBoundingBox();
+    FloatRect objectBoundingBox = object.objectBoundingBox();
     FloatRect maskBoundaries = SVGLengthContext::resolveRectangle<SVGMaskElement>(&maskElement(), maskElement().maskUnits(), objectBoundingBox);
 
     // Resource was not layouted yet. Give back clipping rect of the mask.

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGResourceMasker.h (157939 => 157940)


--- trunk/Source/WebCore/rendering/svg/RenderSVGResourceMasker.h	2013-10-24 18:22:21 UTC (rev 157939)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGResourceMasker.h	2013-10-24 18:41:42 UTC (rev 157940)
@@ -48,7 +48,7 @@
     virtual void removeAllClientsFromCache(bool markForInvalidation = true);
     virtual void removeClientFromCache(RenderObject*, bool markForInvalidation = true);
     virtual bool applyResource(RenderObject*, RenderStyle*, GraphicsContext*&, unsigned short resourceMode);
-    virtual FloatRect resourceBoundingBox(RenderObject*);
+    virtual FloatRect resourceBoundingBox(const RenderObject&) OVERRIDE;
 
     SVGUnitTypes::SVGUnitType maskUnits() const { return maskElement().maskUnits(); }
     SVGUnitTypes::SVGUnitType maskContentUnits() const { return maskElement().maskContentUnits(); }

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGResourcePattern.h (157939 => 157940)


--- trunk/Source/WebCore/rendering/svg/RenderSVGResourcePattern.h	2013-10-24 18:22:21 UTC (rev 157939)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGResourcePattern.h	2013-10-24 18:41:42 UTC (rev 157940)
@@ -53,7 +53,7 @@
 
     virtual bool applyResource(RenderObject*, RenderStyle*, GraphicsContext*&, unsigned short resourceMode);
     virtual void postApplyResource(RenderObject*, GraphicsContext*&, unsigned short resourceMode, const Path*, const RenderSVGShape*);
-    virtual FloatRect resourceBoundingBox(RenderObject*) { return FloatRect(); }
+    virtual FloatRect resourceBoundingBox(const RenderObject&) OVERRIDE { return FloatRect(); }
 
     virtual RenderSVGResourceType resourceType() const { return s_resourceType; }
     static RenderSVGResourceType s_resourceType;

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGResourceSolidColor.h (157939 => 157940)


--- trunk/Source/WebCore/rendering/svg/RenderSVGResourceSolidColor.h	2013-10-24 18:22:21 UTC (rev 157939)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGResourceSolidColor.h	2013-10-24 18:41:42 UTC (rev 157940)
@@ -37,7 +37,7 @@
 
     virtual bool applyResource(RenderObject*, RenderStyle*, GraphicsContext*&, unsigned short resourceMode);
     virtual void postApplyResource(RenderObject*, GraphicsContext*&, unsigned short resourceMode, const Path*, const RenderSVGShape*);
-    virtual FloatRect resourceBoundingBox(RenderObject*) { return FloatRect(); }
+    virtual FloatRect resourceBoundingBox(const RenderObject&) OVERRIDE { return FloatRect(); }
 
     virtual RenderSVGResourceType resourceType() const { return s_resourceType; }
     static RenderSVGResourceType s_resourceType;

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGRoot.cpp (157939 => 157940)


--- trunk/Source/WebCore/rendering/svg/RenderSVGRoot.cpp	2013-10-24 18:22:21 UTC (rev 157939)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGRoot.cpp	2013-10-24 18:41:42 UTC (rev 157940)
@@ -399,7 +399,7 @@
 void RenderSVGRoot::updateCachedBoundaries()
 {
     SVGRenderSupport::computeContainerBoundingBoxes(this, m_objectBoundingBox, m_objectBoundingBoxValid, m_strokeBoundingBox, m_repaintBoundingBoxExcludingShadow);
-    SVGRenderSupport::intersectRepaintRectWithResources(this, m_repaintBoundingBoxExcludingShadow);
+    SVGRenderSupport::intersectRepaintRectWithResources(*this, m_repaintBoundingBoxExcludingShadow);
     m_repaintBoundingBoxExcludingShadow.inflate(borderAndPaddingWidth());
 
     m_repaintBoundingBox = m_repaintBoundingBoxExcludingShadow;

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGShape.cpp (157939 => 157940)


--- trunk/Source/WebCore/rendering/svg/RenderSVGShape.cpp	2013-10-24 18:22:21 UTC (rev 157939)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGShape.cpp	2013-10-24 18:41:42 UTC (rev 157940)
@@ -404,7 +404,7 @@
 void RenderSVGShape::updateRepaintBoundingBox()
 {
     m_repaintBoundingBoxExcludingShadow = strokeBoundingBox();
-    SVGRenderSupport::intersectRepaintRectWithResources(this, m_repaintBoundingBoxExcludingShadow);
+    SVGRenderSupport::intersectRepaintRectWithResources(*this, m_repaintBoundingBoxExcludingShadow);
 
     m_repaintBoundingBox = m_repaintBoundingBoxExcludingShadow;
     SVGRenderSupport::intersectRepaintRectWithShadows(this, m_repaintBoundingBox);

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGText.cpp (157939 => 157940)


--- trunk/Source/WebCore/rendering/svg/RenderSVGText.cpp	2013-10-24 18:22:21 UTC (rev 157939)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGText.cpp	2013-10-24 18:41:42 UTC (rev 157940)
@@ -527,7 +527,7 @@
 FloatRect RenderSVGText::repaintRectInLocalCoordinates() const
 {
     FloatRect repaintRect = strokeBoundingBox();
-    SVGRenderSupport::intersectRepaintRectWithResources(this, repaintRect);
+    SVGRenderSupport::intersectRepaintRectWithResources(*this, repaintRect);
 
     if (const ShadowData* textShadow = style()->textShadow())
         textShadow->adjustRectForShadow(repaintRect);

Modified: trunk/Source/WebCore/rendering/svg/SVGRenderSupport.cpp (157939 => 157940)


--- trunk/Source/WebCore/rendering/svg/SVGRenderSupport.cpp	2013-10-24 18:22:21 UTC (rev 157939)
+++ trunk/Source/WebCore/rendering/svg/SVGRenderSupport.cpp	2013-10-24 18:41:42 UTC (rev 157940)
@@ -371,12 +371,9 @@
     repaintRect = rootToLocalTransform.mapRect(repaintRect);
 }
 
-void SVGRenderSupport::intersectRepaintRectWithResources(const RenderObject* object, FloatRect& repaintRect)
+void SVGRenderSupport::intersectRepaintRectWithResources(const RenderElement& renderer, FloatRect& repaintRect)
 {
-    ASSERT(object);
-
-    RenderObject* renderer = const_cast<RenderObject*>(object);
-    SVGResources* resources = SVGResourcesCache::cachedResourcesForRenderObject(renderer);
+    SVGResources* resources = SVGResourcesCache::cachedResourcesForRenderObject(&renderer);
     if (!resources)
         return;
 

Modified: trunk/Source/WebCore/rendering/svg/SVGRenderSupport.h (157939 => 157940)


--- trunk/Source/WebCore/rendering/svg/SVGRenderSupport.h	2013-10-24 18:22:21 UTC (rev 157939)
+++ trunk/Source/WebCore/rendering/svg/SVGRenderSupport.h	2013-10-24 18:41:42 UTC (rev 157940)
@@ -54,7 +54,7 @@
     static void intersectRepaintRectWithShadows(const RenderObject*, FloatRect&);
 
     // Calculates the repaintRect in combination with filter, clipper and masker in local coordinates.
-    static void intersectRepaintRectWithResources(const RenderObject*, FloatRect&);
+    static void intersectRepaintRectWithResources(const RenderElement&, FloatRect&);
 
     // Determines whether a container needs to be laid out because it's filtered and a child is being laid out.
     static bool filtersForceContainerLayout(RenderObject*);

Modified: trunk/Source/WebCore/rendering/svg/SVGRenderTreeAsText.cpp (157939 => 157940)


--- trunk/Source/WebCore/rendering/svg/SVGRenderTreeAsText.cpp	2013-10-24 18:22:21 UTC (rev 157939)
+++ trunk/Source/WebCore/rendering/svg/SVGRenderTreeAsText.cpp	2013-10-24 18:41:42 UTC (rev 157940)
@@ -649,7 +649,7 @@
             writeNameAndQuotedValue(ts, "masker", svgStyle->maskerResource());
             ts << " ";
             writeStandardPrefix(ts, *masker, 0);
-            ts << " " << masker->resourceBoundingBox(&renderer) << "\n";
+            ts << " " << masker->resourceBoundingBox(renderer) << "\n";
         }
     }
     if (!svgStyle->clipperResource().isEmpty()) {
@@ -659,7 +659,7 @@
             writeNameAndQuotedValue(ts, "clipPath", svgStyle->clipperResource());
             ts << " ";
             writeStandardPrefix(ts, *clipper, 0);
-            ts << " " << clipper->resourceBoundingBox(&renderer) << "\n";
+            ts << " " << clipper->resourceBoundingBox(renderer) << "\n";
         }
     }
 #if ENABLE(FILTERS)
@@ -670,7 +670,7 @@
             writeNameAndQuotedValue(ts, "filter", svgStyle->filterResource());
             ts << " ";
             writeStandardPrefix(ts, *filter, 0);
-            ts << " " << filter->resourceBoundingBox(&renderer) << "\n";
+            ts << " " << filter->resourceBoundingBox(renderer) << "\n";
         }
     }
 #endif
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to