From 333ca35ceca739388be36cf48514fcb68f3b7aef Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Tue, 18 Jan 2011 16:55:14 +0000 Subject: [PATCH] device: Add get_axis_value() We need a convenience function for extracting the value of a specific axis type out of the array of axis values attached to events. --- clutter/clutter-input-device.c | 47 ++++++++++++++++++++++++++++++++++ clutter/clutter-input-device.h | 4 +++ 2 files changed, 51 insertions(+) diff --git a/clutter/clutter-input-device.c b/clutter/clutter-input-device.c index 824895642..d9e0714c1 100644 --- a/clutter/clutter-input-device.c +++ b/clutter/clutter-input-device.c @@ -924,6 +924,9 @@ clutter_input_device_get_axis (ClutterInputDevice *device, { ClutterAxisInfo *info; + g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device), + CLUTTER_INPUT_AXIS_IGNORE); + if (device->axes == NULL) return CLUTTER_INPUT_AXIS_IGNORE; @@ -935,6 +938,50 @@ clutter_input_device_get_axis (ClutterInputDevice *device, return info->axis; } +/** + * clutter_input_device_get_axis_value: + * @device: a #ClutterInputDevice + * @axes: (array): an array of axes values, typically + * coming from clutter_event_get_axes() + * @axis: the axis to extract + * @value: (out): return location for the axis value + * + * Extracts the value of the given @axis of a #ClutterInputDevice from + * an array of axis values. + * + * Return value: %TRUE if the value was set, and %FALSE otherwise + * + * Since: 1.6 + */ +gboolean +clutter_input_device_get_axis_value (ClutterInputDevice *device, + gdouble *axes, + ClutterInputAxis axis, + gdouble *value) +{ + gint i; + + g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device), FALSE); + g_return_val_if_fail (device->axes != NULL, FALSE); + + for (i = 0; i < device->axes->len; i++) + { + ClutterAxisInfo *info; + + info = &g_array_index (device->axes, ClutterAxisInfo, i); + + if (info->axis == axis) + { + if (value) + *value = axes[i]; + + return TRUE; + } + } + + return FALSE; +} + /** * clutter_input_device_get_n_axes: * @device: a #ClutterInputDevice diff --git a/clutter/clutter-input-device.h b/clutter/clutter-input-device.h index fb305263b..7e1fbb6d8 100644 --- a/clutter/clutter-input-device.h +++ b/clutter/clutter-input-device.h @@ -140,6 +140,10 @@ G_CONST_RETURN gchar * clutter_input_device_get_device_name (ClutterInputDev guint clutter_input_device_get_n_axes (ClutterInputDevice *device); ClutterInputAxis clutter_input_device_get_axis (ClutterInputDevice *device, guint index_); +gboolean clutter_input_device_get_axis_value (ClutterInputDevice *device, + gdouble *axes, + ClutterInputAxis axis, + gdouble *value); guint clutter_input_device_get_n_keys (ClutterInputDevice *device); void clutter_input_device_set_key (ClutterInputDevice *device,