OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/input/web_input_event_builders_win.h" | 5 #include "content/browser/renderer_host/input/web_input_event_builders_win.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "content/browser/renderer_host/input/web_input_event_util.h" | 8 #include "content/browser/renderer_host/input/web_input_event_util.h" |
| 9 #include "ui/gfx/win/dpi.h" |
9 | 10 |
10 using blink::WebInputEvent; | 11 using blink::WebInputEvent; |
11 using blink::WebKeyboardEvent; | 12 using blink::WebKeyboardEvent; |
12 using blink::WebMouseEvent; | 13 using blink::WebMouseEvent; |
13 using blink::WebMouseWheelEvent; | 14 using blink::WebMouseWheelEvent; |
14 | 15 |
15 namespace content { | 16 namespace content { |
16 | 17 |
17 static const unsigned long kDefaultScrollLinesPerWheelDelta = 3; | 18 static const unsigned long kDefaultScrollLinesPerWheelDelta = 3; |
18 static const unsigned long kDefaultScrollCharsPerWheelDelta = 1; | 19 static const unsigned long kDefaultScrollCharsPerWheelDelta = 1; |
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
243 DCHECK(time_ms); | 244 DCHECK(time_ms); |
244 result.timeStampSeconds = time_ms / 1000.0; | 245 result.timeStampSeconds = time_ms / 1000.0; |
245 | 246 |
246 // set position fields: | 247 // set position fields: |
247 | 248 |
248 result.x = static_cast<short>(LOWORD(lparam)); | 249 result.x = static_cast<short>(LOWORD(lparam)); |
249 result.y = static_cast<short>(HIWORD(lparam)); | 250 result.y = static_cast<short>(HIWORD(lparam)); |
250 result.windowX = result.x; | 251 result.windowX = result.x; |
251 result.windowY = result.y; | 252 result.windowY = result.y; |
252 | 253 |
253 POINT global_point = { result.x, result.y }; | 254 // The mouse coordinates received here are device independent (DIPs). We need |
| 255 // to convert them to physical coordinates before calling Windows APIs like |
| 256 // ClientToScreen, etc. |
| 257 gfx::Point scaled_screen_point(result.x, result.y); |
| 258 scaled_screen_point = gfx::win::DIPToScreenPoint(scaled_screen_point); |
| 259 |
| 260 POINT global_point = { scaled_screen_point.x(), scaled_screen_point.y() }; |
254 ClientToScreen(hwnd, &global_point); | 261 ClientToScreen(hwnd, &global_point); |
255 | 262 |
256 result.globalX = global_point.x; | 263 scaled_screen_point.set_x(global_point.x); |
257 result.globalY = global_point.y; | 264 scaled_screen_point.set_y(global_point.y); |
| 265 |
| 266 // We need to convert the point back to DIP before using it. |
| 267 gfx::Point dip_screen_point = gfx::win::ScreenToDIPPoint( |
| 268 scaled_screen_point); |
| 269 |
| 270 result.globalX = dip_screen_point.x(); |
| 271 result.globalY = dip_screen_point.y(); |
258 | 272 |
259 // calculate number of clicks: | 273 // calculate number of clicks: |
260 | 274 |
261 // This differs slightly from the WebKit code in WebKit/win/WebView.cpp | 275 // This differs slightly from the WebKit code in WebKit/win/WebView.cpp |
262 // where their original code looks buggy. | 276 // where their original code looks buggy. |
263 static int last_click_position_x; | 277 static int last_click_position_x; |
264 static int last_click_position_y; | 278 static int last_click_position_y; |
265 static WebMouseEvent::Button last_click_button = WebMouseEvent::ButtonLeft; | 279 static WebMouseEvent::Button last_click_button = WebMouseEvent::ButtonLeft; |
266 | 280 |
267 double current_time = result.timeStampSeconds; | 281 double current_time = result.timeStampSeconds; |
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
454 result.wheelTicksX = wheel_delta; | 468 result.wheelTicksX = wheel_delta; |
455 } else { | 469 } else { |
456 result.deltaY = scroll_delta; | 470 result.deltaY = scroll_delta; |
457 result.wheelTicksY = wheel_delta; | 471 result.wheelTicksY = wheel_delta; |
458 } | 472 } |
459 | 473 |
460 return result; | 474 return result; |
461 } | 475 } |
462 | 476 |
463 } // namespace content | 477 } // namespace content |
OLD | NEW |