mirror of
https://github.com/brl/mutter.git
synced 2024-11-21 15:40:41 -05:00
clutter: Make axes part of the device tool
This info can be construct-only there, as opposed to devices. Move this info to tools, so we can drop it from devices. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1403>
This commit is contained in:
parent
be9c531ab9
commit
e772f62ea7
@ -1050,6 +1050,20 @@ typedef enum
|
||||
CLUTTER_INPUT_AXIS_LAST
|
||||
} ClutterInputAxis;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
CLUTTER_INPUT_AXIS_FLAG_NONE = 0,
|
||||
CLUTTER_INPUT_AXIS_FLAG_X = 1 << CLUTTER_INPUT_AXIS_X,
|
||||
CLUTTER_INPUT_AXIS_FLAG_Y = 1 << CLUTTER_INPUT_AXIS_Y,
|
||||
CLUTTER_INPUT_AXIS_FLAG_PRESSURE = 1 << CLUTTER_INPUT_AXIS_PRESSURE,
|
||||
CLUTTER_INPUT_AXIS_FLAG_XTILT = 1 << CLUTTER_INPUT_AXIS_XTILT,
|
||||
CLUTTER_INPUT_AXIS_FLAG_YTILT = 1 << CLUTTER_INPUT_AXIS_YTILT,
|
||||
CLUTTER_INPUT_AXIS_FLAG_WHEEL = 1 << CLUTTER_INPUT_AXIS_WHEEL,
|
||||
CLUTTER_INPUT_AXIS_FLAG_DISTANCE = 1 << CLUTTER_INPUT_AXIS_DISTANCE,
|
||||
CLUTTER_INPUT_AXIS_FLAG_ROTATION = 1 << CLUTTER_INPUT_AXIS_ROTATION,
|
||||
CLUTTER_INPUT_AXIS_FLAG_SLIDER = 1 << CLUTTER_INPUT_AXIS_SLIDER,
|
||||
} ClutterInputAxisFlags;
|
||||
|
||||
/**
|
||||
* ClutterSnapEdge:
|
||||
* @CLUTTER_SNAP_EDGE_TOP: the top edge
|
||||
|
@ -33,6 +33,7 @@ struct _ClutterInputDeviceToolPrivate
|
||||
ClutterInputDeviceToolType type;
|
||||
guint64 serial;
|
||||
guint64 id;
|
||||
ClutterInputAxisFlags axes;
|
||||
};
|
||||
|
||||
enum
|
||||
@ -41,6 +42,7 @@ enum
|
||||
PROP_TYPE,
|
||||
PROP_SERIAL,
|
||||
PROP_ID,
|
||||
PROP_AXES,
|
||||
PROP_LAST
|
||||
};
|
||||
|
||||
@ -70,6 +72,9 @@ clutter_input_device_tool_set_property (GObject *object,
|
||||
case PROP_ID:
|
||||
priv->id = g_value_get_uint64 (value);
|
||||
break;
|
||||
case PROP_AXES:
|
||||
priv->axes = g_value_get_flags (value);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
}
|
||||
@ -97,6 +102,9 @@ clutter_input_device_tool_get_property (GObject *object,
|
||||
case PROP_ID:
|
||||
g_value_set_uint64 (value, priv->id);
|
||||
break;
|
||||
case PROP_AXES:
|
||||
g_value_set_flags (value, priv->axes);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
}
|
||||
@ -129,6 +137,13 @@ clutter_input_device_tool_class_init (ClutterInputDeviceToolClass *klass)
|
||||
P_("Tool ID"),
|
||||
0, G_MAXUINT64, 0,
|
||||
CLUTTER_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
|
||||
props[PROP_AXES] =
|
||||
g_param_spec_flags ("axes",
|
||||
P_("Axes"),
|
||||
P_("Axes"),
|
||||
CLUTTER_TYPE_INPUT_AXIS_FLAGS,
|
||||
CLUTTER_INPUT_AXIS_FLAG_NONE,
|
||||
CLUTTER_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
|
||||
|
||||
g_object_class_install_properties (gobject_class, PROP_LAST, props);
|
||||
}
|
||||
@ -204,3 +219,15 @@ clutter_input_device_tool_get_id (ClutterInputDeviceTool *tool)
|
||||
|
||||
return priv->id;
|
||||
}
|
||||
|
||||
ClutterInputAxisFlags
|
||||
clutter_input_device_tool_get_axes (ClutterInputDeviceTool *tool)
|
||||
{
|
||||
ClutterInputDeviceToolPrivate *priv;
|
||||
|
||||
g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE_TOOL (tool), 0);
|
||||
|
||||
priv = clutter_input_device_tool_get_instance_private (tool);
|
||||
|
||||
return priv->axes;
|
||||
}
|
||||
|
@ -64,6 +64,9 @@ ClutterInputDeviceToolType clutter_input_device_tool_get_tool_type (ClutterInput
|
||||
CLUTTER_EXPORT
|
||||
guint64 clutter_input_device_tool_get_id (ClutterInputDeviceTool *tool);
|
||||
|
||||
CLUTTER_EXPORT
|
||||
ClutterInputAxisFlags clutter_input_device_tool_get_axes (ClutterInputDeviceTool *tool);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __CLUTTER_INPUT_DEVICE_TOOL_H__ */
|
||||
|
@ -49,6 +49,27 @@ meta_input_device_tool_native_init (MetaInputDeviceToolNative *tool)
|
||||
tool->button_map = g_hash_table_new (NULL, NULL);
|
||||
}
|
||||
|
||||
static ClutterInputAxisFlags
|
||||
translate_axes (struct libinput_tablet_tool *tool)
|
||||
{
|
||||
ClutterInputAxisFlags axes = 0;
|
||||
|
||||
if (libinput_tablet_tool_has_pressure (tool))
|
||||
axes |= CLUTTER_INPUT_AXIS_FLAG_PRESSURE;
|
||||
if (libinput_tablet_tool_has_distance (tool))
|
||||
axes |= CLUTTER_INPUT_AXIS_FLAG_DISTANCE;
|
||||
if (libinput_tablet_tool_has_rotation (tool))
|
||||
axes |= CLUTTER_INPUT_AXIS_FLAG_ROTATION;
|
||||
if (libinput_tablet_tool_has_slider (tool))
|
||||
axes |= CLUTTER_INPUT_AXIS_FLAG_SLIDER;
|
||||
if (libinput_tablet_tool_has_wheel (tool))
|
||||
axes |= CLUTTER_INPUT_AXIS_FLAG_WHEEL;
|
||||
if (libinput_tablet_tool_has_tilt (tool))
|
||||
axes |= CLUTTER_INPUT_AXIS_FLAG_XTILT | CLUTTER_INPUT_AXIS_FLAG_YTILT;
|
||||
|
||||
return axes;
|
||||
}
|
||||
|
||||
ClutterInputDeviceTool *
|
||||
meta_input_device_tool_native_new (struct libinput_tablet_tool *tool,
|
||||
uint64_t serial,
|
||||
@ -60,6 +81,7 @@ meta_input_device_tool_native_new (struct libinput_tablet_tool *tool,
|
||||
"type", type,
|
||||
"serial", serial,
|
||||
"id", libinput_tablet_tool_get_tool_id (tool),
|
||||
"axes", translate_axes (tool),
|
||||
NULL);
|
||||
|
||||
evdev_tool->tool = libinput_tablet_tool_ref (tool);
|
||||
|
@ -38,8 +38,19 @@ ClutterInputDeviceTool *
|
||||
meta_input_device_tool_x11_new (guint serial,
|
||||
ClutterInputDeviceToolType type)
|
||||
{
|
||||
ClutterInputAxisFlags axes =
|
||||
CLUTTER_INPUT_AXIS_FLAG_PRESSURE |
|
||||
CLUTTER_INPUT_AXIS_FLAG_DISTANCE |
|
||||
CLUTTER_INPUT_AXIS_FLAG_XTILT |
|
||||
CLUTTER_INPUT_AXIS_FLAG_YTILT |
|
||||
CLUTTER_INPUT_AXIS_FLAG_WHEEL |
|
||||
CLUTTER_INPUT_AXIS_FLAG_DISTANCE |
|
||||
CLUTTER_INPUT_AXIS_FLAG_ROTATION |
|
||||
CLUTTER_INPUT_AXIS_FLAG_SLIDER;
|
||||
|
||||
return g_object_new (META_TYPE_INPUT_DEVICE_TOOL_X11,
|
||||
"type", type,
|
||||
"serial", serial,
|
||||
"axes", axes,
|
||||
NULL);
|
||||
}
|
||||
|
@ -137,45 +137,6 @@ meta_wayland_tablet_tool_set_cursor_surface (MetaWaylandTabletTool *tool,
|
||||
meta_wayland_tablet_tool_update_cursor_surface (tool);
|
||||
}
|
||||
|
||||
static uint32_t
|
||||
input_device_get_capabilities (ClutterInputDevice *device)
|
||||
{
|
||||
ClutterInputAxis axis;
|
||||
guint32 capabilities = 0, i;
|
||||
|
||||
for (i = 0; i < clutter_input_device_get_n_axes (device); i++)
|
||||
{
|
||||
axis = clutter_input_device_get_axis (device, i);
|
||||
|
||||
switch (axis)
|
||||
{
|
||||
case CLUTTER_INPUT_AXIS_PRESSURE:
|
||||
capabilities |= 1 << ZWP_TABLET_TOOL_V2_CAPABILITY_PRESSURE;
|
||||
break;
|
||||
case CLUTTER_INPUT_AXIS_DISTANCE:
|
||||
capabilities |= 1 << ZWP_TABLET_TOOL_V2_CAPABILITY_DISTANCE;
|
||||
break;
|
||||
case CLUTTER_INPUT_AXIS_XTILT:
|
||||
case CLUTTER_INPUT_AXIS_YTILT:
|
||||
capabilities |= 1 << ZWP_TABLET_TOOL_V2_CAPABILITY_TILT;
|
||||
break;
|
||||
case CLUTTER_INPUT_AXIS_ROTATION:
|
||||
capabilities |= 1 << ZWP_TABLET_TOOL_V2_CAPABILITY_ROTATION;
|
||||
break;
|
||||
case CLUTTER_INPUT_AXIS_WHEEL:
|
||||
capabilities |= 1 << ZWP_TABLET_TOOL_V2_CAPABILITY_WHEEL;
|
||||
break;
|
||||
case CLUTTER_INPUT_AXIS_SLIDER:
|
||||
capabilities |= 1 << ZWP_TABLET_TOOL_V2_CAPABILITY_SLIDER;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return capabilities;
|
||||
}
|
||||
|
||||
static enum zwp_tablet_tool_v2_type
|
||||
input_device_tool_get_type (ClutterInputDeviceTool *device_tool)
|
||||
{
|
||||
@ -210,26 +171,26 @@ static void
|
||||
meta_wayland_tablet_tool_notify_capabilities (MetaWaylandTabletTool *tool,
|
||||
struct wl_resource *resource)
|
||||
{
|
||||
uint32_t capabilities;
|
||||
ClutterInputAxisFlags axes;
|
||||
|
||||
capabilities = input_device_get_capabilities (tool->device);
|
||||
axes = clutter_input_device_tool_get_axes (tool->device_tool);
|
||||
|
||||
if (capabilities & (1 << ZWP_TABLET_TOOL_V2_CAPABILITY_PRESSURE))
|
||||
if (axes & CLUTTER_INPUT_AXIS_FLAG_PRESSURE)
|
||||
zwp_tablet_tool_v2_send_capability (resource,
|
||||
ZWP_TABLET_TOOL_V2_CAPABILITY_PRESSURE);
|
||||
if (capabilities & (1 << ZWP_TABLET_TOOL_V2_CAPABILITY_DISTANCE))
|
||||
if (axes & CLUTTER_INPUT_AXIS_FLAG_DISTANCE)
|
||||
zwp_tablet_tool_v2_send_capability (resource,
|
||||
ZWP_TABLET_TOOL_V2_CAPABILITY_DISTANCE);
|
||||
if (capabilities & (1 << ZWP_TABLET_TOOL_V2_CAPABILITY_TILT))
|
||||
if (axes & (CLUTTER_INPUT_AXIS_FLAG_XTILT | CLUTTER_INPUT_AXIS_FLAG_YTILT))
|
||||
zwp_tablet_tool_v2_send_capability (resource,
|
||||
ZWP_TABLET_TOOL_V2_CAPABILITY_TILT);
|
||||
if (capabilities & (1 << ZWP_TABLET_TOOL_V2_CAPABILITY_ROTATION))
|
||||
if (axes & CLUTTER_INPUT_AXIS_FLAG_ROTATION)
|
||||
zwp_tablet_tool_v2_send_capability (resource,
|
||||
ZWP_TABLET_TOOL_V2_CAPABILITY_ROTATION);
|
||||
if (capabilities & (1 << ZWP_TABLET_TOOL_V2_CAPABILITY_SLIDER))
|
||||
if (axes & CLUTTER_INPUT_AXIS_FLAG_SLIDER)
|
||||
zwp_tablet_tool_v2_send_capability (resource,
|
||||
ZWP_TABLET_TOOL_V2_CAPABILITY_SLIDER);
|
||||
if (capabilities & (1 << ZWP_TABLET_TOOL_V2_CAPABILITY_WHEEL))
|
||||
if (axes & CLUTTER_INPUT_AXIS_FLAG_WHEEL)
|
||||
zwp_tablet_tool_v2_send_capability (resource,
|
||||
ZWP_TABLET_TOOL_V2_CAPABILITY_WHEEL);
|
||||
}
|
||||
@ -842,26 +803,21 @@ static void
|
||||
broadcast_axes (MetaWaylandTabletTool *tool,
|
||||
const ClutterEvent *event)
|
||||
{
|
||||
ClutterInputDevice *device;
|
||||
guint32 capabilities;
|
||||
ClutterInputAxisFlags axes;
|
||||
|
||||
if (!event->motion.axes)
|
||||
return;
|
||||
axes = clutter_input_device_tool_get_axes (tool->device_tool);
|
||||
|
||||
device = clutter_event_get_source_device (event);
|
||||
capabilities = input_device_get_capabilities (device);
|
||||
|
||||
if (capabilities & (1 << ZWP_TABLET_TOOL_V2_CAPABILITY_PRESSURE))
|
||||
if (axes & CLUTTER_INPUT_AXIS_FLAG_PRESSURE)
|
||||
broadcast_axis (tool, event, CLUTTER_INPUT_AXIS_PRESSURE);
|
||||
if (capabilities & (1 << ZWP_TABLET_TOOL_V2_CAPABILITY_DISTANCE))
|
||||
if (axes & CLUTTER_INPUT_AXIS_FLAG_DISTANCE)
|
||||
broadcast_axis (tool, event, CLUTTER_INPUT_AXIS_DISTANCE);
|
||||
if (capabilities & (1 << ZWP_TABLET_TOOL_V2_CAPABILITY_TILT))
|
||||
if (axes & (CLUTTER_INPUT_AXIS_FLAG_XTILT | CLUTTER_INPUT_AXIS_FLAG_YTILT))
|
||||
broadcast_tilt (tool, event);
|
||||
if (capabilities & (1 << ZWP_TABLET_TOOL_V2_CAPABILITY_ROTATION))
|
||||
if (axes & CLUTTER_INPUT_AXIS_FLAG_ROTATION)
|
||||
broadcast_rotation (tool, event);
|
||||
if (capabilities & (1 << ZWP_TABLET_TOOL_V2_CAPABILITY_SLIDER))
|
||||
if (axes & CLUTTER_INPUT_AXIS_FLAG_SLIDER)
|
||||
broadcast_axis (tool, event, CLUTTER_INPUT_AXIS_SLIDER);
|
||||
if (capabilities & (1 << ZWP_TABLET_TOOL_V2_CAPABILITY_WHEEL))
|
||||
if (axes & CLUTTER_INPUT_AXIS_FLAG_WHEEL)
|
||||
broadcast_wheel (tool, event);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user