1 /*
2  * Clutter.
3  *
4  * An OpenGL based 'interactive canvas' library.
5  *
6  * Copyright (C) 2016  Red Hat inc.
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2 of the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with this library. If not, see <http://www.gnu.org/licenses/>.
20  *
21  * Author: Jonas Ådahl <jadahl@gmail.com>
22  */
23 
24 #ifndef __CLUTTER_VIRTUAL_INPUT_DEVICE_H__
25 #define __CLUTTER_VIRTUAL_INPUT_DEVICE_H__
26 
27 #include <glib-object.h>
28 #include <stdint.h>
29 
30 #include "clutter-seat.h"
31 
32 #define CLUTTER_TYPE_VIRTUAL_INPUT_DEVICE (clutter_virtual_input_device_get_type ())
33 
34 #define CLUTTER_VIRTUAL_INPUT_DEVICE_MAX_TOUCH_SLOTS 32u
35 
36 CLUTTER_EXPORT
37 G_DECLARE_DERIVABLE_TYPE (ClutterVirtualInputDevice,
38                           clutter_virtual_input_device,
39                           CLUTTER, VIRTUAL_INPUT_DEVICE,
40                           GObject)
41 
42 typedef enum _ClutterButtonState
43 {
44   CLUTTER_BUTTON_STATE_RELEASED,
45   CLUTTER_BUTTON_STATE_PRESSED
46 } ClutterButtonState;
47 
48 typedef enum _ClutterKeyState
49 {
50   CLUTTER_KEY_STATE_RELEASED,
51   CLUTTER_KEY_STATE_PRESSED
52 } ClutterKeyState;
53 
54 struct _ClutterVirtualInputDeviceClass
55 {
56   GObjectClass parent_class;
57 
58   void (*notify_relative_motion) (ClutterVirtualInputDevice *virtual_device,
59                                   uint64_t                   time_us,
60                                   double                     dx,
61                                   double                     dy);
62 
63   void (*notify_absolute_motion) (ClutterVirtualInputDevice *virtual_device,
64                                   uint64_t                   time_us,
65                                   double                     x,
66                                   double                     y);
67 
68   void (*notify_button) (ClutterVirtualInputDevice *virtual_device,
69                          uint64_t                   time_us,
70                          uint32_t                   button,
71                          ClutterButtonState         button_state);
72 
73   void (*notify_key) (ClutterVirtualInputDevice *virtual_device,
74                       uint64_t                   time_us,
75                       uint32_t                   key,
76                       ClutterKeyState            key_state);
77   void (*notify_keyval) (ClutterVirtualInputDevice *virtual_device,
78                          uint64_t                   time_us,
79                          uint32_t                   keyval,
80                          ClutterKeyState            key_state);
81 
82   void (*notify_discrete_scroll) (ClutterVirtualInputDevice *virtual_device,
83                                   uint64_t                   time_us,
84                                   ClutterScrollDirection     direction,
85                                   ClutterScrollSource        scroll_source);
86 
87   void (*notify_scroll_continuous) (ClutterVirtualInputDevice *virtual_device,
88                                     uint64_t                   time_us,
89                                     double                     dx,
90                                     double                     dy,
91                                     ClutterScrollSource        scroll_source,
92                                     ClutterScrollFinishFlags   finish_flags);
93 
94   void (*notify_touch_down) (ClutterVirtualInputDevice *virtual_device,
95                              uint64_t                   time_us,
96                              int                        slot,
97                              double                     x,
98                              double                     y);
99 
100   void (*notify_touch_motion) (ClutterVirtualInputDevice *virtual_device,
101                                uint64_t                   time_us,
102                                int                        slot,
103                                double                     x,
104                                double                     y);
105 
106   void (*notify_touch_up) (ClutterVirtualInputDevice *virtual_device,
107                            uint64_t                   time_us,
108                            int                        slot);
109 };
110 
111 CLUTTER_EXPORT
112 void clutter_virtual_input_device_notify_relative_motion (ClutterVirtualInputDevice *virtual_device,
113                                                           uint64_t                   time_us,
114                                                           double                     dx,
115                                                           double                     dy);
116 
117 CLUTTER_EXPORT
118 void clutter_virtual_input_device_notify_absolute_motion (ClutterVirtualInputDevice *virtual_device,
119                                                           uint64_t                   time_us,
120                                                           double                     x,
121                                                           double                     y);
122 
123 CLUTTER_EXPORT
124 void clutter_virtual_input_device_notify_button (ClutterVirtualInputDevice *virtual_device,
125                                                  uint64_t                   time_us,
126                                                  uint32_t                   button,
127                                                  ClutterButtonState         button_state);
128 
129 CLUTTER_EXPORT
130 void clutter_virtual_input_device_notify_key (ClutterVirtualInputDevice *virtual_device,
131                                               uint64_t                   time_us,
132                                               uint32_t                   key,
133                                               ClutterKeyState            key_state);
134 
135 CLUTTER_EXPORT
136 void clutter_virtual_input_device_notify_keyval (ClutterVirtualInputDevice *virtual_device,
137                                                  uint64_t                   time_us,
138                                                  uint32_t                   keyval,
139                                                  ClutterKeyState            key_state);
140 
141 CLUTTER_EXPORT
142 void clutter_virtual_input_device_notify_discrete_scroll (ClutterVirtualInputDevice *virtual_device,
143                                                           uint64_t                   time_us,
144                                                           ClutterScrollDirection     direction,
145                                                           ClutterScrollSource        scroll_source);
146 
147 CLUTTER_EXPORT
148 void clutter_virtual_input_device_notify_scroll_continuous (ClutterVirtualInputDevice *virtual_device,
149                                                             uint64_t                   time_us,
150                                                             double                     dx,
151                                                             double                     dy,
152                                                             ClutterScrollSource        scroll_source,
153                                                             ClutterScrollFinishFlags   finish_flags);
154 
155 CLUTTER_EXPORT
156 void clutter_virtual_input_device_notify_touch_down (ClutterVirtualInputDevice *virtual_device,
157                                                      uint64_t                   time_us,
158                                                      int                        slot,
159                                                      double                     x,
160                                                      double                     y);
161 
162 CLUTTER_EXPORT
163 void clutter_virtual_input_device_notify_touch_motion (ClutterVirtualInputDevice *virtual_device,
164                                                        uint64_t                   time_us,
165                                                        int                        slot,
166                                                        double                     x,
167                                                        double                     y);
168 
169 CLUTTER_EXPORT
170 void clutter_virtual_input_device_notify_touch_up (ClutterVirtualInputDevice *virtual_device,
171                                                    uint64_t                   time_us,
172                                                    int                        slot);
173 
174 CLUTTER_EXPORT
175 int clutter_virtual_input_device_get_device_type (ClutterVirtualInputDevice *virtual_device);
176 
177 #endif /* __CLUTTER_VIRTUAL_INPUT_DEVICE_H__ */
178