c118d06ccbd760a109f789a7698e17dcac078ea8
[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 = -1;
21     ds_event.delta_x = delta_x;
22     ds_event.delta_y = delta_y;
23
24     wl_signal_emit(&pointer->events.motion, &ds_event);
25 }
26
27 void
28 handle_pointer_motion_abs(struct libinput_event *event,
29         struct ds_pointer *pointer)
30 {
31     struct libinput_event_pointer *pevent;
32     double x, y;
33     struct ds_event_pointer_motion_absolute ds_event = { 0 };
34
35     pevent = libinput_event_get_pointer_event(event);
36
37     x = libinput_event_pointer_get_absolute_x_transformed(pevent, 1);
38     y = libinput_event_pointer_get_absolute_y_transformed(pevent, 1);
39
40     ds_log(DS_DBG, "Pointer(%p) motion abs event x:%f, y:%f", pointer, x, y);
41
42     ds_event.device = NULL;
43     ds_event.time_msec = -1;
44     ds_event.x = x;
45     ds_event.y = y;
46
47     wl_signal_emit(&pointer->events.motion_absolute, &ds_event);
48 }
49 void
50 handle_pointer_button(struct libinput_event *event,
51         struct ds_pointer *pointer)
52 {
53     struct libinput_event_pointer *pevent;
54     uint32_t button;
55     enum libinput_button_state li_state = LIBINPUT_BUTTON_STATE_PRESSED;
56     enum ds_button_state state = DS_BUTTON_PRESSED;
57     struct ds_event_pointer_button ds_event = { 0 };
58
59     pevent = libinput_event_get_pointer_event(event);
60
61     button = libinput_event_pointer_get_button(pevent);
62     button = ((button & 0x00F) + 1);
63     if (button == 3) button = 2;
64     else if (button == 2) button = 3;
65
66     li_state = libinput_event_pointer_get_button_state(pevent);
67     if (li_state == LIBINPUT_BUTTON_STATE_PRESSED) {
68         state = DS_BUTTON_PRESSED;
69     }
70     else {
71         state = DS_BUTTON_RELEASED;
72     }
73     ds_log(DS_DBG, "Pointer(%p) button event button:%d state:%s",
74             pointer, button,
75             (state == DS_BUTTON_PRESSED) ? "PRESSED" : "RELEASED");
76
77     ds_event.device = NULL;
78     ds_event.time_msec = -1;
79     ds_event.button = button;
80     ds_event.state = state;
81
82     wl_signal_emit(&pointer->events.button, &ds_event);
83 }
84
85 void
86 handle_pointer_axis(struct libinput_event *event,
87         struct ds_pointer *pointer)
88 {
89     ds_log(DS_DBG, "pointer(%p) axis event", pointer);
90     /* TODO: wl_signal_emit() */
91 }