mirror of https://github.com/encounter/SDL.git
Fixed bug 3405 - Wrong default icon size on windows systems
Evgeny Vrublevsky Original code in the video/windows/SDL_windowsevents.c registers obsolete WNDCLASS (not WNDCLASSEX). As the result only one icon size is used as the small and normal icons. Also original code doesn't specify required size of an icon. As the result when 256x256 icon is available, the program uses it as a default icon, and it looks ugly. We have to use WNDCLASSEX and load icons with proper sizes which we can get using GetSystemMetrics. Better idea. We could use the first icon from resources, like the Explorer does. Patch is included. It also correctly loads large and small icons, so it will look nice everywhere.
This commit is contained in:
parent
86b4319d21
commit
7b0ccd32e5
|
@ -1054,7 +1054,8 @@ HINSTANCE SDL_Instance = NULL;
|
|||
int
|
||||
SDL_RegisterApp(char *name, Uint32 style, void *hInst)
|
||||
{
|
||||
WNDCLASS class;
|
||||
WNDCLASSEX wcex;
|
||||
TCHAR path[MAX_PATH];
|
||||
|
||||
/* Only do this once... */
|
||||
if (app_registered) {
|
||||
|
@ -1076,19 +1077,24 @@ SDL_RegisterApp(char *name, Uint32 style, void *hInst)
|
|||
}
|
||||
|
||||
/* Register the application class */
|
||||
class.hCursor = NULL;
|
||||
class.hIcon =
|
||||
LoadImage(SDL_Instance, SDL_Appname, IMAGE_ICON, 0, 0,
|
||||
LR_DEFAULTCOLOR);
|
||||
class.lpszMenuName = NULL;
|
||||
class.lpszClassName = SDL_Appname;
|
||||
class.hbrBackground = NULL;
|
||||
class.hInstance = SDL_Instance;
|
||||
class.style = SDL_Appstyle;
|
||||
class.lpfnWndProc = WIN_WindowProc;
|
||||
class.cbWndExtra = 0;
|
||||
class.cbClsExtra = 0;
|
||||
if (!RegisterClass(&class)) {
|
||||
wcex.cbSize = sizeof(WNDCLASSEX);
|
||||
wcex.hCursor = NULL;
|
||||
wcex.hIcon = NULL;
|
||||
wcex.hIconSm = NULL;
|
||||
wcex.lpszMenuName = NULL;
|
||||
wcex.lpszClassName = SDL_Appname;
|
||||
wcex.style = SDL_Appstyle;
|
||||
wcex.hbrBackground = NULL;
|
||||
wcex.lpfnWndProc = WIN_WindowProc;
|
||||
wcex.hInstance = SDL_Instance;
|
||||
wcex.cbClsExtra = 0;
|
||||
wcex.cbWndExtra = 0;
|
||||
|
||||
/* Use the first icon as a default icon, like in the Explorer */
|
||||
GetModuleFileName(SDL_Instance, path, MAX_PATH);
|
||||
ExtractIconEx(path, 0, &wcex.hIcon, &wcex.hIconSm, 1);
|
||||
|
||||
if (!RegisterClassEx(&wcex)) {
|
||||
return SDL_SetError("Couldn't register application class");
|
||||
}
|
||||
|
||||
|
@ -1100,7 +1106,7 @@ SDL_RegisterApp(char *name, Uint32 style, void *hInst)
|
|||
void
|
||||
SDL_UnregisterApp()
|
||||
{
|
||||
WNDCLASS class;
|
||||
WNDCLASSEX wcex;
|
||||
|
||||
/* SDL_RegisterApp might not have been called before */
|
||||
if (!app_registered) {
|
||||
|
@ -1109,8 +1115,10 @@ SDL_UnregisterApp()
|
|||
--app_registered;
|
||||
if (app_registered == 0) {
|
||||
/* Check for any registered window classes. */
|
||||
if (GetClassInfo(SDL_Instance, SDL_Appname, &class)) {
|
||||
if (GetClassInfoEx(SDL_Instance, SDL_Appname, &wcex)) {
|
||||
UnregisterClass(SDL_Appname, SDL_Instance);
|
||||
if (wcex.hIcon) DestroyIcon(wcex.hIcon);
|
||||
if (wcex.hIconSm) DestroyIcon(wcex.hIconSm);
|
||||
}
|
||||
SDL_free(SDL_Appname);
|
||||
SDL_Appname = NULL;
|
||||
|
|
Loading…
Reference in New Issue