gtk,gestures: Add gtk_gestures_interpreter_get_n_active_strokes

This call gets the number of currently active strokes, finished
strokes (i.e. those that already had a GDK_BUTTON/TOUCH_RELEASE
processed) don't count.
This commit is contained in:
Carlos Garnacho
2012-01-12 02:47:23 +01:00
parent f7eb9edb9b
commit b2776581da
3 changed files with 44 additions and 0 deletions

View File

@@ -1589,6 +1589,7 @@ gtk_gestures_interpreter_add_gesture
gtk_gestures_interpreter_remove_gesture
gtk_gestures_interpreter_feed_event
gtk_gestures_interpreter_finish
gtk_gestures_interpreter_get_n_active_strokes
<SUBSECTION Gestures>
GtkGestureStroke

View File

@@ -97,6 +97,8 @@ struct _RecordedGesture
gint max_x;
gint min_y;
gint max_y;
guint finished : 1;
};
enum {
@@ -906,6 +908,41 @@ gtk_gestures_interpreter_remove_gesture (GtkGesturesInterpreter *interpreter,
}
}
/**
* gtk_gestures_interpreter_get_n_active_strokes:
* @interpreter: a #GtkGesturesInterpreter
*
* Returns the number of devices/touch sequences currently interacting
* with @interpreter.
*
* Returns: the number of strokes being performed in the interpreter.
*
* Since: 3.4
**/
guint
gtk_gestures_interpreter_get_n_active_strokes (GtkGesturesInterpreter *interpreter)
{
GtkGesturesInterpreterPrivate *priv;
GHashTableIter iter;
guint n_touches = 0;
gpointer data;
g_return_val_if_fail (GTK_IS_GESTURES_INTERPRETER (interpreter), 0);
priv = interpreter->priv;
g_hash_table_iter_init (&iter, priv->events);
while (g_hash_table_iter_next (&iter, NULL, &data))
{
RecordedGesture *recorded = data;
if (!recorded->finished)
n_touches++;
}
return n_touches;
}
/**
* gtk_gestures_interpreter_feed_event:
* @interpreter: a #GtkGesturesInterpreter
@@ -955,6 +992,10 @@ gtk_gestures_interpreter_feed_event (GtkGesturesInterpreter *interpreter,
recorded_gesture_append_coordinate (recorded, x, y);
if (event->type == GDK_BUTTON_RELEASE ||
event->type == GDK_TOUCH_RELEASE)
recorded->finished = TRUE;
return TRUE;
}

View File

@@ -109,6 +109,8 @@ gboolean gtk_gestures_interpreter_add_gesture (GtkGesturesInterpreter *interp
void gtk_gestures_interpreter_remove_gesture (GtkGesturesInterpreter *interpreter,
guint gesture_id);
guint gtk_gestures_interpreter_get_n_active_strokes (GtkGesturesInterpreter *interpreter);
gboolean gtk_gestures_interpreter_feed_event (GtkGesturesInterpreter *interpreter,
GdkEvent *event);
gboolean gtk_gestures_interpreter_finish (GtkGesturesInterpreter *interpreter,