Class
GtkGesture
Description [src]
abstract class Gtk.Gesture : Gtk.EventController
{
/* No available fields */
}
GtkGesture
is the base class for gesture recognition.
Although GtkGesture
is quite generalized to serve as a base for
multi-touch gestures, it is suitable to implement single-touch and
pointer-based gestures (using the special NULL
GdkEventSequence
value for these).
The number of touches that a GtkGesture
need to be recognized is
controlled by the GtkGesture:n-points
property, if a
gesture is keeping track of less or more than that number of sequences,
it won’t check whether the gesture is recognized.
As soon as the gesture has the expected number of touches, it will check
regularly if it is recognized, the criteria to consider a gesture as
“recognized” is left to GtkGesture
subclasses.
A recognized gesture will then emit the following signals:
GtkGesture::begin
when the gesture is recognized.GtkGesture::update
, whenever an input event is processed.GtkGesture::end
when the gesture is no longer recognized.
Event propagation
In order to receive events, a gesture needs to set a propagation phase
through gtk_event_controller_set_propagation_phase()
.
In the capture phase, events are propagated from the toplevel down to the target widget, and gestures that are attached to containers above the widget get a chance to interact with the event before it reaches the target.
In the bubble phase, events are propagated up from the target widget to the toplevel, and gestures that are attached to containers above the widget get a chance to interact with events that have not been handled yet.
States of a sequence
Whenever input interaction happens, a single event may trigger a cascade
of GtkGesture
s, both across the parents of the widget receiving the
event and in parallel within an individual widget. It is a responsibility
of the widgets using those gestures to set the state of touch sequences
accordingly in order to enable cooperation of gestures around the
GdkEventSequence
s triggering those.
Within a widget, gestures can be grouped through gtk_gesture_group()
.
Grouped gestures synchronize the state of sequences, so calling
gtk_gesture_set_state()
on one will effectively propagate
the state throughout the group.
By default, all sequences start out in the GTK_EVENT_SEQUENCE_NONE
state,
sequences in this state trigger the gesture event handler, but event
propagation will continue unstopped by gestures.
If a sequence enters into the GTK_EVENT_SEQUENCE_DENIED
state, the gesture
group will effectively ignore the sequence, letting events go unstopped
through the gesture, but the “slot” will still remain occupied while
the touch is active.
If a sequence enters in the GTK_EVENT_SEQUENCE_CLAIMED
state, the gesture
group will grab all interaction on the sequence, by:
- Setting the same sequence to
GTK_EVENT_SEQUENCE_DENIED
on every other gesture group within the widget, and every gesture on parent widgets in the propagation chain. - Emitting
GtkGesture::cancel
on every gesture in widgets underneath in the propagation chain. - Stopping event propagation after the gesture group handles the event.
Note: if a sequence is set early to GTK_EVENT_SEQUENCE_CLAIMED
on
GDK_TOUCH_BEGIN
/GDK_BUTTON_PRESS
(so those events are captured before
reaching the event widget, this implies GTK_PHASE_CAPTURE
), one similar
event will be emulated if the sequence changes to GTK_EVENT_SEQUENCE_DENIED
.
This way event coherence is preserved before event propagation is unstopped again.
Sequence states can’t be changed freely.
See gtk_gesture_set_state()
to know about the possible
lifetimes of a GdkEventSequence
.
Touchpad gestures
On the platforms that support it, GtkGesture
will handle transparently
touchpad gesture events. The only precautions users of GtkGesture
should
do to enable this support are:
- If the gesture has
GTK_PHASE_NONE
, ensuring events of typeGDK_TOUCHPAD_SWIPE
andGDK_TOUCHPAD_PINCH
are handled by theGtkGesture
.
Instance methods
gtk_gesture_get_bounding_box
If there are touch sequences being currently handled by gesture
,
returns TRUE
and fills in rect
with the bounding box containing
all active touches.
gtk_gesture_get_bounding_box_center
If there are touch sequences being currently handled by gesture
,
returns TRUE
and fills in x
and y
with the center of the bounding
box containing all active touches.
gtk_gesture_get_last_updated_sequence
Returns the GdkEventSequence
that was last updated on gesture
.
gtk_gesture_get_point
If sequence
is currently being interpreted by gesture
,
returns TRUE
and fills in x
and y
with the last coordinates
stored for that event sequence.
gtk_gesture_get_sequences
Returns the list of GdkEventSequences
currently being interpreted
by gesture
.
gtk_gesture_handles_sequence
Returns TRUE
if gesture
is currently handling events
corresponding to sequence
.
Methods inherited from GtkEventController (13)
gtk_event_controller_get_current_event
Returns the event that is currently being handled by the controller.
gtk_event_controller_get_current_event_device
Returns the device of the event that is currently being handled by the controller.
gtk_event_controller_get_current_event_state
Returns the modifier state of the event that is currently being handled by the controller.
gtk_event_controller_get_current_event_time
Returns the timestamp of the event that is currently being handled by the controller.
gtk_event_controller_get_name
Gets the name of controller
.
gtk_event_controller_get_propagation_limit
Gets the propagation limit of the event controller.
gtk_event_controller_get_propagation_phase
Gets the propagation phase at which controller
handles events.
gtk_event_controller_get_widget
Returns the GtkWidget
this controller relates to.
gtk_event_controller_reset
Resets the controller
to a clean state.
gtk_event_controller_set_name
Sets a name on the controller that can be used for debugging.
gtk_event_controller_set_propagation_limit
Sets the event propagation limit on the event controller.
gtk_event_controller_set_propagation_phase
Sets the propagation phase at which a controller handles events.
gtk_event_controller_set_static_name
Sets a name on the controller that can be used for debugging.
since: 4.8
Properties
Properties inherited from GtkEventController (4)
Gtk.EventController:name
The name for this controller, typically used for debugging purposes.
Gtk.EventController:propagation-limit
The limit for which events this controller will handle.
Gtk.EventController:propagation-phase
The propagation phase at which this controller will handle events.
Gtk.EventController:widget
The widget receiving the GdkEvents
that the controller will handle.
Signals
Gtk.Gesture::end
Emitted when gesture
either stopped recognizing the event
sequences as something to be handled, or the number of touch
sequences became higher or lower than GtkGesture:n-points
.
Signals inherited from GObject (1)
GObject::notify
The notify signal is emitted on an object when one of its properties has its value set through g_object_set_property(), g_object_set(), et al.