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/RenderSVGResourceMarker.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/RenderSVGResourceMarker.cpp')
-rw-r--r-- | WebCore/rendering/RenderSVGResourceMarker.cpp | 37 |
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 |