Mercurial > sdl-ios-xcode
annotate src/video/windib/SDL_dibvideo.c @ 1585:980d2a0dc2a3
Date: Tue, 4 Mar 2003 15:05:31 -0800
From: "Jim"
Subject: [SDL] Frame Buffer patches...
Okay I'm new at patch generation - so please tell me if there's a better way
I could have done this.
Attached are two patch files generated with 'cvs diff -u'
SDL-fb-open-lock.patch applies to SDL_fbvideo.c
Modifies the open loop to check /dev/fb/0 found on devfs...
Modifies the lock code to return failure if the current virtual terminal
is not the one opened for frame buffer writing...
Lock would hang forever if switched away (ctrl-alt-F1) ...
SDL-fb-mousedrv-screensave.patch applies to SDL_fbevents.c
Switches default mouse mode based on SDL_MOUSEDRV - currently only
accepts PS2 - otherwise default is MS Mouse.
When the screen is switched - exisiting code (wrapped in ifdef
SAVE_SCREEN_COTENTS) would save the wrong bit of the screen....
( I run frame buffer 1600x1200, the size I requested was 800x600 - the
save would save the top 800 lines (non biased) and restore them... Adding
screen->offset fixed that )
However, if that option is not set, then a call to SDL_UpdateRect (full
screen) is made. (which may have had it's contents changed since the screen
is not entirely locked because of lock-failure patch)
Jim
[patches slightly tweaked for SDL 1.2.10]
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Wed, 22 Mar 2006 07:48:22 +0000 |
parents | 8d9bb0cf2c2a |
children | e49147870aac 8d3ca155c396 |
rev | line source |
---|---|
0 | 1 /* |
2 SDL - Simple DirectMedia Layer | |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1295
diff
changeset
|
3 Copyright (C) 1997-2006 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" |
0 | 37 #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
|
38 #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
|
39 #include "../wincommon/SDL_sysmouse_c.h" |
0 | 40 #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
|
41 #include "../wincommon/SDL_wingl_c.h" |
0 | 42 |
43 #ifdef _WIN32_WCE | |
44 #define NO_GETDIBITS | |
45 #define NO_GAMMA_SUPPORT | |
1465
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
46 #if _WIN32_WCE < 420 |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
47 #define NO_CHANGEDISPLAYSETTINGS |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
48 #else |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
49 #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
|
50 #endif |
0 | 51 #endif |
453
a6fa62b1be09
Updated for embedded Visual C++ 4.0
Sam Lantinga <slouken@libsdl.org>
parents:
448
diff
changeset
|
52 #ifndef WS_MAXIMIZE |
766
ed57c876700d
Date: Wed, 26 Nov 2003 01:52:02 +0800
Sam Lantinga <slouken@libsdl.org>
parents:
515
diff
changeset
|
53 #define WS_MAXIMIZE 0 |
ed57c876700d
Date: Wed, 26 Nov 2003 01:52:02 +0800
Sam Lantinga <slouken@libsdl.org>
parents:
515
diff
changeset
|
54 #endif |
ed57c876700d
Date: Wed, 26 Nov 2003 01:52:02 +0800
Sam Lantinga <slouken@libsdl.org>
parents:
515
diff
changeset
|
55 #ifndef WS_THICKFRAME |
ed57c876700d
Date: Wed, 26 Nov 2003 01:52:02 +0800
Sam Lantinga <slouken@libsdl.org>
parents:
515
diff
changeset
|
56 #define WS_THICKFRAME 0 |
453
a6fa62b1be09
Updated for embedded Visual C++ 4.0
Sam Lantinga <slouken@libsdl.org>
parents:
448
diff
changeset
|
57 #endif |
a6fa62b1be09
Updated for embedded Visual C++ 4.0
Sam Lantinga <slouken@libsdl.org>
parents:
448
diff
changeset
|
58 #ifndef SWP_NOCOPYBITS |
a6fa62b1be09
Updated for embedded Visual C++ 4.0
Sam Lantinga <slouken@libsdl.org>
parents:
448
diff
changeset
|
59 #define SWP_NOCOPYBITS 0 |
a6fa62b1be09
Updated for embedded Visual C++ 4.0
Sam Lantinga <slouken@libsdl.org>
parents:
448
diff
changeset
|
60 #endif |
a6fa62b1be09
Updated for embedded Visual C++ 4.0
Sam Lantinga <slouken@libsdl.org>
parents:
448
diff
changeset
|
61 #ifndef PC_NOCOLLAPSE |
a6fa62b1be09
Updated for embedded Visual C++ 4.0
Sam Lantinga <slouken@libsdl.org>
parents:
448
diff
changeset
|
62 #define PC_NOCOLLAPSE 0 |
a6fa62b1be09
Updated for embedded Visual C++ 4.0
Sam Lantinga <slouken@libsdl.org>
parents:
448
diff
changeset
|
63 #endif |
0 | 64 |
1465
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
65 #ifdef _WIN32_WCE |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
66 // 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
|
67 extern HINSTANCE aygshell; |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
68 #endif |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
69 |
0 | 70 /* Initialization/Query functions */ |
71 static int DIB_VideoInit(_THIS, SDL_PixelFormat *vformat); | |
72 static SDL_Rect **DIB_ListModes(_THIS, SDL_PixelFormat *format, Uint32 flags); | |
73 SDL_Surface *DIB_SetVideoMode(_THIS, SDL_Surface *current, int width, int height, int bpp, Uint32 flags); | |
74 static int DIB_SetColors(_THIS, int firstcolor, int ncolors, | |
75 SDL_Color *colors); | |
76 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
|
77 void DIB_SwapGamma(_THIS); |
518ffd98a8f6
Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents:
304
diff
changeset
|
78 void DIB_QuitGamma(_THIS); |
518ffd98a8f6
Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents:
304
diff
changeset
|
79 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
|
80 int DIB_GetGammaRamp(_THIS, Uint16 *ramp); |
0 | 81 static void DIB_VideoQuit(_THIS); |
82 | |
83 /* Hardware surface functions */ | |
84 static int DIB_AllocHWSurface(_THIS, SDL_Surface *surface); | |
85 static int DIB_LockHWSurface(_THIS, SDL_Surface *surface); | |
86 static void DIB_UnlockHWSurface(_THIS, SDL_Surface *surface); | |
87 static void DIB_FreeHWSurface(_THIS, SDL_Surface *surface); | |
88 | |
89 /* Windows message handling functions */ | |
90 static void DIB_RealizePalette(_THIS); | |
91 static void DIB_PaletteChanged(_THIS, HWND window); | |
92 static void DIB_WinPAINT(_THIS, HDC hdc); | |
93 | |
94 /* helper fn */ | |
95 static int DIB_SussScreenDepth(); | |
96 | |
97 /* DIB driver bootstrap functions */ | |
98 | |
99 static int DIB_Available(void) | |
100 { | |
101 return(1); | |
102 } | |
103 | |
104 static void DIB_DeleteDevice(SDL_VideoDevice *device) | |
105 { | |
106 if ( device ) { | |
107 if ( device->hidden ) { | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
108 SDL_free(device->hidden); |
0 | 109 } |
110 if ( device->gl_data ) { | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
111 SDL_free(device->gl_data); |
0 | 112 } |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
113 SDL_free(device); |
0 | 114 } |
115 } | |
116 | |
117 static SDL_VideoDevice *DIB_CreateDevice(int devindex) | |
118 { | |
119 SDL_VideoDevice *device; | |
120 | |
121 /* 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
|
122 device = (SDL_VideoDevice *)SDL_malloc(sizeof(SDL_VideoDevice)); |
0 | 123 if ( device ) { |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
124 SDL_memset(device, 0, (sizeof *device)); |
0 | 125 device->hidden = (struct SDL_PrivateVideoData *) |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
126 SDL_malloc((sizeof *device->hidden)); |
0 | 127 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
|
128 SDL_malloc((sizeof *device->gl_data)); |
0 | 129 } |
130 if ( (device == NULL) || (device->hidden == NULL) || | |
131 (device->gl_data == NULL) ) { | |
132 SDL_OutOfMemory(); | |
133 DIB_DeleteDevice(device); | |
134 return(NULL); | |
135 } | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
136 SDL_memset(device->hidden, 0, (sizeof *device->hidden)); |
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
137 SDL_memset(device->gl_data, 0, (sizeof *device->gl_data)); |
0 | 138 |
139 /* Set the function pointers */ | |
140 device->VideoInit = DIB_VideoInit; | |
141 device->ListModes = DIB_ListModes; | |
142 device->SetVideoMode = DIB_SetVideoMode; | |
143 device->UpdateMouse = WIN_UpdateMouse; | |
144 device->SetColors = DIB_SetColors; | |
145 device->UpdateRects = NULL; | |
146 device->VideoQuit = DIB_VideoQuit; | |
147 device->AllocHWSurface = DIB_AllocHWSurface; | |
148 device->CheckHWBlit = NULL; | |
149 device->FillHWRect = NULL; | |
150 device->SetHWColorKey = NULL; | |
151 device->SetHWAlpha = NULL; | |
152 device->LockHWSurface = DIB_LockHWSurface; | |
153 device->UnlockHWSurface = DIB_UnlockHWSurface; | |
154 device->FlipHWSurface = NULL; | |
155 device->FreeHWSurface = DIB_FreeHWSurface; | |
156 device->SetGammaRamp = DIB_SetGammaRamp; | |
157 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
|
158 #if SDL_VIDEO_OPENGL |
453
a6fa62b1be09
Updated for embedded Visual C++ 4.0
Sam Lantinga <slouken@libsdl.org>
parents:
448
diff
changeset
|
159 device->GL_LoadLibrary = WIN_GL_LoadLibrary; |
a6fa62b1be09
Updated for embedded Visual C++ 4.0
Sam Lantinga <slouken@libsdl.org>
parents:
448
diff
changeset
|
160 device->GL_GetProcAddress = WIN_GL_GetProcAddress; |
a6fa62b1be09
Updated for embedded Visual C++ 4.0
Sam Lantinga <slouken@libsdl.org>
parents:
448
diff
changeset
|
161 device->GL_GetAttribute = WIN_GL_GetAttribute; |
a6fa62b1be09
Updated for embedded Visual C++ 4.0
Sam Lantinga <slouken@libsdl.org>
parents:
448
diff
changeset
|
162 device->GL_MakeCurrent = WIN_GL_MakeCurrent; |
a6fa62b1be09
Updated for embedded Visual C++ 4.0
Sam Lantinga <slouken@libsdl.org>
parents:
448
diff
changeset
|
163 device->GL_SwapBuffers = WIN_GL_SwapBuffers; |
0 | 164 #endif |
165 device->SetCaption = WIN_SetWMCaption; | |
166 device->SetIcon = WIN_SetWMIcon; | |
167 device->IconifyWindow = WIN_IconifyWindow; | |
168 device->GrabInput = WIN_GrabInput; | |
169 device->GetWMInfo = WIN_GetWMInfo; | |
170 device->FreeWMCursor = WIN_FreeWMCursor; | |
171 device->CreateWMCursor = WIN_CreateWMCursor; | |
172 device->ShowWMCursor = WIN_ShowWMCursor; | |
173 device->WarpWMCursor = WIN_WarpWMCursor; | |
174 device->CheckMouseMode = WIN_CheckMouseMode; | |
175 device->InitOSKeymap = DIB_InitOSKeymap; | |
176 device->PumpEvents = DIB_PumpEvents; | |
177 | |
178 /* Set up the windows message handling functions */ | |
179 WIN_RealizePalette = DIB_RealizePalette; | |
180 WIN_PaletteChanged = DIB_PaletteChanged; | |
181 WIN_WinPAINT = DIB_WinPAINT; | |
182 HandleMessage = DIB_HandleMessage; | |
183 | |
184 device->free = DIB_DeleteDevice; | |
185 | |
186 /* We're finally ready */ | |
187 return device; | |
188 } | |
189 | |
190 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
|
191 "windib", "Win95/98/NT/2000/CE GDI", |
0 | 192 DIB_Available, DIB_CreateDevice |
193 }; | |
194 | |
195 static int cmpmodes(const void *va, const void *vb) | |
196 { | |
197 SDL_Rect *a = *(SDL_Rect **)va; | |
198 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
|
199 if ( a->w == b->w ) |
f72cc0c7305f
Video modes are sorted width first, then height
Sam Lantinga <slouken@libsdl.org>
parents:
833
diff
changeset
|
200 return b->h - a->h; |
f72cc0c7305f
Video modes are sorted width first, then height
Sam Lantinga <slouken@libsdl.org>
parents:
833
diff
changeset
|
201 else |
f72cc0c7305f
Video modes are sorted width first, then height
Sam Lantinga <slouken@libsdl.org>
parents:
833
diff
changeset
|
202 return b->w - a->w; |
0 | 203 } |
204 | |
205 static int DIB_AddMode(_THIS, int bpp, int w, int h) | |
206 { | |
207 SDL_Rect *mode; | |
208 int i, index; | |
209 int next_mode; | |
210 | |
211 /* Check to see if we already have this mode */ | |
212 if ( bpp < 8 ) { /* Not supported */ | |
213 return(0); | |
214 } | |
215 index = ((bpp+7)/8)-1; | |
216 for ( i=0; i<SDL_nummodes[index]; ++i ) { | |
217 mode = SDL_modelist[index][i]; | |
218 if ( (mode->w == w) && (mode->h == h) ) { | |
219 return(0); | |
220 } | |
221 } | |
222 | |
223 /* 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
|
224 mode = (SDL_Rect *)SDL_malloc(sizeof *mode); |
0 | 225 if ( mode == NULL ) { |
226 SDL_OutOfMemory(); | |
227 return(-1); | |
228 } | |
229 mode->x = 0; | |
230 mode->y = 0; | |
231 mode->w = w; | |
232 mode->h = h; | |
233 | |
234 /* Allocate the new list of modes, and fill in the new mode */ | |
235 next_mode = SDL_nummodes[index]; | |
236 SDL_modelist[index] = (SDL_Rect **) | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
237 SDL_realloc(SDL_modelist[index], (1+next_mode+1)*sizeof(SDL_Rect *)); |
0 | 238 if ( SDL_modelist[index] == NULL ) { |
239 SDL_OutOfMemory(); | |
240 SDL_nummodes[index] = 0; | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
241 SDL_free(mode); |
0 | 242 return(-1); |
243 } | |
244 SDL_modelist[index][next_mode] = mode; | |
245 SDL_modelist[index][next_mode+1] = NULL; | |
246 SDL_nummodes[index]++; | |
247 | |
248 return(0); | |
249 } | |
250 | |
251 static HPALETTE DIB_CreatePalette(int bpp) | |
252 { | |
253 /* RJR: March 28, 2000 | |
254 moved palette creation here from "DIB_VideoInit" */ | |
255 | |
256 HPALETTE handle = NULL; | |
257 | |
258 if ( bpp <= 8 ) | |
259 { | |
260 LOGPALETTE *palette; | |
261 HDC hdc; | |
262 int ncolors; | |
263 int i; | |
264 | |
265 ncolors = 1; | |
266 for ( i=0; i<bpp; ++i ) { | |
267 ncolors *= 2; | |
268 } | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
269 palette = (LOGPALETTE *)SDL_malloc(sizeof(*palette)+ |
0 | 270 ncolors*sizeof(PALETTEENTRY)); |
271 palette->palVersion = 0x300; | |
272 palette->palNumEntries = ncolors; | |
273 hdc = GetDC(SDL_Window); | |
274 GetSystemPaletteEntries(hdc, 0, ncolors, palette->palPalEntry); | |
275 ReleaseDC(SDL_Window, hdc); | |
276 handle = CreatePalette(palette); | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
277 SDL_free(palette); |
0 | 278 } |
279 | |
280 return handle; | |
281 } | |
282 | |
283 int DIB_VideoInit(_THIS, SDL_PixelFormat *vformat) | |
284 { | |
285 #ifndef NO_CHANGEDISPLAYSETTINGS | |
286 int i; | |
287 DEVMODE settings; | |
288 #endif | |
289 | |
290 /* Create the window */ | |
291 if ( DIB_CreateWindow(this) < 0 ) { | |
292 return(-1); | |
293 } | |
1523 | 294 |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
295 #if !SDL_AUDIO_DISABLED |
0 | 296 DX5_SoundFocus(SDL_Window); |
169
8039a5b760b9
Allow building SDL on Windows without audio support
Sam Lantinga <slouken@libsdl.org>
parents:
145
diff
changeset
|
297 #endif |
0 | 298 |
299 /* Determine the screen depth */ | |
300 vformat->BitsPerPixel = DIB_SussScreenDepth(); | |
301 switch (vformat->BitsPerPixel) { | |
302 case 15: | |
303 vformat->Rmask = 0x00007c00; | |
304 vformat->Gmask = 0x000003e0; | |
305 vformat->Bmask = 0x0000001f; | |
306 vformat->BitsPerPixel = 16; | |
307 break; | |
308 case 16: | |
309 vformat->Rmask = 0x0000f800; | |
310 vformat->Gmask = 0x000007e0; | |
311 vformat->Bmask = 0x0000001f; | |
312 break; | |
313 case 24: | |
314 case 32: | |
315 /* GDI defined as 8-8-8 */ | |
316 vformat->Rmask = 0x00ff0000; | |
317 vformat->Gmask = 0x0000ff00; | |
318 vformat->Bmask = 0x000000ff; | |
319 break; | |
320 default: | |
321 break; | |
322 } | |
323 | |
324 /* See if gamma is supported on this screen */ | |
325 DIB_CheckGamma(this); | |
326 | |
327 #ifndef NO_CHANGEDISPLAYSETTINGS | |
1465
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
328 |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
329 settings.dmSize = sizeof(DEVMODE); |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
330 settings.dmDriverExtra = 0; |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
331 #ifdef _WIN32_WCE |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
332 settings.dmFields = DM_DISPLAYQUERYORIENTATION; |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
333 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
|
334 #endif |
1295
c3e36ac8a94c
Date: Sun, 6 Mar 2005 17:06:20 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
1292
diff
changeset
|
335 /* Query for the desktop resolution */ |
c3e36ac8a94c
Date: Sun, 6 Mar 2005 17:06:20 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
1292
diff
changeset
|
336 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
|
337 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
|
338 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
|
339 |
0 | 340 /* Query for the list of available video modes */ |
341 for ( i=0; EnumDisplaySettings(NULL, i, &settings); ++i ) { | |
342 DIB_AddMode(this, settings.dmBitsPerPel, | |
343 settings.dmPelsWidth, settings.dmPelsHeight); | |
1465
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
344 #ifdef _WIN32_WCE |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
345 if( this->hidden->supportRotation ) |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
346 DIB_AddMode(this, settings.dmBitsPerPel, |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
347 settings.dmPelsHeight, settings.dmPelsWidth); |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
348 #endif |
0 | 349 } |
350 /* Sort the mode lists */ | |
1465
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
351 if( i > 1 ) |
0 | 352 for ( i=0; i<NUM_MODELISTS; ++i ) { |
353 if ( SDL_nummodes[i] > 0 ) { | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
354 SDL_qsort(SDL_modelist[i], SDL_nummodes[i], sizeof *SDL_modelist[i], cmpmodes); |
0 | 355 } |
356 } | |
1465
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
357 #else |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
358 // WinCE and fullscreen mode: |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
359 // 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
|
360 // 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
|
361 // 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
|
362 // 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
|
363 |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
364 DIB_AddMode(this, vformat->BitsPerPixel, |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
365 GetDeviceCaps(GetDC(NULL), HORZRES), |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
366 GetDeviceCaps(GetDC(NULL), VERTRES)); |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
367 |
0 | 368 #endif /* !NO_CHANGEDISPLAYSETTINGS */ |
369 | |
370 /* Grab an identity palette if we are in a palettized mode */ | |
371 if ( vformat->BitsPerPixel <= 8 ) { | |
372 /* RJR: March 28, 2000 | |
373 moved palette creation to "DIB_CreatePalette" */ | |
374 screen_pal = DIB_CreatePalette(vformat->BitsPerPixel); | |
375 } | |
376 | |
377 /* Fill in some window manager capabilities */ | |
378 this->info.wm_available = 1; | |
379 | |
1465
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
380 #ifdef _WIN32_WCE |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
381 this->hidden->origRotation = -1; |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
382 #endif |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
383 |
0 | 384 /* We're done! */ |
385 return(0); | |
386 } | |
387 | |
388 /* We support any format at any dimension */ | |
389 SDL_Rect **DIB_ListModes(_THIS, SDL_PixelFormat *format, Uint32 flags) | |
390 { | |
391 if ( (flags & SDL_FULLSCREEN) == SDL_FULLSCREEN ) { | |
392 return(SDL_modelist[((format->BitsPerPixel+7)/8)-1]); | |
393 } else { | |
394 return((SDL_Rect **)-1); | |
395 } | |
396 } | |
397 | |
398 | |
399 /* | |
400 Helper fn to work out which screen depth windows is currently using. | |
401 15 bit mode is considered 555 format, 16 bit is 565. | |
402 returns 0 for unknown mode. | |
403 (Derived from code in sept 1999 Windows Developer Journal | |
404 http://www.wdj.com/code/archive.html) | |
405 */ | |
406 static int DIB_SussScreenDepth() | |
407 { | |
408 #ifdef NO_GETDIBITS | |
409 int depth; | |
410 HDC hdc; | |
411 | |
412 hdc = GetDC(SDL_Window); | |
413 depth = GetDeviceCaps(hdc, PLANES) * GetDeviceCaps(hdc, BITSPIXEL); | |
414 ReleaseDC(SDL_Window, hdc); | |
415 return(depth); | |
416 #else | |
417 int dib_size; | |
418 LPBITMAPINFOHEADER dib_hdr; | |
419 HDC hdc; | |
420 HBITMAP hbm; | |
421 | |
422 /* Allocate enough space for a DIB header plus palette (for | |
423 * 8-bit modes) or bitfields (for 16- and 32-bit modes) | |
424 */ | |
425 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
|
426 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
|
427 SDL_memset(dib_hdr, 0, dib_size); |
0 | 428 dib_hdr->biSize = sizeof(BITMAPINFOHEADER); |
429 | |
430 /* Get a device-dependent bitmap that's compatible with the | |
431 screen. | |
432 */ | |
433 hdc = GetDC(NULL); | |
434 hbm = CreateCompatibleBitmap( hdc, 1, 1 ); | |
435 | |
436 /* Convert the DDB to a DIB. We need to call GetDIBits twice: | |
437 * the first call just fills in the BITMAPINFOHEADER; the | |
438 * second fills in the bitfields or palette. | |
439 */ | |
440 GetDIBits(hdc, hbm, 0, 1, NULL, (LPBITMAPINFO) dib_hdr, DIB_RGB_COLORS); | |
441 GetDIBits(hdc, hbm, 0, 1, NULL, (LPBITMAPINFO) dib_hdr, DIB_RGB_COLORS); | |
442 DeleteObject(hbm); | |
443 ReleaseDC(NULL, hdc); | |
444 | |
445 switch( dib_hdr->biBitCount ) | |
446 { | |
447 case 8: return 8; | |
448 case 24: return 24; | |
449 case 32: return 32; | |
450 case 16: | |
451 if( dib_hdr->biCompression == BI_BITFIELDS ) { | |
452 /* check the red mask */ | |
453 switch( ((DWORD*)((char*)dib_hdr + dib_hdr->biSize))[0] ) { | |
454 case 0xf800: return 16; /* 565 */ | |
455 case 0x7c00: return 15; /* 555 */ | |
456 } | |
457 } | |
458 } | |
459 return 0; /* poo. */ | |
460 #endif /* NO_GETDIBITS */ | |
461 } | |
462 | |
463 | |
464 /* Various screen update functions available */ | |
465 static void DIB_NormalUpdate(_THIS, int numrects, SDL_Rect *rects); | |
466 | |
467 SDL_Surface *DIB_SetVideoMode(_THIS, SDL_Surface *current, | |
468 int width, int height, int bpp, Uint32 flags) | |
469 { | |
470 SDL_Surface *video; | |
471 Uint32 prev_flags; | |
472 DWORD style; | |
473 const DWORD directstyle = | |
474 (WS_POPUP); | |
475 const DWORD windowstyle = | |
476 (WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX); | |
477 const DWORD resizestyle = | |
478 (WS_THICKFRAME|WS_MAXIMIZEBOX); | |
479 int binfo_size; | |
480 BITMAPINFO *binfo; | |
481 HDC hdc; | |
482 RECT bounds; | |
483 int x, y; | |
484 Uint32 Rmask, Gmask, Bmask; | |
485 | |
486 /* Clean up any GL context that may be hanging around */ | |
487 if ( current->flags & SDL_OPENGL ) { | |
488 WIN_GL_ShutDown(this); | |
489 } | |
1291
31331c444ea2
Only save the window position if we're in windowed mode
Sam Lantinga <slouken@libsdl.org>
parents:
1290
diff
changeset
|
490 SDL_resizing = 1; |
0 | 491 |
492 /* Recalculate the bitmasks if necessary */ | |
493 if ( bpp == current->format->BitsPerPixel ) { | |
494 video = current; | |
495 } else { | |
496 switch (bpp) { | |
497 case 15: | |
498 case 16: | |
499 if ( DIB_SussScreenDepth() == 15 ) { | |
500 /* 5-5-5 */ | |
501 Rmask = 0x00007c00; | |
502 Gmask = 0x000003e0; | |
503 Bmask = 0x0000001f; | |
504 } else { | |
505 /* 5-6-5 */ | |
506 Rmask = 0x0000f800; | |
507 Gmask = 0x000007e0; | |
508 Bmask = 0x0000001f; | |
509 } | |
510 break; | |
511 case 24: | |
512 case 32: | |
513 /* GDI defined as 8-8-8 */ | |
514 Rmask = 0x00ff0000; | |
515 Gmask = 0x0000ff00; | |
516 Bmask = 0x000000ff; | |
517 break; | |
518 default: | |
519 Rmask = 0x00000000; | |
520 Gmask = 0x00000000; | |
521 Bmask = 0x00000000; | |
522 break; | |
523 } | |
524 video = SDL_CreateRGBSurface(SDL_SWSURFACE, | |
525 0, 0, bpp, Rmask, Gmask, Bmask, 0); | |
526 if ( video == NULL ) { | |
527 SDL_OutOfMemory(); | |
528 return(NULL); | |
529 } | |
530 } | |
531 | |
532 /* Fill in part of the video surface */ | |
533 prev_flags = video->flags; | |
534 video->flags = 0; /* Clear flags */ | |
535 video->w = width; | |
536 video->h = height; | |
537 video->pitch = SDL_CalculatePitch(video); | |
538 | |
1152
51a8702d8ecd
Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents:
1145
diff
changeset
|
539 /* 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
|
540 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
|
541 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
|
542 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
|
543 */ |
51a8702d8ecd
Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents:
1145
diff
changeset
|
544 SDL_VideoSurface = video; |
51a8702d8ecd
Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents:
1145
diff
changeset
|
545 |
51a8702d8ecd
Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents:
1145
diff
changeset
|
546 #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
|
547 if ( flags & SDL_FULLSCREEN ) |
514
1080bfc4aa96
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
548 video->flags |= SDL_FULLSCREEN; |
1080bfc4aa96
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
549 #endif |
1152
51a8702d8ecd
Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents:
1145
diff
changeset
|
550 |
0 | 551 #ifndef NO_CHANGEDISPLAYSETTINGS |
552 /* Set fullscreen mode if appropriate */ | |
553 if ( (flags & SDL_FULLSCREEN) == SDL_FULLSCREEN ) { | |
554 DEVMODE settings; | |
1295
c3e36ac8a94c
Date: Sun, 6 Mar 2005 17:06:20 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
1292
diff
changeset
|
555 BOOL changed; |
0 | 556 |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
557 SDL_memset(&settings, 0, sizeof(DEVMODE)); |
0 | 558 settings.dmSize = sizeof(DEVMODE); |
1465
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
559 |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
560 #ifdef _WIN32_WCE |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
561 // 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
|
562 if( this->hidden->supportRotation ) |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
563 { |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
564 DWORD rotation; |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
565 |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
566 // ask current mode |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
567 settings.dmFields = DM_DISPLAYORIENTATION; |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
568 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
|
569 rotation = settings.dmDisplayOrientation; |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
570 |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
571 if( (width > GetDeviceCaps(GetDC(NULL), HORZRES)) |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
572 && (height < GetDeviceCaps(GetDC(NULL), VERTRES))) |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
573 { |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
574 switch( rotation ) |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
575 { |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
576 case DMDO_0: |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
577 settings.dmDisplayOrientation = DMDO_90; |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
578 break; |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
579 case DMDO_270: |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
580 settings.dmDisplayOrientation = DMDO_180; |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
581 break; |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
582 } |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
583 if( settings.dmDisplayOrientation != rotation ) |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
584 { |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
585 // go to landscape |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
586 this->hidden->origRotation = rotation; |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
587 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
|
588 } |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
589 } |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
590 if( (width < GetDeviceCaps(GetDC(NULL), HORZRES)) |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
591 && (height > GetDeviceCaps(GetDC(NULL), VERTRES))) |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
592 { |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
593 switch( rotation ) |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
594 { |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
595 case DMDO_90: |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
596 settings.dmDisplayOrientation = DMDO_0; |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
597 break; |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
598 case DMDO_180: |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
599 settings.dmDisplayOrientation = DMDO_270; |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
600 break; |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
601 } |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
602 if( settings.dmDisplayOrientation != rotation ) |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
603 { |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
604 // go to portrait |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
605 this->hidden->origRotation = rotation; |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
606 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
|
607 } |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
608 } |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
609 |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
610 } |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
611 #endif |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
612 |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
613 #ifndef _WIN32_WCE |
0 | 614 settings.dmBitsPerPel = video->format->BitsPerPixel; |
615 settings.dmPelsWidth = width; | |
616 settings.dmPelsHeight = height; | |
617 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
|
618 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
|
619 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
|
620 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
|
621 settings.dmFields |= DM_DISPLAYFREQUENCY; |
c3e36ac8a94c
Date: Sun, 6 Mar 2005 17:06:20 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
1292
diff
changeset
|
622 } |
c3e36ac8a94c
Date: Sun, 6 Mar 2005 17:06:20 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
1292
diff
changeset
|
623 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
|
624 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
|
625 settings.dmFields &= ~DM_DISPLAYFREQUENCY; |
c3e36ac8a94c
Date: Sun, 6 Mar 2005 17:06:20 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
1292
diff
changeset
|
626 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
|
627 } |
1465
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
628 #else |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
629 changed = 1; |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
630 #endif |
1295
c3e36ac8a94c
Date: Sun, 6 Mar 2005 17:06:20 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
1292
diff
changeset
|
631 if ( changed ) { |
0 | 632 video->flags |= SDL_FULLSCREEN; |
304
ec53caed9fb2
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
252
diff
changeset
|
633 SDL_fullscreen_mode = settings; |
0 | 634 } |
1465
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
635 |
0 | 636 } |
637 #endif /* !NO_CHANGEDISPLAYSETTINGS */ | |
638 | |
45
60a6e045808e
Fix palette creation in windowed mode at 8 bpp
Sam Lantinga <slouken@lokigames.com>
parents:
36
diff
changeset
|
639 /* Reset the palette and create a new one if necessary */ |
60a6e045808e
Fix palette creation in windowed mode at 8 bpp
Sam Lantinga <slouken@lokigames.com>
parents:
36
diff
changeset
|
640 if ( screen_pal != NULL ) { |
60a6e045808e
Fix palette creation in windowed mode at 8 bpp
Sam Lantinga <slouken@lokigames.com>
parents:
36
diff
changeset
|
641 /* RJR: March 28, 2000 |
60a6e045808e
Fix palette creation in windowed mode at 8 bpp
Sam Lantinga <slouken@lokigames.com>
parents:
36
diff
changeset
|
642 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
|
643 DeleteObject(screen_pal); |
60a6e045808e
Fix palette creation in windowed mode at 8 bpp
Sam Lantinga <slouken@lokigames.com>
parents:
36
diff
changeset
|
644 screen_pal = NULL; |
60a6e045808e
Fix palette creation in windowed mode at 8 bpp
Sam Lantinga <slouken@lokigames.com>
parents:
36
diff
changeset
|
645 } |
60a6e045808e
Fix palette creation in windowed mode at 8 bpp
Sam Lantinga <slouken@lokigames.com>
parents:
36
diff
changeset
|
646 if ( bpp <= 8 ) |
60a6e045808e
Fix palette creation in windowed mode at 8 bpp
Sam Lantinga <slouken@lokigames.com>
parents:
36
diff
changeset
|
647 { |
60a6e045808e
Fix palette creation in windowed mode at 8 bpp
Sam Lantinga <slouken@lokigames.com>
parents:
36
diff
changeset
|
648 /* RJR: March 28, 2000 |
60a6e045808e
Fix palette creation in windowed mode at 8 bpp
Sam Lantinga <slouken@lokigames.com>
parents:
36
diff
changeset
|
649 create identity palette switching to a palettized mode */ |
60a6e045808e
Fix palette creation in windowed mode at 8 bpp
Sam Lantinga <slouken@lokigames.com>
parents:
36
diff
changeset
|
650 screen_pal = DIB_CreatePalette(bpp); |
60a6e045808e
Fix palette creation in windowed mode at 8 bpp
Sam Lantinga <slouken@lokigames.com>
parents:
36
diff
changeset
|
651 } |
60a6e045808e
Fix palette creation in windowed mode at 8 bpp
Sam Lantinga <slouken@lokigames.com>
parents:
36
diff
changeset
|
652 |
1480 | 653 style = GetWindowLong(SDL_Window, GWL_STYLE); |
0 | 654 style &= ~(resizestyle|WS_MAXIMIZE); |
655 if ( (video->flags & SDL_FULLSCREEN) == SDL_FULLSCREEN ) { | |
656 style &= ~windowstyle; | |
657 style |= directstyle; | |
658 } else { | |
659 #ifndef NO_CHANGEDISPLAYSETTINGS | |
660 if ( (prev_flags & SDL_FULLSCREEN) == SDL_FULLSCREEN ) { | |
661 ChangeDisplaySettings(NULL, 0); | |
662 } | |
663 #endif | |
664 if ( flags & SDL_NOFRAME ) { | |
665 style &= ~windowstyle; | |
666 style |= directstyle; | |
667 video->flags |= SDL_NOFRAME; | |
668 } else { | |
669 style &= ~directstyle; | |
670 style |= windowstyle; | |
671 if ( flags & SDL_RESIZABLE ) { | |
672 style |= resizestyle; | |
673 video->flags |= SDL_RESIZABLE; | |
674 } | |
675 } | |
453
a6fa62b1be09
Updated for embedded Visual C++ 4.0
Sam Lantinga <slouken@libsdl.org>
parents:
448
diff
changeset
|
676 #if WS_MAXIMIZE |
0 | 677 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
|
678 #endif |
0 | 679 } |
145
29a638dc26db
Applied David MacCormack's patch to fix SDL_WINDOWID on Windows,
Sam Lantinga <slouken@libsdl.org>
parents:
112
diff
changeset
|
680 |
448
323c766f5a46
Fullscreen windows are always topmost under Windows
Sam Lantinga <slouken@libsdl.org>
parents:
442
diff
changeset
|
681 /* 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
|
682 if ( !SDL_windowid ) |
1480 | 683 SetWindowLong(SDL_Window, GWL_STYLE, style); |
0 | 684 |
685 /* Delete the old bitmap if necessary */ | |
686 if ( screen_bmp != NULL ) { | |
687 DeleteObject(screen_bmp); | |
688 } | |
689 if ( ! (flags & SDL_OPENGL) ) { | |
690 BOOL is16bitmode = (video->format->BytesPerPixel == 2); | |
691 | |
692 /* Suss out the bitmap info header */ | |
693 binfo_size = sizeof(*binfo); | |
694 if( is16bitmode ) { | |
695 /* 16bit modes, palette area used for rgb bitmasks */ | |
696 binfo_size += 3*sizeof(DWORD); | |
697 } else if ( video->format->palette ) { | |
698 binfo_size += video->format->palette->ncolors * | |
699 sizeof(RGBQUAD); | |
700 } | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
701 binfo = (BITMAPINFO *)SDL_malloc(binfo_size); |
0 | 702 if ( ! binfo ) { |
703 if ( video != current ) { | |
704 SDL_FreeSurface(video); | |
705 } | |
706 SDL_OutOfMemory(); | |
707 return(NULL); | |
708 } | |
709 | |
710 binfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); | |
711 binfo->bmiHeader.biWidth = video->w; | |
712 binfo->bmiHeader.biHeight = -video->h; /* -ve for topdown bitmap */ | |
713 binfo->bmiHeader.biPlanes = 1; | |
714 binfo->bmiHeader.biSizeImage = video->h * video->pitch; | |
715 binfo->bmiHeader.biXPelsPerMeter = 0; | |
716 binfo->bmiHeader.biYPelsPerMeter = 0; | |
717 binfo->bmiHeader.biClrUsed = 0; | |
718 binfo->bmiHeader.biClrImportant = 0; | |
719 binfo->bmiHeader.biBitCount = video->format->BitsPerPixel; | |
720 | |
721 if ( is16bitmode ) { | |
722 /* BI_BITFIELDS tells CreateDIBSection about the rgb masks in the palette */ | |
723 binfo->bmiHeader.biCompression = BI_BITFIELDS; | |
724 ((Uint32*)binfo->bmiColors)[0] = video->format->Rmask; | |
725 ((Uint32*)binfo->bmiColors)[1] = video->format->Gmask; | |
726 ((Uint32*)binfo->bmiColors)[2] = video->format->Bmask; | |
727 } else { | |
728 binfo->bmiHeader.biCompression = BI_RGB; /* BI_BITFIELDS for 565 vs 555 */ | |
729 if ( video->format->palette ) { | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
730 SDL_memset(binfo->bmiColors, 0, |
0 | 731 video->format->palette->ncolors*sizeof(RGBQUAD)); |
732 } | |
733 } | |
734 | |
735 /* Create the offscreen bitmap buffer */ | |
736 hdc = GetDC(SDL_Window); | |
737 screen_bmp = CreateDIBSection(hdc, binfo, DIB_RGB_COLORS, | |
738 (void **)(&video->pixels), NULL, 0); | |
739 ReleaseDC(SDL_Window, hdc); | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
740 SDL_free(binfo); |
0 | 741 if ( screen_bmp == NULL ) { |
742 if ( video != current ) { | |
743 SDL_FreeSurface(video); | |
744 } | |
745 SDL_SetError("Couldn't create DIB section"); | |
746 return(NULL); | |
747 } | |
748 this->UpdateRects = DIB_NormalUpdate; | |
749 | |
750 /* Set video surface flags */ | |
751 if ( bpp <= 8 ) { | |
752 /* BitBlt() maps colors for us */ | |
753 video->flags |= SDL_HWPALETTE; | |
754 } | |
755 } | |
1465
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
756 #ifndef _WIN32_WCE |
0 | 757 /* 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
|
758 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
|
759 #else |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
760 if ( !SDL_windowid ) { |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
761 #endif |
448
323c766f5a46
Fullscreen windows are always topmost under Windows
Sam Lantinga <slouken@libsdl.org>
parents:
442
diff
changeset
|
762 HWND top; |
0 | 763 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
|
764 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
|
765 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
|
766 |
31fa08b36380
Added support for SDL_VIDEO_WINDOW_POS and SDL_VIDEO_CENTERED on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
766
diff
changeset
|
767 if ( !SDL_windowX && !SDL_windowY ) { |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
768 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
|
769 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
|
770 if ( window ) { |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
771 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
|
772 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
|
773 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
|
774 } |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
775 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
|
776 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
|
777 } |
31fa08b36380
Added support for SDL_VIDEO_WINDOW_POS and SDL_VIDEO_CENTERED on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
766
diff
changeset
|
778 } |
31fa08b36380
Added support for SDL_VIDEO_WINDOW_POS and SDL_VIDEO_CENTERED on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
766
diff
changeset
|
779 } |
31fa08b36380
Added support for SDL_VIDEO_WINDOW_POS and SDL_VIDEO_CENTERED on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
766
diff
changeset
|
780 swp_flags = (SWP_NOCOPYBITS | SWP_SHOWWINDOW); |
0 | 781 |
833
31fa08b36380
Added support for SDL_VIDEO_WINDOW_POS and SDL_VIDEO_CENTERED on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
766
diff
changeset
|
782 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
|
783 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
|
784 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
|
785 bounds.bottom = SDL_windowY+video->h; |
1480 | 786 AdjustWindowRectEx(&bounds, GetWindowLong(SDL_Window, GWL_STYLE), FALSE, 0); |
0 | 787 width = bounds.right-bounds.left; |
788 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
|
789 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
|
790 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
|
791 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
|
792 } else if ( center ) { |
96671ebc50a4
Date: Mon, 25 Oct 2004 17:30:06 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
966
diff
changeset
|
793 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
|
794 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
|
795 } 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
|
796 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
|
797 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
|
798 } else { |
31fa08b36380
Added support for SDL_VIDEO_WINDOW_POS and SDL_VIDEO_CENTERED on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
766
diff
changeset
|
799 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
|
800 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
|
801 } |
448
323c766f5a46
Fullscreen windows are always topmost under Windows
Sam Lantinga <slouken@libsdl.org>
parents:
442
diff
changeset
|
802 if ( flags & SDL_FULLSCREEN ) { |
323c766f5a46
Fullscreen windows are always topmost under Windows
Sam Lantinga <slouken@libsdl.org>
parents:
442
diff
changeset
|
803 top = HWND_TOPMOST; |
323c766f5a46
Fullscreen windows are always topmost under Windows
Sam Lantinga <slouken@libsdl.org>
parents:
442
diff
changeset
|
804 } else { |
323c766f5a46
Fullscreen windows are always topmost under Windows
Sam Lantinga <slouken@libsdl.org>
parents:
442
diff
changeset
|
805 top = HWND_NOTOPMOST; |
323c766f5a46
Fullscreen windows are always topmost under Windows
Sam Lantinga <slouken@libsdl.org>
parents:
442
diff
changeset
|
806 } |
323c766f5a46
Fullscreen windows are always topmost under Windows
Sam Lantinga <slouken@libsdl.org>
parents:
442
diff
changeset
|
807 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
|
808 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
|
809 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
|
810 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
|
811 } |
0 | 812 SetForegroundWindow(SDL_Window); |
813 } | |
1291
31331c444ea2
Only save the window position if we're in windowed mode
Sam Lantinga <slouken@libsdl.org>
parents:
1290
diff
changeset
|
814 SDL_resizing = 0; |
0 | 815 |
816 /* Set up for OpenGL */ | |
817 if ( flags & SDL_OPENGL ) { | |
818 if ( WIN_GL_SetupWindow(this) < 0 ) { | |
819 return(NULL); | |
820 } | |
821 video->flags |= SDL_OPENGL; | |
822 } | |
36
13ee9f4834ea
Windows CE patches contributed by Rainer Loritz
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
823 |
1523 | 824 /* JC 14 Mar 2006 |
825 Flush the message loop or this can cause big problems later | |
826 Especially if the user decides to use dialog boxes or assert()! | |
827 */ | |
828 WIN_FlushMessageQueue(); | |
829 | |
0 | 830 /* We're live! */ |
831 return(video); | |
832 } | |
833 | |
834 /* We don't actually allow hardware surfaces in the DIB driver */ | |
835 static int DIB_AllocHWSurface(_THIS, SDL_Surface *surface) | |
836 { | |
837 return(-1); | |
838 } | |
839 static void DIB_FreeHWSurface(_THIS, SDL_Surface *surface) | |
840 { | |
841 return; | |
842 } | |
843 static int DIB_LockHWSurface(_THIS, SDL_Surface *surface) | |
844 { | |
845 return(0); | |
846 } | |
847 static void DIB_UnlockHWSurface(_THIS, SDL_Surface *surface) | |
848 { | |
849 return; | |
850 } | |
851 | |
852 static void DIB_NormalUpdate(_THIS, int numrects, SDL_Rect *rects) | |
853 { | |
854 HDC hdc, mdc; | |
855 int i; | |
856 | |
857 hdc = GetDC(SDL_Window); | |
858 if ( screen_pal ) { | |
859 SelectPalette(hdc, screen_pal, FALSE); | |
860 } | |
861 mdc = CreateCompatibleDC(hdc); | |
862 SelectObject(mdc, screen_bmp); | |
863 for ( i=0; i<numrects; ++i ) { | |
864 BitBlt(hdc, rects[i].x, rects[i].y, rects[i].w, rects[i].h, | |
865 mdc, rects[i].x, rects[i].y, SRCCOPY); | |
866 } | |
867 DeleteDC(mdc); | |
868 ReleaseDC(SDL_Window, hdc); | |
869 } | |
870 | |
1251
86d0d01290ea
Updated Windows CE/PocketPC support...adds GAPI driver, landscape mode,
Ryan C. Gordon <icculus@icculus.org>
parents:
1152
diff
changeset
|
871 |
0 | 872 int DIB_SetColors(_THIS, int firstcolor, int ncolors, SDL_Color *colors) |
873 { | |
1292
59c7a470a51e
Fixed palette bug on non-WinCE
Sam Lantinga <slouken@libsdl.org>
parents:
1291
diff
changeset
|
874 #if !defined(_WIN32_WCE) || (_WIN32_WCE >= 400) |
59c7a470a51e
Fixed palette bug on non-WinCE
Sam Lantinga <slouken@libsdl.org>
parents:
1291
diff
changeset
|
875 HDC hdc, mdc; |
0 | 876 RGBQUAD *pal; |
1292
59c7a470a51e
Fixed palette bug on non-WinCE
Sam Lantinga <slouken@libsdl.org>
parents:
1291
diff
changeset
|
877 #else |
1251
86d0d01290ea
Updated Windows CE/PocketPC support...adds GAPI driver, landscape mode,
Ryan C. Gordon <icculus@icculus.org>
parents:
1152
diff
changeset
|
878 HDC hdc; |
36
13ee9f4834ea
Windows CE patches contributed by Rainer Loritz
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
879 #endif |
1292
59c7a470a51e
Fixed palette bug on non-WinCE
Sam Lantinga <slouken@libsdl.org>
parents:
1291
diff
changeset
|
880 int i; |
0 | 881 |
882 /* Update the display palette */ | |
883 hdc = GetDC(SDL_Window); | |
884 if ( screen_pal ) { | |
885 PALETTEENTRY *entries; | |
886 | |
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
|
887 entries = SDL_stack_alloc(PALETTEENTRY, ncolors); |
0 | 888 for ( i=0; i<ncolors; ++i ) { |
889 entries[i].peRed = colors[i].r; | |
890 entries[i].peGreen = colors[i].g; | |
891 entries[i].peBlue = colors[i].b; | |
892 entries[i].peFlags = PC_NOCOLLAPSE; | |
893 } | |
894 SetPaletteEntries(screen_pal, firstcolor, ncolors, entries); | |
895 SelectPalette(hdc, screen_pal, FALSE); | |
896 RealizePalette(hdc); | |
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
|
897 SDL_stack_free(entries); |
0 | 898 } |
899 | |
1292
59c7a470a51e
Fixed palette bug on non-WinCE
Sam Lantinga <slouken@libsdl.org>
parents:
1291
diff
changeset
|
900 #if !defined(_WIN32_WCE) || (_WIN32_WCE >= 400) |
0 | 901 /* 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
|
902 pal = SDL_stack_alloc(RGBQUAD, ncolors); |
0 | 903 for ( i=0; i<ncolors; ++i ) { |
904 pal[i].rgbRed = colors[i].r; | |
905 pal[i].rgbGreen = colors[i].g; | |
906 pal[i].rgbBlue = colors[i].b; | |
907 pal[i].rgbReserved = 0; | |
908 } | |
909 | |
910 /* Set the DIB palette and update the display */ | |
911 mdc = CreateCompatibleDC(hdc); | |
912 SelectObject(mdc, screen_bmp); | |
913 SetDIBColorTable(mdc, firstcolor, ncolors, pal); | |
914 BitBlt(hdc, 0, 0, this->screen->w, this->screen->h, | |
915 mdc, 0, 0, SRCCOPY); | |
916 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
|
917 SDL_stack_free(pal); |
36
13ee9f4834ea
Windows CE patches contributed by Rainer Loritz
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
918 #endif |
0 | 919 ReleaseDC(SDL_Window, hdc); |
920 return(1); | |
921 } | |
922 | |
1251
86d0d01290ea
Updated Windows CE/PocketPC support...adds GAPI driver, landscape mode,
Ryan C. Gordon <icculus@icculus.org>
parents:
1152
diff
changeset
|
923 |
0 | 924 static void DIB_CheckGamma(_THIS) |
925 { | |
926 #ifndef NO_GAMMA_SUPPORT | |
927 HDC hdc; | |
928 WORD ramp[3*256]; | |
929 | |
930 /* If we fail to get gamma, disable gamma control */ | |
931 hdc = GetDC(SDL_Window); | |
932 if ( ! GetDeviceGammaRamp(hdc, ramp) ) { | |
933 this->GetGammaRamp = NULL; | |
934 this->SetGammaRamp = NULL; | |
935 } | |
936 ReleaseDC(SDL_Window, hdc); | |
937 #endif /* !NO_GAMMA_SUPPORT */ | |
938 } | |
338
518ffd98a8f6
Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents:
304
diff
changeset
|
939 void DIB_SwapGamma(_THIS) |
0 | 940 { |
941 #ifndef NO_GAMMA_SUPPORT | |
942 HDC hdc; | |
943 | |
944 if ( gamma_saved ) { | |
945 hdc = GetDC(SDL_Window); | |
946 if ( SDL_GetAppState() & SDL_APPINPUTFOCUS ) { | |
947 /* About to leave active state, restore gamma */ | |
948 SetDeviceGammaRamp(hdc, gamma_saved); | |
949 } else { | |
950 /* About to enter active state, set game gamma */ | |
951 GetDeviceGammaRamp(hdc, gamma_saved); | |
952 SetDeviceGammaRamp(hdc, this->gamma); | |
953 } | |
954 ReleaseDC(SDL_Window, hdc); | |
955 } | |
956 #endif /* !NO_GAMMA_SUPPORT */ | |
957 } | |
338
518ffd98a8f6
Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents:
304
diff
changeset
|
958 void DIB_QuitGamma(_THIS) |
0 | 959 { |
960 #ifndef NO_GAMMA_SUPPORT | |
961 if ( gamma_saved ) { | |
962 /* Restore the original gamma if necessary */ | |
963 if ( SDL_GetAppState() & SDL_APPINPUTFOCUS ) { | |
964 HDC hdc; | |
965 | |
966 hdc = GetDC(SDL_Window); | |
967 SetDeviceGammaRamp(hdc, gamma_saved); | |
968 ReleaseDC(SDL_Window, hdc); | |
969 } | |
970 | |
971 /* Free the saved gamma memory */ | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
972 SDL_free(gamma_saved); |
0 | 973 gamma_saved = 0; |
974 } | |
975 #endif /* !NO_GAMMA_SUPPORT */ | |
976 } | |
977 | |
338
518ffd98a8f6
Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents:
304
diff
changeset
|
978 int DIB_SetGammaRamp(_THIS, Uint16 *ramp) |
0 | 979 { |
338
518ffd98a8f6
Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents:
304
diff
changeset
|
980 #ifdef NO_GAMMA_SUPPORT |
518ffd98a8f6
Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents:
304
diff
changeset
|
981 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
|
982 return -1; |
518ffd98a8f6
Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents:
304
diff
changeset
|
983 #else |
0 | 984 HDC hdc; |
985 BOOL succeeded; | |
986 | |
987 /* Set the ramp for the display */ | |
988 if ( ! gamma_saved ) { | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
989 gamma_saved = (WORD *)SDL_malloc(3*256*sizeof(*gamma_saved)); |
0 | 990 if ( ! gamma_saved ) { |
991 SDL_OutOfMemory(); | |
992 return -1; | |
993 } | |
994 hdc = GetDC(SDL_Window); | |
995 GetDeviceGammaRamp(hdc, gamma_saved); | |
996 ReleaseDC(SDL_Window, hdc); | |
997 } | |
998 if ( SDL_GetAppState() & SDL_APPINPUTFOCUS ) { | |
999 hdc = GetDC(SDL_Window); | |
1000 succeeded = SetDeviceGammaRamp(hdc, ramp); | |
1001 ReleaseDC(SDL_Window, hdc); | |
1002 } else { | |
1003 succeeded = TRUE; | |
1004 } | |
1005 return succeeded ? 0 : -1; | |
338
518ffd98a8f6
Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents:
304
diff
changeset
|
1006 #endif /* !NO_GAMMA_SUPPORT */ |
0 | 1007 } |
1008 | |
338
518ffd98a8f6
Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents:
304
diff
changeset
|
1009 int DIB_GetGammaRamp(_THIS, Uint16 *ramp) |
0 | 1010 { |
338
518ffd98a8f6
Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents:
304
diff
changeset
|
1011 #ifdef NO_GAMMA_SUPPORT |
518ffd98a8f6
Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents:
304
diff
changeset
|
1012 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
|
1013 return -1; |
518ffd98a8f6
Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents:
304
diff
changeset
|
1014 #else |
0 | 1015 HDC hdc; |
1016 BOOL succeeded; | |
1017 | |
1018 /* Get the ramp from the display */ | |
1019 hdc = GetDC(SDL_Window); | |
1020 succeeded = GetDeviceGammaRamp(hdc, ramp); | |
1021 ReleaseDC(SDL_Window, hdc); | |
1022 return succeeded ? 0 : -1; | |
338
518ffd98a8f6
Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents:
304
diff
changeset
|
1023 #endif /* !NO_GAMMA_SUPPORT */ |
0 | 1024 } |
1025 | |
1026 void DIB_VideoQuit(_THIS) | |
1027 { | |
1028 /* Destroy the window and everything associated with it */ | |
1029 if ( SDL_Window ) { | |
1030 /* Delete the screen bitmap (also frees screen->pixels) */ | |
1031 if ( this->screen ) { | |
1032 #ifndef NO_CHANGEDISPLAYSETTINGS | |
1033 if ( this->screen->flags & SDL_FULLSCREEN ) { | |
1034 ChangeDisplaySettings(NULL, 0); | |
376
a5f60a847a89
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
374
diff
changeset
|
1035 ShowWindow(SDL_Window, SW_HIDE); |
0 | 1036 } |
1037 #endif | |
1038 if ( this->screen->flags & SDL_OPENGL ) { | |
1039 WIN_GL_ShutDown(this); | |
1040 } | |
1041 this->screen->pixels = NULL; | |
1042 } | |
1043 if ( screen_bmp ) { | |
1044 DeleteObject(screen_bmp); | |
1045 screen_bmp = NULL; | |
1046 } | |
1047 if ( screen_icn ) { | |
1048 DestroyIcon(screen_icn); | |
1049 screen_icn = NULL; | |
1050 } | |
1051 DIB_QuitGamma(this); | |
1052 DIB_DestroyWindow(this); | |
1053 | |
1054 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
|
1055 |
51a8702d8ecd
Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents:
1145
diff
changeset
|
1056 #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
|
1057 |
51a8702d8ecd
Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents:
1145
diff
changeset
|
1058 // 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
|
1059 if( aygshell ) |
51a8702d8ecd
Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents:
1145
diff
changeset
|
1060 { |
51a8702d8ecd
Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents:
1145
diff
changeset
|
1061 FreeLibrary(aygshell); |
51a8702d8ecd
Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents:
1145
diff
changeset
|
1062 aygshell = NULL; |
51a8702d8ecd
Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents:
1145
diff
changeset
|
1063 } |
51a8702d8ecd
Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents:
1145
diff
changeset
|
1064 #endif |
51a8702d8ecd
Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents:
1145
diff
changeset
|
1065 |
0 | 1066 } |
1067 } | |
1068 | |
1069 /* Exported for the windows message loop only */ | |
1070 static void DIB_FocusPalette(_THIS, int foreground) | |
1071 { | |
1072 if ( screen_pal != NULL ) { | |
1073 HDC hdc; | |
1074 | |
1075 hdc = GetDC(SDL_Window); | |
1076 SelectPalette(hdc, screen_pal, FALSE); | |
1077 if ( RealizePalette(hdc) ) | |
1078 InvalidateRect(SDL_Window, NULL, FALSE); | |
1079 ReleaseDC(SDL_Window, hdc); | |
1080 } | |
1081 } | |
1082 static void DIB_RealizePalette(_THIS) | |
1083 { | |
1084 DIB_FocusPalette(this, 1); | |
1085 } | |
1086 static void DIB_PaletteChanged(_THIS, HWND window) | |
1087 { | |
1088 if ( window != SDL_Window ) { | |
1089 DIB_FocusPalette(this, 0); | |
1090 } | |
1091 } | |
1092 | |
1093 /* Exported for the windows message loop only */ | |
1094 static void DIB_WinPAINT(_THIS, HDC hdc) | |
1095 { | |
1096 HDC mdc; | |
1097 | |
1098 if ( screen_pal ) { | |
1099 SelectPalette(hdc, screen_pal, FALSE); | |
1100 } | |
1101 mdc = CreateCompatibleDC(hdc); | |
1102 SelectObject(mdc, screen_bmp); | |
1103 BitBlt(hdc, 0, 0, SDL_VideoSurface->w, SDL_VideoSurface->h, | |
1104 mdc, 0, 0, SRCCOPY); | |
1105 DeleteDC(mdc); | |
1106 } | |
1107 | |
1108 /* 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
|
1109 #if !SDL_AUDIO_DRIVER_DSOUND |
0 | 1110 void DX5_SoundFocus(HWND hwnd) |
1111 { | |
1112 return; | |
1113 } | |
1114 #endif |