shithub: cstory

Download patch

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);