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

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

Issue 1540443003: Fix LayoutObject::mapToVisibleRectInContainerSpace() (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
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 921 matching lines...) Expand 10 before | Expand all | Expand 10 after
932 } 932 }
933 933
934 IntSize LayoutBox::scrolledContentOffset() const 934 IntSize LayoutBox::scrolledContentOffset() const
935 { 935 {
936 ASSERT(hasOverflowClip()); 936 ASSERT(hasOverflowClip());
937 ASSERT(hasLayer()); 937 ASSERT(hasLayer());
938 // FIXME: Return DoubleSize here. crbug.com/414283. 938 // FIXME: Return DoubleSize here. crbug.com/414283.
939 return flooredIntSize(layer()->scrollableArea()->scrollOffset()); 939 return flooredIntSize(layer()->scrollableArea()->scrollOffset());
940 } 940 }
941 941
942 void LayoutBox::applyCachedScrollOffsetForPaintInvalidation(LayoutRect& paintRec t) const 942 void LayoutBox::applyOverflowClipAndScrollOffsetForPaintInvalidationIfNeeded(Lay outRect& rect) const
943 { 943 {
944 ASSERT(hasLayer()); 944 ASSERT(hasLayer());
945 ASSERT(hasOverflowClip()); 945 ASSERT(hasOverflowClip());
946 946
947 LayoutSize offset = LayoutSize(-scrolledContentOffset()); 947 LayoutSize offset = LayoutSize(-scrolledContentOffset());
948 if (UNLIKELY(hasFlippedBlocksWritingMode())) { 948 if (UNLIKELY(hasFlippedBlocksWritingMode())) {
949 if (isHorizontalWritingMode()) 949 if (isHorizontalWritingMode())
950 offset.setHeight(-offset.height()); 950 offset.setHeight(-offset.height());
951 else 951 else
952 offset.setWidth(-offset.width()); 952 offset.setWidth(-offset.width());
953 } 953 }
954 paintRect.move(offset); 954 rect.move(offset);
955 }
956 955
957 void LayoutBox::applyCachedClipAndScrollOffsetForPaintInvalidation(LayoutRect& p aintRect) const 956 if (isPaintInvalidationContainer())
szager1 2015/12/18 18:49:21 This doesn't work for the IntersectionObserver use
Xianzhu 2015/12/18 19:30:51 Oh I didn't notice that this patch is to fix a rec
958 { 957 return;
959 ASSERT(hasLayer());
960 ASSERT(hasOverflowClip());
961 958
962 applyCachedScrollOffsetForPaintInvalidation(paintRect); 959 flipForWritingMode(rect);
963 flipForWritingMode(paintRect);
964 960
965 // size() is inaccurate if we're in the middle of a layout of this LayoutBox , so use the 961 // size() is inaccurate if we're in the middle of a layout of this LayoutBox , so use the
966 // layer's size instead. Even if the layer's size is wrong, the layer itself will issue paint invalidations 962 // layer's size instead. Even if the layer's size is wrong, the layer itself will issue paint invalidations
967 // anyway if its size does change. 963 // anyway if its size does change.
968 LayoutRect clipRect(LayoutPoint(), LayoutSize(layer()->size())); 964 LayoutRect clipRect(LayoutPoint(), LayoutSize(layer()->size()));
969 paintRect = intersection(paintRect, clipRect); 965 rect = intersection(rect, clipRect);
970 flipForWritingMode(paintRect); 966 flipForWritingMode(rect);
971 } 967 }
972 968
973 void LayoutBox::computeIntrinsicLogicalWidths(LayoutUnit& minLogicalWidth, Layou tUnit& maxLogicalWidth) const 969 void LayoutBox::computeIntrinsicLogicalWidths(LayoutUnit& minLogicalWidth, Layou tUnit& maxLogicalWidth) const
974 { 970 {
975 minLogicalWidth = minPreferredLogicalWidth() - borderAndPaddingLogicalWidth( ); 971 minLogicalWidth = minPreferredLogicalWidth() - borderAndPaddingLogicalWidth( );
976 maxLogicalWidth = maxPreferredLogicalWidth() - borderAndPaddingLogicalWidth( ); 972 maxLogicalWidth = maxPreferredLogicalWidth() - borderAndPaddingLogicalWidth( );
977 } 973 }
978 974
979 LayoutUnit LayoutBox::minPreferredLogicalWidth() const 975 LayoutUnit LayoutBox::minPreferredLogicalWidth() const
980 { 976 {
(...skipping 968 matching lines...) Expand 10 before | Expand all | Expand 10 after
1949 // is translated, but the layout box isn't, so we need to do this to get the 1945 // is translated, but the layout box isn't, so we need to do this to get the
1950 // right dirty rect. Since this is called from LayoutObject::setStyle, the relative position 1946 // right dirty rect. Since this is called from LayoutObject::setStyle, the relative position
1951 // flag on the LayoutObject has been cleared, so use the one on the styl e(). 1947 // flag on the LayoutObject has been cleared, so use the one on the styl e().
1952 topLeft += layer()->offsetForInFlowPosition(); 1948 topLeft += layer()->offsetForInFlowPosition();
1953 } 1949 }
1954 1950
1955 // FIXME: We ignore the lightweight clipping rect that controls use, since i f |o| is in mid-layout, 1951 // FIXME: We ignore the lightweight clipping rect that controls use, since i f |o| is in mid-layout,
1956 // its controlClipRect will be wrong. For overflow clip we use the values ca ched by the layer. 1952 // its controlClipRect will be wrong. For overflow clip we use the values ca ched by the layer.
1957 rect.setLocation(topLeft); 1953 rect.setLocation(topLeft);
1958 if (o->hasOverflowClip()) { 1954 if (o->hasOverflowClip()) {
1959 LayoutBox* containerBox = toLayoutBox(o); 1955 toLayoutBox(o)->applyOverflowClipAndScrollOffsetForPaintInvalidationIfNe eded(rect);
1960 if (o == paintInvalidationContainer)
1961 containerBox->applyCachedScrollOffsetForPaintInvalidation(rect);
1962 else
1963 containerBox->applyCachedClipAndScrollOffsetForPaintInvalidation(rec t);
1964 if (rect.isEmpty()) 1956 if (rect.isEmpty())
1965 return; 1957 return;
1966 } 1958 }
1967 1959
1968 if (containerSkipped) { 1960 if (containerSkipped) {
1969 // If the paintInvalidationContainer is below o, then we need to map the rect into paintInvalidationContainer's coordinates. 1961 // If the paintInvalidationContainer is below o, then we need to map the rect into paintInvalidationContainer's coordinates.
1970 LayoutSize containerOffset = paintInvalidationContainer->offsetFromAnces torContainer(o); 1962 LayoutSize containerOffset = paintInvalidationContainer->offsetFromAnces torContainer(o);
1971 rect.move(-containerOffset); 1963 rect.move(-containerOffset);
1972 // If the paintInvalidationContainer is fixed, then the rect is already in its coordinates so doesn't need viewport-adjusting. 1964 // If the paintInvalidationContainer is fixed, then the rect is already in its coordinates so doesn't need viewport-adjusting.
1973 if (paintInvalidationContainer->style()->position() != FixedPosition && o->isLayoutView()) 1965 if (paintInvalidationContainer->style()->position() != FixedPosition && o->isLayoutView())
(...skipping 2911 matching lines...) Expand 10 before | Expand all | Expand 10 after
4885 } 4877 }
4886 4878
4887 void LayoutBox::clearPreviousPaintInvalidationRects() 4879 void LayoutBox::clearPreviousPaintInvalidationRects()
4888 { 4880 {
4889 LayoutBoxModelObject::clearPreviousPaintInvalidationRects(); 4881 LayoutBoxModelObject::clearPreviousPaintInvalidationRects();
4890 if (PaintLayerScrollableArea* scrollableArea = this->scrollableArea()) 4882 if (PaintLayerScrollableArea* scrollableArea = this->scrollableArea())
4891 scrollableArea->clearPreviousPaintInvalidationRects(); 4883 scrollableArea->clearPreviousPaintInvalidationRects();
4892 } 4884 }
4893 4885
4894 } // namespace blink 4886 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/layout/LayoutBox.h ('k') | third_party/WebKit/Source/core/layout/LayoutInline.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698