cleaner shutdown / mouse code for SDL

This commit is contained in:
Dagen Brock 2018-08-27 11:21:59 -05:00
parent 712c0792bf
commit 48bad8a432
3 changed files with 29 additions and 24 deletions

View File

@ -1678,6 +1678,7 @@ void adb_physical_key_update(int a2code, int is_up) {
g_hide_pointer = g_warp_pointer; g_hide_pointer = g_warp_pointer;
x_hide_pointer(g_hide_pointer); x_hide_pointer(g_hide_pointer);
} }
glogf("g_warp_pointer is now %d", g_warp_pointer);
break; break;
case 0x09: /* F9 - swap paddles */ case 0x09: /* F9 - swap paddles */
if(SHIFT_DOWN) { if(SHIFT_DOWN) {

View File

@ -134,8 +134,6 @@
#define BORDER_WIDTH 32 #define BORDER_WIDTH 32
//#define EFF_BORDER_WIDTH (BORDER_WIDTH + (640-560))
// OG Eff_border_widht == border side in A2 mode // OG Eff_border_widht == border side in A2 mode
#define EFF_BORDER_WIDTH (BORDER_WIDTH + (640-560)/2) #define EFF_BORDER_WIDTH (BORDER_WIDTH + (640-560)/2)
@ -149,15 +147,12 @@
#define A2_WINDOW_WIDTH 640 #define A2_WINDOW_WIDTH 640
#define A2_WINDOW_HEIGHT 400 #define A2_WINDOW_HEIGHT 400
#define X_A2_WINDOW_WIDTH (A2_WINDOW_WIDTH + BASE_MARGIN_LEFT + \ #define X_A2_WINDOW_WIDTH (A2_WINDOW_WIDTH + BASE_MARGIN_LEFT + BASE_MARGIN_RIGHT)
BASE_MARGIN_RIGHT) #define X_A2_WINDOW_HEIGHT (A2_WINDOW_HEIGHT + BASE_MARGIN_TOP + BASE_MARGIN_BOTTOM)
#define X_A2_WINDOW_HEIGHT (A2_WINDOW_HEIGHT + BASE_MARGIN_TOP + \ #define BASE_WINDOW_WIDTH (X_A2_WINDOW_WIDTH)
BASE_MARGIN_BOTTOM) #define BASE_WINDOW_HEIGHT (X_A2_WINDOW_HEIGHT)
#define MAX_STATUS_LINES 7 #define MAX_STATUS_LINES 7
#define STATUS_LINE_LENGTH 88 #define STATUS_LINE_LENGTH 88
#define BASE_WINDOW_WIDTH (X_A2_WINDOW_WIDTH)
#define A2_BORDER_COLOR_NUM 0xfe #define A2_BORDER_COLOR_NUM 0xfe

View File

@ -85,7 +85,7 @@ static size_t g_clipboard_pos = 0;
void dev_video_init_sdl(); void dev_video_init_sdl();
void handle_sdl_key_event(SDL_Event event); void handle_sdl_key_event(SDL_Event event);
void check_input_events_sdl(); void check_input_events_sdl();
int handle_sdl_mouse_motion_event(SDL_Event event); void handle_sdl_mouse_event(SDL_Event event);
int g_num_a2_keycodes = 0; int g_num_a2_keycodes = 0;
int a2_key_to_sdlkeycode[][3] = { int a2_key_to_sdlkeycode[][3] = {
@ -393,7 +393,11 @@ void dev_video_init_sdl() {
// UPDATE A RECT OF THE APPLE II SCREEN TEXTURE // UPDATE A RECT OF THE APPLE II SCREEN TEXTURE
SDL_UpdateTexture(overlay_texture, &dstrect, overlay_pixels, pitch*sizeof(Uint32) ); SDL_UpdateTexture(overlay_texture, &dstrect, overlay_pixels, pitch*sizeof(Uint32) );
// Turn off host mouse cursor
SDL_ShowCursor(SDL_DISABLE); SDL_ShowCursor(SDL_DISABLE);
SDL_SetWindowGrab(window, true);
SDL_SetRelativeMouseMode(true);
} }
@ -453,7 +457,6 @@ void check_input_events() {
void check_input_events_sdl() { void check_input_events_sdl() {
int motion = 0;
SDL_Event event; SDL_Event event;
while (SDL_PollEvent(&event)) { while (SDL_PollEvent(&event)) {
@ -469,13 +472,10 @@ void check_input_events_sdl() {
case SDL_MOUSEMOTION: case SDL_MOUSEMOTION:
case SDL_MOUSEBUTTONUP: case SDL_MOUSEBUTTONUP:
case SDL_MOUSEBUTTONDOWN: case SDL_MOUSEBUTTONDOWN:
motion |= handle_sdl_mouse_motion_event(event); handle_sdl_mouse_event(event);
break; break;
case SDL_QUIT: case SDL_QUIT:
SDL_DestroyWindow(window); xdriver_end();
iwm_shut();
// Clean up
SDL_Quit();
my_exit(1); my_exit(1);
break; break;
case SDL_DROPFILE: case SDL_DROPFILE:
@ -615,15 +615,21 @@ void handle_sdl_key_event(SDL_Event event) {
} }
int handle_sdl_mouse_motion_event(SDL_Event event) { void handle_sdl_mouse_event(SDL_Event event) {
int x, y; int x, y;
// @todo: FIX MOUSE BUTTON MAPPING, AT LEAST CLEAN UP AND DOCUMENT BEHAVIOR
x = event.motion.x - BASE_MARGIN_LEFT; x = event.motion.x * A2_WINDOW_WIDTH / BASE_WINDOW_WIDTH;
y = event.motion.y - BASE_MARGIN_TOP; y = event.motion.y * A2_WINDOW_HEIGHT / BASE_WINDOW_HEIGHT;
if (event.type == SDL_MOUSEBUTTONUP) { switch (event.type) {
return update_mouse(x, y, 0, event.motion.state &7 ); case SDL_MOUSEMOTION:
} else { update_mouse(x, y, 0, 0);
return update_mouse(x, y, event.motion.state, event.motion.state &7 ); break;
case SDL_MOUSEBUTTONUP:
update_mouse(x, y, 0, event.motion.state &7 );
break;
case SDL_MOUSEBUTTONDOWN:
update_mouse(x, y, event.motion.state &7, event.motion.state &7 );
break;
} }
} }
@ -771,6 +777,9 @@ int x_show_alert(int is_fatal, const char *str) {
} }
void xdriver_end() { void xdriver_end() {
SDL_DestroyWindow(window);
iwm_shut();
// Clean up
SDL_Quit(); SDL_Quit();
} }