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