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,