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

Side by Side Diff: third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp

Issue 1647793002: Use ScrollAnchor in FrameView and PaintLayerScrollableArea. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@anchor-skeleton
Patch Set: move save/restore from LayoutBlockFlow into LayoutBlock Created 4 years, 10 months 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) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights reserved. 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights reserved.
3 * 3 *
4 * Portions are Copyright (C) 1998 Netscape Communications Corporation. 4 * Portions are Copyright (C) 1998 Netscape Communications Corporation.
5 * 5 *
6 * Other contributors: 6 * Other contributors:
7 * Robert O'Callahan <roc+@cs.cmu.edu> 7 * Robert O'Callahan <roc+@cs.cmu.edu>
8 * David Baron <dbaron@fas.harvard.edu> 8 * David Baron <dbaron@fas.harvard.edu>
9 * Christian Biesinger <cbiesinger@web.de> 9 * Christian Biesinger <cbiesinger@web.de>
10 * Randall Jesup <rjesup@wgate.com> 10 * Randall Jesup <rjesup@wgate.com>
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 : m_layer(layer) 85 : m_layer(layer)
86 , m_inResizeMode(false) 86 , m_inResizeMode(false)
87 , m_scrollsOverflow(false) 87 , m_scrollsOverflow(false)
88 , m_inOverflowRelayout(false) 88 , m_inOverflowRelayout(false)
89 , m_nextTopmostScrollChild(0) 89 , m_nextTopmostScrollChild(0)
90 , m_topmostScrollChild(0) 90 , m_topmostScrollChild(0)
91 , m_needsCompositedScrolling(false) 91 , m_needsCompositedScrolling(false)
92 , m_scrollbarManager(*this) 92 , m_scrollbarManager(*this)
93 , m_scrollCorner(nullptr) 93 , m_scrollCorner(nullptr)
94 , m_resizer(nullptr) 94 , m_resizer(nullptr)
95 , m_scrollAnchor(this)
95 #if ENABLE(ASSERT) 96 #if ENABLE(ASSERT)
96 , m_hasBeenDisposed(false) 97 , m_hasBeenDisposed(false)
97 #endif 98 #endif
98 { 99 {
99 Node* node = box().node(); 100 Node* node = box().node();
100 if (node && node->isElementNode()) { 101 if (node && node->isElementNode()) {
101 // We save and restore only the scrollOffset as the other scroll values are recalculated. 102 // We save and restore only the scrollOffset as the other scroll values are recalculated.
102 Element* element = toElement(node); 103 Element* element = toElement(node);
103 m_scrollOffset = element->savedLayerScrollOffset(); 104 m_scrollOffset = element->savedLayerScrollOffset();
104 if (!m_scrollOffset.isZero()) 105 if (!m_scrollOffset.isZero())
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 147
147 m_scrollbarManager.dispose(); 148 m_scrollbarManager.dispose();
148 149
149 if (m_scrollCorner) 150 if (m_scrollCorner)
150 m_scrollCorner->destroy(); 151 m_scrollCorner->destroy();
151 if (m_resizer) 152 if (m_resizer)
152 m_resizer->destroy(); 153 m_resizer->destroy();
153 154
154 clearScrollAnimators(); 155 clearScrollAnimators();
155 156
157 if (RuntimeEnabledFeatures::scrollAnchoringEnabled())
158 m_scrollAnchor.clear();
159
156 #if ENABLE(ASSERT) 160 #if ENABLE(ASSERT)
157 m_hasBeenDisposed = true; 161 m_hasBeenDisposed = true;
158 #endif 162 #endif
159 } 163 }
160 164
161 DEFINE_TRACE(PaintLayerScrollableArea) 165 DEFINE_TRACE(PaintLayerScrollableArea)
162 { 166 {
163 visitor->trace(m_scrollbarManager); 167 visitor->trace(m_scrollbarManager);
168 visitor->trace(m_scrollAnchor);
164 ScrollableArea::trace(visitor); 169 ScrollableArea::trace(visitor);
165 } 170 }
166 171
167 HostWindow* PaintLayerScrollableArea::hostWindow() const 172 HostWindow* PaintLayerScrollableArea::hostWindow() const
168 { 173 {
169 if (Page* page = box().frame()->page()) 174 if (Page* page = box().frame()->page())
170 return &page->chromeClient(); 175 return &page->chromeClient();
171 return nullptr; 176 return nullptr;
172 } 177 }
173 178
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
320 { 325 {
321 IntSize scrollDimensions = maximumScrollPosition() - minimumScrollPosition() ; 326 IntSize scrollDimensions = maximumScrollPosition() - minimumScrollPosition() ;
322 return (orientation == HorizontalScrollbar) ? scrollDimensions.width() : scr ollDimensions.height(); 327 return (orientation == HorizontalScrollbar) ? scrollDimensions.width() : scr ollDimensions.height();
323 } 328 }
324 329
325 void PaintLayerScrollableArea::setScrollOffset(const IntPoint& newScrollOffset, ScrollType scrollType) 330 void PaintLayerScrollableArea::setScrollOffset(const IntPoint& newScrollOffset, ScrollType scrollType)
326 { 331 {
327 setScrollOffset(DoublePoint(newScrollOffset), scrollType); 332 setScrollOffset(DoublePoint(newScrollOffset), scrollType);
328 } 333 }
329 334
330 void PaintLayerScrollableArea::setScrollOffset(const DoublePoint& newScrollOffse t, ScrollType) 335 void PaintLayerScrollableArea::setScrollOffset(const DoublePoint& newScrollOffse t, ScrollType scrollType)
331 { 336 {
332 if (scrollOffset() == toDoubleSize(newScrollOffset)) 337 if (scrollOffset() == toDoubleSize(newScrollOffset))
333 return; 338 return;
334 339
335 DoubleSize scrollDelta = scrollOffset() - toDoubleSize(newScrollOffset); 340 DoubleSize scrollDelta = scrollOffset() - toDoubleSize(newScrollOffset);
336 m_scrollOffset = toDoubleSize(newScrollOffset); 341 m_scrollOffset = toDoubleSize(newScrollOffset);
337 342
338 LocalFrame* frame = box().frame(); 343 LocalFrame* frame = box().frame();
339 ASSERT(frame); 344 ASSERT(frame);
340 345
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
400 box().view()->clearHitTestCache(); 405 box().view()->clearHitTestCache();
401 406
402 // Inform the FrameLoader of the new scroll position, so it can be restored when navigating back. 407 // Inform the FrameLoader of the new scroll position, so it can be restored when navigating back.
403 if (layer()->isRootLayer()) { 408 if (layer()->isRootLayer()) {
404 frameView->frame().loader().saveScrollState(); 409 frameView->frame().loader().saveScrollState();
405 frame->loader().client()->didChangeScrollOffset(); 410 frame->loader().client()->didChangeScrollOffset();
406 } 411 }
407 412
408 // All scrolls clear the fragment anchor. 413 // All scrolls clear the fragment anchor.
409 frameView->clearFragmentAnchor(); 414 frameView->clearFragmentAnchor();
415
416 // Clear the scroll anchor, unless it is the reason for this scroll.
417 if (RuntimeEnabledFeatures::scrollAnchoringEnabled() && scrollType != Anchor ingScroll)
418 scrollAnchor().clear();
410 } 419 }
411 420
412 IntPoint PaintLayerScrollableArea::scrollPosition() const 421 IntPoint PaintLayerScrollableArea::scrollPosition() const
413 { 422 {
414 return IntPoint(flooredIntSize(m_scrollOffset)); 423 return IntPoint(flooredIntSize(m_scrollOffset));
415 } 424 }
416 425
417 DoublePoint PaintLayerScrollableArea::scrollPositionDouble() const 426 DoublePoint PaintLayerScrollableArea::scrollPositionDouble() const
418 { 427 {
419 return DoublePoint(m_scrollOffset); 428 return DoublePoint(m_scrollOffset);
(...skipping 1125 matching lines...) Expand 10 before | Expand all | Expand 10 after
1545 } 1554 }
1546 1555
1547 DEFINE_TRACE(PaintLayerScrollableArea::ScrollbarManager) 1556 DEFINE_TRACE(PaintLayerScrollableArea::ScrollbarManager)
1548 { 1557 {
1549 visitor->trace(m_scrollableArea); 1558 visitor->trace(m_scrollableArea);
1550 visitor->trace(m_hBar); 1559 visitor->trace(m_hBar);
1551 visitor->trace(m_vBar); 1560 visitor->trace(m_vBar);
1552 } 1561 }
1553 1562
1554 } // namespace blink 1563 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698