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

Unified Diff: remoting/host/event_executor_mac.cc

Issue 10255007: Clamp events before they are sent to EventExecutors. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix typo. Created 8 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « remoting/host/event_executor_linux.cc ('k') | remoting/protocol/mouse_input_filter.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/host/event_executor_mac.cc
diff --git a/remoting/host/event_executor_mac.cc b/remoting/host/event_executor_mac.cc
index 75632685c3a4cd534eb85272cf3d421d8c8a5d36..29b6ddaef257251969db2fcf93bd0ffb7f9b748f 100644
--- a/remoting/host/event_executor_mac.cc
+++ b/remoting/host/event_executor_mac.cc
@@ -11,9 +11,9 @@
#include "base/compiler_specific.h"
#include "base/mac/scoped_cftyperef.h"
#include "base/message_loop.h"
-#include "remoting/host/capturer.h"
#include "remoting/proto/internal.pb.h"
#include "remoting/protocol/message_decoder.h"
+#include "third_party/skia/include/core/SkPoint.h"
namespace remoting {
@@ -31,7 +31,7 @@ using protocol::MouseEvent;
// A class to generate events on Mac.
class EventExecutorMac : public EventExecutor {
public:
- EventExecutorMac(MessageLoop* message_loop, Capturer* capturer);
+ EventExecutorMac(MessageLoop* message_loop);
virtual ~EventExecutorMac() {}
// ClipboardStub interface.
@@ -43,17 +43,15 @@ class EventExecutorMac : public EventExecutor {
private:
MessageLoop* message_loop_;
- Capturer* capturer_;
- int last_x_, last_y_;
- int mouse_buttons_;
+ SkIPoint mouse_pos_;
+ uint32 mouse_button_state_;
DISALLOW_COPY_AND_ASSIGN(EventExecutorMac);
};
EventExecutorMac::EventExecutorMac(
- MessageLoop* message_loop, Capturer* capturer)
- : message_loop_(message_loop),
- capturer_(capturer), last_x_(0), last_y_(0), mouse_buttons_(0) {
+ MessageLoop* message_loop)
+ : message_loop_(message_loop), mouse_button_state_(0) {
}
// Hard-coded mapping from Virtual Key codes to Mac KeySyms.
@@ -274,20 +272,11 @@ void EventExecutorMac::InjectKeyEvent(const KeyEvent& event) {
void EventExecutorMac::InjectMouseEvent(const MouseEvent& event) {
if (event.has_x() && event.has_y()) {
- // TODO(wez): Checking the validity of the MouseEvent should be done in core
- // cross-platform code, not here!
// TODO(wez): This code assumes that MouseEvent(0,0) (top-left of client view)
// corresponds to local (0,0) (top-left of primary monitor). That won't in
// general be true on multi-monitor systems, though.
- SkISize size = capturer_->size_most_recent();
- if (event.x() >= 0 || event.y() >= 0 ||
- event.x() < size.width() || event.y() < size.height()) {
- VLOG(3) << "Moving mouse to " << event.x() << "," << event.y();
- last_x_ = event.x();
- last_y_ = event.y();
- } else {
- VLOG(1) << "Invalid mouse position " << event.x() << "," << event.y();
- }
+ VLOG(3) << "Moving mouse to " << event.x() << "," << event.y();
+ mouse_pos_ = SkIPoint::Make(event.x(), event.y());
}
if (event.has_button() && event.has_button_down()) {
if (event.button() >= 1 && event.button() <= 3) {
@@ -295,9 +284,9 @@ void EventExecutorMac::InjectMouseEvent(const MouseEvent& event) {
<< (event.button_down() ? " down" : " up");
int button_change = 1 << (event.button() - 1);
if (event.button_down())
- mouse_buttons_ |= button_change;
+ mouse_button_state_ |= button_change;
else
- mouse_buttons_ &= ~button_change;
+ mouse_button_state_ &= ~button_change;
} else {
VLOG(1) << "Unknown mouse button: " << event.button();
}
@@ -308,16 +297,16 @@ void EventExecutorMac::InjectMouseEvent(const MouseEvent& event) {
// in a way that is consistent with how they would be generated using a local
// mouse, whereas the new APIs expect us to inject these higher-level events
// directly.
- CGPoint position = CGPointMake(last_x_, last_y_);
+ CGPoint position = CGPointMake(mouse_pos_.x(), mouse_pos_.y());
enum {
LeftBit = 1 << (MouseEvent::BUTTON_LEFT - 1),
MiddleBit = 1 << (MouseEvent::BUTTON_MIDDLE - 1),
RightBit = 1 << (MouseEvent::BUTTON_RIGHT - 1)
};
CGError error = CGPostMouseEvent(position, true, 3,
- (mouse_buttons_ & LeftBit) != 0,
- (mouse_buttons_ & RightBit) != 0,
- (mouse_buttons_ & MiddleBit) != 0);
+ (mouse_button_state_ & LeftBit) != 0,
+ (mouse_button_state_ & RightBit) != 0,
+ (mouse_button_state_ & MiddleBit) != 0);
if (error != kCGErrorSuccess) {
LOG(WARNING) << "CGPostMouseEvent error " << error;
}
@@ -338,7 +327,7 @@ void EventExecutorMac::InjectMouseEvent(const MouseEvent& event) {
scoped_ptr<protocol::HostEventStub> EventExecutor::Create(
MessageLoop* message_loop, Capturer* capturer) {
return scoped_ptr<protocol::HostEventStub>(
- new EventExecutorMac(message_loop, capturer));
+ new EventExecutorMac(message_loop));
}
} // namespace remoting
« no previous file with comments | « remoting/host/event_executor_linux.cc ('k') | remoting/protocol/mouse_input_filter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698