SourceInputNode.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include "InputNode.hpp"
5 #include "../TimeSystem/FrameUpdateClient.hpp"
6 
7 namespace iv
8 {
9 
11 {
12 public:
15 
16  SourceInputNode( Instance * inst );
18 
19  bool input( Input const * input );
20 
21  void Add_InputNode( InputNode * node );
22  void Remove_InputNode( InputNode * node );
23 
24  // InputRoot
25  virtual void treeRefresh() override;
26  virtual void deactivateSubtree( InputNode * node ) override;
27  virtual void reserve_key( Input::DeviceKey key, bool reserve ) override;
28 
29  // InputNode
30  virtual InputRoot * input_getRoot() override;
31  virtual void input_eachChild( std::function< void( InputNode * ) > const & ) override;
32  virtual void input_childDisconnect( InputNode * ) override;
33 
34 private:
35  // FrameUpdateClient
36  virtual void frame_update() override;
37 
38  // InputBindingListener
39  virtual void on_binding_changed() override;
40 
41  //
42  void do_refresh();
43  bool is_reserved( Input::DeviceKey device_key );
44 
45 private:
46  std::unordered_set< Input::DeviceKey, Input::DeviceKey_Hash > pressed;
47  std::unordered_set< Input::DeviceKey, Input::DeviceKey_Hash > reserved;
48  std::unordered_set< Input::Key > reserved_whole;
49 
50  bool refresh_queued;
51 
52  std::vector< InputNode * > _input_children;
53 };
54 
55 }