Title: [163283] trunk/Source/WebCore
Revision
163283
Author
[email protected]
Date
2014-02-02 20:50:00 -0800 (Sun, 02 Feb 2014)

Log Message

Modernize the toRenderSVGResourceContainer() helper.
<https://webkit.org/b/128091>

Make toRenderSVGResourceContainer() a free function like all the
other casting helpers. Use references instead of pointers where
applicable.

Reviewed by Anders Carlsson.

* rendering/RenderLayerFilterInfo.cpp:
(WebCore::RenderLayer::FilterInfo::updateReferenceFilterClients):
(WebCore::RenderLayer::FilterInfo::removeReferenceFilterClients):
* rendering/RenderObject.cpp:
* rendering/RenderObject.h:
* rendering/svg/RenderSVGGradientStop.cpp:
(WebCore::RenderSVGGradientStop::styleDidChange):
* rendering/svg/RenderSVGResource.cpp:
(WebCore::RenderSVGResource::markForLayoutAndParentResourceInvalidation):
* rendering/svg/RenderSVGResourceContainer.cpp:
(WebCore::RenderSVGResourceContainer::markAllClientsForInvalidation):
* rendering/svg/RenderSVGResourceContainer.h:
* rendering/svg/RenderSVGResourceFilter.cpp:
(WebCore::RenderSVGResourceFilter::buildPrimitives):
* rendering/svg/RenderSVGResourceFilter.h:
* rendering/svg/SVGRenderTreeAsText.cpp:
(WebCore::writeSVGResourceContainer):
* rendering/svg/SVGResourcesCycleSolver.cpp:
(WebCore::SVGResourcesCycleSolver::resolveCycles):
* svg/SVGElement.cpp:
(WebCore::SVGElement::svgAttributeChanged):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (163282 => 163283)


--- trunk/Source/WebCore/ChangeLog	2014-02-03 04:44:10 UTC (rev 163282)
+++ trunk/Source/WebCore/ChangeLog	2014-02-03 04:50:00 UTC (rev 163283)
@@ -1,5 +1,38 @@
 2014-02-02  Andreas Kling  <[email protected]>
 
+        Modernize the toRenderSVGResourceContainer() helper.
+        <https://webkit.org/b/128091>
+
+        Make toRenderSVGResourceContainer() a free function like all the
+        other casting helpers. Use references instead of pointers where
+        applicable.
+
+        Reviewed by Anders Carlsson.
+
+        * rendering/RenderLayerFilterInfo.cpp:
+        (WebCore::RenderLayer::FilterInfo::updateReferenceFilterClients):
+        (WebCore::RenderLayer::FilterInfo::removeReferenceFilterClients):
+        * rendering/RenderObject.cpp:
+        * rendering/RenderObject.h:
+        * rendering/svg/RenderSVGGradientStop.cpp:
+        (WebCore::RenderSVGGradientStop::styleDidChange):
+        * rendering/svg/RenderSVGResource.cpp:
+        (WebCore::RenderSVGResource::markForLayoutAndParentResourceInvalidation):
+        * rendering/svg/RenderSVGResourceContainer.cpp:
+        (WebCore::RenderSVGResourceContainer::markAllClientsForInvalidation):
+        * rendering/svg/RenderSVGResourceContainer.h:
+        * rendering/svg/RenderSVGResourceFilter.cpp:
+        (WebCore::RenderSVGResourceFilter::buildPrimitives):
+        * rendering/svg/RenderSVGResourceFilter.h:
+        * rendering/svg/SVGRenderTreeAsText.cpp:
+        (WebCore::writeSVGResourceContainer):
+        * rendering/svg/SVGResourcesCycleSolver.cpp:
+        (WebCore::SVGResourcesCycleSolver::resolveCycles):
+        * svg/SVGElement.cpp:
+        (WebCore::SVGElement::svgAttributeChanged):
+
+2014-02-02  Andreas Kling  <[email protected]>
+
         Minor SVGRootInlineBox cleanup.
         <https://webkit.org/b/128094>
 

Modified: trunk/Source/WebCore/rendering/RenderLayerFilterInfo.cpp (163282 => 163283)


