gdk: Add touchpad gesture events and event types.
Each gesture type has its separate GdkEvent struct, and begin/update/ end/cancel event types. There is support for multi-finger swipe (3-4 fingers), and 2-finger rotate/pinch gestures.
This commit is contained in:
		@ -883,6 +883,8 @@ GdkEventWindowState
 | 
				
			|||||||
GdkEventSetting
 | 
					GdkEventSetting
 | 
				
			||||||
GdkEventOwnerChange
 | 
					GdkEventOwnerChange
 | 
				
			||||||
GdkEventGrabBroken
 | 
					GdkEventGrabBroken
 | 
				
			||||||
 | 
					GdkEventTouchpadSwipe
 | 
				
			||||||
 | 
					GdkEventTouchpadPinch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<SUBSECTION>
 | 
					<SUBSECTION>
 | 
				
			||||||
GdkScrollDirection
 | 
					GdkScrollDirection
 | 
				
			||||||
 | 
				
			|||||||
@ -570,6 +570,24 @@ gdk_event_new (GdkEventType type)
 | 
				
			|||||||
      new_event->crossing.x_root = 0.;
 | 
					      new_event->crossing.x_root = 0.;
 | 
				
			||||||
      new_event->crossing.y_root = 0.;
 | 
					      new_event->crossing.y_root = 0.;
 | 
				
			||||||
      break;
 | 
					      break;
 | 
				
			||||||
 | 
					    case GDK_TOUCHPAD_SWIPE:
 | 
				
			||||||
 | 
					      new_event->touchpad_swipe.x = 0;
 | 
				
			||||||
 | 
					      new_event->touchpad_swipe.y = 0;
 | 
				
			||||||
 | 
					      new_event->touchpad_swipe.dx = 0;
 | 
				
			||||||
 | 
					      new_event->touchpad_swipe.dy = 0;
 | 
				
			||||||
 | 
					      new_event->touchpad_swipe.x_root = 0;
 | 
				
			||||||
 | 
					      new_event->touchpad_swipe.y_root = 0;
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					    case GDK_TOUCHPAD_PINCH:
 | 
				
			||||||
 | 
					      new_event->touchpad_pinch.x = 0;
 | 
				
			||||||
 | 
					      new_event->touchpad_pinch.y = 0;
 | 
				
			||||||
 | 
					      new_event->touchpad_pinch.dx = 0;
 | 
				
			||||||
 | 
					      new_event->touchpad_pinch.dy = 0;
 | 
				
			||||||
 | 
					      new_event->touchpad_pinch.angle_delta = 0;
 | 
				
			||||||
 | 
					      new_event->touchpad_pinch.scale = 0;
 | 
				
			||||||
 | 
					      new_event->touchpad_pinch.x_root = 0;
 | 
				
			||||||
 | 
					      new_event->touchpad_pinch.y_root = 0;
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
    default:
 | 
					    default:
 | 
				
			||||||
      break;
 | 
					      break;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -863,6 +881,10 @@ gdk_event_get_time (const GdkEvent *event)
 | 
				
			|||||||
      case GDK_TOUCH_END:
 | 
					      case GDK_TOUCH_END:
 | 
				
			||||||
      case GDK_TOUCH_CANCEL:
 | 
					      case GDK_TOUCH_CANCEL:
 | 
				
			||||||
        return event->touch.time;
 | 
					        return event->touch.time;
 | 
				
			||||||
 | 
					      case GDK_TOUCHPAD_SWIPE:
 | 
				
			||||||
 | 
					        return event->touchpad_swipe.time;
 | 
				
			||||||
 | 
					      case GDK_TOUCHPAD_PINCH:
 | 
				
			||||||
 | 
					        return event->touchpad_pinch.time;
 | 
				
			||||||
      case GDK_SCROLL:
 | 
					      case GDK_SCROLL:
 | 
				
			||||||
        return event->scroll.time;
 | 
					        return event->scroll.time;
 | 
				
			||||||
      case GDK_KEY_PRESS:
 | 
					      case GDK_KEY_PRESS:
 | 
				
			||||||
