summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile4
-rw-r--r--media/openttd.32.bmpbin0 -> 2104 bytes
-rw-r--r--sdl.c5
-rw-r--r--sdl.h5
-rw-r--r--video/sdl_v.c23
5 files changed, 36 insertions, 1 deletions
diff --git a/Makefile b/Makefile
index 8be09363e..d689f512e 100644
--- a/Makefile
+++ b/Makefile
@@ -616,6 +616,10 @@ endif
ifdef USE_HOMEDIR
CDEFS += -DUSE_HOMEDIR
endif
+
+ifdef ICON_DIR
+CDEFS += -DICON_DIR=\"$(ICON_DIR_PREFIXED)/\"
+endif
endif
##############################################################################
diff --git a/media/openttd.32.bmp b/media/openttd.32.bmp
new file mode 100644
index 000000000..e388628fb
--- /dev/null
+++ b/media/openttd.32.bmp
Binary files differ
diff --git a/sdl.c b/sdl.c
index 5a5ca791d..f6474b6e1 100644
--- a/sdl.c
+++ b/sdl.c
@@ -54,6 +54,11 @@ static const char sdl_files[] =
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
diff --git a/sdl.h b/sdl.h
index 8faa85024..9fe374095 100644
--- a/sdl.h
+++ b/sdl.h
@@ -41,6 +41,11 @@ void SdlClose(uint32 x);
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;
diff --git a/video/sdl_v.c b/video/sdl_v.c
index 373009bc8..275db9dba 100644
--- a/video/sdl_v.c
+++ b/video/sdl_v.c
@@ -161,15 +161,36 @@ static int GetAvailableVideoMode(int *w, int *h)
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)