(svn r5872) - Feature: Add an icon to the SDL openttd executable.
authorDarkvater
Sun, 13 Aug 2006 08:18:11 +0000
changeset 4256 5e29191a88a1
parent 4255 e550bf3de1c8
child 4257 6a8b510d5137
(svn r5872) - Feature: Add an icon to the SDL openttd executable.
Makefile
media/openttd.32.bmp
sdl.c
sdl.h
video/sdl_v.c
--- a/Makefile	Sat Aug 12 22:56:45 2006 +0000
+++ b/Makefile	Sun Aug 13 08:18:11 2006 +0000
@@ -616,6 +616,10 @@
 ifdef USE_HOMEDIR
 CDEFS += -DUSE_HOMEDIR
 endif
+
+ifdef ICON_DIR
+CDEFS += -DICON_DIR=\"$(ICON_DIR_PREFIXED)/\"
+endif
 endif
 
 ##############################################################################
Binary file media/openttd.32.bmp has changed
--- a/sdl.c	Sat Aug 12 22:56:45 2006 +0000
+++ b/sdl.c	Sun Aug 13 08:18:11 2006 +0000
@@ -54,6 +54,11 @@
 	M("SDL_VideoDriverName")
 	M("SDL_ListModes")
 	M("SDL_GetKeyState")
+	M("SDL_LoadBMP_RW")
+	M("SDL_RWFromFile")
+	M("SDL_SetColorKey")
+	M("SDL_WM_SetIcon")
+	M("SDL_MapRGB")
 	M("")
 ;
 #undef M
--- a/sdl.h	Sat Aug 12 22:56:45 2006 +0000
+++ b/sdl.h	Sun Aug 13 08:18:11 2006 +0000
@@ -41,6 +41,11 @@
 		void (SDLCALL *SDL_VideoDriverName)(char *, int);
 		SDL_Rect **(SDLCALL *SDL_ListModes)(void *, int);
 		Uint8 *(SDLCALL *SDL_GetKeyState)(int *);
+		SDL_Surface *(SDLCALL *SDL_LoadBMP_RW)(SDL_RWops *, int);
+		SDL_RWops *(SDLCALL *SDL_RWFromFile)(const char *, const char *);
+		int (SDLCALL *SDL_SetColorKey)(SDL_Surface *, Uint32, Uint32);
+		void (SDLCALL *SDL_WM_SetIcon)(SDL_Surface *, Uint8 *);
+		Uint32 (SDLCALL *SDL_MapRGB)(SDL_PixelFormat *, Uint8, Uint8, Uint8);
 	} SDLProcs;
 
 	extern SDLProcs sdl_proc;
--- a/video/sdl_v.c	Sat Aug 12 22:56:45 2006 +0000
+++ b/video/sdl_v.c	Sun Aug 13 08:18:11 2006 +0000
@@ -161,15 +161,36 @@
 
 extern const char _openttd_revision[];
 
+#ifndef ICON_DIR
+#define ICON_DIR "media"
+#endif
+
+#ifdef WIN32
+/* Let's redefine the LoadBMP macro with because we are dynamically
+ * loading SDL and need to 'SDL_CALL' all functions */
+#undef SDL_LoadBMP
+#define SDL_LoadBMP(file)	SDL_LoadBMP_RW(SDL_CALL SDL_RWFromFile(file, "rb"), 1)
+#endif
+
 static bool CreateMainSurface(int w, int h)
 {
-	SDL_Surface *newscreen;
+	SDL_Surface *newscreen, *icon;
 	char caption[50];
 
 	GetAvailableVideoMode(&w, &h);
 
 	DEBUG(driver, 1) ("sdl: using mode %dx%d", w, h);
 
+	/* Give the application an icon */
+	icon = SDL_CALL SDL_LoadBMP(ICON_DIR PATHSEP "openttd.32.bmp");
+	if (icon != NULL) {
+		/* Get the colourkey, which will be magenta */
+		uint32 rgbmap = SDL_CALL SDL_MapRGB(icon->format, 255, 0, 255);
+		SDL_CALL SDL_SetColorKey(icon, SDL_SRCCOLORKEY, rgbmap);
+		SDL_CALL SDL_WM_SetIcon(icon, NULL);
+		SDL_CALL SDL_FreeSurface(icon);
+	}
+
 	// DO NOT CHANGE TO HWSURFACE, IT DOES NOT WORK
 	newscreen = SDL_CALL SDL_SetVideoMode(w, h, 8, SDL_SWSURFACE | SDL_HWPALETTE | (_fullscreen ? SDL_FULLSCREEN : SDL_RESIZABLE));
 	if (newscreen == NULL)