Diff
Modified: trunk/Source/WebCore/ChangeLog (89753 => 89754)
--- trunk/Source/WebCore/ChangeLog 2011-06-25 23:01:15 UTC (rev 89753)
+++ trunk/Source/WebCore/ChangeLog 2011-06-25 23:01:33 UTC (rev 89754)
@@ -5,6 +5,72 @@
Inspector highlight rect is wrong for contents of transformed iframes
https://bugs.webkit.org/show_bug.cgi?id=53627
+ Part 2: Only adjust for the FrameView's scroll position when
+ the localToAbsolute mapping did not end with fixed content.
+ Content that is inside of a fixed position container is already
+ adjusted for the FrameView's scrollPosition when RenderView
+ maps local to container.
+
+ This patch uses a "wasFixed" out parameter to determine if
+ the localToAbsolute transformation ended inside a fixed block,
+ and if so does not apply the scroll position.
+
+ * page/FrameView.cpp:
+ (WebCore::FrameView::convertFromRenderer):
+ Respect wasFixed as described above.
+
+ * rendering/RenderBox.h:
+ * rendering/RenderBox.cpp:
+ (WebCore::RenderBox::mapLocalToContainer):
+ This is the only time that "fixed" ever changed. So when
+ fixed changes, update the optional wasFixed out parameter.
+
+ * rendering/RenderObject.cpp:
+ (WebCore::RenderObject::localToAbsolute):
+ (WebCore::RenderObject::mapLocalToContainer):
+ (WebCore::RenderObject::localToContainerQuad):
+ * rendering/RenderObject.h:
+ (WebCore::RenderObject::localToAbsoluteQuad):
+ Ignore wasFixed by default, but pipe it though where needed.
+
+ * rendering/RenderView.h:
+ * rendering/RenderView.cpp:
+ (WebCore::RenderView::mapLocalToContainer):
+ This is the final recursive call, so wasFixed goes no
+ further. We sanity check its value in debug builds.
+
+ * rendering/RenderBlock.cpp:
+ (WebCore::RenderBlock::selectionGapRectsForRepaint):
+ * rendering/RenderInline.cpp:
+ (WebCore::RenderInline::mapLocalToContainer):
+ * rendering/RenderInline.h:
+ * rendering/svg/RenderSVGForeignObject.cpp:
+ (WebCore::RenderSVGForeignObject::mapLocalToContainer):
+ * rendering/svg/RenderSVGForeignObject.h:
+ * rendering/svg/RenderSVGInline.cpp:
+ (WebCore::RenderSVGInline::mapLocalToContainer):
+ * rendering/svg/RenderSVGInline.h:
+ * rendering/svg/RenderSVGModelObject.cpp:
+ (WebCore::RenderSVGModelObject::mapLocalToContainer):
+ * rendering/svg/RenderSVGModelObject.h:
+ * rendering/svg/RenderSVGRoot.cpp:
+ (WebCore::RenderSVGRoot::mapLocalToContainer):
+ * rendering/svg/RenderSVGRoot.h:
+ * rendering/svg/RenderSVGText.cpp:
+ (WebCore::RenderSVGText::mapLocalToContainer):
+ * rendering/svg/RenderSVGText.h:
+ * rendering/svg/SVGRenderSupport.cpp:
+ (WebCore::SVGRenderSupport::mapLocalToContainer):
+ * rendering/svg/SVGRenderSupport.h:
+ Pipe wasFixed through where needed.
+
+2011-06-25 Joseph Pecoraro <[email protected]>
+
+ Reviewed by Simon Fraser.
+
+ Inspector highlight rect is wrong for contents of transformed iframes
+ https://bugs.webkit.org/show_bug.cgi?id=53627
+
Part 1: Provide FloatQuad versions of convertFromRenderer,
convertToContainingView, and convertChildToSelf, so that we
can get the fully transformed quad of a renderer all the
Modified: trunk/Source/WebCore/page/FrameView.cpp (89753 => 89754)
--- trunk/Source/WebCore/page/FrameView.cpp 2011-06-25 23:01:15 UTC (rev 89753)
+++ trunk/Source/WebCore/page/FrameView.cpp 2011-06-25 23:01:33 UTC (rev 89754)
@@ -2808,10 +2808,13 @@
FloatQuad FrameView::convertFromRenderer(const RenderObject* renderer, const FloatQuad& rendererQuad) const
{
- FloatQuad quad = renderer->localToAbsoluteQuad(rendererQuad);
+ bool wasFixed = false;
+ FloatQuad quad = renderer->localToAbsoluteQuad(rendererQuad, false, &wasFixed);
- IntPoint scroll = scrollPosition();
- quad.move(-scroll.x(), -scroll.y());
+ if (!wasFixed) {
+ IntPoint scroll = scrollPosition();
+ quad.move(-scroll.x(), -scroll.y());
+ }
return quad;
}
Modified: trunk/Source/WebCore/rendering/RenderBox.cpp (89753 => 89754)
--- trunk/Source/WebCore/rendering/RenderBox.cpp 2011-06-25 23:01:15 UTC (rev 89753)
+++ trunk/Source/WebCore/rendering/RenderBox.cpp 2011-06-25 23:01:33 UTC (rev 89754)
@@ -1201,7 +1201,7 @@
return cb->computeContentBoxLogicalHeight(logicalHeightLength.value());
}
-void RenderBox::mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool fixed, bool useTransforms, TransformState& transformState) const
+void RenderBox::mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool fixed, bool useTransforms, TransformState& transformState, bool* wasFixed) const
{
if (repaintContainer == this)
return;
@@ -1231,6 +1231,8 @@
fixed &= isFixedPos;
} else
fixed |= isFixedPos;
+ if (wasFixed)
+ *wasFixed = fixed;
IntSize containerOffset = offsetFromContainer(o, roundedIntPoint(transformState.mappedPoint()));
@@ -1250,7 +1252,7 @@
return;
}
- o->mapLocalToContainer(repaintContainer, fixed, useTransforms, transformState);
+ o->mapLocalToContainer(repaintContainer, fixed, useTransforms, transformState, wasFixed);
}
void RenderBox::mapAbsoluteToLocalPoint(bool fixed, bool useTransforms, TransformState& transformState) const
Modified: trunk/Source/WebCore/rendering/RenderBox.h (89753 => 89754)
--- trunk/Source/WebCore/rendering/RenderBox.h 2011-06-25 23:01:15 UTC (rev 89753)
+++ trunk/Source/WebCore/rendering/RenderBox.h 2011-06-25 23:01:33 UTC (rev 89754)
@@ -430,7 +430,7 @@
virtual bool shouldComputeSizeAsReplaced() const { return isReplaced() && !isInlineBlockOrInlineTable(); }
- virtual void mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool fixed, bool useTransforms, TransformState&) const;
+ virtual void mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool fixed, bool useTransforms, TransformState&, bool* wasFixed = 0) const;
virtual void mapAbsoluteToLocalPoint(bool fixed, bool useTransforms, TransformState&) const;
void paintRootBoxFillLayers(const PaintInfo&);
Modified: trunk/Source/WebCore/rendering/RenderInline.cpp (89753 => 89754)
--- trunk/Source/WebCore/rendering/RenderInline.cpp 2011-06-25 23:01:15 UTC (rev 89753)
+++ trunk/Source/WebCore/rendering/RenderInline.cpp 2011-06-25 23:01:33 UTC (rev 89754)
@@ -1110,7 +1110,7 @@
return offset;
}
-void RenderInline::mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool fixed, bool useTransforms, TransformState& transformState) const
+void RenderInline::mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool fixed, bool useTransforms, TransformState& transformState, bool* wasFixed) const
{
if (repaintContainer == this)
return;
@@ -1153,7 +1153,7 @@
return;
}
- o->mapLocalToContainer(repaintContainer, fixed, useTransforms, transformState);
+ o->mapLocalToContainer(repaintContainer, fixed, useTransforms, transformState, wasFixed);
}
void RenderInline::mapAbsoluteToLocalPoint(bool fixed, bool useTransforms, TransformState& transformState) const
Modified: trunk/Source/WebCore/rendering/RenderInline.h (89753 => 89754)
--- trunk/Source/WebCore/rendering/RenderInline.h 2011-06-25 23:01:15 UTC (rev 89753)
+++ trunk/Source/WebCore/rendering/RenderInline.h 2011-06-25 23:01:33 UTC (rev 89754)
@@ -130,7 +130,7 @@
virtual IntRect rectWithOutlineForRepaint(RenderBoxModelObject* repaintContainer, int outlineWidth);
virtual void computeRectForRepaint(RenderBoxModelObject* repaintContainer, IntRect& rect, bool fixed);
- virtual void mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool fixed, bool useTransforms, TransformState&) const;
+ virtual void mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool fixed, bool useTransforms, TransformState&, bool* wasFixed = 0) const;
virtual void mapAbsoluteToLocalPoint(bool fixed, bool useTransforms, TransformState&) const;
virtual VisiblePosition positionForPoint(const IntPoint&);
Modified: trunk/Source/WebCore/rendering/RenderObject.cpp (89753 => 89754)
--- trunk/Source/WebCore/rendering/RenderObject.cpp 2011-06-25 23:01:15 UTC (rev 89753)
+++ trunk/Source/WebCore/rendering/RenderObject.cpp 2011-06-25 23:01:33 UTC (rev 89754)
@@ -1840,7 +1840,7 @@
return transformState.lastPlanarPoint();
}
-void RenderObject::mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool fixed, bool useTransforms, TransformState& transformState) const
+void RenderObject::mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool fixed, bool useTransforms, TransformState& transformState, bool* wasFixed) const
{
if (repaintContainer == this)
return;
@@ -1861,7 +1861,7 @@
if (o->hasOverflowClip())
transformState.move(-toRenderBox(o)->layer()->scrolledContentOffset());
- o->mapLocalToContainer(repaintContainer, fixed, useTransforms, transformState);
+ o->mapLocalToContainer(repaintContainer, fixed, useTransforms, transformState, wasFixed);
}
void RenderObject::mapAbsoluteToLocalPoint(bool fixed, bool useTransforms, TransformState& transformState) const
@@ -1912,12 +1912,12 @@
#endif
}
-FloatQuad RenderObject::localToContainerQuad(const FloatQuad& localQuad, RenderBoxModelObject* repaintContainer, bool fixed) const
+FloatQuad RenderObject::localToContainerQuad(const FloatQuad& localQuad, RenderBoxModelObject* repaintContainer, bool fixed, bool* wasFixed) const
{
// Track the point at the center of the quad's bounding box. As mapLocalToContainer() calls offsetFromContainer(),
// it will use that point as the reference point to decide which column's transform to apply in multiple-column blocks.
TransformState transformState(TransformState::ApplyTransformDirection, localQuad.boundingBox().center(), &localQuad);
- mapLocalToContainer(repaintContainer, fixed, true, transformState);
+ mapLocalToContainer(repaintContainer, fixed, true, transformState, wasFixed);
transformState.flatten();
return transformState.lastPlanarQuad();
Modified: trunk/Source/WebCore/rendering/RenderObject.h (89753 => 89754)
--- trunk/Source/WebCore/rendering/RenderObject.h 2011-06-25 23:01:15 UTC (rev 89753)
+++ trunk/Source/WebCore/rendering/RenderObject.h 2011-06-25 23:01:33 UTC (rev 89754)
@@ -579,12 +579,12 @@
FloatPoint absoluteToLocal(const FloatPoint&, bool fixed = false, bool useTransforms = false) const;
// Convert a local quad to absolute coordinates, taking transforms into account.
- FloatQuad localToAbsoluteQuad(const FloatQuad& quad, bool fixed = false) const
+ FloatQuad localToAbsoluteQuad(const FloatQuad& quad, bool fixed = false, bool* wasFixed = 0) const
{
- return localToContainerQuad(quad, 0, fixed);
+ return localToContainerQuad(quad, 0, fixed, wasFixed);
}
// Convert a local quad into the coordinate system of container, taking transforms into account.
- FloatQuad localToContainerQuad(const FloatQuad&, RenderBoxModelObject* repaintContainer, bool fixed = false) const;
+ FloatQuad localToContainerQuad(const FloatQuad&, RenderBoxModelObject* repaintContainer, bool fixed = false, bool* wasFixed = 0) const;
// Return the offset from the container() renderer (excluding transforms). In multi-column layout,
// different offsets apply at different points, so return the offset that applies to the given point.
@@ -771,7 +771,7 @@
// Map points and quads through elements, potentially via 3d transforms. You should never need to call these directly; use
// localToAbsolute/absoluteToLocal methods instead.
- virtual void mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool useTransforms, bool fixed, TransformState&) const;
+ virtual void mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool useTransforms, bool fixed, TransformState&, bool* wasFixed = 0) const;
virtual void mapAbsoluteToLocalPoint(bool fixed, bool useTransforms, TransformState&) const;
bool shouldUseTransformFromContainer(const RenderObject* container) const;
Modified: trunk/Source/WebCore/rendering/RenderView.cpp (89753 => 89754)
--- trunk/Source/WebCore/rendering/RenderView.cpp 2011-06-25 23:01:15 UTC (rev 89753)
+++ trunk/Source/WebCore/rendering/RenderView.cpp 2011-06-25 23:01:33 UTC (rev 89754)
@@ -136,11 +136,13 @@
setNeedsLayout(false);
}
-void RenderView::mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool fixed, bool useTransforms, TransformState& transformState) const
+void RenderView::mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool fixed, bool useTransforms, TransformState& transformState, bool* wasFixed) const
{
// If a container was specified, and was not 0 or the RenderView,
// then we should have found it by now.
ASSERT_ARG(repaintContainer, !repaintContainer || repaintContainer == this);
+ ASSERT(!wasFixed || *wasFixed == fixed);
+ UNUSED_PARAM(fixed);
if (!repaintContainer && useTransforms && shouldUseTransformFromContainer(0)) {
TransformationMatrix t;
Modified: trunk/Source/WebCore/rendering/RenderView.h (89753 => 89754)
--- trunk/Source/WebCore/rendering/RenderView.h 2011-06-25 23:01:15 UTC (rev 89753)
+++ trunk/Source/WebCore/rendering/RenderView.h 2011-06-25 23:01:33 UTC (rev 89754)
@@ -164,7 +164,7 @@
IntRect documentRect() const;
protected:
- virtual void mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool useTransforms, bool fixed, TransformState&) const;
+ virtual void mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool useTransforms, bool fixed, TransformState&, bool* wasFixed = 0) const;
virtual void mapAbsoluteToLocalPoint(bool fixed, bool useTransforms, TransformState&) const;
private:
Modified: trunk/Source/WebCore/rendering/svg/RenderSVGForeignObject.cpp (89753 => 89754)
--- trunk/Source/WebCore/rendering/svg/RenderSVGForeignObject.cpp 2011-06-25 23:01:15 UTC (rev 89753)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGForeignObject.cpp 2011-06-25 23:01:33 UTC (rev 89754)
@@ -158,12 +158,12 @@
return false;
}
-void RenderSVGForeignObject::mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool fixed, bool useTransforms, TransformState& transformState) const
+void RenderSVGForeignObject::mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool fixed, bool useTransforms, TransformState& transformState, bool* wasFixed) const
{
// When crawling up the hierachy starting from foreignObject child content, useTransforms may not be set to true.
if (!useTransforms)
useTransforms = true;
- SVGRenderSupport::mapLocalToContainer(this, repaintContainer, fixed, useTransforms, transformState);
+ SVGRenderSupport::mapLocalToContainer(this, repaintContainer, fixed, useTransforms, transformState, wasFixed);
}
}
Modified: trunk/Source/WebCore/rendering/svg/RenderSVGForeignObject.h (89753 => 89754)
--- trunk/Source/WebCore/rendering/svg/RenderSVGForeignObject.h 2011-06-25 23:01:15 UTC (rev 89753)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGForeignObject.h 2011-06-25 23:01:33 UTC (rev 89754)
@@ -53,7 +53,7 @@
virtual bool nodeAtPoint(const HitTestRequest&, HitTestResult&, const IntPoint& pointInContainer, const IntPoint& accumulatedOffset, HitTestAction);
virtual bool isSVGForeignObject() const { return true; }
- virtual void mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool fixed , bool useTransforms, TransformState&) const;
+ virtual void mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool fixed, bool useTransforms, TransformState&, bool* wasFixed = 0) const;
virtual void setNeedsTransformUpdate() { m_needsTransformUpdate = true; }
private:
Modified: trunk/Source/WebCore/rendering/svg/RenderSVGInline.cpp (89753 => 89754)
--- trunk/Source/WebCore/rendering/svg/RenderSVGInline.cpp 2011-06-25 23:01:15 UTC (rev 89753)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGInline.cpp 2011-06-25 23:01:33 UTC (rev 89754)
@@ -77,9 +77,9 @@
SVGRenderSupport::computeRectForRepaint(this, repaintContainer, repaintRect, fixed);
}
-void RenderSVGInline::mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool useTransforms, bool fixed, TransformState& transformState) const
+void RenderSVGInline::mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool useTransforms, bool fixed, TransformState& transformState, bool* wasFixed) const
{
- SVGRenderSupport::mapLocalToContainer(this, repaintContainer, useTransforms, fixed, transformState);
+ SVGRenderSupport::mapLocalToContainer(this, repaintContainer, useTransforms, fixed, transformState, wasFixed);
}
void RenderSVGInline::absoluteQuads(Vector<FloatQuad>& quads)
Modified: trunk/Source/WebCore/rendering/svg/RenderSVGInline.h (89753 => 89754)
--- trunk/Source/WebCore/rendering/svg/RenderSVGInline.h 2011-06-25 23:01:15 UTC (rev 89753)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGInline.h 2011-06-25 23:01:33 UTC (rev 89754)
@@ -47,7 +47,7 @@
virtual IntRect clippedOverflowRectForRepaint(RenderBoxModelObject* repaintContainer);
virtual void computeRectForRepaint(RenderBoxModelObject* repaintContainer, IntRect&, bool fixed = false);
- virtual void mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool useTransforms, bool fixed, TransformState&) const;
+ virtual void mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool useTransforms, bool fixed, TransformState&, bool* wasFixed = 0) const;
virtual void absoluteQuads(Vector<FloatQuad>&);
private:
Modified: trunk/Source/WebCore/rendering/svg/RenderSVGModelObject.cpp (89753 => 89754)
--- trunk/Source/WebCore/rendering/svg/RenderSVGModelObject.cpp 2011-06-25 23:01:15 UTC (rev 89753)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGModelObject.cpp 2011-06-25 23:01:33 UTC (rev 89754)
@@ -53,9 +53,9 @@
SVGRenderSupport::computeRectForRepaint(this, repaintContainer, repaintRect, fixed);
}
-void RenderSVGModelObject::mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool fixed , bool useTransforms, TransformState& transformState) const
+void RenderSVGModelObject::mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool fixed, bool useTransforms, TransformState& transformState, bool* wasFixed) const
{
- SVGRenderSupport::mapLocalToContainer(this, repaintContainer, fixed, useTransforms, transformState);
+ SVGRenderSupport::mapLocalToContainer(this, repaintContainer, fixed, useTransforms, transformState, wasFixed);
}
// Copied from RenderBox, this method likely requires further refactoring to work easily for both SVG and CSS Box Model content.
Modified: trunk/Source/WebCore/rendering/svg/RenderSVGModelObject.h (89753 => 89754)
--- trunk/Source/WebCore/rendering/svg/RenderSVGModelObject.h 2011-06-25 23:01:15 UTC (rev 89753)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGModelObject.h 2011-06-25 23:01:33 UTC (rev 89754)
@@ -60,7 +60,7 @@
virtual void destroy();
- virtual void mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool useTransforms, bool fixed, TransformState&) const;
+ virtual void mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool useTransforms, bool fixed, TransformState&, bool* wasFixed = 0) const;
virtual void styleWillChange(StyleDifference, const RenderStyle* newStyle);
virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle);
virtual void updateFromElement();
Modified: trunk/Source/WebCore/rendering/svg/RenderSVGRoot.cpp (89753 => 89754)
--- trunk/Source/WebCore/rendering/svg/RenderSVGRoot.cpp 2011-06-25 23:01:15 UTC (rev 89753)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGRoot.cpp 2011-06-25 23:01:33 UTC (rev 89754)
@@ -413,14 +413,14 @@
RenderBox::computeRectForRepaint(repaintContainer, repaintRect, fixed);
}
-void RenderSVGRoot::mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool fixed , bool useTransforms, TransformState& transformState) const
+void RenderSVGRoot::mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool fixed, bool useTransforms, TransformState& transformState, bool* wasFixed) const
{
ASSERT(!fixed); // We should have no fixed content in the SVG rendering tree.
ASSERT(useTransforms); // mapping a point through SVG w/o respecting trasnforms is useless.
// Transform to our border box and let RenderBox transform the rest of the way.
transformState.applyTransform(localToBorderBoxTransform());
- RenderBox::mapLocalToContainer(repaintContainer, fixed, useTransforms, transformState);
+ RenderBox::mapLocalToContainer(repaintContainer, fixed, useTransforms, transformState, wasFixed);
}
void RenderSVGRoot::updateCachedBoundaries()
Modified: trunk/Source/WebCore/rendering/svg/RenderSVGRoot.h (89753 => 89754)
--- trunk/Source/WebCore/rendering/svg/RenderSVGRoot.h 2011-06-25 23:01:15 UTC (rev 89753)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGRoot.h 2011-06-25 23:01:33 UTC (rev 89754)
@@ -83,7 +83,7 @@
virtual IntRect clippedOverflowRectForRepaint(RenderBoxModelObject* repaintContainer);
virtual void computeRectForRepaint(RenderBoxModelObject* repaintContainer, IntRect& repaintRect, bool fixed);
- virtual void mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool useTransforms, bool fixed, TransformState&) const;
+ virtual void mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool useTransforms, bool fixed, TransformState&, bool* wasFixed = 0) const;
void calcViewport();
Modified: trunk/Source/WebCore/rendering/svg/RenderSVGText.cpp (89753 => 89754)
--- trunk/Source/WebCore/rendering/svg/RenderSVGText.cpp 2011-06-25 23:01:15 UTC (rev 89753)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGText.cpp 2011-06-25 23:01:33 UTC (rev 89754)
@@ -92,9 +92,9 @@
SVGRenderSupport::computeRectForRepaint(this, repaintContainer, repaintRect, fixed);
}
-void RenderSVGText::mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool fixed, bool useTransforms, TransformState& transformState) const
+void RenderSVGText::mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool fixed, bool useTransforms, TransformState& transformState, bool* wasFixed) const
{
- SVGRenderSupport::mapLocalToContainer(this, repaintContainer, fixed, useTransforms, transformState);
+ SVGRenderSupport::mapLocalToContainer(this, repaintContainer, fixed, useTransforms, transformState, wasFixed);
}
static inline void recursiveUpdateScaledFont(RenderObject* start)
Modified: trunk/Source/WebCore/rendering/svg/RenderSVGText.h (89753 => 89754)
--- trunk/Source/WebCore/rendering/svg/RenderSVGText.h 2011-06-25 23:01:15 UTC (rev 89753)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGText.h 2011-06-25 23:01:33 UTC (rev 89754)
@@ -65,7 +65,7 @@
virtual IntRect clippedOverflowRectForRepaint(RenderBoxModelObject* repaintContainer);
virtual void computeRectForRepaint(RenderBoxModelObject* repaintContainer, IntRect&, bool fixed = false);
- virtual void mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool useTransforms, bool fixed, TransformState&) const;
+ virtual void mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool useTransforms, bool fixed, TransformState&, bool* wasFixed = 0) const;
virtual FloatRect objectBoundingBox() const { return frameRect(); }
virtual FloatRect strokeBoundingBox() const;
Modified: trunk/Source/WebCore/rendering/svg/SVGRenderSupport.cpp (89753 => 89754)
--- trunk/Source/WebCore/rendering/svg/SVGRenderSupport.cpp 2011-06-25 23:01:15 UTC (rev 89753)
+++ trunk/Source/WebCore/rendering/svg/SVGRenderSupport.cpp 2011-06-25 23:01:33 UTC (rev 89754)
@@ -70,12 +70,12 @@
object->parent()->computeRectForRepaint(repaintContainer, repaintRect, fixed);
}
-void SVGRenderSupport::mapLocalToContainer(const RenderObject* object, RenderBoxModelObject* repaintContainer, bool fixed , bool useTransforms, TransformState& transformState)
+void SVGRenderSupport::mapLocalToContainer(const RenderObject* object, RenderBoxModelObject* repaintContainer, bool fixed, bool useTransforms, TransformState& transformState, bool* wasFixed)
{
ASSERT(!fixed); // We should have no fixed content in the SVG rendering tree.
ASSERT(useTransforms); // Mapping a point through SVG w/o respecting transforms is useless.
transformState.applyTransform(object->localToParentTransform());
- object->parent()->mapLocalToContainer(repaintContainer, fixed, useTransforms, transformState);
+ object->parent()->mapLocalToContainer(repaintContainer, fixed, useTransforms, transformState, wasFixed);
}
bool SVGRenderSupport::prepareToRenderSVGContent(RenderObject* object, PaintInfo& paintInfo)
Modified: trunk/Source/WebCore/rendering/svg/SVGRenderSupport.h (89753 => 89754)
--- trunk/Source/WebCore/rendering/svg/SVGRenderSupport.h 2011-06-25 23:01:15 UTC (rev 89753)
+++ trunk/Source/WebCore/rendering/svg/SVGRenderSupport.h 2011-06-25 23:01:33 UTC (rev 89754)
@@ -63,7 +63,7 @@
// Important functions used by nearly all SVG renderers centralizing coordinate transformations / repaint rect calculations
static IntRect clippedOverflowRectForRepaint(RenderObject*, RenderBoxModelObject* repaintContainer);
static void computeRectForRepaint(RenderObject*, RenderBoxModelObject* repaintContainer, IntRect&, bool fixed);
- static void mapLocalToContainer(const RenderObject*, RenderBoxModelObject* repaintContainer, bool useTransforms, bool fixed, TransformState&);
+ static void mapLocalToContainer(const RenderObject*, RenderBoxModelObject* repaintContainer, bool useTransforms, bool fixed, TransformState&, bool* wasFixed = 0);
// Shared between SVG renderers and resources.
static void applyStrokeStyleToContext(GraphicsContext*, const RenderStyle*, const RenderObject*);