diff --git a/src/input.c b/src/input.c index 11cf0f84..516e4df6 100644 --- a/src/input.c +++ b/src/input.c @@ -933,6 +933,29 @@ int Get_input(int sleep_time) break; #endif +#if defined(USE_SDL2) + case SDL_WINDOWEVENT: + switch(event.window.event) + { + case SDL_WINDOWEVENT_RESIZED: // change by external event (user or window manager) + Resize_width = event.window.data1; + Resize_height = event.window.data2; + // forbid window size < 320x200 + if (Resize_width < 320) + Resize_width = 320; + if (Resize_height < 200) + Resize_height = 200; + if (Resize_width != event.window.data1 || Resize_height != event.window.data2) + SDL_SetWindowSize(SDL_GetWindowFromID(event.window.windowID), Resize_width, Resize_height); + break; + case SDL_WINDOWEVENT_CLOSE: + Quit_is_required = 1; + user_feedback_required = 1; + break; + } + break; +#endif + case SDL_QUIT: Handle_window_exit(event.quit); user_feedback_required = 1; diff --git a/src/sdlscreen.c b/src/sdlscreen.c index 008ba863..12c5a08a 100644 --- a/src/sdlscreen.c +++ b/src/sdlscreen.c @@ -142,10 +142,20 @@ void GFX2_Set_mode(int *width, int *height, int fullscreen) } #else // SDL2 - Window_SDL = SDL_CreateWindow("GrafX2", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, - *width, *height, (fullscreen?SDL_WINDOW_FULLSCREEN:SDL_WINDOW_RESIZABLE)); - Renderer_SDL = SDL_CreateRenderer(Window_SDL, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); + if (Window_SDL == NULL) + { + Window_SDL = SDL_CreateWindow("GrafX2", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, + *width, *height, (fullscreen?SDL_WINDOW_FULLSCREEN:SDL_WINDOW_RESIZABLE)); + Renderer_SDL = SDL_CreateRenderer(Window_SDL, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); + } + //else + // SDL_SetWindowSize(Window_SDL, *width, *height); + //SDL_GetWindowSize(Window_SDL, width, height); + if (Texture_SDL != NULL) + SDL_DestroyTexture(Texture_SDL); Texture_SDL = SDL_CreateTexture(Renderer_SDL, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STREAMING, *width, *height); + if (Screen_SDL != NULL) + SDL_FreeSurface(Screen_SDL); Screen_SDL = SDL_CreateRGBSurface(0, *width, *height, 8, 0, 0, 0, 0); #endif