summaryrefslogtreecommitdiffstats
path: root/WebCore/rendering/RenderSVGResourceMasker.cpp
diff options
context:
space:
mode:
authorSteve Block <steveblock@google.com>2010-08-04 11:41:34 +0100
committerSteve Block <steveblock@google.com>2010-08-09 12:04:44 +0100
commitdb14019a23d96bc8a444b6576a5da8bd1cfbc8b0 (patch)
tree9f793c5b0f5e1f2aca8247158920e2c4bf962bbf /WebCore/rendering/RenderSVGResourceMasker.cpp
parentbf916837aa84f1e4b00e6ed6268516c2acd27545 (diff)
downloadexternal_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.cpp40
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);
}