--- trunk/Source/WebCore/rendering/RenderLayerFilterInfo.cpp	2014-02-03 04:44:10 UTC (rev 163282)
+++ trunk/Source/WebCore/rendering/RenderLayerFilterInfo.cpp	2014-02-03 04:50:00 UTC (rev 163283)
@@ -122,7 +122,7 @@
             Element* filter = m_layer.renderer().element()->document().getElementById(referenceFilterOperation->fragment());
             if (!filter || !filter->renderer() || !filter->renderer()->isSVGResourceFilter())
                 continue;
-            filter->renderer()->toRenderSVGResourceContainer()->addClientRenderLayer(&m_layer);
+            toRenderSVGResourceContainer(*filter->renderer()).addClientRenderLayer(&m_layer);
             m_internalSVGReferences.append(filter);
         }
     }
@@ -137,7 +137,7 @@
         Element* filter = m_internalSVGReferences[i].get();
         if (!filter->renderer())
             continue;
-        filter->renderer()->toRenderSVGResourceContainer()->removeClientRenderLayer(&m_layer);
+        toRenderSVGResourceContainer(*filter->renderer()).removeClientRenderLayer(&m_layer);
     }
     m_internalSVGReferences.clear();
 }

Modified: trunk/Source/WebCore/rendering/RenderObject.cpp (163282 => 163283)


--- trunk/Source/WebCore/rendering/RenderObject.cpp	2014-02-03 04:44:10 UTC (rev 163282)
+++ trunk/Source/WebCore/rendering/RenderObject.cpp	2014-02-03 04:50:00 UTC (rev 163283)
@@ -2414,12 +2414,6 @@
 
 #if ENABLE(SVG)
 
-RenderSVGResourceContainer* RenderObject::toRenderSVGResourceContainer()
-{
-    ASSERT_NOT_REACHED();
-    return 0;
-}
-
 void RenderObject::setNeedsBoundariesUpdate()
 {
     if (auto renderer = parent())

Modified: trunk/Source/WebCore/rendering/RenderObject.h (163282 => 163283)


--- trunk/Source/WebCore/rendering/RenderObject.h	2014-02-03 04:44:10 UTC (rev 163282)
+++ trunk/Source/WebCore/rendering/RenderObject.h	2014-02-03 04:50:00 UTC (rev 163283)
@@ -441,8 +441,6 @@
     virtual bool isSVGResourceFilter() const { return false; }
     virtual bool isSVGResourceFilterPrimitive() const { return false; }
 
-    virtual RenderSVGResourceContainer* toRenderSVGResourceContainer();
-
     // FIXME: Those belong into a SVG specific base-class for all renderers (see above)
     // Unfortunately we don't have such a class yet, because it's not possible for all renderers
     // to inherit from RenderSVGObject -> RenderObject (some need RenderBlock inheritance for instance)

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGGradientStop.cpp (163282 => 163283)


--- trunk/Source/WebCore/rendering/svg/RenderSVGGradientStop.cpp	2014-02-03 04:44:10 UTC (rev 163282)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGGradientStop.cpp	2014-02-03 04:50:00 UTC (rev 163283)
@@ -58,9 +58,7 @@
     if (!renderer)
         return;
 
-    ASSERT(renderer->isSVGResourceContainer());
-    RenderSVGResourceContainer* container = renderer->toRenderSVGResourceContainer();
-    container->removeAllClientsFromCache();
+    toRenderSVGResourceContainer(*renderer).removeAllClientsFromCache();
 }
 
 void RenderSVGGradientStop::layout()

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGResource.cpp (163282 => 163283)


--- trunk/Source/WebCore/rendering/svg/RenderSVGResource.cpp	2014-02-03 04:44:10 UTC (rev 163282)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGResource.cpp	2014-02-03 04:50:00 UTC (rev 163283)
@@ -197,7 +197,7 @@
 
         if (current->isSVGResourceContainer()) {
             // This will process the rest of the ancestors.
-            current->toRenderSVGResourceContainer()->removeAllClientsFromCache();
+            toRenderSVGResourceContainer(*current).removeAllClientsFromCache();
             break;
         }
 

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGResourceContainer.cpp (163282 => 163283)


