[PATCH libinput 06/10] Add a config interface to change device rotation
Peter Hutterer
peter.hutterer at who-t.net
Mon Jun 2 22:34:59 PDT 2014
Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
---
src/libinput-private.h | 9 +++++++
src/libinput.c | 33 ++++++++++++++++++++++++
src/libinput.h | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 111 insertions(+)
diff --git a/src/libinput-private.h b/src/libinput-private.h
index d3570a4..0d2a1b1 100644
--- a/src/libinput-private.h
+++ b/src/libinput-private.h
@@ -85,9 +85,18 @@ struct libinput_device_config_scroll {
void (*reset)(struct libinput_device *device);
};
+struct libinput_device_config_rotation {
+ int (*increment)(struct libinput_device *device);
+ enum libinput_config_status (*set)(struct libinput_device *device,
+ int degrees_cw);
+ int (*get)(struct libinput_device *device);
+ void (*reset)(struct libinput_device *device);
+};
+
struct libinput_device_config {
struct libinput_device_config_tap *tap;
struct libinput_device_config_scroll *scroll;
+ struct libinput_device_config_rotation *rotation;
};
struct libinput_device {
diff --git a/src/libinput.c b/src/libinput.c
index b2388e6..2572f5b 100644
--- a/src/libinput.c
+++ b/src/libinput.c
@@ -1250,3 +1250,36 @@ libinput_device_config_scroll_reset(struct libinput_device *device)
if (device->config.scroll)
device->config.scroll->reset(device);
}
+
+LIBINPUT_EXPORT int
+libinput_device_config_rotation_get_increment(struct libinput_device *device)
+{
+ return device->config.rotation ?
+ device->config.rotation->increment(device) : 0;
+}
+
+LIBINPUT_EXPORT enum libinput_config_status
+libinput_device_config_rotation_set(struct libinput_device *device,
+ int degrees_cw)
+{
+ if (libinput_device_config_rotation_get_increment(device) == 0)
+ return LIBINPUT_CONFIG_STATUS_UNSUPPORTED;
+
+ return device->config.rotation->set(device, degrees_cw);
+}
+
+LIBINPUT_EXPORT int
+libinput_device_config_rotation_get(struct libinput_device *device)
+{
+ if (libinput_device_config_rotation_get_increment(device) == 0)
+ return 0;
+
+ return device->config.rotation->get(device);
+}
+
+LIBINPUT_EXPORT void
+libinput_device_config_rotation_reset(struct libinput_device *device)
+{
+ if (libinput_device_config_rotation_get_increment(device) != 0)
+ device->config.rotation->reset(device);
+}
diff --git a/src/libinput.h b/src/libinput.h
index 571f7ba..328d050 100644
--- a/src/libinput.h
+++ b/src/libinput.h
@@ -1508,6 +1508,75 @@ libinput_device_config_scroll_get_method(struct libinput_device *device);
void
libinput_device_config_scroll_reset(struct libinput_device *device);
+
+/**
+ * @ingroup config
+ *
+ * Query the rotation increment for this device, if any. The return value is
+ * the increment in degrees. For example, a device that returns 90 may only
+ * be rotated in 90-degree increments.
+ *
+ * @param device The device to configure
+ *
+ * @return The rotation increment in degrees, or 0 if the device cannot be
+ * rotated
+ */
+int
+libinput_device_config_rotation_get_increment(struct libinput_device *device);
+
+/**
+ * @ingroup config
+ *
+ * Set the rotation for this device, in degrees clockwise. This rotation
+ * applies to the physical orientation of the device, i.e. if a tablet is
+ * moved from landscape to portrait format, clockwise, this represents a
+ * 90-degree rotation. In the diagram below, if a is the device origin 0/0,
+ * after the rotation the coordinate b sends 0/0 coordinates and a sends
+ * xmax/0.
+ *
+ * @code
+ * +-------------+ +---------+
+ * |a | |b a|
+ * | | -> | |
+ * |b | | |
+ * +-------------+ | |
+ * | |
+ * +---------+
+ * @endcode
+ *
+ * @param device The device to configure
+ * @param degrees_cw The number of degrees to rotate clockwise
+ *
+ * @return A config status code
+ */
+enum libinput_config_status
+libinput_device_config_rotation_set(struct libinput_device *device,
+ int degrees_cw);
+
+/**
+ * @ingroup config
+ *
+ * Get the current rotation for this device, in degrees clockwise. If the
+ * device does not support rotation, this function always returns 0.
+ *
+ * @param device The device to configure
+ *
+ * @return The rotation in degrees clockwise
+ */
+int
+libinput_device_config_rotation_get(struct libinput_device *device);
+
+/**
+ * @ingroup config
+ *
+ * Reset the rotation to the device's default setting. If thd evice does not
+ * support rotation, this function does nothing.
+ *
+ * @param device The device to configure
+ */
+void
+libinput_device_config_rotation_reset(struct libinput_device *device);
+
#ifdef __cplusplus
}
#endif
--
1.9.0
More information about the wayland-devel
mailing list