Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "core/input/ScrollManager.h" | 5 #include "core/input/ScrollManager.h" |
| 6 | 6 |
| 7 #include "core/dom/DOMNodeIds.h" | 7 #include "core/dom/DOMNodeIds.h" |
| 8 #include "core/events/GestureEvent.h" | 8 #include "core/events/GestureEvent.h" |
| 9 #include "core/frame/BrowserControls.h" | 9 #include "core/frame/BrowserControls.h" |
| 10 #include "core/frame/FrameHost.h" | 10 #include "core/frame/FrameHost.h" |
| 11 #include "core/frame/FrameView.h" | 11 #include "core/frame/FrameView.h" |
| 12 #include "core/html/HTMLFrameOwnerElement.h" | 12 #include "core/html/HTMLFrameOwnerElement.h" |
| 13 #include "core/input/EventHandler.h" | 13 #include "core/input/EventHandler.h" |
| 14 #include "core/input/EventHandlingUtil.h" | 14 #include "core/input/EventHandlingUtil.h" |
| 15 #include "core/layout/LayoutBlock.h" | 15 #include "core/layout/LayoutBlock.h" |
| 16 #include "core/layout/LayoutPart.h" | 16 #include "core/layout/LayoutPart.h" |
| 17 #include "core/layout/api/LayoutViewItem.h" | 17 #include "core/layout/api/LayoutViewItem.h" |
| 18 #include "core/loader/DocumentLoader.h" | 18 #include "core/loader/DocumentLoader.h" |
| 19 #include "core/page/AutoscrollController.h" | 19 #include "core/page/AutoscrollController.h" |
| 20 #include "core/page/Page.h" | 20 #include "core/page/Page.h" |
| 21 #include "core/page/scrolling/OverscrollController.h" | 21 #include "core/page/scrolling/OverscrollController.h" |
| 22 #include "core/page/scrolling/RootScrollerController.h" | 22 #include "core/page/scrolling/RootScrollerController.h" |
| 23 #include "core/page/scrolling/ScrollState.h" | 23 #include "core/page/scrolling/ScrollState.h" |
| 24 #include "core/paint/PaintLayer.h" | 24 #include "core/paint/PaintLayer.h" |
| 25 #include "platform/PlatformGestureEvent.h" | |
| 26 #include "wtf/PtrUtil.h" | 25 #include "wtf/PtrUtil.h" |
| 27 #include <memory> | 26 #include <memory> |
| 28 | 27 |
| 29 namespace blink { | 28 namespace blink { |
| 30 | 29 |
| 31 ScrollManager::ScrollManager(LocalFrame& frame) : m_frame(frame) { | 30 ScrollManager::ScrollManager(LocalFrame& frame) : m_frame(frame) { |
| 32 clear(); | 31 clear(); |
| 33 } | 32 } |
| 34 | 33 |
| 35 void ScrollManager::clear() { | 34 void ScrollManager::clear() { |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 191 m_frame->document()->updateStyleAndLayoutIgnorePendingStylesheets(); | 190 m_frame->document()->updateStyleAndLayoutIgnorePendingStylesheets(); |
| 192 | 191 |
| 193 if (m_currentScrollChain.empty()) | 192 if (m_currentScrollChain.empty()) |
| 194 recomputeScrollChain(startNode, m_currentScrollChain); | 193 recomputeScrollChain(startNode, m_currentScrollChain); |
| 195 scrollState.setScrollChain(m_currentScrollChain); | 194 scrollState.setScrollChain(m_currentScrollChain); |
| 196 | 195 |
| 197 scrollState.distributeToScrollChainDescendant(); | 196 scrollState.distributeToScrollChainDescendant(); |
| 198 } | 197 } |
| 199 | 198 |
| 200 WebInputEventResult ScrollManager::handleGestureScrollBegin( | 199 WebInputEventResult ScrollManager::handleGestureScrollBegin( |
| 201 const PlatformGestureEvent& gestureEvent) { | 200 const WebGestureEvent& gestureEvent) { |
| 202 Document* document = m_frame->document(); | 201 Document* document = m_frame->document(); |
| 203 | 202 |
| 204 if (document->layoutViewItem().isNull()) | 203 if (document->layoutViewItem().isNull()) |
| 205 return WebInputEventResult::NotHandled; | 204 return WebInputEventResult::NotHandled; |
| 206 | 205 |
| 207 // If there's no layoutObject on the node, send the event to the nearest | 206 // If there's no layoutObject on the node, send the event to the nearest |
| 208 // ancestor with a layoutObject. Needed for <option> and <optgroup> elements | 207 // ancestor with a layoutObject. Needed for <option> and <optgroup> elements |
| 209 // so we can touch scroll <select>s | 208 // so we can touch scroll <select>s |
| 210 while (m_scrollGestureHandlingNode && | 209 while (m_scrollGestureHandlingNode && |
| 211 !m_scrollGestureHandlingNode->layoutObject()) | 210 !m_scrollGestureHandlingNode->layoutObject()) |
| 212 m_scrollGestureHandlingNode = | 211 m_scrollGestureHandlingNode = |
| 213 m_scrollGestureHandlingNode->parentOrShadowHostNode(); | 212 m_scrollGestureHandlingNode->parentOrShadowHostNode(); |
| 214 | 213 |
| 215 if (!m_scrollGestureHandlingNode) | 214 if (!m_scrollGestureHandlingNode) |
| 216 m_scrollGestureHandlingNode = m_frame->document()->documentElement(); | 215 m_scrollGestureHandlingNode = m_frame->document()->documentElement(); |
| 217 | 216 |
| 218 if (!m_scrollGestureHandlingNode || | 217 if (!m_scrollGestureHandlingNode || |
| 219 !m_scrollGestureHandlingNode->layoutObject()) | 218 !m_scrollGestureHandlingNode->layoutObject()) |
| 220 return WebInputEventResult::NotHandled; | 219 return WebInputEventResult::NotHandled; |
| 221 | 220 |
| 222 passScrollGestureEventToWidget(gestureEvent, | 221 passScrollGestureEventToWidget(gestureEvent, |
| 223 m_scrollGestureHandlingNode->layoutObject()); | 222 m_scrollGestureHandlingNode->layoutObject()); |
| 224 | 223 |
| 225 m_currentScrollChain.clear(); | 224 m_currentScrollChain.clear(); |
| 226 std::unique_ptr<ScrollStateData> scrollStateData = | 225 std::unique_ptr<ScrollStateData> scrollStateData = |
| 227 WTF::makeUnique<ScrollStateData>(); | 226 WTF::makeUnique<ScrollStateData>(); |
| 228 scrollStateData->position_x = gestureEvent.position().x(); | 227 IntPoint position = flooredIntPoint(gestureEvent.positionInRootFrame()); |
| 229 scrollStateData->position_y = gestureEvent.position().y(); | 228 scrollStateData->position_x = position.x(); |
| 229 scrollStateData->position_y = position.y(); | |
| 230 scrollStateData->is_beginning = true; | 230 scrollStateData->is_beginning = true; |
| 231 scrollStateData->from_user_input = true; | 231 scrollStateData->from_user_input = true; |
| 232 scrollStateData->is_direct_manipulation = | 232 scrollStateData->is_direct_manipulation = |
| 233 gestureEvent.source() == PlatformGestureSourceTouchscreen; | 233 gestureEvent.sourceDevice == WebGestureDeviceTouchscreen; |
| 234 scrollStateData->delta_consumed_for_scroll_sequence = | 234 scrollStateData->delta_consumed_for_scroll_sequence = |
| 235 m_deltaConsumedForScrollSequence; | 235 m_deltaConsumedForScrollSequence; |
| 236 ScrollState* scrollState = ScrollState::create(std::move(scrollStateData)); | 236 ScrollState* scrollState = ScrollState::create(std::move(scrollStateData)); |
| 237 customizedScroll(*m_scrollGestureHandlingNode.get(), *scrollState); | 237 customizedScroll(*m_scrollGestureHandlingNode.get(), *scrollState); |
| 238 return WebInputEventResult::HandledSystem; | 238 return WebInputEventResult::HandledSystem; |
| 239 } | 239 } |
| 240 | 240 |
| 241 WebInputEventResult ScrollManager::handleGestureScrollUpdate( | 241 WebInputEventResult ScrollManager::handleGestureScrollUpdate( |
| 242 const PlatformGestureEvent& gestureEvent) { | 242 const WebGestureEvent& gestureEvent) { |
| 243 DCHECK_EQ(gestureEvent.type(), PlatformEvent::GestureScrollUpdate); | 243 DCHECK_EQ(gestureEvent.type, WebInputEvent::GestureScrollUpdate); |
| 244 | 244 |
| 245 Node* node = m_scrollGestureHandlingNode.get(); | 245 Node* node = m_scrollGestureHandlingNode.get(); |
| 246 if (!node || !node->layoutObject()) | 246 if (!node || !node->layoutObject()) |
| 247 return WebInputEventResult::NotHandled; | 247 return WebInputEventResult::NotHandled; |
| 248 | 248 |
| 249 // Negate the deltas since the gesture event stores finger movement and | 249 // Negate the deltas since the gesture event stores finger movement and |
| 250 // scrolling occurs in the direction opposite the finger's movement | 250 // scrolling occurs in the direction opposite the finger's movement |
| 251 // direction. e.g. Finger moving up has negative event delta but causes the | 251 // direction. e.g. Finger moving up has negative event delta but causes the |
| 252 // page to scroll down causing positive scroll delta. | 252 // page to scroll down causing positive scroll delta. |
| 253 FloatSize delta(-gestureEvent.deltaX(), -gestureEvent.deltaY()); | 253 FloatSize delta(-gestureEvent.deltaXInRootFrame(), |
| 254 -gestureEvent.deltaYInRootFrame()); | |
| 254 FloatSize velocity(-gestureEvent.velocityX(), -gestureEvent.velocityY()); | 255 FloatSize velocity(-gestureEvent.velocityX(), -gestureEvent.velocityY()); |
| 255 FloatPoint position(gestureEvent.position()); | 256 FloatPoint position(gestureEvent.positionInRootFrame()); |
| 256 | 257 |
| 257 if (delta.isZero()) | 258 if (delta.isZero()) |
| 258 return WebInputEventResult::NotHandled; | 259 return WebInputEventResult::NotHandled; |
| 259 | 260 |
| 260 LayoutObject* layoutObject = node->layoutObject(); | 261 LayoutObject* layoutObject = node->layoutObject(); |
| 261 | 262 |
| 262 // Try to send the event to the correct view. | 263 // Try to send the event to the correct view. |
| 263 WebInputEventResult result = | 264 WebInputEventResult result = |
| 264 passScrollGestureEventToWidget(gestureEvent, layoutObject); | 265 passScrollGestureEventToWidget(gestureEvent, layoutObject); |
| 265 if (result != WebInputEventResult::NotHandled) { | 266 if (result != WebInputEventResult::NotHandled) { |
| 266 // FIXME: we should allow simultaneous scrolling of nested | 267 // FIXME: we should allow simultaneous scrolling of nested |
| 267 // iframes along perpendicular axes. See crbug.com/466991. | 268 // iframes along perpendicular axes. See crbug.com/466991. |
| 268 m_deltaConsumedForScrollSequence = true; | 269 m_deltaConsumedForScrollSequence = true; |
| 269 return result; | 270 return result; |
| 270 } | 271 } |
| 271 | 272 |
| 272 std::unique_ptr<ScrollStateData> scrollStateData = | 273 std::unique_ptr<ScrollStateData> scrollStateData = |
| 273 WTF::makeUnique<ScrollStateData>(); | 274 WTF::makeUnique<ScrollStateData>(); |
| 274 scrollStateData->delta_x = delta.width(); | 275 scrollStateData->delta_x = delta.width(); |
| 275 scrollStateData->delta_y = delta.height(); | 276 scrollStateData->delta_y = delta.height(); |
| 276 scrollStateData->delta_granularity = | 277 scrollStateData->delta_granularity = static_cast<double>( |
| 277 static_cast<double>(gestureEvent.deltaUnits()); | 278 toPlatformScrollGranularity(gestureEvent.deltaUnits())); |
| 278 scrollStateData->velocity_x = velocity.width(); | 279 scrollStateData->velocity_x = velocity.width(); |
| 279 scrollStateData->velocity_y = velocity.height(); | 280 scrollStateData->velocity_y = velocity.height(); |
| 280 scrollStateData->position_x = position.x(); | 281 scrollStateData->position_x = position.x(); |
| 281 scrollStateData->position_y = position.y(); | 282 scrollStateData->position_y = position.y(); |
| 282 scrollStateData->should_propagate = !gestureEvent.preventPropagation(); | 283 scrollStateData->should_propagate = !gestureEvent.preventPropagation(); |
| 283 scrollStateData->is_in_inertial_phase = | 284 scrollStateData->is_in_inertial_phase = |
| 284 gestureEvent.inertialPhase() == ScrollInertialPhaseMomentum; | 285 gestureEvent.inertialPhase() == WebGestureEvent::MomentumPhase; |
| 285 scrollStateData->is_direct_manipulation = | 286 scrollStateData->is_direct_manipulation = |
| 286 gestureEvent.source() == PlatformGestureSourceTouchscreen; | 287 gestureEvent.sourceDevice == WebGestureDeviceTouchscreen; |
| 287 scrollStateData->from_user_input = true; | 288 scrollStateData->from_user_input = true; |
| 288 scrollStateData->delta_consumed_for_scroll_sequence = | 289 scrollStateData->delta_consumed_for_scroll_sequence = |
| 289 m_deltaConsumedForScrollSequence; | 290 m_deltaConsumedForScrollSequence; |
| 290 ScrollState* scrollState = ScrollState::create(std::move(scrollStateData)); | 291 ScrollState* scrollState = ScrollState::create(std::move(scrollStateData)); |
| 291 if (m_previousGestureScrolledElement) { | 292 if (m_previousGestureScrolledElement) { |
| 292 // The ScrollState needs to know what the current | 293 // The ScrollState needs to know what the current |
| 293 // native scrolling element is, so that for an | 294 // native scrolling element is, so that for an |
| 294 // inertial scroll that shouldn't propagate, only the | 295 // inertial scroll that shouldn't propagate, only the |
| 295 // currently scrolling element responds. | 296 // currently scrolling element responds. |
| 296 scrollState->setCurrentNativeScrollingElement( | 297 scrollState->setCurrentNativeScrollingElement( |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 313 | 314 |
| 314 if (didScrollX || didScrollY) { | 315 if (didScrollX || didScrollY) { |
| 315 setFrameWasScrolledByUser(); | 316 setFrameWasScrolledByUser(); |
| 316 return WebInputEventResult::HandledSystem; | 317 return WebInputEventResult::HandledSystem; |
| 317 } | 318 } |
| 318 | 319 |
| 319 return WebInputEventResult::NotHandled; | 320 return WebInputEventResult::NotHandled; |
| 320 } | 321 } |
| 321 | 322 |
| 322 WebInputEventResult ScrollManager::handleGestureScrollEnd( | 323 WebInputEventResult ScrollManager::handleGestureScrollEnd( |
| 323 const PlatformGestureEvent& gestureEvent) { | 324 const WebGestureEvent& gestureEvent) { |
| 324 Node* node = m_scrollGestureHandlingNode; | 325 Node* node = m_scrollGestureHandlingNode; |
| 325 | 326 |
| 326 if (node && node->layoutObject()) { | 327 if (node && node->layoutObject()) { |
| 327 passScrollGestureEventToWidget(gestureEvent, node->layoutObject()); | 328 passScrollGestureEventToWidget(gestureEvent, node->layoutObject()); |
| 328 std::unique_ptr<ScrollStateData> scrollStateData = | 329 std::unique_ptr<ScrollStateData> scrollStateData = |
| 329 WTF::makeUnique<ScrollStateData>(); | 330 WTF::makeUnique<ScrollStateData>(); |
| 330 scrollStateData->is_ending = true; | 331 scrollStateData->is_ending = true; |
| 331 scrollStateData->is_in_inertial_phase = | 332 scrollStateData->is_in_inertial_phase = |
| 332 gestureEvent.inertialPhase() == ScrollInertialPhaseMomentum; | 333 gestureEvent.inertialPhase() == WebGestureEvent::MomentumPhase; |
| 333 scrollStateData->from_user_input = true; | 334 scrollStateData->from_user_input = true; |
| 334 scrollStateData->is_direct_manipulation = | 335 scrollStateData->is_direct_manipulation = |
| 335 gestureEvent.source() == PlatformGestureSourceTouchscreen; | 336 gestureEvent.sourceDevice == WebGestureDeviceTouchscreen; |
| 336 scrollStateData->delta_consumed_for_scroll_sequence = | 337 scrollStateData->delta_consumed_for_scroll_sequence = |
| 337 m_deltaConsumedForScrollSequence; | 338 m_deltaConsumedForScrollSequence; |
| 338 ScrollState* scrollState = ScrollState::create(std::move(scrollStateData)); | 339 ScrollState* scrollState = ScrollState::create(std::move(scrollStateData)); |
| 339 customizedScroll(*node, *scrollState); | 340 customizedScroll(*node, *scrollState); |
| 340 } | 341 } |
| 341 | 342 |
| 342 clearGestureScrollState(); | 343 clearGestureScrollState(); |
| 343 return WebInputEventResult::NotHandled; | 344 return WebInputEventResult::NotHandled; |
| 344 } | 345 } |
| 345 | 346 |
| 346 FrameHost* ScrollManager::frameHost() const { | 347 FrameHost* ScrollManager::frameHost() const { |
| 347 if (!m_frame->page()) | 348 if (!m_frame->page()) |
| 348 return nullptr; | 349 return nullptr; |
| 349 | 350 |
| 350 return &m_frame->page()->frameHost(); | 351 return &m_frame->page()->frameHost(); |
| 351 } | 352 } |
| 352 | 353 |
| 353 WebInputEventResult ScrollManager::passScrollGestureEventToWidget( | 354 WebInputEventResult ScrollManager::passScrollGestureEventToWidget( |
| 354 const PlatformGestureEvent& gestureEvent, | 355 const WebGestureEvent& gestureEvent, |
| 355 LayoutObject* layoutObject) { | 356 LayoutObject* layoutObject) { |
| 356 DCHECK(gestureEvent.isScrollEvent()); | 357 DCHECK(gestureEvent.isScrollEvent()); |
| 357 | 358 |
| 358 if (!m_lastGestureScrollOverWidget || !layoutObject || | 359 if (!m_lastGestureScrollOverWidget || !layoutObject || |
| 359 !layoutObject->isLayoutPart()) | 360 !layoutObject->isLayoutPart()) |
| 360 return WebInputEventResult::NotHandled; | 361 return WebInputEventResult::NotHandled; |
| 361 | 362 |
| 362 Widget* widget = toLayoutPart(layoutObject)->widget(); | 363 Widget* widget = toLayoutPart(layoutObject)->widget(); |
| 363 | 364 |
| 364 if (!widget || !widget->isFrameView()) | 365 if (!widget || !widget->isFrameView()) |
| 365 return WebInputEventResult::NotHandled; | 366 return WebInputEventResult::NotHandled; |
| 366 | 367 |
| 367 return toFrameView(widget)->frame().eventHandler().handleGestureScrollEvent( | 368 return toFrameView(widget)->frame().eventHandler().handleGestureScrollEvent( |
| 368 gestureEvent); | 369 gestureEvent); |
| 369 } | 370 } |
| 370 | 371 |
| 371 bool ScrollManager::isViewportScrollingElement(const Element& element) const { | 372 bool ScrollManager::isViewportScrollingElement(const Element& element) const { |
| 372 // The root scroller is the one Element on the page designated to perform | 373 // The root scroller is the one Element on the page designated to perform |
| 373 // "viewport actions" like browser controls movement and overscroll glow. | 374 // "viewport actions" like browser controls movement and overscroll glow. |
| 374 if (!m_frame->document()) | 375 if (!m_frame->document()) |
| 375 return false; | 376 return false; |
| 376 | 377 |
| 377 return m_frame->document()->rootScrollerController().scrollsViewport(element); | 378 return m_frame->document()->rootScrollerController().scrollsViewport(element); |
| 378 } | 379 } |
| 379 | 380 |
| 380 WebInputEventResult ScrollManager::handleGestureScrollEvent( | 381 WebInputEventResult ScrollManager::handleGestureScrollEvent( |
| 381 const PlatformGestureEvent& gestureEvent) { | 382 const WebGestureEvent& gestureEvent) { |
| 382 if (!m_frame->view()) | 383 if (!m_frame->view()) |
| 383 return WebInputEventResult::NotHandled; | 384 return WebInputEventResult::NotHandled; |
| 384 | 385 |
| 385 Node* eventTarget = nullptr; | 386 Node* eventTarget = nullptr; |
| 386 Scrollbar* scrollbar = nullptr; | 387 Scrollbar* scrollbar = nullptr; |
| 387 if (gestureEvent.type() != PlatformEvent::GestureScrollBegin) { | 388 if (gestureEvent.type != WebInputEvent::GestureScrollBegin) { |
| 388 scrollbar = m_scrollbarHandlingScrollGesture.get(); | 389 scrollbar = m_scrollbarHandlingScrollGesture.get(); |
| 389 eventTarget = m_scrollGestureHandlingNode.get(); | 390 eventTarget = m_scrollGestureHandlingNode.get(); |
| 390 } | 391 } |
| 391 | 392 |
| 392 if (!eventTarget) { | 393 if (!eventTarget) { |
| 393 Document* document = m_frame->document(); | 394 Document* document = m_frame->document(); |
| 394 if (document->layoutViewItem().isNull()) | 395 if (document->layoutViewItem().isNull()) |
| 395 return WebInputEventResult::NotHandled; | 396 return WebInputEventResult::NotHandled; |
| 396 | 397 |
| 397 FrameView* view = m_frame->view(); | 398 FrameView* view = m_frame->view(); |
| 398 LayoutPoint viewPoint = view->rootFrameToContents(gestureEvent.position()); | 399 LayoutPoint viewPoint = view->rootFrameToContents( |
| 400 flooredIntPoint(gestureEvent.positionInRootFrame())); | |
| 399 HitTestRequest request(HitTestRequest::ReadOnly); | 401 HitTestRequest request(HitTestRequest::ReadOnly); |
| 400 HitTestResult result(request, viewPoint); | 402 HitTestResult result(request, viewPoint); |
| 401 document->layoutViewItem().hitTest(result); | 403 document->layoutViewItem().hitTest(result); |
| 402 | 404 |
| 403 eventTarget = result.innerNode(); | 405 eventTarget = result.innerNode(); |
| 404 | 406 |
| 405 m_lastGestureScrollOverWidget = result.isOverWidget(); | 407 m_lastGestureScrollOverWidget = result.isOverWidget(); |
| 406 m_scrollGestureHandlingNode = eventTarget; | 408 m_scrollGestureHandlingNode = eventTarget; |
| 407 m_previousGestureScrolledElement = nullptr; | 409 m_previousGestureScrolledElement = nullptr; |
| 408 m_deltaConsumedForScrollSequence = false; | 410 m_deltaConsumedForScrollSequence = false; |
| (...skipping 22 matching lines...) Expand all Loading... | |
| 431 DispatchEventResult gestureDomEventResult = | 433 DispatchEventResult gestureDomEventResult = |
| 432 eventTarget->dispatchEvent(gestureDomEvent); | 434 eventTarget->dispatchEvent(gestureDomEvent); |
| 433 if (gestureDomEventResult != DispatchEventResult::NotCanceled) { | 435 if (gestureDomEventResult != DispatchEventResult::NotCanceled) { |
| 434 DCHECK(gestureDomEventResult != | 436 DCHECK(gestureDomEventResult != |
| 435 DispatchEventResult::CanceledByEventHandler); | 437 DispatchEventResult::CanceledByEventHandler); |
| 436 return EventHandlingUtil::toWebInputEventResult(gestureDomEventResult); | 438 return EventHandlingUtil::toWebInputEventResult(gestureDomEventResult); |
| 437 } | 439 } |
| 438 } | 440 } |
| 439 } | 441 } |
| 440 | 442 |
| 441 switch (gestureEvent.type()) { | 443 switch (gestureEvent.type) { |
| 442 case PlatformEvent::GestureScrollBegin: | 444 case WebInputEvent::GestureScrollBegin: |
| 443 return handleGestureScrollBegin(gestureEvent); | 445 return handleGestureScrollBegin(gestureEvent); |
| 444 case PlatformEvent::GestureScrollUpdate: | 446 case WebInputEvent::GestureScrollUpdate: |
| 445 return handleGestureScrollUpdate(gestureEvent); | 447 return handleGestureScrollUpdate(gestureEvent); |
| 446 case PlatformEvent::GestureScrollEnd: | 448 case WebInputEvent::GestureScrollEnd: |
| 447 return handleGestureScrollEnd(gestureEvent); | 449 return handleGestureScrollEnd(gestureEvent); |
| 448 case PlatformEvent::GestureFlingStart: | 450 case WebInputEvent::GestureFlingStart: |
| 449 case PlatformEvent::GesturePinchBegin: | 451 case WebInputEvent::GesturePinchBegin: |
| 450 case PlatformEvent::GesturePinchEnd: | 452 case WebInputEvent::GesturePinchEnd: |
| 451 case PlatformEvent::GesturePinchUpdate: | 453 case WebInputEvent::GesturePinchUpdate: |
| 452 return WebInputEventResult::NotHandled; | 454 return WebInputEventResult::NotHandled; |
| 453 default: | 455 default: |
| 454 NOTREACHED(); | 456 NOTREACHED(); |
| 455 return WebInputEventResult::NotHandled; | 457 return WebInputEventResult::NotHandled; |
| 456 } | 458 } |
| 457 } | 459 } |
| 458 | 460 |
| 459 bool ScrollManager::isScrollbarHandlingGestures() const { | 461 bool ScrollManager::isScrollbarHandlingGestures() const { |
| 460 return m_scrollbarHandlingScrollGesture.get(); | 462 return m_scrollbarHandlingScrollGesture.get(); |
| 461 } | 463 } |
| 462 | 464 |
| 463 bool ScrollManager::handleScrollGestureOnResizer( | 465 bool ScrollManager::handleScrollGestureOnResizer( |
| 464 Node* eventTarget, | 466 Node* eventTarget, |
| 465 const PlatformGestureEvent& gestureEvent) { | 467 const WebGestureEvent& gestureEvent) { |
| 466 if (gestureEvent.source() != PlatformGestureSourceTouchscreen) | 468 if (gestureEvent.sourceDevice != WebGestureDeviceTouchscreen) |
| 467 return false; | 469 return false; |
| 468 | 470 |
| 469 if (gestureEvent.type() == PlatformEvent::GestureScrollBegin) { | 471 if (gestureEvent.type == WebInputEvent::GestureScrollBegin) { |
| 470 PaintLayer* layer = eventTarget->layoutObject() | 472 PaintLayer* layer = eventTarget->layoutObject() |
| 471 ? eventTarget->layoutObject()->enclosingLayer() | 473 ? eventTarget->layoutObject()->enclosingLayer() |
| 472 : nullptr; | 474 : nullptr; |
| 473 IntPoint p = m_frame->view()->rootFrameToContents(gestureEvent.position()); | 475 IntPoint p = m_frame->view()->rootFrameToContents( |
| 476 flooredIntPoint(gestureEvent.positionInRootFrame())); | |
| 474 if (layer && layer->getScrollableArea() && | 477 if (layer && layer->getScrollableArea() && |
| 475 layer->getScrollableArea()->isPointInResizeControl(p, | 478 layer->getScrollableArea()->isPointInResizeControl(p, |
| 476 ResizerForTouch)) { | 479 ResizerForTouch)) { |
| 477 m_resizeScrollableArea = layer->getScrollableArea(); | 480 m_resizeScrollableArea = layer->getScrollableArea(); |
| 478 m_resizeScrollableArea->setInResizeMode(true); | 481 m_resizeScrollableArea->setInResizeMode(true); |
| 479 m_offsetFromResizeCorner = | 482 m_offsetFromResizeCorner = |
| 480 LayoutSize(m_resizeScrollableArea->offsetFromResizeCorner(p)); | 483 LayoutSize(m_resizeScrollableArea->offsetFromResizeCorner(p)); |
| 481 return true; | 484 return true; |
| 482 } | 485 } |
| 483 } else if (gestureEvent.type() == PlatformEvent::GestureScrollUpdate) { | 486 } else if (gestureEvent.type == WebInputEvent::GestureScrollUpdate) { |
| 484 if (m_resizeScrollableArea && m_resizeScrollableArea->inResizeMode()) { | 487 if (m_resizeScrollableArea && m_resizeScrollableArea->inResizeMode()) { |
| 485 m_resizeScrollableArea->resize(gestureEvent, m_offsetFromResizeCorner); | 488 IntPoint pos = roundedIntPoint(gestureEvent.positionInRootFrame()); |
| 489 pos.move(gestureEvent.deltaXInRootFrame(), | |
| 490 gestureEvent.deltaYInRootFrame()); | |
| 491 m_resizeScrollableArea->resize(pos, m_offsetFromResizeCorner); | |
| 486 return true; | 492 return true; |
| 487 } | 493 } |
| 488 } else if (gestureEvent.type() == PlatformEvent::GestureScrollEnd) { | 494 } else if (gestureEvent.type == WebInputEvent::GestureScrollEnd) { |
| 489 if (m_resizeScrollableArea && m_resizeScrollableArea->inResizeMode()) { | 495 if (m_resizeScrollableArea && m_resizeScrollableArea->inResizeMode()) { |
| 490 m_resizeScrollableArea->setInResizeMode(false); | 496 m_resizeScrollableArea->setInResizeMode(false); |
| 491 m_resizeScrollableArea = nullptr; | 497 m_resizeScrollableArea = nullptr; |
| 492 return false; | 498 return false; |
| 493 } | 499 } |
| 494 } | 500 } |
| 495 | 501 |
| 496 return false; | 502 return false; |
| 497 } | 503 } |
| 498 | 504 |
| 499 bool ScrollManager::inResizeMode() const { | 505 bool ScrollManager::inResizeMode() const { |
| 500 return m_resizeScrollableArea && m_resizeScrollableArea->inResizeMode(); | 506 return m_resizeScrollableArea && m_resizeScrollableArea->inResizeMode(); |
| 501 } | 507 } |
| 502 | 508 |
| 503 void ScrollManager::resize(const PlatformEvent& evt) { | 509 void ScrollManager::resize(const PlatformMouseEvent& evt) { |
| 504 m_resizeScrollableArea->resize(evt, m_offsetFromResizeCorner); | 510 if (evt.type() == PlatformEvent::MouseMoved) { |
| 511 if ((evt.getModifiers() & | |
| 512 (PlatformEvent::LeftButtonDown | PlatformEvent::MiddleButtonDown | | |
| 513 PlatformEvent::RightButtonDown)) == 0) | |
|
majidvp
2016/12/15 17:40:45
This line is replacing
"if (!document.frame()->ev
dtapuska
2016/12/15 21:29:38
Done.
| |
| 514 return; | |
| 515 m_resizeScrollableArea->resize(evt.position(), m_offsetFromResizeCorner); | |
| 516 } | |
| 505 } | 517 } |
| 506 | 518 |
| 507 void ScrollManager::clearResizeScrollableArea(bool shouldNotBeNull) { | 519 void ScrollManager::clearResizeScrollableArea(bool shouldNotBeNull) { |
| 508 if (shouldNotBeNull) | 520 if (shouldNotBeNull) |
| 509 DCHECK(m_resizeScrollableArea); | 521 DCHECK(m_resizeScrollableArea); |
| 510 | 522 |
| 511 if (m_resizeScrollableArea) | 523 if (m_resizeScrollableArea) |
| 512 m_resizeScrollableArea->setInResizeMode(false); | 524 m_resizeScrollableArea->setInResizeMode(false); |
| 513 m_resizeScrollableArea = nullptr; | 525 m_resizeScrollableArea = nullptr; |
| 514 } | 526 } |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 529 if (scrollbar->gestureEvent(targetedEvent.event(), &shouldUpdateCapture)) { | 541 if (scrollbar->gestureEvent(targetedEvent.event(), &shouldUpdateCapture)) { |
| 530 if (shouldUpdateCapture) | 542 if (shouldUpdateCapture) |
| 531 m_scrollbarHandlingScrollGesture = scrollbar; | 543 m_scrollbarHandlingScrollGesture = scrollbar; |
| 532 return true; | 544 return true; |
| 533 } | 545 } |
| 534 } | 546 } |
| 535 return false; | 547 return false; |
| 536 } | 548 } |
| 537 | 549 |
| 538 } // namespace blink | 550 } // namespace blink |
| OLD | NEW |