@@ -44,6 +44,11 @@ typedef struct
44
44
Studio * studio ;
45
45
tic80_input input ;
46
46
47
+ struct
48
+ {
49
+ s32 x , y , dx , dy ;
50
+ } mouse ;
51
+
47
52
struct
48
53
{
49
54
bool state [tic_keys_count ];
@@ -92,13 +97,18 @@ u64 tic_sys_freq_get()
92
97
return 1000000000 ;
93
98
}
94
99
95
- void tic_sys_fullscreen_set (bool value )
100
+ void tic_sys_fullscreen_set (bool value , void * userdata )
96
101
{
102
+ App * app = userdata ;
103
+ sapp_toggle_fullscreen ();
104
+
105
+ // reset keyboard state to prevent key repeating
106
+ ZEROMEM (app -> keyboard .state );
97
107
}
98
108
99
109
bool tic_sys_fullscreen_get ()
100
110
{
101
- return false ;
111
+ return sapp_is_fullscreen () ;
102
112
}
103
113
104
114
void tic_sys_message (const char * title , const char * message )
@@ -186,14 +196,39 @@ static void app_init(void *userdata)
186
196
// });
187
197
188
198
app -> audio .samples = malloc (sizeof app -> audio .samples [0 ] * saudio_sample_rate () / TIC80_FRAMERATE * TIC80_SAMPLE_CHANNELS );
189
- app -> input . mouse .x = app -> input . mouse .y = -1 ;
199
+ app -> mouse .x = app -> mouse .y = TIC80_FULLWIDTH ;
190
200
}
191
201
192
202
static void handleMouse (App * app )
193
203
{
194
- if ((bool )app -> input .mouse .relative != sapp_mouse_locked ())
204
+ tic80_input * input = & app -> input ;
205
+
206
+ if ((bool )input -> mouse .relative != sapp_mouse_locked ())
207
+ {
208
+ sapp_lock_mouse (input -> mouse .relative ? true : false);
209
+ }
210
+
211
+ sapp_show_mouse (app -> mouse .x < 0
212
+ || app -> mouse .y < 0
213
+ || app -> mouse .x >= TIC80_FULLWIDTH
214
+ || app -> mouse .y >= TIC80_FULLHEIGHT );
215
+
216
+ if (sapp_mouse_shown ())
195
217
{
196
- sapp_lock_mouse (app -> input .mouse .relative ? true : false);
218
+ input -> mouse .x = input -> mouse .y = -1 ;
219
+ }
220
+ else
221
+ {
222
+ if (sapp_mouse_locked ())
223
+ {
224
+ input -> mouse .rx = app -> mouse .dx ;
225
+ input -> mouse .ry = app -> mouse .dy ;
226
+ }
227
+ else
228
+ {
229
+ input -> mouse .x = CLAMP (app -> mouse .x , 0 , TIC80_FULLWIDTH - 1 );
230
+ input -> mouse .y = CLAMP (app -> mouse .y , 0 , TIC80_FULLHEIGHT - 1 );
231
+ }
197
232
}
198
233
}
199
234
@@ -243,12 +278,9 @@ static void app_frame(void *userdata)
243
278
handleKeyboard (app );
244
279
studio_tick (app -> studio , app -> input );
245
280
246
- if ((app -> input .mouse .relative =
247
- studio_mem (app -> studio )-> ram -> input .mouse .relative ))
248
- {
249
- input -> mouse .rx = input -> mouse .ry = 0 ;
250
- }
281
+ app -> input .mouse .relative = studio_mem (app -> studio )-> ram -> input .mouse .relative ;
251
282
283
+ app -> mouse .dx = app -> mouse .dy = 0 ;
252
284
input -> mouse .scrollx = input -> mouse .scrolly = 0 ;
253
285
app -> keyboard .text = '\0' ;
254
286
input -> gamepads .data = 0 ;
@@ -484,32 +516,17 @@ static void app_event(const sapp_event* event, void *userdata)
484
516
app -> keyboard .text = event -> char_code ;
485
517
}
486
518
break ;
519
+ case SAPP_EVENTTYPE_MOUSE_LEAVE :
520
+ app -> mouse .x = app -> mouse .y = TIC80_FULLWIDTH ;
521
+ break ;
487
522
case SAPP_EVENTTYPE_MOUSE_MOVE :
488
523
{
489
- if (sapp_mouse_locked ())
490
- {
491
- input -> mouse .rx = event -> mouse_dx ;
492
- input -> mouse .ry = event -> mouse_dy ;
493
- }
494
- else
495
- {
496
- Rect r = viewport ();
497
-
498
- s32 x = (event -> mouse_x - r .x ) * TIC80_FULLWIDTH / r .w ;
499
- s32 y = (event -> mouse_y - r .y ) * TIC80_FULLHEIGHT / r .h ;
500
-
501
- sapp_show_mouse (x < 0 || y < 0 || x >= TIC80_FULLWIDTH || y >= TIC80_FULLHEIGHT );
502
-
503
- if (sapp_mouse_shown ())
504
- {
505
- input -> mouse .x = input -> mouse .y = -1 ;
506
- }
507
- else
508
- {
509
- input -> mouse .x = CLAMP (x , 0 , TIC80_FULLWIDTH - 1 );
510
- input -> mouse .y = CLAMP (y , 0 , TIC80_FULLHEIGHT - 1 );
511
- }
512
- }
524
+ Rect r = viewport ();
525
+
526
+ app -> mouse .x = (event -> mouse_x - r .x ) * TIC80_FULLWIDTH / r .w ;
527
+ app -> mouse .y = (event -> mouse_y - r .y ) * TIC80_FULLHEIGHT / r .h ;
528
+ app -> mouse .dx = event -> mouse_dx ;
529
+ app -> mouse .dy = event -> mouse_dy ;
513
530
}
514
531
break ;
515
532
case SAPP_EVENTTYPE_MOUSE_DOWN :
@@ -519,8 +536,7 @@ static void app_event(const sapp_event* event, void *userdata)
519
536
processMouse (app , event -> mouse_button , 0 ); break ;
520
537
break ;
521
538
case SAPP_EVENTTYPE_MOUSE_SCROLL :
522
- input -> mouse .scrollx = event -> scroll_x ;
523
- input -> mouse .scrolly = event -> scroll_y ;
539
+ input -> mouse .scrolly = event -> scroll_y > 0 ? 1 : -1 ;
524
540
break ;
525
541
case SAPP_EVENTTYPE_CLIPBOARD_PASTED :
526
542
sapp_get_clipboard_string ();
0 commit comments