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

Side by Side Diff: third_party/WebKit/Source/core/input/ScrollManager.cpp

Issue 2539283002: Remove PlatformGestureEvent in favour of using WebGestureEvent (Closed)
Patch Set: Rebase and fix comments Created 4 years 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 // 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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698