diff src/video/win32/SDL_win32video.c @ 1724:6c63fc2bd986 SDL-1.3

Proof of concept done - Win32 GDI implementation mostly complete.
author Sam Lantinga <slouken@libsdl.org>
date Thu, 06 Jul 2006 07:17:11 +0000
parents a1ebb17f9c52
children 98a3207ddde8
line wrap: on
line diff
--- a/src/video/win32/SDL_win32video.c	Thu Jul 06 05:53:32 2006 +0000
+++ b/src/video/win32/SDL_win32video.c	Thu Jul 06 07:17:11 2006 +0000
@@ -28,8 +28,7 @@
 #include "../SDL_pixels_c.h"
 
 #include "SDL_win32video.h"
-#include "SDL_win32events.h"
-#include "SDL_win32window.h"
+#include "SDL_dibrender.h"
 
 /* Initialization/Query functions */
 static int WIN_VideoInit(_THIS);
@@ -109,10 +108,51 @@
 int
 WIN_VideoInit(_THIS)
 {
+    int bmi_size;
+    LPBITMAPINFO bmi;
     SDL_DisplayMode mode;
 
-    SDL_AddBasicVideoDisplay(NULL);
-    //SDL_AddRenderDriver(0, &SDL_WIN_RenderDriver);
+    /* Find out the desktop mode */
+    mode.format = SDL_PixelFormat_Unknown;
+    mode.w = GetSystemMetrics(SM_CXSCREEN);
+    mode.h = GetSystemMetrics(SM_CYSCREEN);
+    mode.refresh_rate = 0;
+
+    bmi_size = sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD);
+    bmi = (LPBITMAPINFO) SDL_malloc(bmi_size);
+    if (bmi) {
+        HDC hdc;
+        HBITMAP hbm;
+
+        SDL_memset(bmi, 0, bmi_size);
+        bmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
+        hdc = GetDC(NULL);
+        hbm = CreateCompatibleBitmap(hdc, 1, 1);
+        GetDIBits(hdc, hbm, 0, 1, NULL, bmi, DIB_RGB_COLORS);
+        GetDIBits(hdc, hbm, 0, 1, NULL, bmi, DIB_RGB_COLORS);
+        DeleteObject(hbm);
+        ReleaseDC(NULL, hdc);
+        if (bmi->bmiHeader.biCompression == BI_BITFIELDS) {
+            switch (*(Uint32 *) bmi->bmiColors) {
+            case 0x00FF0000:
+                mode.format = SDL_PixelFormat_RGB888;
+                break;
+            case 0x000000FF:
+                mode.format = SDL_PixelFormat_BGR888;
+                break;
+            case 0xF800:
+                mode.format = SDL_PixelFormat_RGB565;
+                break;
+            case 0x7C00:
+                mode.format = SDL_PixelFormat_RGB555;
+                break;
+            }
+        } else if (bmi->bmiHeader.biBitCount == 8) {
+            mode.format = SDL_PixelFormat_Index8;
+        }
+    }
+    SDL_AddBasicVideoDisplay(&mode);
+    SDL_AddRenderDriver(0, &SDL_DIB_RenderDriver);
 
     SDL_zero(mode);
     SDL_AddDisplayMode(0, &mode);
@@ -134,6 +174,8 @@
 void
 WIN_VideoQuit(_THIS)
 {
+    WIN_DelKeyboard(_this);
+    WIN_DelMouse(_this);
 }
 
 /* vim: set ts=4 sw=4 expandtab: */