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 |