Struct gtk::Gesture [−][src]
pub struct Gesture(_);
Expand description
Gesture is the base object for gesture recognition, although this
object 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 None gdk::EventSequence value for these).
The number of touches that a Gesture need to be recognized is controlled
by the property::Gesture::n-points property, if a gesture is keeping track of less
or more than that number of sequences, it won’t check wether the gesture
is recognized.
As soon as the gesture has the expected number of touches, the gesture will
run the signal::Gesture::check signal regularly on input events until the gesture
is recognized, the criteria to consider a gesture as “recognized” is left to
Gesture subclasses.
A recognized gesture will then emit the following signals:
signal::Gesture::beginwhen the gesture is recognized.- A number of
signal::Gesture::update, whenever an input event is processed. signal::Gesture::endwhen the gesture is no longer recognized.
Event propagation
In order to receive events, a gesture needs to either set a propagation phase
through EventControllerExt::set_propagation_phase(), or feed those manually
through EventControllerExt::handle_event().
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.
After the capture phase, GTK+ emits the traditional signal::Widget::button-press-event,
signal::Widget::button-release-event, signal::Widget::touch-event, etc signals. Gestures
with the PropagationPhase::Target phase are fed events from the default signal::Widget::event
handlers.
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 # {touch-sequence-states}
Whenever input interaction happens, a single event may trigger a cascade of
GtkGestures, 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 GdkEventSequences
triggering those.
Within a widget, gestures can be grouped through GestureExt::group_with(),
grouped gestures synchronize the state of sequences, so calling
GestureExt::set_sequence_state() on one will effectively propagate
the state throughout the group.
By default, all sequences start out in the EventSequenceState::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 EventSequenceState::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 EventSequenceState::Claimed state, the gesture
group will grab all interaction on the sequence, by:
- Setting the same sequence to
EventSequenceState::Deniedon every other gesture group within the widget, and every gesture on parent widgets in the propagation chain. - calling
signal::Gesture::cancelon 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 EventSequenceState::Claimed on
GDK_TOUCH_BEGIN/GDK_BUTTON_PRESS (so those events are captured before
reaching the event widget, this implies PropagationPhase::Capture), one similar
event will emulated if the sequence changes to EventSequenceState::Denied.
This way event coherence is preserved before event propagation is unstopped
again.
Sequence states can’t be changed freely, see GestureExt::set_sequence_state()
to know about the possible lifetimes of a gdk::EventSequence.
Touchpad gestures
On the platforms that support it, Gesture will handle transparently
touchpad gesture events. The only precautions users of Gesture should do
to enable this support are:
- Enabling
gdk::EventMask::TOUCHPAD_GESTURE_MASKon theirGdkWindows - If the gesture has
PropagationPhase::None, ensuring events of typeGDK_TOUCHPAD_SWIPEandGDK_TOUCHPAD_PINCHare handled by theGesture
This is an Abstract Base Class, you cannot instantiate it.
Implements
Trait Implementations
type Parent = EventControllerThis method returns an ordering between self and other values if one exists. Read more
This method tests less than (for self and other) and is used by the < operator. Read more
This method tests less than or equal to (for self and other) and is used by the <=
operator. Read more
This method tests greater than (for self and other) and is used by the > operator. Read more
Returns the type identifier of Self.
Auto Trait Implementations
impl RefUnwindSafe for Gestureimpl UnwindSafe for GestureBlanket Implementations
Mutably borrows from an owned value. Read more
Upcasts an object to a superclass or interface T. Read more
Upcasts an object to a reference of its superclass or interface T. Read more
Tries to downcast to a subclass or interface implementor T. Read more
Tries to downcast to a reference of its subclass or interface implementor T. Read more
Tries to cast to an object of type T. This handles upcasting, downcasting
and casting between interface and interface implementors. All checks are performed at
runtime, while downcast and upcast will do many checks at compile-time already. Read more
Tries to cast to reference to an object of type T. This handles upcasting, downcasting
and casting between interface and interface implementors. All checks are performed at
runtime, while downcast and upcast will do many checks at compile-time already. Read more
Casts to T unconditionally. Read more
Casts to &T unconditionally. Read more
Returns true if the object is an instance of (can be cast to) T.
pub fn set_properties_from_value(
&self,
property_values: &[(&str, Value)]
) -> Result<(), BoolError>pub fn set_property<'a, N, V>(
&self,
property_name: N,
value: V
) -> Result<(), BoolError> where
V: ToValue,
N: Into<&'a str>, pub fn set_property_from_value<'a, N>(
&self,
property_name: N,
value: &Value
) -> Result<(), BoolError> where
N: Into<&'a str>, Safety Read more
Safety Read more
Safety Read more
Safety Read more
pub fn connect_notify<F>(&self, name: Option<&str>, f: F) -> SignalHandlerId where
F: 'static + Fn(&T, &ParamSpec) + Send + Sync, pub fn connect_notify_local<F>(
&self,
name: Option<&str>,
f: F
) -> SignalHandlerId where
F: 'static + Fn(&T, &ParamSpec), pub unsafe fn connect_notify_unsafe<F>(
&self,
name: Option<&str>,
f: F
) -> SignalHandlerId where
F: Fn(&T, &ParamSpec), pub fn has_property<'a, N>(&self, property_name: N, type_: Option<Type>) -> bool where
N: Into<&'a str>, pub fn find_property<'a, N>(&self, property_name: N) -> Option<ParamSpec> where
N: Into<&'a str>, pub fn connect<'a, N, F>(
&self,
signal_name: N,
after: bool,
callback: F
) -> Result<SignalHandlerId, BoolError> where
F: Fn(&[Value]) -> Option<Value> + Send + Sync + 'static,
N: Into<&'a str>, Same as connect but takes a SignalId instead of a signal name.
pub fn connect_local<'a, N, F>(
&self,
signal_name: N,
after: bool,
callback: F
) -> Result<SignalHandlerId, BoolError> where
F: Fn(&[Value]) -> Option<Value> + 'static,
N: Into<&'a str>, Same as connect_local but takes a SignalId instead of a signal name.
pub unsafe fn connect_unsafe<'a, N, F>(
&self,
signal_name: N,
after: bool,
callback: F
) -> Result<SignalHandlerId, BoolError> where
F: Fn(&[Value]) -> Option<Value>,
N: Into<&'a str>, Same as connect_unsafe but takes a SignalId instead of a signal name.
Emit signal by signal id.
Emit signal with details by signal id.
Emit signal by it’s name.
pub fn bind_property<'a, O, N, M>(
&'a self,
source_property: N,
target: &'a O,
target_property: M
) -> BindingBuilder<'a> where
O: ObjectType,
N: Into<&'a str>,
M: Into<&'a str>, Same as emit but takes Value for the arguments.
Same as emit_by_name but takes Value for the arguments.
Returns a SendValue clone of self.
impl<'a, T, C> FromValueOptional<'a> for T where
C: ValueTypeChecker<Error = ValueTypeMismatchOrNoneError>,
T: FromValue<'a, Checker = C>,