annotate src/video/windib/SDL_dibvideo.c @ 4249:429c8dd3175d SDL-1.2

Fixed bug #713 Don't clamp the mouse coordinates to the video surface size, instead clamp them to the last known window size. This allows users to get the correct mouse coordinates even if they don't call SDL_SetVideoMode() in response to an SDL_VIDEORESIZE event (used as a hack to retain the OpenGL context on Windows and Linux after a window resize)
author Sam Lantinga <slouken@libsdl.org>
date Sun, 27 Sep 2009 05:18:43 +0000
parents 3b7fc3416601
children b40d6e58a5e5
rev   line source
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1 /*
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
2 SDL - Simple DirectMedia Layer
4159
a1b03ba2fcd0 Updated copyright date
Sam Lantinga <slouken@libsdl.org>
parents: 4143
diff changeset
3 Copyright (C) 1997-2009 Sam Lantinga
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
4
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
5 This library is free software; you can redistribute it and/or
1312
c9b51268668f Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents: 1295
diff changeset
6 modify it under the terms of the GNU Lesser General Public
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
7 License as published by the Free Software Foundation; either
1312
c9b51268668f Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents: 1295
diff changeset
8 version 2.1 of the License, or (at your option) any later version.
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
9
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
10 This library is distributed in the hope that it will be useful,
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1312
c9b51268668f Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents: 1295
diff changeset
13 Lesser General Public License for more details.
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
14
1312
c9b51268668f Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents: 1295
diff changeset
15 You should have received a copy of the GNU Lesser General Public
c9b51268668f Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents: 1295
diff changeset
16 License along with this library; if not, write to the Free Software
c9b51268668f Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents: 1295
diff changeset
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
18
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
19 Sam Lantinga
252
e8157fcb3114 Updated the source with the correct e-mail address
Sam Lantinga <slouken@libsdl.org>
parents: 169
diff changeset
20 slouken@libsdl.org
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
21 */
1402
d910939febfa Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents: 1361
diff changeset
22 #include "SDL_config.h"
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
23
1433
bb6839704ed6 SDL_windows.h is no longer necessary
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
24 #define WIN32_LEAN_AND_MEAN
bb6839704ed6 SDL_windows.h is no longer necessary
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
25 #include <windows.h>
1152
51a8702d8ecd Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents: 1145
diff changeset
26
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
27 /* Not yet in the mingw32 cross-compile headers */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
28 #ifndef CDS_FULLSCREEN
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
29 #define CDS_FULLSCREEN 4
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
30 #endif
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
31
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
32 #include "SDL_syswm.h"
1361
19418e4422cb New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents: 1358
diff changeset
33 #include "../SDL_sysvideo.h"
19418e4422cb New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents: 1358
diff changeset
34 #include "../SDL_pixels_c.h"
19418e4422cb New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents: 1358
diff changeset
35 #include "../../events/SDL_sysevents.h"
19418e4422cb New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents: 1358
diff changeset
36 #include "../../events/SDL_events_c.h"
4162
3b7fc3416601 GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents: 4159
diff changeset
37 #include "SDL_gapidibvideo.h"
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
38 #include "SDL_dibvideo.h"
1361
19418e4422cb New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents: 1358
diff changeset
39 #include "../wincommon/SDL_syswm_c.h"
19418e4422cb New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents: 1358
diff changeset
40 #include "../wincommon/SDL_sysmouse_c.h"
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
41 #include "SDL_dibevents_c.h"
1361
19418e4422cb New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents: 1358
diff changeset
42 #include "../wincommon/SDL_wingl_c.h"
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
43
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
44 #ifdef _WIN32_WCE
4134
31c7c57af8a4 Updates for building on Windows CE using mingw32ce cross compiler:
Sam Lantinga <slouken@libsdl.org>
parents: 4099
diff changeset
45
31c7c57af8a4 Updates for building on Windows CE using mingw32ce cross compiler:
Sam Lantinga <slouken@libsdl.org>
parents: 4099
diff changeset
46 #ifndef DM_DISPLAYORIENTATION
31c7c57af8a4 Updates for building on Windows CE using mingw32ce cross compiler:
Sam Lantinga <slouken@libsdl.org>
parents: 4099
diff changeset
47 #define DM_DISPLAYORIENTATION 0x00800000L
31c7c57af8a4 Updates for building on Windows CE using mingw32ce cross compiler:
Sam Lantinga <slouken@libsdl.org>
parents: 4099
diff changeset
48 #endif
31c7c57af8a4 Updates for building on Windows CE using mingw32ce cross compiler:
Sam Lantinga <slouken@libsdl.org>
parents: 4099
diff changeset
49 #ifndef DM_DISPLAYQUERYORIENTATION
31c7c57af8a4 Updates for building on Windows CE using mingw32ce cross compiler:
Sam Lantinga <slouken@libsdl.org>
parents: 4099
diff changeset
50 #define DM_DISPLAYQUERYORIENTATION 0x01000000L
31c7c57af8a4 Updates for building on Windows CE using mingw32ce cross compiler:
Sam Lantinga <slouken@libsdl.org>
parents: 4099
diff changeset
51 #endif
31c7c57af8a4 Updates for building on Windows CE using mingw32ce cross compiler:
Sam Lantinga <slouken@libsdl.org>
parents: 4099
diff changeset
52 #ifndef DMDO_0
31c7c57af8a4 Updates for building on Windows CE using mingw32ce cross compiler:
Sam Lantinga <slouken@libsdl.org>
parents: 4099
diff changeset
53 #define DMDO_0 0
31c7c57af8a4 Updates for building on Windows CE using mingw32ce cross compiler:
Sam Lantinga <slouken@libsdl.org>
parents: 4099
diff changeset
54 #endif
31c7c57af8a4 Updates for building on Windows CE using mingw32ce cross compiler:
Sam Lantinga <slouken@libsdl.org>
parents: 4099
diff changeset
55 #ifndef DMDO_90
31c7c57af8a4 Updates for building on Windows CE using mingw32ce cross compiler:
Sam Lantinga <slouken@libsdl.org>
parents: 4099
diff changeset
56 #define DMDO_90 1
31c7c57af8a4 Updates for building on Windows CE using mingw32ce cross compiler:
Sam Lantinga <slouken@libsdl.org>
parents: 4099
diff changeset
57 #endif
31c7c57af8a4 Updates for building on Windows CE using mingw32ce cross compiler:
Sam Lantinga <slouken@libsdl.org>
parents: 4099
diff changeset
58 #ifndef DMDO_180
31c7c57af8a4 Updates for building on Windows CE using mingw32ce cross compiler:
Sam Lantinga <slouken@libsdl.org>
parents: 4099
diff changeset
59 #define DMDO_180 2
31c7c57af8a4 Updates for building on Windows CE using mingw32ce cross compiler:
Sam Lantinga <slouken@libsdl.org>
parents: 4099
diff changeset
60 #endif
31c7c57af8a4 Updates for building on Windows CE using mingw32ce cross compiler:
Sam Lantinga <slouken@libsdl.org>
parents: 4099
diff changeset
61 #ifndef DMDO_270
31c7c57af8a4 Updates for building on Windows CE using mingw32ce cross compiler:
Sam Lantinga <slouken@libsdl.org>
parents: 4099
diff changeset
62 #define DMDO_270 4
31c7c57af8a4 Updates for building on Windows CE using mingw32ce cross compiler:
Sam Lantinga <slouken@libsdl.org>
parents: 4099
diff changeset
63 #endif
31c7c57af8a4 Updates for building on Windows CE using mingw32ce cross compiler:
Sam Lantinga <slouken@libsdl.org>
parents: 4099
diff changeset
64
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
65 #define NO_GETDIBITS
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
66 #define NO_GAMMA_SUPPORT
1465
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
67 #if _WIN32_WCE < 420
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
68 #define NO_CHANGEDISPLAYSETTINGS
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
69 #else
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
70 #define ChangeDisplaySettings(lpDevMode, dwFlags) ChangeDisplaySettingsEx(NULL, (lpDevMode), 0, (dwFlags), 0)
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
71 #endif
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
72 #endif
453
a6fa62b1be09 Updated for embedded Visual C++ 4.0
Sam Lantinga <slouken@libsdl.org>
parents: 448
diff changeset
73 #ifndef WS_MAXIMIZE
766
ed57c876700d Date: Wed, 26 Nov 2003 01:52:02 +0800
Sam Lantinga <slouken@libsdl.org>
parents: 515
diff changeset
74 #define WS_MAXIMIZE 0
ed57c876700d Date: Wed, 26 Nov 2003 01:52:02 +0800
Sam Lantinga <slouken@libsdl.org>
parents: 515
diff changeset
75 #endif
ed57c876700d Date: Wed, 26 Nov 2003 01:52:02 +0800
Sam Lantinga <slouken@libsdl.org>
parents: 515
diff changeset
76 #ifndef WS_THICKFRAME
ed57c876700d Date: Wed, 26 Nov 2003 01:52:02 +0800
Sam Lantinga <slouken@libsdl.org>
parents: 515
diff changeset
77 #define WS_THICKFRAME 0
453
a6fa62b1be09 Updated for embedded Visual C++ 4.0
Sam Lantinga <slouken@libsdl.org>
parents: 448
diff changeset
78 #endif
a6fa62b1be09 Updated for embedded Visual C++ 4.0
Sam Lantinga <slouken@libsdl.org>
parents: 448
diff changeset
79 #ifndef SWP_NOCOPYBITS
a6fa62b1be09 Updated for embedded Visual C++ 4.0
Sam Lantinga <slouken@libsdl.org>
parents: 448
diff changeset
80 #define SWP_NOCOPYBITS 0
a6fa62b1be09 Updated for embedded Visual C++ 4.0
Sam Lantinga <slouken@libsdl.org>
parents: 448
diff changeset
81 #endif
a6fa62b1be09 Updated for embedded Visual C++ 4.0
Sam Lantinga <slouken@libsdl.org>
parents: 448
diff changeset
82 #ifndef PC_NOCOLLAPSE
a6fa62b1be09 Updated for embedded Visual C++ 4.0
Sam Lantinga <slouken@libsdl.org>
parents: 448
diff changeset
83 #define PC_NOCOLLAPSE 0
a6fa62b1be09 Updated for embedded Visual C++ 4.0
Sam Lantinga <slouken@libsdl.org>
parents: 448
diff changeset
84 #endif
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
85
1465
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
86 #ifdef _WIN32_WCE
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
87 // defined and used in SDL_sysevents.c
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
88 extern HINSTANCE aygshell;
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
89 #endif
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
90
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
91 /* Initialization/Query functions */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
92 static int DIB_VideoInit(_THIS, SDL_PixelFormat *vformat);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
93 static SDL_Rect **DIB_ListModes(_THIS, SDL_PixelFormat *format, Uint32 flags);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
94 SDL_Surface *DIB_SetVideoMode(_THIS, SDL_Surface *current, int width, int height, int bpp, Uint32 flags);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
95 static int DIB_SetColors(_THIS, int firstcolor, int ncolors,
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
96 SDL_Color *colors);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
97 static void DIB_CheckGamma(_THIS);
338
518ffd98a8f6 Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents: 304
diff changeset
98 void DIB_SwapGamma(_THIS);
518ffd98a8f6 Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents: 304
diff changeset
99 void DIB_QuitGamma(_THIS);
518ffd98a8f6 Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents: 304
diff changeset
100 int DIB_SetGammaRamp(_THIS, Uint16 *ramp);
518ffd98a8f6 Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents: 304
diff changeset
101 int DIB_GetGammaRamp(_THIS, Uint16 *ramp);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
102 static void DIB_VideoQuit(_THIS);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
103
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
104 /* Hardware surface functions */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
105 static int DIB_AllocHWSurface(_THIS, SDL_Surface *surface);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
106 static int DIB_LockHWSurface(_THIS, SDL_Surface *surface);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
107 static void DIB_UnlockHWSurface(_THIS, SDL_Surface *surface);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
108 static void DIB_FreeHWSurface(_THIS, SDL_Surface *surface);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
109
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
110 /* Windows message handling functions */
3992
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
111 static void DIB_GrabStaticColors(HWND window);
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
112 static void DIB_ReleaseStaticColors(HWND window);
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
113 static void DIB_Activate(_THIS, BOOL active, BOOL minimized);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
114 static void DIB_RealizePalette(_THIS);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
115 static void DIB_PaletteChanged(_THIS, HWND window);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
116 static void DIB_WinPAINT(_THIS, HDC hdc);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
117
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
118 /* helper fn */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
119 static int DIB_SussScreenDepth();
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
120
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
121 /* DIB driver bootstrap functions */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
122
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
123 static int DIB_Available(void)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
124 {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
125 return(1);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
126 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
127
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
128 static void DIB_DeleteDevice(SDL_VideoDevice *device)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
129 {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
130 if ( device ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
131 if ( device->hidden ) {
4162
3b7fc3416601 GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents: 4159
diff changeset
132 if ( device->hidden->dibInfo ) {
3b7fc3416601 GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents: 4159
diff changeset
133 SDL_free( device->hidden->dibInfo );
3b7fc3416601 GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents: 4159
diff changeset
134 }
1336
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 1330
diff changeset
135 SDL_free(device->hidden);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
136 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
137 if ( device->gl_data ) {
1336
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 1330
diff changeset
138 SDL_free(device->gl_data);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
139 }
1336
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 1330
diff changeset
140 SDL_free(device);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
141 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
142 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
143
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
144 static SDL_VideoDevice *DIB_CreateDevice(int devindex)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
145 {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
146 SDL_VideoDevice *device;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
147
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
148 /* Initialize all variables that we clean on shutdown */
1336
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 1330
diff changeset
149 device = (SDL_VideoDevice *)SDL_malloc(sizeof(SDL_VideoDevice));
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
150 if ( device ) {
1336
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 1330
diff changeset
151 SDL_memset(device, 0, (sizeof *device));
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
152 device->hidden = (struct SDL_PrivateVideoData *)
1336
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 1330
diff changeset
153 SDL_malloc((sizeof *device->hidden));
4162
3b7fc3416601 GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents: 4159
diff changeset
154 if(device->hidden){
3b7fc3416601 GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents: 4159
diff changeset
155 SDL_memset(device->hidden, 0, (sizeof *device->hidden));
3b7fc3416601 GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents: 4159
diff changeset
156 device->hidden->dibInfo = (DibInfo *)SDL_malloc((sizeof(DibInfo)));
3b7fc3416601 GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents: 4159
diff changeset
157 if(device->hidden->dibInfo == NULL)
3b7fc3416601 GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents: 4159
diff changeset
158 {
3b7fc3416601 GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents: 4159
diff changeset
159 SDL_free(device->hidden);
3b7fc3416601 GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents: 4159
diff changeset
160 device->hidden = NULL;
3b7fc3416601 GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents: 4159
diff changeset
161 }
3b7fc3416601 GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents: 4159
diff changeset
162 }
3b7fc3416601 GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents: 4159
diff changeset
163
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
164 device->gl_data = (struct SDL_PrivateGLData *)
1336
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 1330
diff changeset
165 SDL_malloc((sizeof *device->gl_data));
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
166 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
167 if ( (device == NULL) || (device->hidden == NULL) ||
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
168 (device->gl_data == NULL) ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
169 SDL_OutOfMemory();
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
170 DIB_DeleteDevice(device);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
171 return(NULL);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
172 }
4162
3b7fc3416601 GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents: 4159
diff changeset
173 SDL_memset(device->hidden->dibInfo, 0, (sizeof *device->hidden->dibInfo));
1336
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 1330
diff changeset
174 SDL_memset(device->gl_data, 0, (sizeof *device->gl_data));
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
175
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
176 /* Set the function pointers */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
177 device->VideoInit = DIB_VideoInit;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
178 device->ListModes = DIB_ListModes;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
179 device->SetVideoMode = DIB_SetVideoMode;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
180 device->UpdateMouse = WIN_UpdateMouse;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
181 device->SetColors = DIB_SetColors;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
182 device->UpdateRects = NULL;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
183 device->VideoQuit = DIB_VideoQuit;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
184 device->AllocHWSurface = DIB_AllocHWSurface;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
185 device->CheckHWBlit = NULL;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
186 device->FillHWRect = NULL;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
187 device->SetHWColorKey = NULL;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
188 device->SetHWAlpha = NULL;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
189 device->LockHWSurface = DIB_LockHWSurface;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
190 device->UnlockHWSurface = DIB_UnlockHWSurface;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
191 device->FlipHWSurface = NULL;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
192 device->FreeHWSurface = DIB_FreeHWSurface;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
193 device->SetGammaRamp = DIB_SetGammaRamp;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
194 device->GetGammaRamp = DIB_GetGammaRamp;
1361
19418e4422cb New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents: 1358
diff changeset
195 #if SDL_VIDEO_OPENGL
453
a6fa62b1be09 Updated for embedded Visual C++ 4.0
Sam Lantinga <slouken@libsdl.org>
parents: 448
diff changeset
196 device->GL_LoadLibrary = WIN_GL_LoadLibrary;
a6fa62b1be09 Updated for embedded Visual C++ 4.0
Sam Lantinga <slouken@libsdl.org>
parents: 448
diff changeset
197 device->GL_GetProcAddress = WIN_GL_GetProcAddress;
a6fa62b1be09 Updated for embedded Visual C++ 4.0
Sam Lantinga <slouken@libsdl.org>
parents: 448
diff changeset
198 device->GL_GetAttribute = WIN_GL_GetAttribute;
a6fa62b1be09 Updated for embedded Visual C++ 4.0
Sam Lantinga <slouken@libsdl.org>
parents: 448
diff changeset
199 device->GL_MakeCurrent = WIN_GL_MakeCurrent;
a6fa62b1be09 Updated for embedded Visual C++ 4.0
Sam Lantinga <slouken@libsdl.org>
parents: 448
diff changeset
200 device->GL_SwapBuffers = WIN_GL_SwapBuffers;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
201 #endif
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
202 device->SetCaption = WIN_SetWMCaption;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
203 device->SetIcon = WIN_SetWMIcon;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
204 device->IconifyWindow = WIN_IconifyWindow;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
205 device->GrabInput = WIN_GrabInput;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
206 device->GetWMInfo = WIN_GetWMInfo;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
207 device->FreeWMCursor = WIN_FreeWMCursor;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
208 device->CreateWMCursor = WIN_CreateWMCursor;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
209 device->ShowWMCursor = WIN_ShowWMCursor;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
210 device->WarpWMCursor = WIN_WarpWMCursor;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
211 device->CheckMouseMode = WIN_CheckMouseMode;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
212 device->InitOSKeymap = DIB_InitOSKeymap;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
213 device->PumpEvents = DIB_PumpEvents;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
214
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
215 /* Set up the windows message handling functions */
3992
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
216 WIN_Activate = DIB_Activate;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
217 WIN_RealizePalette = DIB_RealizePalette;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
218 WIN_PaletteChanged = DIB_PaletteChanged;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
219 WIN_WinPAINT = DIB_WinPAINT;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
220 HandleMessage = DIB_HandleMessage;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
221
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
222 device->free = DIB_DeleteDevice;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
223
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
224 /* We're finally ready */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
225 return device;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
226 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
227
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
228 VideoBootStrap WINDIB_bootstrap = {
1152
51a8702d8ecd Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents: 1145
diff changeset
229 "windib", "Win95/98/NT/2000/CE GDI",
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
230 DIB_Available, DIB_CreateDevice
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
231 };
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
232
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
233 static int cmpmodes(const void *va, const void *vb)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
234 {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
235 SDL_Rect *a = *(SDL_Rect **)va;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
236 SDL_Rect *b = *(SDL_Rect **)vb;
966
f72cc0c7305f Video modes are sorted width first, then height
Sam Lantinga <slouken@libsdl.org>
parents: 833
diff changeset
237 if ( a->w == b->w )
f72cc0c7305f Video modes are sorted width first, then height
Sam Lantinga <slouken@libsdl.org>
parents: 833
diff changeset
238 return b->h - a->h;
f72cc0c7305f Video modes are sorted width first, then height
Sam Lantinga <slouken@libsdl.org>
parents: 833
diff changeset
239 else
f72cc0c7305f Video modes are sorted width first, then height
Sam Lantinga <slouken@libsdl.org>
parents: 833
diff changeset
240 return b->w - a->w;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
241 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
242
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
243 static int DIB_AddMode(_THIS, int bpp, int w, int h)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
244 {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
245 SDL_Rect *mode;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
246 int i, index;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
247 int next_mode;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
248
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
249 /* Check to see if we already have this mode */
4096
1859647893b8 Fixed crash when given video modes > 32 bpp
Sam Lantinga <slouken@libsdl.org>
parents: 4085
diff changeset
250 if ( bpp < 8 || bpp > 32 ) { /* Not supported */
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
251 return(0);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
252 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
253 index = ((bpp+7)/8)-1;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
254 for ( i=0; i<SDL_nummodes[index]; ++i ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
255 mode = SDL_modelist[index][i];
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
256 if ( (mode->w == w) && (mode->h == h) ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
257 return(0);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
258 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
259 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
260
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
261 /* Set up the new video mode rectangle */
1336
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 1330
diff changeset
262 mode = (SDL_Rect *)SDL_malloc(sizeof *mode);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
263 if ( mode == NULL ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
264 SDL_OutOfMemory();
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
265 return(-1);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
266 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
267 mode->x = 0;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
268 mode->y = 0;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
269 mode->w = w;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
270 mode->h = h;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
271
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
272 /* Allocate the new list of modes, and fill in the new mode */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
273 next_mode = SDL_nummodes[index];
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
274 SDL_modelist[index] = (SDL_Rect **)
1336
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 1330
diff changeset
275 SDL_realloc(SDL_modelist[index], (1+next_mode+1)*sizeof(SDL_Rect *));
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
276 if ( SDL_modelist[index] == NULL ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
277 SDL_OutOfMemory();
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
278 SDL_nummodes[index] = 0;
1336
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 1330
diff changeset
279 SDL_free(mode);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
280 return(-1);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
281 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
282 SDL_modelist[index][next_mode] = mode;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
283 SDL_modelist[index][next_mode+1] = NULL;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
284 SDL_nummodes[index]++;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
285
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
286 return(0);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
287 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
288
3992
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
289 static void DIB_CreatePalette(_THIS, int bpp)
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
290 {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
291 /* RJR: March 28, 2000
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
292 moved palette creation here from "DIB_VideoInit" */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
293
3992
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
294 LOGPALETTE *palette;
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
295 HDC hdc;
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
296 int ncolors;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
297
3992
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
298 ncolors = (1 << bpp);
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
299 palette = (LOGPALETTE *)SDL_malloc(sizeof(*palette)+
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
300 ncolors*sizeof(PALETTEENTRY));
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
301 palette->palVersion = 0x300;
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
302 palette->palNumEntries = ncolors;
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
303 hdc = GetDC(SDL_Window);
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
304 GetSystemPaletteEntries(hdc, 0, ncolors, palette->palPalEntry);
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
305 ReleaseDC(SDL_Window, hdc);
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
306 screen_pal = CreatePalette(palette);
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
307 screen_logpal = palette;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
308 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
309
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
310 int DIB_VideoInit(_THIS, SDL_PixelFormat *vformat)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
311 {
3981
b0d021cf41b6 windib target can now control screensaver with SDL_VIDEO_ALLOW_SCREENSAVER.
Ryan C. Gordon <icculus@icculus.org>
parents: 3976
diff changeset
312 const char *env = NULL;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
313 #ifndef NO_CHANGEDISPLAYSETTINGS
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
314 int i;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
315 DEVMODE settings;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
316 #endif
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
317
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
318 /* Create the window */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
319 if ( DIB_CreateWindow(this) < 0 ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
320 return(-1);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
321 }
1523
21b1fbb53f4a (patch tweaked a bit)
Sam Lantinga <slouken@libsdl.org>
parents: 1480
diff changeset
322
1361
19418e4422cb New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents: 1358
diff changeset
323 #if !SDL_AUDIO_DISABLED
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
324 DX5_SoundFocus(SDL_Window);
169
8039a5b760b9 Allow building SDL on Windows without audio support
Sam Lantinga <slouken@libsdl.org>
parents: 145
diff changeset
325 #endif
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
326
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
327 /* Determine the screen depth */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
328 vformat->BitsPerPixel = DIB_SussScreenDepth();
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
329 switch (vformat->BitsPerPixel) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
330 case 15:
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
331 vformat->Rmask = 0x00007c00;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
332 vformat->Gmask = 0x000003e0;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
333 vformat->Bmask = 0x0000001f;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
334 vformat->BitsPerPixel = 16;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
335 break;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
336 case 16:
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
337 vformat->Rmask = 0x0000f800;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
338 vformat->Gmask = 0x000007e0;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
339 vformat->Bmask = 0x0000001f;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
340 break;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
341 case 24:
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
342 case 32:
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
343 /* GDI defined as 8-8-8 */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
344 vformat->Rmask = 0x00ff0000;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
345 vformat->Gmask = 0x0000ff00;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
346 vformat->Bmask = 0x000000ff;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
347 break;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
348 default:
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
349 break;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
350 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
351
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
352 /* See if gamma is supported on this screen */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
353 DIB_CheckGamma(this);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
354
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
355 #ifndef NO_CHANGEDISPLAYSETTINGS
1465
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
356
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
357 settings.dmSize = sizeof(DEVMODE);
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
358 settings.dmDriverExtra = 0;
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
359 #ifdef _WIN32_WCE
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
360 settings.dmFields = DM_DISPLAYQUERYORIENTATION;
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
361 this->hidden->supportRotation = ChangeDisplaySettingsEx(NULL, &settings, NULL, CDS_TEST, NULL) == DISP_CHANGE_SUCCESSFUL;
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
362 #endif
1295
c3e36ac8a94c Date: Sun, 6 Mar 2005 17:06:20 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1292
diff changeset
363 /* Query for the desktop resolution */
4162
3b7fc3416601 GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents: 4159
diff changeset
364 SDL_desktop_mode.dmSize = sizeof(SDL_desktop_mode);
3b7fc3416601 GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents: 4159
diff changeset
365 SDL_desktop_mode.dmDriverExtra = 0;
1295
c3e36ac8a94c Date: Sun, 6 Mar 2005 17:06:20 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1292
diff changeset
366 EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &SDL_desktop_mode);
1545
8d9bb0cf2c2a Added current_w and current_h to the SDL_VideoInfo structure, which is set to the desktop resolution during video intialization, and then set to the current resolution when a video mode is set.
Sam Lantinga <slouken@libsdl.org>
parents: 1523
diff changeset
367 this->info.current_w = SDL_desktop_mode.dmPelsWidth;
8d9bb0cf2c2a Added current_w and current_h to the SDL_VideoInfo structure, which is set to the desktop resolution during video intialization, and then set to the current resolution when a video mode is set.
Sam Lantinga <slouken@libsdl.org>
parents: 1523
diff changeset
368 this->info.current_h = SDL_desktop_mode.dmPelsHeight;
1295
c3e36ac8a94c Date: Sun, 6 Mar 2005 17:06:20 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1292
diff changeset
369
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
370 /* Query for the list of available video modes */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
371 for ( i=0; EnumDisplaySettings(NULL, i, &settings); ++i ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
372 DIB_AddMode(this, settings.dmBitsPerPel,
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
373 settings.dmPelsWidth, settings.dmPelsHeight);
1465
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
374 #ifdef _WIN32_WCE
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
375 if( this->hidden->supportRotation )
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
376 DIB_AddMode(this, settings.dmBitsPerPel,
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
377 settings.dmPelsHeight, settings.dmPelsWidth);
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
378 #endif
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
379 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
380 /* Sort the mode lists */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
381 for ( i=0; i<NUM_MODELISTS; ++i ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
382 if ( SDL_nummodes[i] > 0 ) {
1336
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 1330
diff changeset
383 SDL_qsort(SDL_modelist[i], SDL_nummodes[i], sizeof *SDL_modelist[i], cmpmodes);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
384 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
385 }
1465
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
386 #else
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
387 // WinCE and fullscreen mode:
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
388 // We use only vformat->BitsPerPixel that allow SDL to
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
389 // emulate other bpp (8, 32) and use triple buffer,
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
390 // because SDL surface conversion is much faster than the WinCE one.
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
391 // Although it should be tested on devices with graphics accelerator.
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
392
1771
8d3ca155c396 Fixed bug #217
Sam Lantinga <slouken@libsdl.org>
parents: 1545
diff changeset
393 DIB_AddMode(this, vformat->BitsPerPixel,
1465
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
394 GetDeviceCaps(GetDC(NULL), HORZRES),
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
395 GetDeviceCaps(GetDC(NULL), VERTRES));
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
396
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
397 #endif /* !NO_CHANGEDISPLAYSETTINGS */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
398
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
399 /* Grab an identity palette if we are in a palettized mode */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
400 if ( vformat->BitsPerPixel <= 8 ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
401 /* RJR: March 28, 2000
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
402 moved palette creation to "DIB_CreatePalette" */
3992
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
403 DIB_CreatePalette(this, vformat->BitsPerPixel);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
404 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
405
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
406 /* Fill in some window manager capabilities */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
407 this->info.wm_available = 1;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
408
1465
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
409 #ifdef _WIN32_WCE
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
410 this->hidden->origRotation = -1;
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
411 #endif
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
412
3981
b0d021cf41b6 windib target can now control screensaver with SDL_VIDEO_ALLOW_SCREENSAVER.
Ryan C. Gordon <icculus@icculus.org>
parents: 3976
diff changeset
413 /* Allow environment override of screensaver disable. */
b0d021cf41b6 windib target can now control screensaver with SDL_VIDEO_ALLOW_SCREENSAVER.
Ryan C. Gordon <icculus@icculus.org>
parents: 3976
diff changeset
414 env = SDL_getenv("SDL_VIDEO_ALLOW_SCREENSAVER");
4139
568c9b3c0167 * Added configure option --enable-screensaver, to allow enabling the screensaver by default.
Sam Lantinga <slouken@libsdl.org>
parents: 4136
diff changeset
415 if ( env ) {
568c9b3c0167 * Added configure option --enable-screensaver, to allow enabling the screensaver by default.
Sam Lantinga <slouken@libsdl.org>
parents: 4136
diff changeset
416 allow_screensaver = SDL_atoi(env);
568c9b3c0167 * Added configure option --enable-screensaver, to allow enabling the screensaver by default.
Sam Lantinga <slouken@libsdl.org>
parents: 4136
diff changeset
417 } else {
568c9b3c0167 * Added configure option --enable-screensaver, to allow enabling the screensaver by default.
Sam Lantinga <slouken@libsdl.org>
parents: 4136
diff changeset
418 #ifdef SDL_VIDEO_DISABLE_SCREENSAVER
568c9b3c0167 * Added configure option --enable-screensaver, to allow enabling the screensaver by default.
Sam Lantinga <slouken@libsdl.org>
parents: 4136
diff changeset
419 allow_screensaver = 0;
568c9b3c0167 * Added configure option --enable-screensaver, to allow enabling the screensaver by default.
Sam Lantinga <slouken@libsdl.org>
parents: 4136
diff changeset
420 #else
568c9b3c0167 * Added configure option --enable-screensaver, to allow enabling the screensaver by default.
Sam Lantinga <slouken@libsdl.org>
parents: 4136
diff changeset
421 allow_screensaver = 1;
568c9b3c0167 * Added configure option --enable-screensaver, to allow enabling the screensaver by default.
Sam Lantinga <slouken@libsdl.org>
parents: 4136
diff changeset
422 #endif
568c9b3c0167 * Added configure option --enable-screensaver, to allow enabling the screensaver by default.
Sam Lantinga <slouken@libsdl.org>
parents: 4136
diff changeset
423 }
3981
b0d021cf41b6 windib target can now control screensaver with SDL_VIDEO_ALLOW_SCREENSAVER.
Ryan C. Gordon <icculus@icculus.org>
parents: 3976
diff changeset
424
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
425 /* We're done! */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
426 return(0);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
427 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
428
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
429 /* We support any format at any dimension */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
430 SDL_Rect **DIB_ListModes(_THIS, SDL_PixelFormat *format, Uint32 flags)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
431 {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
432 if ( (flags & SDL_FULLSCREEN) == SDL_FULLSCREEN ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
433 return(SDL_modelist[((format->BitsPerPixel+7)/8)-1]);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
434 } else {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
435 return((SDL_Rect **)-1);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
436 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
437 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
438
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
439
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
440 /*
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
441 Helper fn to work out which screen depth windows is currently using.
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
442 15 bit mode is considered 555 format, 16 bit is 565.
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
443 returns 0 for unknown mode.
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
444 (Derived from code in sept 1999 Windows Developer Journal
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
445 http://www.wdj.com/code/archive.html)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
446 */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
447 static int DIB_SussScreenDepth()
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
448 {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
449 #ifdef NO_GETDIBITS
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
450 int depth;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
451 HDC hdc;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
452
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
453 hdc = GetDC(SDL_Window);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
454 depth = GetDeviceCaps(hdc, PLANES) * GetDeviceCaps(hdc, BITSPIXEL);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
455 ReleaseDC(SDL_Window, hdc);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
456 return(depth);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
457 #else
1881
61f86f36afb9 Fixed bug #255
Sam Lantinga <slouken@libsdl.org>
parents: 1771
diff changeset
458 int depth;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
459 int dib_size;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
460 LPBITMAPINFOHEADER dib_hdr;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
461 HDC hdc;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
462 HBITMAP hbm;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
463
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
464 /* Allocate enough space for a DIB header plus palette (for
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
465 * 8-bit modes) or bitfields (for 16- and 32-bit modes)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
466 */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
467 dib_size = sizeof(BITMAPINFOHEADER) + 256 * sizeof (RGBQUAD);
1336
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 1330
diff changeset
468 dib_hdr = (LPBITMAPINFOHEADER) SDL_malloc(dib_size);
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 1330
diff changeset
469 SDL_memset(dib_hdr, 0, dib_size);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
470 dib_hdr->biSize = sizeof(BITMAPINFOHEADER);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
471
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
472 /* Get a device-dependent bitmap that's compatible with the
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
473 screen.
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
474 */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
475 hdc = GetDC(NULL);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
476 hbm = CreateCompatibleBitmap( hdc, 1, 1 );
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
477
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
478 /* Convert the DDB to a DIB. We need to call GetDIBits twice:
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
479 * the first call just fills in the BITMAPINFOHEADER; the
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
480 * second fills in the bitfields or palette.
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
481 */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
482 GetDIBits(hdc, hbm, 0, 1, NULL, (LPBITMAPINFO) dib_hdr, DIB_RGB_COLORS);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
483 GetDIBits(hdc, hbm, 0, 1, NULL, (LPBITMAPINFO) dib_hdr, DIB_RGB_COLORS);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
484 DeleteObject(hbm);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
485 ReleaseDC(NULL, hdc);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
486
1881
61f86f36afb9 Fixed bug #255
Sam Lantinga <slouken@libsdl.org>
parents: 1771
diff changeset
487 depth = 0;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
488 switch( dib_hdr->biBitCount )
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
489 {
1881
61f86f36afb9 Fixed bug #255
Sam Lantinga <slouken@libsdl.org>
parents: 1771
diff changeset
490 case 8: depth = 8; break;
61f86f36afb9 Fixed bug #255
Sam Lantinga <slouken@libsdl.org>
parents: 1771
diff changeset
491 case 24: depth = 24; break;
61f86f36afb9 Fixed bug #255
Sam Lantinga <slouken@libsdl.org>
parents: 1771
diff changeset
492 case 32: depth = 32; break;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
493 case 16:
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
494 if( dib_hdr->biCompression == BI_BITFIELDS ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
495 /* check the red mask */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
496 switch( ((DWORD*)((char*)dib_hdr + dib_hdr->biSize))[0] ) {
1881
61f86f36afb9 Fixed bug #255
Sam Lantinga <slouken@libsdl.org>
parents: 1771
diff changeset
497 case 0xf800: depth = 16; break; /* 565 */
61f86f36afb9 Fixed bug #255
Sam Lantinga <slouken@libsdl.org>
parents: 1771
diff changeset
498 case 0x7c00: depth = 15; break; /* 555 */
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
499 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
500 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
501 }
1881
61f86f36afb9 Fixed bug #255
Sam Lantinga <slouken@libsdl.org>
parents: 1771
diff changeset
502 SDL_free(dib_hdr);
61f86f36afb9 Fixed bug #255
Sam Lantinga <slouken@libsdl.org>
parents: 1771
diff changeset
503 return depth;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
504 #endif /* NO_GETDIBITS */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
505 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
506
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
507
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
508 /* Various screen update functions available */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
509 static void DIB_NormalUpdate(_THIS, int numrects, SDL_Rect *rects);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
510
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
511 SDL_Surface *DIB_SetVideoMode(_THIS, SDL_Surface *current,
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
512 int width, int height, int bpp, Uint32 flags)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
513 {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
514 SDL_Surface *video;
4085
51486c979189 > Hi Ryan,
Sam Lantinga <slouken@libsdl.org>
parents: 4079
diff changeset
515 int prev_w, prev_h;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
516 Uint32 prev_flags;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
517 DWORD style;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
518 const DWORD directstyle =
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
519 (WS_POPUP);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
520 const DWORD windowstyle =
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
521 (WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
522 const DWORD resizestyle =
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
523 (WS_THICKFRAME|WS_MAXIMIZEBOX);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
524 int binfo_size;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
525 BITMAPINFO *binfo;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
526 HDC hdc;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
527 RECT bounds;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
528 int x, y;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
529 Uint32 Rmask, Gmask, Bmask;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
530
4143
73e7e7f5b5a1 Don't recreate the GL content in windib target if SDL_SetVideoMode() is being
Ryan C. Gordon <icculus@icculus.org>
parents: 4139
diff changeset
531 /*
73e7e7f5b5a1 Don't recreate the GL content in windib target if SDL_SetVideoMode() is being
Ryan C. Gordon <icculus@icculus.org>
parents: 4139
diff changeset
532 * Special case for OpenGL windows...since the app needs to call
73e7e7f5b5a1 Don't recreate the GL content in windib target if SDL_SetVideoMode() is being
Ryan C. Gordon <icculus@icculus.org>
parents: 4139
diff changeset
533 * SDL_SetVideoMode() in response to resize events to continue to
73e7e7f5b5a1 Don't recreate the GL content in windib target if SDL_SetVideoMode() is being
Ryan C. Gordon <icculus@icculus.org>
parents: 4139
diff changeset
534 * function, but WGL handles the GL context details behind the scenes,
73e7e7f5b5a1 Don't recreate the GL content in windib target if SDL_SetVideoMode() is being
Ryan C. Gordon <icculus@icculus.org>
parents: 4139
diff changeset
535 * there's no sense in tearing the context down just to rebuild it
73e7e7f5b5a1 Don't recreate the GL content in windib target if SDL_SetVideoMode() is being
Ryan C. Gordon <icculus@icculus.org>
parents: 4139
diff changeset
536 * to what it already was...tearing it down sacrifices your GL state
73e7e7f5b5a1 Don't recreate the GL content in windib target if SDL_SetVideoMode() is being
Ryan C. Gordon <icculus@icculus.org>
parents: 4139
diff changeset
537 * and uploaded textures. So if we're requesting the same video mode
73e7e7f5b5a1 Don't recreate the GL content in windib target if SDL_SetVideoMode() is being
Ryan C. Gordon <icculus@icculus.org>
parents: 4139
diff changeset
538 * attributes and the width/height matches the physical window, just
73e7e7f5b5a1 Don't recreate the GL content in windib target if SDL_SetVideoMode() is being
Ryan C. Gordon <icculus@icculus.org>
parents: 4139
diff changeset
539 * return immediately.
73e7e7f5b5a1 Don't recreate the GL content in windib target if SDL_SetVideoMode() is being
Ryan C. Gordon <icculus@icculus.org>
parents: 4139
diff changeset
540 */
73e7e7f5b5a1 Don't recreate the GL content in windib target if SDL_SetVideoMode() is being
Ryan C. Gordon <icculus@icculus.org>
parents: 4139
diff changeset
541 if ( (SDL_Window != NULL) &&
73e7e7f5b5a1 Don't recreate the GL content in windib target if SDL_SetVideoMode() is being
Ryan C. Gordon <icculus@icculus.org>
parents: 4139
diff changeset
542 (current != NULL) &&
73e7e7f5b5a1 Don't recreate the GL content in windib target if SDL_SetVideoMode() is being
Ryan C. Gordon <icculus@icculus.org>
parents: 4139
diff changeset
543 (current->flags == flags) &&
73e7e7f5b5a1 Don't recreate the GL content in windib target if SDL_SetVideoMode() is being
Ryan C. Gordon <icculus@icculus.org>
parents: 4139
diff changeset
544 (current->format->BitsPerPixel == bpp) &&
73e7e7f5b5a1 Don't recreate the GL content in windib target if SDL_SetVideoMode() is being
Ryan C. Gordon <icculus@icculus.org>
parents: 4139
diff changeset
545 ((flags & SDL_FULLSCREEN) == 0) ) { /* probably not safe for fs */
73e7e7f5b5a1 Don't recreate the GL content in windib target if SDL_SetVideoMode() is being
Ryan C. Gordon <icculus@icculus.org>
parents: 4139
diff changeset
546 int curwidth, curheight;
73e7e7f5b5a1 Don't recreate the GL content in windib target if SDL_SetVideoMode() is being
Ryan C. Gordon <icculus@icculus.org>
parents: 4139
diff changeset
547 RECT size;
73e7e7f5b5a1 Don't recreate the GL content in windib target if SDL_SetVideoMode() is being
Ryan C. Gordon <icculus@icculus.org>
parents: 4139
diff changeset
548
73e7e7f5b5a1 Don't recreate the GL content in windib target if SDL_SetVideoMode() is being
Ryan C. Gordon <icculus@icculus.org>
parents: 4139
diff changeset
549 /* Get the current position of our window */
73e7e7f5b5a1 Don't recreate the GL content in windib target if SDL_SetVideoMode() is being
Ryan C. Gordon <icculus@icculus.org>
parents: 4139
diff changeset
550 GetClientRect(SDL_Window, &size);
73e7e7f5b5a1 Don't recreate the GL content in windib target if SDL_SetVideoMode() is being
Ryan C. Gordon <icculus@icculus.org>
parents: 4139
diff changeset
551
73e7e7f5b5a1 Don't recreate the GL content in windib target if SDL_SetVideoMode() is being
Ryan C. Gordon <icculus@icculus.org>
parents: 4139
diff changeset
552 curwidth = (size.right - size.left);
73e7e7f5b5a1 Don't recreate the GL content in windib target if SDL_SetVideoMode() is being
Ryan C. Gordon <icculus@icculus.org>
parents: 4139
diff changeset
553 curheight = (size.bottom - size.top);
73e7e7f5b5a1 Don't recreate the GL content in windib target if SDL_SetVideoMode() is being
Ryan C. Gordon <icculus@icculus.org>
parents: 4139
diff changeset
554 if ((width == curwidth) && (height == curheight)) {
73e7e7f5b5a1 Don't recreate the GL content in windib target if SDL_SetVideoMode() is being
Ryan C. Gordon <icculus@icculus.org>
parents: 4139
diff changeset
555 current->w = width;
73e7e7f5b5a1 Don't recreate the GL content in windib target if SDL_SetVideoMode() is being
Ryan C. Gordon <icculus@icculus.org>
parents: 4139
diff changeset
556 current->h = height;
73e7e7f5b5a1 Don't recreate the GL content in windib target if SDL_SetVideoMode() is being
Ryan C. Gordon <icculus@icculus.org>
parents: 4139
diff changeset
557 return current; /* we're already good to go. */
73e7e7f5b5a1 Don't recreate the GL content in windib target if SDL_SetVideoMode() is being
Ryan C. Gordon <icculus@icculus.org>
parents: 4139
diff changeset
558 }
73e7e7f5b5a1 Don't recreate the GL content in windib target if SDL_SetVideoMode() is being
Ryan C. Gordon <icculus@icculus.org>
parents: 4139
diff changeset
559 }
73e7e7f5b5a1 Don't recreate the GL content in windib target if SDL_SetVideoMode() is being
Ryan C. Gordon <icculus@icculus.org>
parents: 4139
diff changeset
560
4099
822f9624f984 Brian Fisher fixed bug #513
Sam Lantinga <slouken@libsdl.org>
parents: 4096
diff changeset
561 prev_flags = current->flags;
822f9624f984 Brian Fisher fixed bug #513
Sam Lantinga <slouken@libsdl.org>
parents: 4096
diff changeset
562
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
563 /* Clean up any GL context that may be hanging around */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
564 if ( current->flags & SDL_OPENGL ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
565 WIN_GL_ShutDown(this);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
566 }
1291
31331c444ea2 Only save the window position if we're in windowed mode
Sam Lantinga <slouken@libsdl.org>
parents: 1290
diff changeset
567 SDL_resizing = 1;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
568
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
569 /* Recalculate the bitmasks if necessary */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
570 if ( bpp == current->format->BitsPerPixel ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
571 video = current;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
572 } else {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
573 switch (bpp) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
574 case 15:
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
575 case 16:
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
576 if ( DIB_SussScreenDepth() == 15 ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
577 /* 5-5-5 */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
578 Rmask = 0x00007c00;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
579 Gmask = 0x000003e0;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
580 Bmask = 0x0000001f;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
581 } else {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
582 /* 5-6-5 */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
583 Rmask = 0x0000f800;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
584 Gmask = 0x000007e0;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
585 Bmask = 0x0000001f;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
586 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
587 break;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
588 case 24:
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
589 case 32:
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
590 /* GDI defined as 8-8-8 */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
591 Rmask = 0x00ff0000;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
592 Gmask = 0x0000ff00;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
593 Bmask = 0x000000ff;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
594 break;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
595 default:
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
596 Rmask = 0x00000000;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
597 Gmask = 0x00000000;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
598 Bmask = 0x00000000;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
599 break;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
600 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
601 video = SDL_CreateRGBSurface(SDL_SWSURFACE,
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
602 0, 0, bpp, Rmask, Gmask, Bmask, 0);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
603 if ( video == NULL ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
604 SDL_OutOfMemory();
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
605 return(NULL);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
606 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
607 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
608
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
609 /* Fill in part of the video surface */
4085
51486c979189 > Hi Ryan,
Sam Lantinga <slouken@libsdl.org>
parents: 4079
diff changeset
610 prev_w = video->w;
51486c979189 > Hi Ryan,
Sam Lantinga <slouken@libsdl.org>
parents: 4079
diff changeset
611 prev_h = video->h;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
612 video->flags = 0; /* Clear flags */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
613 video->w = width;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
614 video->h = height;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
615 video->pitch = SDL_CalculatePitch(video);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
616
1152
51a8702d8ecd Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents: 1145
diff changeset
617 /* Small fix for WinCE/Win32 - when activating window
51a8702d8ecd Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents: 1145
diff changeset
618 SDL_VideoSurface is equal to zero, so activating code
51a8702d8ecd Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents: 1145
diff changeset
619 is not called properly for fullscreen windows because
51a8702d8ecd Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents: 1145
diff changeset
620 macros WINDIB_FULLSCREEN uses SDL_VideoSurface
51a8702d8ecd Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents: 1145
diff changeset
621 */
51a8702d8ecd Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents: 1145
diff changeset
622 SDL_VideoSurface = video;
51a8702d8ecd Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents: 1145
diff changeset
623
51a8702d8ecd Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents: 1145
diff changeset
624 #if defined(_WIN32_WCE)
51a8702d8ecd Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents: 1145
diff changeset
625 if ( flags & SDL_FULLSCREEN )
514
1080bfc4aa96 *** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents: 453
diff changeset
626 video->flags |= SDL_FULLSCREEN;
1080bfc4aa96 *** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents: 453
diff changeset
627 #endif
1152
51a8702d8ecd Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents: 1145
diff changeset
628
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
629 #ifndef NO_CHANGEDISPLAYSETTINGS
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
630 /* Set fullscreen mode if appropriate */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
631 if ( (flags & SDL_FULLSCREEN) == SDL_FULLSCREEN ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
632 DEVMODE settings;
1295
c3e36ac8a94c Date: Sun, 6 Mar 2005 17:06:20 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1292
diff changeset
633 BOOL changed;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
634
1336
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 1330
diff changeset
635 SDL_memset(&settings, 0, sizeof(DEVMODE));
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
636 settings.dmSize = sizeof(DEVMODE);
1465
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
637
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
638 #ifdef _WIN32_WCE
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
639 // try to rotate screen to fit requested resolution
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
640 if( this->hidden->supportRotation )
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
641 {
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
642 DWORD rotation;
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
643
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
644 // ask current mode
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
645 settings.dmFields = DM_DISPLAYORIENTATION;
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
646 ChangeDisplaySettingsEx(NULL, &settings, NULL, CDS_TEST, NULL);
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
647 rotation = settings.dmDisplayOrientation;
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
648
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
649 if( (width > GetDeviceCaps(GetDC(NULL), HORZRES))
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
650 && (height < GetDeviceCaps(GetDC(NULL), VERTRES)))
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
651 {
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
652 switch( rotation )
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
653 {
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
654 case DMDO_0:
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
655 settings.dmDisplayOrientation = DMDO_90;
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
656 break;
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
657 case DMDO_270:
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
658 settings.dmDisplayOrientation = DMDO_180;
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
659 break;
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
660 }
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
661 if( settings.dmDisplayOrientation != rotation )
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
662 {
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
663 // go to landscape
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
664 this->hidden->origRotation = rotation;
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
665 ChangeDisplaySettingsEx(NULL,&settings,NULL,CDS_RESET,NULL);
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
666 }
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
667 }
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
668 if( (width < GetDeviceCaps(GetDC(NULL), HORZRES))
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
669 && (height > GetDeviceCaps(GetDC(NULL), VERTRES)))
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
670 {
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
671 switch( rotation )
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
672 {
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
673 case DMDO_90:
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
674 settings.dmDisplayOrientation = DMDO_0;
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
675 break;
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
676 case DMDO_180:
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
677 settings.dmDisplayOrientation = DMDO_270;
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
678 break;
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
679 }
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
680 if( settings.dmDisplayOrientation != rotation )
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
681 {
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
682 // go to portrait
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
683 this->hidden->origRotation = rotation;
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
684 ChangeDisplaySettingsEx(NULL,&settings,NULL,CDS_RESET,NULL);
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
685 }
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
686 }
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
687
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
688 }
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
689 #endif
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
690
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
691 #ifndef _WIN32_WCE
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
692 settings.dmBitsPerPel = video->format->BitsPerPixel;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
693 settings.dmPelsWidth = width;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
694 settings.dmPelsHeight = height;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
695 settings.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL;
1330
450721ad5436 It's now possible to build SDL without any C runtime at all on Windows,
Sam Lantinga <slouken@libsdl.org>
parents: 1312
diff changeset
696 if ( width <= (int)SDL_desktop_mode.dmPelsWidth &&
450721ad5436 It's now possible to build SDL without any C runtime at all on Windows,
Sam Lantinga <slouken@libsdl.org>
parents: 1312
diff changeset
697 height <= (int)SDL_desktop_mode.dmPelsHeight ) {
1295
c3e36ac8a94c Date: Sun, 6 Mar 2005 17:06:20 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1292
diff changeset
698 settings.dmDisplayFrequency = SDL_desktop_mode.dmDisplayFrequency;
c3e36ac8a94c Date: Sun, 6 Mar 2005 17:06:20 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1292
diff changeset
699 settings.dmFields |= DM_DISPLAYFREQUENCY;
c3e36ac8a94c Date: Sun, 6 Mar 2005 17:06:20 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1292
diff changeset
700 }
c3e36ac8a94c Date: Sun, 6 Mar 2005 17:06:20 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1292
diff changeset
701 changed = (ChangeDisplaySettings(&settings, CDS_FULLSCREEN) == DISP_CHANGE_SUCCESSFUL);
c3e36ac8a94c Date: Sun, 6 Mar 2005 17:06:20 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1292
diff changeset
702 if ( ! changed && (settings.dmFields & DM_DISPLAYFREQUENCY) ) {
c3e36ac8a94c Date: Sun, 6 Mar 2005 17:06:20 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1292
diff changeset
703 settings.dmFields &= ~DM_DISPLAYFREQUENCY;
c3e36ac8a94c Date: Sun, 6 Mar 2005 17:06:20 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1292
diff changeset
704 changed = (ChangeDisplaySettings(&settings, CDS_FULLSCREEN) == DISP_CHANGE_SUCCESSFUL);
c3e36ac8a94c Date: Sun, 6 Mar 2005 17:06:20 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1292
diff changeset
705 }
1465
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
706 #else
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
707 changed = 1;
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
708 #endif
1295
c3e36ac8a94c Date: Sun, 6 Mar 2005 17:06:20 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1292
diff changeset
709 if ( changed ) {
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
710 video->flags |= SDL_FULLSCREEN;
304
ec53caed9fb2 *** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents: 252
diff changeset
711 SDL_fullscreen_mode = settings;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
712 }
1465
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
713
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
714 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
715 #endif /* !NO_CHANGEDISPLAYSETTINGS */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
716
45
60a6e045808e Fix palette creation in windowed mode at 8 bpp
Sam Lantinga <slouken@lokigames.com>
parents: 36
diff changeset
717 /* Reset the palette and create a new one if necessary */
4079
fda6e33893b7 Always advertise hardware palette, since Windows will remap colors for us.
Sam Lantinga <slouken@libsdl.org>
parents: 4075
diff changeset
718 if ( grab_palette ) {
fda6e33893b7 Always advertise hardware palette, since Windows will remap colors for us.
Sam Lantinga <slouken@libsdl.org>
parents: 4075
diff changeset
719 DIB_ReleaseStaticColors(SDL_Window);
fda6e33893b7 Always advertise hardware palette, since Windows will remap colors for us.
Sam Lantinga <slouken@libsdl.org>
parents: 4075
diff changeset
720 grab_palette = FALSE;
fda6e33893b7 Always advertise hardware palette, since Windows will remap colors for us.
Sam Lantinga <slouken@libsdl.org>
parents: 4075
diff changeset
721 }
45
60a6e045808e Fix palette creation in windowed mode at 8 bpp
Sam Lantinga <slouken@lokigames.com>
parents: 36
diff changeset
722 if ( screen_pal != NULL ) {
60a6e045808e Fix palette creation in windowed mode at 8 bpp
Sam Lantinga <slouken@lokigames.com>
parents: 36
diff changeset
723 /* RJR: March 28, 2000
60a6e045808e Fix palette creation in windowed mode at 8 bpp
Sam Lantinga <slouken@lokigames.com>
parents: 36
diff changeset
724 delete identity palette if switching from a palettized mode */
60a6e045808e Fix palette creation in windowed mode at 8 bpp
Sam Lantinga <slouken@lokigames.com>
parents: 36
diff changeset
725 DeleteObject(screen_pal);
60a6e045808e Fix palette creation in windowed mode at 8 bpp
Sam Lantinga <slouken@lokigames.com>
parents: 36
diff changeset
726 screen_pal = NULL;
60a6e045808e Fix palette creation in windowed mode at 8 bpp
Sam Lantinga <slouken@lokigames.com>
parents: 36
diff changeset
727 }
3992
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
728 if ( screen_logpal != NULL ) {
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
729 SDL_free(screen_logpal);
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
730 screen_logpal = NULL;
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
731 }
4079
fda6e33893b7 Always advertise hardware palette, since Windows will remap colors for us.
Sam Lantinga <slouken@libsdl.org>
parents: 4075
diff changeset
732
45
60a6e045808e Fix palette creation in windowed mode at 8 bpp
Sam Lantinga <slouken@lokigames.com>
parents: 36
diff changeset
733 if ( bpp <= 8 )
60a6e045808e Fix palette creation in windowed mode at 8 bpp
Sam Lantinga <slouken@lokigames.com>
parents: 36
diff changeset
734 {
60a6e045808e Fix palette creation in windowed mode at 8 bpp
Sam Lantinga <slouken@lokigames.com>
parents: 36
diff changeset
735 /* RJR: March 28, 2000
60a6e045808e Fix palette creation in windowed mode at 8 bpp
Sam Lantinga <slouken@lokigames.com>
parents: 36
diff changeset
736 create identity palette switching to a palettized mode */
3992
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
737 DIB_CreatePalette(this, bpp);
45
60a6e045808e Fix palette creation in windowed mode at 8 bpp
Sam Lantinga <slouken@lokigames.com>
parents: 36
diff changeset
738 }
60a6e045808e Fix palette creation in windowed mode at 8 bpp
Sam Lantinga <slouken@lokigames.com>
parents: 36
diff changeset
739
1480
0a2bd6507477 More Win64 updates
Sam Lantinga <slouken@libsdl.org>
parents: 1472
diff changeset
740 style = GetWindowLong(SDL_Window, GWL_STYLE);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
741 style &= ~(resizestyle|WS_MAXIMIZE);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
742 if ( (video->flags & SDL_FULLSCREEN) == SDL_FULLSCREEN ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
743 style &= ~windowstyle;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
744 style |= directstyle;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
745 } else {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
746 #ifndef NO_CHANGEDISPLAYSETTINGS
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
747 if ( (prev_flags & SDL_FULLSCREEN) == SDL_FULLSCREEN ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
748 ChangeDisplaySettings(NULL, 0);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
749 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
750 #endif
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
751 if ( flags & SDL_NOFRAME ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
752 style &= ~windowstyle;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
753 style |= directstyle;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
754 video->flags |= SDL_NOFRAME;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
755 } else {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
756 style &= ~directstyle;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
757 style |= windowstyle;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
758 if ( flags & SDL_RESIZABLE ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
759 style |= resizestyle;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
760 video->flags |= SDL_RESIZABLE;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
761 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
762 }
4162
3b7fc3416601 GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents: 4159
diff changeset
763 #if WS_MAXIMIZE && !defined(_WIN32_WCE)
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
764 if (IsZoomed(SDL_Window)) style |= WS_MAXIMIZE;
36
13ee9f4834ea Windows CE patches contributed by Rainer Loritz
Sam Lantinga <slouken@lokigames.com>
parents: 0
diff changeset
765 #endif
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
766 }
145
29a638dc26db Applied David MacCormack's patch to fix SDL_WINDOWID on Windows,
Sam Lantinga <slouken@libsdl.org>
parents: 112
diff changeset
767
448
323c766f5a46 Fullscreen windows are always topmost under Windows
Sam Lantinga <slouken@libsdl.org>
parents: 442
diff changeset
768 /* DJM: Don't piss of anyone who has setup his own window */
1280
f61f045343d3 Re-query the SDL_WINDOWID each time we initialize the video
Sam Lantinga <slouken@libsdl.org>
parents: 1251
diff changeset
769 if ( !SDL_windowid )
1480
0a2bd6507477 More Win64 updates
Sam Lantinga <slouken@libsdl.org>
parents: 1472
diff changeset
770 SetWindowLong(SDL_Window, GWL_STYLE, style);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
771
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
772 /* Delete the old bitmap if necessary */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
773 if ( screen_bmp != NULL ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
774 DeleteObject(screen_bmp);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
775 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
776 if ( ! (flags & SDL_OPENGL) ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
777 BOOL is16bitmode = (video->format->BytesPerPixel == 2);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
778
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
779 /* Suss out the bitmap info header */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
780 binfo_size = sizeof(*binfo);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
781 if( is16bitmode ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
782 /* 16bit modes, palette area used for rgb bitmasks */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
783 binfo_size += 3*sizeof(DWORD);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
784 } else if ( video->format->palette ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
785 binfo_size += video->format->palette->ncolors *
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
786 sizeof(RGBQUAD);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
787 }
1336
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 1330
diff changeset
788 binfo = (BITMAPINFO *)SDL_malloc(binfo_size);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
789 if ( ! binfo ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
790 if ( video != current ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
791 SDL_FreeSurface(video);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
792 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
793 SDL_OutOfMemory();
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
794 return(NULL);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
795 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
796
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
797 binfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
798 binfo->bmiHeader.biWidth = video->w;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
799 binfo->bmiHeader.biHeight = -video->h; /* -ve for topdown bitmap */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
800 binfo->bmiHeader.biPlanes = 1;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
801 binfo->bmiHeader.biSizeImage = video->h * video->pitch;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
802 binfo->bmiHeader.biXPelsPerMeter = 0;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
803 binfo->bmiHeader.biYPelsPerMeter = 0;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
804 binfo->bmiHeader.biClrUsed = 0;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
805 binfo->bmiHeader.biClrImportant = 0;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
806 binfo->bmiHeader.biBitCount = video->format->BitsPerPixel;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
807
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
808 if ( is16bitmode ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
809 /* BI_BITFIELDS tells CreateDIBSection about the rgb masks in the palette */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
810 binfo->bmiHeader.biCompression = BI_BITFIELDS;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
811 ((Uint32*)binfo->bmiColors)[0] = video->format->Rmask;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
812 ((Uint32*)binfo->bmiColors)[1] = video->format->Gmask;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
813 ((Uint32*)binfo->bmiColors)[2] = video->format->Bmask;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
814 } else {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
815 binfo->bmiHeader.biCompression = BI_RGB; /* BI_BITFIELDS for 565 vs 555 */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
816 if ( video->format->palette ) {
1336
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 1330
diff changeset
817 SDL_memset(binfo->bmiColors, 0,
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
818 video->format->palette->ncolors*sizeof(RGBQUAD));
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
819 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
820 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
821
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
822 /* Create the offscreen bitmap buffer */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
823 hdc = GetDC(SDL_Window);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
824 screen_bmp = CreateDIBSection(hdc, binfo, DIB_RGB_COLORS,
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
825 (void **)(&video->pixels), NULL, 0);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
826 ReleaseDC(SDL_Window, hdc);
1336
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 1330
diff changeset
827 SDL_free(binfo);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
828 if ( screen_bmp == NULL ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
829 if ( video != current ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
830 SDL_FreeSurface(video);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
831 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
832 SDL_SetError("Couldn't create DIB section");
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
833 return(NULL);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
834 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
835 this->UpdateRects = DIB_NormalUpdate;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
836
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
837 /* Set video surface flags */
4079
fda6e33893b7 Always advertise hardware palette, since Windows will remap colors for us.
Sam Lantinga <slouken@libsdl.org>
parents: 4075
diff changeset
838 if ( screen_pal && (flags & (SDL_FULLSCREEN|SDL_HWPALETTE)) ) {
fda6e33893b7 Always advertise hardware palette, since Windows will remap colors for us.
Sam Lantinga <slouken@libsdl.org>
parents: 4075
diff changeset
839 grab_palette = TRUE;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
840 }
4136
8797fa6e2fb2 Fixed crash in SDL_SetGammaRamp()
Sam Lantinga <slouken@libsdl.org>
parents: 4134
diff changeset
841 if ( screen_pal ) {
8797fa6e2fb2 Fixed crash in SDL_SetGammaRamp()
Sam Lantinga <slouken@libsdl.org>
parents: 4134
diff changeset
842 /* BitBlt() maps colors for us */
8797fa6e2fb2 Fixed crash in SDL_SetGammaRamp()
Sam Lantinga <slouken@libsdl.org>
parents: 4134
diff changeset
843 video->flags |= SDL_HWPALETTE;
8797fa6e2fb2 Fixed crash in SDL_SetGammaRamp()
Sam Lantinga <slouken@libsdl.org>
parents: 4134
diff changeset
844 }
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
845 }
1465
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
846 #ifndef _WIN32_WCE
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
847 /* Resize the window */
1290
c4a5a772c5d9 The event code was fine, and calculated the SDL_windowX/Y correctly.
Sam Lantinga <slouken@libsdl.org>
parents: 1288
diff changeset
848 if ( !SDL_windowid && !IsZoomed(SDL_Window) ) {
1465
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
849 #else
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
850 if ( !SDL_windowid ) {
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1433
diff changeset
851 #endif
448
323c766f5a46 Fullscreen windows are always topmost under Windows
Sam Lantinga <slouken@libsdl.org>
parents: 442
diff changeset
852 HWND top;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
853 UINT swp_flags;
1290
c4a5a772c5d9 The event code was fine, and calculated the SDL_windowX/Y correctly.
Sam Lantinga <slouken@libsdl.org>
parents: 1288
diff changeset
854 const char *window = NULL;
c4a5a772c5d9 The event code was fine, and calculated the SDL_windowX/Y correctly.
Sam Lantinga <slouken@libsdl.org>
parents: 1288
diff changeset
855 const char *center = NULL;
833
31fa08b36380 Added support for SDL_VIDEO_WINDOW_POS and SDL_VIDEO_CENTERED on Windows
Sam Lantinga <slouken@libsdl.org>
parents: 766
diff changeset
856
4085
51486c979189 > Hi Ryan,
Sam Lantinga <slouken@libsdl.org>
parents: 4079
diff changeset
857 if ( video->w != prev_w || video->h != prev_h ) {
1336
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 1330
diff changeset
858 window = SDL_getenv("SDL_VIDEO_WINDOW_POS");
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 1330
diff changeset
859 center = SDL_getenv("SDL_VIDEO_CENTERED");
833
31fa08b36380 Added support for SDL_VIDEO_WINDOW_POS and SDL_VIDEO_CENTERED on Windows
Sam Lantinga <slouken@libsdl.org>
parents: 766
diff changeset
860 if ( window ) {
1336
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 1330
diff changeset
861 if ( SDL_sscanf(window, "%d,%d", &x, &y) == 2 ) {
833
31fa08b36380 Added support for SDL_VIDEO_WINDOW_POS and SDL_VIDEO_CENTERED on Windows
Sam Lantinga <slouken@libsdl.org>
parents: 766
diff changeset
862 SDL_windowX = x;
31fa08b36380 Added support for SDL_VIDEO_WINDOW_POS and SDL_VIDEO_CENTERED on Windows
Sam Lantinga <slouken@libsdl.org>
parents: 766
diff changeset
863 SDL_windowY = y;
31fa08b36380 Added support for SDL_VIDEO_WINDOW_POS and SDL_VIDEO_CENTERED on Windows
Sam Lantinga <slouken@libsdl.org>
parents: 766
diff changeset
864 }
1336
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 1330
diff changeset
865 if ( SDL_strcmp(window, "center") == 0 ) {
833
31fa08b36380 Added support for SDL_VIDEO_WINDOW_POS and SDL_VIDEO_CENTERED on Windows
Sam Lantinga <slouken@libsdl.org>
parents: 766
diff changeset
866 center = window;
31fa08b36380 Added support for SDL_VIDEO_WINDOW_POS and SDL_VIDEO_CENTERED on Windows
Sam Lantinga <slouken@libsdl.org>
parents: 766
diff changeset
867 }
31fa08b36380 Added support for SDL_VIDEO_WINDOW_POS and SDL_VIDEO_CENTERED on Windows
Sam Lantinga <slouken@libsdl.org>
parents: 766
diff changeset
868 }
31fa08b36380 Added support for SDL_VIDEO_WINDOW_POS and SDL_VIDEO_CENTERED on Windows
Sam Lantinga <slouken@libsdl.org>
parents: 766
diff changeset
869 }
31fa08b36380 Added support for SDL_VIDEO_WINDOW_POS and SDL_VIDEO_CENTERED on Windows
Sam Lantinga <slouken@libsdl.org>
parents: 766
diff changeset
870 swp_flags = (SWP_NOCOPYBITS | SWP_SHOWWINDOW);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
871
833
31fa08b36380 Added support for SDL_VIDEO_WINDOW_POS and SDL_VIDEO_CENTERED on Windows
Sam Lantinga <slouken@libsdl.org>
parents: 766
diff changeset
872 bounds.left = SDL_windowX;
31fa08b36380 Added support for SDL_VIDEO_WINDOW_POS and SDL_VIDEO_CENTERED on Windows
Sam Lantinga <slouken@libsdl.org>
parents: 766
diff changeset
873 bounds.top = SDL_windowY;
31fa08b36380 Added support for SDL_VIDEO_WINDOW_POS and SDL_VIDEO_CENTERED on Windows
Sam Lantinga <slouken@libsdl.org>
parents: 766
diff changeset
874 bounds.right = SDL_windowX+video->w;
31fa08b36380 Added support for SDL_VIDEO_WINDOW_POS and SDL_VIDEO_CENTERED on Windows
Sam Lantinga <slouken@libsdl.org>
parents: 766
diff changeset
875 bounds.bottom = SDL_windowY+video->h;
3868
b2f59aadec0d Fixed bug #294
Sam Lantinga <slouken@libsdl.org>
parents: 1882
diff changeset
876 #ifndef _WIN32_WCE
1882
339d733e3699 Fixed bug #258
Sam Lantinga <slouken@libsdl.org>
parents: 1881
diff changeset
877 AdjustWindowRectEx(&bounds, GetWindowLong(SDL_Window, GWL_STYLE), (GetMenu(SDL_Window) != NULL), 0);
3868
b2f59aadec0d Fixed bug #294
Sam Lantinga <slouken@libsdl.org>
parents: 1882
diff changeset
878 #else
b2f59aadec0d Fixed bug #294
Sam Lantinga <slouken@libsdl.org>
parents: 1882
diff changeset
879 // The bMenu parameter must be FALSE; menu bars are not supported
b2f59aadec0d Fixed bug #294
Sam Lantinga <slouken@libsdl.org>
parents: 1882
diff changeset
880 AdjustWindowRectEx(&bounds, GetWindowLong(SDL_Window, GWL_STYLE), 0, 0);
b2f59aadec0d Fixed bug #294
Sam Lantinga <slouken@libsdl.org>
parents: 1882
diff changeset
881 #endif
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
882 width = bounds.right-bounds.left;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
883 height = bounds.bottom-bounds.top;
833
31fa08b36380 Added support for SDL_VIDEO_WINDOW_POS and SDL_VIDEO_CENTERED on Windows
Sam Lantinga <slouken@libsdl.org>
parents: 766
diff changeset
884 if ( (flags & SDL_FULLSCREEN) ) {
31fa08b36380 Added support for SDL_VIDEO_WINDOW_POS and SDL_VIDEO_CENTERED on Windows
Sam Lantinga <slouken@libsdl.org>
parents: 766
diff changeset
885 x = (GetSystemMetrics(SM_CXSCREEN)-width)/2;
31fa08b36380 Added support for SDL_VIDEO_WINDOW_POS and SDL_VIDEO_CENTERED on Windows
Sam Lantinga <slouken@libsdl.org>
parents: 766
diff changeset
886 y = (GetSystemMetrics(SM_CYSCREEN)-height)/2;
971
96671ebc50a4 Date: Mon, 25 Oct 2004 17:30:06 +0200
Sam Lantinga <slouken@libsdl.org>
parents: 966
diff changeset
887 } else if ( center ) {
96671ebc50a4 Date: Mon, 25 Oct 2004 17:30:06 +0200
Sam Lantinga <slouken@libsdl.org>
parents: 966
diff changeset
888 x = (GetSystemMetrics(SM_CXSCREEN)-width)/2;
96671ebc50a4 Date: Mon, 25 Oct 2004 17:30:06 +0200
Sam Lantinga <slouken@libsdl.org>
parents: 966
diff changeset
889 y = (GetSystemMetrics(SM_CYSCREEN)-height)/2;
833
31fa08b36380 Added support for SDL_VIDEO_WINDOW_POS and SDL_VIDEO_CENTERED on Windows
Sam Lantinga <slouken@libsdl.org>
parents: 766
diff changeset
890 } else if ( SDL_windowX || SDL_windowY || window ) {
31fa08b36380 Added support for SDL_VIDEO_WINDOW_POS and SDL_VIDEO_CENTERED on Windows
Sam Lantinga <slouken@libsdl.org>
parents: 766
diff changeset
891 x = bounds.left;
31fa08b36380 Added support for SDL_VIDEO_WINDOW_POS and SDL_VIDEO_CENTERED on Windows
Sam Lantinga <slouken@libsdl.org>
parents: 766
diff changeset
892 y = bounds.top;
31fa08b36380 Added support for SDL_VIDEO_WINDOW_POS and SDL_VIDEO_CENTERED on Windows
Sam Lantinga <slouken@libsdl.org>
parents: 766
diff changeset
893 } else {
31fa08b36380 Added support for SDL_VIDEO_WINDOW_POS and SDL_VIDEO_CENTERED on Windows
Sam Lantinga <slouken@libsdl.org>
parents: 766
diff changeset
894 x = y = -1;
31fa08b36380 Added support for SDL_VIDEO_WINDOW_POS and SDL_VIDEO_CENTERED on Windows
Sam Lantinga <slouken@libsdl.org>
parents: 766
diff changeset
895 swp_flags |= SWP_NOMOVE;
31fa08b36380 Added support for SDL_VIDEO_WINDOW_POS and SDL_VIDEO_CENTERED on Windows
Sam Lantinga <slouken@libsdl.org>
parents: 766
diff changeset
896 }
448
323c766f5a46 Fullscreen windows are always topmost under Windows
Sam Lantinga <slouken@libsdl.org>
parents: 442
diff changeset
897 if ( flags & SDL_FULLSCREEN ) {
323c766f5a46 Fullscreen windows are always topmost under Windows
Sam Lantinga <slouken@libsdl.org>
parents: 442
diff changeset
898 top = HWND_TOPMOST;
323c766f5a46 Fullscreen windows are always topmost under Windows
Sam Lantinga <slouken@libsdl.org>
parents: 442
diff changeset
899 } else {
323c766f5a46 Fullscreen windows are always topmost under Windows
Sam Lantinga <slouken@libsdl.org>
parents: 442
diff changeset
900 top = HWND_NOTOPMOST;
323c766f5a46 Fullscreen windows are always topmost under Windows
Sam Lantinga <slouken@libsdl.org>
parents: 442
diff changeset
901 }
323c766f5a46 Fullscreen windows are always topmost under Windows
Sam Lantinga <slouken@libsdl.org>
parents: 442
diff changeset
902 SetWindowPos(SDL_Window, top, x, y, width, height, swp_flags);
1291
31331c444ea2 Only save the window position if we're in windowed mode
Sam Lantinga <slouken@libsdl.org>
parents: 1290
diff changeset
903 if ( !(flags & SDL_FULLSCREEN) ) {
31331c444ea2 Only save the window position if we're in windowed mode
Sam Lantinga <slouken@libsdl.org>
parents: 1290
diff changeset
904 SDL_windowX = SDL_bounds.left;
31331c444ea2 Only save the window position if we're in windowed mode
Sam Lantinga <slouken@libsdl.org>
parents: 1290
diff changeset
905 SDL_windowY = SDL_bounds.top;
31331c444ea2 Only save the window position if we're in windowed mode
Sam Lantinga <slouken@libsdl.org>
parents: 1290
diff changeset
906 }
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
907 SetForegroundWindow(SDL_Window);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
908 }
1291
31331c444ea2 Only save the window position if we're in windowed mode
Sam Lantinga <slouken@libsdl.org>
parents: 1290
diff changeset
909 SDL_resizing = 0;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
910
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
911 /* Set up for OpenGL */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
912 if ( flags & SDL_OPENGL ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
913 if ( WIN_GL_SetupWindow(this) < 0 ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
914 return(NULL);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
915 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
916 video->flags |= SDL_OPENGL;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
917 }
36
13ee9f4834ea Windows CE patches contributed by Rainer Loritz
Sam Lantinga <slouken@lokigames.com>
parents: 0
diff changeset
918
1523
21b1fbb53f4a (patch tweaked a bit)
Sam Lantinga <slouken@libsdl.org>
parents: 1480
diff changeset
919 /* JC 14 Mar 2006
21b1fbb53f4a (patch tweaked a bit)
Sam Lantinga <slouken@libsdl.org>
parents: 1480
diff changeset
920 Flush the message loop or this can cause big problems later
21b1fbb53f4a (patch tweaked a bit)
Sam Lantinga <slouken@libsdl.org>
parents: 1480
diff changeset
921 Especially if the user decides to use dialog boxes or assert()!
21b1fbb53f4a (patch tweaked a bit)
Sam Lantinga <slouken@libsdl.org>
parents: 1480
diff changeset
922 */
21b1fbb53f4a (patch tweaked a bit)
Sam Lantinga <slouken@libsdl.org>
parents: 1480
diff changeset
923 WIN_FlushMessageQueue();
21b1fbb53f4a (patch tweaked a bit)
Sam Lantinga <slouken@libsdl.org>
parents: 1480
diff changeset
924
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
925 /* We're live! */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
926 return(video);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
927 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
928
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
929 /* We don't actually allow hardware surfaces in the DIB driver */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
930 static int DIB_AllocHWSurface(_THIS, SDL_Surface *surface)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
931 {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
932 return(-1);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
933 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
934 static void DIB_FreeHWSurface(_THIS, SDL_Surface *surface)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
935 {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
936 return;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
937 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
938 static int DIB_LockHWSurface(_THIS, SDL_Surface *surface)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
939 {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
940 return(0);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
941 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
942 static void DIB_UnlockHWSurface(_THIS, SDL_Surface *surface)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
943 {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
944 return;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
945 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
946
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
947 static void DIB_NormalUpdate(_THIS, int numrects, SDL_Rect *rects)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
948 {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
949 HDC hdc, mdc;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
950 int i;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
951
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
952 hdc = GetDC(SDL_Window);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
953 if ( screen_pal ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
954 SelectPalette(hdc, screen_pal, FALSE);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
955 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
956 mdc = CreateCompatibleDC(hdc);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
957 SelectObject(mdc, screen_bmp);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
958 for ( i=0; i<numrects; ++i ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
959 BitBlt(hdc, rects[i].x, rects[i].y, rects[i].w, rects[i].h,
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
960 mdc, rects[i].x, rects[i].y, SRCCOPY);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
961 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
962 DeleteDC(mdc);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
963 ReleaseDC(SDL_Window, hdc);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
964 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
965
3992
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
966 static int FindPaletteIndex(LOGPALETTE *pal, BYTE r, BYTE g, BYTE b)
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
967 {
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
968 PALETTEENTRY *entry;
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
969 int i;
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
970 int nentries = pal->palNumEntries;
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
971
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
972 for ( i = 0; i < nentries; ++i ) {
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
973 entry = &pal->palPalEntry[i];
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
974 if ( entry->peRed == r && entry->peGreen == g && entry->peBlue == b ) {
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
975 return i;
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
976 }
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
977 }
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
978 return -1;
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
979 }
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
980
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
981 static BOOL CheckPaletteEntry(LOGPALETTE *pal, int index, BYTE r, BYTE g, BYTE b)
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
982 {
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
983 PALETTEENTRY *entry;
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
984 BOOL moved = 0;
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
985
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
986 entry = &pal->palPalEntry[index];
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
987 if ( entry->peRed != r || entry->peGreen != g || entry->peBlue != b ) {
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
988 int found = FindPaletteIndex(pal, r, g, b);
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
989 if ( found >= 0 ) {
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
990 pal->palPalEntry[found] = *entry;
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
991 }
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
992 entry->peRed = r;
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
993 entry->peGreen = g;
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
994 entry->peBlue = b;
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
995 moved = 1;
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
996 }
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
997 entry->peFlags = 0;
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
998
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
999 return moved;
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1000 }
1251
86d0d01290ea Updated Windows CE/PocketPC support...adds GAPI driver, landscape mode,
Ryan C. Gordon <icculus@icculus.org>
parents: 1152
diff changeset
1001
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1002 int DIB_SetColors(_THIS, int firstcolor, int ncolors, SDL_Color *colors)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1003 {
1292
59c7a470a51e Fixed palette bug on non-WinCE
Sam Lantinga <slouken@libsdl.org>
parents: 1291
diff changeset
1004 #if !defined(_WIN32_WCE) || (_WIN32_WCE >= 400)
59c7a470a51e Fixed palette bug on non-WinCE
Sam Lantinga <slouken@libsdl.org>
parents: 1291
diff changeset
1005 HDC hdc, mdc;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1006 RGBQUAD *pal;
1292
59c7a470a51e Fixed palette bug on non-WinCE
Sam Lantinga <slouken@libsdl.org>
parents: 1291
diff changeset
1007 #else
1251
86d0d01290ea Updated Windows CE/PocketPC support...adds GAPI driver, landscape mode,
Ryan C. Gordon <icculus@icculus.org>
parents: 1152
diff changeset
1008 HDC hdc;
36
13ee9f4834ea Windows CE patches contributed by Rainer Loritz
Sam Lantinga <slouken@lokigames.com>
parents: 0
diff changeset
1009 #endif
1292
59c7a470a51e Fixed palette bug on non-WinCE
Sam Lantinga <slouken@libsdl.org>
parents: 1291
diff changeset
1010 int i;
3992
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1011 int moved_entries = 0;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1012
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1013 /* Update the display palette */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1014 hdc = GetDC(SDL_Window);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1015 if ( screen_pal ) {
3992
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1016 PALETTEENTRY *entry;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1017
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1018 for ( i=0; i<ncolors; ++i ) {
3992
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1019 entry = &screen_logpal->palPalEntry[firstcolor+i];
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1020 entry->peRed = colors[i].r;
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1021 entry->peGreen = colors[i].g;
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1022 entry->peBlue = colors[i].b;
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1023 entry->peFlags = PC_NOCOLLAPSE;
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1024 }
4162
3b7fc3416601 GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents: 4159
diff changeset
1025 #if defined(SYSPAL_NOSTATIC) && !defined(_WIN32_WCE)
3992
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1026 /* Check to make sure black and white are in position */
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1027 if ( GetSystemPaletteUse(hdc) != SYSPAL_NOSTATIC256 ) {
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1028 moved_entries += CheckPaletteEntry(screen_logpal, 0, 0x00, 0x00, 0x00);
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1029 moved_entries += CheckPaletteEntry(screen_logpal, screen_logpal->palNumEntries-1, 0xff, 0xff, 0xff);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1030 }
3992
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1031 /* FIXME:
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1032 If we don't have full access to the palette, what we
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1033 really want to do is find the 236 most diverse colors
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1034 in the desired palette, set those entries (10-245) and
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1035 then map everything into the new system palette.
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1036 */
4075
0207ca19fd8f Fixed building on Windows CE
Sam Lantinga <slouken@libsdl.org>
parents: 3992
diff changeset
1037 #endif
3992
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1038
4075
0207ca19fd8f Fixed building on Windows CE
Sam Lantinga <slouken@libsdl.org>
parents: 3992
diff changeset
1039 #ifndef _WIN32_WCE
3992
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1040 /* Copy the entries into the system palette */
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1041 UnrealizeObject(screen_pal);
4075
0207ca19fd8f Fixed building on Windows CE
Sam Lantinga <slouken@libsdl.org>
parents: 3992
diff changeset
1042 #endif
3992
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1043 SetPaletteEntries(screen_pal, 0, screen_logpal->palNumEntries, screen_logpal->palPalEntry);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1044 SelectPalette(hdc, screen_pal, FALSE);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1045 RealizePalette(hdc);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1046 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1047
1292
59c7a470a51e Fixed palette bug on non-WinCE
Sam Lantinga <slouken@libsdl.org>
parents: 1291
diff changeset
1048 #if !defined(_WIN32_WCE) || (_WIN32_WCE >= 400)
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1049 /* Copy palette colors into DIB palette */
1330
450721ad5436 It's now possible to build SDL without any C runtime at all on Windows,
Sam Lantinga <slouken@libsdl.org>
parents: 1312
diff changeset
1050 pal = SDL_stack_alloc(RGBQUAD, ncolors);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1051 for ( i=0; i<ncolors; ++i ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1052 pal[i].rgbRed = colors[i].r;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1053 pal[i].rgbGreen = colors[i].g;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1054 pal[i].rgbBlue = colors[i].b;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1055 pal[i].rgbReserved = 0;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1056 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1057
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1058 /* Set the DIB palette and update the display */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1059 mdc = CreateCompatibleDC(hdc);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1060 SelectObject(mdc, screen_bmp);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1061 SetDIBColorTable(mdc, firstcolor, ncolors, pal);
4079
fda6e33893b7 Always advertise hardware palette, since Windows will remap colors for us.
Sam Lantinga <slouken@libsdl.org>
parents: 4075
diff changeset
1062 if ( moved_entries || !grab_palette ) {
3992
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1063 BitBlt(hdc, 0, 0, this->screen->w, this->screen->h,
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1064 mdc, 0, 0, SRCCOPY);
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1065 }
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1066 DeleteDC(mdc);
1330
450721ad5436 It's now possible to build SDL without any C runtime at all on Windows,
Sam Lantinga <slouken@libsdl.org>
parents: 1312
diff changeset
1067 SDL_stack_free(pal);
36
13ee9f4834ea Windows CE patches contributed by Rainer Loritz
Sam Lantinga <slouken@lokigames.com>
parents: 0
diff changeset
1068 #endif
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1069 ReleaseDC(SDL_Window, hdc);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1070 return(1);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1071 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1072
1251
86d0d01290ea Updated Windows CE/PocketPC support...adds GAPI driver, landscape mode,
Ryan C. Gordon <icculus@icculus.org>
parents: 1152
diff changeset
1073
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1074 static void DIB_CheckGamma(_THIS)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1075 {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1076 #ifndef NO_GAMMA_SUPPORT
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1077 HDC hdc;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1078 WORD ramp[3*256];
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1079
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1080 /* If we fail to get gamma, disable gamma control */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1081 hdc = GetDC(SDL_Window);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1082 if ( ! GetDeviceGammaRamp(hdc, ramp) ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1083 this->GetGammaRamp = NULL;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1084 this->SetGammaRamp = NULL;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1085 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1086 ReleaseDC(SDL_Window, hdc);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1087 #endif /* !NO_GAMMA_SUPPORT */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1088 }
338
518ffd98a8f6 Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents: 304
diff changeset
1089 void DIB_SwapGamma(_THIS)
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1090 {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1091 #ifndef NO_GAMMA_SUPPORT
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1092 HDC hdc;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1093
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1094 if ( gamma_saved ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1095 hdc = GetDC(SDL_Window);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1096 if ( SDL_GetAppState() & SDL_APPINPUTFOCUS ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1097 /* About to leave active state, restore gamma */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1098 SetDeviceGammaRamp(hdc, gamma_saved);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1099 } else {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1100 /* About to enter active state, set game gamma */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1101 GetDeviceGammaRamp(hdc, gamma_saved);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1102 SetDeviceGammaRamp(hdc, this->gamma);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1103 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1104 ReleaseDC(SDL_Window, hdc);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1105 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1106 #endif /* !NO_GAMMA_SUPPORT */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1107 }
338
518ffd98a8f6 Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents: 304
diff changeset
1108 void DIB_QuitGamma(_THIS)
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1109 {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1110 #ifndef NO_GAMMA_SUPPORT
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1111 if ( gamma_saved ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1112 /* Restore the original gamma if necessary */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1113 if ( SDL_GetAppState() & SDL_APPINPUTFOCUS ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1114 HDC hdc;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1115
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1116 hdc = GetDC(SDL_Window);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1117 SetDeviceGammaRamp(hdc, gamma_saved);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1118 ReleaseDC(SDL_Window, hdc);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1119 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1120
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1121 /* Free the saved gamma memory */
1336
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 1330
diff changeset
1122 SDL_free(gamma_saved);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1123 gamma_saved = 0;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1124 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1125 #endif /* !NO_GAMMA_SUPPORT */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1126 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1127
338
518ffd98a8f6 Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents: 304
diff changeset
1128 int DIB_SetGammaRamp(_THIS, Uint16 *ramp)
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1129 {
338
518ffd98a8f6 Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents: 304
diff changeset
1130 #ifdef NO_GAMMA_SUPPORT
518ffd98a8f6 Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents: 304
diff changeset
1131 SDL_SetError("SDL compiled without gamma ramp support");
518ffd98a8f6 Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents: 304
diff changeset
1132 return -1;
518ffd98a8f6 Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents: 304
diff changeset
1133 #else
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1134 HDC hdc;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1135 BOOL succeeded;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1136
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1137 /* Set the ramp for the display */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1138 if ( ! gamma_saved ) {
1336
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 1330
diff changeset
1139 gamma_saved = (WORD *)SDL_malloc(3*256*sizeof(*gamma_saved));
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1140 if ( ! gamma_saved ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1141 SDL_OutOfMemory();
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1142 return -1;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1143 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1144 hdc = GetDC(SDL_Window);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1145 GetDeviceGammaRamp(hdc, gamma_saved);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1146 ReleaseDC(SDL_Window, hdc);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1147 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1148 if ( SDL_GetAppState() & SDL_APPINPUTFOCUS ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1149 hdc = GetDC(SDL_Window);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1150 succeeded = SetDeviceGammaRamp(hdc, ramp);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1151 ReleaseDC(SDL_Window, hdc);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1152 } else {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1153 succeeded = TRUE;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1154 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1155 return succeeded ? 0 : -1;
338
518ffd98a8f6 Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents: 304
diff changeset
1156 #endif /* !NO_GAMMA_SUPPORT */
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1157 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1158
338
518ffd98a8f6 Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents: 304
diff changeset
1159 int DIB_GetGammaRamp(_THIS, Uint16 *ramp)
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1160 {
338
518ffd98a8f6 Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents: 304
diff changeset
1161 #ifdef NO_GAMMA_SUPPORT
518ffd98a8f6 Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents: 304
diff changeset
1162 SDL_SetError("SDL compiled without gamma ramp support");
518ffd98a8f6 Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents: 304
diff changeset
1163 return -1;
518ffd98a8f6 Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents: 304
diff changeset
1164 #else
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1165 HDC hdc;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1166 BOOL succeeded;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1167
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1168 /* Get the ramp from the display */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1169 hdc = GetDC(SDL_Window);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1170 succeeded = GetDeviceGammaRamp(hdc, ramp);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1171 ReleaseDC(SDL_Window, hdc);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1172 return succeeded ? 0 : -1;
338
518ffd98a8f6 Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents: 304
diff changeset
1173 #endif /* !NO_GAMMA_SUPPORT */
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1174 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1175
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1176 void DIB_VideoQuit(_THIS)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1177 {
1881
61f86f36afb9 Fixed bug #255
Sam Lantinga <slouken@libsdl.org>
parents: 1771
diff changeset
1178 int i, j;
61f86f36afb9 Fixed bug #255
Sam Lantinga <slouken@libsdl.org>
parents: 1771
diff changeset
1179
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1180 /* Destroy the window and everything associated with it */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1181 if ( SDL_Window ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1182 /* Delete the screen bitmap (also frees screen->pixels) */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1183 if ( this->screen ) {
4079
fda6e33893b7 Always advertise hardware palette, since Windows will remap colors for us.
Sam Lantinga <slouken@libsdl.org>
parents: 4075
diff changeset
1184 if ( grab_palette ) {
3992
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1185 DIB_ReleaseStaticColors(SDL_Window);
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1186 }
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1187 #ifndef NO_CHANGEDISPLAYSETTINGS
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1188 if ( this->screen->flags & SDL_FULLSCREEN ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1189 ChangeDisplaySettings(NULL, 0);
376
a5f60a847a89 *** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents: 374
diff changeset
1190 ShowWindow(SDL_Window, SW_HIDE);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1191 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1192 #endif
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1193 if ( this->screen->flags & SDL_OPENGL ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1194 WIN_GL_ShutDown(this);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1195 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1196 this->screen->pixels = NULL;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1197 }
3992
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1198 if ( screen_pal != NULL ) {
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1199 DeleteObject(screen_pal);
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1200 screen_pal = NULL;
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1201 }
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1202 if ( screen_logpal != NULL ) {
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1203 SDL_free(screen_logpal);
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1204 screen_logpal = NULL;
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1205 }
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1206 if ( screen_bmp ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1207 DeleteObject(screen_bmp);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1208 screen_bmp = NULL;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1209 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1210 if ( screen_icn ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1211 DestroyIcon(screen_icn);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1212 screen_icn = NULL;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1213 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1214 DIB_QuitGamma(this);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1215 DIB_DestroyWindow(this);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1216
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1217 SDL_Window = NULL;
1152
51a8702d8ecd Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents: 1145
diff changeset
1218
51a8702d8ecd Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents: 1145
diff changeset
1219 #if defined(_WIN32_WCE)
51a8702d8ecd Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents: 1145
diff changeset
1220
51a8702d8ecd Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents: 1145
diff changeset
1221 // Unload wince aygshell library to prevent leak
51a8702d8ecd Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents: 1145
diff changeset
1222 if( aygshell )
51a8702d8ecd Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents: 1145
diff changeset
1223 {
51a8702d8ecd Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents: 1145
diff changeset
1224 FreeLibrary(aygshell);
51a8702d8ecd Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents: 1145
diff changeset
1225 aygshell = NULL;
51a8702d8ecd Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents: 1145
diff changeset
1226 }
51a8702d8ecd Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents: 1145
diff changeset
1227 #endif
1881
61f86f36afb9 Fixed bug #255
Sam Lantinga <slouken@libsdl.org>
parents: 1771
diff changeset
1228 }
1152
51a8702d8ecd Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents: 1145
diff changeset
1229
1881
61f86f36afb9 Fixed bug #255
Sam Lantinga <slouken@libsdl.org>
parents: 1771
diff changeset
1230 for ( i=0; i < SDL_arraysize(SDL_modelist); ++i ) {
61f86f36afb9 Fixed bug #255
Sam Lantinga <slouken@libsdl.org>
parents: 1771
diff changeset
1231 if ( !SDL_modelist[i] ) {
61f86f36afb9 Fixed bug #255
Sam Lantinga <slouken@libsdl.org>
parents: 1771
diff changeset
1232 continue;
61f86f36afb9 Fixed bug #255
Sam Lantinga <slouken@libsdl.org>
parents: 1771
diff changeset
1233 }
61f86f36afb9 Fixed bug #255
Sam Lantinga <slouken@libsdl.org>
parents: 1771
diff changeset
1234 for ( j=0; SDL_modelist[i][j]; ++j ) {
61f86f36afb9 Fixed bug #255
Sam Lantinga <slouken@libsdl.org>
parents: 1771
diff changeset
1235 SDL_free(SDL_modelist[i][j]);
61f86f36afb9 Fixed bug #255
Sam Lantinga <slouken@libsdl.org>
parents: 1771
diff changeset
1236 }
61f86f36afb9 Fixed bug #255
Sam Lantinga <slouken@libsdl.org>
parents: 1771
diff changeset
1237 SDL_free(SDL_modelist[i]);
61f86f36afb9 Fixed bug #255
Sam Lantinga <slouken@libsdl.org>
parents: 1771
diff changeset
1238 SDL_modelist[i] = NULL;
61f86f36afb9 Fixed bug #255
Sam Lantinga <slouken@libsdl.org>
parents: 1771
diff changeset
1239 SDL_nummodes[i] = 0;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1240 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1241 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1242
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1243 /* Exported for the windows message loop only */
3992
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1244 static void DIB_GrabStaticColors(HWND window)
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1245 {
4162
3b7fc3416601 GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents: 4159
diff changeset
1246 #if defined(SYSPAL_NOSTATIC) && !defined(_WIN32_WCE)
3992
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1247 HDC hdc;
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1248
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1249 hdc = GetDC(window);
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1250 SetSystemPaletteUse(hdc, SYSPAL_NOSTATIC256);
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1251 if ( GetSystemPaletteUse(hdc) != SYSPAL_NOSTATIC256 ) {
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1252 SetSystemPaletteUse(hdc, SYSPAL_NOSTATIC);
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1253 }
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1254 ReleaseDC(window, hdc);
4075
0207ca19fd8f Fixed building on Windows CE
Sam Lantinga <slouken@libsdl.org>
parents: 3992
diff changeset
1255 #endif
3992
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1256 }
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1257 static void DIB_ReleaseStaticColors(HWND window)
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1258 {
4162
3b7fc3416601 GAPI fixes from Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents: 4159
diff changeset
1259 #if defined(SYSPAL_NOSTATIC) && !defined(_WIN32_WCE)
3992
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1260 HDC hdc;
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1261
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1262 hdc = GetDC(window);
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1263 SetSystemPaletteUse(hdc, SYSPAL_STATIC);
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1264 ReleaseDC(window, hdc);
4075
0207ca19fd8f Fixed building on Windows CE
Sam Lantinga <slouken@libsdl.org>
parents: 3992
diff changeset
1265 #endif
3992
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1266 }
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1267 static void DIB_Activate(_THIS, BOOL active, BOOL minimized)
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1268 {
4079
fda6e33893b7 Always advertise hardware palette, since Windows will remap colors for us.
Sam Lantinga <slouken@libsdl.org>
parents: 4075
diff changeset
1269 if ( grab_palette ) {
3992
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1270 if ( !active ) {
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1271 DIB_ReleaseStaticColors(SDL_Window);
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1272 DIB_RealizePalette(this);
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1273 } else if ( !minimized ) {
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1274 DIB_GrabStaticColors(SDL_Window);
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1275 DIB_RealizePalette(this);
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1276 }
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1277 }
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1278 }
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1279 static void DIB_RealizePalette(_THIS)
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1280 {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1281 if ( screen_pal != NULL ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1282 HDC hdc;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1283
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1284 hdc = GetDC(SDL_Window);
4075
0207ca19fd8f Fixed building on Windows CE
Sam Lantinga <slouken@libsdl.org>
parents: 3992
diff changeset
1285 #ifndef _WIN32_WCE
3992
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1286 UnrealizeObject(screen_pal);
4075
0207ca19fd8f Fixed building on Windows CE
Sam Lantinga <slouken@libsdl.org>
parents: 3992
diff changeset
1287 #endif
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1288 SelectPalette(hdc, screen_pal, FALSE);
3992
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1289 if ( RealizePalette(hdc) ) {
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1290 InvalidateRect(SDL_Window, NULL, FALSE);
3992
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1291 }
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1292 ReleaseDC(SDL_Window, hdc);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1293 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1294 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1295 static void DIB_PaletteChanged(_THIS, HWND window)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1296 {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1297 if ( window != SDL_Window ) {
3992
c75679dce60c Fixed bug #335
Sam Lantinga <slouken@libsdl.org>
parents: 3981
diff changeset
1298 DIB_RealizePalette(this);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1299 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1300 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1301
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1302 /* Exported for the windows message loop only */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1303 static void DIB_WinPAINT(_THIS, HDC hdc)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1304 {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1305 HDC mdc;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1306
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1307 if ( screen_pal ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1308 SelectPalette(hdc, screen_pal, FALSE);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1309 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1310 mdc = CreateCompatibleDC(hdc);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1311 SelectObject(mdc, screen_bmp);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1312 BitBlt(hdc, 0, 0, SDL_VideoSurface->w, SDL_VideoSurface->h,
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1313 mdc, 0, 0, SRCCOPY);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1314 DeleteDC(mdc);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1315 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1316
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1317 /* Stub in case DirectX isn't available */
1361
19418e4422cb New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents: 1358
diff changeset
1318 #if !SDL_AUDIO_DRIVER_DSOUND
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1319 void DX5_SoundFocus(HWND hwnd)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1320 {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1321 return;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1322 }
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
1323 #endif