--- trunk/Source/WebCore/rendering/svg/RenderSVGResourceContainer.cpp	2014-02-03 04:44:10 UTC (rev 163282)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGResourceContainer.cpp	2014-02-03 04:50:00 UTC (rev 163283)
@@ -100,7 +100,7 @@
 
     for (auto client : m_clients) {
         if (client->isSVGResourceContainer()) {
-            client->toRenderSVGResourceContainer()->removeAllClientsFromCache(markForInvalidation);
+            toRenderSVGResourceContainer(*client).removeAllClientsFromCache(markForInvalidation);
             continue;
         }
 

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGResourceContainer.h (163282 => 163283)


--- trunk/Source/WebCore/rendering/svg/RenderSVGResourceContainer.h	2014-02-03 04:44:10 UTC (rev 163282)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGResourceContainer.h	2014-02-03 04:50:00 UTC (rev 163283)
@@ -37,7 +37,6 @@
     virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle) override final;
 
     virtual bool isSVGResourceContainer() const override final { return true; }
-    virtual RenderSVGResourceContainer* toRenderSVGResourceContainer() override final { return this; }
 
     static bool shouldTransformOnTextPainting(RenderObject*, AffineTransform&);
     static AffineTransform transformOnNonScalingStroke(RenderObject*, const AffineTransform& resourceTransform);
@@ -77,6 +76,8 @@
     HashSet<RenderLayer*> m_clientLayers;
 };
 
+RENDER_OBJECT_TYPE_CASTS(RenderSVGResourceContainer, isSVGResourceContainer())
+
 inline RenderSVGResourceContainer* getRenderSVGResourceContainerById(Document& document, const AtomicString& id)
 {
     if (id.isEmpty())

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGResourceFilter.cpp (163282 => 163283)


--- trunk/Source/WebCore/rendering/svg/RenderSVGResourceFilter.cpp	2014-02-03 04:44:10 UTC (rev 163282)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGResourceFilter.cpp	2014-02-03 04:50:00 UTC (rev 163283)
@@ -76,7 +76,7 @@
     markClientForInvalidation(client, markForInvalidation ? BoundariesInvalidation : ParentOnlyInvalidation);
 }
 
