diff options
author | Steve Block <steveblock@google.com> | 2010-04-27 16:23:55 +0100 |
---|---|---|
committer | Steve Block <steveblock@google.com> | 2010-04-27 17:07:03 +0100 |
commit | 692e5dbf12901edacf14812a6fae25462920af42 (patch) | |
tree | d62802373a429e0a9dc093b6046c166b2c514285 /WebCore/rendering/RenderObject.cpp | |
parent | e24bea4efef1c414137d36a9778aa4e142e10c7d (diff) | |
download | external_webkit-692e5dbf12901edacf14812a6fae25462920af42.zip external_webkit-692e5dbf12901edacf14812a6fae25462920af42.tar.gz external_webkit-692e5dbf12901edacf14812a6fae25462920af42.tar.bz2 |
Merge webkit.org at r55033 : Initial merge by git
Change-Id: I98a4af828067cc243ec3dc5e5826154dd88074b5
Diffstat (limited to 'WebCore/rendering/RenderObject.cpp')
-rw-r--r-- | WebCore/rendering/RenderObject.cpp | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/WebCore/rendering/RenderObject.cpp b/WebCore/rendering/RenderObject.cpp index 1d1e7c2..e70de96 100644 --- a/WebCore/rendering/RenderObject.cpp +++ b/WebCore/rendering/RenderObject.cpp @@ -69,6 +69,7 @@ #endif #if ENABLE(SVG) +#include "RenderSVGResource.h" #include "SVGRenderSupport.h" #endif @@ -1765,6 +1766,11 @@ void RenderObject::mapLocalToContainer(RenderBoxModelObject* repaintContainer, b if (!o) return; + IntSize columnOffset; + o->adjustForColumns(columnOffset, roundedIntPoint(transformState.mappedPoint())); + if (!columnOffset.isZero()) + transformState.move(columnOffset); + if (o->hasOverflowClip()) transformState.move(-toRenderBox(o)->layer()->scrolledContentOffset()); @@ -1821,18 +1827,23 @@ void RenderObject::getTransformFromContainer(const RenderObject* containerObject FloatQuad RenderObject::localToContainerQuad(const FloatQuad& localQuad, RenderBoxModelObject* repaintContainer, bool fixed) const { - TransformState transformState(TransformState::ApplyTransformDirection, FloatPoint(), &localQuad); + // 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); transformState.flatten(); return transformState.lastPlanarQuad(); } -IntSize RenderObject::offsetFromContainer(RenderObject* o) const +IntSize RenderObject::offsetFromContainer(RenderObject* o, const IntPoint& point) const { ASSERT(o == container()); IntSize offset; + + o->adjustForColumns(offset, point); + if (o->hasOverflowClip()) offset -= toRenderBox(o)->layer()->scrolledContentOffset(); @@ -1842,6 +1853,7 @@ IntSize RenderObject::offsetFromContainer(RenderObject* o) const IntSize RenderObject::offsetFromAncestorContainer(RenderObject* container) const { IntSize offset; + IntPoint referencePoint; const RenderObject* currContainer = this; do { RenderObject* nextContainer = currContainer->container(); @@ -1849,7 +1861,9 @@ IntSize RenderObject::offsetFromAncestorContainer(RenderObject* container) const if (!nextContainer) break; ASSERT(!currContainer->hasTransform()); - offset += currContainer->offsetFromContainer(nextContainer); + IntSize currentOffset = currContainer->offsetFromContainer(nextContainer, referencePoint); + offset += currentOffset; + referencePoint.move(currentOffset); currContainer = nextContainer; } while (currContainer != container); @@ -2520,6 +2534,12 @@ const SVGRenderBase* RenderObject::toSVGRenderBase() const return 0; } +RenderSVGResource* RenderObject::toRenderSVGResource() +{ + ASSERT_NOT_REACHED(); + return 0; +} + FloatRect RenderObject::objectBoundingBox() const { ASSERT_NOT_REACHED(); |