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

Side by Side Diff: remoting/host/input_injector_mac.cc

Issue 112453002: Remove dependency on skia from remoting (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years 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 | Annotate | Revision Log
« no previous file with comments | « remoting/host/input_injector_linux.cc ('k') | remoting/host/input_injector_win.cc » ('j') | 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 "remoting/host/input_injector.h" 5 #include "remoting/host/input_injector.h"
6 6
7 #include <ApplicationServices/ApplicationServices.h> 7 #include <ApplicationServices/ApplicationServices.h>
8 #include <Carbon/Carbon.h> 8 #include <Carbon/Carbon.h>
9 #include <algorithm> 9 #include <algorithm>
10 10
11 #include "base/basictypes.h" 11 #include "base/basictypes.h"
12 #include "base/bind.h" 12 #include "base/bind.h"
13 #include "base/compiler_specific.h" 13 #include "base/compiler_specific.h"
14 #include "base/location.h" 14 #include "base/location.h"
15 #include "base/mac/scoped_cftyperef.h" 15 #include "base/mac/scoped_cftyperef.h"
16 #include "base/memory/ref_counted.h" 16 #include "base/memory/ref_counted.h"
17 #include "base/single_thread_task_runner.h" 17 #include "base/single_thread_task_runner.h"
18 #include "remoting/host/clipboard.h" 18 #include "remoting/host/clipboard.h"
19 #include "remoting/proto/internal.pb.h" 19 #include "remoting/proto/internal.pb.h"
20 #include "remoting/protocol/message_decoder.h" 20 #include "remoting/protocol/message_decoder.h"
21 #include "skia/ext/skia_utils_mac.h" 21 #include "third_party/webrtc/modules/desktop_capture/desktop_geometry.h"
22 #include "third_party/skia/include/core/SkPoint.h"
23 #include "third_party/skia/include/core/SkRect.h"
24 #include "third_party/webrtc/modules/desktop_capture/mac/desktop_configuration.h " 22 #include "third_party/webrtc/modules/desktop_capture/mac/desktop_configuration.h "
25 #include "ui/events/keycodes/dom4/keycode_converter.h" 23 #include "ui/events/keycodes/dom4/keycode_converter.h"
26 24
27 namespace remoting { 25 namespace remoting {
28 26
29 namespace { 27 namespace {
30 28
31 using protocol::ClipboardEvent; 29 using protocol::ClipboardEvent;
32 using protocol::KeyEvent; 30 using protocol::KeyEvent;
33 using protocol::MouseEvent; 31 using protocol::MouseEvent;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 // Mirrors the InputInjector interface. 64 // Mirrors the InputInjector interface.
67 void Start(scoped_ptr<protocol::ClipboardStub> client_clipboard); 65 void Start(scoped_ptr<protocol::ClipboardStub> client_clipboard);
68 66
69 void Stop(); 67 void Stop();
70 68
71 private: 69 private:
72 friend class base::RefCountedThreadSafe<Core>; 70 friend class base::RefCountedThreadSafe<Core>;
73 virtual ~Core(); 71 virtual ~Core();
74 72
75 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; 73 scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
76 SkIPoint mouse_pos_; 74 webrtc::DesktopVector mouse_pos_;
77 uint32 mouse_button_state_; 75 uint32 mouse_button_state_;
78 scoped_ptr<Clipboard> clipboard_; 76 scoped_ptr<Clipboard> clipboard_;
79 77
80 DISALLOW_COPY_AND_ASSIGN(Core); 78 DISALLOW_COPY_AND_ASSIGN(Core);
81 }; 79 };
82 80
83 scoped_refptr<Core> core_; 81 scoped_refptr<Core> core_;
84 82
85 DISALLOW_COPY_AND_ASSIGN(InputInjectorMac); 83 DISALLOW_COPY_AND_ASSIGN(InputInjectorMac);
86 }; 84 };
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 } 169 }
172 170
173 void InputInjectorMac::Core::InjectMouseEvent(const MouseEvent& event) { 171 void InputInjectorMac::Core::InjectMouseEvent(const MouseEvent& event) {
174 if (event.has_x() && event.has_y()) { 172 if (event.has_x() && event.has_y()) {
175 // On multi-monitor systems (0,0) refers to the top-left of the "main" 173 // On multi-monitor systems (0,0) refers to the top-left of the "main"
176 // display, whereas our coordinate scheme places (0,0) at the top-left of 174 // display, whereas our coordinate scheme places (0,0) at the top-left of
177 // the bounding rectangle around all the displays, so we need to translate 175 // the bounding rectangle around all the displays, so we need to translate
178 // accordingly. 176 // accordingly.
179 177
180 // Set the mouse position assuming single-monitor. 178 // Set the mouse position assuming single-monitor.
181 mouse_pos_ = SkIPoint::Make(event.x(), event.y()); 179 mouse_pos_.set(event.x(), event.y());
182 180
183 // Fetch the desktop configuration. 181 // Fetch the desktop configuration.
184 // TODO(wez): Optimize this out, or at least only enumerate displays in 182 // TODO(wez): Optimize this out, or at least only enumerate displays in
185 // response to display-changed events. VideoFrameCapturer's VideoFrames 183 // response to display-changed events. VideoFrameCapturer's VideoFrames
186 // could be augmented to include native cursor coordinates for use by 184 // could be augmented to include native cursor coordinates for use by
187 // MouseClampingFilter, removing the need for translation here. 185 // MouseClampingFilter, removing the need for translation here.
188 webrtc::MacDesktopConfiguration desktop_config = 186 webrtc::MacDesktopConfiguration desktop_config =
189 webrtc::MacDesktopConfiguration::GetCurrent( 187 webrtc::MacDesktopConfiguration::GetCurrent(
190 webrtc::MacDesktopConfiguration::TopLeftOrigin); 188 webrtc::MacDesktopConfiguration::TopLeftOrigin);
191 189
192 // Translate the mouse position into desktop coordinates. 190 // Translate the mouse position into desktop coordinates.
193 mouse_pos_ += SkIPoint::Make(desktop_config.pixel_bounds.left(), 191 mouse_pos_.add(webrtc::DesktopVector(desktop_config.pixel_bounds.left(),
194 desktop_config.pixel_bounds.top()); 192 desktop_config.pixel_bounds.top()));
195 193
196 // Constrain the mouse position to the desktop coordinates. 194 // Constrain the mouse position to the desktop coordinates.
197 mouse_pos_ = SkIPoint::Make( 195 mouse_pos_.set(
198 std::max(desktop_config.pixel_bounds.left(), 196 std::max(desktop_config.pixel_bounds.left(),
199 std::min(desktop_config.pixel_bounds.right(), mouse_pos_.x())), 197 std::min(desktop_config.pixel_bounds.right(), mouse_pos_.x())),
200 std::max(desktop_config.pixel_bounds.top(), 198 std::max(desktop_config.pixel_bounds.top(),
201 std::min(desktop_config.pixel_bounds.bottom(), mouse_pos_.y()))); 199 std::min(desktop_config.pixel_bounds.bottom(), mouse_pos_.y())));
202 200
203 // Convert from pixel to Density Independent Pixel coordinates. 201 // Convert from pixel to Density Independent Pixel coordinates.
204 mouse_pos_ = SkIPoint::Make( 202 mouse_pos_.set(mouse_pos_.x() / desktop_config.dip_to_pixel_scale,
205 SkScalarRound(mouse_pos_.x() / desktop_config.dip_to_pixel_scale), 203 mouse_pos_.y() / desktop_config.dip_to_pixel_scale);
206 SkScalarRound(mouse_pos_.y() / desktop_config.dip_to_pixel_scale));
207 204
208 VLOG(3) << "Moving mouse to " << mouse_pos_.x() << "," << mouse_pos_.y(); 205 VLOG(3) << "Moving mouse to " << mouse_pos_.x() << "," << mouse_pos_.y();
209 } 206 }
210 if (event.has_button() && event.has_button_down()) { 207 if (event.has_button() && event.has_button_down()) {
211 if (event.button() >= 1 && event.button() <= 3) { 208 if (event.button() >= 1 && event.button() <= 3) {
212 VLOG(2) << "Button " << event.button() 209 VLOG(2) << "Button " << event.button()
213 << (event.button_down() ? " down" : " up"); 210 << (event.button_down() ? " down" : " up");
214 int button_change = 1 << (event.button() - 1); 211 int button_change = 1 << (event.button() - 1);
215 if (event.button_down()) 212 if (event.button_down())
216 mouse_button_state_ |= button_change; 213 mouse_button_state_ |= button_change;
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 275
279 } // namespace 276 } // namespace
280 277
281 scoped_ptr<InputInjector> InputInjector::Create( 278 scoped_ptr<InputInjector> InputInjector::Create(
282 scoped_refptr<base::SingleThreadTaskRunner> main_task_runner, 279 scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
283 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner) { 280 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner) {
284 return scoped_ptr<InputInjector>(new InputInjectorMac(main_task_runner)); 281 return scoped_ptr<InputInjector>(new InputInjectorMac(main_task_runner));
285 } 282 }
286 283
287 } // namespace remoting 284 } // namespace remoting
OLDNEW
« no previous file with comments | « remoting/host/input_injector_linux.cc ('k') | remoting/host/input_injector_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698