@ -946,6 +968,12 @@ gdk_event_get_state (const GdkEvent        *event,
 | 
				
			|||||||
      case GDK_TOUCH_CANCEL:
 | 
					      case GDK_TOUCH_CANCEL:
 | 
				
			||||||
        *state = event->touch.state;
 | 
					        *state = event->touch.state;
 | 
				
			||||||
        return TRUE;
 | 
					        return TRUE;
 | 
				
			||||||
 | 
					      case GDK_TOUCHPAD_SWIPE:
 | 
				
			||||||
 | 
					        *state = event->touchpad_swipe.state;
 | 
				
			||||||
 | 
					        return TRUE;
 | 
				
			||||||
 | 
					      case GDK_TOUCHPAD_PINCH:
 | 
				
			||||||
 | 
					        *state = event->touchpad_pinch.state;
 | 
				
			||||||
 | 
					        return TRUE;
 | 
				
			||||||
      case GDK_SCROLL:
 | 
					      case GDK_SCROLL:
 | 
				
			||||||
	*state =  event->scroll.state;
 | 
						*state =  event->scroll.state;
 | 
				
			||||||
        return TRUE;
 | 
					        return TRUE;
 | 
				
			||||||
@ -1046,6 +1074,14 @@ gdk_event_get_coords (const GdkEvent *event,
 | 
				
			|||||||
      x = event->motion.x;
 | 
					      x = event->motion.x;
 | 
				
			||||||
      y = event->motion.y;
 | 
					      y = event->motion.y;
 | 
				
			||||||
      break;
 | 
					      break;
 | 
				
			||||||
 | 
					    case GDK_TOUCHPAD_SWIPE:
 | 
				
			||||||
 | 
					      x = event->touchpad_swipe.x;
 | 
				
			||||||
 | 
					      y = event->touchpad_swipe.y;
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					    case GDK_TOUCHPAD_PINCH:
 | 
				
			||||||
 | 
					      x = event->touchpad_pinch.x;
 | 
				
			||||||
 | 
					      y = event->touchpad_pinch.y;
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
    default:
 | 
					    default:
 | 
				
			||||||
      fetched = FALSE;
 | 
					      fetched = FALSE;
 | 
				
			||||||
      break;
 | 
					      break;
 | 
				
			||||||
@ -1117,6 +1153,14 @@ gdk_event_get_root_coords (const GdkEvent *event,
 | 
				
			|||||||
      x = event->dnd.x_root;
 | 
					      x = event->dnd.x_root;
 | 
				
			||||||
      y = event->dnd.y_root;
 | 
					      y = event->dnd.y_root;
 | 
				
			||||||
      break;
 | 
					      break;
 | 
				
			||||||
 | 
					    case GDK_TOUCHPAD_SWIPE:
 | 
				
			||||||
 | 
					      x = event->touchpad_swipe.x_root;
 | 
				
			||||||
 | 
					      y = event->touchpad_swipe.y_root;
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					    case GDK_TOUCHPAD_PINCH:
 | 
				
			||||||
 | 
					      x = event->touchpad_pinch.x_root;
 | 
				
			||||||
 | 
					      y = event->touchpad_pinch.y_root;
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
    default:
 | 
					    default:
 | 
				
			||||||
      fetched = FALSE;
 | 
					      fetched = FALSE;
 | 
				
			||||||
      break;
 | 
					      break;
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										127
									
								
								gdk/gdkevents.h
									
									
									
									
									
								
							
							
						
						
									
										127
									
								
								gdk/gdkevents.h
									
									
									
									
									
								
							@ -139,6 +139,8 @@ typedef struct _GdkEventDND         GdkEventDND;
 | 
				
			|||||||
typedef struct _GdkEventWindowState GdkEventWindowState;
 | 
					typedef struct _GdkEventWindowState GdkEventWindowState;
 | 
				
			||||||
typedef struct _GdkEventSetting     GdkEventSetting;
 | 
					typedef struct _GdkEventSetting     GdkEventSetting;
 | 
				
			||||||
typedef struct _GdkEventGrabBroken  GdkEventGrabBroken;
 | 
					typedef struct _GdkEventGrabBroken  GdkEventGrabBroken;
 | 
				
			||||||
 | 
					typedef struct _GdkEventTouchpadSwipe GdkEventTouchpadSwipe;
 | 
				
			||||||
 | 
					typedef struct _GdkEventTouchpadPinch GdkEventTouchpadPinch;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef struct _GdkEventSequence    GdkEventSequence;
 | 
					typedef struct _GdkEventSequence    GdkEventSequence;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -271,6 +273,10 @@ typedef GdkFilterReturn (*GdkFilterFunc) (GdkXEvent *xevent,
 | 
				
			|||||||
 *   was added in 3.4.
 | 
					 *   was added in 3.4.
 | 
				
			||||||
 * @GDK_TOUCH_CANCEL: A touch event sequence has been canceled. This event type
 | 
					 * @GDK_TOUCH_CANCEL: A touch event sequence has been canceled. This event type
 | 
				
			||||||
 *   was added in 3.4.
 | 
					 *   was added in 3.4.
 | 
				
			||||||
 | 
					 * @GDK_TOUCHPAD_SWIPE: A touchpad swipe gesture event, the current state
 | 
				
			||||||
 | 
					 *   is determined by its phase field. This event type was added in 3.18.
 | 
				
			||||||
 | 
					 * @GDK_TOUCHPAD_PINCH: A touchpad pinch gesture event, the current state
 | 
				
			||||||
 | 
					 *   is determined by its phase field. This event type was added in 3.18.
 | 
				
			||||||
 * @GDK_EVENT_LAST: marks the end of the GdkEventType enumeration. Added in 2.18
 | 
					 * @GDK_EVENT_LAST: marks the end of the GdkEventType enumeration. Added in 2.18
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * Specifies the type of the event.
 | 
					 * Specifies the type of the event.
 | 
				
			||||||
@ -331,6 +337,8 @@ typedef enum
 | 
				
			|||||||
  GDK_TOUCH_UPDATE      = 38,
 | 
					  GDK_TOUCH_UPDATE      = 38,
 | 
				
			||||||
  GDK_TOUCH_END         = 39,
 | 
					  GDK_TOUCH_END         = 39,
 | 
				
			||||||
  GDK_TOUCH_CANCEL      = 40,
 | 
					  GDK_TOUCH_CANCEL      = 40,
 | 
				
			||||||
 | 
					  GDK_TOUCHPAD_SWIPE    = 41,
 | 
				
			||||||
 | 
					  GDK_TOUCHPAD_PINCH    = 42,
 | 
				
			||||||
  GDK_EVENT_LAST        /* helper variable for decls */
 | 
					  GDK_EVENT_LAST        /* helper variable for decls */
 | 
				
			||||||
} GdkEventType;
 | 
					} GdkEventType;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -349,6 +357,43 @@ typedef enum
 | 
				
			|||||||
  GDK_VISIBILITY_FULLY_OBSCURED
 | 
					  GDK_VISIBILITY_FULLY_OBSCURED
 | 
				
			||||||
} GdkVisibilityState;
 | 
					} GdkVisibilityState;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * GdkTouchpadGesturePhase:
 | 
				
			||||||
 | 
					 * @GDK_TOUCHPAD_GESTURE_PHASE_BEGIN: The gesture has begun.
 | 
				
			||||||
 | 
					 * @GDK_TOUCHPAD_GESTURE_PHASE_UPDATE: The gesture has been updated.
 | 
				
			||||||
 | 
					 * @GDK_TOUCHPAD_GESTURE_PHASE_END: The gesture was finished, changes
 | 
				
			||||||
 | 
					 *   should be permanently applied.
 | 
				
			||||||
 | 
					 * @GDK_TOUCHPAD_GESTURE_PHASE_CANCEL: The gesture was cancelled, all
 | 
				
			||||||
 | 
					 *   changes should be undone.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Specifies the current state of a touchpad gesture. All gestures are
 | 
				
			||||||
 | 
					 * guaranteed to begin with an event with phase %GDK_TOUCHPAD_GESTURE_PHASE_BEGIN,
 | 
				
			||||||
 | 
					 * followed by 0 or several events with phase %GDK_TOUCHPAD_GESTURE_PHASE_UPDATE.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * A finished gesture may have 2 possible outcomes, an event with phase
 | 
				
			||||||
 | 
					 * %GDK_TOUCHPAD_GESTURE_PHASE_END will be emitted when the gesture is
 | 
				
			||||||
 | 
					 * considered successful, this should be used as the hint to perform any
 | 
				
			||||||
 | 
					 * permanent changes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 * Cancelled gestures may be so for a variety of reasons, due to hardware
 | 
				
			||||||
 | 
					 * or the compositor, or due to the gesture recognition layers hinting the
 | 
				
			||||||
 | 
					 * gesture did not finish resolutely (eg. a 3rd finger being added during
 | 
				
			||||||
 | 
					 * a pinch gesture). In these cases, the last event will report the phase
 | 
				
			||||||
 | 
					 * %GDK_TOUCHPAD_GESTURE_PHASE_CANCEL, this should be used as a hint
 | 
				
			||||||
 | 
					 * to undo any visible/permanent changes that were done throughout the
 | 
				
			||||||
 | 
					 * progress of the gesture.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * See also #GdkEventTouchpadSwipe and #GdkEventTouchpadPinch.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					typedef enum
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  GDK_TOUCHPAD_GESTURE_PHASE_BEGIN,
 | 
				
			||||||
 | 
					  GDK_TOUCHPAD_GESTURE_PHASE_UPDATE,
 | 
				
			||||||
 | 
					  GDK_TOUCHPAD_GESTURE_PHASE_END,
 | 
				
			||||||
 | 
					  GDK_TOUCHPAD_GESTURE_PHASE_CANCEL
 | 
				
			||||||
 | 
					} GdkTouchpadGesturePhase;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * GdkScrollDirection:
 | 
					 * GdkScrollDirection:
 | 
				
			||||||
 * @GDK_SCROLL_UP: the window is scrolled up.
 | 
					 * @GDK_SCROLL_UP: the window is scrolled up.
 | 
				
			||||||
