1616
1717#define MAX_TOOLS 32
1818
19- typedef struct FrameInfo {
19+ typedef struct ToolState {
20+ struct zwp_tablet_tool_v2 * tool ;
2021 uint32_t toolType ;
21-
22- // 0 means not set this frame
23- // 1 means pen up
24- // 2 means pen down
25- int penDown ;
26-
27- bool moved ;
22+ float x ;
23+ float y ;
2824 float tiltX ; // normalized to -1 .. +1
2925 float tiltY ; // normalized to -1 .. +1
3026 float pressure ; // normalized to 0..1
3127 unsigned int buttons ;
32- } FrameInfo ;
3328
34- typedef struct ToolState {
35- struct zwp_tablet_tool_v2 * tool ;
36- SDL_Window * window ; // TODO: move somewhere else
37- float x ;
38- float y ;
39- FrameInfo frame ;
29+ // 0 means not set this frame.
30+ // 1 means pen up.
31+ // 2 means pen down.
32+ int framePenDown ;
33+ bool frameMotionSet ;
4034} ToolState ;
4135
4236typedef struct WlState {
@@ -64,20 +58,20 @@ static float getDisplayScaleFactor(SDL_Window* window) {
6458static void wlReportTabletEvent (ToolState * state )
6559{
6660 uint32_t eventType = SDL_FINGERMOTION ;
67- if (state -> frame . penDown != 0 )
68- eventType = state -> frame . penDown == 1 ? SDL_FINGERUP : SDL_FINGERDOWN ;
61+ if (state -> framePenDown != 0 )
62+ eventType = state -> framePenDown == 1 ? SDL_FINGERUP : SDL_FINGERDOWN ;
6963
7064 SDL_Event event = {
7165 .tfinger = {
7266 .type = eventType ,
7367 .timestamp = SDL_GetTicks (),
74- .touchId = state -> frame . toolType == ZWP_TABLET_TOOL_V2_TYPE_ERASER ? PenPointerEraser : PenPointerPen ,
75- .fingerId = state -> frame . buttons ,
68+ .touchId = state -> toolType == ZWP_TABLET_TOOL_V2_TYPE_ERASER ? PenPointerEraser : PenPointerPen ,
69+ .fingerId = state -> buttons ,
7670 .x = state -> x ,
7771 .y = state -> y ,
78- .dx = state -> frame . tiltX ,
79- .dy = state -> frame . tiltY ,
80- .pressure = state -> frame . pressure ,
72+ .dx = state -> tiltX ,
73+ .dy = state -> tiltY ,
74+ .pressure = state -> pressure ,
8175 .windowID = 0 , // unused
8276 }
8377 };
@@ -127,7 +121,7 @@ static const struct wl_seat_listener seatListener = {
127121static void handleTabletToolType (void * data , struct zwp_tablet_tool_v2 * tool , uint32_t type )
128122{
129123 ToolState * toolState = data ;
130- toolState -> frame . toolType = type ;
124+ toolState -> toolType = type ;
131125}
132126
133127static void handleHardwareSerial (void * data , struct zwp_tablet_tool_v2 * tool , uint32_t hi , uint32_t lo )
@@ -176,13 +170,13 @@ void handleTabletToolDown(void *data,
176170 uint32_t serial )
177171{
178172 ToolState * toolState = data ;
179- toolState -> frame . penDown = 2 ;
173+ toolState -> framePenDown = 2 ;
180174}
181175void handleTabletToolUp (void * data ,
182176 struct zwp_tablet_tool_v2 * zwp_tablet_tool_v2 )
183177{
184178 ToolState * toolState = data ;
185- toolState -> frame . penDown = 1 ;
179+ toolState -> framePenDown = 1 ;
186180}
187181void handleTabletToolMotion (void * data ,
188182 struct zwp_tablet_tool_v2 * zwp_tablet_tool_v2 ,
@@ -194,7 +188,7 @@ void handleTabletToolMotion(void *data,
194188
195189 toolState -> x = wl_fixed_to_double (x ) * scale ;
196190 toolState -> y = wl_fixed_to_double (y ) * scale ;
197- toolState -> frame . moved = true;
191+ toolState -> frameMotionSet = true;
198192}
199193void handleTabletToolPressure (void * data ,
200194 struct zwp_tablet_tool_v2 * zwp_tablet_tool_v2 ,
@@ -203,7 +197,7 @@ void handleTabletToolPressure(void *data,
203197 ToolState * toolState = data ;
204198
205199 // according to spec, pressure is normalized to a value between 0 and 65535
206- toolState -> frame . pressure = (float )pressure / 65535 ;
200+ toolState -> pressure = (float )pressure / 65535 ;
207201}
208202void handleTabletToolDistance (void * data ,
209203 struct zwp_tablet_tool_v2 * zwp_tablet_tool_v2 ,
@@ -220,8 +214,8 @@ void handleTabletToolTilt(void *data,
220214 // and is positive when the top of a tool tilts along the positive x
221215 // or y axis.
222216 // Our internal representation should be normalized to -1 .. 1
223- toolState -> frame . tiltX = wl_fixed_to_double (tilt_x ) / 90.f ;
224- toolState -> frame . tiltY = wl_fixed_to_double (tilt_y ) / 90.f ;
217+ toolState -> tiltX = wl_fixed_to_double (tilt_x ) / 90.f ;
218+ toolState -> tiltY = wl_fixed_to_double (tilt_y ) / 90.f ;
225219}
226220void handleTabletToolRotation (void * data ,
227221 struct zwp_tablet_tool_v2 * zwp_tablet_tool_v2 ,
@@ -248,9 +242,9 @@ void handleTabletToolButton(void *data,
248242 ToolState * toolState = data ;
249243
250244 if (state == ZWP_TABLET_PAD_V2_BUTTON_STATE_PRESSED )
251- toolState -> frame . buttons |= wlToSDLButton (button );
245+ toolState -> buttons |= wlToSDLButton (button );
252246 else // TODO: linuxtablet.c does a ^= , which seems weird to me
253- toolState -> frame . buttons &= ~wlToSDLButton (button );
247+ toolState -> buttons &= ~wlToSDLButton (button );
254248}
255249void handleTabletToolFrame (void * data ,
256250 struct zwp_tablet_tool_v2 * zwp_tablet_tool_v2 ,
@@ -259,8 +253,8 @@ void handleTabletToolFrame(void *data,
259253 ToolState * toolState = data ;
260254
261255 wlReportTabletEvent (toolState );
262- toolState -> frame . penDown = 0 ;
263- toolState -> frame . moved = false;
256+ toolState -> framePenDown = 0 ;
257+ toolState -> frameMotionSet = false;
264258}
265259
266260static const struct zwp_tablet_tool_v2_listener tabletToolListener = {
0 commit comments