summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2020-11-19 01:00:42 +0100
committerMarge Bot <marge-bot@gnome.org>2020-11-27 15:14:33 +0000
commit168ceb990553bf24a17886a63499b6252cffa8dc (patch)
tree9e755800225dcca60795336d54a4f3f6c450daf2
parente772f62ea7d265cce1e7d5ad18dc82e6481ba418 (diff)
downloadmutter-168ceb990553bf24a17886a63499b6252cffa8dc.tar.gz
backends: Forward event axes as array of ClutterInputAxes elements
Instead of encoding arrays in ways that we need the ClutterInputDevice to decode them, use ClutterInputAxes as the array index. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1403>
-rw-r--r--clutter/clutter/clutter-event.c28
-rw-r--r--src/backends/native/meta-seat-impl.c30
-rw-r--r--src/backends/x11/meta-seat-x11.c9
-rw-r--r--src/wayland/meta-wayland-tablet-tool.c35
4 files changed, 26 insertions, 76 deletions
diff --git a/clutter/clutter/clutter-event.c b/clutter/clutter/clutter-event.c
index cc8741221..dba5d2588 100644
--- a/clutter/clutter/clutter-event.c
+++ b/clutter/clutter/clutter-event.c
@@ -1302,9 +1302,7 @@ clutter_event_copy (const ClutterEvent *event)
{
ClutterEvent *new_event;
ClutterEventPrivate *new_real_event;
- ClutterInputDevice *device;
ClutterEventPrivate *real_event = (ClutterEventPrivate *) event;
- gint n_axes = 0;
g_return_val_if_fail (event != NULL, NULL);
@@ -1324,29 +1322,25 @@ clutter_event_copy (const ClutterEvent *event)
new_real_event->locked_state = real_event->locked_state;
new_real_event->tool = real_event->tool;
- device = clutter_event_get_device (event);
- if (device != NULL)
- n_axes = clutter_input_device_get_n_axes (device);
-
switch (event->type)
{
case CLUTTER_BUTTON_PRESS:
case CLUTTER_BUTTON_RELEASE:
if (event->button.axes != NULL)
new_event->button.axes = g_memdup (event->button.axes,
- sizeof (gdouble) * n_axes);
+ sizeof (gdouble) * CLUTTER_INPUT_AXIS_LAST);
break;
case CLUTTER_SCROLL:
if (event->scroll.axes != NULL)
new_event->scroll.axes = g_memdup (event->scroll.axes,
- sizeof (gdouble) * n_axes);
+ sizeof (gdouble) * CLUTTER_INPUT_AXIS_LAST);
break;
case CLUTTER_MOTION:
if (event->motion.axes != NULL)
new_event->motion.axes = g_memdup (event->motion.axes,
- sizeof (gdouble) * n_axes);
+ sizeof (gdouble) * CLUTTER_INPUT_AXIS_LAST);
break;
case CLUTTER_TOUCH_BEGIN:
@@ -1355,7 +1349,7 @@ clutter_event_copy (const ClutterEvent *event)
case CLUTTER_TOUCH_CANCEL:
if (event->touch.axes != NULL)
new_event->touch.axes = g_memdup (event->touch.axes,
- sizeof (gdouble) * n_axes);
+ sizeof (gdouble) * CLUTTER_INPUT_AXIS_LAST);
break;
case CLUTTER_DEVICE_ADDED:
@@ -1624,7 +1618,6 @@ clutter_event_get_axes (const ClutterEvent *event,
guint *n_axes)
{
gdouble *retval = NULL;
- guint len = 0;
switch (event->type)
{
@@ -1675,19 +1668,8 @@ clutter_event_get_axes (const ClutterEvent *event,
break;
}
- if (retval != NULL)
- {
- ClutterInputDevice *device;
-
- device = clutter_event_get_device (event);
- if (device != NULL)
- len = clutter_input_device_get_n_axes (device);
- else
- retval = NULL;
- }
-
if (n_axes)
- *n_axes = len;
+ *n_axes = CLUTTER_INPUT_AXIS_LAST;
return retval;
}
diff --git a/src/backends/native/meta-seat-impl.c b/src/backends/native/meta-seat-impl.c
index 0eea39806..819e3b80b 100644
--- a/src/backends/native/meta-seat-impl.c
+++ b/src/backends/native/meta-seat-impl.c
@@ -1695,63 +1695,57 @@ static double *
translate_tablet_axes (struct libinput_event_tablet_tool *tablet_event,
ClutterInputDeviceTool *tool)
{
- GArray *axes = g_array_new (FALSE, FALSE, sizeof (double));
+ double *axes = g_new0 (double, CLUTTER_INPUT_AXIS_LAST);
struct libinput_tablet_tool *libinput_tool;
double value;
libinput_tool = libinput_event_tablet_tool_get_tool (tablet_event);
value = libinput_event_tablet_tool_get_x (tablet_event);
- g_array_append_val (axes, value);
+ axes[CLUTTER_INPUT_AXIS_X] = value;
value = libinput_event_tablet_tool_get_y (tablet_event);
- g_array_append_val (axes, value);
+ axes[CLUTTER_INPUT_AXIS_Y] = value;
if (libinput_tablet_tool_has_distance (libinput_tool))
{
value = libinput_event_tablet_tool_get_distance (tablet_event);
- g_array_append_val (axes, value);
+ axes[CLUTTER_INPUT_AXIS_DISTANCE] = value;
}
if (libinput_tablet_tool_has_pressure (libinput_tool))
{
value = libinput_event_tablet_tool_get_pressure (tablet_event);
value = meta_input_device_tool_native_translate_pressure (tool, value);
- g_array_append_val (axes, value);
+ axes[CLUTTER_INPUT_AXIS_PRESSURE] = value;
}
if (libinput_tablet_tool_has_tilt (libinput_tool))
{
value = libinput_event_tablet_tool_get_tilt_x (tablet_event);
- g_array_append_val (axes, value);
+ axes[CLUTTER_INPUT_AXIS_XTILT] = value;
value = libinput_event_tablet_tool_get_tilt_y (tablet_event);
- g_array_append_val (axes, value);
+ axes[CLUTTER_INPUT_AXIS_YTILT] = value;
}
if (libinput_tablet_tool_has_rotation (libinput_tool))
{
value = libinput_event_tablet_tool_get_rotation (tablet_event);
- g_array_append_val (axes, value);
+ axes[CLUTTER_INPUT_AXIS_ROTATION] = value;
}
if (libinput_tablet_tool_has_slider (libinput_tool))
{
value = libinput_event_tablet_tool_get_slider_position (tablet_event);
- g_array_append_val (axes, value);
+ axes[CLUTTER_INPUT_AXIS_SLIDER] = value;
}
if (libinput_tablet_tool_has_wheel (libinput_tool))
{
value = libinput_event_tablet_tool_get_wheel_delta (tablet_event);
- g_array_append_val (axes, value);
+ axes[CLUTTER_INPUT_AXIS_WHEEL] = value;
}
- if (axes->len == 0)
- {
- g_array_free (axes, TRUE);
- return NULL;
- }
- else
- return (double *) g_array_free (axes, FALSE);
+ return axes;
}
static void
@@ -1834,8 +1828,6 @@ process_tablet_axis (MetaSeatImpl *seat_impl,
axes = translate_tablet_axes (tablet_event,
evdev_device->last_tool);
- if (!axes)
- return;
meta_viewport_info_get_extents (seat_impl->viewports,
&stage_width, &stage_height);
diff --git a/src/backends/x11/meta-seat-x11.c b/src/backends/x11/meta-seat-x11.c
index a8f4f9fd1..a3f0bc597 100644
--- a/src/backends/x11/meta-seat-x11.c
+++ b/src/backends/x11/meta-seat-x11.c
@@ -1135,12 +1135,11 @@ translate_axes (ClutterInputDevice *device,
double y,
XIValuatorState *valuators)
{
- uint32_t n_axes = clutter_input_device_get_n_axes (device);
uint32_t i;
double *retval;
double *values;
- retval = g_new0 (double, n_axes);
+ retval = g_new0 (double, CLUTTER_INPUT_AXIS_LAST);
values = valuators->values;
for (i = 0; i < valuators->mask_len * 8; i++)
@@ -1157,15 +1156,15 @@ translate_axes (ClutterInputDevice *device,
switch (axis)
{
case CLUTTER_INPUT_AXIS_X:
- retval[i] = x;
+ retval[axis] = x;
break;
case CLUTTER_INPUT_AXIS_Y:
- retval[i] = y;
+ retval[axis] = y;
break;
default:
- _clutter_input_device_translate_axis (device, i, val, &retval[i]);
+ _clutter_input_device_translate_axis (device, i, val, &retval[axis]);
break;
}
}
diff --git a/src/wayland/meta-wayland-tablet-tool.c b/src/wayland/meta-wayland-tablet-tool.c
index 8c1984f62..efcb53bca 100644
--- a/src/wayland/meta-wayland-tablet-tool.c
+++ b/src/wayland/meta-wayland-tablet-tool.c
@@ -691,15 +691,10 @@ broadcast_axis (MetaWaylandTabletTool *tool,
ClutterInputAxis axis)
{
struct wl_resource *resource;
- ClutterInputDevice *source;
uint32_t value;
- gdouble val;
-
- source = clutter_event_get_source_device (event);
-
- if (!clutter_input_device_get_axis_value (source, event->motion.axes, axis, &val))
- return;
+ double val;
+ val = event->motion.axes[axis];
value = val * TABLET_AXIS_MAX;
wl_resource_for_each (resource, &tool->focus_resource_list)
@@ -726,16 +721,10 @@ broadcast_tilt (MetaWaylandTabletTool *tool,
const ClutterEvent *event)
{
struct wl_resource *resource;
- ClutterInputDevice *source;
gdouble xtilt, ytilt;
- source = clutter_event_get_source_device (event);
-
- if (!clutter_input_device_get_axis_value (source, event->motion.axes,
- CLUTTER_INPUT_AXIS_XTILT, &xtilt) ||
- !clutter_input_device_get_axis_value (source, event->motion.axes,
- CLUTTER_INPUT_AXIS_YTILT, &ytilt))
- return;
+ xtilt = event->motion.axes[CLUTTER_INPUT_AXIS_FLAG_XTILT];
+ ytilt = event->motion.axes[CLUTTER_INPUT_AXIS_FLAG_YTILT];
wl_resource_for_each (resource, &tool->focus_resource_list)
{
@@ -750,15 +739,9 @@ broadcast_rotation (MetaWaylandTabletTool *tool,
const ClutterEvent *event)
{
struct wl_resource *resource;
- ClutterInputDevice *source;
gdouble rotation;
- source = clutter_event_get_source_device (event);
-
- if (!clutter_input_device_get_axis_value (source, event->motion.axes,
- CLUTTER_INPUT_AXIS_ROTATION,
- &rotation))
- return;
+ rotation = event->motion.axes[CLUTTER_INPUT_AXIS_FLAG_ROTATION];
wl_resource_for_each (resource, &tool->focus_resource_list)
{
@@ -772,16 +755,10 @@ broadcast_wheel (MetaWaylandTabletTool *tool,
const ClutterEvent *event)
{
struct wl_resource *resource;
- ClutterInputDevice *source;
gdouble angle;
gint32 clicks = 0;
- source = clutter_event_get_source_device (event);
-
- if (!clutter_input_device_get_axis_value (source, event->motion.axes,
- CLUTTER_INPUT_AXIS_WHEEL,
- &angle))
- return;
+ angle = event->motion.axes[CLUTTER_INPUT_AXIS_FLAG_WHEEL];
/* FIXME: Perform proper angle-to-clicks accumulation elsewhere */
if (angle > 0.01)