From debde8a8b5b011688dc4e60e47099af10ce32f7f Mon Sep 17 00:00:00 2001 From: deuce <> Date: Fri, 2 Mar 2007 22:42:18 +0000 Subject: [PATCH] Missing bits of seticon() from last night. --- src/conio/sdl_con.c | 34 ++++++++++++++++++++++++++++++++++ src/conio/sdl_con.h | 1 + 2 files changed, 35 insertions(+) diff --git a/src/conio/sdl_con.c b/src/conio/sdl_con.c index 0b9009728b..c747659773 100644 --- a/src/conio/sdl_con.c +++ b/src/conio/sdl_con.c @@ -52,6 +52,7 @@ int sdl_exitcode=0; SDL_Surface *sdl_font=NULL; SDL_Surface *sdl_cursor=NULL; +SDL_Surface *sdl_icon=NULL; static int lastcursor_x=0; static int lastcursor_y=0; @@ -91,6 +92,7 @@ enum { SDL_USEREVENT_UPDATERECT ,SDL_USEREVENT_SETTITLE ,SDL_USEREVENT_SETNAME + ,SDL_USEREVENT_SETICON ,SDL_USEREVENT_SETVIDMODE ,SDL_USEREVENT_SHOWMOUSE ,SDL_USEREVENT_HIDEMOUSE @@ -259,6 +261,15 @@ void sdl_user_func(int func, ...) } while(sdl.PeepEvents(&ev, 1, SDL_ADDEVENT, 0xffffffff)!=1); break; + case SDL_USEREVENT_SETICON: + ev.user.data1=va_arg(argptr, void *); + if((ev.user.data2=(unsigned long *)malloc(sizeof(unsigned long)))==NULL) { + va_end(argptr); + return; + } + *(unsigned long *)ev.user.data2=va_arg(argptr, unsigned long); + while(sdl.PeepEvents(&ev, 1, SDL_ADDEVENT, 0xffffffff)!=1); + break; case SDL_USEREVENT_SETTITLE: if((ev.user.data1=strdup(va_arg(argptr, char *)))==NULL) { va_end(argptr); @@ -861,6 +872,13 @@ int sdl_setname(const char *name) return(0); } +/* Called from main thread only (Passes Event) */ +int sdl_seticon(const void *icon, unsigned long size) +{ + sdl_user_func(SDL_USEREVENT_SETICON,icon,size); + return(0); +} + /* Called from main thread only (Passes Event) */ int sdl_settitle(const char *title) { @@ -1757,6 +1775,22 @@ int sdl_video_event_thread(void *data) sdl.WM_SetCaption((char *)ev.user.data1,(char *)ev.user.data1); free(ev.user.data1); break; + case SDL_USEREVENT_SETICON: + if(sdl_icon != NULL) + sdl.FreeSurface(sdl_icon); + sdl_icon=sdl.CreateRGBSurfaceFrom(ev.user.data1 + , *(unsigned long *)ev.user.data2 + , *(unsigned long *)ev.user.data2 + , 32 + , *(unsigned long *)ev.user.data2*4 + , *(DWORD *)"\377\0\0\0" + , *(DWORD *)"\0\377\0\0" + , *(DWORD *)"\0\0\377\0" + , *(DWORD *)"\0\0\0\377" + ); + sdl.WM_SetIcon(sdl_icon,NULL); + free(ev.user.data2); + break; case SDL_USEREVENT_SETTITLE: sdl.WM_SetCaption((char *)ev.user.data1,NULL); free(ev.user.data1); diff --git a/src/conio/sdl_con.h b/src/conio/sdl_con.h index 8ff08c548f..a556d85ac7 100644 --- a/src/conio/sdl_con.h +++ b/src/conio/sdl_con.h @@ -30,6 +30,7 @@ int sdl_getche(void); int sdl_beep(void); void sdl_textmode(int mode); void sdl_setname(const char *name); +void sdl_seticon(const void *, unsigned long size); void sdl_settitle(const char *title); int sdl_hidemouse(void); int sdl_showmouse(void); -- GitLab