Răsfoiți Sursa

Fixed bug 4043 - SDL_windowswindow.c incorrect icon height

Needed to allocate space for the mask in the ICONIMAGE structure
Sam Lantinga 7 ani în urmă
părinte
comite
0cba684794
1 a modificat fișierele cu 7 adăugiri și 3 ștergeri
  1. 7 3
      src/video/windows/SDL_windowswindow.c

+ 7 - 3
src/video/windows/SDL_windowswindow.c

@@ -438,11 +438,12 @@ WIN_SetWindowIcon(_THIS, SDL_Window * window, SDL_Surface * icon)
     HWND hwnd = ((SDL_WindowData *) window->driverdata)->hwnd;
     HICON hicon = NULL;
     BYTE *icon_bmp;
-    int icon_len, y;
+    int icon_len, mask_len, y;
     SDL_RWops *dst;
 
-    /* Create temporary bitmap buffer */
-    icon_len = 40 + icon->h * icon->w * sizeof(Uint32);
+    /* Create temporary buffer for ICONIMAGE structure */
+    mask_len = (icon->h * (icon->w + 7)/8);
+    icon_len = 40 + icon->h * icon->w * sizeof(Uint32) + mask_len;
     icon_bmp = SDL_stack_alloc(BYTE, icon_len);
     dst = SDL_RWFromMem(icon_bmp, icon_len);
     if (!dst) {
@@ -471,6 +472,9 @@ WIN_SetWindowIcon(_THIS, SDL_Window * window, SDL_Surface * icon)
         SDL_RWwrite(dst, src, icon->w * sizeof(Uint32), 1);
     }
 
+    /* Write the mask */
+    SDL_memset(icon_bmp + icon_len - mask_len, 0xFF, mask_len);
+
     hicon = CreateIconFromResource(icon_bmp, icon_len, TRUE, 0x00030000);
 
     SDL_RWclose(dst);