13
13
import libevdev
14
14
import logging
15
15
import pytest
16
- from typing import Dict , Tuple
16
+ from typing import Dict , Optional , Tuple
17
17
18
18
logger = logging .getLogger ("hidtools.test.tablet" )
19
19
20
20
21
+ class BtnTouch (Enum ):
22
+ """Represents whether the BTN_TOUCH event is set to True or False"""
23
+
24
+ DOWN = True
25
+ UP = False
26
+
27
+
28
+ class ToolType (Enum ):
29
+ PEN = libevdev .EV_KEY .BTN_TOOL_PEN
30
+ RUBBER = libevdev .EV_KEY .BTN_TOOL_RUBBER
31
+
32
+
21
33
class PenState (Enum ):
22
34
"""Pen states according to Microsoft reference:
23
35
https://docs.microsoft.com/en-us/windows-hardware/design/component-guidelines/windows-pen-states
24
36
"""
25
37
26
- PEN_IS_OUT_OF_RANGE = ( False , None )
27
- PEN_IS_IN_RANGE = ( False , libevdev . EV_KEY . BTN_TOOL_PEN )
28
- PEN_IS_IN_CONTACT = ( True , libevdev . EV_KEY . BTN_TOOL_PEN )
29
- PEN_IS_IN_RANGE_WITH_ERASING_INTENT = ( False , libevdev . EV_KEY . BTN_TOOL_RUBBER )
30
- PEN_IS_ERASING = ( True , libevdev . EV_KEY . BTN_TOOL_RUBBER )
38
+ PEN_IS_OUT_OF_RANGE = BtnTouch . UP , None
39
+ PEN_IS_IN_RANGE = BtnTouch . UP , ToolType . PEN
40
+ PEN_IS_IN_CONTACT = BtnTouch . DOWN , ToolType . PEN
41
+ PEN_IS_IN_RANGE_WITH_ERASING_INTENT = BtnTouch . UP , ToolType . RUBBER
42
+ PEN_IS_ERASING = BtnTouch . DOWN , ToolType . RUBBER
31
43
32
- def __init__ (self , touch , tool ):
44
+ def __init__ (self , touch : BtnTouch , tool : Optional [ ToolType ] ):
33
45
self .touch = touch
34
46
self .tool = tool
35
47
36
48
@classmethod
37
49
def from_evdev (cls , evdev ) -> "PenState" :
38
- touch = bool (evdev .value [libevdev .EV_KEY .BTN_TOUCH ])
50
+ touch = BtnTouch (evdev .value [libevdev .EV_KEY .BTN_TOUCH ])
39
51
tool = None
40
52
if (
41
53
evdev .value [libevdev .EV_KEY .BTN_TOOL_RUBBER ]
42
54
and not evdev .value [libevdev .EV_KEY .BTN_TOOL_PEN ]
43
55
):
44
- tool = libevdev .EV_KEY .BTN_TOOL_RUBBER
56
+ tool = ToolType ( libevdev .EV_KEY .BTN_TOOL_RUBBER )
45
57
elif (
46
58
evdev .value [libevdev .EV_KEY .BTN_TOOL_PEN ]
47
59
and not evdev .value [libevdev .EV_KEY .BTN_TOOL_RUBBER ]
48
60
):
49
- tool = libevdev .EV_KEY .BTN_TOOL_PEN
61
+ tool = ToolType ( libevdev .EV_KEY .BTN_TOOL_PEN )
50
62
elif (
51
63
evdev .value [libevdev .EV_KEY .BTN_TOOL_PEN ]
52
64
or evdev .value [libevdev .EV_KEY .BTN_TOOL_RUBBER ]
@@ -68,7 +80,7 @@ def apply(self, events) -> "PenState":
68
80
if touch_found :
69
81
raise ValueError (f"duplicated BTN_TOUCH in { events } " )
70
82
touch_found = True
71
- touch = bool (ev .value )
83
+ touch = BtnTouch (ev .value )
72
84
elif ev in (
73
85
libevdev .InputEvent (libevdev .EV_KEY .BTN_TOOL_PEN ),
74
86
libevdev .InputEvent (libevdev .EV_KEY .BTN_TOOL_RUBBER ),
@@ -77,7 +89,7 @@ def apply(self, events) -> "PenState":
77
89
raise ValueError (f"duplicated BTN_TOOL_* in { events } " )
78
90
tool_found = True
79
91
if ev .value :
80
- tool = ev .code
92
+ tool = ToolType ( ev .code )
81
93
else :
82
94
tool = None
83
95
0 commit comments