| Index: third_party/WebKit/Source/core/layout/LayoutObject.cpp
|
| diff --git a/third_party/WebKit/Source/core/layout/LayoutObject.cpp b/third_party/WebKit/Source/core/layout/LayoutObject.cpp
|
| index 1991cf3cef2ef0887fd10d1985cfcbc34074aa10..440d98d3cde65d34f368ee4284a3fc6de17d73a4 100644
|
| --- a/third_party/WebKit/Source/core/layout/LayoutObject.cpp
|
| +++ b/third_party/WebKit/Source/core/layout/LayoutObject.cpp
|
| @@ -2263,7 +2263,14 @@ void LayoutObject::mapLocalToAncestor(const LayoutBoxModelObject* ancestor, Tran
|
| }
|
| }
|
|
|
| - LayoutSize containerOffset = offsetFromContainer(o, roundedLayoutPoint(transformState.mappedPoint()));
|
| + LayoutSize containerOffset = offsetFromContainer(o);
|
| + if (o->isLayoutFlowThread()) {
|
| + // So far the point has been in flow thread coordinates (i.e. as if everything in
|
| + // the fragmentation context lived in one tall single column). Convert it to a
|
| + // visual point now.
|
| + LayoutPoint pointInContainer = roundedLayoutPoint(transformState.mappedPoint()) + containerOffset;
|
| + containerOffset += o->columnOffset(pointInContainer);
|
| + }
|
|
|
| // Text objects just copy their parent's computed style, so we need to ignore them.
|
| bool preserve3D = mode & UseTransforms && ((o->style()->preserves3D() && !o->isText()) || (style()->preserves3D() && !isText()));
|
| @@ -2315,17 +2322,11 @@ void LayoutObject::mapAncestorToLocal(const LayoutBoxModelObject* ancestor, Tran
|
| if (!containerSkipped)
|
| o->mapAncestorToLocal(ancestor, transformState, mode);
|
|
|
| - LayoutSize containerOffset = offsetFromContainer(o, LayoutPoint());
|
| + LayoutSize containerOffset = offsetFromContainer(o);
|
| if (o->isLayoutFlowThread()) {
|
| // Descending into a flow thread. Convert to the local coordinate space, i.e. flow thread coordinates.
|
| - const LayoutFlowThread* flowThread = toLayoutFlowThread(o);
|
| LayoutPoint visualPoint = LayoutPoint(transformState.mappedPoint());
|
| - transformState.move(visualPoint - flowThread->visualPointToFlowThreadPoint(visualPoint));
|
| - // |containerOffset| is also in visual coordinates. Convert to flow thread coordinates.
|
| - // TODO(mstensho): Wouldn't it be better add a parameter to instruct offsetFromContainer()
|
| - // to return flowthread coordinates in the first place? We're effectively performing two
|
| - // conversions here, when in fact none is needed.
|
| - containerOffset = toLayoutSize(flowThread->visualPointToFlowThreadPoint(toLayoutPoint(containerOffset)));
|
| + transformState.move(visualPoint - toLayoutFlowThread(o)->visualPointToFlowThreadPoint(visualPoint));
|
| }
|
|
|
| bool preserve3D = mode & UseTransforms && (o->style()->preserves3D() || style()->preserves3D());
|
| @@ -2438,19 +2439,10 @@ FloatPoint LayoutObject::localToInvalidationBackingPoint(const LayoutPoint& loca
|
| return containerPoint;
|
| }
|
|
|
| -LayoutSize LayoutObject::offsetFromContainer(const LayoutObject* o, const LayoutPoint& point, bool* offsetDependsOnPoint) const
|
| +LayoutSize LayoutObject::offsetFromContainer(const LayoutObject* o) const
|
| {
|
| ASSERT(o == container());
|
| -
|
| - LayoutSize offset = o->columnOffset(point);
|
| -
|
| - if (o->hasOverflowClip())
|
| - offset -= toLayoutBox(o)->scrolledContentOffset();
|
| -
|
| - if (offsetDependsOnPoint)
|
| - *offsetDependsOnPoint = o->isLayoutFlowThread();
|
| -
|
| - return offset;
|
| + return o->hasOverflowClip() ? LayoutSize(-toLayoutBox(o)->scrolledContentOffset()) : LayoutSize();
|
| }
|
|
|
| LayoutSize LayoutObject::offsetFromAncestorContainer(const LayoutObject* ancestorContainer) const
|
| @@ -2467,7 +2459,7 @@ LayoutSize LayoutObject::offsetFromAncestorContainer(const LayoutObject* ancesto
|
| if (!nextContainer)
|
| break;
|
| ASSERT(!currContainer->hasTransformRelatedProperty());
|
| - LayoutSize currentOffset = currContainer->offsetFromContainer(nextContainer, referencePoint);
|
| + LayoutSize currentOffset = currContainer->offsetFromContainer(nextContainer);
|
| offset += currentOffset;
|
| referencePoint.move(currentOffset);
|
| currContainer = nextContainer;
|
|
|