| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "config.h" | 5 #include "config.h" |
| 6 #include "core/frame/RootFrameViewport.h" | 6 #include "core/frame/RootFrameViewport.h" |
| 7 | 7 |
| 8 #include "core/frame/FrameView.h" | 8 #include "core/frame/FrameView.h" |
| 9 #include "core/layout/ScrollAlignment.h" | 9 #include "core/layout/ScrollAlignment.h" |
| 10 #include "platform/geometry/DoubleRect.h" | 10 #include "platform/geometry/DoubleRect.h" |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 84 return; | 84 return; |
| 85 | 85 |
| 86 DoublePoint clampedPosition = clampScrollPosition(position); | 86 DoublePoint clampedPosition = clampScrollPosition(position); |
| 87 scrollToOffsetWithoutAnimation(toFloatPoint(clampedPosition)); | 87 scrollToOffsetWithoutAnimation(toFloatPoint(clampedPosition)); |
| 88 } | 88 } |
| 89 | 89 |
| 90 ScrollResult RootFrameViewport::handleWheel(const PlatformWheelEvent& event) | 90 ScrollResult RootFrameViewport::handleWheel(const PlatformWheelEvent& event) |
| 91 { | 91 { |
| 92 updateScrollAnimator(); | 92 updateScrollAnimator(); |
| 93 | 93 |
| 94 ScrollResult viewScrollResult(false); | 94 ScrollResult viewScrollResult; |
| 95 if (layoutViewport().isScrollable()) | 95 if (layoutViewport().isScrollable()) |
| 96 viewScrollResult = layoutViewport().handleWheel(event); | 96 viewScrollResult = layoutViewport().handleWheel(event); |
| 97 | 97 |
| 98 // The visual viewport will only accept pixel scrolls. | 98 // The visual viewport will only accept pixel scrolls. |
| 99 if (!event.canScroll() || event.granularity() == ScrollByPageWheelEvent) | 99 if (!event.canScroll() || event.granularity() == ScrollByPageWheelEvent) |
| 100 return viewScrollResult; | 100 return viewScrollResult; |
| 101 | 101 |
| 102 // Move the location by the negative of the remaining scroll delta. | 102 // Move the location by the negative of the remaining scroll delta. |
| 103 DoublePoint oldOffset = visualViewport().scrollPositionDouble(); | 103 DoublePoint oldOffset = visualViewport().scrollPositionDouble(); |
| 104 DoublePoint locationDelta; | 104 DoublePoint locationDelta; |
| 105 if (viewScrollResult.didScroll) { | 105 if (viewScrollResult.didScroll()) { |
| 106 locationDelta = -DoublePoint(viewScrollResult.unusedScrollDeltaX, viewSc
rollResult.unusedScrollDeltaY); | 106 locationDelta = -DoublePoint(viewScrollResult.unusedScrollDeltaX, viewSc
rollResult.unusedScrollDeltaY); |
| 107 } else { | 107 } else { |
| 108 if (event.railsMode() != PlatformEvent::RailsModeVertical) | 108 if (event.railsMode() != PlatformEvent::RailsModeVertical) |
| 109 locationDelta.setX(-event.deltaX()); | 109 locationDelta.setX(-event.deltaX()); |
| 110 if (event.railsMode() != PlatformEvent::RailsModeHorizontal) | 110 if (event.railsMode() != PlatformEvent::RailsModeHorizontal) |
| 111 locationDelta.setY(-event.deltaY()); | 111 locationDelta.setY(-event.deltaY()); |
| 112 } | 112 } |
| 113 | 113 |
| 114 DoublePoint targetPosition = visualViewport().adjustScrollPositionWithinRang
e( | 114 DoublePoint targetPosition = visualViewport().adjustScrollPositionWithinRang
e( |
| 115 visualViewport().scrollPositionDouble() + toDoubleSize(locationDelta)); | 115 visualViewport().scrollPositionDouble() + toDoubleSize(locationDelta)); |
| 116 visualViewport().scrollToOffsetWithoutAnimation(FloatPoint(targetPosition)); | 116 visualViewport().scrollToOffsetWithoutAnimation(FloatPoint(targetPosition)); |
| 117 | 117 |
| 118 DoublePoint usedLocationDelta(visualViewport().scrollPositionDouble() - oldO
ffset); | 118 DoublePoint usedLocationDelta(visualViewport().scrollPositionDouble() - oldO
ffset); |
| 119 if (!viewScrollResult.didScroll && usedLocationDelta == DoublePoint::zero()) | 119 if (!viewScrollResult.didScroll() && usedLocationDelta == DoublePoint::zero(
)) |
| 120 return ScrollResult(false); | 120 return ScrollResult(); |
| 121 | 121 |
| 122 DoubleSize unusedLocationDelta(locationDelta - usedLocationDelta); | 122 DoubleSize unusedLocationDelta(locationDelta - usedLocationDelta); |
| 123 return ScrollResult(true, -unusedLocationDelta.width(), -unusedLocationDelta
.height()); | 123 bool didScrollX = viewScrollResult.didScrollX || unusedLocationDelta.width()
; |
| 124 bool didScrollY = viewScrollResult.didScrollY || unusedLocationDelta.height(
); |
| 125 return ScrollResult(didScrollX, didScrollY, -unusedLocationDelta.width(), -u
nusedLocationDelta.height()); |
| 124 } | 126 } |
| 125 | 127 |
| 126 LayoutRect RootFrameViewport::scrollIntoView(const LayoutRect& rectInContent, co
nst ScrollAlignment& alignX, const ScrollAlignment& alignY) | 128 LayoutRect RootFrameViewport::scrollIntoView(const LayoutRect& rectInContent, co
nst ScrollAlignment& alignX, const ScrollAlignment& alignY) |
| 127 { | 129 { |
| 128 // We want to move the rect into the viewport that excludes the scrollbars s
o we intersect | 130 // We want to move the rect into the viewport that excludes the scrollbars s
o we intersect |
| 129 // the pinch viewport with the scrollbar-excluded frameView content rect. Ho
wever, we don't | 131 // the pinch viewport with the scrollbar-excluded frameView content rect. Ho
wever, we don't |
| 130 // use visibleContentRect directly since it floors the scroll position. Inst
ead, we use | 132 // use visibleContentRect directly since it floors the scroll position. Inst
ead, we use |
| 131 // FrameView::scrollPositionDouble and construct a LayoutRect from that (the
FrameView size | 133 // FrameView::scrollPositionDouble and construct a LayoutRect from that (the
FrameView size |
| 132 // is always integer sized. | 134 // is always integer sized. |
| 133 | 135 |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 269 GraphicsLayer* RootFrameViewport::layerForHorizontalScrollbar() const | 271 GraphicsLayer* RootFrameViewport::layerForHorizontalScrollbar() const |
| 270 { | 272 { |
| 271 return layoutViewport().layerForHorizontalScrollbar(); | 273 return layoutViewport().layerForHorizontalScrollbar(); |
| 272 } | 274 } |
| 273 | 275 |
| 274 GraphicsLayer* RootFrameViewport::layerForVerticalScrollbar() const | 276 GraphicsLayer* RootFrameViewport::layerForVerticalScrollbar() const |
| 275 { | 277 { |
| 276 return layoutViewport().layerForVerticalScrollbar(); | 278 return layoutViewport().layerForVerticalScrollbar(); |
| 277 } | 279 } |
| 278 | 280 |
| 279 bool RootFrameViewport::userScroll(ScrollDirectionPhysical direction, ScrollGran
ularity granularity, float delta) | 281 ScrollResultOneDimensional RootFrameViewport::userScroll(ScrollDirectionPhysical
direction, ScrollGranularity granularity, float delta) |
| 280 { | 282 { |
| 281 updateScrollAnimator(); | 283 updateScrollAnimator(); |
| 282 | 284 |
| 283 ScrollbarOrientation orientation; | 285 ScrollbarOrientation orientation; |
| 284 | 286 |
| 285 if (direction == ScrollUp || direction == ScrollDown) | 287 if (direction == ScrollUp || direction == ScrollDown) |
| 286 orientation = VerticalScrollbar; | 288 orientation = VerticalScrollbar; |
| 287 else | 289 else |
| 288 orientation = HorizontalScrollbar; | 290 orientation = HorizontalScrollbar; |
| 289 | 291 |
| 290 if (layoutViewport().userInputScrollable(orientation) && visualViewport().us
erInputScrollable(orientation)) | 292 if (layoutViewport().userInputScrollable(orientation) && visualViewport().us
erInputScrollable(orientation)) |
| 291 return ScrollableArea::userScroll(direction, granularity, delta); | 293 return ScrollableArea::userScroll(direction, granularity, delta); |
| 292 | 294 |
| 293 if (visualViewport().userInputScrollable(orientation)) | 295 if (visualViewport().userInputScrollable(orientation)) |
| 294 return visualViewport().userScroll(direction, granularity, delta); | 296 return visualViewport().userScroll(direction, granularity, delta); |
| 295 | 297 |
| 296 if (layoutViewport().userInputScrollable(orientation)) | 298 if (layoutViewport().userInputScrollable(orientation)) |
| 297 return layoutViewport().userScroll(direction, granularity, delta); | 299 return layoutViewport().userScroll(direction, granularity, delta); |
| 298 | 300 |
| 299 return false; | 301 return ScrollResultOneDimensional(false, delta); |
| 300 } | 302 } |
| 301 | 303 |
| 302 bool RootFrameViewport::scrollAnimatorEnabled() const | 304 bool RootFrameViewport::scrollAnimatorEnabled() const |
| 303 { | 305 { |
| 304 return layoutViewport().scrollAnimatorEnabled(); | 306 return layoutViewport().scrollAnimatorEnabled(); |
| 305 } | 307 } |
| 306 | 308 |
| 307 HostWindow* RootFrameViewport::hostWindow() const | 309 HostWindow* RootFrameViewport::hostWindow() const |
| 308 { | 310 { |
| 309 return layoutViewport().hostWindow(); | 311 return layoutViewport().hostWindow(); |
| 310 } | 312 } |
| 311 | 313 |
| 312 void RootFrameViewport::serviceScrollAnimations(double monotonicTime) | 314 void RootFrameViewport::serviceScrollAnimations(double monotonicTime) |
| 313 { | 315 { |
| 314 ScrollableArea::serviceScrollAnimations(monotonicTime); | 316 ScrollableArea::serviceScrollAnimations(monotonicTime); |
| 315 layoutViewport().serviceScrollAnimations(monotonicTime); | 317 layoutViewport().serviceScrollAnimations(monotonicTime); |
| 316 } | 318 } |
| 317 | 319 |
| 318 void RootFrameViewport::updateCompositorScrollAnimations() | 320 void RootFrameViewport::updateCompositorScrollAnimations() |
| 319 { | 321 { |
| 320 ScrollableArea::updateCompositorScrollAnimations(); | 322 ScrollableArea::updateCompositorScrollAnimations(); |
| 321 layoutViewport().updateCompositorScrollAnimations(); | 323 layoutViewport().updateCompositorScrollAnimations(); |
| 322 } | 324 } |
| 323 | 325 |
| 324 | 326 |
| 325 } // namespace blink | 327 } // namespace blink |
| OLD | NEW |