clutter: Move scroll valuator accounting to backends/x11

This is just used there. Another X11 detail that got open coded.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1403>
This commit is contained in:
Carlos Garnacho 2020-11-19 02:07:53 +01:00 committed by Marge Bot
parent d7d92b0ddc
commit 06d577fdf3
5 changed files with 122 additions and 125 deletions

View File

@ -32,16 +32,6 @@
G_BEGIN_DECLS
typedef struct _ClutterScrollInfo
{
guint axis_id;
ClutterScrollDirection direction;
double increment;
double last_value;
guint last_value_valid : 1;
} ClutterScrollInfo;
typedef struct _ClutterPtrA11yData
{
int n_btn_pressed;
@ -98,8 +88,6 @@ struct _ClutterInputDevice
uint32_t previous_time;
int previous_button_number;
GArray *scroll_info;
char *vendor_id;
char *product_id;
char *node_path;
@ -128,20 +116,6 @@ CLUTTER_EXPORT
void _clutter_input_device_remove_event_sequence (ClutterInputDevice *device,
ClutterEvent *event);
CLUTTER_EXPORT
void _clutter_input_device_add_scroll_info (ClutterInputDevice *device,
guint index_,
ClutterScrollDirection direction,
gdouble increment);
CLUTTER_EXPORT
gboolean _clutter_input_device_get_scroll_delta (ClutterInputDevice *device,
guint index_,
gdouble value,
ClutterScrollDirection *direction_p,
gdouble *delta_p);
CLUTTER_EXPORT
void _clutter_input_device_reset_scroll_info (ClutterInputDevice *device);
CLUTTER_EXPORT
void clutter_input_device_add_tool (ClutterInputDevice *device,
ClutterInputDeviceTool *tool);

View File

@ -95,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->scroll_info, g_array_unref);
g_clear_pointer (&device->touch_sequence_actors, g_hash_table_unref);
if (device->cursor_actor)
@ -848,100 +847,6 @@ clutter_input_device_keycode_to_evdev (ClutterInputDevice *device,
evdev_keycode);
}
void
_clutter_input_device_add_scroll_info (ClutterInputDevice *device,
guint index_,
ClutterScrollDirection direction,
gdouble increment)
{
ClutterScrollInfo info;
g_return_if_fail (CLUTTER_IS_INPUT_DEVICE (device));
info.axis_id = index_;
info.direction = direction;
info.increment = increment;
info.last_value_valid = FALSE;
if (device->scroll_info == NULL)
{
device->scroll_info = g_array_new (FALSE,
FALSE,
sizeof (ClutterScrollInfo));
}
g_array_append_val (device->scroll_info, info);
}
gboolean
_clutter_input_device_get_scroll_delta (ClutterInputDevice *device,
guint index_,
gdouble value,
ClutterScrollDirection *direction_p,
gdouble *delta_p)
{
guint i;
g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device), FALSE);
if (device->scroll_info == NULL)
return FALSE;
for (i = 0; i < device->scroll_info->len; i++)
{
ClutterScrollInfo *info = &g_array_index (device->scroll_info,
ClutterScrollInfo,
i);
if (info->axis_id == index_)
{
if (direction_p != NULL)
*direction_p = info->direction;
if (delta_p != NULL)
*delta_p = 0.0;
if (info->last_value_valid)
{
if (delta_p != NULL)
{
*delta_p = (value - info->last_value)
/ info->increment;
}
info->last_value = value;
}
else
{
info->last_value = value;
info->last_value_valid = TRUE;
}
return TRUE;
}
}
return FALSE;
}
void
_clutter_input_device_reset_scroll_info (ClutterInputDevice *device)
{
guint i;
if (device->scroll_info == NULL)
return;
for (i = 0; i < device->scroll_info->len; i++)
{
ClutterScrollInfo *info = &g_array_index (device->scroll_info,
ClutterScrollInfo,
i);
info->last_value_valid = FALSE;
}
}
static void
on_grab_actor_destroy (ClutterActor *actor,
ClutterInputDevice *device)

View File

