| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "content/browser/renderer_host/render_widget_host_view_android.h" | 5 #include "content/browser/renderer_host/render_widget_host_view_android.h" |
| 6 | 6 |
| 7 #include <android/bitmap.h> | 7 #include <android/bitmap.h> |
| 8 | 8 |
| 9 #include "base/android/build_info.h" | 9 #include "base/android/build_info.h" |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| (...skipping 764 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 775 | 775 |
| 776 bool RenderWidgetHostViewAndroid::OnTouchHandleEvent( | 776 bool RenderWidgetHostViewAndroid::OnTouchHandleEvent( |
| 777 const ui::MotionEvent& event) { | 777 const ui::MotionEvent& event) { |
| 778 return selection_controller_ && | 778 return selection_controller_ && |
| 779 selection_controller_->WillHandleTouchEvent(event); | 779 selection_controller_->WillHandleTouchEvent(event); |
| 780 } | 780 } |
| 781 | 781 |
| 782 void RenderWidgetHostViewAndroid::ResetGestureDetection() { | 782 void RenderWidgetHostViewAndroid::ResetGestureDetection() { |
| 783 const ui::MotionEvent* current_down_event = | 783 const ui::MotionEvent* current_down_event = |
| 784 gesture_provider_.GetCurrentDownEvent(); | 784 gesture_provider_.GetCurrentDownEvent(); |
| 785 if (current_down_event) { | 785 if (!current_down_event) { |
| 786 scoped_ptr<ui::MotionEvent> cancel_event = current_down_event->Cancel(); | 786 // A hard reset ensures prevention of any timer-based events that might fire |
| 787 OnTouchEvent(*cancel_event); | 787 // after a touch sequence has ended. |
| 788 gesture_provider_.ResetDetection(); |
| 789 return; |
| 788 } | 790 } |
| 789 | 791 |
| 790 // A hard reset ensures prevention of any timer-based events. | 792 scoped_ptr<ui::MotionEvent> cancel_event = current_down_event->Cancel(); |
| 791 gesture_provider_.ResetDetection(); | 793 if (gesture_provider_.OnTouchEvent(*cancel_event).succeeded) { |
| 794 bool causes_scrolling = false; |
| 795 host_->ForwardTouchEventWithLatencyInfo( |
| 796 ui::CreateWebTouchEventFromMotionEvent(*cancel_event, causes_scrolling), |
| 797 ui::LatencyInfo()); |
| 798 } |
| 792 } | 799 } |
| 793 | 800 |
| 794 void RenderWidgetHostViewAndroid::OnDidNavigateMainFrameToNewPage() { | 801 void RenderWidgetHostViewAndroid::OnDidNavigateMainFrameToNewPage() { |
| 795 ResetGestureDetection(); | 802 ResetGestureDetection(); |
| 796 } | 803 } |
| 797 | 804 |
| 798 void RenderWidgetHostViewAndroid::SetDoubleTapSupportEnabled(bool enabled) { | 805 void RenderWidgetHostViewAndroid::SetDoubleTapSupportEnabled(bool enabled) { |
| 799 gesture_provider_.SetDoubleTapSupportForPlatformEnabled(enabled); | 806 gesture_provider_.SetDoubleTapSupportForPlatformEnabled(enabled); |
| 800 } | 807 } |
| 801 | 808 |
| (...skipping 454 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1256 const gfx::PointF& base, | 1263 const gfx::PointF& base, |
| 1257 const gfx::PointF& extent) { | 1264 const gfx::PointF& extent) { |
| 1258 DCHECK(content_view_core_); | 1265 DCHECK(content_view_core_); |
| 1259 content_view_core_->SelectBetweenCoordinates(base, extent); | 1266 content_view_core_->SelectBetweenCoordinates(base, extent); |
| 1260 } | 1267 } |
| 1261 | 1268 |
| 1262 void RenderWidgetHostViewAndroid::OnSelectionEvent( | 1269 void RenderWidgetHostViewAndroid::OnSelectionEvent( |
| 1263 ui::SelectionEventType event) { | 1270 ui::SelectionEventType event) { |
| 1264 DCHECK(content_view_core_); | 1271 DCHECK(content_view_core_); |
| 1265 DCHECK(selection_controller_); | 1272 DCHECK(selection_controller_); |
| 1266 // Showing the selection action bar can alter the current View coordinates in | 1273 // If a selection drag has started, it has taken over the active touch |
| 1267 // such a way that the current MotionEvent stream is suddenly shifted in | 1274 // sequence. Immediately cancel gesture detection and any downstream touch |
| 1268 // space. Avoid the associated scroll jump by pre-emptively cancelling gesture | 1275 // listeners (e.g., web content) to communicate this transfer. |
| 1269 // detection; scrolling after the selection is activated is unnecessary. | 1276 if (event == ui::SELECTION_DRAG_STARTED) |
| 1270 if (event == ui::SelectionEventType::SELECTION_SHOWN) | |
| 1271 ResetGestureDetection(); | 1277 ResetGestureDetection(); |
| 1278 |
| 1272 content_view_core_->OnSelectionEvent( | 1279 content_view_core_->OnSelectionEvent( |
| 1273 event, selection_controller_->GetStartPosition(), | 1280 event, selection_controller_->GetStartPosition(), |
| 1274 GetSelectionRect(*selection_controller_)); | 1281 GetSelectionRect(*selection_controller_)); |
| 1275 } | 1282 } |
| 1276 | 1283 |
| 1277 scoped_ptr<ui::TouchHandleDrawable> | 1284 scoped_ptr<ui::TouchHandleDrawable> |
| 1278 RenderWidgetHostViewAndroid::CreateDrawable() { | 1285 RenderWidgetHostViewAndroid::CreateDrawable() { |
| 1279 DCHECK(content_view_core_); | 1286 DCHECK(content_view_core_); |
| 1280 if (!using_browser_compositor_) | 1287 if (!using_browser_compositor_) |
| 1281 return content_view_core_->CreatePopupTouchHandleDrawable(); | 1288 return content_view_core_->CreatePopupTouchHandleDrawable(); |
| (...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1576 if (overscroll_controller_) | 1583 if (overscroll_controller_) |
| 1577 overscroll_controller_->OnGestureEventAck(event, ack_result); | 1584 overscroll_controller_->OnGestureEventAck(event, ack_result); |
| 1578 | 1585 |
| 1579 if (content_view_core_) | 1586 if (content_view_core_) |
| 1580 content_view_core_->OnGestureEventAck(event, ack_result); | 1587 content_view_core_->OnGestureEventAck(event, ack_result); |
| 1581 } | 1588 } |
| 1582 | 1589 |
| 1583 InputEventAckState RenderWidgetHostViewAndroid::FilterInputEvent( | 1590 InputEventAckState RenderWidgetHostViewAndroid::FilterInputEvent( |
| 1584 const blink::WebInputEvent& input_event) { | 1591 const blink::WebInputEvent& input_event) { |
| 1585 if (selection_controller_) { | 1592 if (selection_controller_) { |
| 1586 switch (input_event.type) { | 1593 if (input_event.type == blink::WebInputEvent::GestureLongPress) { |
| 1587 case blink::WebInputEvent::GestureLongPress: | 1594 const blink::WebGestureEvent& longpress = |
| 1588 selection_controller_->OnLongPressEvent(); | 1595 static_cast<const blink::WebGestureEvent&>(input_event); |
| 1589 break; | 1596 selection_controller_->OnLongPressEvent( |
| 1590 case blink::WebInputEvent::GestureTap: | 1597 base::TimeTicks() + |
| 1591 selection_controller_->OnTapEvent(); | 1598 base::TimeDelta::FromSecondsD(input_event.timeStampSeconds), |
| 1592 break; | 1599 gfx::PointF(longpress.x, longpress.y)); |
| 1593 default: | 1600 } else if (input_event.type == blink::WebInputEvent::GestureTap) { |
| 1594 break; | 1601 selection_controller_->OnTapEvent(); |
| 1595 } | 1602 } |
| 1596 } | 1603 } |
| 1597 | 1604 |
| 1598 if (overscroll_controller_ && | 1605 if (overscroll_controller_ && |
| 1599 blink::WebInputEvent::isGestureEventType(input_event.type) && | 1606 blink::WebInputEvent::isGestureEventType(input_event.type) && |
| 1600 overscroll_controller_->WillHandleGestureEvent( | 1607 overscroll_controller_->WillHandleGestureEvent( |
| 1601 static_cast<const blink::WebGestureEvent&>(input_event))) { | 1608 static_cast<const blink::WebGestureEvent&>(input_event))) { |
| 1602 return INPUT_EVENT_ACK_STATE_CONSUMED; | 1609 return INPUT_EVENT_ACK_STATE_CONSUMED; |
| 1603 } | 1610 } |
| 1604 | 1611 |
| (...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2015 results->orientationAngle = display.RotationAsDegree(); | 2022 results->orientationAngle = display.RotationAsDegree(); |
| 2016 results->orientationType = | 2023 results->orientationType = |
| 2017 RenderWidgetHostViewBase::GetOrientationTypeForMobile(display); | 2024 RenderWidgetHostViewBase::GetOrientationTypeForMobile(display); |
| 2018 gfx::DeviceDisplayInfo info; | 2025 gfx::DeviceDisplayInfo info; |
| 2019 results->depth = info.GetBitsPerPixel(); | 2026 results->depth = info.GetBitsPerPixel(); |
| 2020 results->depthPerComponent = info.GetBitsPerComponent(); | 2027 results->depthPerComponent = info.GetBitsPerComponent(); |
| 2021 results->isMonochrome = (results->depthPerComponent == 0); | 2028 results->isMonochrome = (results->depthPerComponent == 0); |
| 2022 } | 2029 } |
| 2023 | 2030 |
| 2024 } // namespace content | 2031 } // namespace content |
| OLD | NEW |