diff options
Diffstat (limited to 'WebCore/rendering/RenderSVGResourceGradient.cpp')
-rw-r--r-- | WebCore/rendering/RenderSVGResourceGradient.cpp | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/WebCore/rendering/RenderSVGResourceGradient.cpp b/WebCore/rendering/RenderSVGResourceGradient.cpp index ce51369..73b2ab6 100644 --- a/WebCore/rendering/RenderSVGResourceGradient.cpp +++ b/WebCore/rendering/RenderSVGResourceGradient.cpp @@ -43,28 +43,32 @@ RenderSVGResourceGradient::RenderSVGResourceGradient(SVGGradientElement* node) RenderSVGResourceGradient::~RenderSVGResourceGradient() { + if (m_gradient.isEmpty()) + return; + deleteAllValues(m_gradient); m_gradient.clear(); } void RenderSVGResourceGradient::invalidateClients() { - const HashMap<RenderObject*, GradientData*>::const_iterator end = m_gradient.end(); - for (HashMap<RenderObject*, GradientData*>::const_iterator it = m_gradient.begin(); it != end; ++it) - markForLayoutAndResourceInvalidation(it->first, false); + if (!m_gradient.isEmpty()) { + deleteAllValues(m_gradient); + m_gradient.clear(); + } - deleteAllValues(m_gradient); - m_gradient.clear(); + markAllClientsForInvalidation(RepaintInvalidation); } -void RenderSVGResourceGradient::invalidateClient(RenderObject* object) +void RenderSVGResourceGradient::invalidateClient(RenderObject* client) { - ASSERT(object); - if (!m_gradient.contains(object)) - return; + ASSERT(client); + ASSERT(client->selfNeedsLayout()); + + if (m_gradient.contains(client)) + delete m_gradient.take(client); - delete m_gradient.take(object); - markForLayoutAndResourceInvalidation(object, false); + markClientForInvalidation(client, RepaintInvalidation); } #if PLATFORM(CG) |