diff options
author | Littleboy | 2011-06-26 19:51:52 -0400 |
---|---|---|
committer | Littleboy | 2011-06-26 20:13:35 -0400 |
commit | 7983b1cce3fb5831f7437ea689b951ac7cd9c5a3 (patch) | |
tree | 67594162f38f4303ed568118a6f488c97fc6cf43 /backends/platform | |
parent | f065b612a61c781285a5c3ad4c4473f4261607be (diff) | |
download | scummvm-rg350-7983b1cce3fb5831f7437ea689b951ac7cd9c5a3.tar.gz scummvm-rg350-7983b1cce3fb5831f7437ea689b951ac7cd9c5a3.tar.bz2 scummvm-rg350-7983b1cce3fb5831f7437ea689b951ac7cd9c5a3.zip |
BACKENDS: Add special Win32 path to set SDL window icon
We bypass SDL_WM_SetIcon and setup the window icon using the embedded icon, with the default path as a fallback.
This allows us to use an antialised icon with alpha transparency (which the default included icon doesn't have) on Windows XP and later
Diffstat (limited to 'backends/platform')
-rw-r--r-- | backends/platform/sdl/win32/win32.cpp | 24 | ||||
-rw-r--r-- | backends/platform/sdl/win32/win32.h | 1 |
2 files changed, 25 insertions, 0 deletions
diff --git a/backends/platform/sdl/win32/win32.cpp b/backends/platform/sdl/win32/win32.cpp index 814f1955fe..420ed2465b 100644 --- a/backends/platform/sdl/win32/win32.cpp +++ b/backends/platform/sdl/win32/win32.cpp @@ -34,6 +34,8 @@ #undef ARRAYSIZE // winnt.h defines ARRAYSIZE, but we want our own one... #include <shellapi.h> +#include <SDL_syswm.h> // For setting the icon + #include "backends/platform/sdl/win32/win32.h" #include "backends/fs/windows/windows-fs-factory.h" #include "backends/taskbar/win32/win32-taskbar.h" @@ -137,6 +139,28 @@ bool OSystem_Win32::displayLogFile() { return false; } +void OSystem_Win32::setupIcon() { + HMODULE handle = GetModuleHandle(NULL); + HICON ico = LoadIcon(handle, MAKEINTRESOURCE(1001 /* IDI_ICON */)); + if (ico) { + SDL_SysWMinfo wminfo; + SDL_VERSION(&wminfo.version); + if (SDL_GetWMInfo(&wminfo)) { + // Replace the handle to the icon associated with the window class by our custom icon + SetClassLongPtr(wminfo.window, GCLP_HICON, (ULONG_PTR)ico); + + // Since there wasn't any default icon, we can't use the return value from SetClassLong + // to check for errors (it would be 0 in both cases: error or no previous value for the + // icon handle). Instead we check for the last-error code value. + if (GetLastError() == ERROR_SUCCESS) + return; + } + } + + // If no icon has been set, fallback to default path + OSystem_SDL::setupIcon(); +} + Common::String OSystem_Win32::getDefaultConfigFileName() { char configFile[MAXPATHLEN]; diff --git a/backends/platform/sdl/win32/win32.h b/backends/platform/sdl/win32/win32.h index ef7b6af3f1..cc2fc51d36 100644 --- a/backends/platform/sdl/win32/win32.h +++ b/backends/platform/sdl/win32/win32.h @@ -46,6 +46,7 @@ protected: */ Common::String _logFilePath; + virtual void setupIcon(); virtual Common::String getDefaultConfigFileName(); virtual Common::WriteStream *createLogFile(); }; |