ref: 3a5a5044b179198dba416eaf3a9bb17f7854d191
parent: 51562f6fd85247891c0d472b94f3324a50dedcc7
author: Clownacy <[email protected]>
date: Tue Mar 31 12:07:34 EDT 2020
Split SDL2 code from Main.cpp
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -163,8 +163,10 @@
"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
--- /dev/null
+++ b/src/Backends/Platform.h
@@ -1,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);
--- /dev/null
+++ b/src/Backends/Platform/SDL2.cpp
@@ -1,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;
+}
--- a/src/Main.cpp
+++ b/src/Main.cpp
@@ -5,10 +5,9 @@
#include <stdlib.h>
#include <string.h>
-#include "SDL.h"
-
#include "WindowsWrapper.h"
+#include "Backends/Platform.h"
#include "Backends/Rendering.h"
#include "CommonDefines.h"
#include "Config.h"
@@ -33,7 +32,6 @@
int gJoystickButtonTable[8];
-static BOOL bActive = TRUE;
static BOOL bFps = FALSE;
static int windowWidth;
@@ -90,14 +88,10 @@
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 @@
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 @@
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 @@
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 @@
// 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 @@
EndTextObject();
EndDirectSound();
EndDirectDraw();
-
+/*
SDL_FreeCursor(cursor);
SDL_FreeSurface(cursor_surface);
-
+*/
return EXIT_SUCCESS;
}
@@ -353,219 +340,8 @@
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)
--- a/src/Main.h
+++ b/src/Main.h
@@ -7,7 +7,12 @@
extern BOOL bFullscreen;
+extern BOOL gbUseJoystick;
+
void PutFramePerSecound(void);
unsigned long GetFramePerSecound(void);
+
+void InactiveWindow(void);
+void ActiveWindow(void);
BOOL SystemTask(void);