23
23
used in advertising or otherwise to promote the sale, use or other dealings
24
24
in this Software without prior written authorization from the author.
25
25
26
+ 08-Nov-2013 MB Added globals for current mouse status
26
27
11-Jun-2013 MB First version
27
28
*/
28
29
29
30
#include "sim_video.h"
30
31
31
32
t_bool vid_active = FALSE;
33
+ int32 vid_mouse_xrel = 0 ;
34
+ int32 vid_mouse_yrel = 0 ;
35
+ t_bool vid_mouse_b1 = FALSE;
36
+ t_bool vid_mouse_b2 = FALSE;
37
+ t_bool vid_mouse_b3 = FALSE;
32
38
33
39
#if HAVE_LIBSDL
34
40
#include <SDL.h>
@@ -54,9 +60,6 @@ typedef struct {
54
60
int32 head ;
55
61
int32 tail ;
56
62
int32 count ;
57
- t_bool b1_state ;
58
- t_bool b2_state ;
59
- t_bool b3_state ;
60
63
} MOUSE_EVENT_QUEUE ;
61
64
62
65
int vid_thread (void * arg );
@@ -93,6 +96,8 @@ if (!vid_active) {
93
96
vid_width = width ;
94
97
vid_height = height ;
95
98
vid_mouse_captured = FALSE;
99
+ vid_mouse_xrel = 0 ;
100
+ vid_mouse_yrel = 0 ;
96
101
97
102
vid_key_events .head = 0 ;
98
103
vid_key_events .tail = 0 ;
@@ -605,17 +610,19 @@ if ((event->x == 0) ||
605
610
}
606
611
if (!sim_is_running )
607
612
return ;
613
+ vid_mouse_xrel += event -> xrel ; /* update cumulative x rel */
614
+ vid_mouse_yrel -= event -> yrel ; /* update cumulative y rel */
615
+ vid_mouse_b1 = (event -> state & SDL_BUTTON (SDL_BUTTON_LEFT )) ? TRUE : FALSE;
616
+ vid_mouse_b2 = (event -> state & SDL_BUTTON (SDL_BUTTON_MIDDLE )) ? TRUE : FALSE;
617
+ vid_mouse_b3 = (event -> state & SDL_BUTTON (SDL_BUTTON_RIGHT )) ? TRUE : FALSE;
608
618
if (SDL_SemWait (vid_mouse_events .sem ) == 0 ) {
609
619
sim_debug (SIM_VID_DBG_MOUSE , vid_dev , "Mouse Move Event: (%d,%d)\n" , event -> xrel , event -> yrel );
610
620
if (vid_mouse_events .count < MAX_EVENTS ) {
611
621
ev .x_rel = event -> xrel ;
612
622
ev .y_rel = (- event -> yrel );
613
- ev .b1_state = (event -> state & SDL_BUTTON (SDL_BUTTON_LEFT )) ? TRUE : FALSE;
614
- ev .b2_state = (event -> state & SDL_BUTTON (SDL_BUTTON_MIDDLE )) ? TRUE : FALSE;
615
- ev .b3_state = (event -> state & SDL_BUTTON (SDL_BUTTON_RIGHT )) ? TRUE : FALSE;
616
- vid_mouse_events .b1_state = ev .b1_state ;
617
- vid_mouse_events .b2_state = ev .b2_state ;
618
- vid_mouse_events .b3_state = ev .b3_state ;
623
+ ev .b1_state = vid_mouse_b1 ;
624
+ ev .b2_state = vid_mouse_b2 ;
625
+ ev .b3_state = vid_mouse_b3 ;
619
626
vid_mouse_events .events [vid_mouse_events .tail ++ ] = ev ;
620
627
vid_mouse_events .count ++ ;
621
628
if (vid_mouse_events .tail == MAX_EVENTS )
@@ -650,26 +657,26 @@ if (!vid_mouse_captured) {
650
657
}
651
658
if (!sim_is_running )
652
659
return ;
660
+ state = (event -> state == SDL_PRESSED ) ? TRUE : FALSE;
661
+ switch (event -> button ) {
662
+ case SDL_BUTTON_LEFT :
663
+ vid_mouse_b1 = state ;
664
+ break ;
665
+ case SDL_BUTTON_MIDDLE :
666
+ vid_mouse_b2 = state ;
667
+ break ;
668
+ case SDL_BUTTON_RIGHT :
669
+ vid_mouse_b3 = state ;
670
+ break ;
671
+ }
653
672
if (SDL_SemWait (vid_mouse_events .sem ) == 0 ) {
654
673
sim_debug (SIM_VID_DBG_MOUSE , vid_dev , "Mouse Button Event: State: %d, Button: %d, (%d,%d)\n" , event -> state , event -> button , event -> x , event -> y );
655
674
if (vid_mouse_events .count < MAX_EVENTS ) {
656
- state = (event -> state == SDL_PRESSED ) ? TRUE : FALSE;
657
675
ev .x_rel = 0 ;
658
676
ev .y_rel = 0 ;
659
- switch (event -> button ) {
660
- case SDL_BUTTON_LEFT :
661
- vid_mouse_events .b1_state = state ;
662
- break ;
663
- case SDL_BUTTON_MIDDLE :
664
- vid_mouse_events .b2_state = state ;
665
- break ;
666
- case SDL_BUTTON_RIGHT :
667
- vid_mouse_events .b3_state = state ;
668
- break ;
669
- }
670
- ev .b1_state = vid_mouse_events .b1_state ;
671
- ev .b2_state = vid_mouse_events .b2_state ;
672
- ev .b3_state = vid_mouse_events .b3_state ;
677
+ ev .b1_state = vid_mouse_b1 ;
678
+ ev .b2_state = vid_mouse_b2 ;
679
+ ev .b3_state = vid_mouse_b3 ;
673
680
vid_mouse_events .events [vid_mouse_events .tail ++ ] = ev ;
674
681
vid_mouse_events .count ++ ;
675
682
if (vid_mouse_events .tail == MAX_EVENTS )
@@ -811,6 +818,8 @@ if (!vid_active) {
811
818
vid_width = width ;
812
819
vid_height = height ;
813
820
vid_mouse_captured = FALSE;
821
+ vid_mouse_xrel = 0 ;
822
+ vid_mouse_yrel = 0 ;
814
823
815
824
vid_key_events .head = 0 ;
816
825
vid_key_events .tail = 0 ;
@@ -1318,17 +1327,19 @@ if ((event->x == 0) ||
1318
1327
}
1319
1328
if (!sim_is_running )
1320
1329
return ;
1330
+ vid_mouse_xrel += event -> xrel ; /* update cumulative x rel */
1331
+ vid_mouse_yrel -= event -> yrel ; /* update cumulative y rel */
1332
+ vid_mouse_b1 = (event -> state & SDL_BUTTON (SDL_BUTTON_LEFT )) ? TRUE : FALSE;
1333
+ vid_mouse_b2 = (event -> state & SDL_BUTTON (SDL_BUTTON_MIDDLE )) ? TRUE : FALSE;
1334
+ vid_mouse_b3 = (event -> state & SDL_BUTTON (SDL_BUTTON_RIGHT )) ? TRUE : FALSE;
1321
1335
if (SDL_SemWait (vid_mouse_events .sem ) == 0 ) {
1322
1336
sim_debug (SIM_VID_DBG_MOUSE , vid_dev , "Mouse Move Event: (%d,%d)\n" , event -> xrel , event -> yrel );
1323
1337
if (vid_mouse_events .count < MAX_EVENTS ) {
1324
1338
ev .x_rel = event -> xrel ;
1325
1339
ev .y_rel = (- event -> yrel );
1326
- ev .b1_state = (event -> state & SDL_BUTTON (SDL_BUTTON_LEFT )) ? TRUE : FALSE;
1327
- ev .b2_state = (event -> state & SDL_BUTTON (SDL_BUTTON_MIDDLE )) ? TRUE : FALSE;
1328
- ev .b3_state = (event -> state & SDL_BUTTON (SDL_BUTTON_RIGHT )) ? TRUE : FALSE;
1329
- vid_mouse_events .b1_state = ev .b1_state ;
1330
- vid_mouse_events .b2_state = ev .b2_state ;
1331
- vid_mouse_events .b3_state = ev .b3_state ;
1340
+ ev .b1_state = vid_mouse_b1 ;
1341
+ ev .b2_state = vid_mouse_b2 ;
1342
+ ev .b3_state = vid_mouse_b3 ;
1332
1343
vid_mouse_events .events [vid_mouse_events .tail ++ ] = ev ;
1333
1344
vid_mouse_events .count ++ ;
1334
1345
if (vid_mouse_events .tail == MAX_EVENTS )
@@ -1362,26 +1373,26 @@ if (!vid_mouse_captured) {
1362
1373
}
1363
1374
if (!sim_is_running )
1364
1375
return ;
1376
+ state = (event -> state == SDL_PRESSED ) ? TRUE : FALSE;
1377
+ switch (event -> button ) {
1378
+ case SDL_BUTTON_LEFT :
1379
+ vid_mouse_b1 = state ;
1380
+ break ;
1381
+ case SDL_BUTTON_MIDDLE :
1382
+ vid_mouse_b2 = state ;
1383
+ break ;
1384
+ case SDL_BUTTON_RIGHT :
1385
+ vid_mouse_b3 = state ;
1386
+ break ;
1387
+ }
1365
1388
if (SDL_SemWait (vid_mouse_events .sem ) == 0 ) {
1366
1389
sim_debug (SIM_VID_DBG_MOUSE , vid_dev , "Mouse Button Event: State: %d, Button: %d, (%d,%d)\n" , event -> state , event -> button , event -> x , event -> y );
1367
1390
if (vid_mouse_events .count < MAX_EVENTS ) {
1368
- state = (event -> state == SDL_PRESSED ) ? TRUE : FALSE;
1369
1391
ev .x_rel = 0 ;
1370
1392
ev .y_rel = 0 ;
1371
- switch (event -> button ) {
1372
- case SDL_BUTTON_LEFT :
1373
- vid_mouse_events .b1_state = state ;
1374
- break ;
1375
- case SDL_BUTTON_MIDDLE :
1376
- vid_mouse_events .b2_state = state ;
1377
- break ;
1378
- case SDL_BUTTON_RIGHT :
1379
- vid_mouse_events .b3_state = state ;
1380
- break ;
1381
- }
1382
- ev .b1_state = vid_mouse_events .b1_state ;
1383
- ev .b2_state = vid_mouse_events .b2_state ;
1384
- ev .b3_state = vid_mouse_events .b3_state ;
1393
+ ev .b1_state = vid_mouse_b1 ;
1394
+ ev .b2_state = vid_mouse_b2 ;
1395
+ ev .b3_state = vid_mouse_b3 ;
1385
1396
vid_mouse_events .events [vid_mouse_events .tail ++ ] = ev ;
1386
1397
vid_mouse_events .count ++ ;
1387
1398
if (vid_mouse_events .tail == MAX_EVENTS )
0 commit comments