mirror of https://github.com/encounter/SDL.git
Fixed bug 2841 - Hint to set resource id for window icon
Alexey Seems to be a missing functionality. I want to set an icon from RC file. I cant pass MAKEINTRESOURCE(X) string to SDL_RegisterApp() cause string returned by MAKEINTRESOURCE string is not actually a string and SDL_strlen will crash. Moreover LoadImage seems to be loading wrong icon size. LoadIcon seems to be fine.
This commit is contained in:
parent
18cceb5ce0
commit
c87e1d525c
|
@ -221,6 +221,12 @@ extern "C" {
|
||||||
*/
|
*/
|
||||||
#define SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN "SDL_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN"
|
#define SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN "SDL_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief A variable to specify custom icon resource id from RC file on Windows platform
|
||||||
|
*/
|
||||||
|
#define SDL_HINT_WINDOWS_INTRESOURCE_ICON "SDL_WINDOWS_INTRESOURCE_ICON"
|
||||||
|
#define SDL_HINT_WINDOWS_INTRESOURCE_ICON_SMALL "SDL_WINDOWS_INTRESOURCE_ICON_SMALL"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief A variable controlling whether the windows message loop is processed by SDL
|
* \brief A variable controlling whether the windows message loop is processed by SDL
|
||||||
*
|
*
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
#include "SDL_syswm.h"
|
#include "SDL_syswm.h"
|
||||||
#include "SDL_timer.h"
|
#include "SDL_timer.h"
|
||||||
#include "SDL_vkeys.h"
|
#include "SDL_vkeys.h"
|
||||||
|
#include "SDL_hints.h"
|
||||||
#include "../../events/SDL_events_c.h"
|
#include "../../events/SDL_events_c.h"
|
||||||
#include "../../events/SDL_touch_c.h"
|
#include "../../events/SDL_touch_c.h"
|
||||||
#include "../../events/scancodes_windows.h"
|
#include "../../events/scancodes_windows.h"
|
||||||
|
@ -1070,6 +1071,7 @@ HINSTANCE SDL_Instance = NULL;
|
||||||
int
|
int
|
||||||
SDL_RegisterApp(char *name, Uint32 style, void *hInst)
|
SDL_RegisterApp(char *name, Uint32 style, void *hInst)
|
||||||
{
|
{
|
||||||
|
const char *hint;
|
||||||
WNDCLASSEX wcex;
|
WNDCLASSEX wcex;
|
||||||
TCHAR path[MAX_PATH];
|
TCHAR path[MAX_PATH];
|
||||||
|
|
||||||
|
@ -1106,9 +1108,19 @@ SDL_RegisterApp(char *name, Uint32 style, void *hInst)
|
||||||
wcex.cbClsExtra = 0;
|
wcex.cbClsExtra = 0;
|
||||||
wcex.cbWndExtra = 0;
|
wcex.cbWndExtra = 0;
|
||||||
|
|
||||||
|
hint = SDL_GetHint(SDL_HINT_WINDOWS_INTRESOURCE_ICON);
|
||||||
|
if (hint && *hint) {
|
||||||
|
wcex.hIcon = LoadIcon(SDL_Instance, MAKEINTRESOURCE(SDL_atoi(hint)));
|
||||||
|
|
||||||
|
hint = SDL_GetHint(SDL_HINT_WINDOWS_INTRESOURCE_ICON_SMALL);
|
||||||
|
if (hint && *hint) {
|
||||||
|
wcex.hIconSm = LoadIcon(SDL_Instance, MAKEINTRESOURCE(SDL_atoi(hint)));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
/* Use the first icon as a default icon, like in the Explorer */
|
/* Use the first icon as a default icon, like in the Explorer */
|
||||||
GetModuleFileName(SDL_Instance, path, MAX_PATH);
|
GetModuleFileName(SDL_Instance, path, MAX_PATH);
|
||||||
ExtractIconEx(path, 0, &wcex.hIcon, &wcex.hIconSm, 1);
|
ExtractIconEx(path, 0, &wcex.hIcon, &wcex.hIconSm, 1);
|
||||||
|
}
|
||||||
|
|
||||||
if (!RegisterClassEx(&wcex)) {
|
if (!RegisterClassEx(&wcex)) {
|
||||||
return SDL_SetError("Couldn't register application class");
|
return SDL_SetError("Couldn't register application class");
|
||||||
|
|
Loading…
Reference in New Issue