From 3a5a5044b179198dba416eaf3a9bb17f7854d191 Mon Sep 17 00:00:00 2001 From: Clownacy Date: Tue, 31 Mar 2020 16:07:34 +0100 Subject: [PATCH] Split SDL2 code from Main.cpp --- CMakeLists.txt | 4 +- src/Backends/Platform.h | 11 ++ src/Backends/Platform/SDL2.cpp | 254 +++++++++++++++++++++++++++++++++ src/Main.cpp | 250 ++------------------------------ src/Main.h | 5 + 5 files changed, 286 insertions(+), 238 deletions(-) create mode 100644 src/Backends/Platform.h create mode 100644 src/Backends/Platform/SDL2.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index dbeb2665..5776571b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -163,8 +163,10 @@ add_executable(CSE2 WIN32 "src/ValueView.cpp" "src/ValueView.h" "src/WindowsWrapper.h" - "src/Backends/Rendering.h" + "src/Backends/Platform/SDL2.cpp" "src/Backends/Audio.h" + "src/Backends/Platform.h" + "src/Backends/Rendering.h" ) set(RESOURCES diff --git a/src/Backends/Platform.h b/src/Backends/Platform.h new file mode 100644 index 00000000..718bef24 --- /dev/null +++ b/src/Backends/Platform.h @@ -0,0 +1,11 @@ +#pragma once + +#include "../WindowsWrapper.h" + +extern BOOL bActive; + +void PlatformBackend_Init(void); + +void PlatformBackend_GetBasePath(char *string_buffer); + +BOOL PlatformBackend_SystemTask(void); diff --git a/src/Backends/Platform/SDL2.cpp b/src/Backends/Platform/SDL2.cpp new file mode 100644 index 00000000..2be3a3af --- /dev/null +++ b/src/Backends/Platform/SDL2.cpp @@ -0,0 +1,254 @@ +#include "../Platform.h" + +#include "SDL.h" + +#include "../Rendering.h" + +#include "../../WindowsWrapper.h" + +#include "../../KeyControl.h" +#include "../../Main.h" +#include "../../Organya.h" +#include "../../Profile.h" + +BOOL bActive = TRUE; + +void PlatformBackend_Init(void) +{ + SDL_Init(SDL_INIT_EVENTS); + +#ifdef _WIN32 // On Windows, we use native icons instead (so we can give the taskbar and window separate icons, like the original EXE does) + SDL_SetHint(SDL_HINT_WINDOWS_INTRESOURCE_ICON, "101"); + SDL_SetHint(SDL_HINT_WINDOWS_INTRESOURCE_ICON_SMALL, "102"); +#endif + + SDL_InitSubSystem(SDL_INIT_VIDEO); +} + +void PlatformBackend_GetBasePath(char *string_buffer) +{ + char *base_path = SDL_GetBasePath(); + size_t base_path_length = strlen(base_path); + base_path[base_path_length - 1] = '\0'; + strcpy(string_buffer, base_path); + SDL_free(base_path); +} + +BOOL PlatformBackend_SystemTask(void) +{ + while (SDL_PollEvent(NULL) || !bActive) + { + SDL_Event event; + + if (!SDL_WaitEvent(&event)) + return FALSE; + + switch (event.type) + { + case SDL_KEYDOWN: + switch (event.key.keysym.sym) + { + case SDLK_ESCAPE: + gKey |= KEY_ESCAPE; + break; + + case SDLK_w: + gKey |= KEY_MAP; + break; + + case SDLK_LEFT: + gKey |= KEY_LEFT; + break; + + case SDLK_RIGHT: + gKey |= KEY_RIGHT; + break; + + case SDLK_UP: + gKey |= KEY_UP; + break; + + case SDLK_DOWN: + gKey |= KEY_DOWN; + break; + + case SDLK_x: + gKey |= KEY_X; + break; + + case SDLK_z: + gKey |= KEY_Z; + break; + + case SDLK_s: + gKey |= KEY_ARMS; + break; + + case SDLK_a: + gKey |= KEY_ARMSREV; + break; + + case SDLK_LSHIFT: + case SDLK_RSHIFT: + gKey |= KEY_SHIFT; + break; + + case SDLK_F1: + gKey |= KEY_F1; + break; + + case SDLK_F2: + gKey |= KEY_F2; + break; + + case SDLK_q: + gKey |= KEY_ITEM; + break; + + case SDLK_COMMA: + gKey |= KEY_ALT_LEFT; + break; + + case SDLK_PERIOD: + gKey |= KEY_ALT_DOWN; + break; + + case SDLK_SLASH: + gKey |= KEY_ALT_RIGHT; + break; + + case SDLK_l: + gKey |= KEY_L; + break; + + case SDLK_PLUS: + gKey |= KEY_PLUS; + break; + + case SDLK_F5: + gbUseJoystick = FALSE; + break; + } + + break; + + case SDL_KEYUP: + switch (event.key.keysym.sym) + { + case SDLK_ESCAPE: + gKey &= ~KEY_ESCAPE; + break; + + case SDLK_w: + gKey &= ~KEY_MAP; + break; + + case SDLK_LEFT: + gKey &= ~KEY_LEFT; + break; + + case SDLK_RIGHT: + gKey &= ~KEY_RIGHT; + break; + + case SDLK_UP: + gKey &= ~KEY_UP; + break; + + case SDLK_DOWN: + gKey &= ~KEY_DOWN; + break; + + case SDLK_x: + gKey &= ~KEY_X; + break; + + case SDLK_z: + gKey &= ~KEY_Z; + break; + + case SDLK_s: + gKey &= ~KEY_ARMS; + break; + + case SDLK_a: + gKey &= ~KEY_ARMSREV; + break; + + case SDLK_LSHIFT: + case SDLK_RSHIFT: + gKey &= ~KEY_SHIFT; + break; + + case SDLK_F1: + gKey &= ~KEY_F1; + break; + + case SDLK_F2: + gKey &= ~KEY_F2; + break; + + case SDLK_q: + gKey &= ~KEY_ITEM; + break; + + case SDLK_COMMA: + gKey &= ~KEY_ALT_LEFT; + break; + + case SDLK_PERIOD: + gKey &= ~KEY_ALT_DOWN; + break; + + case SDLK_SLASH: + gKey &= ~KEY_ALT_RIGHT; + break; + + case SDLK_l: + gKey &= ~KEY_L; + break; + + case SDLK_PLUS: + gKey &= ~KEY_PLUS; + break; + } + + break; + + case SDL_DROPFILE: + LoadProfile(event.drop.file); + SDL_free(event.drop.file); + break; + + case SDL_WINDOWEVENT: + switch (event.window.event) + { + case SDL_WINDOWEVENT_FOCUS_LOST: + InactiveWindow(); + break; + + case SDL_WINDOWEVENT_FOCUS_GAINED: + ActiveWindow(); + break; + + case SDL_WINDOWEVENT_RESIZED: + case SDL_WINDOWEVENT_SIZE_CHANGED: + Backend_HandleWindowResize(); + break; + } + + break; + + case SDL_QUIT: + StopOrganyaMusic(); + return FALSE; + + case SDL_RENDER_TARGETS_RESET: + Backend_HandleRenderTargetLoss(); + break; + + } + } + + return TRUE; +} diff --git a/src/Main.cpp b/src/Main.cpp index 305e18ab..04555a3c 100644 --- a/src/Main.cpp +++ b/src/Main.cpp @@ -5,10 +5,9 @@ #include #include -#include "SDL.h" - #include "WindowsWrapper.h" +#include "Backends/Platform.h" #include "Backends/Rendering.h" #include "CommonDefines.h" #include "Config.h" @@ -33,7 +32,6 @@ BOOL gbUseJoystick = FALSE; int gJoystickButtonTable[8]; -static BOOL bActive = TRUE; static BOOL bFps = FALSE; static int windowWidth; @@ -90,14 +88,10 @@ int main(int argc, char *argv[]) int i; - SDL_Init(SDL_INIT_EVENTS); + PlatformBackend_Init(); // Get executable's path - char *base_path = SDL_GetBasePath(); - size_t base_path_length = strlen(base_path); - base_path[base_path_length - 1] = '\0'; - strcpy(gModulePath, base_path); - SDL_free(base_path); + PlatformBackend_GetBasePath(gModulePath); // Get path of the data folder strcpy(gDataPath, gModulePath); @@ -194,13 +188,6 @@ int main(int argc, char *argv[]) RECT unused_rect = {0, 0, WINDOW_WIDTH, WINDOW_HEIGHT}; -#ifdef _WIN32 // On Windows, we use native icons instead (so we can give the taskbar and window separate icons, like the original EXE does) - SDL_SetHint(SDL_HINT_WINDOWS_INTRESOURCE_ICON, "101"); - SDL_SetHint(SDL_HINT_WINDOWS_INTRESOURCE_ICON_SMALL, "102"); -#endif - - SDL_InitSubSystem(SDL_INIT_VIDEO); - switch (conf.display_mode) { case 1: @@ -255,14 +242,14 @@ int main(int argc, char *argv[]) bFullscreen = TRUE; - SDL_ShowCursor(SDL_DISABLE); + //SDL_ShowCursor(SDL_DISABLE); break; } #ifdef DEBUG_SAVE - SDL_EventState(SDL_DROPFILE, SDL_ENABLE); + //SDL_EventState(SDL_DROPFILE, SDL_ENABLE); #endif - +/* // Set up the cursor size_t resource_size; const unsigned char *resource_data = FindResource("CURSOR_NORMAL", "CURSOR", &resource_size); @@ -271,7 +258,7 @@ int main(int argc, char *argv[]) SDL_SetColorKey(cursor_surface, SDL_TRUE, SDL_MapRGB(cursor_surface->format, 0xFF, 0, 0xFF)); SDL_Cursor *cursor = SDL_CreateColorCursor(cursor_surface, 0, 0); SDL_SetCursor(cursor); - +*/ if (IsKeyFile("fps")) bFps = TRUE; @@ -291,8 +278,8 @@ int main(int argc, char *argv[]) // Draw to screen if (!Flip_SystemTask()) { - SDL_FreeCursor(cursor); - SDL_FreeSurface(cursor_surface); +// SDL_FreeCursor(cursor); + // SDL_FreeSurface(cursor_surface); return EXIT_SUCCESS; } @@ -317,10 +304,10 @@ int main(int argc, char *argv[]) EndTextObject(); EndDirectSound(); EndDirectDraw(); - +/* SDL_FreeCursor(cursor); SDL_FreeSurface(cursor_surface); - +*/ return EXIT_SUCCESS; } @@ -353,219 +340,8 @@ void JoystickProc(void); BOOL SystemTask(void) { - while (SDL_PollEvent(NULL) || !bActive) - { - SDL_Event event; - - if (!SDL_WaitEvent(&event)) - return FALSE; - - switch (event.type) - { - case SDL_KEYDOWN: - switch (event.key.keysym.sym) - { - case SDLK_ESCAPE: - gKey |= KEY_ESCAPE; - break; - - case SDLK_w: - gKey |= KEY_MAP; - break; - - case SDLK_LEFT: - gKey |= KEY_LEFT; - break; - - case SDLK_RIGHT: - gKey |= KEY_RIGHT; - break; - - case SDLK_UP: - gKey |= KEY_UP; - break; - - case SDLK_DOWN: - gKey |= KEY_DOWN; - break; - - case SDLK_x: - gKey |= KEY_X; - break; - - case SDLK_z: - gKey |= KEY_Z; - break; - - case SDLK_s: - gKey |= KEY_ARMS; - break; - - case SDLK_a: - gKey |= KEY_ARMSREV; - break; - - case SDLK_LSHIFT: - case SDLK_RSHIFT: - gKey |= KEY_SHIFT; - break; - - case SDLK_F1: - gKey |= KEY_F1; - break; - - case SDLK_F2: - gKey |= KEY_F2; - break; - - case SDLK_q: - gKey |= KEY_ITEM; - break; - - case SDLK_COMMA: - gKey |= KEY_ALT_LEFT; - break; - - case SDLK_PERIOD: - gKey |= KEY_ALT_DOWN; - break; - - case SDLK_SLASH: - gKey |= KEY_ALT_RIGHT; - break; - - case SDLK_l: - gKey |= KEY_L; - break; - - case SDLK_PLUS: - gKey |= KEY_PLUS; - break; - - case SDLK_F5: - gbUseJoystick = FALSE; - break; - } - - break; - - case SDL_KEYUP: - switch (event.key.keysym.sym) - { - case SDLK_ESCAPE: - gKey &= ~KEY_ESCAPE; - break; - - case SDLK_w: - gKey &= ~KEY_MAP; - break; - - case SDLK_LEFT: - gKey &= ~KEY_LEFT; - break; - - case SDLK_RIGHT: - gKey &= ~KEY_RIGHT; - break; - - case SDLK_UP: - gKey &= ~KEY_UP; - break; - - case SDLK_DOWN: - gKey &= ~KEY_DOWN; - break; - - case SDLK_x: - gKey &= ~KEY_X; - break; - - case SDLK_z: - gKey &= ~KEY_Z; - break; - - case SDLK_s: - gKey &= ~KEY_ARMS; - break; - - case SDLK_a: - gKey &= ~KEY_ARMSREV; - break; - - case SDLK_LSHIFT: - case SDLK_RSHIFT: - gKey &= ~KEY_SHIFT; - break; - - case SDLK_F1: - gKey &= ~KEY_F1; - break; - - case SDLK_F2: - gKey &= ~KEY_F2; - break; - - case SDLK_q: - gKey &= ~KEY_ITEM; - break; - - case SDLK_COMMA: - gKey &= ~KEY_ALT_LEFT; - break; - - case SDLK_PERIOD: - gKey &= ~KEY_ALT_DOWN; - break; - - case SDLK_SLASH: - gKey &= ~KEY_ALT_RIGHT; - break; - - case SDLK_l: - gKey &= ~KEY_L; - break; - - case SDLK_PLUS: - gKey &= ~KEY_PLUS; - break; - } - - break; - - case SDL_DROPFILE: - LoadProfile(event.drop.file); - SDL_free(event.drop.file); - break; - - case SDL_WINDOWEVENT: - switch (event.window.event) - { - case SDL_WINDOWEVENT_FOCUS_LOST: - InactiveWindow(); - break; - - case SDL_WINDOWEVENT_FOCUS_GAINED: - ActiveWindow(); - break; - - case SDL_WINDOWEVENT_RESIZED: - case SDL_WINDOWEVENT_SIZE_CHANGED: - Backend_HandleWindowResize(); - break; - } - - break; - - case SDL_QUIT: - StopOrganyaMusic(); - return FALSE; - - case SDL_RENDER_TARGETS_RESET: - Backend_HandleRenderTargetLoss(); - break; - - } - } + if (!PlatformBackend_SystemTask()) + return FALSE; // Run joystick code if (gbUseJoystick) diff --git a/src/Main.h b/src/Main.h index 0347fa09..36e14cc0 100644 --- a/src/Main.h +++ b/src/Main.h @@ -7,7 +7,12 @@ extern char gDataPath[MAX_PATH]; extern BOOL bFullscreen; +extern BOOL gbUseJoystick; + void PutFramePerSecound(void); unsigned long GetFramePerSecound(void); +void InactiveWindow(void); +void ActiveWindow(void); + BOOL SystemTask(void);