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

Side by Side Diff: content/browser/renderer_host/render_widget_host_view_aura.cc

Issue 1005213003: Fix for the continuing issues with pointer lock operations in HiDPI Chrome. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address review comments Created 5 years, 9 months 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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_aura.h" 5 #include "content/browser/renderer_host/render_widget_host_view_aura.h"
6 6
7 #include "base/auto_reset.h" 7 #include "base/auto_reset.h"
8 #include "base/basictypes.h" 8 #include "base/basictypes.h"
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/callback_helpers.h" 10 #include "base/callback_helpers.h"
(...skipping 316 matching lines...) Expand 10 before | Expand all | Expand 10 after
327 327
328 if (event.type() == ui::ET_GESTURE_BEGIN) { 328 if (event.type() == ui::ET_GESTURE_BEGIN) {
329 const ui::GestureEvent& gesture = 329 const ui::GestureEvent& gesture =
330 static_cast<const ui::GestureEvent&>(event); 330 static_cast<const ui::GestureEvent&>(event);
331 return gesture.details().touch_points() == 1; 331 return gesture.details().touch_points() == 1;
332 } 332 }
333 333
334 return false; 334 return false;
335 } 335 }
336 336
337 bool IsFractionalScaleFactor(float scale_factor) {
338 return (scale_factor - static_cast<int>(scale_factor)) > 0;
339 }
340
337 } // namespace 341 } // namespace
338 342
339 // We need to watch for mouse events outside a Web Popup or its parent 343 // We need to watch for mouse events outside a Web Popup or its parent
340 // and dismiss the popup for certain events. 344 // and dismiss the popup for certain events.
341 class RenderWidgetHostViewAura::EventFilterForPopupExit 345 class RenderWidgetHostViewAura::EventFilterForPopupExit
342 : public ui::EventHandler { 346 : public ui::EventHandler {
343 public: 347 public:
344 explicit EventFilterForPopupExit(RenderWidgetHostViewAura* rwhva) 348 explicit EventFilterForPopupExit(RenderWidgetHostViewAura* rwhva)
345 : rwhva_(rwhva) { 349 : rwhva_(rwhva) {
346 DCHECK(rwhva_); 350 DCHECK(rwhva_);
(...skipping 1573 matching lines...) Expand 10 before | Expand all | Expand 10 after
1920 window_->MoveCursorTo(center); 1924 window_->MoveCursorTo(center);
1921 return; 1925 return;
1922 } 1926 }
1923 1927
1924 blink::WebMouseEvent mouse_event = MakeWebMouseEvent(*event); 1928 blink::WebMouseEvent mouse_event = MakeWebMouseEvent(*event);
1925 1929
1926 bool is_move_to_center_event = (event->type() == ui::ET_MOUSE_MOVED || 1930 bool is_move_to_center_event = (event->type() == ui::ET_MOUSE_MOVED ||
1927 event->type() == ui::ET_MOUSE_DRAGGED) && 1931 event->type() == ui::ET_MOUSE_DRAGGED) &&
1928 mouse_event.x == center.x() && mouse_event.y == center.y(); 1932 mouse_event.x == center.x() && mouse_event.y == center.y();
1929 1933
1934 // For fractional scale factors, the conversion from pixels to dip and
1935 // vice versa could result in off by 1 or 2 errors which hurts us because
1936 // we want to avoid sending the artificial move to center event to the
1937 // renderer. Sending the move to center to the renderer cause the cursor
1938 // to bounce around the center of the screen leading to the lock operation
1939 // not working correctly.
1940 // Workaround is to treat a mouse move or drag event off by at most 2 px
1941 // from the center as a move to center event.
1942 if (synthetic_move_sent_ &&
1943 IsFractionalScaleFactor(current_device_scale_factor_)) {
1944 if (event->type() == ui::ET_MOUSE_MOVED ||
1945 event->type() == ui::ET_MOUSE_DRAGGED) {
1946 if ((abs(mouse_event.x - center.x()) <= 2) &&
1947 (abs(mouse_event.y - center.y()) <= 2)) {
1948 is_move_to_center_event = true;
1949 }
1950 }
1951 }
1952
1930 ModifyEventMovementAndCoords(&mouse_event); 1953 ModifyEventMovementAndCoords(&mouse_event);
1931 1954
1932 bool should_not_forward = is_move_to_center_event && synthetic_move_sent_; 1955 bool should_not_forward = is_move_to_center_event && synthetic_move_sent_;
1933 if (should_not_forward) { 1956 if (should_not_forward) {
1934 synthetic_move_sent_ = false; 1957 synthetic_move_sent_ = false;
1935 } else { 1958 } else {
1936 // Check if the mouse has reached the border and needs to be centered. 1959 // Check if the mouse has reached the border and needs to be centered.
1937 if (ShouldMoveToCenter()) { 1960 if (ShouldMoveToCenter()) {
1938 synthetic_move_sent_ = true; 1961 synthetic_move_sent_ = true;
1939 window_->MoveCursorTo(center); 1962 window_->MoveCursorTo(center);
(...skipping 750 matching lines...) Expand 10 before | Expand all | Expand 10 after
2690 2713
2691 //////////////////////////////////////////////////////////////////////////////// 2714 ////////////////////////////////////////////////////////////////////////////////
2692 // RenderWidgetHostViewBase, public: 2715 // RenderWidgetHostViewBase, public:
2693 2716
2694 // static 2717 // static
2695 void RenderWidgetHostViewBase::GetDefaultScreenInfo(WebScreenInfo* results) { 2718 void RenderWidgetHostViewBase::GetDefaultScreenInfo(WebScreenInfo* results) {
2696 GetScreenInfoForWindow(results, NULL); 2719 GetScreenInfoForWindow(results, NULL);
2697 } 2720 }
2698 2721
2699 } // namespace content 2722 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698