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);