libinput: get event time from libinput_event
[platform/core/uifw/libds-tizen.git] / src / libds / backend / libinput / pointer.c
1 #include "libds/log.h"
2 #include "backend.h"
3
4 void
5 handle_pointer_motion(struct libinput_event *event,
6         struct ds_pointer *pointer)
7 {
8     struct libinput_event_pointer *pevent;
9     double delta_x, delta_y;
10     struct ds_event_pointer_motion ds_event = { 0 };
11
12     pevent = libinput_event_get_pointer_event(event);
13
14     delta_x = libinput_event_pointer_get_dx(pevent);
15     delta_y = libinput_event_pointer_get_dy(pevent);
16
17     ds_log(DS_DBG, "pointer motion event delta_x:%f, delta_y:%f", delta_x, delta_y);
18
19     ds_event.device = NULL;
20     ds_event.time_msec = usec_to_msec(
21                 libinput_event_pointer_get_time_usec(pevent));
22     ds_event.delta_x = delta_x;
23     ds_event.delta_y = delta_y;
24
25     wl_signal_emit(&pointer->events.motion, &ds_event);
26 }
27
28 void
29 handle_pointer_motion_abs(struct libinput_event *event,
30         struct ds_pointer *pointer)
31 {
32     struct libinput_event_pointer *pevent;
33     double x, y;
34     struct ds_event_pointer_motion_absolute ds_event = { 0 };
35
36     pevent = libinput_event_get_pointer_event(event);
37
38     x = libinput_event_pointer_get_absolute_x_transformed(pevent, 1);
39     y = libinput_event_pointer_get_absolute_y_transformed(pevent, 1);
40
41     ds_log(DS_DBG, "Pointer(%p) motion abs event x:%f, y:%f", pointer, x, y);
42
43     ds_event.device = NULL;
44     ds_event.time_msec = usec_to_msec(
45                 libinput_event_pointer_get_time_usec(pevent));
46     ds_event.x = x;
47     ds_event.y = y;
48
49     wl_signal_emit(&pointer->events.motion_absolute, &ds_event);
50 }
51 void
52 handle_pointer_button(struct libinput_event *event,
53         struct ds_pointer *pointer)
54 {
55     struct libinput_event_pointer *pevent;
56     uint32_t button;
57     enum libinput_button_state li_state = LIBINPUT_BUTTON_STATE_PRESSED;
58     enum ds_button_state state = DS_BUTTON_PRESSED;
59     struct ds_event_pointer_button ds_event = { 0 };
60
61     pevent = libinput_event_get_pointer_event(event);
62
63     button = libinput_event_pointer_get_button(pevent);
64     button = ((button & 0x00F) + 1);
65     if (button == 3) button = 2;
66     else if (button == 2) button = 3;
67
68     li_state = libinput_event_pointer_get_button_state(pevent);
69     if (li_state == LIBINPUT_BUTTON_STATE_PRESSED) {
70         state = DS_BUTTON_PRESSED;
71     }
72     else {
73         state = DS_BUTTON_RELEASED;
74     }
75     ds_log(DS_DBG, "Pointer(%p) button event button:%d state:%s",
76             pointer, button,
77             (state == DS_BUTTON_PRESSED) ? "PRESSED" : "RELEASED");
78
79     ds_event.device = NULL;
80     ds_event.time_msec = usec_to_msec(
81                 libinput_event_pointer_get_time_usec(pevent));
82     ds_event.button = button;
83     ds_event.state = state;
84
85     wl_signal_emit(&pointer->events.button, &ds_event);
86 }
87
88 void
89 handle_pointer_axis(struct libinput_event *event,
90         struct ds_pointer *pointer)
91 {
92     ds_log(DS_DBG, "pointer(%p) axis event", pointer);
93     /* TODO: wl_signal_emit() */
94 }