15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef REMOTING_HOST_MOUSE_CLAMPING_FILTER_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define REMOTING_HOST_MOUSE_CLAMPING_FILTER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "remoting/protocol/mouse_input_filter.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "remoting/protocol/video_stub.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace remoting { 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Filtering VideoStub implementation which configures a MouseInputFilter to 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// clamp mouse events to fall within the dimensions of the most-recently 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// received video frame. 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MouseClampingFilter : public protocol::VideoStub { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) explicit MouseClampingFilter(protocol::InputStub* input_stub); 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~MouseClampingFilter(); 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protocol::InputStub* input_filter() { return &input_filter_; } 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_video_stub(protocol::VideoStub* video_stub) { 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) video_stub_ = video_stub; 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // protocol::VideoStub implementation. 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void ProcessVideoPacket(scoped_ptr<VideoPacket> video_packet, 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Closure& done) OVERRIDE; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Clamps mouse event coordinates to the video dimensions. 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protocol::MouseInputFilter input_filter_; 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protocol::VideoStub* video_stub_; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(MouseClampingFilter); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace remoting 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // REMOTING_HOST_MOUSE_CLAMPING_FILTER_H_ 44