Hi, On 06/03/2014 07:34 AM, Peter Hutterer wrote: > Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> > --- > src/libinput-private.h | 9 +++++++ > src/libinput.c | 33 ++++++++++++++++++++++++ > src/libinput.h | 69 > ++++++++++++++++++++++++++++++++++++++++++++++++++ > 3 files changed, 111 insertions(+) >
Looks good. Regards, Hans > 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 > _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel