efl/src/lib/elput/elput_gestures.c

100 lines
2.6 KiB
C

#include <elput_private.h>
EAPI double
elput_swipe_dx_get(Elput_Swipe_Gesture *gesture)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(gesture, 0.0f);
return gesture->dx;
}
EAPI double
elput_swipe_dy_get(Elput_Swipe_Gesture *gesture)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(gesture, 0.0f);
return gesture->dy;
}
EAPI int
elput_swipe_finger_count_get(Elput_Swipe_Gesture *gesture)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(gesture, 0);
return gesture->finger_count;
}
EAPI void
elput_manager_swipe_gesture_listen(Elput_Manager *em,
Elput_Swipe_Gesture_Callback begin, void *begin_data,
Elput_Swipe_Gesture_Callback update, void *update_data,
Elput_Swipe_Gesture_Callback end, void *end_data)
{
EINA_SAFETY_ON_NULL_RETURN(em);
em->swipe_callback.begin.cb = begin;
em->swipe_callback.begin.data = begin_data;
em->swipe_callback.end.cb = end;
em->swipe_callback.end.data = end_data;
em->swipe_callback.update.cb = update;
em->swipe_callback.update.data = update_data;
}
EAPI Elput_Manager*
elput_manager_connect_gestures(const char *seat, unsigned int tty)
{
Elput_Manager *em = elput_manager_connect(seat, tty);
if (em)
{
em->only_gesture_events = EINA_TRUE;
}
return em;
}
static void
_eval_callback(Elput_Gesture_Swipe_Callback *callback, struct libinput_device *device, struct libinput_event_gesture *gesture)
{
Elput_Device *dev;
Elput_Swipe_Gesture elput_gesture = {
libinput_event_gesture_get_dx(gesture),
libinput_event_gesture_get_dy(gesture),
libinput_event_gesture_get_finger_count(gesture),
};
if (!callback->cb) return;
dev = libinput_device_get_user_data(device);
callback->cb(callback->data, dev, &elput_gesture);
}
int
_gesture_event_process(struct libinput_event *event)
{
Elput_Manager *em;
struct libinput *lib;
struct libinput_device *dev;
int ret = 1;
lib = libinput_event_get_context(event);
dev = libinput_event_get_device(event);
em = libinput_get_user_data(lib);
switch (libinput_event_get_type(event))
{
case LIBINPUT_EVENT_GESTURE_SWIPE_BEGIN:
_eval_callback(&em->swipe_callback.begin, dev, libinput_event_get_gesture_event(event));
break;
case LIBINPUT_EVENT_GESTURE_SWIPE_UPDATE:
_eval_callback(&em->swipe_callback.update, dev, libinput_event_get_gesture_event(event));
break;
case LIBINPUT_EVENT_GESTURE_SWIPE_END:
_eval_callback(&em->swipe_callback.end, dev, libinput_event_get_gesture_event(event));
break;
default:
ret = 0;
break;
}
return ret;
}