[mutter] ClutterVirtualInputDevice: Add discrete scrolling
- From: Jonas Ådahl <jadahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] ClutterVirtualInputDevice: Add discrete scrolling
- Date: Tue, 29 Aug 2017 06:41:21 +0000 (UTC)
commit a10ad577a751a3ecc266b0e48af7d7e94b4d2b75
Author: Jonas Ådahl <jadahl gmail com>
Date: Tue Aug 23 15:39:02 2016 +0800
ClutterVirtualInputDevice: Add discrete scrolling
Add emitting of discrete scrolling events (such as mouse scroll
wheel-like events).
https://bugzilla.gnome.org/show_bug.cgi?id=784199
clutter/clutter/clutter-virtual-input-device.c | 13 +++++
clutter/clutter/clutter-virtual-input-device.h | 12 +++++
.../evdev/clutter-virtual-input-device-evdev.c | 52 ++++++++++++++++++++
3 files changed, 77 insertions(+), 0 deletions(-)
---
diff --git a/clutter/clutter/clutter-virtual-input-device.c b/clutter/clutter/clutter-virtual-input-device.c
index 9ffd013..8cab4bc 100644
--- a/clutter/clutter/clutter-virtual-input-device.c
+++ b/clutter/clutter/clutter-virtual-input-device.c
@@ -115,6 +115,19 @@ clutter_virtual_input_device_notify_keyval (ClutterVirtualInputDevice *virtual_d
klass->notify_keyval (virtual_device, time_us, keyval, key_state);
}
+void
+clutter_virtual_input_device_notify_discrete_scroll (ClutterVirtualInputDevice *virtual_device,
+ uint64_t time_us,
+ ClutterScrollDirection direction,
+ ClutterScrollSource scroll_source)
+{
+ ClutterVirtualInputDeviceClass *klass =
+ CLUTTER_VIRTUAL_INPUT_DEVICE_GET_CLASS (virtual_device);
+
+ klass->notify_discrete_scroll (virtual_device, time_us,
+ direction, scroll_source);
+}
+
/**
* clutter_virtual_input_device_get_manager:
* @virtual_device: a virtual device
diff --git a/clutter/clutter/clutter-virtual-input-device.h b/clutter/clutter/clutter-virtual-input-device.h
index c6c6deb..a2a0b30 100644
--- a/clutter/clutter/clutter-virtual-input-device.h
+++ b/clutter/clutter/clutter-virtual-input-device.h
@@ -76,6 +76,11 @@ struct _ClutterVirtualInputDeviceClass
uint64_t time_us,
uint32_t keyval,
ClutterKeyState key_state);
+
+ void (*notify_discrete_scroll) (ClutterVirtualInputDevice *virtual_device,
+ uint64_t time_us,
+ ClutterScrollDirection direction,
+ ClutterScrollSource scroll_source);
};
CLUTTER_AVAILABLE_IN_ALL
@@ -109,6 +114,13 @@ void clutter_virtual_input_device_notify_keyval (ClutterVirtualInputDevice *virt
ClutterKeyState key_state);
CLUTTER_AVAILABLE_IN_ALL
+void clutter_virtual_input_device_notify_discrete_scroll (ClutterVirtualInputDevice *virtual_device,
+ uint64_t time_us,
+ ClutterScrollDirection direction,
+ ClutterScrollSource scroll_source);
+
+
+CLUTTER_AVAILABLE_IN_ALL
ClutterDeviceManager * clutter_virtual_input_device_get_manager (ClutterVirtualInputDevice *virtual_device);
int clutter_virtual_input_device_get_device_type (ClutterVirtualInputDevice *virtual_device);
diff --git a/clutter/clutter/evdev/clutter-virtual-input-device-evdev.c
b/clutter/clutter/evdev/clutter-virtual-input-device-evdev.c
index c719d9a..e487708 100644
--- a/clutter/clutter/evdev/clutter-virtual-input-device-evdev.c
+++ b/clutter/clutter/evdev/clutter-virtual-input-device-evdev.c
@@ -398,6 +398,57 @@ clutter_virtual_input_device_evdev_notify_keyval (ClutterVirtualInputDevice *vir
}
static void
+direction_to_discrete (ClutterScrollDirection direction,
+ double *discrete_dx,
+ double *discrete_dy)
+{
+ switch (direction)
+ {
+ case CLUTTER_SCROLL_UP:
+ *discrete_dx = 0.0;
+ *discrete_dy = -1.0;
+ break;
+ case CLUTTER_SCROLL_DOWN:
+ *discrete_dx = 0.0;
+ *discrete_dy = 1.0;
+ break;
+ case CLUTTER_SCROLL_LEFT:
+ *discrete_dx = -1.0;
+ *discrete_dy = 0.0;
+ break;
+ case CLUTTER_SCROLL_RIGHT:
+ *discrete_dx = 1.0;
+ *discrete_dy = 0.0;
+ break;
+ case CLUTTER_SCROLL_SMOOTH:
+ g_assert_not_reached ();
+ break;
+ }
+}
+
+static void
+clutter_virtual_input_device_evdev_notify_discrete_scroll (ClutterVirtualInputDevice *virtual_device,
+ uint64_t time_us,
+ ClutterScrollDirection direction,
+ ClutterScrollSource scroll_source)
+{
+ ClutterVirtualInputDeviceEvdev *virtual_evdev =
+ CLUTTER_VIRTUAL_INPUT_DEVICE_EVDEV (virtual_device);
+ double discrete_dx = 0.0, discrete_dy = 0.0;
+
+ if (time_us == CLUTTER_CURRENT_TIME)
+ time_us = g_get_monotonic_time ();
+
+ direction_to_discrete (direction, &discrete_dx, &discrete_dy);
+
+ clutter_seat_evdev_notify_discrete_scroll (virtual_evdev->seat,
+ virtual_evdev->device,
+ time_us,
+ discrete_dx, discrete_dy,
+ scroll_source);
+}
+
+static void
clutter_virtual_input_device_evdev_get_property (GObject *object,
guint prop_id,
GValue *value,
@@ -500,6 +551,7 @@ clutter_virtual_input_device_evdev_class_init (ClutterVirtualInputDeviceEvdevCla
virtual_input_device_class->notify_button = clutter_virtual_input_device_evdev_notify_button;
virtual_input_device_class->notify_key = clutter_virtual_input_device_evdev_notify_key;
virtual_input_device_class->notify_keyval = clutter_virtual_input_device_evdev_notify_keyval;
+ virtual_input_device_class->notify_discrete_scroll =
clutter_virtual_input_device_evdev_notify_discrete_scroll;
obj_props[PROP_SEAT] = g_param_spec_pointer ("seat",
P_("ClutterSeatEvdev"),
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]