Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(176)

Side by Side Diff: third_party/WebKit/Source/core/layout/LayoutBox.cpp

Issue 1537133002: Renaming: distinguish ancestor, container and paintInvalidationContainer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@SelectionInvalidation
Patch Set: Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com) 4 * (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com)
5 * (C) 2005, 2006 Samuel Weinig (sam.weinig@gmail.com) 5 * (C) 2005, 2006 Samuel Weinig (sam.weinig@gmail.com)
6 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserv ed. 6 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserv ed.
7 * Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved. 7 * Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved.
8 * 8 *
9 * This library is free software; you can redistribute it and/or 9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Library General Public 10 * modify it under the terms of the GNU Library General Public
(...skipping 920 matching lines...) Expand 10 before | Expand all | Expand 10 after
931 } 931 }
932 932
933 IntSize LayoutBox::scrolledContentOffset() const 933 IntSize LayoutBox::scrolledContentOffset() const
934 { 934 {
935 ASSERT(hasOverflowClip()); 935 ASSERT(hasOverflowClip());
936 ASSERT(hasLayer()); 936 ASSERT(hasLayer());
937 // FIXME: Return DoubleSize here. crbug.com/414283. 937 // FIXME: Return DoubleSize here. crbug.com/414283.
938 return flooredIntSize(layer()->scrollableArea()->scrollOffset()); 938 return flooredIntSize(layer()->scrollableArea()->scrollOffset());
939 } 939 }
940 940
941 void LayoutBox::applyCachedScrollOffsetForPaintInvalidation(LayoutRect& paintRec t) const 941 void LayoutBox::mapScrollingContentsRectToBoxSpace(LayoutRect& rect) const
942 { 942 {
943 ASSERT(hasLayer()); 943 ASSERT(hasLayer());
944 ASSERT(hasOverflowClip()); 944 ASSERT(hasOverflowClip());
945 945
946 LayoutSize offset = LayoutSize(-scrolledContentOffset()); 946 LayoutSize offset = LayoutSize(-scrolledContentOffset());
947 if (UNLIKELY(hasFlippedBlocksWritingMode())) { 947 if (UNLIKELY(hasFlippedBlocksWritingMode())) {
948 if (isHorizontalWritingMode()) 948 if (isHorizontalWritingMode())
949 offset.setHeight(-offset.height()); 949 offset.setHeight(-offset.height());
950 else 950 else
951 offset.setWidth(-offset.width()); 951 offset.setWidth(-offset.width());
952 } 952 }
953 paintRect.move(offset); 953 rect.move(offset);
954 } 954 }
955 955
956 void LayoutBox::applyCachedClipAndScrollOffsetForPaintInvalidation(LayoutRect& p aintRect) const 956 void LayoutBox::applyOverflowClip(LayoutRect& rect) const
957 { 957 {
958 ASSERT(hasLayer()); 958 ASSERT(hasLayer());
959 ASSERT(hasOverflowClip()); 959 ASSERT(hasOverflowClip());
960 960
961 applyCachedScrollOffsetForPaintInvalidation(paintRect); 961 flipForWritingMode(rect);
962 flipForWritingMode(paintRect);
963 962
964 // size() is inaccurate if we're in the middle of a layout of this LayoutBox , so use the 963 // size() is inaccurate if we're in the middle of a layout of this LayoutBox , so use the
965 // layer's size instead. Even if the layer's size is wrong, the layer itself will issue paint invalidations 964 // layer's size instead. Even if the layer's size is wrong, the layer itself will issue paint invalidations
966 // anyway if its size does change. 965 // anyway if its size does change.
967 LayoutRect clipRect(LayoutPoint(), LayoutSize(layer()->size())); 966 LayoutRect clipRect(LayoutPoint(), LayoutSize(layer()->size()));
968 paintRect = intersection(paintRect, clipRect); 967 rect = intersection(rect, clipRect);
969 flipForWritingMode(paintRect); 968 flipForWritingMode(rect);
970 } 969 }
971 970
972 void LayoutBox::computeIntrinsicLogicalWidths(LayoutUnit& minLogicalWidth, Layou tUnit& maxLogicalWidth) const 971 void LayoutBox::computeIntrinsicLogicalWidths(LayoutUnit& minLogicalWidth, Layou tUnit& maxLogicalWidth) const
973 { 972 {
974 minLogicalWidth = minPreferredLogicalWidth() - borderAndPaddingLogicalWidth( ); 973 minLogicalWidth = minPreferredLogicalWidth() - borderAndPaddingLogicalWidth( );
975 maxLogicalWidth = maxPreferredLogicalWidth() - borderAndPaddingLogicalWidth( ); 974 maxLogicalWidth = maxPreferredLogicalWidth() - borderAndPaddingLogicalWidth( );
976 } 975 }
977 976
978 LayoutUnit LayoutBox::minPreferredLogicalWidth() const 977 LayoutUnit LayoutBox::minPreferredLogicalWidth() const
979 { 978 {
(...skipping 466 matching lines...) Expand 10 before | Expand all | Expand 10 after
1446 } 1445 }
1447 return false; 1446 return false;
1448 } 1447 }
1449 1448
1450 bool LayoutBox::intersectsVisibleViewport() 1449 bool LayoutBox::intersectsVisibleViewport()
1451 { 1450 {
1452 LayoutRect rect = visualOverflowRect(); 1451 LayoutRect rect = visualOverflowRect();
1453 LayoutView* layoutView = view(); 1452 LayoutView* layoutView = view();
1454 while (layoutView->frame()->ownerLayoutObject()) 1453 while (layoutView->frame()->ownerLayoutObject())
1455 layoutView = layoutView->frame()->ownerLayoutObject()->view(); 1454 layoutView = layoutView->frame()->ownerLayoutObject()->view();
1456 mapToVisibleRectInContainerSpace(layoutView, rect, 0); 1455 mapToVisibleRectInAncestorSpace(layoutView, rect, nullptr);
1457 return rect.intersects(LayoutRect(layoutView->frameView()->scrollableArea()- >visibleContentRectDouble())); 1456 return rect.intersects(LayoutRect(layoutView->frameView()->scrollableArea()- >visibleContentRectDouble()));
1458 } 1457 }
1459 1458
1460 PaintInvalidationReason LayoutBox::invalidatePaintIfNeeded(PaintInvalidationStat e& paintInvalidationState, const LayoutBoxModelObject& paintInvalidationContaine r) 1459 PaintInvalidationReason LayoutBox::invalidatePaintIfNeeded(PaintInvalidationStat e& paintInvalidationState, const LayoutBoxModelObject& paintInvalidationContaine r)
1461 { 1460 {
1462 PaintInvalidationReason fullInvalidationReason = fullPaintInvalidationReason (); 1461 PaintInvalidationReason fullInvalidationReason = fullPaintInvalidationReason ();
1463 // If the current paint invalidation reason is PaintInvalidationDelayedFull, then this paint invalidation can delayed if the 1462 // If the current paint invalidation reason is PaintInvalidationDelayedFull, then this paint invalidation can delayed if the
1464 // LayoutBox in question is not on-screen. The logic to decide whether this is appropriate exists at the site of the original 1463 // LayoutBox in question is not on-screen. The logic to decide whether this is appropriate exists at the site of the original
1465 // paint invalidation that chose PaintInvalidationDelayedFull. 1464 // paint invalidation that chose PaintInvalidationDelayedFull.
1466 if (fullInvalidationReason == PaintInvalidationDelayedFull) { 1465 if (fullInvalidationReason == PaintInvalidationDelayedFull) {
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
1634 LayoutUnit fillAvailableExtent = containingBlock()->availableLogicalHeig ht(ExcludeMarginBorderPadding); 1633 LayoutUnit fillAvailableExtent = containingBlock()->availableLogicalHeig ht(ExcludeMarginBorderPadding);
1635 if (fillAvailableExtent == -1) 1634 if (fillAvailableExtent == -1)
1636 return fillFallbackExtent; 1635 return fillFallbackExtent;
1637 return std::min(fillAvailableExtent, fillFallbackExtent); 1636 return std::min(fillAvailableExtent, fillFallbackExtent);
1638 } 1637 }
1639 1638
1640 // Use the content box logical height as specified by the style. 1639 // Use the content box logical height as specified by the style.
1641 return cb->adjustContentBoxLogicalHeightForBoxSizing(logicalHeightLength.val ue()); 1640 return cb->adjustContentBoxLogicalHeightForBoxSizing(logicalHeightLength.val ue());
1642 } 1641 }
1643 1642
1644 void LayoutBox::mapLocalToContainer(const LayoutBoxModelObject* paintInvalidatio nContainer, TransformState& transformState, MapCoordinatesFlags mode, bool* wasF ixed, const PaintInvalidationState* paintInvalidationState) const 1643 void LayoutBox::mapLocalToAncestor(const LayoutBoxModelObject* ancestor, Transfo rmState& transformState, MapCoordinatesFlags mode, bool* wasFixed, const PaintIn validationState* paintInvalidationState) const
1645 { 1644 {
1646 if (paintInvalidationContainer == this) 1645 if (ancestor == this)
1647 return; 1646 return;
1648 1647
1649 if (paintInvalidationState && paintInvalidationState->canMapToContainer(pain tInvalidationContainer)) { 1648 if (paintInvalidationState && paintInvalidationState->canMapToContainer(ance stor)) {
1650 LayoutSize offset = paintInvalidationState->paintOffset() + locationOffs et(); 1649 LayoutSize offset = paintInvalidationState->paintOffset() + locationOffs et();
1651 if (style()->hasInFlowPosition() && layer()) 1650 if (style()->hasInFlowPosition() && layer())
1652 offset += layer()->offsetForInFlowPosition(); 1651 offset += layer()->offsetForInFlowPosition();
1653 transformState.move(offset); 1652 transformState.move(offset);
1654 return; 1653 return;
1655 } 1654 }
1656 1655
1657 bool containerSkipped; 1656 bool ancestorSkipped;
1658 LayoutObject* o = container(paintInvalidationContainer, &containerSkipped); 1657 LayoutObject* o = container(ancestor, &ancestorSkipped);
1659 if (!o) 1658 if (!o)
1660 return; 1659 return;
1661 1660
1662 bool isFixedPos = style()->position() == FixedPosition; 1661 bool isFixedPos = style()->position() == FixedPosition;
1663 bool hasTransform = hasLayer() && layer()->transform(); 1662 bool hasTransform = hasLayer() && layer()->transform();
1664 // If this box has a transform, it acts as a fixed position container for fi xed descendants, 1663 // If this box has a transform, it acts as a fixed position container for fi xed descendants,
1665 // and may itself also be fixed position. So propagate 'fixed' up only if th is box is fixed position. 1664 // and may itself also be fixed position. So propagate 'fixed' up only if th is box is fixed position.
1666 if (hasTransform && !isFixedPos) 1665 if (hasTransform && !isFixedPos)
1667 mode &= ~IsFixed; 1666 mode &= ~IsFixed;
1668 else if (isFixedPos) 1667 else if (isFixedPos)
1669 mode |= IsFixed; 1668 mode |= IsFixed;
1670 1669
1671 if (wasFixed) 1670 if (wasFixed)
1672 *wasFixed = mode & IsFixed; 1671 *wasFixed = mode & IsFixed;
1673 1672
1674 LayoutSize containerOffset = offsetFromContainer(o, roundedLayoutPoint(trans formState.mappedPoint())); 1673 LayoutSize containerOffset = offsetFromContainer(o, roundedLayoutPoint(trans formState.mappedPoint()));
1675 1674
1676 bool preserve3D = mode & UseTransforms && (o->style()->preserves3D() || styl e()->preserves3D()); 1675 bool preserve3D = mode & UseTransforms && (o->style()->preserves3D() || styl e()->preserves3D());
1677 if (mode & UseTransforms && shouldUseTransformFromContainer(o)) { 1676 if (mode & UseTransforms && shouldUseTransformFromContainer(o)) {
1678 TransformationMatrix t; 1677 TransformationMatrix t;
1679 getTransformFromContainer(o, containerOffset, t); 1678 getTransformFromContainer(o, containerOffset, t);
1680 transformState.applyTransform(t, preserve3D ? TransformState::Accumulate Transform : TransformState::FlattenTransform); 1679 transformState.applyTransform(t, preserve3D ? TransformState::Accumulate Transform : TransformState::FlattenTransform);
1681 } else { 1680 } else {
1682 transformState.move(containerOffset.width(), containerOffset.height(), p reserve3D ? TransformState::AccumulateTransform : TransformState::FlattenTransfo rm); 1681 transformState.move(containerOffset.width(), containerOffset.height(), p reserve3D ? TransformState::AccumulateTransform : TransformState::FlattenTransfo rm);
1683 } 1682 }
1684 1683
1685 if (containerSkipped) { 1684 if (ancestorSkipped) {
1686 // There can't be a transform between paintInvalidationContainer and o, because transforms create containers, so it should be safe 1685 // There can't be a transform between paintInvalidationContainer and o, because transforms create containers, so it should be safe
1687 // to just subtract the delta between the paintInvalidationContainer and o. 1686 // to just subtract the delta between the paintInvalidationContainer and o.
1688 LayoutSize containerOffset = paintInvalidationContainer->offsetFromAnces torContainer(o); 1687 LayoutSize containerOffset = ancestor->offsetFromAncestorContainer(o);
1689 transformState.move(-containerOffset.width(), -containerOffset.height(), preserve3D ? TransformState::AccumulateTransform : TransformState::FlattenTrans form); 1688 transformState.move(-containerOffset.width(), -containerOffset.height(), preserve3D ? TransformState::AccumulateTransform : TransformState::FlattenTrans form);
1690 return; 1689 return;
1691 } 1690 }
1692 1691
1693 mode &= ~ApplyContainerFlip; 1692 mode &= ~ApplyContainerFlip;
1694 1693
1695 o->mapLocalToContainer(paintInvalidationContainer, transformState, mode, was Fixed); 1694 o->mapLocalToAncestor(ancestor, transformState, mode, wasFixed);
1696 } 1695 }
1697 1696
1698 void LayoutBox::mapAbsoluteToLocalPoint(MapCoordinatesFlags mode, TransformState & transformState) const 1697 void LayoutBox::mapAbsoluteToLocalPoint(MapCoordinatesFlags mode, TransformState & transformState) const
1699 { 1698 {
1700 bool isFixedPos = style()->position() == FixedPosition; 1699 bool isFixedPos = style()->position() == FixedPosition;
1701 bool hasTransform = hasLayer() && layer()->transform(); 1700 bool hasTransform = hasLayer() && layer()->transform();
1702 if (hasTransform && !isFixedPos) { 1701 if (hasTransform && !isFixedPos) {
1703 // If this box has a transform, it acts as a fixed position container fo r fixed descendants, 1702 // If this box has a transform, it acts as a fixed position container fo r fixed descendants,
1704 // and may itself also be fixed position. So propagate 'fixed' up only i f this box is fixed position. 1703 // and may itself also be fixed position. So propagate 'fixed' up only i f this box is fixed position.
1705 mode &= ~IsFixed; 1704 mode &= ~IsFixed;
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
1876 LayoutRect LayoutBox::clippedOverflowRectForPaintInvalidation(const LayoutBoxMod elObject* paintInvalidationContainer, const PaintInvalidationState* paintInvalid ationState) const 1875 LayoutRect LayoutBox::clippedOverflowRectForPaintInvalidation(const LayoutBoxMod elObject* paintInvalidationContainer, const PaintInvalidationState* paintInvalid ationState) const
1877 { 1876 {
1878 if (style()->visibility() != VISIBLE) { 1877 if (style()->visibility() != VISIBLE) {
1879 PaintLayer* layer = enclosingLayer(); 1878 PaintLayer* layer = enclosingLayer();
1880 layer->updateDescendantDependentFlags(); 1879 layer->updateDescendantDependentFlags();
1881 if (layer->subtreeIsInvisible()) 1880 if (layer->subtreeIsInvisible())
1882 return LayoutRect(); 1881 return LayoutRect();
1883 } 1882 }
1884 1883
1885 LayoutRect r = visualOverflowRect(); 1884 LayoutRect r = visualOverflowRect();
1886 mapToVisibleRectInContainerSpace(paintInvalidationContainer, r, paintInvalid ationState); 1885 mapToVisibleRectInAncestorSpace(paintInvalidationContainer, r, paintInvalida tionState);
1887 return r; 1886 return r;
1888 } 1887 }
1889 1888
1890 void LayoutBox::mapToVisibleRectInContainerSpace(const LayoutBoxModelObject* pai ntInvalidationContainer, LayoutRect& rect, const PaintInvalidationState* paintIn validationState) const 1889 void LayoutBox::mapToVisibleRectInAncestorSpace(const LayoutBoxModelObject* ance stor, LayoutRect& rect, const PaintInvalidationState* paintInvalidationState) co nst
1891 { 1890 {
1892 // The rect we compute at each step is shifted by our x/y offset in the pare nt container's coordinate space. 1891 // The rect we compute at each step is shifted by our x/y offset in the pare nt container's coordinate space.
1893 // Only when we cross a writing mode boundary will we have to possibly flipF orWritingMode (to convert into a more appropriate 1892 // Only when we cross a writing mode boundary will we have to possibly flipF orWritingMode (to convert into a more appropriate
1894 // offset corner for the enclosing container). This allows for a fully RL or BT document to issue paint invalidations 1893 // offset corner for the enclosing container). This allows for a fully RL or BT document to issue paint invalidations
1895 // properly even during layout, since the rect remains flipped all the way u ntil the end. 1894 // properly even during layout, since the rect remains flipped all the way u ntil the end.
1896 // 1895 //
1897 // LayoutView::computeRectForPaintInvalidation then converts the rect to phy sical coordinates. We also convert to 1896 // LayoutView::computeRectForPaintInvalidation then converts the rect to phy sical coordinates. We also convert to
1898 // physical when we hit a paintInvalidationContainer boundary. Therefore the final rect returned is always in the 1897 // physical when we hit a paintInvalidationContainer boundary. Therefore the final rect returned is always in the
1899 // physical coordinate space of the paintInvalidationContainer. 1898 // physical coordinate space of the paintInvalidationContainer.
1900 const ComputedStyle& styleToUse = styleRef(); 1899 const ComputedStyle& styleToUse = styleRef();
1901 1900
1902 EPosition position = styleToUse.position(); 1901 EPosition position = styleToUse.position();
1903 1902
1904 // We need to inflate the paint invalidation rect before we use paintInvalid ationState, 1903 // We need to inflate the paint invalidation rect before we use paintInvalid ationState,
1905 // else we would forget to inflate it for the current layoutObject. FIXME: I f these were 1904 // else we would forget to inflate it for the current layoutObject. FIXME: I f these were
1906 // included into the visual overflow for repaint, we wouldn't have this issu e. 1905 // included into the visual overflow for repaint, we wouldn't have this issu e.
1907 inflatePaintInvalidationRectForReflectionAndFilter(rect); 1906 inflatePaintInvalidationRectForReflectionAndFilter(rect);
1908 1907
1909 if (paintInvalidationState && paintInvalidationState->canMapToContainer(pain tInvalidationContainer) && position != FixedPosition) { 1908 if (paintInvalidationState && paintInvalidationState->canMapToContainer(ance stor) && position != FixedPosition) {
1910 if (layer() && layer()->transform()) 1909 if (layer() && layer()->transform())
1911 rect = LayoutRect(layer()->transform()->mapRect(pixelSnappedIntRect( rect))); 1910 rect = LayoutRect(layer()->transform()->mapRect(pixelSnappedIntRect( rect)));
1912 1911
1913 // We can't trust the bits on LayoutObject, because this might be called while re-resolving style. 1912 // We can't trust the bits on LayoutObject, because this might be called while re-resolving style.
1914 if (styleToUse.hasInFlowPosition() && layer()) 1913 if (styleToUse.hasInFlowPosition() && layer())
1915 rect.move(layer()->offsetForInFlowPosition()); 1914 rect.move(layer()->offsetForInFlowPosition());
1916 1915
1917 rect.moveBy(location()); 1916 rect.moveBy(location());
1918 rect.move(paintInvalidationState->paintOffset()); 1917 rect.move(paintInvalidationState->paintOffset());
1919 if (paintInvalidationState->isClipped()) 1918 if (paintInvalidationState->isClipped())
1920 rect.intersect(paintInvalidationState->clipRect()); 1919 rect.intersect(paintInvalidationState->clipRect());
1921 return; 1920 return;
1922 } 1921 }
1923 1922
1924 if (paintInvalidationContainer == this) { 1923 if (ancestor == this) {
1925 if (paintInvalidationContainer->style()->isFlippedBlocksWritingMode()) 1924 if (ancestor->style()->isFlippedBlocksWritingMode())
1926 flipForWritingMode(rect); 1925 flipForWritingMode(rect);
1927 return; 1926 return;
1928 } 1927 }
1929 1928
1930 bool containerSkipped; 1929 bool containerSkipped;
1931 LayoutObject* o = container(paintInvalidationContainer, &containerSkipped); 1930 LayoutObject* container = this->container(ancestor, &containerSkipped);
1932 if (!o) 1931 if (!container)
1933 return; 1932 return;
1934 1933
1935 if (isWritingModeRoot()) 1934 if (isWritingModeRoot())
1936 flipForWritingMode(rect); 1935 flipForWritingMode(rect);
1937 1936
1938 LayoutPoint topLeft = rect.location(); 1937 LayoutPoint topLeft = rect.location();
1939 topLeft.move(locationOffset()); 1938 topLeft.move(locationOffset());
1940 1939
1941 // We are now in our parent container's coordinate space. Apply our transfo rm to obtain a bounding box 1940 // We are now in our parent container's coordinate space. Apply our transfo rm to obtain a bounding box
1942 // in the parent's coordinate space that encloses us. 1941 // in the parent's coordinate space that encloses us.
1943 if (hasLayer() && layer()->transform()) { 1942 if (hasLayer() && layer()->transform()) {
1944 rect = LayoutRect(layer()->transform()->mapRect(pixelSnappedIntRect(rect ))); 1943 rect = LayoutRect(layer()->transform()->mapRect(pixelSnappedIntRect(rect )));
1945 topLeft = rect.location(); 1944 topLeft = rect.location();
1946 topLeft.move(locationOffset()); 1945 topLeft.move(locationOffset());
1947 } 1946 }
1948 1947
1949 if (position == AbsolutePosition && o->isInFlowPositioned() && o->isLayoutIn line()) { 1948 if (position == AbsolutePosition && container->isInFlowPositioned() && conta iner->isLayoutInline()) {
1950 topLeft += toLayoutInline(o)->offsetForInFlowPositionedInline(*this); 1949 topLeft += toLayoutInline(container)->offsetForInFlowPositionedInline(*t his);
1951 } else if (styleToUse.hasInFlowPosition() && layer()) { 1950 } else if (styleToUse.hasInFlowPosition() && layer()) {
1952 // Apply the relative position offset when invalidating a rectangle. Th e layer 1951 // Apply the relative position offset when invalidating a rectangle. Th e layer
1953 // is translated, but the layout box isn't, so we need to do this to get the 1952 // is translated, but the layout box isn't, so we need to do this to get the
1954 // right dirty rect. Since this is called from LayoutObject::setStyle, the relative position 1953 // right dirty rect. Since this is called from LayoutObject::setStyle, the relative position
1955 // flag on the LayoutObject has been cleared, so use the one on the styl e(). 1954 // flag on the LayoutObject has been cleared, so use the one on the styl e().
1956 topLeft += layer()->offsetForInFlowPosition(); 1955 topLeft += layer()->offsetForInFlowPosition();
1957 } 1956 }
1958 1957
1959 // FIXME: We ignore the lightweight clipping rect that controls use, since i f |o| is in mid-layout, 1958 // FIXME: We ignore the lightweight clipping rect that controls use, since i f |o| is in mid-layout,
1960 // its controlClipRect will be wrong. For overflow clip we use the values ca ched by the layer. 1959 // its controlClipRect will be wrong. For overflow clip we use the values ca ched by the layer.
1961 rect.setLocation(topLeft); 1960 rect.setLocation(topLeft);
1962 if (o->hasOverflowClip()) { 1961 if (container->hasOverflowClip()) {
1963 LayoutBox* containerBox = toLayoutBox(o); 1962 LayoutBox* containerBox = toLayoutBox(container);
1964 if (o == paintInvalidationContainer) 1963 containerBox->mapScrollingContentsRectToBoxSpace(rect);
1965 containerBox->applyCachedScrollOffsetForPaintInvalidation(rect); 1964 if (container != ancestor)
1966 else 1965 containerBox->applyOverflowClip(rect);
1967 containerBox->applyCachedClipAndScrollOffsetForPaintInvalidation(rec t);
1968 if (rect.isEmpty()) 1966 if (rect.isEmpty())
1969 return; 1967 return;
1970 } 1968 }
1971 1969
1972 if (containerSkipped) { 1970 if (containerSkipped) {
1973 // If the paintInvalidationContainer is below o, then we need to map the rect into paintInvalidationContainer's coordinates. 1971 // If the paintInvalidationContainer is below o, then we need to map the rect into paintInvalidationContainer's coordinates.
1974 LayoutSize containerOffset = paintInvalidationContainer->offsetFromAnces torContainer(o); 1972 LayoutSize containerOffset = ancestor->offsetFromAncestorContainer(conta iner);
1975 rect.move(-containerOffset); 1973 rect.move(-containerOffset);
1976 // If the paintInvalidationContainer is fixed, then the rect is already in its coordinates so doesn't need viewport-adjusting. 1974 // If the paintInvalidationContainer is fixed, then the rect is already in its coordinates so doesn't need viewport-adjusting.
1977 if (paintInvalidationContainer->style()->position() != FixedPosition && o->isLayoutView()) 1975 if (ancestor->style()->position() != FixedPosition && container->isLayou tView())
1978 toLayoutView(o)->adjustViewportConstrainedOffset(rect, LayoutView::v iewportConstrainedPosition(position)); 1976 toLayoutView(container)->adjustViewportConstrainedOffset(rect, Layou tView::viewportConstrainedPosition(position));
1979 return; 1977 return;
1980 } 1978 }
1981 1979
1982 if (o->isLayoutView()) 1980 if (container->isLayoutView())
1983 toLayoutView(o)->mapToVisibleRectInContainerSpace(paintInvalidationConta iner, rect, LayoutView::viewportConstrainedPosition(position), paintInvalidation State); 1981 toLayoutView(container)->mapToVisibleRectInAncestorSpace(ancestor, rect, LayoutView::viewportConstrainedPosition(position), paintInvalidationState);
1984 else 1982 else
1985 o->mapToVisibleRectInContainerSpace(paintInvalidationContainer, rect, pa intInvalidationState); 1983 container->mapToVisibleRectInAncestorSpace(ancestor, rect, paintInvalida tionState);
1986 } 1984 }
1987 1985
1988 void LayoutBox::inflatePaintInvalidationRectForReflectionAndFilter(LayoutRect& p aintInvalidationRect) const 1986 void LayoutBox::inflatePaintInvalidationRectForReflectionAndFilter(LayoutRect& p aintInvalidationRect) const
1989 { 1987 {
1990 if (hasReflection()) 1988 if (hasReflection())
1991 paintInvalidationRect.unite(reflectedRect(paintInvalidationRect)); 1989 paintInvalidationRect.unite(reflectedRect(paintInvalidationRect));
1992 1990
1993 if (layer() && layer()->hasFilter()) 1991 if (layer() && layer()->hasFilter())
1994 paintInvalidationRect.expand(layer()->filterOutsets()); 1992 paintInvalidationRect.expand(layer()->filterOutsets());
1995 } 1993 }
(...skipping 2893 matching lines...) Expand 10 before | Expand all | Expand 10 after
4889 } 4887 }
4890 4888
4891 void LayoutBox::clearPreviousPaintInvalidationRects() 4889 void LayoutBox::clearPreviousPaintInvalidationRects()
4892 { 4890 {
4893 LayoutBoxModelObject::clearPreviousPaintInvalidationRects(); 4891 LayoutBoxModelObject::clearPreviousPaintInvalidationRects();
4894 if (PaintLayerScrollableArea* scrollableArea = this->scrollableArea()) 4892 if (PaintLayerScrollableArea* scrollableArea = this->scrollableArea())
4895 scrollableArea->clearPreviousPaintInvalidationRects(); 4893 scrollableArea->clearPreviousPaintInvalidationRects();
4896 } 4894 }
4897 4895
4898 } // namespace blink 4896 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/layout/LayoutBox.h ('k') | third_party/WebKit/Source/core/layout/LayoutBoxModelObject.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698