summaryrefslogtreecommitdiffstats
path: root/WebCore/rendering/RenderSVGResourceMarker.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/RenderSVGResourceMarker.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/RenderSVGResourceMarker.cpp')
-rw-r--r--WebCore/rendering/RenderSVGResourceMarker.cpp37
1 files changed, 10 insertions, 27 deletions
diff --git a/WebCore/rendering/RenderSVGResourceMarker.cpp b/WebCore/rendering/RenderSVGResourceMarker.cpp
index 4f0cace..fa00fa3 100644
--- a/WebCore/rendering/RenderSVGResourceMarker.cpp
+++ b/WebCore/rendering/RenderSVGResourceMarker.cpp
@@ -21,6 +21,7 @@
*/
#include "config.h"
+
#if ENABLE(SVG)
#include "RenderSVGResourceMarker.h"
@@ -43,39 +44,30 @@ RenderSVGResourceMarker::RenderSVGResourceMarker(SVGMarkerElement* node)
RenderSVGResourceMarker::~RenderSVGResourceMarker()
{
- m_marker.clear();
}
void RenderSVGResourceMarker::layout()
{
+ // Invalidate all resources if our layout changed.
+ if (m_everHadLayout && selfNeedsLayout())
+ invalidateClients();
+
// RenderSVGHiddenContainer overwrites layout(). We need the
// layouting of RenderSVGContainer for calculating local
// transformations and repaint.
RenderSVGContainer::layout();
}
-void RenderSVGResourceMarker::addClient(const RenderObject* object)
-{
- m_marker.add(object);
-}
-
void RenderSVGResourceMarker::invalidateClients()
{
- const HashSet<const RenderObject*>::const_iterator end = m_marker.end();
- for (HashSet<const RenderObject*>::const_iterator it = m_marker.begin(); it != end; ++it)
- markForLayoutAndResourceInvalidation(const_cast<RenderObject*>(*it));
-
- m_marker.clear();
+ markAllClientsForInvalidation(LayoutAndBoundariesInvalidation);
}
-void RenderSVGResourceMarker::invalidateClient(RenderObject* object)
+void RenderSVGResourceMarker::invalidateClient(RenderObject* client)
{
- ASSERT(object);
- if (!m_marker.contains(object))
- return;
-
- m_marker.remove(object);
- markForLayoutAndResourceInvalidation(object);
+ ASSERT(client);
+ ASSERT(client->selfNeedsLayout());
+ markClientForInvalidation(client, BoundariesInvalidation);
}
void RenderSVGResourceMarker::applyViewportClip(PaintInfo& paintInfo)
@@ -140,20 +132,11 @@ AffineTransform RenderSVGResourceMarker::markerTransformation(const FloatPoint&
void RenderSVGResourceMarker::draw(PaintInfo& paintInfo, const AffineTransform& transform)
{
- DEFINE_STATIC_LOCAL(HashSet<RenderSVGResourceMarker*>, currentlyDrawingMarkers, ());
-
- // avoid drawing circular marker references
- if (currentlyDrawingMarkers.contains(this))
- return;
-
- currentlyDrawingMarkers.add(this);
PaintInfo info(paintInfo);
info.context->save();
info.applyTransform(transform);
RenderSVGContainer::paint(info, 0, 0);
info.context->restore();
-
- currentlyDrawingMarkers.remove(this);
}
AffineTransform RenderSVGResourceMarker::markerContentTransformation(const AffineTransform& contentTransformation, const FloatPoint& origin, float strokeWidth) const