@ -1113,6 +1158,86 @@ struct _GdkEventDND {
 | 
				
			|||||||
  gshort x_root, y_root;
 | 
					  gshort x_root, y_root;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * GdkEventTouchpadSwipe:
 | 
				
			||||||
 | 
					 * @type: the type of the event (%GDK_TOUCHPAD_SWIPE)
 | 
				
			||||||
 | 
					 * @window: the window which received the event
 | 
				
			||||||
 | 
					 * @send_event: %TRUE if the event was sent explicitly
 | 
				
			||||||
 | 
					 * @phase: (type GdkTouchpadGesturePhase): the current phase of the gesture
 | 
				
			||||||
 | 
					 * @n_fingers: The number of fingers triggering the swipe
 | 
				
			||||||
 | 
					 * @time: the time of the event in milliseconds
 | 
				
			||||||
 | 
					 * @x: The X coordinate of the pointer
 | 
				
			||||||
 | 
					 * @y: The Y coordinate of the pointer
 | 
				
			||||||
 | 
					 * @dx: Movement delta in the X axis of the swipe focal point
 | 
				
			||||||
 | 
					 * @dy: Movement delta in the Y axis of the swipe focal point
 | 
				
			||||||
 | 
					 * @x_root: The X coordinate of the pointer, relative to the
 | 
				
			||||||
 | 
					 *   root of the screen.
 | 
				
			||||||
 | 
					 * @y_root: The Y coordinate of the pointer, relative to the
 | 
				
			||||||
 | 
					 *   root of the screen.
 | 
				
			||||||
 | 
					 * @state: (type GdkModifierType): a bit-mask representing the state of
 | 
				
			||||||
 | 
					 *   the modifier keys (e.g. Control, Shift and Alt) and the pointer
 | 
				
			||||||
 | 
					 *   buttons. See #GdkModifierType.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Generated during touchpad swipe gestures.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					struct _GdkEventTouchpadSwipe {
 | 
				
			||||||
 | 
					  GdkEventType type;
 | 
				
			||||||
 | 
					  GdkWindow *window;
 | 
				
			||||||
 | 
					  gint8 send_event;
 | 
				
			||||||
 | 
					  gint8 phase;
 | 
				
			||||||
 | 
					  gint8 n_fingers;
 | 
				
			||||||
 | 
					  guint32 time;
 | 
				
			||||||
 | 
					  gdouble x;
 | 
				
			||||||
 | 
					  gdouble y;
 | 
				
			||||||
 | 
					  gdouble dx;
 | 
				
			||||||
 | 
					  gdouble dy;
 | 
				
			||||||
 | 
					  gdouble x_root, y_root;
 | 
				
			||||||
 | 
					  guint state;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * GdkEventTouchpadPinch:
 | 
				
			||||||
 | 
					 * @type: the type of the event (%GDK_TOUCHPAD_PINCH)
 | 
				
			||||||
 | 
					 * @window: the window which received the event
 | 
				
			||||||
 | 
					 * @send_event: %TRUE if the event was sent explicitly
 | 
				
			||||||
 | 
					 * @phase: (type GdkTouchpadGesturePhase): the current phase of the gesture
 | 
				
			||||||
 | 
					 * @n_fingers: The number of fingers triggering the pinch
 | 
				
			||||||
 | 
					 * @time: the time of the event in milliseconds
 | 
				
			||||||
 | 
					 * @x: The X coordinate of the pointer
 | 
				
			||||||
 | 
					 * @y: The Y coordinate of the pointer
 | 
				
			||||||
 | 
					 * @dx: Movement delta in the X axis of the swipe focal point
 | 
				
			||||||
 | 
					 * @dy: Movement delta in the Y axis of the swipe focal point
 | 
				
			||||||
 | 
					 * @angle_delta: The angle change in radians, negative angles
 | 
				
			||||||
 | 
					 *   denote counter-clockwise movements
 | 
				
			||||||
 | 
					 * @scale: The current scale, relative to that at the time of
 | 
				
			||||||
 | 
					 *   the corresponding %GDK_TOUCHPAD_GESTURE_PHASE_BEGIN event
 | 
				
			||||||
 | 
					 * @x_root: The X coordinate of the pointer, relative to the
 | 
				
			||||||
 | 
					 *   root of the screen.
 | 
				
			||||||
 | 
					 * @y_root: The Y coordinate of the pointer, relative to the
 | 
				
			||||||
 | 
					 *   root of the screen.
 | 
				
			||||||
 | 
					 * @state: (type GdkModifierType): a bit-mask representing the state of
 | 
				
			||||||
 | 
					 *   the modifier keys (e.g. Control, Shift and Alt) and the pointer
 | 
				
			||||||
 | 
					 *   buttons. See #GdkModifierType.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Generated during touchpad swipe gestures.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					struct _GdkEventTouchpadPinch {
 | 
				
			||||||
 | 
					  GdkEventType type;
 | 
				
			||||||
 | 
					  GdkWindow *window;
 | 
				
			||||||
 | 
					  gint8 send_event;
 | 
				
			||||||
 | 
					  gint8 phase;
 | 
				
			||||||
 | 
					  gint8 n_fingers;
 | 
				
			||||||
 | 
					  guint32 time;
 | 
				
			||||||
 | 
					  gdouble x;
 | 
				
			||||||
 | 
					  gdouble y;
 | 
				
			||||||
 | 
					  gdouble dx;
 | 
				
			||||||
 | 
					  gdouble dy;
 | 
				
			||||||
 | 
					  gdouble angle_delta;
 | 
				
			||||||
 | 
					  gdouble scale;
 | 
				
			||||||
 | 
					  gdouble x_root, y_root;
 | 
				
			||||||
 | 
					  guint state;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * GdkEvent:
 | 
					 * GdkEvent:
 | 
				
			||||||
 * @type: the #GdkEventType
 | 
					 * @type: the #GdkEventType
 | 
				
			||||||
@ -1189,6 +1314,8 @@ union _GdkEvent
 | 
				
			|||||||
  GdkEventWindowState       window_state;
 | 
					  GdkEventWindowState       window_state;
 | 
				
			||||||
  GdkEventSetting           setting;
 | 
					  GdkEventSetting           setting;
 | 
				
			||||||
  GdkEventGrabBroken        grab_broken;
 | 
					  GdkEventGrabBroken        grab_broken;
 | 
				
			||||||
 | 
					  GdkEventTouchpadSwipe     touchpad_swipe;
 | 
				
			||||||
 | 
					  GdkEventTouchpadPinch     touchpad_pinch;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GDK_AVAILABLE_IN_ALL
 | 
					GDK_AVAILABLE_IN_ALL
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user