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 "content/browser/renderer_host/render_widget_host_view_event_handler.h" | 5 #include "content/browser/renderer_host/render_widget_host_view_event_handler.h" |
6 | 6 |
7 #include "base/metrics/user_metrics.h" | 7 #include "base/metrics/user_metrics.h" |
8 #include "base/metrics/user_metrics_action.h" | 8 #include "base/metrics/user_metrics_action.h" |
9 #include "content/browser/renderer_host/input/touch_selection_controller_client_
aura.h" | 9 #include "content/browser/renderer_host/input/touch_selection_controller_client_
aura.h" |
10 #include "content/browser/renderer_host/overscroll_controller.h" | 10 #include "content/browser/renderer_host/overscroll_controller.h" |
(...skipping 701 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
712 if (event->flags() & ui::EF_IS_NON_CLIENT) { | 712 if (event->flags() & ui::EF_IS_NON_CLIENT) { |
713 // TODO(jonross): ideally this would not be done for mus (crbug.com/621412) | 713 // TODO(jonross): ideally this would not be done for mus (crbug.com/621412) |
714 synthetic_move_sent_ = true; | 714 synthetic_move_sent_ = true; |
715 window_->MoveCursorTo(center); | 715 window_->MoveCursorTo(center); |
716 return; | 716 return; |
717 } | 717 } |
718 | 718 |
719 blink::WebMouseEvent mouse_event = | 719 blink::WebMouseEvent mouse_event = |
720 ui::MakeWebMouseEvent(*event, base::Bind(&GetScreenLocationFromEvent)); | 720 ui::MakeWebMouseEvent(*event, base::Bind(&GetScreenLocationFromEvent)); |
721 | 721 |
722 bool is_move_to_center_event = (event->type() == ui::ET_MOUSE_MOVED || | 722 bool is_move_to_center_event = |
723 event->type() == ui::ET_MOUSE_DRAGGED) && | 723 (event->type() == ui::ET_MOUSE_MOVED || |
724 mouse_event.x == center.x() && | 724 event->type() == ui::ET_MOUSE_DRAGGED) && |
725 mouse_event.y == center.y(); | 725 mouse_event.positionInWidget().x == center.x() && |
| 726 mouse_event.positionInWidget().y == center.y(); |
726 | 727 |
727 // For fractional scale factors, the conversion from pixels to dip and | 728 // For fractional scale factors, the conversion from pixels to dip and |
728 // vice versa could result in off by 1 or 2 errors which hurts us because | 729 // vice versa could result in off by 1 or 2 errors which hurts us because |
729 // we want to avoid sending the artificial move to center event to the | 730 // we want to avoid sending the artificial move to center event to the |
730 // renderer. Sending the move to center to the renderer cause the cursor | 731 // renderer. Sending the move to center to the renderer cause the cursor |
731 // to bounce around the center of the screen leading to the lock operation | 732 // to bounce around the center of the screen leading to the lock operation |
732 // not working correctly. | 733 // not working correctly. |
733 // Workaround is to treat a mouse move or drag event off by at most 2 px | 734 // Workaround is to treat a mouse move or drag event off by at most 2 px |
734 // from the center as a move to center event. | 735 // from the center as a move to center event. |
735 if (synthetic_move_sent_ && | 736 if (synthetic_move_sent_ && |
736 IsFractionalScaleFactor(host_view_->current_device_scale_factor())) { | 737 IsFractionalScaleFactor(host_view_->current_device_scale_factor())) { |
737 if (event->type() == ui::ET_MOUSE_MOVED || | 738 if (event->type() == ui::ET_MOUSE_MOVED || |
738 event->type() == ui::ET_MOUSE_DRAGGED) { | 739 event->type() == ui::ET_MOUSE_DRAGGED) { |
739 if ((abs(mouse_event.x - center.x()) <= 2) && | 740 if ((std::abs(mouse_event.positionInWidget().x - center.x()) <= 2) && |
740 (abs(mouse_event.y - center.y()) <= 2)) { | 741 (std::abs(mouse_event.positionInWidget().y - center.y()) <= 2)) { |
741 is_move_to_center_event = true; | 742 is_move_to_center_event = true; |
742 } | 743 } |
743 } | 744 } |
744 } | 745 } |
745 | 746 |
746 ModifyEventMovementAndCoords(*event, &mouse_event); | 747 ModifyEventMovementAndCoords(*event, &mouse_event); |
747 | 748 |
748 bool should_not_forward = is_move_to_center_event && synthetic_move_sent_; | 749 bool should_not_forward = is_move_to_center_event && synthetic_move_sent_; |
749 if (should_not_forward) { | 750 if (should_not_forward) { |
750 synthetic_move_sent_ = false; | 751 synthetic_move_sent_ = false; |
(...skipping 21 matching lines...) Expand all Loading... |
772 } | 773 } |
773 } | 774 } |
774 | 775 |
775 void RenderWidgetHostViewEventHandler::ModifyEventMovementAndCoords( | 776 void RenderWidgetHostViewEventHandler::ModifyEventMovementAndCoords( |
776 const ui::MouseEvent& ui_mouse_event, | 777 const ui::MouseEvent& ui_mouse_event, |
777 blink::WebMouseEvent* event) { | 778 blink::WebMouseEvent* event) { |
778 // If the mouse has just entered, we must report zero movementX/Y. Hence we | 779 // If the mouse has just entered, we must report zero movementX/Y. Hence we |
779 // reset any global_mouse_position set previously. | 780 // reset any global_mouse_position set previously. |
780 if (ui_mouse_event.type() == ui::ET_MOUSE_ENTERED || | 781 if (ui_mouse_event.type() == ui::ET_MOUSE_ENTERED || |
781 ui_mouse_event.type() == ui::ET_MOUSE_EXITED) { | 782 ui_mouse_event.type() == ui::ET_MOUSE_EXITED) { |
782 global_mouse_position_.SetPoint(event->globalX, event->globalY); | 783 global_mouse_position_.SetPoint(event->positionInScreen().x, |
| 784 event->positionInScreen().y); |
783 } | 785 } |
784 | 786 |
785 // Movement is computed by taking the difference of the new cursor position | 787 // Movement is computed by taking the difference of the new cursor position |
786 // and the previous. Under mouse lock the cursor will be warped back to the | 788 // and the previous. Under mouse lock the cursor will be warped back to the |
787 // center so that we are not limited by clipping boundaries. | 789 // center so that we are not limited by clipping boundaries. |
788 // We do not measure movement as the delta from cursor to center because | 790 // We do not measure movement as the delta from cursor to center because |
789 // we may receive more mouse movement events before our warp has taken | 791 // we may receive more mouse movement events before our warp has taken |
790 // effect. | 792 // effect. |
791 event->movementX = event->globalX - global_mouse_position_.x(); | 793 event->movementX = event->positionInScreen().x - global_mouse_position_.x(); |
792 event->movementY = event->globalY - global_mouse_position_.y(); | 794 event->movementY = event->positionInScreen().y - global_mouse_position_.y(); |
793 | 795 |
794 global_mouse_position_.SetPoint(event->globalX, event->globalY); | 796 global_mouse_position_.SetPoint(event->positionInScreen().x, |
| 797 event->positionInScreen().y); |
795 | 798 |
796 // Under mouse lock, coordinates of mouse are locked to what they were when | 799 // Under mouse lock, coordinates of mouse are locked to what they were when |
797 // mouse lock was entered. | 800 // mouse lock was entered. |
798 if (mouse_locked_) { | 801 if (mouse_locked_) { |
799 event->x = unlocked_mouse_position_.x(); | 802 event->setPositionInWidget(unlocked_mouse_position_.x(), |
800 event->y = unlocked_mouse_position_.y(); | 803 unlocked_mouse_position_.y()); |
801 event->globalX = unlocked_global_mouse_position_.x(); | 804 event->setPositionInScreen(unlocked_global_mouse_position_.x(), |
802 event->globalY = unlocked_global_mouse_position_.y(); | 805 unlocked_global_mouse_position_.y()); |
803 } else { | 806 } else { |
804 unlocked_mouse_position_.SetPoint(event->x, event->y); | 807 unlocked_mouse_position_.SetPoint(event->positionInWidget().x, |
805 unlocked_global_mouse_position_.SetPoint(event->globalX, event->globalY); | 808 event->positionInWidget().y); |
| 809 unlocked_global_mouse_position_.SetPoint(event->positionInScreen().x, |
| 810 event->positionInScreen().y); |
806 } | 811 } |
807 } | 812 } |
808 | 813 |
809 void RenderWidgetHostViewEventHandler::SetKeyboardFocus() { | 814 void RenderWidgetHostViewEventHandler::SetKeyboardFocus() { |
810 #if defined(OS_WIN) | 815 #if defined(OS_WIN) |
811 if (window_ && window_->delegate()->CanFocus()) { | 816 if (window_ && window_->delegate()->CanFocus()) { |
812 aura::WindowTreeHost* host = window_->GetHost(); | 817 aura::WindowTreeHost* host = window_->GetHost(); |
813 if (host) { | 818 if (host) { |
814 gfx::AcceleratedWidget hwnd = host->GetAcceleratedWidget(); | 819 gfx::AcceleratedWidget hwnd = host->GetAcceleratedWidget(); |
815 if (!(::GetWindowLong(hwnd, GWL_EXSTYLE) & WS_EX_NOACTIVATE)) | 820 if (!(::GetWindowLong(hwnd, GWL_EXSTYLE) & WS_EX_NOACTIVATE)) |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
876 host_->ForwardWheelEventWithLatencyInfo(event, latency); | 881 host_->ForwardWheelEventWithLatencyInfo(event, latency); |
877 } | 882 } |
878 | 883 |
879 void RenderWidgetHostViewEventHandler::ProcessTouchEvent( | 884 void RenderWidgetHostViewEventHandler::ProcessTouchEvent( |
880 const blink::WebTouchEvent& event, | 885 const blink::WebTouchEvent& event, |
881 const ui::LatencyInfo& latency) { | 886 const ui::LatencyInfo& latency) { |
882 host_->ForwardTouchEventWithLatencyInfo(event, latency); | 887 host_->ForwardTouchEventWithLatencyInfo(event, latency); |
883 } | 888 } |
884 | 889 |
885 } // namespace content | 890 } // namespace content |
OLD | NEW |