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