| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2009 Google Inc. All rights reserved. | 2 * Copyright (C) 2009 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 58 scale = rootView->inputEventsScaleFactor(); | 58 scale = rootView->inputEventsScaleFactor(); |
| 59 } | 59 } |
| 60 return delta / scale; | 60 return delta / scale; |
| 61 } | 61 } |
| 62 | 62 |
| 63 FloatSize scaleSizeToWindow(const Widget* widget, FloatSize size) { | 63 FloatSize scaleSizeToWindow(const Widget* widget, FloatSize size) { |
| 64 return FloatSize(scaleDeltaToWindow(widget, size.width()), | 64 return FloatSize(scaleDeltaToWindow(widget, size.width()), |
| 65 scaleDeltaToWindow(widget, size.height())); | 65 scaleDeltaToWindow(widget, size.height())); |
| 66 } | 66 } |
| 67 | 67 |
| 68 // This method converts from the renderer's coordinate space into Blink's root f
rame coordinate space. | 68 // This method converts from the renderer's coordinate space into Blink's root |
| 69 // It's somewhat unique in that it takes into account DevTools emulation, which
applies a scale and offset | 69 // frame coordinate space. It's somewhat unique in that it takes into account |
| 70 // in the root layer (see updateRootLayerTransform in WebViewImpl) as well as th
e overscroll effect on OSX. | 70 // DevTools emulation, which applies a scale and offset in the root layer (see |
| 71 // This is in addition to the visual viewport "pinch-zoom" transformation and is
one of the few cases where | 71 // updateRootLayerTransform in WebViewImpl) as well as the overscroll effect on |
| 72 // the visual viewport is not equal to the renderer's coordinate-space. | 72 // OSX. This is in addition to the visual viewport "pinch-zoom" transformation |
| 73 // and is one of the few cases where the visual viewport is not equal to the |
| 74 // renderer's coordinate-space. |
| 73 FloatPoint convertHitPointToRootFrame(const Widget* widget, | 75 FloatPoint convertHitPointToRootFrame(const Widget* widget, |
| 74 FloatPoint pointInRendererViewport) { | 76 FloatPoint pointInRendererViewport) { |
| 75 float scale = 1; | 77 float scale = 1; |
| 76 IntSize offset; | 78 IntSize offset; |
| 77 IntPoint visualViewport; | 79 IntPoint visualViewport; |
| 78 FloatSize overscrollOffset; | 80 FloatSize overscrollOffset; |
| 79 if (widget) { | 81 if (widget) { |
| 80 FrameView* rootView = toFrameView(widget->root()); | 82 FrameView* rootView = toFrameView(widget->root()); |
| 81 if (rootView) { | 83 if (rootView) { |
| 82 scale = rootView->inputEventsScaleFactor(); | 84 scale = rootView->inputEventsScaleFactor(); |
| (...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 255 | 257 |
| 256 m_hasPreciseScrollingDeltas = e.hasPreciseScrollingDeltas; | 258 m_hasPreciseScrollingDeltas = e.hasPreciseScrollingDeltas; |
| 257 m_resendingPluginId = e.resendingPluginId; | 259 m_resendingPluginId = e.resendingPluginId; |
| 258 m_railsMode = static_cast<PlatformEvent::RailsMode>(e.railsMode); | 260 m_railsMode = static_cast<PlatformEvent::RailsMode>(e.railsMode); |
| 259 #if OS(MACOSX) | 261 #if OS(MACOSX) |
| 260 m_phase = static_cast<PlatformWheelEventPhase>(e.phase); | 262 m_phase = static_cast<PlatformWheelEventPhase>(e.phase); |
| 261 m_momentumPhase = static_cast<PlatformWheelEventPhase>(e.momentumPhase); | 263 m_momentumPhase = static_cast<PlatformWheelEventPhase>(e.momentumPhase); |
| 262 #endif | 264 #endif |
| 263 } | 265 } |
| 264 | 266 |
| 265 // PlatformGestureEventBuilder -------------------------------------------------
- | 267 // PlatformGestureEventBuilder ----------------------------------------------- |
| 266 | 268 |
| 267 PlatformGestureEventBuilder::PlatformGestureEventBuilder( | 269 PlatformGestureEventBuilder::PlatformGestureEventBuilder( |
| 268 Widget* widget, | 270 Widget* widget, |
| 269 const WebGestureEvent& e) { | 271 const WebGestureEvent& e) { |
| 270 switch (e.type) { | 272 switch (e.type) { |
| 271 case WebInputEvent::GestureScrollBegin: | 273 case WebInputEvent::GestureScrollBegin: |
| 272 m_type = PlatformEvent::GestureScrollBegin; | 274 m_type = PlatformEvent::GestureScrollBegin; |
| 273 m_data.m_scroll.m_resendingPluginId = e.resendingPluginId; | 275 m_data.m_scroll.m_resendingPluginId = e.resendingPluginId; |
| 274 m_data.m_scroll.m_deltaX = e.data.scrollBegin.deltaXHint; | 276 m_data.m_scroll.m_deltaX = e.data.scrollBegin.deltaXHint; |
| 275 m_data.m_scroll.m_deltaY = e.data.scrollBegin.deltaYHint; | 277 m_data.m_scroll.m_deltaY = e.data.scrollBegin.deltaYHint; |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 327 break; | 329 break; |
| 328 case WebInputEvent::GestureShowPress: | 330 case WebInputEvent::GestureShowPress: |
| 329 m_type = PlatformEvent::GestureShowPress; | 331 m_type = PlatformEvent::GestureShowPress; |
| 330 m_area = expandedIntSize(scaleSizeToWindow( | 332 m_area = expandedIntSize(scaleSizeToWindow( |
| 331 widget, FloatSize(e.data.showPress.width, e.data.showPress.height))); | 333 widget, FloatSize(e.data.showPress.width, e.data.showPress.height))); |
| 332 break; | 334 break; |
| 333 case WebInputEvent::GestureTapCancel: | 335 case WebInputEvent::GestureTapCancel: |
| 334 m_type = PlatformEvent::GestureTapDownCancel; | 336 m_type = PlatformEvent::GestureTapDownCancel; |
| 335 break; | 337 break; |
| 336 case WebInputEvent::GestureDoubleTap: | 338 case WebInputEvent::GestureDoubleTap: |
| 337 // DoubleTap gesture is now handled as PlatformEvent::GestureTap with tap_
count = 2. So no | 339 // DoubleTap gesture is now handled as PlatformEvent::GestureTap with |
| 338 // need to convert to a Platfrom DoubleTap gesture. But in WebViewImpl::ha
ndleGestureEvent | 340 // tap_count = 2. So no need to convert to a Platfrom DoubleTap gesture. |
| 339 // all WebGestureEvent are converted to PlatformGestureEvent, for complete
ness and not reach | 341 // But in WebViewImpl::handleGestureEvent all WebGestureEvent are |
| 340 // the NOTREACHED() at the end, convert the DoubleTap to a NoType. | 342 // converted to PlatformGestureEvent, for completeness and not reach the |
| 343 // NOTREACHED() at the end, convert the DoubleTap to a NoType. |
| 341 m_type = PlatformEvent::NoType; | 344 m_type = PlatformEvent::NoType; |
| 342 break; | 345 break; |
| 343 case WebInputEvent::GestureTwoFingerTap: | 346 case WebInputEvent::GestureTwoFingerTap: |
| 344 m_type = PlatformEvent::GestureTwoFingerTap; | 347 m_type = PlatformEvent::GestureTwoFingerTap; |
| 345 m_area = expandedIntSize(scaleSizeToWindow( | 348 m_area = expandedIntSize(scaleSizeToWindow( |
| 346 widget, FloatSize(e.data.twoFingerTap.firstFingerWidth, | 349 widget, FloatSize(e.data.twoFingerTap.firstFingerWidth, |
| 347 e.data.twoFingerTap.firstFingerHeight))); | 350 e.data.twoFingerTap.firstFingerHeight))); |
| 348 break; | 351 break; |
| 349 case WebInputEvent::GestureLongPress: | 352 case WebInputEvent::GestureLongPress: |
| 350 m_type = PlatformEvent::GestureLongPress; | 353 m_type = PlatformEvent::GestureLongPress; |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 489 // RemoteFrameViews. | 492 // RemoteFrameViews. |
| 490 static void updateWebMouseEventFromCoreMouseEvent( | 493 static void updateWebMouseEventFromCoreMouseEvent( |
| 491 const MouseRelatedEvent& event, | 494 const MouseRelatedEvent& event, |
| 492 const Widget* widget, | 495 const Widget* widget, |
| 493 const LayoutItem layoutItem, | 496 const LayoutItem layoutItem, |
| 494 WebMouseEvent& webEvent) { | 497 WebMouseEvent& webEvent) { |
| 495 webEvent.timeStampSeconds = event.platformTimeStamp(); | 498 webEvent.timeStampSeconds = event.platformTimeStamp(); |
| 496 webEvent.modifiers = event.modifiers(); | 499 webEvent.modifiers = event.modifiers(); |
| 497 | 500 |
| 498 FrameView* view = widget ? toFrameView(widget->parent()) : 0; | 501 FrameView* view = widget ? toFrameView(widget->parent()) : 0; |
| 499 // TODO(bokan): If view == nullptr, pointInRootFrame will really be pointInRoo
tContent. | 502 // TODO(bokan): If view == nullptr, pointInRootFrame will really be |
| 503 // pointInRootContent. |
| 500 IntPoint pointInRootFrame = IntPoint(event.absoluteLocation().x().toInt(), | 504 IntPoint pointInRootFrame = IntPoint(event.absoluteLocation().x().toInt(), |
| 501 event.absoluteLocation().y().toInt()); | 505 event.absoluteLocation().y().toInt()); |
| 502 if (view) | 506 if (view) |
| 503 pointInRootFrame = view->contentsToRootFrame(pointInRootFrame); | 507 pointInRootFrame = view->contentsToRootFrame(pointInRootFrame); |
| 504 webEvent.globalX = event.screenX(); | 508 webEvent.globalX = event.screenX(); |
| 505 webEvent.globalY = event.screenY(); | 509 webEvent.globalY = event.screenY(); |
| 506 webEvent.windowX = pointInRootFrame.x(); | 510 webEvent.windowX = pointInRootFrame.x(); |
| 507 webEvent.windowY = pointInRootFrame.y(); | 511 webEvent.windowY = pointInRootFrame.y(); |
| 508 IntPoint localPoint = convertAbsoluteLocationForLayoutObject( | 512 IntPoint localPoint = convertAbsoluteLocationForLayoutObject( |
| 509 event.absoluteLocation(), layoutItem); | 513 event.absoluteLocation(), layoutItem); |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 559 } | 563 } |
| 560 movementX = event.movementX(); | 564 movementX = event.movementX(); |
| 561 movementY = event.movementY(); | 565 movementY = event.movementY(); |
| 562 clickCount = event.detail(); | 566 clickCount = event.detail(); |
| 563 | 567 |
| 564 pointerType = WebPointerProperties::PointerType::Mouse; | 568 pointerType = WebPointerProperties::PointerType::Mouse; |
| 565 if (event.mouseEvent()) | 569 if (event.mouseEvent()) |
| 566 pointerType = event.mouseEvent()->pointerProperties().pointerType; | 570 pointerType = event.mouseEvent()->pointerProperties().pointerType; |
| 567 } | 571 } |
| 568 | 572 |
| 569 // Generate a synthetic WebMouseEvent given a TouchEvent (eg. for emulating a mo
use | 573 // Generate a synthetic WebMouseEvent given a TouchEvent (eg. for emulating a |
| 570 // with touch input for plugins that don't support touch input). | 574 // mouse with touch input for plugins that don't support touch input). |
| 571 WebMouseEventBuilder::WebMouseEventBuilder(const Widget* widget, | 575 WebMouseEventBuilder::WebMouseEventBuilder(const Widget* widget, |
| 572 const LayoutItem layoutItem, | 576 const LayoutItem layoutItem, |
| 573 const TouchEvent& event) { | 577 const TouchEvent& event) { |
| 574 if (!event.touches()) | 578 if (!event.touches()) |
| 575 return; | 579 return; |
| 576 if (event.touches()->length() != 1) { | 580 if (event.touches()->length() != 1) { |
| 577 if (event.touches()->length() || event.type() != EventTypeNames::touchend || | 581 if (event.touches()->length() || event.type() != EventTypeNames::touchend || |
| 578 !event.changedTouches() || event.changedTouches()->length() != 1) | 582 !event.changedTouches() || event.changedTouches()->length() != 1) |
| 579 return; | 583 return; |
| 580 } | 584 } |
| 581 | 585 |
| 582 const Touch* touch = event.touches()->length() == 1 | 586 const Touch* touch = event.touches()->length() == 1 |
| 583 ? event.touches()->item(0) | 587 ? event.touches()->item(0) |
| 584 : event.changedTouches()->item(0); | 588 : event.changedTouches()->item(0); |
| 585 if (touch->identifier()) | 589 if (touch->identifier()) |
| 586 return; | 590 return; |
| 587 | 591 |
| 588 if (event.type() == EventTypeNames::touchstart) | 592 if (event.type() == EventTypeNames::touchstart) |
| 589 type = MouseDown; | 593 type = MouseDown; |
| 590 else if (event.type() == EventTypeNames::touchmove) | 594 else if (event.type() == EventTypeNames::touchmove) |
| 591 type = MouseMove; | 595 type = MouseMove; |
| 592 else if (event.type() == EventTypeNames::touchend) | 596 else if (event.type() == EventTypeNames::touchend) |
| 593 type = MouseUp; | 597 type = MouseUp; |
| 594 else | 598 else |
| 595 return; | 599 return; |
| 596 | 600 |
| 597 timeStampSeconds = event.platformTimeStamp(); | 601 timeStampSeconds = event.platformTimeStamp(); |
| 598 modifiers = event.modifiers(); | 602 modifiers = event.modifiers(); |
| 599 | 603 |
| 600 // The mouse event co-ordinates should be generated from the co-ordinates of t
he touch point. | 604 // The mouse event co-ordinates should be generated from the co-ordinates of |
| 605 // the touch point. |
| 601 FrameView* view = toFrameView(widget->parent()); | 606 FrameView* view = toFrameView(widget->parent()); |
| 602 // FIXME: if view == nullptr, pointInRootFrame will really be pointInRootConte
nt. | 607 // FIXME: if view == nullptr, pointInRootFrame will really be |
| 608 // pointInRootContent. |
| 603 IntPoint pointInRootFrame = roundedIntPoint(touch->absoluteLocation()); | 609 IntPoint pointInRootFrame = roundedIntPoint(touch->absoluteLocation()); |
| 604 if (view) | 610 if (view) |
| 605 pointInRootFrame = view->contentsToRootFrame(pointInRootFrame); | 611 pointInRootFrame = view->contentsToRootFrame(pointInRootFrame); |
| 606 IntPoint screenPoint = roundedIntPoint(touch->screenLocation()); | 612 IntPoint screenPoint = roundedIntPoint(touch->screenLocation()); |
| 607 globalX = screenPoint.x(); | 613 globalX = screenPoint.x(); |
| 608 globalY = screenPoint.y(); | 614 globalY = screenPoint.y(); |
| 609 windowX = pointInRootFrame.x(); | 615 windowX = pointInRootFrame.x(); |
| 610 windowY = pointInRootFrame.y(); | 616 windowY = pointInRootFrame.y(); |
| 611 | 617 |
| 612 button = WebMouseEvent::Button::Left; | 618 button = WebMouseEvent::Button::Left; |
| (...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 817 break; | 823 break; |
| 818 case GestureSourceTouchscreen: | 824 case GestureSourceTouchscreen: |
| 819 sourceDevice = WebGestureDeviceTouchscreen; | 825 sourceDevice = WebGestureDeviceTouchscreen; |
| 820 break; | 826 break; |
| 821 case GestureSourceUninitialized: | 827 case GestureSourceUninitialized: |
| 822 NOTREACHED(); | 828 NOTREACHED(); |
| 823 } | 829 } |
| 824 } | 830 } |
| 825 | 831 |
| 826 } // namespace blink | 832 } // namespace blink |
| OLD | NEW |