diff options
-rw-r--r-- | remoting/host/client_session.cc | 21 | ||||
-rw-r--r-- | remoting/host/client_session.h | 9 | ||||
-rw-r--r-- | remoting/host/mouse_clamping_filter.cc | 27 | ||||
-rw-r--r-- | remoting/host/mouse_clamping_filter.h | 35 | ||||
-rw-r--r-- | remoting/protocol/mouse_input_filter.h | 2 | ||||
-rw-r--r-- | remoting/remoting.gyp | 2 |
6 files changed, 69 insertions, 27 deletions
diff --git a/remoting/host/client_session.cc b/remoting/host/client_session.cc index 578fe75..4459000 100644 --- a/remoting/host/client_session.cc +++ b/remoting/host/client_session.cc @@ -29,8 +29,8 @@ ClientSession::ClientSession( host_input_stub_(host_input_stub), input_tracker_(host_input_stub_), remote_input_filter_(&input_tracker_), - mouse_input_filter_(&remote_input_filter_), - disable_input_filter_(&mouse_input_filter_), + mouse_clamping_filter_(capturer, &remote_input_filter_), + disable_input_filter_(&mouse_clamping_filter_), disable_clipboard_filter_(clipboard_echo_filter_.host_filter()), auth_input_filter_(&disable_input_filter_), auth_clipboard_filter_(&disable_clipboard_filter_), @@ -44,7 +44,7 @@ ClientSession::ClientSession( // later and set them only when connection is authenticated. connection_->set_clipboard_stub(&auth_clipboard_filter_); connection_->set_host_stub(this); - connection_->set_input_stub(this); + connection_->set_input_stub(&auth_input_filter_); clipboard_echo_filter_.set_host_stub(host_clipboard_stub_); // |auth_*_filter_|'s states reflect whether the session is authenticated. @@ -55,21 +55,6 @@ ClientSession::ClientSession( ClientSession::~ClientSession() { } -void ClientSession::InjectKeyEvent(const protocol::KeyEvent& event) { - DCHECK(CalledOnValidThread()); - auth_input_filter_.InjectKeyEvent(event); -} - -void ClientSession::InjectMouseEvent(const protocol::MouseEvent& event) { - DCHECK(CalledOnValidThread()); - - // Ensure that the MouseInputFilter is clamping to the current dimensions. - mouse_input_filter_.set_output_size(capturer_->size_most_recent()); - mouse_input_filter_.set_input_size(capturer_->size_most_recent()); - - auth_input_filter_.InjectMouseEvent(event); -} - void ClientSession::NotifyClientDimensions( const protocol::ClientDimensions& dimensions) { // TODO(wez): Use the dimensions, e.g. to resize the host desktop to match. diff --git a/remoting/host/client_session.h b/remoting/host/client_session.h index d1de45c..109e180 100644 --- a/remoting/host/client_session.h +++ b/remoting/host/client_session.h @@ -10,6 +10,7 @@ #include "base/time.h" #include "base/timer.h" #include "base/threading/non_thread_safe.h" +#include "remoting/host/mouse_clamping_filter.h" #include "remoting/host/remote_input_filter.h" #include "remoting/protocol/clipboard_echo_filter.h" #include "remoting/protocol/clipboard_filter.h" @@ -19,7 +20,6 @@ #include "remoting/protocol/input_event_tracker.h" #include "remoting/protocol/input_filter.h" #include "remoting/protocol/input_stub.h" -#include "remoting/protocol/mouse_input_filter.h" #include "third_party/skia/include/core/SkPoint.h" namespace remoting { @@ -29,7 +29,6 @@ class VideoFrameCapturer; // A ClientSession keeps a reference to a connection to a client, and maintains // per-client state. class ClientSession : public protocol::HostStub, - public protocol::InputStub, public protocol::ConnectionToClient::EventHandler, public base::NonThreadSafe { public: @@ -74,10 +73,6 @@ class ClientSession : public protocol::HostStub, const base::TimeDelta& max_duration); virtual ~ClientSession(); - // protocol::InputStub interface. - virtual void InjectKeyEvent(const protocol::KeyEvent& event) OVERRIDE; - virtual void InjectMouseEvent(const protocol::MouseEvent& event) OVERRIDE; - // protocol::HostStub interface. virtual void NotifyClientDimensions( const protocol::ClientDimensions& dimensions) OVERRIDE; @@ -145,7 +140,7 @@ class ClientSession : public protocol::HostStub, RemoteInputFilter remote_input_filter_; // Filter used to clamp mouse events to the current display dimensions. - protocol::MouseInputFilter mouse_input_filter_; + MouseClampingFilter mouse_clamping_filter_; // Filter to used to stop clipboard items sent from the client being echoed // back to it. diff --git a/remoting/host/mouse_clamping_filter.cc b/remoting/host/mouse_clamping_filter.cc new file mode 100644 index 0000000..2d1a7ff --- /dev/null +++ b/remoting/host/mouse_clamping_filter.cc @@ -0,0 +1,27 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "remoting/host/mouse_clamping_filter.h" + +#include "remoting/host/video_frame_capturer.h" +#include "remoting/proto/event.pb.h" + +namespace remoting { + +MouseClampingFilter::MouseClampingFilter(VideoFrameCapturer* capturer, + protocol::InputStub* input_stub) + : MouseInputFilter(input_stub), capturer_(capturer) { +} + +MouseClampingFilter::~MouseClampingFilter() { +} + +void MouseClampingFilter::InjectMouseEvent(const protocol::MouseEvent& event) { + // Ensure that the MouseInputFilter is clamping to the current dimensions. + set_output_size(capturer_->size_most_recent()); + set_input_size(capturer_->size_most_recent()); + MouseInputFilter::InjectMouseEvent(event); +} + +} // namespace remoting diff --git a/remoting/host/mouse_clamping_filter.h b/remoting/host/mouse_clamping_filter.h new file mode 100644 index 0000000..02ff17a --- /dev/null +++ b/remoting/host/mouse_clamping_filter.h @@ -0,0 +1,35 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef REMOTING_HOST_MOUSE_CLAMPING_FILTER_H_ +#define REMOTING_HOST_MOUSE_CLAMPING_FILTER_H_ + +#include "base/compiler_specific.h" +#include "remoting/protocol/mouse_input_filter.h" + +namespace remoting { + +class VideoFrameCapturer; + +// Filtering InputStub implementation which clamps mouse each mouse event to +// the current dimensions of a VideoFrameCapturer instance before passing +// them on to the target |input_stub|. +class MouseClampingFilter : public protocol::MouseInputFilter { + public: + MouseClampingFilter(VideoFrameCapturer* capturer, + protocol::InputStub* input_stub); + virtual ~MouseClampingFilter(); + + // InputStub overrides. + virtual void InjectMouseEvent(const protocol::MouseEvent& event) OVERRIDE; + + private: + VideoFrameCapturer* capturer_; + + DISALLOW_COPY_AND_ASSIGN(MouseClampingFilter); +}; + +} // namespace remoting + +#endif // REMOTING_HOST_MOUSE_CLAMPING_FILTER_H_ diff --git a/remoting/protocol/mouse_input_filter.h b/remoting/protocol/mouse_input_filter.h index f4d24f7..f83af93 100644 --- a/remoting/protocol/mouse_input_filter.h +++ b/remoting/protocol/mouse_input_filter.h @@ -5,10 +5,8 @@ #ifndef REMOTING_PROTOCOL_MOUSE_INPUT_FILTER_H_ #define REMOTING_PROTOCOL_MOUSE_INPUT_FILTER_H_ -#include "base/basictypes.h" #include "base/compiler_specific.h" #include "remoting/protocol/input_filter.h" -#include "remoting/protocol/input_stub.h" #include "third_party/skia/include/core/SkTypes.h" #include "third_party/skia/include/core/SkSize.h" diff --git a/remoting/remoting.gyp b/remoting/remoting.gyp index 036d9ae..e5f3821 100644 --- a/remoting/remoting.gyp +++ b/remoting/remoting.gyp @@ -1258,6 +1258,8 @@ 'host/local_input_monitor_win.cc', 'host/log_to_server.cc', 'host/log_to_server.h', + 'host/mouse_clamping_filter.cc', + 'host/mouse_clamping_filter.h', 'host/mouse_move_observer.h', 'host/network_settings.h', 'host/pin_hash.cc', |