summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2020-11-19 01:15:42 +0100
committerMarge Bot <marge-bot@gnome.org>2020-11-27 15:14:34 +0000
commitd7d92b0ddc4ec10189cdd61f55c32fa6fa434008 (patch)
treebb64aa32a9ade3d5d4b194a03e52dbd6db6688a5
parent5689a843c79ee9f3df496fe403959d9547abfb3c (diff)
downloadmutter-d7d92b0ddc4ec10189cdd61f55c32fa6fa434008.tar.gz
clutter: Drop ClutterInputDevice axis API
Most of this comes from X11 peculiarities that were open coded in the Clutter ABI. We don't need this except in X11, so move this axis handling there. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1403>
-rw-r--r--clutter/clutter/clutter-input-device-private.h29
-rw-r--r--clutter/clutter/clutter-input-device.c254
-rw-r--r--src/backends/x11/meta-input-device-x11.c134
-rw-r--r--src/backends/x11/meta-input-device-x11.h15
-rw-r--r--src/backends/x11/meta-seat-x11.c13
-rw-r--r--src/tests/clutter/interactive/test-devices.c50
6 files changed, 158 insertions, 337 deletions
diff --git a/clutter/clutter/clutter-input-device-private.h b/clutter/clutter/clutter-input-device-private.h
index baf02c069..caed7cbe7 100644
--- a/clutter/clutter/clutter-input-device-private.h
+++ b/clutter/clutter/clutter-input-device-private.h
@@ -32,19 +32,6 @@
G_BEGIN_DECLS
-typedef struct _ClutterAxisInfo
-{
- ClutterInputAxis axis;
-
- double min_axis;
- double max_axis;
-
- double min_value;
- double max_value;
-
- double resolution;
-} ClutterAxisInfo;
-
typedef struct _ClutterScrollInfo
{
guint axis_id;
@@ -111,8 +98,6 @@ struct _ClutterInputDevice
uint32_t previous_time;
int previous_button_number;
- GArray *axes;
-
GArray *scroll_info;
char *vendor_id;
@@ -142,20 +127,6 @@ ClutterActor * clutter_input_device_update (ClutterInputDevice *device,
CLUTTER_EXPORT
void _clutter_input_device_remove_event_sequence (ClutterInputDevice *device,
ClutterEvent *event);
-CLUTTER_EXPORT
-gboolean _clutter_input_device_translate_axis (ClutterInputDevice *device,
- guint index_,
- gdouble value,
- gdouble *axis_value);
-CLUTTER_EXPORT
-guint _clutter_input_device_add_axis (ClutterInputDevice *device,
- ClutterInputAxis axis,
- gdouble minimum,
- gdouble maximum,
- gdouble resolution);
-
-CLUTTER_EXPORT
-void _clutter_input_device_reset_axes (ClutterInputDevice *device);
CLUTTER_EXPORT
void _clutter_input_device_add_scroll_info (ClutterInputDevice *device,
diff --git a/clutter/clutter/clutter-input-device.c b/clutter/clutter/clutter-input-device.c
index 64c125e40..4a7b4c85c 100644
--- a/clutter/clutter/clutter-input-device.c
+++ b/clutter/clutter/clutter-input-device.c
@@ -61,8 +61,6 @@ enum
PROP_HAS_CURSOR,
- PROP_N_AXES,
-
PROP_VENDOR_ID,
PROP_PRODUCT_ID,
@@ -97,7 +95,6 @@ clutter_input_device_dispose (GObject *gobject)
if (device->accessibility_virtual_device)
g_clear_object (&device->accessibility_virtual_device);
- g_clear_pointer (&device->axes, g_array_unref);
g_clear_pointer (&device->scroll_info, g_array_unref);
g_clear_pointer (&device->touch_sequence_actors, g_hash_table_unref);
@@ -236,10 +233,6 @@ clutter_input_device_get_property (GObject *gobject,
g_value_set_boolean (value, self->has_cursor);
break;
- case PROP_N_AXES:
- g_value_set_uint (value, clutter_input_device_get_n_axes (self));
- break;
-
case PROP_VENDOR_ID:
g_value_set_string (value, self->vendor_id);
break;
@@ -348,21 +341,6 @@ clutter_input_device_class_init (ClutterInputDeviceClass *klass)
CLUTTER_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
/**
- * ClutterInputDevice:n-axes:
- *
- * The number of axes of the device.
- *
- * Since: 1.6
- */
- obj_props[PROP_N_AXES] =
- g_param_spec_uint ("n-axes",
- P_("Number of Axes"),
- P_("The number of axes on the device"),
- 0, G_MAXUINT,
- 0,
- CLUTTER_PARAM_READABLE);
-
- /**
* ClutterInputDevice:backend:
*
* The #ClutterBackend that created the device.
@@ -801,236 +779,6 @@ clutter_input_device_get_device_mode (ClutterInputDevice *device)
}
/*< private >
- * clutter_input_device_reset_axes:
- * @device: a #ClutterInputDevice
- *
- * Resets the axes on @device
- */
-void
-_clutter_input_device_reset_axes (ClutterInputDevice *device)
-{
- if (device->axes != NULL)
- {
- g_array_free (device->axes, TRUE);
- device->axes = NULL;
-
- g_object_notify_by_pspec (G_OBJECT (device), obj_props[PROP_N_AXES]);
- }
-}
-
-/*< private >
- * clutter_input_device_add_axis:
- * @device: a #ClutterInputDevice
- * @axis: the axis type
- * @minimum: the minimum axis value
- * @maximum: the maximum axis value
- * @resolution: the axis resolution
- *
- * Adds an axis of type @axis on @device.
- */
-guint
-_clutter_input_device_add_axis (ClutterInputDevice *device,
- ClutterInputAxis axis,
- gdouble minimum,
- gdouble maximum,
- gdouble resolution)
-{
- ClutterAxisInfo info;
- guint pos;
-
- if (device->axes == NULL)
- device->axes = g_array_new (FALSE, TRUE, sizeof (ClutterAxisInfo));
-
- info.axis = axis;
- info.min_value = minimum;
- info.max_value = maximum;
- info.resolution = resolution;
-
- switch (axis)
- {
- case CLUTTER_INPUT_AXIS_X:
- case CLUTTER_INPUT_AXIS_Y:
- info.min_axis = 0;
- info.max_axis = 0;
- break;
-
- case CLUTTER_INPUT_AXIS_XTILT:
- case CLUTTER_INPUT_AXIS_YTILT:
- info.min_axis = -1;
- info.max_axis = 1;
- break;
-
- default:
- info.min_axis = 0;
- info.max_axis = 1;
- break;
- }
-
- device->axes = g_array_append_val (device->axes, info);
- pos = device->axes->len - 1;
-
- g_object_notify_by_pspec (G_OBJECT (device), obj_props[PROP_N_AXES]);
-
- return pos;
-}
-
-/*< private >
- * clutter_input_translate_axis:
- * @device: a #ClutterInputDevice
- * @index_: the index of the axis
- * @gint: the absolute value of the axis
- * @axis_value: (out): the translated value of the axis
- *
- * Performs a conversion from the absolute value of the axis
- * to a relative value.
- *
- * The axis at @index_ must not be %CLUTTER_INPUT_AXIS_X or
- * %CLUTTER_INPUT_AXIS_Y.
- *
- * Return value: %TRUE if the conversion was successful
- */
-gboolean
-_clutter_input_device_translate_axis (ClutterInputDevice *device,
- guint index_,
- gdouble value,
- gdouble *axis_value)
-{
- ClutterAxisInfo *info;
- gdouble width;
- gdouble real_value;
-
- if (device->axes == NULL || index_ >= device->axes->len)
- return FALSE;
-
- info = &g_array_index (device->axes, ClutterAxisInfo, index_);
-
- if (info->axis == CLUTTER_INPUT_AXIS_X ||
- info->axis == CLUTTER_INPUT_AXIS_Y)
- return FALSE;
-
- if (fabs (info->max_value - info->min_value) < 0.0000001)
- return FALSE;
-
- width = info->max_value - info->min_value;
- real_value = (info->max_axis * (value - info->min_value)
- + info->min_axis * (info->max_value - value))
- / width;
-
- if (axis_value)
- *axis_value = real_value;
-
- return TRUE;
-}
-
-/**
- * clutter_input_device_get_axis:
- * @device: a #ClutterInputDevice
- * @index_: the index of the axis
- *
- * Retrieves the type of axis on @device at the given index.
- *
- * Return value: the axis type
- *
- * Since: 1.6
- */
-ClutterInputAxis
-clutter_input_device_get_axis (ClutterInputDevice *device,
- guint index_)
-{
- 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;
-
- if (index_ >= device->axes->len)
- return CLUTTER_INPUT_AXIS_IGNORE;
-
- info = &g_array_index (device->axes, ClutterAxisInfo, index_);
-
- 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.
- *
- * An example of typical usage for this function is:
- *
- * |[
- * ClutterInputDevice *device = clutter_event_get_device (event);
- * gdouble *axes = clutter_event_get_axes (event, NULL);
- * gdouble pressure_value = 0;
- *
- * clutter_input_device_get_axis_value (device, axes,
- * CLUTTER_INPUT_AXIS_PRESSURE,
- * &pressure_value);
- * ]|
- *
- * 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
- *
- * Retrieves the number of axes available on @device.
- *
- * Return value: the number of axes on the device
- *
- * Since: 1.6
- */
-guint
-clutter_input_device_get_n_axes (ClutterInputDevice *device)
-{
- g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device), 0);
-
- if (device->axes != NULL)
- return device->axes->len;
-
- return 0;
-}
-
-/*< private >
* clutter_input_device_remove_sequence:
* @device: a #ClutterInputDevice
* @sequence: a #ClutterEventSequence
@@ -1109,7 +857,6 @@ _clutter_input_device_add_scroll_info (ClutterInputDevice *device,
ClutterScrollInfo info;
g_return_if_fail (CLUTTER_IS_INPUT_DEVICE (device));
- g_return_if_fail (index_ < clutter_input_device_get_n_axes (device));
info.axis_id = index_;
info.direction = direction;
@@ -1136,7 +883,6 @@ _clutter_input_device_get_scroll_delta (ClutterInputDevice *device,
guint i;
g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device), FALSE);
- g_return_val_if_fail (index_ < clutter_input_device_get_n_axes (device), FALSE);
if (device->scroll_info == NULL)
return FALSE;
diff --git a/src/backends/x11/meta-input-device-x11.c b/src/backends/x11/meta-input-device-x11.c
index 7d5180766..4fdd3b61b 100644
--- a/src/backends/x11/meta-input-device-x11.c
+++ b/src/backends/x11/meta-input-device-x11.c
@@ -37,11 +37,26 @@ struct _MetaInputDeviceX11
float current_x;
float current_y;
+ GArray *axes;
+
#ifdef HAVE_LIBWACOM
GArray *group_modes;
#endif
};
+typedef struct _MetaX11AxisInfo
+{
+ ClutterInputAxis axis;
+
+ double min_axis;
+ double max_axis;
+
+ double min_value;
+ double max_value;
+
+ double resolution;
+} MetaX11AxisInfo;
+
struct _MetaInputDeviceX11Class
{
ClutterInputDeviceClass device_class;
@@ -133,6 +148,8 @@ meta_input_device_x11_finalize (GObject *object)
{
MetaInputDeviceX11 *device_xi2 = META_INPUT_DEVICE_X11 (object);
+ g_clear_pointer (&device_xi2->axes, g_array_unref);
+
#ifdef HAVE_LIBWACOM
if (device_xi2->group_modes)
g_array_unref (device_xi2->group_modes);
@@ -460,6 +477,123 @@ meta_input_device_x11_get_device_id (ClutterInputDevice *device)
return device_xi2->device_id;
}
+void
+meta_input_device_x11_reset_axes (ClutterInputDevice *device)
+{
+ MetaInputDeviceX11 *device_x11 = META_INPUT_DEVICE_X11 (device);
+
+ g_clear_pointer (&device_x11->axes, g_array_unref);
+}
+
+int
+meta_input_device_x11_add_axis (ClutterInputDevice *device,
+ ClutterInputAxis axis,
+ double minimum,
+ double maximum,
+ double resolution)
+{
+ MetaInputDeviceX11 *device_x11 = META_INPUT_DEVICE_X11 (device);
+ MetaX11AxisInfo info;
+ guint pos;
+
+ if (device_x11->axes == NULL)
+ device_x11->axes = g_array_new (FALSE, TRUE, sizeof (MetaX11AxisInfo));
+
+ info.axis = axis;
+ info.min_value = minimum;
+ info.max_value = maximum;
+ info.resolution = resolution;
+
+ switch (axis)
+ {
+ case CLUTTER_INPUT_AXIS_X:
+ case CLUTTER_INPUT_AXIS_Y:
+ info.min_axis = 0;
+ info.max_axis = 0;
+ break;
+
+ case CLUTTER_INPUT_AXIS_XTILT:
+ case CLUTTER_INPUT_AXIS_YTILT:
+ info.min_axis = -1;
+ info.max_axis = 1;
+ break;
+
+ default:
+ info.min_axis = 0;
+ info.max_axis = 1;
+ break;
+ }
+
+ g_array_append_val (device_x11->axes, info);
+ pos = device_x11->axes->len - 1;
+
+ return pos;
+}
+
+gboolean
+meta_input_device_x11_get_axis (ClutterInputDevice *device,
+ int idx,
+ ClutterInputAxis *use)
+{
+ MetaInputDeviceX11 *device_x11 = META_INPUT_DEVICE_X11 (device);
+ MetaX11AxisInfo *info;
+
+ if (device_x11->axes == NULL)
+ return FALSE;
+
+ if (idx < 0 || idx >= device_x11->axes->len)
+ return FALSE;
+
+ info = &g_array_index (device_x11->axes, MetaX11AxisInfo, idx);
+
+ if (use)
+ *use = info->axis;
+
+ return TRUE;
+}
+
+gboolean
+meta_input_device_x11_translate_axis (ClutterInputDevice *device,
+ int idx,
+ double value,
+ double *axis_value)
+{
+ MetaInputDeviceX11 *device_x11 = META_INPUT_DEVICE_X11 (device);
+ MetaX11AxisInfo *info;
+ double width;
+ double real_value;
+
+ if (device_x11->axes == NULL || idx < 0 || idx >= device_x11->axes->len)
+ return FALSE;
+
+ info = &g_array_index (device_x11->axes, MetaX11AxisInfo, idx);
+
+ if (info->axis == CLUTTER_INPUT_AXIS_X ||
+ info->axis == CLUTTER_INPUT_AXIS_Y)
+ return FALSE;
+
+ if (fabs (info->max_value - info->min_value) < 0.0000001)
+ return FALSE;
+
+ width = info->max_value - info->min_value;
+ real_value = (info->max_axis * (value - info->min_value)
+ + info->min_axis * (info->max_value - value))
+ / width;
+
+ if (axis_value)
+ *axis_value = real_value;
+
+ return TRUE;
+}
+
+int
+meta_input_device_x11_get_n_axes (ClutterInputDevice *device)
+{
+ MetaInputDeviceX11 *device_x11 = META_INPUT_DEVICE_X11 (device);
+
+ return device_x11->axes->len;
+}
+
#ifdef HAVE_LIBWACOM
uint32_t
meta_input_device_x11_get_pad_group_mode (ClutterInputDevice *device,
diff --git a/src/backends/x11/meta-input-device-x11.h b/src/backends/x11/meta-input-device-x11.h
index f74c4a2a4..19f1efcdd 100644
--- a/src/backends/x11/meta-input-device-x11.h
+++ b/src/backends/x11/meta-input-device-x11.h
@@ -71,6 +71,21 @@ gboolean meta_input_device_x11_get_pointer_location (ClutterInputDevice *device,
float *y);
int meta_input_device_x11_get_device_id (ClutterInputDevice *device);
+int meta_input_device_x11_get_n_axes (ClutterInputDevice *device);
+void meta_input_device_x11_reset_axes (ClutterInputDevice *device);
+int meta_input_device_x11_add_axis (ClutterInputDevice *device,
+ ClutterInputAxis axis,
+ double minimum,
+ double maximum,
+ double resolution);
+gboolean meta_input_device_x11_get_axis (ClutterInputDevice *device,
+ int idx,
+ ClutterInputAxis *use);
+gboolean meta_input_device_x11_translate_axis (ClutterInputDevice *device,
+ int idx,
+ double value,
+ double *axis_value);
+
G_END_DECLS
#endif /* META_INPUT_DEVICE_X11_H */
diff --git a/src/backends/x11/meta-seat-x11.c b/src/backends/x11/meta-seat-x11.c
index 7f4c15402..1983c93c4 100644
--- a/src/backends/x11/meta-seat-x11.c
+++ b/src/backends/x11/meta-seat-x11.c
@@ -148,7 +148,7 @@ translate_valuator_class (Display *xdisplay,
}
}
- _clutter_input_device_add_axis (device, axis,
+ meta_input_device_x11_add_axis (device, axis,
class->min,
class->max,
class->resolution);
@@ -947,7 +947,7 @@ translate_pad_axis (ClutterInputDevice *device,
if (val <= 0)
continue;
- _clutter_input_device_translate_axis (device, i, val, value);
+ meta_input_device_x11_translate_axis (device, i, val, value);
if (i == PAD_AXIS_RING1 || i == PAD_AXIS_RING2)
{
@@ -1146,8 +1146,9 @@ translate_axes (ClutterInputDevice *device,
if (!XIMaskIsSet (valuators->mask, i))
continue;
+ if (!meta_input_device_x11_get_axis (device, i, &axis))
+ continue;
- axis = clutter_input_device_get_axis (device, i);
val = *values++;
switch (axis)
@@ -1161,7 +1162,7 @@ translate_axes (ClutterInputDevice *device,
break;
default:
- _clutter_input_device_translate_axis (device, i, val, &retval[axis]);
+ meta_input_device_x11_translate_axis (device, i, val, &retval[axis]);
break;
}
}
@@ -1179,7 +1180,7 @@ scroll_valuators_changed (ClutterInputDevice *device,
uint32_t n_axes, n_val, i;
double *values;
- n_axes = clutter_input_device_get_n_axes (device);
+ n_axes = meta_input_device_x11_get_n_axes (device);
values = valuators->values;
*dx_p = *dy_p = 0.0;
@@ -1785,7 +1786,7 @@ meta_seat_x11_translate_event (MetaSeatX11 *seat,
GINT_TO_POINTER (xev->sourceid));
if (device)
{
- _clutter_input_device_reset_axes (device);
+ meta_input_device_x11_reset_axes (device);
translate_device_classes (clutter_x11_get_default_display (),
device,
xev->classes,
diff --git a/src/tests/clutter/interactive/test-devices.c b/src/tests/clutter/interactive/test-devices.c
index e5b894b87..b8d1f0fe7 100644
--- a/src/tests/clutter/interactive/test-devices.c
+++ b/src/tests/clutter/interactive/test-devices.c
@@ -49,34 +49,6 @@ device_type_name (ClutterInputDevice *device)
}
}
-static const gchar *
-axis_type_name (ClutterInputAxis axis)
-{
- switch (axis)
- {
- case CLUTTER_INPUT_AXIS_X:
- return "Absolute X";
-
- case CLUTTER_INPUT_AXIS_Y:
- return "Absolute Y";
-
- case CLUTTER_INPUT_AXIS_PRESSURE:
- return "Pressure";
-
- case CLUTTER_INPUT_AXIS_XTILT:
- return "X Tilt";
-
- case CLUTTER_INPUT_AXIS_YTILT:
- return "Y Tilt";
-
- case CLUTTER_INPUT_AXIS_WHEEL:
- return "Wheel";
-
- default:
- return "Unknown";
- }
-}
-
static gboolean
stage_button_event_cb (ClutterActor *actor,
ClutterEvent *event,
@@ -85,21 +57,18 @@ stage_button_event_cb (ClutterActor *actor,
ClutterInputDevice *device;
ClutterInputDevice *source_device;
ClutterActor *hand = NULL;
- gdouble *axes;
- guint n_axes, i;
device = clutter_event_get_device (event);
source_device = clutter_event_get_source_device (event);
hand = g_hash_table_lookup (app->devices, device);
- g_print ("Device: '%s' (type: %s, source: '%s', axes: %d)\n",
+ g_print ("Device: '%s' (type: %s, source: '%s')\n",
clutter_input_device_get_device_name (device),
device_type_name (device),
source_device != device
? clutter_input_device_get_device_name (source_device)
- : "<same>",
- clutter_input_device_get_n_axes (device));
+ : "<same>");
if (hand != NULL)
{
@@ -109,21 +78,6 @@ stage_button_event_cb (ClutterActor *actor,
clutter_actor_set_position (hand, event_x, event_y);
}
- axes = clutter_event_get_axes (event, &n_axes);
- for (i = 0; i < n_axes; i++)
- {
- ClutterInputAxis axis;
-
- axis = clutter_input_device_get_axis (device, i);
- if (axis == CLUTTER_INPUT_AXIS_IGNORE)
- continue;
-
- g_print ("\tAxis[%2d][%s].value: %.2f\n",
- i,
- axis_type_name (axis),
- axes[i]);
- }
-
return FALSE;
}