update to 1.10.4
[profile/ivi/clutter.git] / clutter / clutter-device-manager-private.h
1 /*
2  * Clutter.
3  *
4  * An OpenGL based 'interactive canvas' library.
5  *
6  * Copyright (C) 2010  Intel Corporation.
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:
22  *   Emmanuele Bassi <ebassi@linux.intel.com>
23  */
24
25 #ifndef __CLUTTER_DEVICE_MANAGER_PRIVATE_H__
26 #define __CLUTTER_DEVICE_MANAGER_PRIVATE_H__
27
28 #include <clutter/clutter-backend.h>
29 #include <clutter/clutter-device-manager.h>
30 #include <clutter/clutter-event.h>
31
32 G_BEGIN_DECLS
33
34 typedef struct _ClutterAxisInfo
35 {
36   ClutterInputAxis axis;
37
38   gdouble min_axis;
39   gdouble max_axis;
40
41   gdouble min_value;
42   gdouble max_value;
43
44   gdouble resolution;
45 } ClutterAxisInfo;
46
47 typedef struct _ClutterKeyInfo
48 {
49   guint keyval;
50   ClutterModifierType modifiers;
51 } ClutterKeyInfo;
52
53 typedef struct _ClutterScrollInfo
54 {
55   guint axis_id;
56   ClutterScrollDirection direction;
57   gdouble increment;
58
59   gdouble last_value;
60   guint last_value_valid : 1;
61 } ClutterScrollInfo;
62
63 struct _ClutterInputDevice
64 {
65   GObject parent_instance;
66
67   gint id;
68
69   ClutterInputDeviceType device_type;
70   ClutterInputMode device_mode;
71
72   gchar *device_name;
73
74   ClutterDeviceManager *device_manager;
75
76   ClutterBackend *backend;
77
78   /* the associated device */
79   ClutterInputDevice *associated;
80
81   GList *slaves;
82
83   /* the actor underneath the pointer */
84   ClutterActor *cursor_actor;
85
86   /* the actor that has a grab in place for the device */
87   ClutterActor *pointer_grab_actor;
88   ClutterActor *keyboard_grab_actor;
89
90   /* the current click count */
91   gint click_count;
92
93   /* the stage the device is on */
94   ClutterStage *stage;
95
96   /* the current state */
97   gint current_x;
98   gint current_y;
99   guint32 current_time;
100   gint current_button_number;
101   ClutterModifierType current_state;
102
103   /* the previous state, used for click count generation */
104   gint previous_x;
105   gint previous_y;
106   guint32 previous_time;
107   gint previous_button_number;
108   ClutterModifierType previous_state;
109
110   GArray *axes;
111
112   guint n_keys;
113   GArray *keys;
114
115   GArray *scroll_info;
116
117   guint has_cursor : 1;
118   guint is_enabled : 1;
119 };
120
121 struct _ClutterInputDeviceClass
122 {
123   GObjectClass parent_class;
124
125   void (* select_stage_events) (ClutterInputDevice *device,
126                                 ClutterStage       *stage,
127                                 gint                event_mask);
128   gboolean (* keycode_to_evdev) (ClutterInputDevice *device,
129                                  guint               hardware_keycode,
130                                  guint              *evdev_keycode);
131 };
132
133 /* device manager */
134 void            _clutter_device_manager_add_device              (ClutterDeviceManager *device_manager,
135                                                                  ClutterInputDevice   *device);
136 void            _clutter_device_manager_remove_device           (ClutterDeviceManager *device_manager,
137                                                                  ClutterInputDevice   *device);
138 void            _clutter_device_manager_update_devices          (ClutterDeviceManager *device_manager);
139 void            _clutter_device_manager_select_stage_events     (ClutterDeviceManager *device_manager,
140                                                                  ClutterStage         *stage,
141                                                                  gint                  event_mask);
142 ClutterBackend *_clutter_device_manager_get_backend             (ClutterDeviceManager *device_manager);
143
144 /* input device */
145 void            _clutter_input_device_set_coords                (ClutterInputDevice   *device,
146                                                                  gint                  x,
147                                                                  gint                  y);
148 void            _clutter_input_device_set_state                 (ClutterInputDevice   *device,
149                                                                  ClutterModifierType   state);
150 void            _clutter_input_device_set_time                  (ClutterInputDevice   *device,
151                                                                  guint32               time_);
152 void            _clutter_input_device_set_stage                 (ClutterInputDevice   *device,
153                                                                  ClutterStage         *stage);
154 ClutterStage *  _clutter_input_device_get_stage                 (ClutterInputDevice   *device);
155 void            _clutter_input_device_set_actor                 (ClutterInputDevice   *device,
156                                                                  ClutterActor         *actor,
157                                                                  gboolean              emit_crossing);
158 ClutterActor *  _clutter_input_device_update                    (ClutterInputDevice   *device,
159                                                                  gboolean              emit_crossing);
160 void            _clutter_input_device_set_n_keys                (ClutterInputDevice   *device,
161                                                                  guint                 n_keys);
162 guint           _clutter_input_device_add_axis                  (ClutterInputDevice   *device,
163                                                                  ClutterInputAxis      axis,
164                                                                  gdouble               min_value,
165                                                                  gdouble               max_value,
166                                                                  gdouble               resolution);
167 void            _clutter_input_device_reset_axes                (ClutterInputDevice   *device);
168
169 void            _clutter_input_device_set_associated_device     (ClutterInputDevice   *device,
170                                                                  ClutterInputDevice   *associated);
171 void            _clutter_input_device_add_slave                 (ClutterInputDevice   *master,
172                                                                  ClutterInputDevice   *slave);
173 void            _clutter_input_device_remove_slave              (ClutterInputDevice   *master,
174                                                                  ClutterInputDevice   *slave);
175
176 void            _clutter_input_device_select_stage_events       (ClutterInputDevice   *device,
177                                                                  ClutterStage         *stage,
178                                                                  gint                  event_flags);
179
180 gboolean        _clutter_input_device_translate_axis            (ClutterInputDevice   *device,
181                                                                  guint                 index_,
182                                                                  gdouble               value,
183                                                                  gdouble              *axis_value);
184
185 void            _clutter_input_device_add_scroll_info           (ClutterInputDevice   *device,
186                                                                  guint                 index_,
187                                                                  ClutterScrollDirection direction,
188                                                                  gdouble               increment);
189 void            _clutter_input_device_reset_scroll_info         (ClutterInputDevice   *device);
190 gboolean        _clutter_input_device_get_scroll_delta          (ClutterInputDevice   *device,
191                                                                  guint                 index_,
192                                                                  gdouble               value,
193                                                                  ClutterScrollDirection *direction_p,
194                                                                  gdouble                *delta_p);
195
196 G_END_DECLS
197
198 #endif /* __CLUTTER_DEVICE_MANAGER_PRIVATE_H__ */