OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2011, 2012 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 592 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
603 if (!event.hasPreciseScrollingDeltas) | 603 if (!event.hasPreciseScrollingDeltas) |
604 endActiveFlingAnimation(); | 604 endActiveFlingAnimation(); |
605 | 605 |
606 hidePopups(); | 606 hidePopups(); |
607 return PageWidgetEventHandler::handleMouseWheel(mainFrame, event); | 607 return PageWidgetEventHandler::handleMouseWheel(mainFrame, event); |
608 } | 608 } |
609 | 609 |
610 WebGestureEvent WebViewImpl::createGestureScrollEventFromFling( | 610 WebGestureEvent WebViewImpl::createGestureScrollEventFromFling( |
611 WebInputEvent::Type type, | 611 WebInputEvent::Type type, |
612 WebGestureDevice sourceDevice) const { | 612 WebGestureDevice sourceDevice) const { |
613 WebGestureEvent gestureEvent; | 613 WebGestureEvent gestureEvent(type, m_flingModifier, |
614 gestureEvent.type = type; | 614 WTF::monotonicallyIncreasingTime()); |
615 gestureEvent.sourceDevice = sourceDevice; | 615 gestureEvent.sourceDevice = sourceDevice; |
616 gestureEvent.timeStampSeconds = WTF::monotonicallyIncreasingTime(); | |
617 gestureEvent.x = m_positionOnFlingStart.x; | 616 gestureEvent.x = m_positionOnFlingStart.x; |
618 gestureEvent.y = m_positionOnFlingStart.y; | 617 gestureEvent.y = m_positionOnFlingStart.y; |
619 gestureEvent.globalX = m_globalPositionOnFlingStart.x; | 618 gestureEvent.globalX = m_globalPositionOnFlingStart.x; |
620 gestureEvent.globalY = m_globalPositionOnFlingStart.y; | 619 gestureEvent.globalY = m_globalPositionOnFlingStart.y; |
621 gestureEvent.modifiers = m_flingModifier; | |
622 return gestureEvent; | 620 return gestureEvent; |
623 } | 621 } |
624 | 622 |
625 bool WebViewImpl::scrollBy(const WebFloatSize& delta, | 623 bool WebViewImpl::scrollBy(const WebFloatSize& delta, |
626 const WebFloatSize& velocity) { | 624 const WebFloatSize& velocity) { |
627 DCHECK_NE(m_flingSourceDevice, WebGestureDeviceUninitialized); | 625 DCHECK_NE(m_flingSourceDevice, WebGestureDeviceUninitialized); |
628 if (!m_page || !m_page->mainFrame() || !m_page->mainFrame()->isLocalFrame() || | 626 if (!m_page || !m_page->mainFrame() || !m_page->mainFrame()->isLocalFrame() || |
629 !m_page->deprecatedLocalMainFrame()->view()) | 627 !m_page->deprecatedLocalMainFrame()->view()) |
630 return false; | 628 return false; |
631 | 629 |
632 if (m_flingSourceDevice == WebGestureDeviceTouchpad) { | 630 if (m_flingSourceDevice == WebGestureDeviceTouchpad) { |
633 WebMouseWheelEvent syntheticWheel; | 631 WebMouseWheelEvent syntheticWheel(WebInputEvent::MouseWheel, |
| 632 m_flingModifier, |
| 633 WTF::monotonicallyIncreasingTime()); |
634 const float tickDivisor = WheelEvent::TickMultiplier; | 634 const float tickDivisor = WheelEvent::TickMultiplier; |
635 | 635 |
636 syntheticWheel.type = WebInputEvent::MouseWheel; | |
637 syntheticWheel.timeStampSeconds = WTF::monotonicallyIncreasingTime(); | |
638 syntheticWheel.deltaX = delta.width; | 636 syntheticWheel.deltaX = delta.width; |
639 syntheticWheel.deltaY = delta.height; | 637 syntheticWheel.deltaY = delta.height; |
640 syntheticWheel.wheelTicksX = delta.width / tickDivisor; | 638 syntheticWheel.wheelTicksX = delta.width / tickDivisor; |
641 syntheticWheel.wheelTicksY = delta.height / tickDivisor; | 639 syntheticWheel.wheelTicksY = delta.height / tickDivisor; |
642 syntheticWheel.hasPreciseScrollingDeltas = true; | 640 syntheticWheel.hasPreciseScrollingDeltas = true; |
643 syntheticWheel.x = m_positionOnFlingStart.x; | 641 syntheticWheel.x = m_positionOnFlingStart.x; |
644 syntheticWheel.y = m_positionOnFlingStart.y; | 642 syntheticWheel.y = m_positionOnFlingStart.y; |
645 syntheticWheel.globalX = m_globalPositionOnFlingStart.x; | 643 syntheticWheel.globalX = m_globalPositionOnFlingStart.x; |
646 syntheticWheel.globalY = m_globalPositionOnFlingStart.y; | 644 syntheticWheel.globalY = m_globalPositionOnFlingStart.y; |
647 syntheticWheel.modifiers = m_flingModifier; | |
648 | 645 |
649 if (handleMouseWheel(*m_page->deprecatedLocalMainFrame(), syntheticWheel) != | 646 if (handleMouseWheel(*m_page->deprecatedLocalMainFrame(), syntheticWheel) != |
650 WebInputEventResult::NotHandled) | 647 WebInputEventResult::NotHandled) |
651 return true; | 648 return true; |
652 | 649 |
653 // TODO(dtapuska): Remove these GSB/GSE sequences when trackpad latching is | 650 // TODO(dtapuska): Remove these GSB/GSE sequences when trackpad latching is |
654 // implemented; see crbug.com/526463. | 651 // implemented; see crbug.com/526463. |
655 WebGestureEvent syntheticScrollBegin = createGestureScrollEventFromFling( | 652 WebGestureEvent syntheticScrollBegin = createGestureScrollEventFromFling( |
656 WebInputEvent::GestureScrollBegin, WebGestureDeviceTouchpad); | 653 WebInputEvent::GestureScrollBegin, WebGestureDeviceTouchpad); |
657 syntheticScrollBegin.data.scrollBegin.deltaXHint = delta.width; | 654 syntheticScrollBegin.data.scrollBegin.deltaXHint = delta.width; |
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
931 } | 928 } |
932 | 929 |
933 WebInputEventResult WebViewImpl::handleSyntheticWheelFromTouchpadPinchEvent( | 930 WebInputEventResult WebViewImpl::handleSyntheticWheelFromTouchpadPinchEvent( |
934 const WebGestureEvent& pinchEvent) { | 931 const WebGestureEvent& pinchEvent) { |
935 DCHECK_EQ(pinchEvent.type, WebInputEvent::GesturePinchUpdate); | 932 DCHECK_EQ(pinchEvent.type, WebInputEvent::GesturePinchUpdate); |
936 | 933 |
937 // For pinch gesture events, match typical trackpad behavior on Windows by | 934 // For pinch gesture events, match typical trackpad behavior on Windows by |
938 // sending fake wheel events with the ctrl modifier set when we see trackpad | 935 // sending fake wheel events with the ctrl modifier set when we see trackpad |
939 // pinch gestures. Ideally we'd someday get a platform 'pinch' event and | 936 // pinch gestures. Ideally we'd someday get a platform 'pinch' event and |
940 // send that instead. | 937 // send that instead. |
941 WebMouseWheelEvent wheelEvent; | 938 WebMouseWheelEvent wheelEvent( |
942 wheelEvent.type = WebInputEvent::MouseWheel; | 939 WebInputEvent::MouseWheel, |
943 wheelEvent.timeStampSeconds = pinchEvent.timeStampSeconds; | 940 pinchEvent.modifiers | WebInputEvent::ControlKey, |
| 941 pinchEvent.timeStampSeconds); |
944 wheelEvent.windowX = wheelEvent.x = pinchEvent.x; | 942 wheelEvent.windowX = wheelEvent.x = pinchEvent.x; |
945 wheelEvent.windowY = wheelEvent.y = pinchEvent.y; | 943 wheelEvent.windowY = wheelEvent.y = pinchEvent.y; |
946 wheelEvent.globalX = pinchEvent.globalX; | 944 wheelEvent.globalX = pinchEvent.globalX; |
947 wheelEvent.globalY = pinchEvent.globalY; | 945 wheelEvent.globalY = pinchEvent.globalY; |
948 wheelEvent.modifiers = pinchEvent.modifiers | WebInputEvent::ControlKey; | |
949 wheelEvent.deltaX = 0; | 946 wheelEvent.deltaX = 0; |
950 | 947 |
951 // The function to convert scales to deltaY values is designed to be | 948 // The function to convert scales to deltaY values is designed to be |
952 // compatible with websites existing use of wheel events, and with existing | 949 // compatible with websites existing use of wheel events, and with existing |
953 // Windows trackpad behavior. In particular, we want: | 950 // Windows trackpad behavior. In particular, we want: |
954 // - deltas should accumulate via addition: f(s1*s2)==f(s1)+f(s2) | 951 // - deltas should accumulate via addition: f(s1*s2)==f(s1)+f(s2) |
955 // - deltas should invert via negation: f(1/s) == -f(s) | 952 // - deltas should invert via negation: f(1/s) == -f(s) |
956 // - zoom in should be positive: f(s) > 0 iff s > 1 | 953 // - zoom in should be positive: f(s) > 0 iff s > 1 |
957 // - magnitude roughly matches wheels: f(2) > 25 && f(2) < 100 | 954 // - magnitude roughly matches wheels: f(2) > 25 && f(2) < 100 |
958 // - a formula that's relatively easy to use from JavaScript | 955 // - a formula that's relatively easy to use from JavaScript |
(...skipping 2832 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3791 result.setToShadowHostIfInUserAgentShadowRoot(); | 3788 result.setToShadowHostIfInUserAgentShadowRoot(); |
3792 return result; | 3789 return result; |
3793 } | 3790 } |
3794 | 3791 |
3795 WebHitTestResult WebViewImpl::hitTestResultForTap( | 3792 WebHitTestResult WebViewImpl::hitTestResultForTap( |
3796 const WebPoint& tapPointWindowPos, | 3793 const WebPoint& tapPointWindowPos, |
3797 const WebSize& tapArea) { | 3794 const WebSize& tapArea) { |
3798 if (!m_page->mainFrame()->isLocalFrame()) | 3795 if (!m_page->mainFrame()->isLocalFrame()) |
3799 return HitTestResult(); | 3796 return HitTestResult(); |
3800 | 3797 |
3801 WebGestureEvent tapEvent; | 3798 WebGestureEvent tapEvent(WebInputEvent::GestureTap, |
| 3799 WebInputEvent::NoModifiers, |
| 3800 WTF::monotonicallyIncreasingTime()); |
3802 tapEvent.x = tapPointWindowPos.x; | 3801 tapEvent.x = tapPointWindowPos.x; |
3803 tapEvent.y = tapPointWindowPos.y; | 3802 tapEvent.y = tapPointWindowPos.y; |
3804 tapEvent.type = WebInputEvent::GestureTap; | |
3805 // GestureTap is only ever from a touchscreen. | 3803 // GestureTap is only ever from a touchscreen. |
3806 tapEvent.sourceDevice = WebGestureDeviceTouchscreen; | 3804 tapEvent.sourceDevice = WebGestureDeviceTouchscreen; |
3807 tapEvent.data.tap.tapCount = 1; | 3805 tapEvent.data.tap.tapCount = 1; |
3808 tapEvent.data.tap.width = tapArea.width; | 3806 tapEvent.data.tap.width = tapArea.width; |
3809 tapEvent.data.tap.height = tapArea.height; | 3807 tapEvent.data.tap.height = tapArea.height; |
3810 | 3808 |
3811 PlatformGestureEventBuilder platformEvent(mainFrameImpl()->frameView(), | 3809 PlatformGestureEventBuilder platformEvent(mainFrameImpl()->frameView(), |
3812 tapEvent); | 3810 tapEvent); |
3813 | 3811 |
3814 HitTestResult result = | 3812 HitTestResult result = |
(...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4214 if (focusedFrame->localFrameRoot() != mainFrameImpl()->frame()) | 4212 if (focusedFrame->localFrameRoot() != mainFrameImpl()->frame()) |
4215 return nullptr; | 4213 return nullptr; |
4216 return focusedFrame; | 4214 return focusedFrame; |
4217 } | 4215 } |
4218 | 4216 |
4219 LocalFrame* WebViewImpl::focusedLocalFrameAvailableForIme() const { | 4217 LocalFrame* WebViewImpl::focusedLocalFrameAvailableForIme() const { |
4220 return m_imeAcceptEvents ? focusedLocalFrameInWidget() : nullptr; | 4218 return m_imeAcceptEvents ? focusedLocalFrameInWidget() : nullptr; |
4221 } | 4219 } |
4222 | 4220 |
4223 } // namespace blink | 4221 } // namespace blink |
OLD | NEW |