| 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 fe7120a86f2737798163f54de0e077ba8810c9db..d9d133fd8e60e8c6b04b36a62d6fdd271a0006c3 100644
|
| --- a/third_party/WebKit/Source/core/layout/LayoutObject.cpp
|
| +++ b/third_party/WebKit/Source/core/layout/LayoutObject.cpp
|
| @@ -1031,7 +1031,7 @@ IntRect LayoutObject::absoluteElementBoundingBoxRect() const
|
| {
|
| Vector<LayoutRect> rects;
|
| const LayoutBoxModelObject* container = enclosingLayer()->layoutObject();
|
| - addElementVisualOverflowRects(rects, LayoutPoint(localToContainerPoint(FloatPoint(), container)));
|
| + addElementVisualOverflowRects(rects, LayoutPoint(localToAncestorPoint(FloatPoint(), container)));
|
| return container->localToAbsoluteQuad(FloatQuad(FloatRect(unionRect(rects)))).enclosingBoundingBox();
|
| }
|
|
|
| @@ -1587,30 +1587,29 @@ LayoutRect LayoutObject::clippedOverflowRectForPaintInvalidation(const LayoutBox
|
| return LayoutRect();
|
| }
|
|
|
| -void LayoutObject::mapToVisibleRectInContainerSpace(const LayoutBoxModelObject* paintInvalidationContainer, LayoutRect& rect, const PaintInvalidationState* paintInvalidationState) const
|
| +void LayoutObject::mapToVisibleRectInAncestorSpace(const LayoutBoxModelObject* ancestor, LayoutRect& rect, const PaintInvalidationState* paintInvalidationState) const
|
| {
|
| - if (paintInvalidationContainer == this)
|
| + if (ancestor == this)
|
| return;
|
|
|
| - if (paintInvalidationState && paintInvalidationState->canMapToContainer(paintInvalidationContainer)) {
|
| + if (paintInvalidationState && paintInvalidationState->canMapToContainer(ancestor)) {
|
| rect.move(paintInvalidationState->paintOffset());
|
| if (paintInvalidationState->isClipped())
|
| rect.intersect(paintInvalidationState->clipRect());
|
| return;
|
| }
|
|
|
| - if (LayoutObject* o = parent()) {
|
| - if (o->hasOverflowClip()) {
|
| - LayoutBox* boxParent = toLayoutBox(o);
|
| - if (o == paintInvalidationContainer)
|
| - boxParent->applyCachedScrollOffsetForPaintInvalidation(rect);
|
| - else
|
| - boxParent->applyCachedClipAndScrollOffsetForPaintInvalidation(rect);
|
| + if (LayoutObject* parent = this->parent()) {
|
| + if (parent->hasOverflowClip()) {
|
| + LayoutBox* parentBox = toLayoutBox(parent);
|
| + parentBox->mapScrollingContentsRectToBoxSpace(rect);
|
| + if (parent != ancestor)
|
| + parentBox->applyOverflowClip(rect);
|
| if (rect.isEmpty())
|
| return;
|
| }
|
|
|
| - o->mapToVisibleRectInContainerSpace(paintInvalidationContainer, rect, paintInvalidationState);
|
| + parent->mapToVisibleRectInAncestorSpace(ancestor, rect, paintInvalidationState);
|
| }
|
| }
|
|
|
| @@ -2142,7 +2141,7 @@ LayoutRect LayoutObject::viewRect() const
|
| FloatPoint LayoutObject::localToAbsolute(const FloatPoint& localPoint, MapCoordinatesFlags mode) const
|
| {
|
| TransformState transformState(TransformState::ApplyTransformDirection, localPoint);
|
| - mapLocalToContainer(0, transformState, mode | ApplyContainerFlip);
|
| + mapLocalToAncestor(0, transformState, mode | ApplyContainerFlip);
|
| transformState.flatten();
|
|
|
| return transformState.lastPlanarPoint();
|
| @@ -2165,9 +2164,9 @@ FloatQuad LayoutObject::absoluteToLocalQuad(const FloatQuad& quad, MapCoordinate
|
| return transformState.lastPlanarQuad();
|
| }
|
|
|
| -void LayoutObject::mapLocalToContainer(const LayoutBoxModelObject* paintInvalidationContainer, TransformState& transformState, MapCoordinatesFlags mode, bool* wasFixed, const PaintInvalidationState* paintInvalidationState) const
|
| +void LayoutObject::mapLocalToAncestor(const LayoutBoxModelObject* ancestor, TransformState& transformState, MapCoordinatesFlags mode, bool* wasFixed, const PaintInvalidationState* paintInvalidationState) const
|
| {
|
| - if (paintInvalidationContainer == this)
|
| + if (ancestor == this)
|
| return;
|
|
|
| LayoutObject* o = parent();
|
| @@ -2187,7 +2186,7 @@ void LayoutObject::mapLocalToContainer(const LayoutBoxModelObject* paintInvalida
|
| if (o->hasOverflowClip())
|
| transformState.move(-toLayoutBox(o)->scrolledContentOffset());
|
|
|
| - o->mapLocalToContainer(paintInvalidationContainer, transformState, mode, wasFixed, paintInvalidationState);
|
| + o->mapLocalToAncestor(ancestor, transformState, mode, wasFixed, paintInvalidationState);
|
| }
|
|
|
| const LayoutObject* LayoutObject::pushMappingToContainer(const LayoutBoxModelObject* ancestorToStopAt, LayoutGeometryMap& geometryMap) const
|
| @@ -2235,32 +2234,32 @@ void LayoutObject::getTransformFromContainer(const LayoutObject* containerObject
|
| }
|
| }
|
|
|
| -FloatQuad LayoutObject::localToContainerQuad(const FloatQuad& localQuad, const LayoutBoxModelObject* paintInvalidationContainer, MapCoordinatesFlags mode, bool* wasFixed) const
|
| +FloatQuad LayoutObject::localToAncestorQuad(const FloatQuad& localQuad, const LayoutBoxModelObject* ancestor, MapCoordinatesFlags mode, bool* wasFixed) const
|
| {
|
| - // Track the point at the center of the quad's bounding box. As mapLocalToContainer() calls offsetFromContainer(),
|
| + // Track the point at the center of the quad's bounding box. As mapLocalToAncestor() 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(paintInvalidationContainer, transformState, mode | ApplyContainerFlip | UseTransforms, wasFixed);
|
| + mapLocalToAncestor(ancestor, transformState, mode | ApplyContainerFlip | UseTransforms, wasFixed);
|
| transformState.flatten();
|
|
|
| return transformState.lastPlanarQuad();
|
| }
|
|
|
| -FloatPoint LayoutObject::localToContainerPoint(const FloatPoint& localPoint, const LayoutBoxModelObject* paintInvalidationContainer, MapCoordinatesFlags mode, bool* wasFixed, const PaintInvalidationState* paintInvalidationState) const
|
| +FloatPoint LayoutObject::localToAncestorPoint(const FloatPoint& localPoint, const LayoutBoxModelObject* ancestor, MapCoordinatesFlags mode, bool* wasFixed, const PaintInvalidationState* paintInvalidationState) const
|
| {
|
| TransformState transformState(TransformState::ApplyTransformDirection, localPoint);
|
| - mapLocalToContainer(paintInvalidationContainer, transformState, mode | ApplyContainerFlip | UseTransforms, wasFixed, paintInvalidationState);
|
| + mapLocalToAncestor(ancestor, transformState, mode | ApplyContainerFlip | UseTransforms, wasFixed, paintInvalidationState);
|
| transformState.flatten();
|
|
|
| return transformState.lastPlanarPoint();
|
| }
|
|
|
| -void LayoutObject::localToContainerRects(Vector<LayoutRect>& rects, const LayoutBoxModelObject* paintInvalidationContainer, const LayoutPoint& preOffset, const LayoutPoint& postOffset) const
|
| +void LayoutObject::localToAncestorRects(Vector<LayoutRect>& rects, const LayoutBoxModelObject* ancestor, const LayoutPoint& preOffset, const LayoutPoint& postOffset) const
|
| {
|
| for (size_t i = 0; i < rects.size(); ++i) {
|
| LayoutRect& rect = rects[i];
|
| rect.moveBy(preOffset);
|
| - FloatQuad containerQuad = localToContainerQuad(FloatQuad(FloatRect(rect)), paintInvalidationContainer);
|
| + FloatQuad containerQuad = localToAncestorQuad(FloatQuad(FloatRect(rect)), ancestor);
|
| LayoutRect containerRect = LayoutRect(containerQuad.boundingBox());
|
| if (containerRect.isEmpty()) {
|
| rects.remove(i--);
|
| @@ -2278,7 +2277,7 @@ FloatPoint LayoutObject::localToInvalidationBackingPoint(const LayoutPoint& loca
|
|
|
| if (backingLayer)
|
| *backingLayer = paintInvalidationContainer.layer();
|
| - FloatPoint containerPoint = localToContainerPoint(FloatPoint(localPoint), &paintInvalidationContainer, TraverseDocumentBoundaries);
|
| + FloatPoint containerPoint = localToAncestorPoint(FloatPoint(localPoint), &paintInvalidationContainer, TraverseDocumentBoundaries);
|
|
|
| // A layoutObject can have no invalidation backing if it is from a detached frame,
|
| // or when forced compositing is disabled.
|
| @@ -2304,9 +2303,9 @@ LayoutSize LayoutObject::offsetFromContainer(const LayoutObject* o, const Layout
|
| return offset;
|
| }
|
|
|
| -LayoutSize LayoutObject::offsetFromAncestorContainer(const LayoutObject* container) const
|
| +LayoutSize LayoutObject::offsetFromAncestorContainer(const LayoutObject* ancestorContainer) const
|
| {
|
| - if (container == this)
|
| + if (ancestorContainer == this)
|
| return LayoutSize();
|
|
|
| LayoutSize offset;
|
| @@ -2322,7 +2321,7 @@ LayoutSize LayoutObject::offsetFromAncestorContainer(const LayoutObject* contain
|
| offset += currentOffset;
|
| referencePoint.move(currentOffset);
|
| currContainer = nextContainer;
|
| - } while (currContainer != container);
|
| + } while (currContainer != ancestorContainer);
|
|
|
| return offset;
|
| }
|
|
|