mirror of
https://github.com/brl/mutter.git
synced 2024-11-21 15:40:41 -05:00
clutter: Add API for retrieving gesture unaccelerated deltas
This will be useful for better aligning behavior between scrolling and swiping for gnome-shell swipe tracker. https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1353
This commit is contained in:
parent
dbff32ec5c
commit
620386f3ac
@ -2126,6 +2126,42 @@ clutter_event_get_gesture_motion_delta (const ClutterEvent *event,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* clutter_event_get_gesture_motion_delta_unaccelerated:
|
||||||
|
* @event: A clutter touchpad gesture event
|
||||||
|
* @dx: (out) (allow-none): the displacement relative to the pointer
|
||||||
|
* position in the X axis, or %NULL
|
||||||
|
* @dy: (out) (allow-none): the displacement relative to the pointer
|
||||||
|
* position in the Y axis, or %NULL
|
||||||
|
*
|
||||||
|
* Returns the unaccelerated gesture motion deltas relative to the current
|
||||||
|
* pointer position. Unlike clutter_event_get_gesture_motion_delta(),
|
||||||
|
* pointer acceleration is ignored.
|
||||||
|
**/
|
||||||
|
void
|
||||||
|
clutter_event_get_gesture_motion_delta_unaccelerated (const ClutterEvent *event,
|
||||||
|
gdouble *dx,
|
||||||
|
gdouble *dy)
|
||||||
|
{
|
||||||
|
g_return_if_fail (event != NULL);
|
||||||
|
g_return_if_fail (event->type == CLUTTER_TOUCHPAD_PINCH ||
|
||||||
|
event->type == CLUTTER_TOUCHPAD_SWIPE);
|
||||||
|
|
||||||
|
if (event->type == CLUTTER_TOUCHPAD_PINCH)
|
||||||
|
{
|
||||||
|
if (dx)
|
||||||
|
*dx = event->touchpad_pinch.dx_unaccel;
|
||||||
|
if (dy)
|
||||||
|
*dy = event->touchpad_pinch.dy_unaccel;
|
||||||
|
}
|
||||||
|
else if (event->type == CLUTTER_TOUCHPAD_SWIPE)
|
||||||
|
{
|
||||||
|
if (dx)
|
||||||
|
*dx = event->touchpad_swipe.dx_unaccel;
|
||||||
|
if (dy)
|
||||||
|
*dy = event->touchpad_swipe.dy_unaccel;
|
||||||
|
}
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* clutter_event_get_scroll_source:
|
* clutter_event_get_scroll_source:
|
||||||
* @event: an scroll event
|
* @event: an scroll event
|
||||||
|
@ -431,6 +431,10 @@ struct _ClutterTouchEvent
|
|||||||
* @y: the Y coordinate of the pointer, relative to the stage
|
* @y: the Y coordinate of the pointer, relative to the stage
|
||||||
* @dx: movement delta of the pinch focal point in the X axis
|
* @dx: movement delta of the pinch focal point in the X axis
|
||||||
* @dy: movement delta of the pinch focal point in the Y axis
|
* @dy: movement delta of the pinch focal point in the Y axis
|
||||||
|
* @dx_unaccel: unaccelerated movement delta of the pinch focal
|
||||||
|
* point in the X axis
|
||||||
|
* @dy_unaccel: unaccelerated movement delta of the pinch focal
|
||||||
|
* point in the Y axis
|
||||||
* @angle_delta: angle delta in degrees, clockwise rotations are
|
* @angle_delta: angle delta in degrees, clockwise rotations are
|
||||||
* represented by positive deltas
|
* represented by positive deltas
|
||||||
* @scale: the current scale
|
* @scale: the current scale
|
||||||
@ -458,6 +462,8 @@ struct _ClutterTouchpadPinchEvent
|
|||||||
gfloat y;
|
gfloat y;
|
||||||
gfloat dx;
|
gfloat dx;
|
||||||
gfloat dy;
|
gfloat dy;
|
||||||
|
gfloat dx_unaccel;
|
||||||
|
gfloat dy_unaccel;
|
||||||
gfloat angle_delta;
|
gfloat angle_delta;
|
||||||
gfloat scale;
|
gfloat scale;
|
||||||
guint n_fingers;
|
guint n_fingers;
|
||||||
@ -474,8 +480,12 @@ struct _ClutterTouchpadPinchEvent
|
|||||||
* @n_fingers: the number of fingers triggering the swipe
|
* @n_fingers: the number of fingers triggering the swipe
|
||||||
* @x: the X coordinate of the pointer, relative to the stage
|
* @x: the X coordinate of the pointer, relative to the stage
|
||||||
* @y: the Y coordinate of the pointer, relative to the stage
|
* @y: the Y coordinate of the pointer, relative to the stage
|
||||||
* @dx: movement delta of the pinch focal point in the X axis
|
* @dx: movement delta of the swipe center point in the X axis
|
||||||
* @dy: movement delta of the pinch focal point in the Y axis
|
* @dy: movement delta of the swipe center point in the Y axis
|
||||||
|
* @dx_unaccel: unaccelerated movement delta of the swipe center
|
||||||
|
* point in the X axis
|
||||||
|
* @dy_unaccel: unaccelerated movement delta of the swipe center
|
||||||
|
* point in the Y axis
|
||||||
*
|
*
|
||||||
* Used for touchpad swipe gesture events. The current state of the
|
* Used for touchpad swipe gesture events. The current state of the
|
||||||
* gesture will be determined by the @phase field.
|
* gesture will be determined by the @phase field.
|
||||||
@ -496,6 +506,8 @@ struct _ClutterTouchpadSwipeEvent
|
|||||||
gfloat y;
|
gfloat y;
|
||||||
gfloat dx;
|
gfloat dx;
|
||||||
gfloat dy;
|
gfloat dy;
|
||||||
|
gfloat dx_unaccel;
|
||||||
|
gfloat dy_unaccel;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _ClutterPadButtonEvent
|
struct _ClutterPadButtonEvent
|
||||||
@ -773,6 +785,11 @@ void clutter_event_get_gesture_motion_delta (const Clut
|
|||||||
gdouble *dx,
|
gdouble *dx,
|
||||||
gdouble *dy);
|
gdouble *dy);
|
||||||
|
|
||||||
|
CLUTTER_EXPORT
|
||||||
|
void clutter_event_get_gesture_motion_delta_unaccelerated (const ClutterEvent *event,
|
||||||
|
gdouble *dx,
|
||||||
|
gdouble *dy);
|
||||||
|
|
||||||
CLUTTER_EXPORT
|
CLUTTER_EXPORT
|
||||||
ClutterScrollSource clutter_event_get_scroll_source (const ClutterEvent *event);
|
ClutterScrollSource clutter_event_get_scroll_source (const ClutterEvent *event);
|
||||||
|
|
||||||
|
@ -998,6 +998,8 @@ notify_pinch_gesture_event (ClutterInputDevice *input_device,
|
|||||||
uint64_t time_us,
|
uint64_t time_us,
|
||||||
double dx,
|
double dx,
|
||||||
double dy,
|
double dy,
|
||||||
|
double dx_unaccel,
|
||||||
|
double dy_unaccel,
|
||||||
double angle_delta,
|
double angle_delta,
|
||||||
double scale,
|
double scale,
|
||||||
uint32_t n_fingers)
|
uint32_t n_fingers)
|
||||||
@ -1029,6 +1031,8 @@ notify_pinch_gesture_event (ClutterInputDevice *input_device,
|
|||||||
event->touchpad_pinch.y = pos.y;
|
event->touchpad_pinch.y = pos.y;
|
||||||
event->touchpad_pinch.dx = dx;
|
event->touchpad_pinch.dx = dx;
|
||||||
event->touchpad_pinch.dy = dy;
|
event->touchpad_pinch.dy = dy;
|
||||||
|
event->touchpad_pinch.dx_unaccel = dx_unaccel;
|
||||||
|
event->touchpad_pinch.dy_unaccel = dy_unaccel;
|
||||||
event->touchpad_pinch.angle_delta = angle_delta;
|
event->touchpad_pinch.angle_delta = angle_delta;
|
||||||
event->touchpad_pinch.scale = scale;
|
event->touchpad_pinch.scale = scale;
|
||||||
event->touchpad_pinch.n_fingers = n_fingers;
|
event->touchpad_pinch.n_fingers = n_fingers;
|
||||||
@ -1047,7 +1051,9 @@ notify_swipe_gesture_event (ClutterInputDevice *input_device,
|
|||||||
uint64_t time_us,
|
uint64_t time_us,
|
||||||
uint32_t n_fingers,
|
uint32_t n_fingers,
|
||||||
double dx,
|
double dx,
|
||||||
double dy)
|
double dy,
|
||||||
|
double dx_unaccel,
|
||||||
|
double dy_unaccel)
|
||||||
{
|
{
|
||||||
MetaInputDeviceNative *device_evdev;
|
MetaInputDeviceNative *device_evdev;
|
||||||
MetaSeatNative *seat;
|
MetaSeatNative *seat;
|
||||||
@ -1076,6 +1082,8 @@ notify_swipe_gesture_event (ClutterInputDevice *input_device,
|
|||||||
event->touchpad_swipe.y = pos.y;
|
event->touchpad_swipe.y = pos.y;
|
||||||
event->touchpad_swipe.dx = dx;
|
event->touchpad_swipe.dx = dx;
|
||||||
event->touchpad_swipe.dy = dy;
|
event->touchpad_swipe.dy = dy;
|
||||||
|
event->touchpad_swipe.dx_unaccel = dx_unaccel;
|
||||||
|
event->touchpad_swipe.dy_unaccel = dy_unaccel;
|
||||||
event->touchpad_swipe.n_fingers = n_fingers;
|
event->touchpad_swipe.n_fingers = n_fingers;
|
||||||
|
|
||||||
meta_xkb_translate_state (event, seat->xkb, seat->button_state);
|
meta_xkb_translate_state (event, seat->xkb, seat->button_state);
|
||||||
@ -2104,14 +2112,14 @@ process_device_event (MetaSeatNative *seat,
|
|||||||
n_fingers = libinput_event_gesture_get_finger_count (gesture_event);
|
n_fingers = libinput_event_gesture_get_finger_count (gesture_event);
|
||||||
device = libinput_device_get_user_data (libinput_device);
|
device = libinput_device_get_user_data (libinput_device);
|
||||||
time_us = libinput_event_gesture_get_time_usec (gesture_event);
|
time_us = libinput_event_gesture_get_time_usec (gesture_event);
|
||||||
notify_pinch_gesture_event (device, phase, time_us, 0, 0, 0, 0, n_fingers);
|
notify_pinch_gesture_event (device, phase, time_us, 0, 0, 0, 0, 0, 0, n_fingers);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case LIBINPUT_EVENT_GESTURE_PINCH_UPDATE:
|
case LIBINPUT_EVENT_GESTURE_PINCH_UPDATE:
|
||||||
{
|
{
|
||||||
struct libinput_event_gesture *gesture_event =
|
struct libinput_event_gesture *gesture_event =
|
||||||
libinput_event_get_gesture_event (event);
|
libinput_event_get_gesture_event (event);
|
||||||
gdouble angle_delta, scale, dx, dy;
|
gdouble angle_delta, scale, dx, dy, dx_unaccel, dy_unaccel;
|
||||||
uint32_t n_fingers;
|
uint32_t n_fingers;
|
||||||
uint64_t time_us;
|
uint64_t time_us;
|
||||||
|
|
||||||
@ -2122,10 +2130,13 @@ process_device_event (MetaSeatNative *seat,
|
|||||||
scale = libinput_event_gesture_get_scale (gesture_event);
|
scale = libinput_event_gesture_get_scale (gesture_event);
|
||||||
dx = libinput_event_gesture_get_dx (gesture_event);
|
dx = libinput_event_gesture_get_dx (gesture_event);
|
||||||
dy = libinput_event_gesture_get_dy (gesture_event);
|
dy = libinput_event_gesture_get_dy (gesture_event);
|
||||||
|
dx_unaccel = libinput_event_gesture_get_dx_unaccelerated (gesture_event);
|
||||||
|
dy_unaccel = libinput_event_gesture_get_dy_unaccelerated (gesture_event);
|
||||||
|
|
||||||
notify_pinch_gesture_event (device,
|
notify_pinch_gesture_event (device,
|
||||||
CLUTTER_TOUCHPAD_GESTURE_PHASE_UPDATE,
|
CLUTTER_TOUCHPAD_GESTURE_PHASE_UPDATE,
|
||||||
time_us, dx, dy, angle_delta, scale, n_fingers);
|
time_us, dx, dy, dx_unaccel, dy_unaccel,
|
||||||
|
angle_delta, scale, n_fingers);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case LIBINPUT_EVENT_GESTURE_SWIPE_BEGIN:
|
case LIBINPUT_EVENT_GESTURE_SWIPE_BEGIN:
|
||||||
@ -2147,7 +2158,7 @@ process_device_event (MetaSeatNative *seat,
|
|||||||
phase = libinput_event_gesture_get_cancelled (gesture_event) ?
|
phase = libinput_event_gesture_get_cancelled (gesture_event) ?
|
||||||
CLUTTER_TOUCHPAD_GESTURE_PHASE_CANCEL : CLUTTER_TOUCHPAD_GESTURE_PHASE_END;
|
CLUTTER_TOUCHPAD_GESTURE_PHASE_CANCEL : CLUTTER_TOUCHPAD_GESTURE_PHASE_END;
|
||||||
|
|
||||||
notify_swipe_gesture_event (device, phase, time_us, n_fingers, 0, 0);
|
notify_swipe_gesture_event (device, phase, time_us, n_fingers, 0, 0, 0, 0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case LIBINPUT_EVENT_GESTURE_SWIPE_UPDATE:
|
case LIBINPUT_EVENT_GESTURE_SWIPE_UPDATE:
|
||||||
@ -2156,17 +2167,19 @@ process_device_event (MetaSeatNative *seat,
|
|||||||
libinput_event_get_gesture_event (event);
|
libinput_event_get_gesture_event (event);
|
||||||
uint32_t n_fingers;
|
uint32_t n_fingers;
|
||||||
uint64_t time_us;
|
uint64_t time_us;
|
||||||
double dx, dy;
|
double dx, dy, dx_unaccel, dy_unaccel;
|
||||||
|
|
||||||
device = libinput_device_get_user_data (libinput_device);
|
device = libinput_device_get_user_data (libinput_device);
|
||||||
time_us = libinput_event_gesture_get_time_usec (gesture_event);
|
time_us = libinput_event_gesture_get_time_usec (gesture_event);
|
||||||
n_fingers = libinput_event_gesture_get_finger_count (gesture_event);
|
n_fingers = libinput_event_gesture_get_finger_count (gesture_event);
|
||||||
dx = libinput_event_gesture_get_dx (gesture_event);
|
dx = libinput_event_gesture_get_dx (gesture_event);
|
||||||
dy = libinput_event_gesture_get_dy (gesture_event);
|
dy = libinput_event_gesture_get_dy (gesture_event);
|
||||||
|
dx_unaccel = libinput_event_gesture_get_dx_unaccelerated (gesture_event);
|
||||||
|
dy_unaccel = libinput_event_gesture_get_dy_unaccelerated (gesture_event);
|
||||||
|
|
||||||
notify_swipe_gesture_event (device,
|
notify_swipe_gesture_event (device,
|
||||||
CLUTTER_TOUCHPAD_GESTURE_PHASE_UPDATE,
|
CLUTTER_TOUCHPAD_GESTURE_PHASE_UPDATE,
|
||||||
time_us, n_fingers, dx, dy);
|
time_us, n_fingers, dx, dy, dx_unaccel, dy_unaccel);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case LIBINPUT_EVENT_TABLET_TOOL_AXIS:
|
case LIBINPUT_EVENT_TABLET_TOOL_AXIS:
|
||||||
|
Loading…
Reference in New Issue
Block a user