Handle relative motion for mouse tools
This commit is contained in:
parent
503f9d6e52
commit
48e2cba9b6
|
@ -204,10 +204,12 @@ void handle_tablet_tool_axis(struct libinput_event *event,
|
||||||
if (libinput_event_tablet_tool_x_has_changed(tevent)) {
|
if (libinput_event_tablet_tool_x_has_changed(tevent)) {
|
||||||
wlr_event.updated_axes |= WLR_TABLET_TOOL_AXIS_X;
|
wlr_event.updated_axes |= WLR_TABLET_TOOL_AXIS_X;
|
||||||
wlr_event.x = libinput_event_tablet_tool_get_x_transformed(tevent, 1);
|
wlr_event.x = libinput_event_tablet_tool_get_x_transformed(tevent, 1);
|
||||||
|
wlr_event.dx = libinput_event_tablet_tool_get_dx(tevent);
|
||||||
}
|
}
|
||||||
if (libinput_event_tablet_tool_y_has_changed(tevent)) {
|
if (libinput_event_tablet_tool_y_has_changed(tevent)) {
|
||||||
wlr_event.updated_axes |= WLR_TABLET_TOOL_AXIS_Y;
|
wlr_event.updated_axes |= WLR_TABLET_TOOL_AXIS_Y;
|
||||||
wlr_event.y = libinput_event_tablet_tool_get_y_transformed(tevent, 1);
|
wlr_event.y = libinput_event_tablet_tool_get_y_transformed(tevent, 1);
|
||||||
|
wlr_event.dy = libinput_event_tablet_tool_get_dy(tevent);
|
||||||
}
|
}
|
||||||
if (libinput_event_tablet_tool_pressure_has_changed(tevent)) {
|
if (libinput_event_tablet_tool_pressure_has_changed(tevent)) {
|
||||||
wlr_event.updated_axes |= WLR_TABLET_TOOL_AXIS_PRESSURE;
|
wlr_event.updated_axes |= WLR_TABLET_TOOL_AXIS_PRESSURE;
|
||||||
|
|
|
@ -79,6 +79,8 @@ struct wlr_event_tablet_tool_axis {
|
||||||
uint32_t updated_axes;
|
uint32_t updated_axes;
|
||||||
// From 0..1
|
// From 0..1
|
||||||
double x, y;
|
double x, y;
|
||||||
|
// Relative to last event
|
||||||
|
double dx, dy;
|
||||||
double pressure;
|
double pressure;
|
||||||
double distance;
|
double distance;
|
||||||
double tilt_x, tilt_y;
|
double tilt_x, tilt_y;
|
||||||
|
|
|
@ -104,14 +104,21 @@ static void handle_touch_motion(struct wl_listener *listener, void *data) {
|
||||||
static void handle_tablet_tool_position(struct roots_cursor *cursor,
|
static void handle_tablet_tool_position(struct roots_cursor *cursor,
|
||||||
struct roots_tablet_tool *tool,
|
struct roots_tablet_tool *tool,
|
||||||
struct wlr_tablet_tool_tool *tool_tool,
|
struct wlr_tablet_tool_tool *tool_tool,
|
||||||
bool change_x, bool change_y, double x, double y,
|
bool change_x, bool change_y,
|
||||||
uint32_t time) {
|
double x, double y, double dx, double dy) {
|
||||||
if (!change_x && !change_y) {
|
if (!change_x && !change_y) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
wlr_cursor_warp_absolute(cursor->cursor, tool->device,
|
switch (tool_tool->type) {
|
||||||
change_x ? x : NAN, change_y ? y : NAN);
|
case WLR_TABLET_TOOL_TYPE_MOUSE:
|
||||||
|
// They are 0 either way when they weren't modified
|
||||||
|
wlr_cursor_move(cursor->cursor, tool->device, dx, dy);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
wlr_cursor_warp_absolute(cursor->cursor, tool->device,
|
||||||
|
change_x ? x : NAN, change_y ? y : NAN);
|
||||||
|
}
|
||||||
|
|
||||||
double sx, sy;
|
double sx, sy;
|
||||||
struct roots_view *view = NULL;
|
struct roots_view *view = NULL;
|
||||||
|
@ -159,7 +166,7 @@ static void handle_tool_axis(struct wl_listener *listener, void *data) {
|
||||||
handle_tablet_tool_position(cursor, event->device->data, event->tool,
|
handle_tablet_tool_position(cursor, event->device->data, event->tool,
|
||||||
event->updated_axes & WLR_TABLET_TOOL_AXIS_X,
|
event->updated_axes & WLR_TABLET_TOOL_AXIS_X,
|
||||||
event->updated_axes & WLR_TABLET_TOOL_AXIS_Y,
|
event->updated_axes & WLR_TABLET_TOOL_AXIS_Y,
|
||||||
event->x, event->y, event->time_msec);
|
event->x, event->y, event->dx, event->dy);
|
||||||
|
|
||||||
if (event->updated_axes & WLR_TABLET_TOOL_AXIS_PRESSURE) {
|
if (event->updated_axes & WLR_TABLET_TOOL_AXIS_PRESSURE) {
|
||||||
wlr_send_tablet_v2_tablet_tool_pressure(roots_tool->tablet_v2_tool, event->pressure);
|
wlr_send_tablet_v2_tablet_tool_pressure(roots_tool->tablet_v2_tool, event->pressure);
|
||||||
|
@ -271,7 +278,7 @@ static void handle_tool_proximity(struct wl_listener *listener, void *data) {
|
||||||
}
|
}
|
||||||
|
|
||||||
handle_tablet_tool_position(cursor, event->device->data, event->tool,
|
handle_tablet_tool_position(cursor, event->device->data, event->tool,
|
||||||
true, true, event->x, event->y, event->time_msec);
|
true, true, event->x, event->y, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_request_set_cursor(struct wl_listener *listener,
|
static void handle_request_set_cursor(struct wl_listener *listener,
|
||||||
|
|
Loading…
Reference in New Issue