summaryrefslogtreecommitdiffstats
path: root/WebCore/rendering/RenderForeignObject.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/rendering/RenderForeignObject.cpp')
-rw-r--r--WebCore/rendering/RenderForeignObject.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/WebCore/rendering/RenderForeignObject.cpp b/WebCore/rendering/RenderForeignObject.cpp
index 50c1a42..bfcb940 100644
--- a/WebCore/rendering/RenderForeignObject.cpp
+++ b/WebCore/rendering/RenderForeignObject.cpp
@@ -102,14 +102,20 @@ void RenderForeignObject::layout()
LayoutRepainter repainter(*this, m_everHadLayout && checkForRepaintDuringLayout());
SVGForeignObjectElement* foreign = static_cast<SVGForeignObjectElement*>(node());
+ bool updateCachedBoundariesInParents = false;
if (m_needsTransformUpdate) {
m_localTransform = foreign->animatedLocalTransform();
m_needsTransformUpdate = false;
+ updateCachedBoundariesInParents = true;
}
+ FloatRect oldViewport = m_viewport;
+
// Cache viewport boundaries
FloatPoint viewportLocation(foreign->x().value(foreign), foreign->y().value(foreign));
m_viewport = FloatRect(viewportLocation, FloatSize(foreign->width().value(foreign), foreign->height().value(foreign)));
+ if (!updateCachedBoundariesInParents)
+ updateCachedBoundariesInParents = oldViewport != m_viewport;
// Set box origin to the foreignObject x/y translation, so positioned objects in XHTML content get correct
// positions. A regular RenderBoxModelObject would pull this information from RenderStyle - in SVG those
@@ -122,6 +128,10 @@ void RenderForeignObject::layout()
RenderBlock::layout();
ASSERT(!needsLayout());
+ // If our bounds changed, notify the parents.
+ if (updateCachedBoundariesInParents)
+ RenderSVGBlock::setNeedsBoundariesUpdate();
+
// Invalidate all resources of this client if our layout changed.
if (layoutChanged)
SVGResourcesCache::clientLayoutChanged(this);