Mercurial > sdl-ios-xcode
annotate src/video/windib/SDL_dibvideo.c @ 4179:d7294b7c732d SDL-1.2
Date: Fri, 24 Apr 2009 17:47:07 +0200
From: Stefan Klug
Subject: Re: [SDL] SVN doesn't compile for wince
the patch applied for Revision 4483 was seemingly not checked for side
effects.
It broke the WinCE build.
The attached patch should fix these problems. I'm not using SDL 1.2 on
CE anymore, and therefore haven't tested the patch... but at least it
compiles ;-)
Regards Stefan
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Thu, 07 May 2009 12:40:16 +0000 |
parents | 3b7fc3416601 |
children | b40d6e58a5e5 |
rev | line source |
---|---|
0 | 1 /* |
2 SDL - Simple DirectMedia Layer | |
4159 | 3 Copyright (C) 1997-2009 Sam Lantinga |
0 | 4 |
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 | 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 | 9 |
10 This library is distributed in the hope that it will be useful, | |
11 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
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 | 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 | 18 |
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 | 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 | 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 | 27 /* Not yet in the mingw32 cross-compile headers */ |
28 #ifndef CDS_FULLSCREEN | |
29 #define CDS_FULLSCREEN 4 | |
30 #endif | |
31 | |
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 | 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 | 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 | 43 |
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 | 65 #define NO_GETDIBITS |
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 | 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 | 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 | 91 /* Initialization/Query functions */ |
92 static int DIB_VideoInit(_THIS, SDL_PixelFormat *vformat); | |
93 static SDL_Rect **DIB_ListModes(_THIS, SDL_PixelFormat *format, Uint32 flags); | |
94 SDL_Surface *DIB_SetVideoMode(_THIS, SDL_Surface *current, int width, int height, int bpp, Uint32 flags); | |
95 static int DIB_SetColors(_THIS, int firstcolor, int ncolors, | |
96 SDL_Color *colors); | |
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 | 102 static void DIB_VideoQuit(_THIS); |
103 | |
104 /* Hardware surface functions */ | |
105 static int DIB_AllocHWSurface(_THIS, SDL_Surface *surface); | |
106 static int DIB_LockHWSurface(_THIS, SDL_Surface *surface); | |
107 static void DIB_UnlockHWSurface(_THIS, SDL_Surface *surface); | |
108 static void DIB_FreeHWSurface(_THIS, SDL_Surface *surface); | |
109 | |
110 /* Windows message handling functions */ | |
3992 | 111 static void DIB_GrabStaticColors(HWND window); |
112 static void DIB_ReleaseStaticColors(HWND window); | |
113 static void DIB_Activate(_THIS, BOOL active, BOOL minimized); | |
0 | 114 static void DIB_RealizePalette(_THIS); |
115 static void DIB_PaletteChanged(_THIS, HWND window); | |
116 static void DIB_WinPAINT(_THIS, HDC hdc); | |
117 | |
118 /* helper fn */ | |
119 static int DIB_SussScreenDepth(); | |
120 | |
121 /* DIB driver bootstrap functions */ | |
122 | |
123 static int DIB_Available(void) | |
124 { | |
125 return(1); | |
126 } | |
127 | |
128 static void DIB_DeleteDevice(SDL_VideoDevice *device) | |
129 { | |
130 if ( device ) { | |
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 | 136 } |
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 | 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 | 141 } |
142 } | |
143 | |
144 static SDL_VideoDevice *DIB_CreateDevice(int devindex) | |
145 { | |
146 SDL_VideoDevice *device; | |
147 | |
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 | 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 | 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 | 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 | 166 } |
167 if ( (device == NULL) || (device->hidden == NULL) || | |
168 (device->gl_data == NULL) ) { | |
169 SDL_OutOfMemory(); | |
170 DIB_DeleteDevice(device); | |
171 return(NULL); | |
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 | 175 |
176 /* Set the function pointers */ | |
177 device->VideoInit = DIB_VideoInit; | |
178 device->ListModes = DIB_ListModes; | |
179 device->SetVideoMode = DIB_SetVideoMode; | |
180 device->UpdateMouse = WIN_UpdateMouse; | |
181 device->SetColors = DIB_SetColors; | |
182 device->UpdateRects = NULL; | |
183 device->VideoQuit = DIB_VideoQuit; | |
184 device->AllocHWSurface = DIB_AllocHWSurface; | |
185 device->CheckHWBlit = NULL; | |
186 device->FillHWRect = NULL; | |
187 device->SetHWColorKey = NULL; | |
188 device->SetHWAlpha = NULL; | |
189 device->LockHWSurface = DIB_LockHWSurface; | |
190 device->UnlockHWSurface = DIB_UnlockHWSurface; | |
191 device->FlipHWSurface = NULL; | |
192 device->FreeHWSurface = DIB_FreeHWSurface; | |
193 device->SetGammaRamp = DIB_SetGammaRamp; | |
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 | 201 #endif |
202 device->SetCaption = WIN_SetWMCaption; | |
203 device->SetIcon = WIN_SetWMIcon; | |
204 device->IconifyWindow = WIN_IconifyWindow; | |
205 device->GrabInput = WIN_GrabInput; | |
206 device->GetWMInfo = WIN_GetWMInfo; | |
207 device->FreeWMCursor = WIN_FreeWMCursor; | |
208 device->CreateWMCursor = WIN_CreateWMCursor; | |
209 device->ShowWMCursor = WIN_ShowWMCursor; | |
210 device->WarpWMCursor = WIN_WarpWMCursor; | |
211 device->CheckMouseMode = WIN_CheckMouseMode; | |
212 device->InitOSKeymap = DIB_InitOSKeymap; | |
213 device->PumpEvents = DIB_PumpEvents; | |
214 | |
215 /* Set up the windows message handling functions */ | |
3992 | 216 WIN_Activate = DIB_Activate; |
0 | 217 WIN_RealizePalette = DIB_RealizePalette; |
218 WIN_PaletteChanged = DIB_PaletteChanged; | |
219 WIN_WinPAINT = DIB_WinPAINT; | |
220 HandleMessage = DIB_HandleMessage; | |
221 | |
222 device->free = DIB_DeleteDevice; | |
223 | |
224 /* We're finally ready */ | |
225 return device; | |
226 } | |
227 | |
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 | 230 DIB_Available, DIB_CreateDevice |
231 }; | |
232 | |
233 static int cmpmodes(const void *va, const void *vb) | |
234 { | |
235 SDL_Rect *a = *(SDL_Rect **)va; | |
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 | 241 } |
242 | |
243 static int DIB_AddMode(_THIS, int bpp, int w, int h) | |
244 { | |
245 SDL_Rect *mode; | |
246 int i, index; | |
247 int next_mode; | |
248 | |
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 | 251 return(0); |
252 } | |
253 index = ((bpp+7)/8)-1; | |
254 for ( i=0; i<SDL_nummodes[index]; ++i ) { | |
255 mode = SDL_modelist[index][i]; | |
256 if ( (mode->w == w) && (mode->h == h) ) { | |
257 return(0); | |
258 } | |
259 } | |
260 | |
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 | 263 if ( mode == NULL ) { |
264 SDL_OutOfMemory(); | |
265 return(-1); | |
266 } | |
267 mode->x = 0; | |
268 mode->y = 0; | |
269 mode->w = w; | |
270 mode->h = h; | |
271 | |
272 /* Allocate the new list of modes, and fill in the new mode */ | |
273 next_mode = SDL_nummodes[index]; | |
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 | 276 if ( SDL_modelist[index] == NULL ) { |
277 SDL_OutOfMemory(); | |
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 | 280 return(-1); |
281 } | |
282 SDL_modelist[index][next_mode] = mode; | |
283 SDL_modelist[index][next_mode+1] = NULL; | |
284 SDL_nummodes[index]++; | |
285 | |
286 return(0); | |
287 } | |
288 | |
3992 | 289 static void DIB_CreatePalette(_THIS, int bpp) |
0 | 290 { |
291 /* RJR: March 28, 2000 | |
292 moved palette creation here from "DIB_VideoInit" */ | |
293 | |
3992 | 294 LOGPALETTE *palette; |
295 HDC hdc; | |
296 int ncolors; | |
0 | 297 |
3992 | 298 ncolors = (1 << bpp); |
299 palette = (LOGPALETTE *)SDL_malloc(sizeof(*palette)+ | |
300 ncolors*sizeof(PALETTEENTRY)); | |
301 palette->palVersion = 0x300; | |
302 palette->palNumEntries = ncolors; | |
303 hdc = GetDC(SDL_Window); | |
304 GetSystemPaletteEntries(hdc, 0, ncolors, palette->palPalEntry); | |
305 ReleaseDC(SDL_Window, hdc); | |
306 screen_pal = CreatePalette(palette); | |
307 screen_logpal = palette; | |
0 | 308 } |
309 | |
310 int DIB_VideoInit(_THIS, SDL_PixelFormat *vformat) | |
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 | 313 #ifndef NO_CHANGEDISPLAYSETTINGS |
314 int i; | |
315 DEVMODE settings; | |
316 #endif | |
317 | |
318 /* Create the window */ | |
319 if ( DIB_CreateWindow(this) < 0 ) { | |
320 return(-1); | |
321 } | |
1523 | 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 | 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 | 326 |
327 /* Determine the screen depth */ | |
328 vformat->BitsPerPixel = DIB_SussScreenDepth(); | |
329 switch (vformat->BitsPerPixel) { | |
330 case 15: | |
331 vformat->Rmask = 0x00007c00; | |
332 vformat->Gmask = 0x000003e0; | |
333 vformat->Bmask = 0x0000001f; | |
334 vformat->BitsPerPixel = 16; | |
335 break; | |
336 case 16: | |
337 vformat->Rmask = 0x0000f800; | |
338 vformat->Gmask = 0x000007e0; | |
339 vformat->Bmask = 0x0000001f; | |
340 break; | |
341 case 24: | |
342 case 32: | |
343 /* GDI defined as 8-8-8 */ | |
344 vformat->Rmask = 0x00ff0000; | |
345 vformat->Gmask = 0x0000ff00; | |
346 vformat->Bmask = 0x000000ff; | |
347 break; | |
348 default: | |
349 break; | |
350 } | |
351 | |
352 /* See if gamma is supported on this screen */ | |
353 DIB_CheckGamma(this); | |
354 | |
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 | 370 /* Query for the list of available video modes */ |
371 for ( i=0; EnumDisplaySettings(NULL, i, &settings); ++i ) { | |
372 DIB_AddMode(this, settings.dmBitsPerPel, | |
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 | 379 } |
380 /* Sort the mode lists */ | |
381 for ( i=0; i<NUM_MODELISTS; ++i ) { | |
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 | 384 } |
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 | 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 | 397 #endif /* !NO_CHANGEDISPLAYSETTINGS */ |
398 | |
399 /* Grab an identity palette if we are in a palettized mode */ | |
400 if ( vformat->BitsPerPixel <= 8 ) { | |
401 /* RJR: March 28, 2000 | |
402 moved palette creation to "DIB_CreatePalette" */ | |
3992 | 403 DIB_CreatePalette(this, vformat->BitsPerPixel); |
0 | 404 } |
405 | |
406 /* Fill in some window manager capabilities */ | |
407 this->info.wm_available = 1; | |
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 | 425 /* We're done! */ |
426 return(0); | |
427 } | |
428 | |
429 /* We support any format at any dimension */ | |
430 SDL_Rect **DIB_ListModes(_THIS, SDL_PixelFormat *format, Uint32 flags) | |
431 { | |
432 if ( (flags & SDL_FULLSCREEN) == SDL_FULLSCREEN ) { | |
433 return(SDL_modelist[((format->BitsPerPixel+7)/8)-1]); | |
434 } else { | |
435 return((SDL_Rect **)-1); | |
436 } | |
437 } | |
438 | |
439 | |
440 /* | |
441 Helper fn to work out which screen depth windows is currently using. | |
442 15 bit mode is considered 555 format, 16 bit is 565. | |
443 returns 0 for unknown mode. | |
444 (Derived from code in sept 1999 Windows Developer Journal | |
445 http://www.wdj.com/code/archive.html) | |
446 */ | |
447 static int DIB_SussScreenDepth() | |
448 { | |
449 #ifdef NO_GETDIBITS | |
450 int depth; | |
451 HDC hdc; | |
452 | |
453 hdc = GetDC(SDL_Window); | |
454 depth = GetDeviceCaps(hdc, PLANES) * GetDeviceCaps(hdc, BITSPIXEL); | |
455 ReleaseDC(SDL_Window, hdc); | |
456 return(depth); | |
457 #else | |
1881 | 458 int depth; |
0 | 459 int dib_size; |
460 LPBITMAPINFOHEADER dib_hdr; | |
461 HDC hdc; | |
462 HBITMAP hbm; | |
463 | |
464 /* Allocate enough space for a DIB header plus palette (for | |
465 * 8-bit modes) or bitfields (for 16- and 32-bit modes) | |
466 */ | |
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 | 470 dib_hdr->biSize = sizeof(BITMAPINFOHEADER); |
471 | |
472 /* Get a device-dependent bitmap that's compatible with the | |
473 screen. | |
474 */ | |
475 hdc = GetDC(NULL); | |
476 hbm = CreateCompatibleBitmap( hdc, 1, 1 ); | |
477 | |
478 /* Convert the DDB to a DIB. We need to call GetDIBits twice: | |
479 * the first call just fills in the BITMAPINFOHEADER; the | |
480 * second fills in the bitfields or palette. | |
481 */ | |
482 GetDIBits(hdc, hbm, 0, 1, NULL, (LPBITMAPINFO) dib_hdr, DIB_RGB_COLORS); | |
483 GetDIBits(hdc, hbm, 0, 1, NULL, (LPBITMAPINFO) dib_hdr, DIB_RGB_COLORS); | |
484 DeleteObject(hbm); | |
485 ReleaseDC(NULL, hdc); | |
486 | |
1881 | 487 depth = 0; |
0 | 488 switch( dib_hdr->biBitCount ) |
489 { | |
1881 | 490 case 8: depth = 8; break; |
491 case 24: depth = 24; break; | |
492 case 32: depth = 32; break; | |
0 | 493 case 16: |
494 if( dib_hdr->biCompression == BI_BITFIELDS ) { | |
495 /* check the red mask */ | |
496 switch( ((DWORD*)((char*)dib_hdr + dib_hdr->biSize))[0] ) { | |
1881 | 497 case 0xf800: depth = 16; break; /* 565 */ |
498 case 0x7c00: depth = 15; break; /* 555 */ | |
0 | 499 } |
500 } | |
501 } | |
1881 | 502 SDL_free(dib_hdr); |
503 return depth; | |
0 | 504 #endif /* NO_GETDIBITS */ |
505 } | |
506 | |
507 | |
508 /* Various screen update functions available */ | |
509 static void DIB_NormalUpdate(_THIS, int numrects, SDL_Rect *rects); | |
510 | |
511 SDL_Surface *DIB_SetVideoMode(_THIS, SDL_Surface *current, | |
512 int width, int height, int bpp, Uint32 flags) | |
513 { | |
514 SDL_Surface *video; | |
4085 | 515 int prev_w, prev_h; |
0 | 516 Uint32 prev_flags; |
517 DWORD style; | |
518 const DWORD directstyle = | |
519 (WS_POPUP); | |
520 const DWORD windowstyle = | |
521 (WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX); | |
522 const DWORD resizestyle = | |
523 (WS_THICKFRAME|WS_MAXIMIZEBOX); | |
524 int binfo_size; | |
525 BITMAPINFO *binfo; | |
526 HDC hdc; | |
527 RECT bounds; | |
528 int x, y; | |
529 Uint32 Rmask, Gmask, Bmask; | |
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 | 563 /* Clean up any GL context that may be hanging around */ |
564 if ( current->flags & SDL_OPENGL ) { | |
565 WIN_GL_ShutDown(this); | |
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 | 568 |
569 /* Recalculate the bitmasks if necessary */ | |
570 if ( bpp == current->format->BitsPerPixel ) { | |
571 video = current; | |
572 } else { | |
573 switch (bpp) { | |
574 case 15: | |
575 case 16: | |
576 if ( DIB_SussScreenDepth() == 15 ) { | |
577 /* 5-5-5 */ | |
578 Rmask = 0x00007c00; | |
579 Gmask = 0x000003e0; | |
580 Bmask = 0x0000001f; | |
581 } else { | |
582 /* 5-6-5 */ | |
583 Rmask = 0x0000f800; | |
584 Gmask = 0x000007e0; | |
585 Bmask = 0x0000001f; | |
586 } | |
587 break; | |
588 case 24: | |
589 case 32: | |
590 /* GDI defined as 8-8-8 */ | |
591 Rmask = 0x00ff0000; | |
592 Gmask = 0x0000ff00; | |
593 Bmask = 0x000000ff; | |
594 break; | |
595 default: | |
596 Rmask = 0x00000000; | |
597 Gmask = 0x00000000; | |
598 Bmask = 0x00000000; | |
599 break; | |
600 } | |
601 video = SDL_CreateRGBSurface(SDL_SWSURFACE, | |
602 0, 0, bpp, Rmask, Gmask, Bmask, 0); | |
603 if ( video == NULL ) { | |
604 SDL_OutOfMemory(); | |
605 return(NULL); | |
606 } | |
607 } | |
608 | |
609 /* Fill in part of the video surface */ | |
4085 | 610 prev_w = video->w; |
611 prev_h = video->h; | |
0 | 612 video->flags = 0; /* Clear flags */ |
613 video->w = width; | |
614 video->h = height; | |
615 video->pitch = SDL_CalculatePitch(video); | |
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 | 629 #ifndef NO_CHANGEDISPLAYSETTINGS |
630 /* Set fullscreen mode if appropriate */ | |
631 if ( (flags & SDL_FULLSCREEN) == SDL_FULLSCREEN ) { | |
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 | 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 | 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 | 692 settings.dmBitsPerPel = video->format->BitsPerPixel; |
693 settings.dmPelsWidth = width; | |
694 settings.dmPelsHeight = height; | |
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 | 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 | 712 } |
1465
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
713 |
0 | 714 } |
715 #endif /* !NO_CHANGEDISPLAYSETTINGS */ | |
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 | 728 if ( screen_logpal != NULL ) { |
729 SDL_free(screen_logpal); | |
730 screen_logpal = NULL; | |
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 | 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 | 740 style = GetWindowLong(SDL_Window, GWL_STYLE); |
0 | 741 style &= ~(resizestyle|WS_MAXIMIZE); |
742 if ( (video->flags & SDL_FULLSCREEN) == SDL_FULLSCREEN ) { | |
743 style &= ~windowstyle; | |
744 style |= directstyle; | |
745 } else { | |
746 #ifndef NO_CHANGEDISPLAYSETTINGS | |
747 if ( (prev_flags & SDL_FULLSCREEN) == SDL_FULLSCREEN ) { | |
748 ChangeDisplaySettings(NULL, 0); | |
749 } | |
750 #endif | |
751 if ( flags & SDL_NOFRAME ) { | |
752 style &= ~windowstyle; | |
753 style |= directstyle; | |
754 video->flags |= SDL_NOFRAME; | |
755 } else { | |
756 style &= ~directstyle; | |
757 style |= windowstyle; | |
758 if ( flags & SDL_RESIZABLE ) { | |
759 style |= resizestyle; | |
760 video->flags |= SDL_RESIZABLE; | |
761 } | |
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 | 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 | 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 | 770 SetWindowLong(SDL_Window, GWL_STYLE, style); |
0 | 771 |
772 /* Delete the old bitmap if necessary */ | |
773 if ( screen_bmp != NULL ) { | |
774 DeleteObject(screen_bmp); | |
775 } | |
776 if ( ! (flags & SDL_OPENGL) ) { | |
777 BOOL is16bitmode = (video->format->BytesPerPixel == 2); | |
778 | |
779 /* Suss out the bitmap info header */ | |
780 binfo_size = sizeof(*binfo); | |
781 if( is16bitmode ) { | |
782 /* 16bit modes, palette area used for rgb bitmasks */ | |
783 binfo_size += 3*sizeof(DWORD); | |
784 } else if ( video->format->palette ) { | |
785 binfo_size += video->format->palette->ncolors * | |
786 sizeof(RGBQUAD); | |
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 | 789 if ( ! binfo ) { |
790 if ( video != current ) { | |
791 SDL_FreeSurface(video); | |
792 } | |
793 SDL_OutOfMemory(); | |
794 return(NULL); | |
795 } | |
796 | |
797 binfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); | |
798 binfo->bmiHeader.biWidth = video->w; | |
799 binfo->bmiHeader.biHeight = -video->h; /* -ve for topdown bitmap */ | |
800 binfo->bmiHeader.biPlanes = 1; | |
801 binfo->bmiHeader.biSizeImage = video->h * video->pitch; | |
802 binfo->bmiHeader.biXPelsPerMeter = 0; | |
803 binfo->bmiHeader.biYPelsPerMeter = 0; | |
804 binfo->bmiHeader.biClrUsed = 0; | |
805 binfo->bmiHeader.biClrImportant = 0; | |
806 binfo->bmiHeader.biBitCount = video->format->BitsPerPixel; | |
807 | |
808 if ( is16bitmode ) { | |
809 /* BI_BITFIELDS tells CreateDIBSection about the rgb masks in the palette */ | |
810 binfo->bmiHeader.biCompression = BI_BITFIELDS; | |
811 ((Uint32*)binfo->bmiColors)[0] = video->format->Rmask; | |
812 ((Uint32*)binfo->bmiColors)[1] = video->format->Gmask; | |
813 ((Uint32*)binfo->bmiColors)[2] = video->format->Bmask; | |
814 } else { | |
815 binfo->bmiHeader.biCompression = BI_RGB; /* BI_BITFIELDS for 565 vs 555 */ | |
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 | 818 video->format->palette->ncolors*sizeof(RGBQUAD)); |
819 } | |
820 } | |
821 | |
822 /* Create the offscreen bitmap buffer */ | |
823 hdc = GetDC(SDL_Window); | |
824 screen_bmp = CreateDIBSection(hdc, binfo, DIB_RGB_COLORS, | |
825 (void **)(&video->pixels), NULL, 0); | |
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 | 828 if ( screen_bmp == NULL ) { |
829 if ( video != current ) { | |
830 SDL_FreeSurface(video); | |
831 } | |
832 SDL_SetError("Couldn't create DIB section"); | |
833 return(NULL); | |
834 } | |
835 this->UpdateRects = DIB_NormalUpdate; | |
836 | |
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 | 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 | 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 | 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 | 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 | 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 | 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 | 876 #ifndef _WIN32_WCE |
1882 | 877 AdjustWindowRectEx(&bounds, GetWindowLong(SDL_Window, GWL_STYLE), (GetMenu(SDL_Window) != NULL), 0); |
3868 | 878 #else |
879 // The bMenu parameter must be FALSE; menu bars are not supported | |
880 AdjustWindowRectEx(&bounds, GetWindowLong(SDL_Window, GWL_STYLE), 0, 0); | |
881 #endif | |
0 | 882 width = bounds.right-bounds.left; |
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 | 907 SetForegroundWindow(SDL_Window); |
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 | 910 |
911 /* Set up for OpenGL */ | |
912 if ( flags & SDL_OPENGL ) { | |
913 if ( WIN_GL_SetupWindow(this) < 0 ) { | |
914 return(NULL); | |
915 } | |
916 video->flags |= SDL_OPENGL; | |
917 } | |
36
13ee9f4834ea
Windows CE patches contributed by Rainer Loritz
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
918 |
1523 | 919 /* JC 14 Mar 2006 |
920 Flush the message loop or this can cause big problems later | |
921 Especially if the user decides to use dialog boxes or assert()! | |
922 */ | |
923 WIN_FlushMessageQueue(); | |
924 | |
0 | 925 /* We're live! */ |
926 return(video); | |
927 } | |
928 | |
929 /* We don't actually allow hardware surfaces in the DIB driver */ | |
930 static int DIB_AllocHWSurface(_THIS, SDL_Surface *surface) | |
931 { | |
932 return(-1); | |
933 } | |
934 static void DIB_FreeHWSurface(_THIS, SDL_Surface *surface) | |
935 { | |
936 return; | |
937 } | |
938 static int DIB_LockHWSurface(_THIS, SDL_Surface *surface) | |
939 { | |
940 return(0); | |
941 } | |
942 static void DIB_UnlockHWSurface(_THIS, SDL_Surface *surface) | |
943 { | |
944 return; | |
945 } | |
946 | |
947 static void DIB_NormalUpdate(_THIS, int numrects, SDL_Rect *rects) | |
948 { | |
949 HDC hdc, mdc; | |
950 int i; | |
951 | |
952 hdc = GetDC(SDL_Window); | |
953 if ( screen_pal ) { | |
954 SelectPalette(hdc, screen_pal, FALSE); | |
955 } | |
956 mdc = CreateCompatibleDC(hdc); | |
957 SelectObject(mdc, screen_bmp); | |
958 for ( i=0; i<numrects; ++i ) { | |
959 BitBlt(hdc, rects[i].x, rects[i].y, rects[i].w, rects[i].h, | |
960 mdc, rects[i].x, rects[i].y, SRCCOPY); | |
961 } | |
962 DeleteDC(mdc); | |
963 ReleaseDC(SDL_Window, hdc); | |
964 } | |
965 | |
3992 | 966 static int FindPaletteIndex(LOGPALETTE *pal, BYTE r, BYTE g, BYTE b) |
967 { | |
968 PALETTEENTRY *entry; | |
969 int i; | |
970 int nentries = pal->palNumEntries; | |
971 | |
972 for ( i = 0; i < nentries; ++i ) { | |
973 entry = &pal->palPalEntry[i]; | |
974 if ( entry->peRed == r && entry->peGreen == g && entry->peBlue == b ) { | |
975 return i; | |
976 } | |
977 } | |
978 return -1; | |
979 } | |
980 | |
981 static BOOL CheckPaletteEntry(LOGPALETTE *pal, int index, BYTE r, BYTE g, BYTE b) | |
982 { | |
983 PALETTEENTRY *entry; | |
984 BOOL moved = 0; | |
985 | |
986 entry = &pal->palPalEntry[index]; | |
987 if ( entry->peRed != r || entry->peGreen != g || entry->peBlue != b ) { | |
988 int found = FindPaletteIndex(pal, r, g, b); | |
989 if ( found >= 0 ) { | |
990 pal->palPalEntry[found] = *entry; | |
991 } | |
992 entry->peRed = r; | |
993 entry->peGreen = g; | |
994 entry->peBlue = b; | |
995 moved = 1; | |
996 } | |
997 entry->peFlags = 0; | |
998 | |
999 return moved; | |
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 | 1002 int DIB_SetColors(_THIS, int firstcolor, int ncolors, SDL_Color *colors) |
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 | 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 | 1011 int moved_entries = 0; |
0 | 1012 |
1013 /* Update the display palette */ | |
1014 hdc = GetDC(SDL_Window); | |
1015 if ( screen_pal ) { | |
3992 | 1016 PALETTEENTRY *entry; |
0 | 1017 |
1018 for ( i=0; i<ncolors; ++i ) { | |
3992 | 1019 entry = &screen_logpal->palPalEntry[firstcolor+i]; |
1020 entry->peRed = colors[i].r; | |
1021 entry->peGreen = colors[i].g; | |
1022 entry->peBlue = colors[i].b; | |
1023 entry->peFlags = PC_NOCOLLAPSE; | |
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 | 1026 /* Check to make sure black and white are in position */ |
1027 if ( GetSystemPaletteUse(hdc) != SYSPAL_NOSTATIC256 ) { | |
1028 moved_entries += CheckPaletteEntry(screen_logpal, 0, 0x00, 0x00, 0x00); | |
1029 moved_entries += CheckPaletteEntry(screen_logpal, screen_logpal->palNumEntries-1, 0xff, 0xff, 0xff); | |
0 | 1030 } |
3992 | 1031 /* FIXME: |
1032 If we don't have full access to the palette, what we | |
1033 really want to do is find the 236 most diverse colors | |
1034 in the desired palette, set those entries (10-245) and | |
1035 then map everything into the new system palette. | |
1036 */ | |
4075
0207ca19fd8f
Fixed building on Windows CE
Sam Lantinga <slouken@libsdl.org>
parents:
3992
diff
changeset
|
1037 #endif |
3992 | 1038 |
4075
0207ca19fd8f
Fixed building on Windows CE
Sam Lantinga <slouken@libsdl.org>
parents:
3992
diff
changeset
|
1039 #ifndef _WIN32_WCE |
3992 | 1040 /* Copy the entries into the system palette */ |
1041 UnrealizeObject(screen_pal); | |
4075
0207ca19fd8f
Fixed building on Windows CE
Sam Lantinga <slouken@libsdl.org>
parents:
3992
diff
changeset
|
1042 #endif |
3992 | 1043 SetPaletteEntries(screen_pal, 0, screen_logpal->palNumEntries, screen_logpal->palPalEntry); |
0 | 1044 SelectPalette(hdc, screen_pal, FALSE); |
1045 RealizePalette(hdc); | |
1046 } | |
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 | 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 | 1051 for ( i=0; i<ncolors; ++i ) { |
1052 pal[i].rgbRed = colors[i].r; | |
1053 pal[i].rgbGreen = colors[i].g; | |
1054 pal[i].rgbBlue = colors[i].b; | |
1055 pal[i].rgbReserved = 0; | |
1056 } | |
1057 | |
1058 /* Set the DIB palette and update the display */ | |
1059 mdc = CreateCompatibleDC(hdc); | |
1060 SelectObject(mdc, screen_bmp); | |
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 | 1063 BitBlt(hdc, 0, 0, this->screen->w, this->screen->h, |
1064 mdc, 0, 0, SRCCOPY); | |
1065 } | |
0 | 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 | 1069 ReleaseDC(SDL_Window, hdc); |
1070 return(1); | |
1071 } | |
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 | 1074 static void DIB_CheckGamma(_THIS) |
1075 { | |
1076 #ifndef NO_GAMMA_SUPPORT | |
1077 HDC hdc; | |
1078 WORD ramp[3*256]; | |
1079 | |
1080 /* If we fail to get gamma, disable gamma control */ | |
1081 hdc = GetDC(SDL_Window); | |
1082 if ( ! GetDeviceGammaRamp(hdc, ramp) ) { | |
1083 this->GetGammaRamp = NULL; | |
1084 this->SetGammaRamp = NULL; | |
1085 } | |
1086 ReleaseDC(SDL_Window, hdc); | |
1087 #endif /* !NO_GAMMA_SUPPORT */ | |
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 | 1090 { |
1091 #ifndef NO_GAMMA_SUPPORT | |
1092 HDC hdc; | |
1093 | |
1094 if ( gamma_saved ) { | |
1095 hdc = GetDC(SDL_Window); | |
1096 if ( SDL_GetAppState() & SDL_APPINPUTFOCUS ) { | |
1097 /* About to leave active state, restore gamma */ | |
1098 SetDeviceGammaRamp(hdc, gamma_saved); | |
1099 } else { | |
1100 /* About to enter active state, set game gamma */ | |
1101 GetDeviceGammaRamp(hdc, gamma_saved); | |
1102 SetDeviceGammaRamp(hdc, this->gamma); | |
1103 } | |
1104 ReleaseDC(SDL_Window, hdc); | |
1105 } | |
1106 #endif /* !NO_GAMMA_SUPPORT */ | |
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 | 1109 { |
1110 #ifndef NO_GAMMA_SUPPORT | |
1111 if ( gamma_saved ) { | |
1112 /* Restore the original gamma if necessary */ | |
1113 if ( SDL_GetAppState() & SDL_APPINPUTFOCUS ) { | |
1114 HDC hdc; | |
1115 | |
1116 hdc = GetDC(SDL_Window); | |
1117 SetDeviceGammaRamp(hdc, gamma_saved); | |
1118 ReleaseDC(SDL_Window, hdc); | |
1119 } | |
1120 | |
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 | 1123 gamma_saved = 0; |
1124 } | |
1125 #endif /* !NO_GAMMA_SUPPORT */ | |
1126 } | |
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 | 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 | 1134 HDC hdc; |
1135 BOOL succeeded; | |
1136 | |
1137 /* Set the ramp for the display */ | |
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 | 1140 if ( ! gamma_saved ) { |
1141 SDL_OutOfMemory(); | |
1142 return -1; | |
1143 } | |
1144 hdc = GetDC(SDL_Window); | |
1145 GetDeviceGammaRamp(hdc, gamma_saved); | |
1146 ReleaseDC(SDL_Window, hdc); | |
1147 } | |
1148 if ( SDL_GetAppState() & SDL_APPINPUTFOCUS ) { | |
1149 hdc = GetDC(SDL_Window); | |
1150 succeeded = SetDeviceGammaRamp(hdc, ramp); | |
1151 ReleaseDC(SDL_Window, hdc); | |
1152 } else { | |
1153 succeeded = TRUE; | |
1154 } | |
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 | 1157 } |
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 | 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 | 1165 HDC hdc; |
1166 BOOL succeeded; | |
1167 | |
1168 /* Get the ramp from the display */ | |
1169 hdc = GetDC(SDL_Window); | |
1170 succeeded = GetDeviceGammaRamp(hdc, ramp); | |
1171 ReleaseDC(SDL_Window, hdc); | |
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 | 1174 } |
1175 | |
1176 void DIB_VideoQuit(_THIS) | |
1177 { | |
1881 | 1178 int i, j; |
1179 | |
0 | 1180 /* Destroy the window and everything associated with it */ |
1181 if ( SDL_Window ) { | |
1182 /* Delete the screen bitmap (also frees screen->pixels) */ | |
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 | 1185 DIB_ReleaseStaticColors(SDL_Window); |
1186 } | |
0 | 1187 #ifndef NO_CHANGEDISPLAYSETTINGS |
1188 if ( this->screen->flags & SDL_FULLSCREEN ) { | |
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 | 1191 } |
1192 #endif | |
1193 if ( this->screen->flags & SDL_OPENGL ) { | |
1194 WIN_GL_ShutDown(this); | |
1195 } | |
1196 this->screen->pixels = NULL; | |
1197 } | |
3992 | 1198 if ( screen_pal != NULL ) { |
1199 DeleteObject(screen_pal); | |
1200 screen_pal = NULL; | |
1201 } | |
1202 if ( screen_logpal != NULL ) { | |
1203 SDL_free(screen_logpal); | |
1204 screen_logpal = NULL; | |
1205 } | |
0 | 1206 if ( screen_bmp ) { |
1207 DeleteObject(screen_bmp); | |
1208 screen_bmp = NULL; | |
1209 } | |
1210 if ( screen_icn ) { | |
1211 DestroyIcon(screen_icn); | |
1212 screen_icn = NULL; | |
1213 } | |
1214 DIB_QuitGamma(this); | |
1215 DIB_DestroyWindow(this); | |
1216 | |
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 | 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 | 1230 for ( i=0; i < SDL_arraysize(SDL_modelist); ++i ) { |
1231 if ( !SDL_modelist[i] ) { | |
1232 continue; | |
1233 } | |
1234 for ( j=0; SDL_modelist[i][j]; ++j ) { | |
1235 SDL_free(SDL_modelist[i][j]); | |
1236 } | |
1237 SDL_free(SDL_modelist[i]); | |
1238 SDL_modelist[i] = NULL; | |
1239 SDL_nummodes[i] = 0; | |
0 | 1240 } |
1241 } | |
1242 | |
1243 /* Exported for the windows message loop only */ | |
3992 | 1244 static void DIB_GrabStaticColors(HWND window) |
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 | 1247 HDC hdc; |
1248 | |
1249 hdc = GetDC(window); | |
1250 SetSystemPaletteUse(hdc, SYSPAL_NOSTATIC256); | |
1251 if ( GetSystemPaletteUse(hdc) != SYSPAL_NOSTATIC256 ) { | |
1252 SetSystemPaletteUse(hdc, SYSPAL_NOSTATIC); | |
1253 } | |
1254 ReleaseDC(window, hdc); | |
4075
0207ca19fd8f
Fixed building on Windows CE
Sam Lantinga <slouken@libsdl.org>
parents:
3992
diff
changeset
|
1255 #endif |
3992 | 1256 } |
1257 static void DIB_ReleaseStaticColors(HWND window) | |
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 | 1260 HDC hdc; |
1261 | |
1262 hdc = GetDC(window); | |
1263 SetSystemPaletteUse(hdc, SYSPAL_STATIC); | |
1264 ReleaseDC(window, hdc); | |
4075
0207ca19fd8f
Fixed building on Windows CE
Sam Lantinga <slouken@libsdl.org>
parents:
3992
diff
changeset
|
1265 #endif |
3992 | 1266 } |
1267 static void DIB_Activate(_THIS, BOOL active, BOOL minimized) | |
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 | 1270 if ( !active ) { |
1271 DIB_ReleaseStaticColors(SDL_Window); | |
1272 DIB_RealizePalette(this); | |
1273 } else if ( !minimized ) { | |
1274 DIB_GrabStaticColors(SDL_Window); | |
1275 DIB_RealizePalette(this); | |
1276 } | |
1277 } | |
1278 } | |
1279 static void DIB_RealizePalette(_THIS) | |
0 | 1280 { |
1281 if ( screen_pal != NULL ) { | |
1282 HDC hdc; | |
1283 | |
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 | 1286 UnrealizeObject(screen_pal); |
4075
0207ca19fd8f
Fixed building on Windows CE
Sam Lantinga <slouken@libsdl.org>
parents:
3992
diff
changeset
|
1287 #endif |
0 | 1288 SelectPalette(hdc, screen_pal, FALSE); |
3992 | 1289 if ( RealizePalette(hdc) ) { |
0 | 1290 InvalidateRect(SDL_Window, NULL, FALSE); |
3992 | 1291 } |
0 | 1292 ReleaseDC(SDL_Window, hdc); |
1293 } | |
1294 } | |
1295 static void DIB_PaletteChanged(_THIS, HWND window) | |
1296 { | |
1297 if ( window != SDL_Window ) { | |
3992 | 1298 DIB_RealizePalette(this); |
0 | 1299 } |
1300 } | |
1301 | |
1302 /* Exported for the windows message loop only */ | |
1303 static void DIB_WinPAINT(_THIS, HDC hdc) | |
1304 { | |
1305 HDC mdc; | |
1306 | |
1307 if ( screen_pal ) { | |
1308 SelectPalette(hdc, screen_pal, FALSE); | |
1309 } | |
1310 mdc = CreateCompatibleDC(hdc); | |
1311 SelectObject(mdc, screen_bmp); | |
1312 BitBlt(hdc, 0, 0, SDL_VideoSurface->w, SDL_VideoSurface->h, | |
1313 mdc, 0, 0, SRCCOPY); | |
1314 DeleteDC(mdc); | |
1315 } | |
1316 | |
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 | 1319 void DX5_SoundFocus(HWND hwnd) |
1320 { | |
1321 return; | |
1322 } | |
1323 #endif |