The tapping state implementation will be in a separate file, so let's make sure we can access the structs we need.
Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> --- src/Makefile.am | 1 + src/evdev-mt-touchpad.c | 61 +-------------------------------- src/evdev-mt-touchpad.h | 91 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 93 insertions(+), 60 deletions(-) create mode 100644 src/evdev-mt-touchpad.h diff --git a/src/Makefile.am b/src/Makefile.am index c6afb82..f6d0335 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -11,6 +11,7 @@ libinput_la_SOURCES = \ evdev.c \ evdev.h \ evdev-mt-touchpad.c \ + evdev-mt-touchpad.h \ evdev-touchpad.c \ filter.c \ filter.h \ diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c index 6d1793b..8a8586a 100644 --- a/src/evdev-mt-touchpad.c +++ b/src/evdev-mt-touchpad.c @@ -26,71 +26,12 @@ #include <math.h> #include <stdbool.h> -#include "evdev.h" -#include "filter.h" +#include "evdev-mt-touchpad.h" #define DEFAULT_CONSTANT_ACCEL_NUMERATOR 50 #define DEFAULT_MIN_ACCEL_FACTOR 0.16 #define DEFAULT_MAX_ACCEL_FACTOR 1.0 #define DEFAULT_HYSTERESIS_MARGIN_DENOMINATOR 700.0 -#define TOUCHPAD_HISTORY_LENGTH 4 - -#define tp_for_each_touch(_tp, _t) \ - for (unsigned int _i = 0; _i < (_tp)->ntouches && (_t = &(_tp)->touches[_i]); _i++) - -enum touch_state { - TOUCH_NONE = 0, - TOUCH_BEGIN, - TOUCH_UPDATE, - TOUCH_END -}; - -struct tp_motion { - int32_t x; - int32_t y; -}; - -struct tp_touch { - enum touch_state state; - bool dirty; - int32_t x; - int32_t y; - uint32_t millis; - - struct { - struct tp_motion samples[TOUCHPAD_HISTORY_LENGTH]; - unsigned int index; - unsigned int count; - } history; - - struct { - int32_t center_x; - int32_t center_y; - } hysteresis; -}; - -struct tp_dispatch { - struct evdev_dispatch base; - struct evdev_device *device; - unsigned int nfingers_down; /* number of fingers down */ - unsigned int slot; /* current slot */ - - unsigned int ntouches; /* number of slots */ - struct tp_touch *touches; /* len == ntouches */ - - struct { - int32_t margin_x; - int32_t margin_y; - } hysteresis; - - struct motion_filter *filter; - - struct { - double constant_factor; - double min_factor; - double max_factor; - } accel; -}; static inline int tp_hysteresis(int in, int center, int margin) diff --git a/src/evdev-mt-touchpad.h b/src/evdev-mt-touchpad.h new file mode 100644 index 0000000..f7f413b --- /dev/null +++ b/src/evdev-mt-touchpad.h @@ -0,0 +1,91 @@ +/* + * Copyright © 2014 Red Hat, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the copyright holders not be used in + * advertising or publicity pertaining to distribution of the software + * without specific, written prior permission. The copyright holders make + * no representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + * + * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS + * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER + * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF + * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + + +#ifndef EVDEV_MT_TOUCHPAD_H +#define EVDEV_MT_TOUCHPAD_H + +#include <stdbool.h> + +#include "evdev.h" +#include "filter.h" + +#define TOUCHPAD_HISTORY_LENGTH 4 + +enum touch_state { + TOUCH_NONE = 0, + TOUCH_BEGIN, + TOUCH_UPDATE, + TOUCH_END +}; + +struct tp_motion { + int32_t x; + int32_t y; +}; + +struct tp_touch { + enum touch_state state; + bool dirty; + int32_t x; + int32_t y; + uint32_t millis; + + struct { + struct tp_motion samples[TOUCHPAD_HISTORY_LENGTH]; + unsigned int index; + unsigned int count; + } history; + + struct { + int32_t center_x; + int32_t center_y; + } hysteresis; +}; + +struct tp_dispatch { + struct evdev_dispatch base; + struct evdev_device *device; + unsigned int nfingers_down; /* number of fingers down */ + unsigned int slot; /* current slot */ + + unsigned int ntouches; /* number of slots */ + struct tp_touch *touches; /* len == ntouches */ + + struct { + int32_t margin_x; + int32_t margin_y; + } hysteresis; + + struct motion_filter *filter; + + struct { + double constant_factor; + double min_factor; + double max_factor; + } accel; +}; + +#define tp_for_each_touch(_tp, _t) \ + for (unsigned int _i = 0; _i < (_tp)->ntouches && (_t = &(_tp)->touches[_i]); _i++) + +#endif -- 1.8.4.2 _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel