[gtk+/gestures: 95/117] gesture: Add missing documentation
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/gestures: 95/117] gesture: Add missing documentation
- Date: Thu, 10 Apr 2014 20:32:41 +0000 (UTC)
commit 52a62a08f4bb6e792de13a70539f64afce55a766
Author: Carlos Garnacho <carlosg gnome org>
Date: Wed Apr 9 18:27:42 2014 +0200
gesture: Add missing documentation
gtk/gtkgesture.c | 217 ++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 209 insertions(+), 8 deletions(-)
---
diff --git a/gtk/gtkgesture.c b/gtk/gtkgesture.c
index f287ce1..ded62fc 100644
--- a/gtk/gtkgesture.c
+++ b/gtk/gtkgesture.c
@@ -17,6 +17,65 @@
*
* Author(s): Carlos Garnacho <carlosg gnome org>
*/
+
+/**
+ * SECTION:gtkgesture
+ * @Short_description: Gesture recognition
+ * @Title: GtkGesture
+ * @See_also: #GtkEventController, #GtkGestureSingle
+ *
+ * #GtkGesture 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 %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 wether the gesture
+ * is recognized.
+ *
+ * As soon as the gesture has the expected number of touches, the gesture will
+ * run the #GtkGesture:check signal regularly on input events, #GtkGesture
+ * subclasses define there the criteria to consider a gesture as "recognized".
+ *
+ * A recognized gesture will then emit the following signals:
+ * - #GtkGesture:begin when the gesture is recognized.
+ * - A number of #GtkGesture:update, whenever an input event is processed.
+ * - #GtkGesture:end when the gesture is no longer recognized.
+ *
+ * ## 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 parallelly within the same 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 gtk_gesture_group(), grouped
+ * gestures synchronize the state of sequences, so calling gtk_gesture_set_sequence_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, 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 sequence to #GTK_EVENT_SEQUENCE_DENIED on every other gesture
+ * group within the widget, and every gesture on parent widgets in the propagation
+ * chain.
+ * - calling #GtkGesture:cancel on every gesture in widgets underneath in the
+ * propagation chain.
+ *
+ * Sequence states can't be changed freely, see gtk_gesture_set_sequence_state()
+ * to know about the possible lifetimes of a #GdkEventSequence.
+ */
+
#include "config.h"
#include <gtk/gtkgesture.h>
#include "gtktypebuiltins.h"
@@ -482,6 +541,14 @@ gtk_gesture_class_init (GtkGestureClass *klass)
klass->check = gtk_gesture_check_impl;
+ /**
+ * GtkGesture:n-points:
+ *
+ * The number of touch points that trigger recognition on this gesture,
+ *
+ *
+ * Since: 3.14
+ */
g_object_class_install_property (object_class,
PROP_N_POINTS,
g_param_spec_uint ("n-points",
@@ -490,7 +557,15 @@ gtk_gesture_class_init (GtkGestureClass *klass)
"to trigger the gesture"),
1, G_MAXUINT, 1,
GTK_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY));
+ G_PARAM_CONSTRUCT_ONLY));
+ /**
+ * GtkGesture:window:
+ *
+ * If non-%NULL, the gesture will only listen for events that happen on
+ * this #GdkWindow, or a child of it.
+ *
+ * Since: 3.14
+ */
g_object_class_install_property (object_class,
PROP_WINDOW,
g_param_spec_boolean ("window",
@@ -498,7 +573,18 @@ gtk_gesture_class_init (GtkGestureClass *klass)
P_("GdkWindow to receive events about"),
TRUE,
GTK_PARAM_READWRITE));
-
+ /**
+ * GtkGesture:check:
+ * @gesture: the object which received the signal
+ *
+ * This signal is triggered when the number of interacting touch
+ * points become the expected by @gesture (see the #GtkGesture:n-points
+ * property). If a handler returns #TRUE, the gesture is recognized.
+ *
+ * Return value: #TRUE if the gesture is recognized, #FALSE otherwise.
+ *
+ * Since: 3.14
+ */
signals[CHECK] =
g_signal_new ("check",
G_TYPE_FROM_CLASS (klass),
@@ -507,6 +593,21 @@ gtk_gesture_class_init (GtkGestureClass *klass)
g_signal_accumulator_true_handled,
NULL, NULL,
G_TYPE_BOOLEAN, 0);
+ /**
+ * GtkGesture:begin:
+ * @gesture: the object which received the signal
+ * @sequence: the #GdkEventSequence that made the gesture to be recognized
+ *
+ * This signal is emitted when the gesture is recognized. This means the
+ * number of touch sequences matches #GtkGesture:n-points, and the #GtkGesture:check
+ * handler(s) returned #TRUE.
+ *
+ * Note: These conditions may also happen when an extra touch (eg. a third touch
+ * on a 2-touches gesture) is lifted, in that situation @sequence won't pertain
+ * to the current set of active touches, so don't rely on this being true.
+ *
+ * Since: 3.14
+ */
signals[BEGIN] =
g_signal_new ("begin",
G_TYPE_FROM_CLASS (klass),
@@ -514,6 +615,18 @@ gtk_gesture_class_init (GtkGestureClass *klass)
G_STRUCT_OFFSET (GtkGestureClass, begin),
NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_POINTER);
+ /**
+ * GtkGesture:end:
+ * @gesture: the object which received the signal
+ * @sequence: the #GdkEventSequence that made gesture recognition to finish.
+ *
+ * This signal is emitted when @gesture either stopped recognizing the event
+ * sequences as something to be handled (the #GtkGesture:check handler returned
+ * #FALSE), or the number of touch sequences became higher or lower than
+ * #GtkGesture:n-points.
+ *
+ * Since: 3.14
+ */
signals[END] =
g_signal_new ("end",
G_TYPE_FROM_CLASS (klass),
@@ -521,6 +634,16 @@ gtk_gesture_class_init (GtkGestureClass *klass)
G_STRUCT_OFFSET (GtkGestureClass, end),
NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_POINTER);
+ /**
+ * GtkGesture:update:
+ * @gesture: the object which received the signal
+ * @sequence: the #GdkEventSequence that was updated.
+ *
+ * This signal is emitted whenever an event is handled while the gesture is
+ * recognized. @sequence is guaranteed to pertain to the set of active touches.
+ *
+ * Since: 3.14
+ */
signals[UPDATE] =
g_signal_new ("update",
G_TYPE_FROM_CLASS (klass),
@@ -528,6 +651,20 @@ gtk_gesture_class_init (GtkGestureClass *klass)
G_STRUCT_OFFSET (GtkGestureClass, update),
NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_POINTER);
+ /**
+ * GtkGesture:cancel:
+ * @gesture: the object which received the signal
+ * @sequence: the #GdkEventSequence that was cancelled.
+ *
+ * This signal is emitted whenever a sequence is cancelled. This usually
+ * happens on active touches when gtk_event_controller_reset() is called
+ * on @gesture (manually, due to grabs...), or the individual @sequence
+ * was claimed by parent widgets' controllers (see gtk_gesture_set_sequence_state()).
+ *
+ * @gesture must forget everything about @sequence as a reaction to this signal.
+ *
+ * Since: 3.14
+ */
signals[CANCEL] =
g_signal_new ("cancel",
G_TYPE_FROM_CLASS (klass),
@@ -535,6 +672,18 @@ gtk_gesture_class_init (GtkGestureClass *klass)
G_STRUCT_OFFSET (GtkGestureClass, cancel),
NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_POINTER);
+ /**
+ * GtkGesture:sequence-state-changed:
+ * @gesture: the object which received the signal
+ * @sequence: the #GdkEventSequence that was cancelled.
+ * @state: the new sequence state
+ *
+ * This signal is emitted whenever a sequence state changes. See
+ * gtk_gesture_set_sequence_state() to know more about the expectable
+ * sequence lifetimes.
+ *
+ * Since: 3.14
+ */
signals[SEQUENCE_STATE_CHANGED] =
g_signal_new ("sequence-state-changed",
G_TYPE_FROM_CLASS (klass),
@@ -701,11 +850,11 @@ gtk_gesture_set_state (GtkGesture *gesture,
* gtk_gesture_get_sequences:
* @gesture: a #GtkGesture
*
- * Returns the list of #GdkEventSequence<!-- -->s currently being interpreted
+ * Returns the list of #GdkEventSequences currently being interpreted
* by @gesture
*
* Returns: (transfer container) (element-type:Gdk.EventSequence): A list
- * of #GdkEventSequence<!-- -->s, the list elements are owned by GTK+
+ * of #GdkEventSequences, the list elements are owned by GTK+
* and must not be freed or modified, the list itself must be deleted
* through g_list_free()
**/
@@ -786,7 +935,8 @@ gtk_gesture_get_last_event (GtkGesture *gesture,
*
* If @sequence is currently being interpreted by @gesture, this
* function returns %TRUE and fills in @x and @y with the last coordinates
- * stored for that event sequence.
+ * stored for that event sequence. The coordinates are always relative to the
+ * widget allocation.
*
* Returns: %TRUE if @sequence is currently interpreted
*
@@ -1027,10 +1177,12 @@ gtk_gesture_is_recognized (GtkGesture *gesture)
* gtk_gesture_check:
* @gesture: a #GtkGesture
*
- * Triggers a check on the @gesture, this should be rarely needed,
- * as the gesture will check the state after handling any event.
+ * Triggers a check on the @gesture, this should only be called by
+ * implementations of #GtkGesture, in order to force gesture recognition
+ * to finish if eg. some implementation-dependent criteria doesn't match
+ * anymore.
*
- * Returns: #TRUE if the gesture is recognized.
+ * Returns: Whether the gesture is recognized.
*
* Since: 3.14
**/
@@ -1182,6 +1334,25 @@ _gtk_gesture_get_group_link (GtkGesture *gesture)
return priv->group_link;
}
+/**
+ * gtk_gesture_group:
+ * @gesture: a #GtkGesture
+ * @group_gesture: #GtkGesture to group @gesture with
+ *
+ * Adds @gesture to the same group than @group_gesture. Gestures
+ * are by default isolated in their own groups.
+ *
+ * When gestures are grouped, the state of #GdkEventSequences
+ * is kept in sync for all of those, so calling gtk_gesture_set_sequence_state(),
+ * on one will transfer the same value to the others.
+ *
+ * Groups also perform an "implicit grabbing" of sequences, if a
+ * #GdkEventSequence state is set to #GTK_EVENT_SEQUENCE_CLAIMED on one group,
+ * every other gesture group attached to the same #GtkWidget will switch the
+ * state for that sequence to #GTK_EVENT_SEQUENCE_DENIED.
+ *
+ * Since: 3.14
+ **/
void
gtk_gesture_group (GtkGesture *gesture,
GtkGesture *group_gesture)
@@ -1213,6 +1384,14 @@ gtk_gesture_group (GtkGesture *gesture,
next->prev = link;
}
+/**
+ * gtk_gesture_ungroup:
+ * @gesture: a #GtkGesture
+ *
+ * Ungroups @gesture from its current group.
+ *
+ * Since: 3.14
+ **/
void
gtk_gesture_ungroup (GtkGesture *gesture)
{
@@ -1233,6 +1412,17 @@ gtk_gesture_ungroup (GtkGesture *gesture)
link->next = link->prev = NULL;
}
+/**
+ * gtk_gesture_get_group:
+ * @gesture: a #GtkGesture
+ *
+ * Returns all gestures in the group of @gesture
+ *
+ * Returns: (element-type GtkGesture) (transfer container): The list
+ * of #GtkGestures, free with g_list_free().
+ *
+ * Since: 3.14
+ **/
GList *
gtk_gesture_get_group (GtkGesture *gesture)
{
@@ -1245,6 +1435,17 @@ gtk_gesture_get_group (GtkGesture *gesture)
return g_list_copy (g_list_first (link));
}
+/**
+ * gtk_gesture_is_grouped_with:
+ * @gesture: a #GtkGesture
+ * @other: another #GtkGesture
+ *
+ * Returns #TRUE if both gestures pertain to the same group.
+ *
+ * Returns: whether the gestures are grouped
+ *
+ * Since: 3.14
+ **/
gboolean
gtk_gesture_is_grouped_with (GtkGesture *gesture,
GtkGesture *other)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]