-std::unique_ptr<SVGFilterBuilder> RenderSVGResourceFilter::buildPrimitives(SVGFilter* filter)
+std::unique_ptr<SVGFilterBuilder> RenderSVGResourceFilter::buildPrimitives(SVGFilter* filter) const
 {
     FloatRect targetBoundingBox = filter->targetBoundingBox();
 

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGResourceFilter.h (163282 => 163283)


--- trunk/Source/WebCore/rendering/svg/RenderSVGResourceFilter.h	2014-02-03 04:44:10 UTC (rev 163282)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGResourceFilter.h	2014-02-03 04:50:00 UTC (rev 163283)
@@ -76,7 +76,7 @@
 
     virtual FloatRect resourceBoundingBox(const RenderObject&) override;
 
-    std::unique_ptr<SVGFilterBuilder> buildPrimitives(SVGFilter*);
+    std::unique_ptr<SVGFilterBuilder> buildPrimitives(SVGFilter*) const;
 
     SVGUnitTypes::SVGUnitType filterUnits() const { return filterElement().filterUnits(); }
     SVGUnitTypes::SVGUnitType primitiveUnits() const { return filterElement().primitiveUnits(); }

Modified: trunk/Source/WebCore/rendering/svg/SVGRenderTreeAsText.cpp (163282 => 163283)


--- trunk/Source/WebCore/rendering/svg/SVGRenderTreeAsText.cpp	2014-02-03 04:44:10 UTC (rev 163282)
+++ trunk/Source/WebCore/rendering/svg/SVGRenderTreeAsText.cpp	2014-02-03 04:50:00 UTC (rev 163283)
@@ -476,48 +476,47 @@
     const AtomicString& id = element->getIdAttribute();
     writeNameAndQuotedValue(ts, "id", id);    
 
-    RenderSVGResourceContainer* resource = const_cast<RenderObject&>(object).toRenderSVGResourceContainer();
-    ASSERT(resource);
+    const auto& resource = toRenderSVGResourceContainer(object);
 
-    if (resource->resourceType() == MaskerResourceType) {
-        RenderSVGResourceMasker* masker = static_cast<RenderSVGResourceMasker*>(resource);
-        writeNameValuePair(ts, "maskUnits", masker->maskUnits());
-        writeNameValuePair(ts, "maskContentUnits", masker->maskContentUnits());
+    if (resource.resourceType() == MaskerResourceType) {
+        const auto& masker = static_cast<const RenderSVGResourceMasker&>(resource);
+        writeNameValuePair(ts, "maskUnits", masker.maskUnits());
+        writeNameValuePair(ts, "maskContentUnits", masker.maskContentUnits());
         ts << "\n";
 #if ENABLE(FILTERS)
-    } else if (resource->resourceType() == FilterResourceType) {
-        RenderSVGResourceFilter* filter = static_cast<RenderSVGResourceFilter*>(resource);
-        writeNameValuePair(ts, "filterUnits", filter->filterUnits());
-        writeNameValuePair(ts, "primitiveUnits", filter->primitiveUnits());
+    } else if (resource.resourceType() == FilterResourceType) {
+        const auto& filter = static_cast<const RenderSVGResourceFilter&>(resource);
+        writeNameValuePair(ts, "filterUnits", filter.filterUnits());
+        writeNameValuePair(ts, "primitiveUnits", filter.primitiveUnits());
         ts << "\n";
         // Creating a placeholder filter which is passed to the builder.
         FloatRect dummyRect;
         RefPtr<SVGFilter> dummyFilter = SVGFilter::create(AffineTransform(), dummyRect, dummyRect, dummyRect, true);
-        if (auto builder = filter->buildPrimitives(dummyFilter.get())) {
+        if (auto builder = filter.buildPrimitives(dummyFilter.get())) {
             if (FilterEffect* lastEffect = builder->lastEffect())
                 lastEffect->externalRepresentation(ts, indent + 1);
         }
 #endif
-    } else if (resource->resourceType() == ClipperResourceType) {
-        RenderSVGResourceClipper* clipper = static_cast<RenderSVGResourceClipper*>(resource);
-        writeNameValuePair(ts, "clipPathUnits", clipper->clipPathUnits());
+    } else if (resource.resourceType() == ClipperResourceType) {
+        const auto& clipper = static_cast<const RenderSVGResourceClipper&>(resource);
+        writeNameValuePair(ts, "clipPathUnits", clipper.clipPathUnits());
         ts << "\n";
-    } else if (resource->resourceType() == MarkerResourceType) {
-        RenderSVGResourceMarker* marker = static_cast<RenderSVGResourceMarker*>(resource);
-        writeNameValuePair(ts, "markerUnits", marker->markerUnits());
-        ts << " [ref at " << marker->referencePoint() << "]";
+    } else if (resource.resourceType() == MarkerResourceType) {
+        const auto& marker = static_cast<const RenderSVGResourceMarker&>(resource);
+        writeNameValuePair(ts, "markerUnits", marker.markerUnits());
+        ts << " [ref at " << marker.referencePoint() << "]";
         ts << " [angle=";
-        if (marker->angle() == -1)
+        if (marker.angle() == -1)
             ts << "auto" << "]\n";
         else
-            ts << marker->angle() << "]\n";
-    } else if (resource->resourceType() == PatternResourceType) {
-        RenderSVGResourcePattern* pattern = static_cast<RenderSVGResourcePattern*>(resource);
+            ts << marker.angle() << "]\n";
+    } else if (resource.resourceType() == PatternResourceType) {
+        const auto& pattern = static_cast<const RenderSVGResourcePattern&>(resource);
 
         // Dump final results that are used for rendering. No use in asking SVGPatternElement for its patternUnits(), as it may
         // link to other patterns using xlink:href, we need to build the full inheritance chain, aka. collectPatternProperties()
         PatternAttributes attributes;
-        pattern->patternElement().collectPatternAttributes(attributes);
+        pattern.patternElement().collectPatternAttributes(attributes);
 
         writeNameValuePair(ts, "patternUnits", attributes.patternUnits());
         writeNameValuePair(ts, "patternContentUnits", attributes.patternContentUnits());
@@ -526,29 +525,29 @@
         if (!transform.isIdentity())
             ts << " [patternTransform=" << transform << "]";
         ts << "\n";
-    } else if (resource->resourceType() == LinearGradientResourceType) {
-        RenderSVGResourceLinearGradient* gradient = static_cast<RenderSVGResourceLinearGradient*>(resource);
+    } else if (resource.resourceType() == LinearGradientResourceType) {
+        const auto& gradient = static_cast<const RenderSVGResourceLinearGradient&>(resource);
 
         // Dump final results that are used for rendering. No use in asking SVGGradientElement for its gradientUnits(), as it may
         // link to other gradients using xlink:href, we need to build the full inheritance chain, aka. collectGradientProperties()
         LinearGradientAttributes attributes;
-        gradient->linearGradientElement().collectGradientAttributes(attributes);
+        gradient.linearGradientElement().collectGradientAttributes(attributes);
         writeCommonGradientProperties(ts, attributes.spreadMethod(), attributes.gradientTransform(), attributes.gradientUnits());
 
-        ts << " [start=" << gradient->startPoint(attributes) << "] [end=" << gradient->endPoint(attributes) << "]\n";
-    }  else if (resource->resourceType() == RadialGradientResourceType) {
-        RenderSVGResourceRadialGradient* gradient = static_cast<RenderSVGResourceRadialGradient*>(resource);
+        ts << " [start=" << gradient.startPoint(attributes) << "] [end=" << gradient.endPoint(attributes) << "]\n";
+    }  else if (resource.resourceType() == RadialGradientResourceType) {
+        const auto& gradient = static_cast<const RenderSVGResourceRadialGradient&>(resource);
 
         // Dump final results that are used for rendering. No use in asking SVGGradientElement for its gradientUnits(), as it may
         // link to other gradients using xlink:href, we need to build the full inheritance chain, aka. collectGradientProperties()
         RadialGradientAttributes attributes;
-        gradient->radialGradientElement().collectGradientAttributes(attributes);
+        gradient.radialGradientElement().collectGradientAttributes(attributes);
         writeCommonGradientProperties(ts, attributes.spreadMethod(), attributes.gradientTransform(), attributes.gradientUnits());
 
-        FloatPoint focalPoint = gradient->focalPoint(attributes);
-        FloatPoint centerPoint = gradient->centerPoint(attributes);
-        float radius = gradient->radius(attributes);
-        float focalRadius = gradient->focalRadius(attributes);
+        FloatPoint focalPoint = gradient.focalPoint(attributes);
+        FloatPoint centerPoint = gradient.centerPoint(attributes);
+        float radius = gradient.radius(attributes);
+        float focalRadius = gradient.focalRadius(attributes);
 
         ts << " [center=" << centerPoint << "] [focal=" << focalPoint << "] [radius=" << radius << "] [focalRadius=" << focalRadius << "]\n";
     } else

Modified: trunk/Source/WebCore/rendering/svg/SVGResourcesCycleSolver.cpp (163282 => 163283)


--- trunk/Source/WebCore/rendering/svg/SVGResourcesCycleSolver.cpp	2014-02-03 04:44:10 UTC (rev 163282)
+++ trunk/Source/WebCore/rendering/svg/SVGResourcesCycleSolver.cpp	2014-02-03 04:50:00 UTC (rev 163283)
@@ -108,7 +108,7 @@
     auto parent = m_renderer.parent();
     while (parent) {
         if (parent->isSVGResourceContainer())
-            parentResources.add(parent->toRenderSVGResourceContainer());
+            parentResources.add(toRenderSVGResourceContainer(parent));
         parent = parent->parent();
     }
 
@@ -132,7 +132,7 @@
 
     // If we're a resource, add ourselves to the HashSet.
     if (m_renderer.isSVGResourceContainer())
-        m_allResources.add(m_renderer.toRenderSVGResourceContainer());
+        m_allResources.add(&toRenderSVGResourceContainer(m_renderer));
 
     ASSERT(!m_allResources.isEmpty());
 

Modified: trunk/Source/WebCore/svg/SVGElement.cpp (163282 => 163283)


--- trunk/Source/WebCore/svg/SVGElement.cpp	2014-02-03 04:44:10 UTC (rev 163282)
+++ trunk/Source/WebCore/svg/SVGElement.cpp	2014-02-03 04:50:00 UTC (rev 163283)
@@ -1010,10 +1010,10 @@
     }
 
     if (isIdAttributeName(attrName)) {
-        RenderObject* object = renderer();
+        auto renderer = this->renderer();
         // Notify resources about id changes, this is important as we cache resources by id in SVGDocumentExtensions
-        if (object && object->isSVGResourceContainer())
-            object->toRenderSVGResourceContainer()->idChanged();
+        if (renderer && renderer->isSVGResourceContainer())
+            toRenderSVGResourceContainer(*renderer).idChanged();
         if (inDocument())
             buildPendingResourcesIfNeeded();
         SVGElementInstance::invalidateAllInstancesOfElement(this);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to