You can use SDL_ConvertSurfaceFormat() now
authorSam Lantinga <slouken@libsdl.org>
Mon, 28 Feb 2011 21:58:37 -0800
changeset 5418 f8ecf0869cc9
parent 5417 958c15815b4a
child 5419 210b0abe9e44
You can use SDL_ConvertSurfaceFormat() now Also, icon is guaranteed not to be NULL going into this function.
src/video/windows/SDL_windowswindow.c
--- a/src/video/windows/SDL_windowswindow.c	Mon Feb 28 21:48:02 2011 -0800
+++ b/src/video/windows/SDL_windowswindow.c	Mon Feb 28 21:58:37 2011 -0800
@@ -286,57 +286,51 @@
 {
     HWND hwnd = ((SDL_WindowData *) window->driverdata)->hwnd;
     HICON hicon = NULL;
-
-    if (icon) {
-        BYTE *icon_bmp;
-        int icon_len;
-        SDL_RWops *dst;
-        SDL_PixelFormat format;
-        SDL_Surface *surface;
+    BYTE *icon_bmp;
+    int icon_len;
+    SDL_RWops *dst;
+    SDL_Surface *surface;
 
-        /* Create temporary bitmap buffer */
-        icon_len = 40 + icon->h * icon->w * 4;
-        icon_bmp = SDL_stack_alloc(BYTE, icon_len);
-        dst = SDL_RWFromMem(icon_bmp, icon_len);
-        if (!dst) {
-            SDL_stack_free(icon_bmp);
-            return;
-        }
+    /* Create temporary bitmap buffer */
+    icon_len = 40 + icon->h * icon->w * 4;
+    icon_bmp = SDL_stack_alloc(BYTE, icon_len);
+    dst = SDL_RWFromMem(icon_bmp, icon_len);
+    if (!dst) {
+        SDL_stack_free(icon_bmp);
+        return;
+    }
 
-        /* Write the BITMAPINFO header */
-        SDL_WriteLE32(dst, 40);
-        SDL_WriteLE32(dst, icon->w);
-        SDL_WriteLE32(dst, icon->h * 2);
-        SDL_WriteLE16(dst, 1);
-        SDL_WriteLE16(dst, 32);
-        SDL_WriteLE32(dst, BI_RGB);
-        SDL_WriteLE32(dst, icon->h * icon->w * 4);
-        SDL_WriteLE32(dst, 0);
-        SDL_WriteLE32(dst, 0);
-        SDL_WriteLE32(dst, 0);
-        SDL_WriteLE32(dst, 0);
+    /* Write the BITMAPINFO header */
+    SDL_WriteLE32(dst, 40);
+    SDL_WriteLE32(dst, icon->w);
+    SDL_WriteLE32(dst, icon->h * 2);
+    SDL_WriteLE16(dst, 1);
+    SDL_WriteLE16(dst, 32);
+    SDL_WriteLE32(dst, BI_RGB);
+    SDL_WriteLE32(dst, icon->h * icon->w * 4);
+    SDL_WriteLE32(dst, 0);
+    SDL_WriteLE32(dst, 0);
+    SDL_WriteLE32(dst, 0);
+    SDL_WriteLE32(dst, 0);
 
-        /* Convert the icon to a 32-bit surface with alpha channel */
-        SDL_InitFormat(&format, SDL_PIXELFORMAT_ARGB8888);
-        surface = SDL_ConvertSurface(icon, &format, 0);
-        if (surface) {
-            /* Write the pixels upside down into the bitmap buffer */
-            int y = surface->h;
-            while (y--) {
-                Uint8 *src = (Uint8 *) surface->pixels + y * surface->pitch;
-                SDL_RWwrite(dst, src, surface->pitch, 1);
-            }
-            SDL_FreeSurface(surface);
+    /* Convert the icon to a 32-bit surface with alpha channel */
+    surface = SDL_ConvertSurfaceFormat(icon, SDL_PIXELFORMAT_ARGB8888, 0);
+    if (surface) {
+        /* Write the pixels upside down into the bitmap buffer */
+        int y = surface->h;
+        while (y--) {
+            Uint8 *src = (Uint8 *) surface->pixels + y * surface->pitch;
+            SDL_RWwrite(dst, src, surface->pitch, 1);
+        }
+        SDL_FreeSurface(surface);
 
 /* TODO: create the icon in WinCE (CreateIconFromResource isn't available) */
 #ifndef _WIN32_WCE
-            hicon =
-                CreateIconFromResource(icon_bmp, icon_len, TRUE, 0x00030000);
+        hicon = CreateIconFromResource(icon_bmp, icon_len, TRUE, 0x00030000);
 #endif
-        }
-        SDL_RWclose(dst);
-        SDL_stack_free(icon_bmp);
     }
+    SDL_RWclose(dst);
+    SDL_stack_free(icon_bmp);
 
     /* Set the icon for the window */
     SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LPARAM) hicon);