diff options
Diffstat (limited to 'third_party/WebKit/Source/core/layout/LayoutView.cpp')
-rw-r--r-- | third_party/WebKit/Source/core/layout/LayoutView.cpp | 34 |
1 files changed, 18 insertions, 16 deletions
diff --git a/third_party/WebKit/Source/core/layout/LayoutView.cpp b/third_party/WebKit/Source/core/layout/LayoutView.cpp index aa2ca02..b49d539 100644 --- a/third_party/WebKit/Source/core/layout/LayoutView.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutView.cpp @@ -323,7 +323,7 @@ LayoutRect LayoutView::visualOverflowRect() const return LayoutRect(documentRect()); } -void LayoutView::mapLocalToAncestor(const LayoutBoxModelObject* ancestor, TransformState& transformState, MapCoordinatesFlags mode, bool* wasFixed, const PaintInvalidationState* paintInvalidationState) const +void LayoutView::mapLocalToAncestor(const LayoutBoxModelObject* ancestor, TransformState& transformState, MapCoordinatesFlags mode, bool* wasFixed) const { ASSERT_UNUSED(wasFixed, !wasFixed || *wasFixed == static_cast<bool>(mode & IsFixed)); @@ -346,10 +346,16 @@ void LayoutView::mapLocalToAncestor(const LayoutBoxModelObject* ancestor, Transf if (mode & TraverseDocumentBoundaries) { if (LayoutPart* parentDocLayoutObject = frame()->ownerLayoutObject()) { - transformState.move(-frame()->view()->scrollOffset()); + if (!(mode & InputIsInFrameCoordinates)) { + transformState.move(-frame()->view()->scrollOffset()); + } else { + // The flag applies to immediate LayoutView only. + mode &= ~InputIsInFrameCoordinates; + } + transformState.move(parentDocLayoutObject->contentBoxOffset()); - parentDocLayoutObject->mapLocalToAncestor(ancestor, transformState, mode, wasFixed, paintInvalidationState); + parentDocLayoutObject->mapLocalToAncestor(ancestor, transformState, mode, wasFixed); } } } @@ -444,7 +450,7 @@ void LayoutView::invalidateTreeIfNeeded(const PaintInvalidationState& paintInval LayoutRect dirtyRect = viewRect(); if (doingFullPaintInvalidation() && !dirtyRect.isEmpty()) { const LayoutBoxModelObject& paintInvalidationContainer = paintInvalidationState.paintInvalidationContainer(); - PaintLayer::mapRectToPaintInvalidationBacking(this, &paintInvalidationContainer, dirtyRect, &paintInvalidationState); + paintInvalidationState.mapLocalRectToPaintInvalidationBacking(dirtyRect); invalidatePaintUsingContainer(paintInvalidationContainer, dirtyRect, PaintInvalidationFull); invalidateDisplayItemClientsWithPaintInvalidationState(paintInvalidationContainer, paintInvalidationState, PaintInvalidationFull); } @@ -475,18 +481,16 @@ void LayoutView::invalidatePaintForViewAndCompositedLayers() compositor()->fullyInvalidatePaint(); } -bool LayoutView::mapToVisibleRectInAncestorSpace(const LayoutBoxModelObject* ancestor, LayoutRect& rect, const PaintInvalidationState* invalidationState, VisibleRectFlags visibleRectFlags) const +bool LayoutView::mapToVisibleRectInAncestorSpace(const LayoutBoxModelObject* ancestor, LayoutRect& rect, VisibleRectFlags visibleRectFlags) const { - return mapToVisibleRectInAncestorSpace(ancestor, rect, IsNotFixedPosition, invalidationState, visibleRectFlags); + return mapToVisibleRectInAncestorSpace(ancestor, rect, 0, visibleRectFlags); } -bool LayoutView::mapToVisibleRectInAncestorSpace(const LayoutBoxModelObject* ancestor, LayoutRect& rect, ViewportConstrainedPosition viewportConstraint, const PaintInvalidationState* paintInvalidationState, VisibleRectFlags visibleRectFlags) const +bool LayoutView::mapToVisibleRectInAncestorSpace(const LayoutBoxModelObject* ancestor, LayoutRect& rect, MapCoordinatesFlags mode, VisibleRectFlags visibleRectFlags) const { if (document().printing()) return true; - // TODO(chrishtr): fix PaintInvalidationState offsets for LayoutViews. - if (style()->isFlippedBlocksWritingMode()) { // We have to flip by hand since the view's logical height has not been determined. We // can use the viewport width and height. @@ -496,7 +500,8 @@ bool LayoutView::mapToVisibleRectInAncestorSpace(const LayoutBoxModelObject* anc rect.setX(viewWidth() - rect.maxX()); } - adjustViewportConstrainedOffset(rect, viewportConstraint); + if (mode & IsFixed) + adjustOffsetForFixedPosition(rect); // Apply our transform if we have one (because of full page zooming). if (!ancestor && layer() && layer()->transform()) @@ -511,7 +516,7 @@ bool LayoutView::mapToVisibleRectInAncestorSpace(const LayoutBoxModelObject* anc return true; if (LayoutBox* obj = owner->layoutBox()) { - if (!paintInvalidationState || !paintInvalidationState->viewClippingAndScrollOffsetDisabled()) { + if (!(mode & InputIsInFrameCoordinates)) { // Intersect the viewport with the paint invalidation rect. LayoutRect viewRectangle = viewRect(); if (visibleRectFlags & EdgeInclusive) { @@ -527,17 +532,14 @@ bool LayoutView::mapToVisibleRectInAncestorSpace(const LayoutBoxModelObject* anc // Adjust for frame border. rect.move(obj->contentBoxOffset()); - return obj->mapToVisibleRectInAncestorSpace(ancestor, rect, 0, visibleRectFlags); + return obj->mapToVisibleRectInAncestorSpace(ancestor, rect, visibleRectFlags); } return true; } -void LayoutView::adjustViewportConstrainedOffset(LayoutRect& rect, ViewportConstrainedPosition viewportConstraint) const +void LayoutView::adjustOffsetForFixedPosition(LayoutRect& rect) const { - if (viewportConstraint != IsFixedPosition) - return; - if (m_frameView) { rect.move(toIntSize(m_frameView->scrollPosition())); if (hasOverflowClip()) |