| 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 "remoting/host/input_injector.h" | 5 #include "remoting/host/input_injector.h" |
| 6 | 6 |
| 7 #include <windows.h> | 7 #include <windows.h> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/compiler_specific.h" | 10 #include "base/compiler_specific.h" |
| (...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 212 input.ki.dwFlags |= KEYEVENTF_EXTENDEDKEY; | 212 input.ki.dwFlags |= KEYEVENTF_EXTENDEDKEY; |
| 213 | 213 |
| 214 if (SendInput(1, &input, sizeof(INPUT)) == 0) | 214 if (SendInput(1, &input, sizeof(INPUT)) == 0) |
| 215 LOG_GETLASTERROR(ERROR) << "Failed to inject a key event"; | 215 LOG_GETLASTERROR(ERROR) << "Failed to inject a key event"; |
| 216 } | 216 } |
| 217 | 217 |
| 218 void InputInjectorWin::Core::HandleMouse(const MouseEvent& event) { | 218 void InputInjectorWin::Core::HandleMouse(const MouseEvent& event) { |
| 219 // Reset the system idle suspend timeout. | 219 // Reset the system idle suspend timeout. |
| 220 SetThreadExecutionState(ES_SYSTEM_REQUIRED); | 220 SetThreadExecutionState(ES_SYSTEM_REQUIRED); |
| 221 | 221 |
| 222 // TODO(garykac) Collapse mouse (x,y) and button events into a single | 222 // TODO(garykac) Collapse mouse movement and button events into a single |
| 223 // input event when possible. | 223 // input event when possible. |
| 224 if (event.has_x() && event.has_y()) { | 224 if (event.has_delta_x() && event.has_delta_y()) { |
| 225 int x = event.x(); | 225 INPUT input; |
| 226 int y = event.y(); | 226 input.type = INPUT_MOUSE; |
| 227 | 227 input.mi.time = 0; |
| 228 input.mi.dx = event.delta_x(); |
| 229 input.mi.dy = event.delta_y(); |
| 230 input.mi.dwFlags = MOUSEEVENTF_MOVE | MOUSEEVENTF_VIRTUALDESK; |
| 231 if (SendInput(1, &input, sizeof(INPUT)) == 0) |
| 232 LOG_GETLASTERROR(ERROR) << "Failed to inject a mouse move event"; |
| 233 } else if (event.has_x() && event.has_y()) { |
| 228 INPUT input; | 234 INPUT input; |
| 229 input.type = INPUT_MOUSE; | 235 input.type = INPUT_MOUSE; |
| 230 input.mi.time = 0; | 236 input.mi.time = 0; |
| 231 SkISize screen_size(SkISize::Make(GetSystemMetrics(SM_CXVIRTUALSCREEN), | 237 SkISize screen_size(SkISize::Make(GetSystemMetrics(SM_CXVIRTUALSCREEN), |
| 232 GetSystemMetrics(SM_CYVIRTUALSCREEN))); | 238 GetSystemMetrics(SM_CYVIRTUALSCREEN))); |
| 233 if ((screen_size.width() > 1) && (screen_size.height() > 1)) { | 239 if ((screen_size.width() > 1) && (screen_size.height() > 1)) { |
| 234 x = std::max(0, std::min(screen_size.width(), x)); | 240 int x = std::max(0, std::min(screen_size.width(), event.x())); |
| 235 y = std::max(0, std::min(screen_size.height(), y)); | 241 int y = std::max(0, std::min(screen_size.height(), event.y())); |
| 236 input.mi.dx = static_cast<int>((x * 65535) / (screen_size.width() - 1)); | 242 input.mi.dx = static_cast<int>((x * 65535) / (screen_size.width() - 1)); |
| 237 input.mi.dy = static_cast<int>((y * 65535) / (screen_size.height() - 1)); | 243 input.mi.dy = static_cast<int>((y * 65535) / (screen_size.height() - 1)); |
| 238 input.mi.dwFlags = | 244 input.mi.dwFlags = |
| 239 MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_VIRTUALDESK; | 245 MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_VIRTUALDESK; |
| 240 if (SendInput(1, &input, sizeof(INPUT)) == 0) | 246 if (SendInput(1, &input, sizeof(INPUT)) == 0) |
| 241 LOG_GETLASTERROR(ERROR) << "Failed to inject a mouse move event"; | 247 LOG_GETLASTERROR(ERROR) << "Failed to inject a mouse move event"; |
| 242 } | 248 } |
| 243 } | 249 } |
| 244 | 250 |
| 245 int wheel_delta_x = 0; | 251 int wheel_delta_x = 0; |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 310 } // namespace | 316 } // namespace |
| 311 | 317 |
| 312 scoped_ptr<InputInjector> InputInjector::Create( | 318 scoped_ptr<InputInjector> InputInjector::Create( |
| 313 scoped_refptr<base::SingleThreadTaskRunner> main_task_runner, | 319 scoped_refptr<base::SingleThreadTaskRunner> main_task_runner, |
| 314 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner) { | 320 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner) { |
| 315 return scoped_ptr<InputInjector>( | 321 return scoped_ptr<InputInjector>( |
| 316 new InputInjectorWin(main_task_runner, ui_task_runner)); | 322 new InputInjectorWin(main_task_runner, ui_task_runner)); |
| 317 } | 323 } |
| 318 | 324 |
| 319 } // namespace remoting | 325 } // namespace remoting |
| OLD | NEW |