summaryrefslogtreecommitdiff
path: root/Source/WebCore/rendering/svg/SVGResourcesCache.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/rendering/svg/SVGResourcesCache.cpp')
-rw-r--r--Source/WebCore/rendering/svg/SVGResourcesCache.cpp76
1 files changed, 29 insertions, 47 deletions
diff --git a/Source/WebCore/rendering/svg/SVGResourcesCache.cpp b/Source/WebCore/rendering/svg/SVGResourcesCache.cpp
index fad518a32..83d912eeb 100644
--- a/Source/WebCore/rendering/svg/SVGResourcesCache.cpp
+++ b/Source/WebCore/rendering/svg/SVGResourcesCache.cpp
@@ -20,8 +20,6 @@
#include "config.h"
#include "SVGResourcesCache.h"
-#if ENABLE(SVG)
-#include "HTMLNames.h"
#include "RenderSVGResourceContainer.h"
#include "SVGResources.h"
#include "SVGResourcesCycleSolver.h"
@@ -40,15 +38,13 @@ void SVGResourcesCache::addResourcesFromRenderer(RenderElement& renderer, const
{
ASSERT(!m_cache.contains(&renderer));
- const SVGRenderStyle& svgStyle = style.svgStyle();
-
// Build a list of all resources associated with the passed RenderObject
- OwnPtr<SVGResources> newResources = adoptPtr(new SVGResources);
- if (!newResources->buildCachedResources(renderer, svgStyle))
+ auto newResources = std::make_unique<SVGResources>();
+ if (!newResources->buildCachedResources(renderer, style))
return;
// Put object in cache.
- SVGResources& resources = *m_cache.add(&renderer, newResources.release()).iterator->value;
+ SVGResources& resources = *m_cache.add(&renderer, WTFMove(newResources)).iterator->value;
// Run cycle-detection _afterwards_, so self-references can be caught as well.
SVGResourcesCycleSolver solver(renderer, resources);
@@ -58,13 +54,13 @@ void SVGResourcesCache::addResourcesFromRenderer(RenderElement& renderer, const
HashSet<RenderSVGResourceContainer*> resourceSet;
resources.buildSetOfResources(resourceSet);
- for (auto it = resourceSet.begin(), end = resourceSet.end(); it != end; ++it)
- (*it)->addClient(&renderer);
+ for (auto* resourceContainer : resourceSet)
+ resourceContainer->addClient(renderer);
}
void SVGResourcesCache::removeResourcesFromRenderer(RenderElement& renderer)
{
- OwnPtr<SVGResources> resources = m_cache.take(&renderer);
+ std::unique_ptr<SVGResources> resources = m_cache.take(&renderer);
if (!resources)
return;
@@ -72,29 +68,23 @@ void SVGResourcesCache::removeResourcesFromRenderer(RenderElement& renderer)
HashSet<RenderSVGResourceContainer*> resourceSet;
resources->buildSetOfResources(resourceSet);
- for (auto it = resourceSet.begin(), end = resourceSet.end(); it != end; ++it)
- (*it)->removeClient(&renderer);
+ for (auto* resourceContainer : resourceSet)
+ resourceContainer->removeClient(renderer);
}
-static inline SVGResourcesCache* resourcesCacheFromRenderObject(const RenderObject& renderer)
+static inline SVGResourcesCache& resourcesCacheFromRenderer(const RenderElement& renderer)
{
- SVGDocumentExtensions* extensions = renderer.document().accessSVGExtensions();
- ASSERT(extensions);
-
- SVGResourcesCache* cache = extensions->resourcesCache();
- ASSERT(cache);
-
- return cache;
+ return renderer.document().accessSVGExtensions().resourcesCache();
}
-SVGResources* SVGResourcesCache::cachedResourcesForRenderObject(const RenderObject& renderer)
+SVGResources* SVGResourcesCache::cachedResourcesForRenderer(const RenderElement& renderer)
{
- return resourcesCacheFromRenderObject(renderer)->m_cache.get(&renderer);
+ return resourcesCacheFromRenderer(renderer).m_cache.get(&renderer);
}
void SVGResourcesCache::clientLayoutChanged(RenderElement& renderer)
{
- SVGResources* resources = SVGResourcesCache::cachedResourcesForRenderObject(renderer);
+ auto* resources = SVGResourcesCache::cachedResourcesForRenderer(renderer);
if (!resources)
return;
@@ -122,15 +112,15 @@ void SVGResourcesCache::clientStyleChanged(RenderElement& renderer, StyleDiffere
// FIXME: Avoid passing in a useless StyleDifference, but instead compare oldStyle/newStyle to see which resources changed
// to be able to selectively rebuild individual resources, instead of all of them.
if (rendererCanHaveResources(renderer)) {
- SVGResourcesCache* cache = resourcesCacheFromRenderObject(renderer);
- cache->removeResourcesFromRenderer(renderer);
- cache->addResourcesFromRenderer(renderer, newStyle);
+ auto& cache = resourcesCacheFromRenderer(renderer);
+ cache.removeResourcesFromRenderer(renderer);
+ cache.addResourcesFromRenderer(renderer, newStyle);
}
RenderSVGResource::markForLayoutAndParentResourceInvalidation(renderer, false);
if (renderer.element() && !renderer.element()->isSVGElement())
- renderer.element()->setNeedsStyleRecalc(SyntheticStyleChange);
+ renderer.element()->invalidateStyleAndLayerComposition();
}
void SVGResourcesCache::clientWasAddedToTree(RenderObject& renderer)
@@ -142,9 +132,8 @@ void SVGResourcesCache::clientWasAddedToTree(RenderObject& renderer)
if (!rendererCanHaveResources(renderer))
return;
- RenderElement& elementRenderer = toRenderElement(renderer);
- SVGResourcesCache* cache = resourcesCacheFromRenderObject(elementRenderer);
- cache->addResourcesFromRenderer(elementRenderer, elementRenderer.style());
+ RenderElement& elementRenderer = downcast<RenderElement>(renderer);
+ resourcesCacheFromRenderer(elementRenderer).addResourcesFromRenderer(elementRenderer, elementRenderer.style());
}
void SVGResourcesCache::clientWillBeRemovedFromTree(RenderObject& renderer)
@@ -156,40 +145,33 @@ void SVGResourcesCache::clientWillBeRemovedFromTree(RenderObject& renderer)
if (!rendererCanHaveResources(renderer))
return;
- RenderElement& elementRenderer = toRenderElement(renderer);
- SVGResourcesCache* cache = resourcesCacheFromRenderObject(elementRenderer);
- cache->removeResourcesFromRenderer(elementRenderer);
+ RenderElement& elementRenderer = downcast<RenderElement>(renderer);
+ resourcesCacheFromRenderer(elementRenderer).removeResourcesFromRenderer(elementRenderer);
}
void SVGResourcesCache::clientDestroyed(RenderElement& renderer)
{
- SVGResources* resources = SVGResourcesCache::cachedResourcesForRenderObject(renderer);
- if (resources)
+ if (auto* resources = SVGResourcesCache::cachedResourcesForRenderer(renderer))
resources->removeClientFromCache(renderer);
- SVGResourcesCache* cache = resourcesCacheFromRenderObject(renderer);
- cache->removeResourcesFromRenderer(renderer);
+ resourcesCacheFromRenderer(renderer).removeResourcesFromRenderer(renderer);
}
void SVGResourcesCache::resourceDestroyed(RenderSVGResourceContainer& resource)
{
- SVGResourcesCache* cache = resourcesCacheFromRenderObject(resource);
+ auto& cache = resourcesCacheFromRenderer(resource);
// The resource itself may have clients, that need to be notified.
- cache->removeResourcesFromRenderer(resource);
+ cache.removeResourcesFromRenderer(resource);
- for (auto it = cache->m_cache.begin(), end = cache->m_cache.end(); it != end; ++it) {
- it->value->resourceDestroyed(resource);
+ for (auto& it : cache.m_cache) {
+ it.value->resourceDestroyed(resource);
// Mark users of destroyed resources as pending resolution based on the id of the old resource.
Element& resourceElement = resource.element();
- Element* clientElement = toElement(it->key->node());
- SVGDocumentExtensions* extensions = clientElement->document().accessSVGExtensions();
-
- extensions->addPendingResource(resourceElement.getIdAttribute(), clientElement);
+ Element* clientElement = it.key->element();
+ clientElement->document().accessSVGExtensions().addPendingResource(resourceElement.getIdAttribute(), clientElement);
}
}
}
-
-#endif