OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (C) 1998, 1999 Torben Weis <weis@kde.org> | 2 * Copyright (C) 1998, 1999 Torben Weis <weis@kde.org> |
3 * 1999 Lars Knoll <knoll@kde.org> | 3 * 1999 Lars Knoll <knoll@kde.org> |
4 * 1999 Antti Koivisto <koivisto@kde.org> | 4 * 1999 Antti Koivisto <koivisto@kde.org> |
5 * 2000 Dirk Mueller <mueller@kde.org> | 5 * 2000 Dirk Mueller <mueller@kde.org> |
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. | 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. |
7 * (C) 2006 Graham Dennis (graham.dennis@gmail.com) | 7 * (C) 2006 Graham Dennis (graham.dennis@gmail.com) |
8 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) | 8 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) |
9 * Copyright (C) 2009 Google Inc. All rights reserved. | 9 * Copyright (C) 2009 Google Inc. All rights reserved. |
10 * | 10 * |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
143 , m_needsUpdateWidgetGeometries(false) | 143 , m_needsUpdateWidgetGeometries(false) |
144 , m_needsUpdateViewportIntersection(true) | 144 , m_needsUpdateViewportIntersection(true) |
145 , m_needsUpdateViewportIntersectionInSubtree(true) | 145 , m_needsUpdateViewportIntersectionInSubtree(true) |
146 #if ENABLE(ASSERT) | 146 #if ENABLE(ASSERT) |
147 , m_hasBeenDisposed(false) | 147 , m_hasBeenDisposed(false) |
148 #endif | 148 #endif |
149 , m_horizontalScrollbarMode(ScrollbarAuto) | 149 , m_horizontalScrollbarMode(ScrollbarAuto) |
150 , m_verticalScrollbarMode(ScrollbarAuto) | 150 , m_verticalScrollbarMode(ScrollbarAuto) |
151 , m_horizontalScrollbarLock(false) | 151 , m_horizontalScrollbarLock(false) |
152 , m_verticalScrollbarLock(false) | 152 , m_verticalScrollbarLock(false) |
153 , m_scrollOverrideEnabled(false) | |
153 , m_scrollbarsAvoidingResizer(0) | 154 , m_scrollbarsAvoidingResizer(0) |
154 , m_scrollbarsSuppressed(false) | 155 , m_scrollbarsSuppressed(false) |
155 , m_inUpdateScrollbars(false) | 156 , m_inUpdateScrollbars(false) |
156 , m_frameTimingRequestsDirty(true) | 157 , m_frameTimingRequestsDirty(true) |
157 , m_viewportIntersectionValid(false) | 158 , m_viewportIntersectionValid(false) |
158 , m_hiddenForThrottling(false) | 159 , m_hiddenForThrottling(false) |
159 , m_crossOriginForThrottling(false) | 160 , m_crossOriginForThrottling(false) |
160 , m_subtreeThrottled(false) | 161 , m_subtreeThrottled(false) |
161 , m_isUpdatingAllLifecyclePhases(false) | 162 , m_isUpdatingAllLifecyclePhases(false) |
162 , m_scrollAnchor(this) | 163 , m_scrollAnchor(this) |
(...skipping 1394 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1557 scrollToFragmentAnchor(); | 1558 scrollToFragmentAnchor(); |
1558 } | 1559 } |
1559 | 1560 |
1560 void FrameView::clearFragmentAnchor() | 1561 void FrameView::clearFragmentAnchor() |
1561 { | 1562 { |
1562 m_fragmentAnchor = nullptr; | 1563 m_fragmentAnchor = nullptr; |
1563 } | 1564 } |
1564 | 1565 |
1565 void FrameView::setScrollPosition(const DoublePoint& scrollPoint, ScrollType scr ollType, ScrollBehavior scrollBehavior) | 1566 void FrameView::setScrollPosition(const DoublePoint& scrollPoint, ScrollType scr ollType, ScrollBehavior scrollBehavior) |
1566 { | 1567 { |
1567 DoublePoint newScrollPosition = clampScrollPosition(scrollPoint); | 1568 DoublePoint newScrollPosition = clampScrollPosition(applyScrollOverrideToPos ition(newScrollPosition)); |
1568 if (newScrollPosition == scrollPositionDouble()) | 1569 if (newScrollPosition == scrollPositionDouble()) |
1569 return; | 1570 return; |
1570 | 1571 |
1571 if (scrollBehavior == ScrollBehaviorAuto) | 1572 if (scrollBehavior == ScrollBehaviorAuto) |
1572 scrollBehavior = scrollBehaviorStyle(); | 1573 scrollBehavior = scrollBehaviorStyle(); |
1573 | 1574 |
1574 ScrollableArea::setScrollPosition(newScrollPosition, scrollType, scrollBehav ior); | 1575 ScrollableArea::setScrollPosition(newScrollPosition, scrollType, scrollBehav ior); |
1575 } | 1576 } |
1576 | 1577 |
1578 void FrameView::setScrollOverride(const DoublePoint& position) | |
1579 { | |
1580 m_scrollOverrideEnabled = true; | |
1581 m_scrollOverridePosition = position; | |
1582 setScrollPosition(scrollPosition(), ProgrammaticScroll, ScrollBehaviorInstan t); | |
1583 } | |
1584 | |
1585 void FrameView::clearScrollOverride() | |
1586 { | |
1587 m_scrollOverrideEnabled = false; | |
1588 } | |
1589 | |
1577 void FrameView::didUpdateElasticOverscroll() | 1590 void FrameView::didUpdateElasticOverscroll() |
1578 { | 1591 { |
1579 Page* page = frame().page(); | 1592 Page* page = frame().page(); |
1580 if (!page) | 1593 if (!page) |
1581 return; | 1594 return; |
1582 FloatSize elasticOverscroll = page->chromeClient().elasticOverscroll(); | 1595 FloatSize elasticOverscroll = page->chromeClient().elasticOverscroll(); |
1583 if (m_horizontalScrollbar) { | 1596 if (m_horizontalScrollbar) { |
1584 float delta = elasticOverscroll.width() - m_horizontalScrollbar->elastic Overscroll(); | 1597 float delta = elasticOverscroll.width() - m_horizontalScrollbar->elastic Overscroll(); |
1585 if (delta != 0) { | 1598 if (delta != 0) { |
1586 m_horizontalScrollbar->setElasticOverscroll(elasticOverscroll.width( )); | 1599 m_horizontalScrollbar->setElasticOverscroll(elasticOverscroll.width( )); |
(...skipping 1639 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3226 return orientation == HorizontalScrollbar ? scrollSize.width() : scrollS ize.height(); | 3239 return orientation == HorizontalScrollbar ? scrollSize.width() : scrollS ize.height(); |
3227 } | 3240 } |
3228 | 3241 |
3229 return scrollbar->totalSize() - scrollbar->visibleSize(); | 3242 return scrollbar->totalSize() - scrollbar->visibleSize(); |
3230 } | 3243 } |
3231 | 3244 |
3232 void FrameView::setScrollOffset(const DoublePoint& offset, ScrollType scrollType ) | 3245 void FrameView::setScrollOffset(const DoublePoint& offset, ScrollType scrollType ) |
3233 { | 3246 { |
3234 // TODO(skobes): We shouldn't have to clamp here; instead we should update c allers | 3247 // TODO(skobes): We shouldn't have to clamp here; instead we should update c allers |
3235 // ScrollableArea::scrollPositionChanged to only pass clamped offsets. | 3248 // ScrollableArea::scrollPositionChanged to only pass clamped offsets. |
3236 DoublePoint newPosition = clampScrollPosition(offset); | 3249 DoublePoint newPosition = clampScrollPosition(applyScrollOverrideToPosition( offset)); |
3237 | 3250 |
3238 DoublePoint oldPosition = m_scrollPosition; | 3251 DoublePoint oldPosition = m_scrollPosition; |
3239 DoubleSize scrollDelta = newPosition - oldPosition; | 3252 DoubleSize scrollDelta = newPosition - oldPosition; |
3240 if (scrollDelta.isZero()) | 3253 if (scrollDelta.isZero()) |
3241 return; | 3254 return; |
3242 | 3255 |
3243 if (m_frame->settings() && m_frame->settings()->rootLayerScrolls()) { | 3256 if (m_frame->settings() && m_frame->settings()->rootLayerScrolls()) { |
3244 // Don't scroll the FrameView! | 3257 // Don't scroll the FrameView! |
3245 ASSERT_NOT_REACHED(); | 3258 ASSERT_NOT_REACHED(); |
3246 } | 3259 } |
(...skipping 28 matching lines...) Expand all Loading... | |
3275 if (AXObjectCache* cache = m_frame->document()->existingAXObjectCache()) | 3288 if (AXObjectCache* cache = m_frame->document()->existingAXObjectCache()) |
3276 cache->handleScrollPositionChanged(this); | 3289 cache->handleScrollPositionChanged(this); |
3277 | 3290 |
3278 frame().loader().saveScrollState(); | 3291 frame().loader().saveScrollState(); |
3279 frame().loader().client()->didChangeScrollOffset(); | 3292 frame().loader().client()->didChangeScrollOffset(); |
3280 | 3293 |
3281 if (RuntimeEnabledFeatures::scrollAnchoringEnabled() && scrollType != Anchor ingScroll) | 3294 if (RuntimeEnabledFeatures::scrollAnchoringEnabled() && scrollType != Anchor ingScroll) |
3282 m_scrollAnchor.clear(); | 3295 m_scrollAnchor.clear(); |
3283 } | 3296 } |
3284 | 3297 |
3298 DoublePoint FrameView::applyScrollOverrideToPosition(const DoublePoint& position ) | |
3299 { | |
3300 DoublePoint newPosition = position; | |
3301 if (m_scrollOverrideEnabled) { | |
3302 if (m_scrollOverridePosition.x() >= 0) | |
Sami
2016/06/23 17:34:03
Do we need to validate the coordinates again here?
Eric Seckler
2016/06/23 18:12:43
At the moment, I'm using a value <0 to signal "no
Sami
2016/06/24 14:48:26
Oh I see, I didn't notice we can override just one
| |
3303 newPosition.setX(m_scrollOverridePosition.x()); | |
3304 if (m_scrollOverridePosition.y() >= 0) | |
3305 newPosition.setY(m_scrollOverridePosition.y()); | |
3306 } | |
3307 return newPosition; | |
3308 } | |
3309 | |
3285 void FrameView::windowResizerRectChanged() | 3310 void FrameView::windowResizerRectChanged() |
3286 { | 3311 { |
3287 updateScrollbars(); | 3312 updateScrollbars(); |
3288 } | 3313 } |
3289 | 3314 |
3290 bool FrameView::hasOverlayScrollbars() const | 3315 bool FrameView::hasOverlayScrollbars() const |
3291 { | 3316 { |
3292 return (m_horizontalScrollbar && m_horizontalScrollbar->isOverlayScrollbar() ) | 3317 return (m_horizontalScrollbar && m_horizontalScrollbar->isOverlayScrollbar() ) |
3293 || (m_verticalScrollbar && m_verticalScrollbar->isOverlayScrollbar()); | 3318 || (m_verticalScrollbar && m_verticalScrollbar->isOverlayScrollbar()); |
3294 } | 3319 } |
(...skipping 847 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4142 return m_subtreeThrottled || (m_hiddenForThrottling && m_crossOriginForThrot tling); | 4167 return m_subtreeThrottled || (m_hiddenForThrottling && m_crossOriginForThrot tling); |
4143 } | 4168 } |
4144 | 4169 |
4145 LayoutBox& FrameView::boxForScrollControlPaintInvalidation() const | 4170 LayoutBox& FrameView::boxForScrollControlPaintInvalidation() const |
4146 { | 4171 { |
4147 ASSERT(!layoutViewItem().isNull()); | 4172 ASSERT(!layoutViewItem().isNull()); |
4148 return *layoutView(); | 4173 return *layoutView(); |
4149 } | 4174 } |
4150 | 4175 |
4151 } // namespace blink | 4176 } // namespace blink |
OLD | NEW |