1 /* GDK - The GIMP Drawing Kit
2  * Copyright (C) 2009 Carlos Garnacho <carlosg@gnome.org>
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library. If not, see <http://www.gnu.org/licenses/>.
16  */
17 
18 #ifndef __GDK_DEVICE_PRIVATE_H__
19 #define __GDK_DEVICE_PRIVATE_H__
20 
21 #include "gdkdevice.h"
22 #include "gdkdevicetool.h"
23 #include "gdkdevicemanager.h"
24 #include "gdkevents.h"
25 #include "gdkseat.h"
26 
27 G_BEGIN_DECLS
28 
29 #define GDK_DEVICE_CLASS(c)     (G_TYPE_CHECK_CLASS_CAST ((c), GDK_TYPE_DEVICE, GdkDeviceClass))
30 #define GDK_IS_DEVICE_CLASS(c)  (G_TYPE_CHECK_CLASS_TYPE ((c), GDK_TYPE_DEVICE))
31 #define GDK_DEVICE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GDK_TYPE_DEVICE, GdkDeviceClass))
32 
33 typedef struct _GdkDeviceClass GdkDeviceClass;
34 typedef struct _GdkDeviceKey GdkDeviceKey;
35 
36 struct _GdkDeviceKey
37 {
38   guint keyval;
39   GdkModifierType modifiers;
40 };
41 
42 struct _GdkDevice
43 {
44   GObject parent_instance;
45 
46   gchar *name;
47   GdkInputSource source;
48   GdkInputMode mode;
49   gboolean has_cursor;
50   gint num_keys;
51   GdkAxisFlags axis_flags;
52   GdkDeviceKey *keys;
53   GdkDeviceManager *manager;
54   GdkDisplay *display;
55   /* Paired master for master,
56    * associated master for slaves
57    */
58   GdkDevice *associated;
59   GList *slaves;
60   GdkDeviceType type;
61   GArray *axes;
62   guint num_touches;
63 
64   gchar *vendor_id;
65   gchar *product_id;
66 
67   GdkSeat *seat;
68   GdkDeviceTool *last_tool;
69 };
70 
71 struct _GdkDeviceClass
72 {
73   GObjectClass parent_class;
74 
75   gboolean (* get_history)   (GdkDevice      *device,
76                               GdkWindow      *window,
77                               guint32         start,
78                               guint32         stop,
79                               GdkTimeCoord ***events,
80                               gint           *n_events);
81 
82   void (* get_state)         (GdkDevice       *device,
83                               GdkWindow       *window,
84                               gdouble         *axes,
85                               GdkModifierType *mask);
86 
87   void (* set_window_cursor) (GdkDevice *device,
88                               GdkWindow *window,
89                               GdkCursor *cursor);
90 
91   void (* warp)              (GdkDevice  *device,
92                               GdkScreen  *screen,
93                               gdouble     x,
94                               gdouble     y);
95   void (* query_state)       (GdkDevice       *device,
96                               GdkWindow       *window,
97                               GdkWindow      **root_window,
98                               GdkWindow      **child_window,
99                               gdouble          *root_x,
100                               gdouble          *root_y,
101                               gdouble          *win_x,
102                               gdouble          *win_y,
103                               GdkModifierType  *mask);
104   GdkGrabStatus (* grab)     (GdkDevice        *device,
105                               GdkWindow        *window,
106                               gboolean          owner_events,
107                               GdkEventMask      event_mask,
108                               GdkWindow        *confine_to,
109                               GdkCursor        *cursor,
110                               guint32           time_);
111   void          (*ungrab)    (GdkDevice        *device,
112                               guint32           time_);
113 
114   GdkWindow * (* window_at_position) (GdkDevice       *device,
115                                       double          *win_x,
116                                       double          *win_y,
117                                       GdkModifierType *mask,
118                                       gboolean         get_toplevel);
119   void (* select_window_events)      (GdkDevice       *device,
120                                       GdkWindow       *window,
121                                       GdkEventMask     event_mask);
122 };
123 
124 void  _gdk_device_set_associated_device (GdkDevice *device,
125                                          GdkDevice *relative);
126 
127 void  _gdk_device_reset_axes (GdkDevice   *device);
128 guint _gdk_device_add_axis   (GdkDevice   *device,
129                               GdkAtom      label_atom,
130                               GdkAxisUse   use,
131                               gdouble      min_value,
132                               gdouble      max_value,
133                               gdouble      resolution);
134 void _gdk_device_get_axis_info (GdkDevice  *device,
135 				guint       index,
136 				GdkAtom    *label_atom,
137 				GdkAxisUse *use,
138 				gdouble    *min_value,
139 				gdouble    *max_value,
140 				gdouble    *resolution);
141 
142 void _gdk_device_set_keys    (GdkDevice   *device,
143                               guint        num_keys);
144 
145 gboolean   _gdk_device_translate_window_coord (GdkDevice *device,
146                                                GdkWindow *window,
147                                                guint      index,
148                                                gdouble    value,
149                                                gdouble   *axis_value);
150 
151 gboolean   _gdk_device_translate_screen_coord (GdkDevice *device,
152                                                GdkWindow *window,
153                                                gdouble    window_root_x,
154                                                gdouble    window_root_y,
155                                                guint      index,
156                                                gdouble    value,
157                                                gdouble   *axis_value);
158 
159 gboolean   _gdk_device_translate_axis         (GdkDevice *device,
160                                                guint      index,
161                                                gdouble    value,
162                                                gdouble   *axis_value);
163 
164 GdkTimeCoord ** _gdk_device_allocate_history  (GdkDevice *device,
165                                                gint       n_events);
166 
167 void _gdk_device_add_slave (GdkDevice *device,
168                             GdkDevice *slave);
169 void _gdk_device_remove_slave (GdkDevice *device,
170                                GdkDevice *slave);
171 void _gdk_device_query_state                  (GdkDevice        *device,
172                                                GdkWindow        *window,
173                                                GdkWindow       **root_window,
174                                                GdkWindow       **child_window,
175                                                gdouble          *root_x,
176                                                gdouble          *root_y,
177                                                gdouble          *win_x,
178                                                gdouble          *win_y,
179                                                GdkModifierType  *mask);
180 GdkWindow * _gdk_device_window_at_position    (GdkDevice        *device,
181                                                gdouble          *win_x,
182                                                gdouble          *win_y,
183                                                GdkModifierType  *mask,
184                                                gboolean          get_toplevel);
185 
186 void  gdk_device_set_seat  (GdkDevice *device,
187                             GdkSeat   *seat);
188 
189 void           gdk_device_update_tool (GdkDevice     *device,
190                                        GdkDeviceTool *tool);
191 
192 GdkInputMode gdk_device_get_input_mode (GdkDevice *device);
193 
194 G_END_DECLS
195 
196 #endif /* __GDK_DEVICE_PRIVATE_H__ */
197