Home | History | Annotate | Download | only in protocol
      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
      3 // found in the LICENSE file.
      4 
      5 #ifndef REMOTING_PROTOCOL_INPUT_EVENT_TRACKER_H_
      6 #define REMOTING_PROTOCOL_INPUT_EVENT_TRACKER_H_
      7 
      8 #include <set>
      9 
     10 #include "base/basictypes.h"
     11 #include "base/compiler_specific.h"
     12 #include "remoting/protocol/input_stub.h"
     13 #include "third_party/skia/include/core/SkPoint.h"
     14 
     15 namespace remoting {
     16 namespace protocol {
     17 
     18 // Filtering InputStub which tracks mouse and keyboard input events before
     19 // passing them on to |input_stub|, and can dispatch release events to
     20 // |input_stub| for all currently-pressed keys and buttons when necessary.
     21 class InputEventTracker : public InputStub {
     22  public:
     23   explicit InputEventTracker(protocol::InputStub* input_stub);
     24   virtual ~InputEventTracker();
     25 
     26   // Returns true if the key with the specified USB code is currently pressed.
     27   bool IsKeyPressed(uint32 usb_keycode) const;
     28 
     29   // Returns the count of keys currently pressed.
     30   int PressedKeyCount() const;
     31 
     32   // Dispatch release events for all currently-pressed keys and mouse buttons
     33   // to the InputStub.
     34   void ReleaseAll();
     35 
     36   // InputStub interface.
     37   virtual void InjectKeyEvent(const KeyEvent& event) OVERRIDE;
     38   virtual void InjectMouseEvent(const MouseEvent& event) OVERRIDE;
     39 
     40  private:
     41   protocol::InputStub* input_stub_;
     42 
     43   std::set<uint32> pressed_keys_;
     44 
     45   SkIPoint mouse_pos_;
     46   uint32 mouse_button_state_;
     47 
     48   DISALLOW_COPY_AND_ASSIGN(InputEventTracker);
     49 };
     50 
     51 }  // namespace protocol
     52 }  // namespace remoting
     53 
     54 #endif  // REMOTING_PROTOCOL_INPUT_EVENT_TRACKER_H_
     55