Source file event_pointer.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
open Event0
type ty = [
| `Pointer_motion of [`Pointer_motion] t
| `Pointer_motion_absolute of [`Pointer_motion_absolute] t
| `Pointer_button of [`Pointer_button] t
| `Pointer_axis of [`Pointer_axis] t
| `Pointer_scroll_wheel of [`Pointer_scroll_wheel] t
| `Pointer_scroll_finger of [`Pointer_scroll_finger] t
| `Pointer_scroll_continuous of [`Pointer_scroll_continuous] t
]
type any = [
| `Pointer_motion
| `Pointer_motion_absolute
| `Pointer_button
| `Pointer_axis
| `Pointer_scroll_wheel
| `Pointer_scroll_finger
| `Pointer_scroll_continuous
]
let ev t =
match C.Functions.Event.Pointer.get_event (use t) with
| Some kev -> kev
| None -> failwith "Not a pointer event!"
let get_time t = C.Functions.Event.Pointer.get_time_usec (ev t)
let get_dx t = C.Functions.Event.Pointer.get_dx (ev t)
let get_dy t = C.Functions.Event.Pointer.get_dy (ev t)
let get_dx_unaccelerated t = C.Functions.Event.Pointer.get_dx_unaccelerated (ev t)
let get_dy_unaccelerated t = C.Functions.Event.Pointer.get_dy_unaccelerated (ev t)
let get_absolute_x t = C.Functions.Event.Pointer.get_absolute_x (ev t)
let get_absolute_y t = C.Functions.Event.Pointer.get_absolute_y (ev t)
let get_absolute_x_transformed t ~width = C.Functions.Event.Pointer.get_absolute_x_transformed (ev t) width
let get_absolute_y_transformed t ~height = C.Functions.Event.Pointer.get_absolute_y_transformed (ev t) height
let get_button t = C.Functions.Event.Pointer.get_button (ev t)
let get_button_state t = C.Functions.Event.Pointer.get_button_state (ev t)
let get_seat_button_count t = C.Functions.Event.Pointer.get_seat_button_count (ev t)
let has_axis t axis =
C.Functions.Event.Pointer.has_axis (ev t) axis <> 0
let get_scroll_value t axis =
let t = ev t in
if C.Functions.Event.Pointer.has_axis t axis = 0 then None
else Some (C.Functions.Event.Pointer.get_scroll_value t axis)
let get_scroll_value_v120 t axis =
let t = ev t in
if C.Functions.Event.Pointer.has_axis t axis = 0 then None
else Some (C.Functions.Event.Pointer.get_scroll_value_v120 t axis)
let pp_scroll f e =
Fmt.pf f "{@[<v>time = %a; value = (%a, %a)@]}"
Timestamp.pp (get_time e)
Fmt.(option ~none:(any "-") float) (get_scroll_value e `Scroll_horizontal)
Fmt.(option ~none:(any "-") float) (get_scroll_value e `Scroll_vertical)
let pp_payload f : ty -> unit = function
| `Pointer_motion e ->
Fmt.pf f "{@[<v>time = %a;@;dx = %f;@;dy = %f@]}"
Timestamp.pp (get_time e)
(get_dx e)
(get_dy e)
| `Pointer_motion_absolute e ->
Fmt.pf f "{@[<v>time = %a;@;absolute_x = %f;@;absolute_y = %f@]}"
Timestamp.pp (get_time e)
(get_absolute_x e)
(get_absolute_y e)
| `Pointer_button e ->
Fmt.pf f "{@[<v>time = %a;@;button = %a;@;state = %s;@;seat_key_count = %d@]}"
Timestamp.pp (get_time e)
Keycode.pp (get_button e)
(match get_button_state e with `Pressed -> "`Pressed" | `Released -> "`Released")
(get_seat_button_count e)
| `Pointer_axis e ->
Fmt.pf f "{@[<v>time = %a; ...@]} (* Obsolete event type *)"
Timestamp.pp (get_time e)
| `Pointer_scroll_wheel e ->
Fmt.pf f "{@[<v>time = %a; value120 = (%a, %a)@]}"
Timestamp.pp (get_time e)
Fmt.(option ~none:(any "0") float) (get_scroll_value_v120 e `Scroll_horizontal)
Fmt.(option ~none:(any "0") float) (get_scroll_value_v120 e `Scroll_vertical)
| `Pointer_scroll_finger e -> pp_scroll f e
| `Pointer_scroll_continuous e -> pp_scroll f e