From 01d8530ee1e7dc977ca24d7b733533eb8f6cabd7 Mon Sep 17 00:00:00 2001 From: Cameron Cawley Date: Sat, 17 Jun 2023 17:01:58 +0100 Subject: [PATCH] Implement Toggle_Video_Fullscreen with SDL 1.2 --- common/video_sdl1.cpp | 18 ++++++++++++++++++ common/wwkeyboard.cpp | 12 ++++++++++-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/common/video_sdl1.cpp b/common/video_sdl1.cpp index c5bbf524..28e1a017 100644 --- a/common/video_sdl1.cpp +++ b/common/video_sdl1.cpp @@ -157,6 +157,24 @@ bool Set_Video_Mode(int w, int h, int bits_per_pixel) void Toggle_Video_Fullscreen() { Settings.Video.Windowed = !Settings.Video.Windowed; + + if (window) { + int win_flags = SDL_HWSURFACE | SDL_HWPALETTE; + SDL_Surface* new_window; + + if (!Settings.Video.Windowed) { + win_flags |= SDL_FULLSCREEN; + } + + new_window = SDL_SetVideoMode(window->w, window->h, 8, win_flags); + if (new_window) { + window = new_window; + + /* The palette needs to be restored when switching to a new video mode */ + SDL_SetPalette(window, SDL_LOGPAL, logpal, 0, 256); + SDL_SetPalette(window, SDL_PHYSPAL, physpal, 0, 256); + } + } } void Get_Video_Scale(float& x, float& y) diff --git a/common/wwkeyboard.cpp b/common/wwkeyboard.cpp index b7f2d683..adcb7ed3 100644 --- a/common/wwkeyboard.cpp +++ b/common/wwkeyboard.cpp @@ -551,7 +551,11 @@ void WWKeyboardClass::Fill_Buffer_From_System(void) #ifdef SDL2_BUILD Put_Key_Message(event.key.keysym.scancode, false); #else - Put_Key_Message(event.key.keysym.sym, false); + if (event.key.keysym.sym == SDLK_RETURN && (event.key.keysym.mod & KMOD_ALT)) { + /* Switching to full screen is handled in the key up event */ + } else { + Put_Key_Message(event.key.keysym.sym, false); + } #endif break; case SDL_KEYUP: @@ -562,7 +566,11 @@ void WWKeyboardClass::Fill_Buffer_From_System(void) Put_Key_Message(event.key.keysym.scancode, true); } #else - Put_Key_Message(event.key.keysym.sym, true); + if (event.key.keysym.sym == SDLK_RETURN && (event.key.keysym.mod & KMOD_ALT)) { + Toggle_Video_Fullscreen(); + } else { + Put_Key_Message(event.key.keysym.sym, true); + } #endif break; case SDL_MOUSEMOTION: