1 /*
2  * Clutter.
3  *
4  * An OpenGL based 'interactive canvas' library.
5  *
6  * Authored By Matthew Allum  <mallum@openedhand.com>
7  *
8  * Copyright (C) 2006 OpenedHand
9  *
10  * This library is free software; you can redistribute it and/or
11  * modify it under the terms of the GNU Lesser General Public
12  * License as published by the Free Software Foundation; either
13  * version 2 of the License, or (at your option) any later version.
14  *
15  * This library is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
18  * Lesser General Public License for more details.
19  *
20  * You should have received a copy of the GNU Lesser General Public
21  * License along with this library. If not, see <http://www.gnu.org/licenses/>.
22  */
23 
24 #ifndef __CLUTTER_EVENT_H__
25 #define __CLUTTER_EVENT_H__
26 
27 #if !defined(__CLUTTER_H_INSIDE__) && !defined(CLUTTER_COMPILATION)
28 #error "Only <clutter/clutter.h> can be included directly."
29 #endif
30 
31 #include <clutter/clutter-types.h>
32 #include <clutter/clutter-input-device.h>
33 
34 G_BEGIN_DECLS
35 
36 #define CLUTTER_TYPE_EVENT	        (clutter_event_get_type ())
37 #define CLUTTER_TYPE_EVENT_SEQUENCE	(clutter_event_sequence_get_type ())
38 
39 /**
40  * CLUTTER_PRIORITY_EVENTS:
41  *
42  * Priority for event handling.
43  *
44  * Since: 0.4
45  */
46 #define CLUTTER_PRIORITY_EVENTS         (G_PRIORITY_DEFAULT)
47 
48 /**
49  * CLUTTER_CURRENT_TIME:
50  *
51  * Default value for "now".
52  *
53  * Since: 0.4
54  */
55 #define CLUTTER_CURRENT_TIME            (0L)
56 
57 /**
58  * CLUTTER_EVENT_PROPAGATE:
59  *
60  * Continues the propagation of an event; this macro should be
61  * used in event-related signals.
62  *
63  * Since: 1.10
64  */
65 #define CLUTTER_EVENT_PROPAGATE         (FALSE)
66 
67 /**
68  * CLUTTER_EVENT_STOP:
69  *
70  * Stops the propagation of an event; this macro should be used
71  * in event-related signals.
72  *
73  * Since: 1.10
74  */
75 #define CLUTTER_EVENT_STOP              (TRUE)
76 
77 /**
78  * CLUTTER_BUTTON_PRIMARY:
79  *
80  * The primary button of a pointer device.
81  *
82  * This is typically the left mouse button in a right-handed
83  * mouse configuration.
84  *
85  * Since: 1.10
86  */
87 #define CLUTTER_BUTTON_PRIMARY          (1)
88 
89 /**
90  * CLUTTER_BUTTON_MIDDLE:
91  *
92  * The middle button of a pointer device.
93  *
94  * Since: 1.10
95  */
96 #define CLUTTER_BUTTON_MIDDLE           (2)
97 
98 /**
99  * CLUTTER_BUTTON_SECONDARY:
100  *
101  * The secondary button of a pointer device.
102  *
103  * This is typically the right mouse button in a right-handed
104  * mouse configuration.
105  *
106  * Since: 1.10
107  */
108 #define CLUTTER_BUTTON_SECONDARY        (3)
109 
110 typedef struct _ClutterAnyEvent         ClutterAnyEvent;
111 typedef struct _ClutterButtonEvent      ClutterButtonEvent;
112 typedef struct _ClutterKeyEvent         ClutterKeyEvent;
113 typedef struct _ClutterMotionEvent      ClutterMotionEvent;
114 typedef struct _ClutterScrollEvent      ClutterScrollEvent;
115 typedef struct _ClutterStageStateEvent  ClutterStageStateEvent;
116 typedef struct _ClutterCrossingEvent    ClutterCrossingEvent;
117 typedef struct _ClutterTouchEvent       ClutterTouchEvent;
118 typedef struct _ClutterTouchpadPinchEvent ClutterTouchpadPinchEvent;
119 typedef struct _ClutterTouchpadSwipeEvent ClutterTouchpadSwipeEvent;
120 
121 /**
122  * ClutterAnyEvent:
123  * @type: event type
124  * @time: event time
125  * @flags: event flags
126  * @source: event source actor
127  *
128  * Common members for a #ClutterEvent
129  *
130  * Since: 0.2
131  */
132 struct _ClutterAnyEvent
133 {
134   ClutterEventType type;
135   guint32 time;
136   ClutterEventFlags flags;
137   ClutterStage *stage;
138   ClutterActor *source;
139 };
140 
141 /**
142  * ClutterKeyEvent:
143  * @type: event type
144  * @time: event time
145  * @flags: event flags
146  * @stage: event source stage
147  * @source: event source actor
148  * @modifier_state: key modifiers
149  * @keyval: raw key value
150  * @hardware_keycode: raw hardware key value
151  * @unicode_value: Unicode representation
152  * @device: the device that originated the event. If you want the physical
153  * device the event originated from, use clutter_event_get_source_device()
154  *
155  * Key event
156  *
157  * Since: 0.2
158  */
159 struct _ClutterKeyEvent
160 {
161   ClutterEventType type;
162   guint32 time;
163   ClutterEventFlags flags;
164   ClutterStage *stage;
165   ClutterActor *source;
166 
167   ClutterModifierType modifier_state;
168   guint keyval;
169   guint16 hardware_keycode;
170   gunichar unicode_value;
171   ClutterInputDevice *device;
172 };
173 
174 /**
175  * ClutterButtonEvent:
176  * @type: event type
177  * @time: event time
178  * @flags: event flags
179  * @stage: event source stage
180  * @source: event source actor
181  * @x: event X coordinate, relative to the stage
182  * @y: event Y coordinate, relative to the stage
183  * @modifier_state: button modifiers
184  * @button: event button
185  * @click_count: number of button presses within the default time
186  *   and radius
187  * @axes: reserved for future use
188  * @device: the device that originated the event. If you want the physical
189  * device the event originated from, use clutter_event_get_source_device()
190  *
191  * Button event.
192  *
193  * The event coordinates are relative to the stage that received the
194  * event, and can be transformed into actor-relative coordinates by
195  * using clutter_actor_transform_stage_point().
196  *
197  * Since: 0.2
198  */
199 struct _ClutterButtonEvent
200 {
201   ClutterEventType type;
202   guint32 time;
203   ClutterEventFlags flags;
204   ClutterStage *stage;
205   ClutterActor *source;
206 
207   gfloat x;
208   gfloat y;
209   ClutterModifierType modifier_state;
210   guint32 button;
211   guint click_count;
212   gdouble *axes; /* Future use */
213   ClutterInputDevice *device;
214 };
215 
216 /**
217  * ClutterCrossingEvent:
218  * @type: event type
219  * @time: event time
220  * @flags: event flags
221  * @stage: event source stage
222  * @source: event source actor
223  * @x: event X coordinate
224  * @y: event Y coordinate
225  * @related: actor related to the crossing
226  * @device: the device that originated the event. If you want the physical
227  * device the event originated from, use clutter_event_get_source_device()
228  *
229  * Event for the movement of the pointer across different actors
230  *
231  * Since: 0.2
232  */
233 struct _ClutterCrossingEvent
234 {
235   ClutterEventType type;
236   guint32 time;
237   ClutterEventFlags flags;
238   ClutterStage *stage;
239   ClutterActor *source;
240 
241   gfloat x;
242   gfloat y;
243   ClutterInputDevice *device;
244   ClutterActor *related;
245 };
246 
247 /**
248  * ClutterMotionEvent:
249  * @type: event type
250  * @time: event time
251  * @flags: event flags
252  * @stage: event source stage
253  * @source: event source actor
254  * @x: event X coordinate
255  * @y: event Y coordinate
256  * @modifier_state: button modifiers
257  * @axes: reserved for future use
258  * @device: the device that originated the event. If you want the physical
259  * device the event originated from, use clutter_event_get_source_device()
260  *
261  * Event for the pointer motion
262  *
263  * Since: 0.2
264  */
265 struct _ClutterMotionEvent
266 {
267   ClutterEventType type;
268   guint32 time;
269   ClutterEventFlags flags;
270   ClutterStage *stage;
271   ClutterActor *source;
272 
273   gfloat x;
274   gfloat y;
275   ClutterModifierType modifier_state;
276   gdouble *axes; /* Future use */
277   ClutterInputDevice *device;
278 };
279 
280 /**
281  * ClutterScrollEvent:
282  * @type: event type
283  * @time: event time
284  * @flags: event flags
285  * @stage: event source stage
286  * @source: event source actor
287  * @x: event X coordinate
288  * @y: event Y coordinate
289  * @direction: direction of the scrolling
290  * @modifier_state: button modifiers
291  * @axes: reserved for future use
292  * @device: the device that originated the event. If you want the physical
293  * device the event originated from, use clutter_event_get_source_device()
294  * @scroll_source: the source of scroll events. This field is available since 1.26
295  * @finish_flags: the axes that were stopped in this event. This field is available since 1.26
296  *
297  * Scroll wheel (or similar device) event
298  *
299  * Since: 0.2
300  */
301 struct _ClutterScrollEvent
302 {
303   ClutterEventType type;
304   guint32 time;
305   ClutterEventFlags flags;
306   ClutterStage *stage;
307   ClutterActor *source;
308 
309   gfloat x;
310   gfloat y;
311   ClutterScrollDirection direction;
312   ClutterModifierType modifier_state;
313   gdouble *axes; /* future use */
314   ClutterInputDevice *device;
315   ClutterScrollSource scroll_source;
316   ClutterScrollFinishFlags finish_flags;
317 };
318 
319 /**
320  * ClutterStageStateEvent:
321  * @type: event type
322  * @time: event time
323  * @flags: event flags
324  * @stage: event source stage
325  * @source: event source actor (unused)
326  * @changed_mask: bitwise OR of the changed flags
327  * @new_state: bitwise OR of the current state flags
328  *
329  * Event signalling a change in the #ClutterStage state.
330  *
331  * Since: 0.2
332  */
333 struct _ClutterStageStateEvent
334 {
335   ClutterEventType type;
336   guint32 time;
337   ClutterEventFlags flags;
338   ClutterStage *stage;
339   ClutterActor *source; /* XXX: should probably be the stage itself */
340 
341   ClutterStageState changed_mask;
342   ClutterStageState new_state;
343 };
344 
345 /**
346  * ClutterTouchEvent:
347  * @type: event type
348  * @time: event time
349  * @flags: event flags
350  * @stage: event source stage
351  * @source: event source actor (unused)
352  * @x: the X coordinate of the pointer, relative to the stage
353  * @y: the Y coordinate of the pointer, relative to the stage
354  * @sequence: the event sequence that this event belongs to
355  * @modifier_state: (type ClutterModifierType): a bit-mask representing the state
356  *   of modifier keys (e.g. Control, Shift, and Alt) and the pointer
357  *   buttons. See #ClutterModifierType
358  * @axes: reserved
359  * @device: the device that originated the event. If you want the physical
360  * device the event originated from, use clutter_event_get_source_device()
361  *
362  * Used for touch events.
363  *
364  * The @type field will be one of %CLUTTER_TOUCH_BEGIN, %CLUTTER_TOUCH_END,
365  * %CLUTTER_TOUCH_UPDATE, or %CLUTTER_TOUCH_CANCEL.
366  *
367  * Touch events are grouped into sequences; each touch sequence will begin
368  * with a %CLUTTER_TOUCH_BEGIN event, progress with %CLUTTER_TOUCH_UPDATE
369  * events, and end either with a %CLUTTER_TOUCH_END event or with a
370  * %CLUTTER_TOUCH_CANCEL event.
371  *
372  * With multi-touch capable devices there can be multiple event sequence
373  * running at the same time.
374  *
375  * Since: 1.10
376  */
377 struct _ClutterTouchEvent
378 {
379   ClutterEventType type;
380   guint32 time;
381   ClutterEventFlags flags;
382   ClutterStage *stage;
383   ClutterActor *source;
384 
385   gfloat x;
386   gfloat y;
387   ClutterEventSequence *sequence;
388   ClutterModifierType modifier_state;
389   gdouble *axes; /* reserved */
390   ClutterInputDevice *device;
391 };
392 
393 /**
394  * ClutterTouchpadPinchEvent:
395  * @type: event type
396  * @time: event time
397  * @flags: event flags
398  * @stage: event source stage
399  * @source: event source actor (unused)
400  * @phase: the current phase of the gesture
401  * @x: the X coordinate of the pointer, relative to the stage
402  * @y: the Y coordinate of the pointer, relative to the stage
403  * @dx: movement delta of the pinch focal point in the X axis
404  * @dy: movement delta of the pinch focal point in the Y axis
405  * @angle_delta: angle delta in degrees, clockwise rotations are
406  *   represented by positive deltas
407  * @scale: the current scale
408  *
409  * Used for touchpad pinch gesture events. The current state of the
410  * gesture will be determined by the @phase field.
411  *
412  * Each event with phase %CLUTTER_TOUCHPAD_GESTURE_PHASE_BEGIN
413  * will report a @scale of 1.0, all later phases in the gesture
414  * report the current scale relative to the initial 1.0 value
415  * (eg. 0.5 being half the size, 2.0 twice as big).
416  *
417  * Since: 1.24
418  */
419 struct _ClutterTouchpadPinchEvent
420 {
421   ClutterEventType type;
422   guint32 time;
423   ClutterEventFlags flags;
424   ClutterStage *stage;
425   ClutterActor *source;
426 
427   ClutterTouchpadGesturePhase phase;
428   gfloat x;
429   gfloat y;
430   gfloat dx;
431   gfloat dy;
432   gfloat angle_delta;
433   gfloat scale;
434 };
435 
436 /**
437  * ClutterTouchpadSwipeEvent
438  * @type: event type
439  * @time: event time
440  * @flags: event flags
441  * @stage: event source stage
442  * @source: event source actor (unused)
443  * @phase: the current phase of the gesture
444  * @n_fingers: the number of fingers triggering the swipe
445  * @x: the X coordinate of the pointer, relative to the stage
446  * @y: the Y coordinate of the pointer, relative to the stage
447  * @dx: movement delta of the pinch focal point in the X axis
448  * @dy: movement delta of the pinch focal point in the Y axis
449  *
450  * Used for touchpad swipe gesture events. The current state of the
451  * gesture will be determined by the @phase field.
452  *
453  * Since: 1.24
454  */
455 struct _ClutterTouchpadSwipeEvent
456 {
457   ClutterEventType type;
458   guint32 time;
459   ClutterEventFlags flags;
460   ClutterStage *stage;
461   ClutterActor *source;
462 
463   ClutterTouchpadGesturePhase phase;
464   guint n_fingers;
465   gfloat x;
466   gfloat y;
467   gfloat dx;
468   gfloat dy;
469 };
470 
471 /**
472  * ClutterEvent:
473  *
474  * Generic event wrapper.
475  *
476  * Since: 0.2
477  */
478 union _ClutterEvent
479 {
480   /*< private >*/
481   ClutterEventType type;
482 
483   ClutterAnyEvent any;
484   ClutterButtonEvent button;
485   ClutterKeyEvent key;
486   ClutterMotionEvent motion;
487   ClutterScrollEvent scroll;
488   ClutterStageStateEvent stage_state;
489   ClutterCrossingEvent crossing;
490   ClutterTouchEvent touch;
491   ClutterTouchpadPinchEvent touchpad_pinch;
492   ClutterTouchpadSwipeEvent touchpad_swipe;
493 };
494 
495 /**
496  * ClutterEventFilterFunc:
497  * @event: the event that is going to be emitted
498  * @user_data: the data pointer passed to clutter_event_add_filter()
499  *
500  * A function pointer type used by event filters that are added with
501  * clutter_event_add_filter().
502  *
503  * Return value: %CLUTTER_EVENT_STOP to indicate that the event
504  *   has been handled or %CLUTTER_EVENT_PROPAGATE otherwise.
505  *   Returning %CLUTTER_EVENT_STOP skips any further filter
506  *   functions and prevents the signal emission for the event.
507  *
508  * Since: 1.18
509  */
510 typedef gboolean (* ClutterEventFilterFunc) (const ClutterEvent *event,
511                                              gpointer            user_data);
512 
513 CLUTTER_AVAILABLE_IN_ALL
514 GType clutter_event_get_type (void) G_GNUC_CONST;
515 
516 CLUTTER_AVAILABLE_IN_1_20
517 GType clutter_event_sequence_get_type (void) G_GNUC_CONST;
518 
519 CLUTTER_AVAILABLE_IN_ALL
520 gboolean                clutter_events_pending                  (void);
521 CLUTTER_AVAILABLE_IN_ALL
522 ClutterEvent *          clutter_event_get                       (void);
523 CLUTTER_AVAILABLE_IN_ALL
524 ClutterEvent *          clutter_event_peek                      (void);
525 CLUTTER_AVAILABLE_IN_ALL
526 void                    clutter_event_put                       (const ClutterEvent     *event);
527 
528 CLUTTER_AVAILABLE_IN_1_18
529 guint                   clutter_event_add_filter                (ClutterStage          *stage,
530                                                                  ClutterEventFilterFunc func,
531                                                                  GDestroyNotify         notify,
532                                                                  gpointer               user_data);
533 CLUTTER_AVAILABLE_IN_1_18
534 void                    clutter_event_remove_filter             (guint                  id);
535 
536 CLUTTER_AVAILABLE_IN_ALL
537 ClutterEvent *          clutter_event_new                       (ClutterEventType        type);
538 CLUTTER_AVAILABLE_IN_ALL
539 ClutterEvent *          clutter_event_copy                      (const ClutterEvent     *event);
540 CLUTTER_AVAILABLE_IN_ALL
541 void                    clutter_event_free                      (ClutterEvent           *event);
542 
543 CLUTTER_AVAILABLE_IN_ALL
544 ClutterEventType        clutter_event_type                      (const ClutterEvent     *event);
545 CLUTTER_AVAILABLE_IN_1_8
546 void                    clutter_event_set_flags                 (ClutterEvent           *event,
547                                                                  ClutterEventFlags       flags);
548 CLUTTER_AVAILABLE_IN_1_0
549 ClutterEventFlags       clutter_event_get_flags                 (const ClutterEvent     *event);
550 CLUTTER_AVAILABLE_IN_1_8
551 void                    clutter_event_set_time                  (ClutterEvent           *event,
552                                                                  guint32                 time_);
553 CLUTTER_AVAILABLE_IN_ALL
554 guint32                 clutter_event_get_time                  (const ClutterEvent     *event);
555 CLUTTER_AVAILABLE_IN_1_8
556 void                    clutter_event_set_state                 (ClutterEvent           *event,
557                                                                  ClutterModifierType     state);
558 CLUTTER_AVAILABLE_IN_ALL
559 ClutterModifierType     clutter_event_get_state                 (const ClutterEvent     *event);
560 CLUTTER_AVAILABLE_IN_1_16
561 void                    clutter_event_get_state_full            (const ClutterEvent     *event,
562 								 ClutterModifierType    *button_state,
563 								 ClutterModifierType    *base_state,
564 								 ClutterModifierType    *latched_state,
565 								 ClutterModifierType    *locked_state,
566 								 ClutterModifierType    *effective_state);
567 CLUTTER_AVAILABLE_IN_1_6
568 void                    clutter_event_set_device                (ClutterEvent           *event,
569                                                                  ClutterInputDevice     *device);
570 CLUTTER_AVAILABLE_IN_1_6
571 ClutterInputDevice *    clutter_event_get_device                (const ClutterEvent     *event);
572 CLUTTER_AVAILABLE_IN_1_6
573 void                    clutter_event_set_source_device         (ClutterEvent           *event,
574                                                                  ClutterInputDevice     *device);
575 
576 CLUTTER_AVAILABLE_IN_1_6
577 ClutterInputDevice *    clutter_event_get_source_device         (const ClutterEvent     *event);
578 CLUTTER_AVAILABLE_IN_1_8
579 void                    clutter_event_set_source                (ClutterEvent           *event,
580                                                                  ClutterActor           *actor);
581 CLUTTER_AVAILABLE_IN_ALL
582 ClutterActor *          clutter_event_get_source                (const ClutterEvent     *event);
583 CLUTTER_AVAILABLE_IN_1_8
584 void                    clutter_event_set_stage                 (ClutterEvent           *event,
585                                                                  ClutterStage           *stage);
586 CLUTTER_AVAILABLE_IN_ALL
587 ClutterStage *          clutter_event_get_stage                 (const ClutterEvent     *event);
588 CLUTTER_AVAILABLE_IN_ALL
589 gint                    clutter_event_get_device_id             (const ClutterEvent     *event);
590 CLUTTER_AVAILABLE_IN_1_0
591 ClutterInputDeviceType  clutter_event_get_device_type           (const ClutterEvent     *event);
592 CLUTTER_AVAILABLE_IN_1_8
593 void                    clutter_event_set_coords                (ClutterEvent           *event,
594                                                                  gfloat                  x,
595                                                                  gfloat                  y);
596 CLUTTER_AVAILABLE_IN_ALL
597 void                    clutter_event_get_coords                (const ClutterEvent     *event,
598                                                                  gfloat                 *x,
599                                                                  gfloat                 *y);
600 CLUTTER_AVAILABLE_IN_1_12
601 void                    clutter_event_get_position              (const ClutterEvent     *event,
602                                                                  ClutterPoint           *position);
603 CLUTTER_AVAILABLE_IN_1_12
604 float                   clutter_event_get_distance              (const ClutterEvent     *source,
605                                                                  const ClutterEvent     *target);
606 CLUTTER_AVAILABLE_IN_1_12
607 double                  clutter_event_get_angle                 (const ClutterEvent     *source,
608                                                                  const ClutterEvent     *target);
609 CLUTTER_AVAILABLE_IN_1_6
610 gdouble *               clutter_event_get_axes                  (const ClutterEvent     *event,
611                                                                  guint                  *n_axes);
612 CLUTTER_AVAILABLE_IN_1_12
613 gboolean                clutter_event_has_shift_modifier        (const ClutterEvent     *event);
614 CLUTTER_AVAILABLE_IN_1_12
615 gboolean                clutter_event_has_control_modifier      (const ClutterEvent     *event);
616 CLUTTER_AVAILABLE_IN_1_12
617 gboolean                clutter_event_is_pointer_emulated       (const ClutterEvent     *event);
618 CLUTTER_AVAILABLE_IN_1_8
619 void                    clutter_event_set_key_symbol            (ClutterEvent           *event,
620                                                                  guint                   key_sym);
621 CLUTTER_AVAILABLE_IN_1_0
622 guint                   clutter_event_get_key_symbol            (const ClutterEvent     *event);
623 CLUTTER_AVAILABLE_IN_1_8
624 void                    clutter_event_set_key_code              (ClutterEvent           *event,
625                                                                  guint16                 key_code);
626 CLUTTER_AVAILABLE_IN_1_0
627 guint16                 clutter_event_get_key_code              (const ClutterEvent     *event);
628 CLUTTER_AVAILABLE_IN_1_8
629 void                    clutter_event_set_key_unicode           (ClutterEvent           *event,
630                                                                  gunichar                key_unicode);
631 CLUTTER_AVAILABLE_IN_1_0
632 gunichar                clutter_event_get_key_unicode           (const ClutterEvent     *event);
633 CLUTTER_AVAILABLE_IN_1_8
634 void                    clutter_event_set_button                (ClutterEvent           *event,
635                                                                  guint32                 button);
636 CLUTTER_AVAILABLE_IN_1_0
637 guint32                 clutter_event_get_button                (const ClutterEvent     *event);
638 CLUTTER_AVAILABLE_IN_1_0
639 guint                   clutter_event_get_click_count           (const ClutterEvent     *event);
640 CLUTTER_AVAILABLE_IN_1_8
641 void                    clutter_event_set_related               (ClutterEvent           *event,
642                                                                  ClutterActor           *actor);
643 CLUTTER_AVAILABLE_IN_1_0
644 ClutterActor *          clutter_event_get_related               (const ClutterEvent     *event);
645 CLUTTER_AVAILABLE_IN_1_8
646 void                    clutter_event_set_scroll_direction      (ClutterEvent           *event,
647                                                                  ClutterScrollDirection  direction);
648 CLUTTER_AVAILABLE_IN_1_0
649 ClutterScrollDirection  clutter_event_get_scroll_direction      (const ClutterEvent     *event);
650 CLUTTER_AVAILABLE_IN_1_10
651 void                    clutter_event_set_scroll_delta          (ClutterEvent           *event,
652                                                                  gdouble                 dx,
653                                                                  gdouble                 dy);
654 CLUTTER_AVAILABLE_IN_1_10
655 void                    clutter_event_get_scroll_delta          (const ClutterEvent     *event,
656                                                                  gdouble                *dx,
657                                                                  gdouble                *dy);
658 
659 CLUTTER_AVAILABLE_IN_1_10
660 ClutterEventSequence *  clutter_event_get_event_sequence        (const ClutterEvent     *event);
661 
662 CLUTTER_AVAILABLE_IN_ALL
663 guint32                 clutter_keysym_to_unicode               (guint                   keyval);
664 CLUTTER_AVAILABLE_IN_1_10
665 guint                   clutter_unicode_to_keysym               (guint32                 wc);
666 
667 CLUTTER_AVAILABLE_IN_1_0
668 guint32                 clutter_get_current_event_time          (void);
669 CLUTTER_AVAILABLE_IN_1_2
670 const ClutterEvent *    clutter_get_current_event               (void);
671 
672 CLUTTER_AVAILABLE_IN_1_24
673 guint                   clutter_event_get_gesture_swipe_finger_count (const ClutterEvent     *event);
674 
675 CLUTTER_AVAILABLE_IN_1_24
676 gdouble                 clutter_event_get_gesture_pinch_angle_delta  (const ClutterEvent     *event);
677 
678 CLUTTER_AVAILABLE_IN_1_24
679 gdouble                 clutter_event_get_gesture_pinch_scale        (const ClutterEvent     *event);
680 
681 CLUTTER_AVAILABLE_IN_1_24
682 ClutterTouchpadGesturePhase clutter_event_get_gesture_phase          (const ClutterEvent     *event);
683 
684 CLUTTER_AVAILABLE_IN_1_24
685 void                    clutter_event_get_gesture_motion_delta       (const ClutterEvent     *event,
686                                                                       gdouble                *dx,
687                                                                       gdouble                *dy);
688 
689 ClutterScrollSource      clutter_event_get_scroll_source             (const ClutterEvent     *event);
690 ClutterScrollFinishFlags clutter_event_get_scroll_finish_flags       (const ClutterEvent     *event);
691 
692 G_END_DECLS
693 
694 #endif /* __CLUTTER_EVENT_H__ */
695