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::begin
when the gesture is recognized.- A number of
signal::Gesture::update
, whenever an input event is processed. signal::Gesture::end
when 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::Denied
on every other gesture group within the widget, and every gesture on parent widgets in the propagation chain. - calling
signal::Gesture::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 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_MASK
on theirGdkWindows
- If the gesture has
PropagationPhase::None
, ensuring events of typeGDK_TOUCHPAD_SWIPE
andGDK_TOUCHPAD_PINCH
are handled by theGesture
This is an Abstract Base Class, you cannot instantiate it.
Implements
Trait Implementations
type Parent = EventController
This 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 Gesture
impl UnwindSafe for Gesture
Blanket 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>,