diff options
author | Steve Block <steveblock@google.com> | 2010-08-04 11:41:34 +0100 |
---|---|---|
committer | Steve Block <steveblock@google.com> | 2010-08-09 12:04:44 +0100 |
commit | db14019a23d96bc8a444b6576a5da8bd1cfbc8b0 (patch) | |
tree | 9f793c5b0f5e1f2aca8247158920e2c4bf962bbf /WebCore/rendering/RenderSVGResourceMasker.cpp | |
parent | bf916837aa84f1e4b00e6ed6268516c2acd27545 (diff) | |
download | external_webkit-db14019a23d96bc8a444b6576a5da8bd1cfbc8b0.zip external_webkit-db14019a23d96bc8a444b6576a5da8bd1cfbc8b0.tar.gz external_webkit-db14019a23d96bc8a444b6576a5da8bd1cfbc8b0.tar.bz2 |
Merge WebKit at r64523 : Initial merge by git.
Change-Id: Ibb796c6802e757b1d9b40f58205cfbe4da95fcd4
Diffstat (limited to 'WebCore/rendering/RenderSVGResourceMasker.cpp')
-rw-r--r-- | WebCore/rendering/RenderSVGResourceMasker.cpp | 40 |
1 files changed, 16 insertions, 24 deletions
diff --git a/WebCore/rendering/RenderSVGResourceMasker.cpp b/WebCore/rendering/RenderSVGResourceMasker.cpp index 83a64b5..2c36c96 100644 --- a/WebCore/rendering/RenderSVGResourceMasker.cpp +++ b/WebCore/rendering/RenderSVGResourceMasker.cpp @@ -19,6 +19,7 @@ */ #include "config.h" + #if ENABLE(SVG) #include "RenderSVGResourceMasker.h" @@ -51,37 +52,33 @@ RenderSVGResourceMasker::RenderSVGResourceMasker(SVGMaskElement* node) RenderSVGResourceMasker::~RenderSVGResourceMasker() { + if (m_masker.isEmpty()) + return; + deleteAllValues(m_masker); m_masker.clear(); } void RenderSVGResourceMasker::invalidateClients() { - HashMap<RenderObject*, MaskerData*>::const_iterator end = m_masker.end(); - for (HashMap<RenderObject*, MaskerData*>::const_iterator it = m_masker.begin(); it != end; ++it) - markForLayoutAndResourceInvalidation(it->first); - - deleteAllValues(m_masker); - m_masker.clear(); m_maskBoundaries = FloatRect(); -} - -void RenderSVGResourceMasker::invalidateClient(RenderObject* object) -{ - ASSERT(object); - if (!m_masker.contains(object)) - return; + if (!m_masker.isEmpty()) { + deleteAllValues(m_masker); + m_masker.clear(); + } - delete m_masker.take(object); - markForLayoutAndResourceInvalidation(object); + markAllClientsForInvalidation(LayoutAndBoundariesInvalidation); } -bool RenderSVGResourceMasker::childElementReferencesResource(const SVGRenderStyle* style, const String& referenceId) const +void RenderSVGResourceMasker::invalidateClient(RenderObject* client) { - if (!style->hasMasker()) - return false; + ASSERT(client); + ASSERT(client->selfNeedsLayout()); - return style->maskerResource() == referenceId; + if (m_masker.contains(client)) + delete m_masker.take(client); + + markClientForInvalidation(client, BoundariesInvalidation); } bool RenderSVGResourceMasker::applyResource(RenderObject* object, RenderStyle*, GraphicsContext*& context, unsigned short resourceMode) @@ -102,11 +99,6 @@ bool RenderSVGResourceMasker::applyResource(RenderObject* object, RenderStyle*, SVGMaskElement* maskElement = static_cast<SVGMaskElement*>(node()); if (!maskElement) return false; - - // Early exit, if this resource contains a child which references ourselves. - if (containsCyclicReference(node())) - return false; - createMaskImage(maskerData, maskElement, object); } |