| Index: third_party/WebKit/Source/core/layout/LayoutInline.cpp
|
| diff --git a/third_party/WebKit/Source/core/layout/LayoutInline.cpp b/third_party/WebKit/Source/core/layout/LayoutInline.cpp
|
| index 80c9ec1b3a88813fcc067f1d897c46e38cdcf916..bf0adb5e7137f4de58ad667d4e68dfb275af5b9c 100644
|
| --- a/third_party/WebKit/Source/core/layout/LayoutInline.cpp
|
| +++ b/third_party/WebKit/Source/core/layout/LayoutInline.cpp
|
| @@ -1048,7 +1048,7 @@ LayoutRect LayoutInline::clippedOverflowRect(const LayoutBoxModelObject* paintIn
|
| if (overflowRect.isEmpty())
|
| return overflowRect;
|
|
|
| - mapToVisibleRectInContainerSpace(paintInvalidationContainer, overflowRect, paintInvalidationState);
|
| + mapToVisibleRectInAncestorSpace(paintInvalidationContainer, overflowRect, paintInvalidationState);
|
| return overflowRect;
|
| }
|
|
|
| @@ -1070,9 +1070,9 @@ LayoutRect LayoutInline::visualOverflowRect() const
|
| return overflowRect;
|
| }
|
|
|
| -void LayoutInline::mapToVisibleRectInContainerSpace(const LayoutBoxModelObject* paintInvalidationContainer, LayoutRect& rect, const PaintInvalidationState* paintInvalidationState) const
|
| +void LayoutInline::mapToVisibleRectInAncestorSpace(const LayoutBoxModelObject* ancestor, LayoutRect& rect, const PaintInvalidationState* paintInvalidationState) const
|
| {
|
| - if (paintInvalidationState && paintInvalidationState->canMapToContainer(paintInvalidationContainer)) {
|
| + if (paintInvalidationState && paintInvalidationState->canMapToContainer(ancestor)) {
|
| if (style()->hasInFlowPosition() && layer())
|
| rect.move(layer()->offsetForInFlowPosition());
|
| rect.move(paintInvalidationState->paintOffset());
|
| @@ -1081,12 +1081,12 @@ void LayoutInline::mapToVisibleRectInContainerSpace(const LayoutBoxModelObject*
|
| return;
|
| }
|
|
|
| - if (paintInvalidationContainer == this)
|
| + if (ancestor == this)
|
| return;
|
|
|
| - bool containerSkipped;
|
| - LayoutObject* o = container(paintInvalidationContainer, &containerSkipped);
|
| - if (!o)
|
| + bool ancestorSkipped;
|
| + LayoutObject* container = this->container(ancestor, &ancestorSkipped);
|
| + if (!container)
|
| return;
|
|
|
| LayoutPoint topLeft = rect.location();
|
| @@ -1102,24 +1102,23 @@ void LayoutInline::mapToVisibleRectInContainerSpace(const LayoutBoxModelObject*
|
| // FIXME: We ignore the lightweight clipping rect that controls use, since if |o| is in mid-layout,
|
| // its controlClipRect will be wrong. For overflow clip we use the values cached by the layer.
|
| rect.setLocation(topLeft);
|
| - if (o->hasOverflowClip()) {
|
| - LayoutBox* containerBox = toLayoutBox(o);
|
| - if (o == paintInvalidationContainer)
|
| - containerBox->applyCachedScrollOffsetForPaintInvalidation(rect);
|
| - else
|
| - containerBox->applyCachedClipAndScrollOffsetForPaintInvalidation(rect);
|
| + if (container->hasOverflowClip()) {
|
| + LayoutBox* containerBox = toLayoutBox(container);
|
| + containerBox->mapScrollingContentsRectToBoxSpace(rect);
|
| + if (container != ancestor)
|
| + containerBox->applyOverflowClip(rect);
|
| if (rect.isEmpty())
|
| return;
|
| }
|
|
|
| - if (containerSkipped) {
|
| + if (ancestorSkipped) {
|
| // If the paintInvalidationContainer is below o, then we need to map the rect into paintInvalidationContainer's coordinates.
|
| - LayoutSize containerOffset = paintInvalidationContainer->offsetFromAncestorContainer(o);
|
| + LayoutSize containerOffset = ancestor->offsetFromAncestorContainer(container);
|
| rect.move(-containerOffset);
|
| return;
|
| }
|
|
|
| - o->mapToVisibleRectInContainerSpace(paintInvalidationContainer, rect, paintInvalidationState);
|
| + container->mapToVisibleRectInAncestorSpace(ancestor, rect, paintInvalidationState);
|
| }
|
|
|
| LayoutSize LayoutInline::offsetFromContainer(const LayoutObject* container, const LayoutPoint& point, bool* offsetDependsOnPoint) const
|
| @@ -1147,12 +1146,12 @@ PaintLayerType LayoutInline::layerTypeRequired() const
|
| || style()->hasCompositorProxy() || style()->containsPaint() ? NormalPaintLayer : NoPaintLayer;
|
| }
|
|
|
| -void LayoutInline::mapLocalToContainer(const LayoutBoxModelObject* paintInvalidationContainer, TransformState& transformState, MapCoordinatesFlags mode, bool* wasFixed, const PaintInvalidationState* paintInvalidationState) const
|
| +void LayoutInline::mapLocalToAncestor(const LayoutBoxModelObject* ancestor, TransformState& transformState, MapCoordinatesFlags mode, bool* wasFixed, const PaintInvalidationState* paintInvalidationState) const
|
| {
|
| - if (paintInvalidationContainer == this)
|
| + if (ancestor == this)
|
| return;
|
|
|
| - if (paintInvalidationState && paintInvalidationState->canMapToContainer(paintInvalidationContainer)) {
|
| + if (paintInvalidationState && paintInvalidationState->canMapToContainer(ancestor)) {
|
| LayoutSize offset = paintInvalidationState->paintOffset();
|
| if (style()->hasInFlowPosition() && layer())
|
| offset += layer()->offsetForInFlowPosition();
|
| @@ -1161,7 +1160,7 @@ void LayoutInline::mapLocalToContainer(const LayoutBoxModelObject* paintInvalida
|
| }
|
|
|
| bool containerSkipped;
|
| - LayoutObject* o = container(paintInvalidationContainer, &containerSkipped);
|
| + LayoutObject* o = container(ancestor, &containerSkipped);
|
| if (!o)
|
| return;
|
|
|
| @@ -1187,12 +1186,12 @@ void LayoutInline::mapLocalToContainer(const LayoutBoxModelObject* paintInvalida
|
| if (containerSkipped) {
|
| // There can't be a transform between paintInvalidationContainer and o, because transforms create containers, so it should be safe
|
| // to just subtract the delta between the paintInvalidationContainer and o.
|
| - LayoutSize containerOffset = paintInvalidationContainer->offsetFromAncestorContainer(o);
|
| + LayoutSize containerOffset = ancestor->offsetFromAncestorContainer(o);
|
| transformState.move(-containerOffset.width(), -containerOffset.height(), preserve3D ? TransformState::AccumulateTransform : TransformState::FlattenTransform);
|
| return;
|
| }
|
|
|
| - o->mapLocalToContainer(paintInvalidationContainer, transformState, mode, wasFixed, paintInvalidationState);
|
| + o->mapLocalToAncestor(ancestor, transformState, mode, wasFixed, paintInvalidationState);
|
| }
|
|
|
| void LayoutInline::updateDragState(bool dragOn)
|
|
|