@ -38,6 +38,7 @@ struct _MetaInputDeviceX11
float current_y;
GArray *axes;
GArray *scroll_info;
#ifdef HAVE_LIBWACOM
GArray *group_modes;
@ -57,6 +58,16 @@ typedef struct _MetaX11AxisInfo
double resolution;
} MetaX11AxisInfo;
typedef struct _MetaX11ScrollInfo
{
guint axis_id;
ClutterScrollDirection direction;
double increment;
double last_value;
guint last_value_valid : 1;
} MetaX11ScrollInfo;
struct _MetaInputDeviceX11Class
{
ClutterInputDeviceClass device_class;
@ -149,6 +160,7 @@ meta_input_device_x11_finalize (GObject *object)
MetaInputDeviceX11 *device_xi2 = META_INPUT_DEVICE_X11 (object);
g_clear_pointer (&device_xi2->axes, g_array_unref);
g_clear_pointer (&device_xi2->scroll_info, g_array_unref);
#ifdef HAVE_LIBWACOM
if (device_xi2->group_modes)
@ -594,6 +606,101 @@ meta_input_device_x11_get_n_axes (ClutterInputDevice *device)
return device_x11->axes->len;
}
void
meta_input_device_x11_add_scroll_info (ClutterInputDevice *device,
int idx,
ClutterScrollDirection direction,
double increment)
{
MetaInputDeviceX11 *device_x11 = META_INPUT_DEVICE_X11 (device);
MetaX11ScrollInfo info;
g_return_if_fail (CLUTTER_IS_INPUT_DEVICE (device));
info.axis_id = idx;
info.direction = direction;
info.increment = increment;
info.last_value_valid = FALSE;
if (device_x11->scroll_info == NULL)
{
device_x11->scroll_info = g_array_new (FALSE,
FALSE,
sizeof (MetaX11ScrollInfo));
}
g_array_append_val (device_x11->scroll_info, info);
}
gboolean
meta_input_device_x11_get_scroll_delta (ClutterInputDevice *device,
int idx,
double value,
ClutterScrollDirection *direction_p,
double *delta_p)
{
MetaInputDeviceX11 *device_x11 = META_INPUT_DEVICE_X11 (device);
int i;
if (device_x11->scroll_info == NULL)
return FALSE;
for (i = 0; i < device_x11->scroll_info->len; i++)
{
MetaX11ScrollInfo *info = &g_array_index (device_x11->scroll_info,
MetaX11ScrollInfo,
i);
if (info->axis_id == idx)
{
if (direction_p != NULL)
*direction_p = info->direction;
if (delta_p != NULL)
*delta_p = 0.0;
if (info->last_value_valid)
{
if (delta_p != NULL)
{
*delta_p = (value - info->last_value)
/ info->increment;
}
info->last_value = value;
}
else
{
info->last_value = value;
info->last_value_valid = TRUE;
}
return TRUE;
}
}
return FALSE;
}
void
meta_input_device_x11_reset_scroll_info (ClutterInputDevice *device)
{
MetaInputDeviceX11 *device_x11 = META_INPUT_DEVICE_X11 (device);
int i;
if (device_x11->scroll_info == NULL)
return;
for (i = 0; i < device_x11->scroll_info->len; i++)
{
MetaX11ScrollInfo *info = &g_array_index (device_x11->scroll_info,
MetaX11ScrollInfo,
i);
info->last_value_valid = FALSE;
}
}
#ifdef HAVE_LIBWACOM
uint32_t
meta_input_device_x11_get_pad_group_mode (ClutterInputDevice *device,

View File

@ -86,6 +86,17 @@ gboolean meta_input_device_x11_translate_axis (ClutterInputDevice *device,
double value,
double *axis_value);
void meta_input_device_x11_add_scroll_info (ClutterInputDevice *device,
int idx,
ClutterScrollDirection direction,
double increment);
gboolean meta_input_device_x11_get_scroll_delta (ClutterInputDevice *device,
int idx,
gdouble value,
ClutterScrollDirection *direction_p,
double *delta_p);
void meta_input_device_x11_reset_scroll_info (ClutterInputDevice *device);
G_END_DECLS
#endif /* META_INPUT_DEVICE_X11_H */

View File

@ -197,7 +197,7 @@ translate_device_classes (Display *xdisplay,
: "horizontal",
scroll_info->increment);
_clutter_input_device_add_scroll_info (device,
meta_input_device_x11_add_scroll_info (device,
scroll_info->number,
direction,
scroll_info->increment);
@ -1195,7 +1195,7 @@ scroll_valuators_changed (ClutterInputDevice *device,
if (!XIMaskIsSet (valuators->mask, i))
continue;
if (_clutter_input_device_get_scroll_delta (device, i,
if (meta_input_device_x11_get_scroll_delta (device, i,
values[n_val],
&direction,
&delta))
@ -1794,7 +1794,7 @@ meta_seat_x11_translate_event (MetaSeatX11 *seat,
}
if (source_device)
_clutter_input_device_reset_scroll_info (source_device);
meta_input_device_x11_reset_scroll_info (source_device);
}
retval = FALSE;
break;
@ -2308,7 +2308,7 @@ meta_seat_x11_translate_event (MetaSeatX11 *seat,
translate_coords (stage_x11, xev->event_x, xev->event_y, &event->crossing.x, &event->crossing.y);
}
_clutter_input_device_reset_scroll_info (source_device);
meta_input_device_x11_reset_scroll_info (source_device);
clutter_event_set_device (event, device);
clutter_event_set_source_device (event, source_device);