Mercurial > sdl-ios-xcode
annotate src/video/windib/SDL_dibvideo.c @ 4139:568c9b3c0167 SDL-1.2
* Added configure option --enable-screensaver, to allow enabling the screensaver by default.
* Use XResetScreenSaver() instead of disabling screensaver entirely.
Full discussion summary from Erik on the SDL mailing list:
Current behaviour
=================
SDL changes the user's display power management settings without
permission from the user and without telling the user.
The interface that it uses to do so is DPMSDisable/DPMSEnable, which
should only ever be used by configuration utilities like KControl, never
by normal application programs, let alone by the libraries that they
use. Using an interface that is not at all intended for what SDL tries
to achieve means that it will not work as it should. Firstly, the power
management is completely disabled during the whole lifetime of the SDL
program, not only when it should be. Secondly, it makes SDL
non-reentrant, meaning that things will break when multiple SDL programs
are clients of the same X server simultaneously. Thirdly, no cleanup
mechanism ensures that the setting is restored if the client does not do
that (for example if it crashes).
In addition to that, this interface is broken on xorg,
[http://bugs.freedesktop.org/show_bug.cgi?id=13962], so what SDL tries
to do does not work at all on that implementation of the X Window
System. (The reason that the DPMSEnable works in KControl is that it
calls DPMSSetTimeout immediately after,
[http://websvn.kde.org/tags/KDE/3.5.9/kdebase/kcontrol/energy/energy.cpp?annotate=774532#l343]).
The problems that the current behaviour causes
==============================================
1. Information leak. When the user is away, someone might see what the
user has on the display when the user counts on the screensaver
preventing this. This does not even require physical access to the
workstation, it is enough to see it from a distance.
2. Draining battery. An SDL program that runs on a laptop will quickly
drain the battery while the user is away. The system will soon shut down
and require recharging before being usable again, while it should in
fact have consumed very little energy if the user's settings would have
been obeyed.
3. Wasting energy. Even if battery issues are not considered, energy as
such is wasted.
4. Display wear. The display may be worn out.
The problems that the current behaviour tries to solve
======================================================
1. Preventing screensaver while playing movies.
Many SDL applications are media players. They have reasons to prevent
screensavers from being activated while a movie is being played. When a
user clicks on the play button it can be interpreted as saying "play
this movie, but do not turn off the display while playing it, because I
will watch it even though I do not interact with the system".
2. Preventing screensaver when some input bypasses X.
Sometimes SDL uses input from another source than the X server, so
that the X server is bypassed. This obviously breaks the screensaver
handling. SDL tries to work around that.
3. Preventing screensaver when all input bypasses X.
There is something called Direct Graphics Access mode, where a
program takes control of both the display and the input devices from the
X server. This obviously means that the X server can not handle the
screensaver alone, since screensaver handling depends on input handling.
SDL does not do what it should to help the X server to handle the
screensaver. Nor does SDL take care of screeensaver handling itself. SDL
simply disables the screensaver completely.
How the problems should be solved
=================================
The correct way for an application program to prevent the screensaver
under X is to call XResetScreenSaver. This was recently discovered and
implemented by the mplayer developers,
[http://svn.mplayerhq.hu/mplayer?view=rev&revision=25637]. SDL needs to
wrap this in an API call (SDL_ResetScreenSaver) and implement it for the
other video targets (if they do not have a corresponding call, SDL
should do what it takes on that particular target, for example sending
fake key events).
1. When a movie is played, the player should reset the screensaver when
the animation is advanced to a new frame. The same applies to anything
similar, like slideshows.
2. When the X server is handling input, it must handle all input
(keyboards, mice, gamepads, ...). This is necessary, not only to be able
to handle the screensaver, but also so that it can send the events to
the correct (the currently active) client. If there is an input device
that the X server can not handle for some reason (such as lack of Plug
and Play capability), the program that handles the device as a
workaround must simulate what would happen if the X server would have
handled the device, by calling XResetScreenSaver when input is received
from the device.
3. When the X server is not handling the input, it depends on the
program that does to call XResetScreenSaver whenever an input event
occurs. Alternatively the program must handle the screensaver countdown
internally and call XActivateScreenSaver.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Fri, 29 Feb 2008 13:55:44 +0000 |
parents | 8797fa6e2fb2 |
children | 73e7e7f5b5a1 |
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 | |
4134
31c7c57af8a4
Updates for building on Windows CE using mingw32ce cross compiler:
Sam Lantinga <slouken@libsdl.org>
parents:
4099
diff
changeset
|
44 |
31c7c57af8a4
Updates for building on Windows CE using mingw32ce cross compiler:
Sam Lantinga <slouken@libsdl.org>
parents:
4099
diff
changeset
|
45 #ifndef DM_DISPLAYORIENTATION |
31c7c57af8a4
Updates for building on Windows CE using mingw32ce cross compiler:
Sam Lantinga <slouken@libsdl.org>
parents:
4099
diff
changeset
|
46 #define DM_DISPLAYORIENTATION 0x00800000L |
31c7c57af8a4
Updates for building on Windows CE using mingw32ce cross compiler:
Sam Lantinga <slouken@libsdl.org>
parents:
4099
diff
changeset
|
47 #endif |
31c7c57af8a4
Updates for building on Windows CE using mingw32ce cross compiler:
Sam Lantinga <slouken@libsdl.org>
parents:
4099
diff
changeset
|
48 #ifndef DM_DISPLAYQUERYORIENTATION |
31c7c57af8a4
Updates for building on Windows CE using mingw32ce cross compiler:
Sam Lantinga <slouken@libsdl.org>
parents:
4099
diff
changeset
|
49 #define DM_DISPLAYQUERYORIENTATION 0x01000000L |
31c7c57af8a4
Updates for building on Windows CE using mingw32ce cross compiler:
Sam Lantinga <slouken@libsdl.org>
parents:
4099
diff
changeset
|
50 #endif |
31c7c57af8a4
Updates for building on Windows CE using mingw32ce cross compiler:
Sam Lantinga <slouken@libsdl.org>
parents:
4099
diff
changeset
|
51 #ifndef DMDO_0 |
31c7c57af8a4
Updates for building on Windows CE using mingw32ce cross compiler:
Sam Lantinga <slouken@libsdl.org>
parents:
4099
diff
changeset
|
52 #define DMDO_0 0 |
31c7c57af8a4
Updates for building on Windows CE using mingw32ce cross compiler:
Sam Lantinga <slouken@libsdl.org>
parents:
4099
diff
changeset
|
53 #endif |
31c7c57af8a4
Updates for building on Windows CE using mingw32ce cross compiler:
Sam Lantinga <slouken@libsdl.org>
parents:
4099
diff
changeset
|
54 #ifndef DMDO_90 |
31c7c57af8a4
Updates for building on Windows CE using mingw32ce cross compiler:
Sam Lantinga <slouken@libsdl.org>
parents:
4099
diff
changeset
|
55 #define DMDO_90 1 |
31c7c57af8a4
Updates for building on Windows CE using mingw32ce cross compiler:
Sam Lantinga <slouken@libsdl.org>
parents:
4099
diff
changeset
|
56 #endif |
31c7c57af8a4
Updates for building on Windows CE using mingw32ce cross compiler:
Sam Lantinga <slouken@libsdl.org>
parents:
4099
diff
changeset
|
57 #ifndef DMDO_180 |
31c7c57af8a4
Updates for building on Windows CE using mingw32ce cross compiler:
Sam Lantinga <slouken@libsdl.org>
parents:
4099
diff
changeset
|
58 #define DMDO_180 2 |
31c7c57af8a4
Updates for building on Windows CE using mingw32ce cross compiler:
Sam Lantinga <slouken@libsdl.org>
parents:
4099
diff
changeset
|
59 #endif |
31c7c57af8a4
Updates for building on Windows CE using mingw32ce cross compiler:
Sam Lantinga <slouken@libsdl.org>
parents:
4099
diff
changeset
|
60 #ifndef DMDO_270 |
31c7c57af8a4
Updates for building on Windows CE using mingw32ce cross compiler:
Sam Lantinga <slouken@libsdl.org>
parents:
4099
diff
changeset
|
61 #define DMDO_270 4 |
31c7c57af8a4
Updates for building on Windows CE using mingw32ce cross compiler:
Sam Lantinga <slouken@libsdl.org>
parents:
4099
diff
changeset
|
62 #endif |
31c7c57af8a4
Updates for building on Windows CE using mingw32ce cross compiler:
Sam Lantinga <slouken@libsdl.org>
parents:
4099
diff
changeset
|
63 |
0 | 64 #define NO_GETDIBITS |
65 #define NO_GAMMA_SUPPORT | |
1465
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
66 #if _WIN32_WCE < 420 |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
67 #define NO_CHANGEDISPLAYSETTINGS |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
68 #else |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
69 #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
|
70 #endif |
0 | 71 #endif |
453
a6fa62b1be09
Updated for embedded Visual C++ 4.0
Sam Lantinga <slouken@libsdl.org>
parents:
448
diff
changeset
|
72 #ifndef WS_MAXIMIZE |
766
ed57c876700d
Date: Wed, 26 Nov 2003 01:52:02 +0800
Sam Lantinga <slouken@libsdl.org>
parents:
515
diff
changeset
|
73 #define WS_MAXIMIZE 0 |
ed57c876700d
Date: Wed, 26 Nov 2003 01:52:02 +0800
Sam Lantinga <slouken@libsdl.org>
parents:
515
diff
changeset
|
74 #endif |
ed57c876700d
Date: Wed, 26 Nov 2003 01:52:02 +0800
Sam Lantinga <slouken@libsdl.org>
parents:
515
diff
changeset
|
75 #ifndef WS_THICKFRAME |
ed57c876700d
Date: Wed, 26 Nov 2003 01:52:02 +0800
Sam Lantinga <slouken@libsdl.org>
parents:
515
diff
changeset
|
76 #define WS_THICKFRAME 0 |
453
a6fa62b1be09
Updated for embedded Visual C++ 4.0
Sam Lantinga <slouken@libsdl.org>
parents:
448
diff
changeset
|
77 #endif |
a6fa62b1be09
Updated for embedded Visual C++ 4.0
Sam Lantinga <slouken@libsdl.org>
parents:
448
diff
changeset
|
78 #ifndef SWP_NOCOPYBITS |
a6fa62b1be09
Updated for embedded Visual C++ 4.0
Sam Lantinga <slouken@libsdl.org>
parents:
448
diff
changeset
|
79 #define SWP_NOCOPYBITS 0 |
a6fa62b1be09
Updated for embedded Visual C++ 4.0
Sam Lantinga <slouken@libsdl.org>
parents:
448
diff
changeset
|
80 #endif |
a6fa62b1be09
Updated for embedded Visual C++ 4.0
Sam Lantinga <slouken@libsdl.org>
parents:
448
diff
changeset
|
81 #ifndef PC_NOCOLLAPSE |
a6fa62b1be09
Updated for embedded Visual C++ 4.0
Sam Lantinga <slouken@libsdl.org>
parents:
448
diff
changeset
|
82 #define PC_NOCOLLAPSE 0 |
a6fa62b1be09
Updated for embedded Visual C++ 4.0
Sam Lantinga <slouken@libsdl.org>
parents:
448
diff
changeset
|
83 #endif |
0 | 84 |
1465
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
85 #ifdef _WIN32_WCE |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
86 // 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
|
87 extern HINSTANCE aygshell; |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
88 #endif |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
89 |
0 | 90 /* Initialization/Query functions */ |
91 static int DIB_VideoInit(_THIS, SDL_PixelFormat *vformat); | |
92 static SDL_Rect **DIB_ListModes(_THIS, SDL_PixelFormat *format, Uint32 flags); | |
93 SDL_Surface *DIB_SetVideoMode(_THIS, SDL_Surface *current, int width, int height, int bpp, Uint32 flags); | |
94 static int DIB_SetColors(_THIS, int firstcolor, int ncolors, | |
95 SDL_Color *colors); | |
96 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
|
97 void DIB_SwapGamma(_THIS); |
518ffd98a8f6
Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents:
304
diff
changeset
|
98 void DIB_QuitGamma(_THIS); |
518ffd98a8f6
Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents:
304
diff
changeset
|
99 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
|
100 int DIB_GetGammaRamp(_THIS, Uint16 *ramp); |
0 | 101 static void DIB_VideoQuit(_THIS); |
102 | |
103 /* Hardware surface functions */ | |
104 static int DIB_AllocHWSurface(_THIS, SDL_Surface *surface); | |
105 static int DIB_LockHWSurface(_THIS, SDL_Surface *surface); | |
106 static void DIB_UnlockHWSurface(_THIS, SDL_Surface *surface); | |
107 static void DIB_FreeHWSurface(_THIS, SDL_Surface *surface); | |
108 | |
109 /* Windows message handling functions */ | |
3992 | 110 static void DIB_GrabStaticColors(HWND window); |
111 static void DIB_ReleaseStaticColors(HWND window); | |
112 static void DIB_Activate(_THIS, BOOL active, BOOL minimized); | |
0 | 113 static void DIB_RealizePalette(_THIS); |
114 static void DIB_PaletteChanged(_THIS, HWND window); | |
115 static void DIB_WinPAINT(_THIS, HDC hdc); | |
116 | |
117 /* helper fn */ | |
118 static int DIB_SussScreenDepth(); | |
119 | |
120 /* DIB driver bootstrap functions */ | |
121 | |
122 static int DIB_Available(void) | |
123 { | |
124 return(1); | |
125 } | |
126 | |
127 static void DIB_DeleteDevice(SDL_VideoDevice *device) | |
128 { | |
129 if ( device ) { | |
130 if ( device->hidden ) { | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
131 SDL_free(device->hidden); |
0 | 132 } |
133 if ( device->gl_data ) { | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
134 SDL_free(device->gl_data); |
0 | 135 } |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
136 SDL_free(device); |
0 | 137 } |
138 } | |
139 | |
140 static SDL_VideoDevice *DIB_CreateDevice(int devindex) | |
141 { | |
142 SDL_VideoDevice *device; | |
143 | |
144 /* 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
|
145 device = (SDL_VideoDevice *)SDL_malloc(sizeof(SDL_VideoDevice)); |
0 | 146 if ( device ) { |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
147 SDL_memset(device, 0, (sizeof *device)); |
0 | 148 device->hidden = (struct SDL_PrivateVideoData *) |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
149 SDL_malloc((sizeof *device->hidden)); |
0 | 150 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
|
151 SDL_malloc((sizeof *device->gl_data)); |
0 | 152 } |
153 if ( (device == NULL) || (device->hidden == NULL) || | |
154 (device->gl_data == NULL) ) { | |
155 SDL_OutOfMemory(); | |
156 DIB_DeleteDevice(device); | |
157 return(NULL); | |
158 } | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
159 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
|
160 SDL_memset(device->gl_data, 0, (sizeof *device->gl_data)); |
0 | 161 |
162 /* Set the function pointers */ | |
163 device->VideoInit = DIB_VideoInit; | |
164 device->ListModes = DIB_ListModes; | |
165 device->SetVideoMode = DIB_SetVideoMode; | |
166 device->UpdateMouse = WIN_UpdateMouse; | |
167 device->SetColors = DIB_SetColors; | |
168 device->UpdateRects = NULL; | |
169 device->VideoQuit = DIB_VideoQuit; | |
170 device->AllocHWSurface = DIB_AllocHWSurface; | |
171 device->CheckHWBlit = NULL; | |
172 device->FillHWRect = NULL; | |
173 device->SetHWColorKey = NULL; | |
174 device->SetHWAlpha = NULL; | |
175 device->LockHWSurface = DIB_LockHWSurface; | |
176 device->UnlockHWSurface = DIB_UnlockHWSurface; | |
177 device->FlipHWSurface = NULL; | |
178 device->FreeHWSurface = DIB_FreeHWSurface; | |
179 device->SetGammaRamp = DIB_SetGammaRamp; | |
180 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
|
181 #if SDL_VIDEO_OPENGL |
453
a6fa62b1be09
Updated for embedded Visual C++ 4.0
Sam Lantinga <slouken@libsdl.org>
parents:
448
diff
changeset
|
182 device->GL_LoadLibrary = WIN_GL_LoadLibrary; |
a6fa62b1be09
Updated for embedded Visual C++ 4.0
Sam Lantinga <slouken@libsdl.org>
parents:
448
diff
changeset
|
183 device->GL_GetProcAddress = WIN_GL_GetProcAddress; |
a6fa62b1be09
Updated for embedded Visual C++ 4.0
Sam Lantinga <slouken@libsdl.org>
parents:
448
diff
changeset
|
184 device->GL_GetAttribute = WIN_GL_GetAttribute; |
a6fa62b1be09
Updated for embedded Visual C++ 4.0
Sam Lantinga <slouken@libsdl.org>
parents:
448
diff
changeset
|
185 device->GL_MakeCurrent = WIN_GL_MakeCurrent; |
a6fa62b1be09
Updated for embedded Visual C++ 4.0
Sam Lantinga <slouken@libsdl.org>
parents:
448
diff
changeset
|
186 device->GL_SwapBuffers = WIN_GL_SwapBuffers; |
0 | 187 #endif |
188 device->SetCaption = WIN_SetWMCaption; | |
189 device->SetIcon = WIN_SetWMIcon; | |
190 device->IconifyWindow = WIN_IconifyWindow; | |
191 device->GrabInput = WIN_GrabInput; | |
192 device->GetWMInfo = WIN_GetWMInfo; | |
193 device->FreeWMCursor = WIN_FreeWMCursor; | |
194 device->CreateWMCursor = WIN_CreateWMCursor; | |
195 device->ShowWMCursor = WIN_ShowWMCursor; | |
196 device->WarpWMCursor = WIN_WarpWMCursor; | |
197 device->CheckMouseMode = WIN_CheckMouseMode; | |
198 device->InitOSKeymap = DIB_InitOSKeymap; | |
199 device->PumpEvents = DIB_PumpEvents; | |
200 | |
201 /* Set up the windows message handling functions */ | |
3992 | 202 WIN_Activate = DIB_Activate; |
0 | 203 WIN_RealizePalette = DIB_RealizePalette; |
204 WIN_PaletteChanged = DIB_PaletteChanged; | |
205 WIN_WinPAINT = DIB_WinPAINT; | |
206 HandleMessage = DIB_HandleMessage; | |
207 | |
208 device->free = DIB_DeleteDevice; | |
209 | |
210 /* We're finally ready */ | |
211 return device; | |
212 } | |
213 | |
214 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
|
215 "windib", "Win95/98/NT/2000/CE GDI", |
0 | 216 DIB_Available, DIB_CreateDevice |
217 }; | |
218 | |
219 static int cmpmodes(const void *va, const void *vb) | |
220 { | |
221 SDL_Rect *a = *(SDL_Rect **)va; | |
222 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
|
223 if ( a->w == b->w ) |
f72cc0c7305f
Video modes are sorted width first, then height
Sam Lantinga <slouken@libsdl.org>
parents:
833
diff
changeset
|
224 return b->h - a->h; |
f72cc0c7305f
Video modes are sorted width first, then height
Sam Lantinga <slouken@libsdl.org>
parents:
833
diff
changeset
|
225 else |
f72cc0c7305f
Video modes are sorted width first, then height
Sam Lantinga <slouken@libsdl.org>
parents:
833
diff
changeset
|
226 return b->w - a->w; |
0 | 227 } |
228 | |
229 static int DIB_AddMode(_THIS, int bpp, int w, int h) | |
230 { | |
231 SDL_Rect *mode; | |
232 int i, index; | |
233 int next_mode; | |
234 | |
235 /* 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
|
236 if ( bpp < 8 || bpp > 32 ) { /* Not supported */ |
0 | 237 return(0); |
238 } | |
239 index = ((bpp+7)/8)-1; | |
240 for ( i=0; i<SDL_nummodes[index]; ++i ) { | |
241 mode = SDL_modelist[index][i]; | |
242 if ( (mode->w == w) && (mode->h == h) ) { | |
243 return(0); | |
244 } | |
245 } | |
246 | |
247 /* 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
|
248 mode = (SDL_Rect *)SDL_malloc(sizeof *mode); |
0 | 249 if ( mode == NULL ) { |
250 SDL_OutOfMemory(); | |
251 return(-1); | |
252 } | |
253 mode->x = 0; | |
254 mode->y = 0; | |
255 mode->w = w; | |
256 mode->h = h; | |
257 | |
258 /* Allocate the new list of modes, and fill in the new mode */ | |
259 next_mode = SDL_nummodes[index]; | |
260 SDL_modelist[index] = (SDL_Rect **) | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
261 SDL_realloc(SDL_modelist[index], (1+next_mode+1)*sizeof(SDL_Rect *)); |
0 | 262 if ( SDL_modelist[index] == NULL ) { |
263 SDL_OutOfMemory(); | |
264 SDL_nummodes[index] = 0; | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
265 SDL_free(mode); |
0 | 266 return(-1); |
267 } | |
268 SDL_modelist[index][next_mode] = mode; | |
269 SDL_modelist[index][next_mode+1] = NULL; | |
270 SDL_nummodes[index]++; | |
271 | |
272 return(0); | |
273 } | |
274 | |
3992 | 275 static void DIB_CreatePalette(_THIS, int bpp) |
0 | 276 { |
277 /* RJR: March 28, 2000 | |
278 moved palette creation here from "DIB_VideoInit" */ | |
279 | |
3992 | 280 LOGPALETTE *palette; |
281 HDC hdc; | |
282 int ncolors; | |
0 | 283 |
3992 | 284 ncolors = (1 << bpp); |
285 palette = (LOGPALETTE *)SDL_malloc(sizeof(*palette)+ | |
286 ncolors*sizeof(PALETTEENTRY)); | |
287 palette->palVersion = 0x300; | |
288 palette->palNumEntries = ncolors; | |
289 hdc = GetDC(SDL_Window); | |
290 GetSystemPaletteEntries(hdc, 0, ncolors, palette->palPalEntry); | |
291 ReleaseDC(SDL_Window, hdc); | |
292 screen_pal = CreatePalette(palette); | |
293 screen_logpal = palette; | |
0 | 294 } |
295 | |
296 int DIB_VideoInit(_THIS, SDL_PixelFormat *vformat) | |
297 { | |
3981
b0d021cf41b6
windib target can now control screensaver with SDL_VIDEO_ALLOW_SCREENSAVER.
Ryan C. Gordon <icculus@icculus.org>
parents:
3976
diff
changeset
|
298 const char *env = NULL; |
0 | 299 #ifndef NO_CHANGEDISPLAYSETTINGS |
300 int i; | |
301 DEVMODE settings; | |
302 #endif | |
303 | |
304 /* Create the window */ | |
305 if ( DIB_CreateWindow(this) < 0 ) { | |
306 return(-1); | |
307 } | |
1523 | 308 |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
309 #if !SDL_AUDIO_DISABLED |
0 | 310 DX5_SoundFocus(SDL_Window); |
169
8039a5b760b9
Allow building SDL on Windows without audio support
Sam Lantinga <slouken@libsdl.org>
parents:
145
diff
changeset
|
311 #endif |
0 | 312 |
313 /* Determine the screen depth */ | |
314 vformat->BitsPerPixel = DIB_SussScreenDepth(); | |
315 switch (vformat->BitsPerPixel) { | |
316 case 15: | |
317 vformat->Rmask = 0x00007c00; | |
318 vformat->Gmask = 0x000003e0; | |
319 vformat->Bmask = 0x0000001f; | |
320 vformat->BitsPerPixel = 16; | |
321 break; | |
322 case 16: | |
323 vformat->Rmask = 0x0000f800; | |
324 vformat->Gmask = 0x000007e0; | |
325 vformat->Bmask = 0x0000001f; | |
326 break; | |
327 case 24: | |
328 case 32: | |
329 /* GDI defined as 8-8-8 */ | |
330 vformat->Rmask = 0x00ff0000; | |
331 vformat->Gmask = 0x0000ff00; | |
332 vformat->Bmask = 0x000000ff; | |
333 break; | |
334 default: | |
335 break; | |
336 } | |
337 | |
338 /* See if gamma is supported on this screen */ | |
339 DIB_CheckGamma(this); | |
340 | |
341 #ifndef NO_CHANGEDISPLAYSETTINGS | |
1465
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
342 |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
343 settings.dmSize = sizeof(DEVMODE); |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
344 settings.dmDriverExtra = 0; |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
345 #ifdef _WIN32_WCE |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
346 settings.dmFields = DM_DISPLAYQUERYORIENTATION; |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
347 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
|
348 #endif |
1295
c3e36ac8a94c
Date: Sun, 6 Mar 2005 17:06:20 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
1292
diff
changeset
|
349 /* Query for the desktop resolution */ |
c3e36ac8a94c
Date: Sun, 6 Mar 2005 17:06:20 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
1292
diff
changeset
|
350 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
|
351 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
|
352 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
|
353 |
0 | 354 /* Query for the list of available video modes */ |
355 for ( i=0; EnumDisplaySettings(NULL, i, &settings); ++i ) { | |
356 DIB_AddMode(this, settings.dmBitsPerPel, | |
357 settings.dmPelsWidth, settings.dmPelsHeight); | |
1465
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
358 #ifdef _WIN32_WCE |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
359 if( this->hidden->supportRotation ) |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
360 DIB_AddMode(this, settings.dmBitsPerPel, |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
361 settings.dmPelsHeight, settings.dmPelsWidth); |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
362 #endif |
0 | 363 } |
364 /* Sort the mode lists */ | |
365 for ( i=0; i<NUM_MODELISTS; ++i ) { | |
366 if ( SDL_nummodes[i] > 0 ) { | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
367 SDL_qsort(SDL_modelist[i], SDL_nummodes[i], sizeof *SDL_modelist[i], cmpmodes); |
0 | 368 } |
369 } | |
1465
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
370 #else |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
371 // WinCE and fullscreen mode: |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
372 // 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
|
373 // 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
|
374 // 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
|
375 // 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
|
376 |
1771 | 377 DIB_AddMode(this, vformat->BitsPerPixel, |
1465
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
378 GetDeviceCaps(GetDC(NULL), HORZRES), |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
379 GetDeviceCaps(GetDC(NULL), VERTRES)); |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
380 |
0 | 381 #endif /* !NO_CHANGEDISPLAYSETTINGS */ |
382 | |
383 /* Grab an identity palette if we are in a palettized mode */ | |
384 if ( vformat->BitsPerPixel <= 8 ) { | |
385 /* RJR: March 28, 2000 | |
386 moved palette creation to "DIB_CreatePalette" */ | |
3992 | 387 DIB_CreatePalette(this, vformat->BitsPerPixel); |
0 | 388 } |
389 | |
390 /* Fill in some window manager capabilities */ | |
391 this->info.wm_available = 1; | |
392 | |
1465
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
393 #ifdef _WIN32_WCE |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
394 this->hidden->origRotation = -1; |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
395 #endif |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
396 |
3981
b0d021cf41b6
windib target can now control screensaver with SDL_VIDEO_ALLOW_SCREENSAVER.
Ryan C. Gordon <icculus@icculus.org>
parents:
3976
diff
changeset
|
397 /* 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
|
398 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
|
399 if ( env ) { |
568c9b3c0167
* Added configure option --enable-screensaver, to allow enabling the screensaver by default.
Sam Lantinga <slouken@libsdl.org>
parents:
4136
diff
changeset
|
400 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
|
401 } else { |
568c9b3c0167
* Added configure option --enable-screensaver, to allow enabling the screensaver by default.
Sam Lantinga <slouken@libsdl.org>
parents:
4136
diff
changeset
|
402 #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
|
403 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
|
404 #else |
568c9b3c0167
* Added configure option --enable-screensaver, to allow enabling the screensaver by default.
Sam Lantinga <slouken@libsdl.org>
parents:
4136
diff
changeset
|
405 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
|
406 #endif |
568c9b3c0167
* Added configure option --enable-screensaver, to allow enabling the screensaver by default.
Sam Lantinga <slouken@libsdl.org>
parents:
4136
diff
changeset
|
407 } |
3981
b0d021cf41b6
windib target can now control screensaver with SDL_VIDEO_ALLOW_SCREENSAVER.
Ryan C. Gordon <icculus@icculus.org>
parents:
3976
diff
changeset
|
408 |
0 | 409 /* We're done! */ |
410 return(0); | |
411 } | |
412 | |
413 /* We support any format at any dimension */ | |
414 SDL_Rect **DIB_ListModes(_THIS, SDL_PixelFormat *format, Uint32 flags) | |
415 { | |
416 if ( (flags & SDL_FULLSCREEN) == SDL_FULLSCREEN ) { | |
417 return(SDL_modelist[((format->BitsPerPixel+7)/8)-1]); | |
418 } else { | |
419 return((SDL_Rect **)-1); | |
420 } | |
421 } | |
422 | |
423 | |
424 /* | |
425 Helper fn to work out which screen depth windows is currently using. | |
426 15 bit mode is considered 555 format, 16 bit is 565. | |
427 returns 0 for unknown mode. | |
428 (Derived from code in sept 1999 Windows Developer Journal | |
429 http://www.wdj.com/code/archive.html) | |
430 */ | |
431 static int DIB_SussScreenDepth() | |
432 { | |
433 #ifdef NO_GETDIBITS | |
434 int depth; | |
435 HDC hdc; | |
436 | |
437 hdc = GetDC(SDL_Window); | |
438 depth = GetDeviceCaps(hdc, PLANES) * GetDeviceCaps(hdc, BITSPIXEL); | |
439 ReleaseDC(SDL_Window, hdc); | |
440 return(depth); | |
441 #else | |
1881 | 442 int depth; |
0 | 443 int dib_size; |
444 LPBITMAPINFOHEADER dib_hdr; | |
445 HDC hdc; | |
446 HBITMAP hbm; | |
447 | |
448 /* Allocate enough space for a DIB header plus palette (for | |
449 * 8-bit modes) or bitfields (for 16- and 32-bit modes) | |
450 */ | |
451 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
|
452 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
|
453 SDL_memset(dib_hdr, 0, dib_size); |
0 | 454 dib_hdr->biSize = sizeof(BITMAPINFOHEADER); |
455 | |
456 /* Get a device-dependent bitmap that's compatible with the | |
457 screen. | |
458 */ | |
459 hdc = GetDC(NULL); | |
460 hbm = CreateCompatibleBitmap( hdc, 1, 1 ); | |
461 | |
462 /* Convert the DDB to a DIB. We need to call GetDIBits twice: | |
463 * the first call just fills in the BITMAPINFOHEADER; the | |
464 * second fills in the bitfields or palette. | |
465 */ | |
466 GetDIBits(hdc, hbm, 0, 1, NULL, (LPBITMAPINFO) dib_hdr, DIB_RGB_COLORS); | |
467 GetDIBits(hdc, hbm, 0, 1, NULL, (LPBITMAPINFO) dib_hdr, DIB_RGB_COLORS); | |
468 DeleteObject(hbm); | |
469 ReleaseDC(NULL, hdc); | |
470 | |
1881 | 471 depth = 0; |
0 | 472 switch( dib_hdr->biBitCount ) |
473 { | |
1881 | 474 case 8: depth = 8; break; |
475 case 24: depth = 24; break; | |
476 case 32: depth = 32; break; | |
0 | 477 case 16: |
478 if( dib_hdr->biCompression == BI_BITFIELDS ) { | |
479 /* check the red mask */ | |
480 switch( ((DWORD*)((char*)dib_hdr + dib_hdr->biSize))[0] ) { | |
1881 | 481 case 0xf800: depth = 16; break; /* 565 */ |
482 case 0x7c00: depth = 15; break; /* 555 */ | |
0 | 483 } |
484 } | |
485 } | |
1881 | 486 SDL_free(dib_hdr); |
487 return depth; | |
0 | 488 #endif /* NO_GETDIBITS */ |
489 } | |
490 | |
491 | |
492 /* Various screen update functions available */ | |
493 static void DIB_NormalUpdate(_THIS, int numrects, SDL_Rect *rects); | |
494 | |
495 SDL_Surface *DIB_SetVideoMode(_THIS, SDL_Surface *current, | |
496 int width, int height, int bpp, Uint32 flags) | |
497 { | |
498 SDL_Surface *video; | |
4085 | 499 int prev_w, prev_h; |
0 | 500 Uint32 prev_flags; |
501 DWORD style; | |
502 const DWORD directstyle = | |
503 (WS_POPUP); | |
504 const DWORD windowstyle = | |
505 (WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX); | |
506 const DWORD resizestyle = | |
507 (WS_THICKFRAME|WS_MAXIMIZEBOX); | |
508 int binfo_size; | |
509 BITMAPINFO *binfo; | |
510 HDC hdc; | |
511 RECT bounds; | |
512 int x, y; | |
513 Uint32 Rmask, Gmask, Bmask; | |
514 | |
4099
822f9624f984
Brian Fisher fixed bug #513
Sam Lantinga <slouken@libsdl.org>
parents:
4096
diff
changeset
|
515 prev_flags = current->flags; |
822f9624f984
Brian Fisher fixed bug #513
Sam Lantinga <slouken@libsdl.org>
parents:
4096
diff
changeset
|
516 |
0 | 517 /* Clean up any GL context that may be hanging around */ |
518 if ( current->flags & SDL_OPENGL ) { | |
519 WIN_GL_ShutDown(this); | |
520 } | |
1291
31331c444ea2
Only save the window position if we're in windowed mode
Sam Lantinga <slouken@libsdl.org>
parents:
1290
diff
changeset
|
521 SDL_resizing = 1; |
0 | 522 |
523 /* Recalculate the bitmasks if necessary */ | |
524 if ( bpp == current->format->BitsPerPixel ) { | |
525 video = current; | |
526 } else { | |
527 switch (bpp) { | |
528 case 15: | |
529 case 16: | |
530 if ( DIB_SussScreenDepth() == 15 ) { | |
531 /* 5-5-5 */ | |
532 Rmask = 0x00007c00; | |
533 Gmask = 0x000003e0; | |
534 Bmask = 0x0000001f; | |
535 } else { | |
536 /* 5-6-5 */ | |
537 Rmask = 0x0000f800; | |
538 Gmask = 0x000007e0; | |
539 Bmask = 0x0000001f; | |
540 } | |
541 break; | |
542 case 24: | |
543 case 32: | |
544 /* GDI defined as 8-8-8 */ | |
545 Rmask = 0x00ff0000; | |
546 Gmask = 0x0000ff00; | |
547 Bmask = 0x000000ff; | |
548 break; | |
549 default: | |
550 Rmask = 0x00000000; | |
551 Gmask = 0x00000000; | |
552 Bmask = 0x00000000; | |
553 break; | |
554 } | |
555 video = SDL_CreateRGBSurface(SDL_SWSURFACE, | |
556 0, 0, bpp, Rmask, Gmask, Bmask, 0); | |
557 if ( video == NULL ) { | |
558 SDL_OutOfMemory(); | |
559 return(NULL); | |
560 } | |
561 } | |
562 | |
563 /* Fill in part of the video surface */ | |
4085 | 564 prev_w = video->w; |
565 prev_h = video->h; | |
0 | 566 video->flags = 0; /* Clear flags */ |
567 video->w = width; | |
568 video->h = height; | |
569 video->pitch = SDL_CalculatePitch(video); | |
570 | |
1152
51a8702d8ecd
Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents:
1145
diff
changeset
|
571 /* 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
|
572 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
|
573 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
|
574 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
|
575 */ |
51a8702d8ecd
Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents:
1145
diff
changeset
|
576 SDL_VideoSurface = video; |
51a8702d8ecd
Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents:
1145
diff
changeset
|
577 |
51a8702d8ecd
Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents:
1145
diff
changeset
|
578 #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
|
579 if ( flags & SDL_FULLSCREEN ) |
514
1080bfc4aa96
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
580 video->flags |= SDL_FULLSCREEN; |
1080bfc4aa96
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
581 #endif |
1152
51a8702d8ecd
Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents:
1145
diff
changeset
|
582 |
0 | 583 #ifndef NO_CHANGEDISPLAYSETTINGS |
584 /* Set fullscreen mode if appropriate */ | |
585 if ( (flags & SDL_FULLSCREEN) == SDL_FULLSCREEN ) { | |
586 DEVMODE settings; | |
1295
c3e36ac8a94c
Date: Sun, 6 Mar 2005 17:06:20 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
1292
diff
changeset
|
587 BOOL changed; |
0 | 588 |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
589 SDL_memset(&settings, 0, sizeof(DEVMODE)); |
0 | 590 settings.dmSize = sizeof(DEVMODE); |
1465
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
591 |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
592 #ifdef _WIN32_WCE |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
593 // 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
|
594 if( this->hidden->supportRotation ) |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
595 { |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
596 DWORD rotation; |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
597 |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
598 // ask current mode |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
599 settings.dmFields = DM_DISPLAYORIENTATION; |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
600 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
|
601 rotation = settings.dmDisplayOrientation; |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
602 |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
603 if( (width > GetDeviceCaps(GetDC(NULL), HORZRES)) |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
604 && (height < GetDeviceCaps(GetDC(NULL), VERTRES))) |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
605 { |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
606 switch( rotation ) |
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 case DMDO_0: |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
609 settings.dmDisplayOrientation = DMDO_90; |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
610 break; |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
611 case DMDO_270: |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
612 settings.dmDisplayOrientation = DMDO_180; |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
613 break; |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
614 } |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
615 if( settings.dmDisplayOrientation != rotation ) |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
616 { |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
617 // go to landscape |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
618 this->hidden->origRotation = rotation; |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
619 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
|
620 } |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
621 } |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
622 if( (width < GetDeviceCaps(GetDC(NULL), HORZRES)) |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
623 && (height > GetDeviceCaps(GetDC(NULL), VERTRES))) |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
624 { |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
625 switch( rotation ) |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
626 { |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
627 case DMDO_90: |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
628 settings.dmDisplayOrientation = DMDO_0; |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
629 break; |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
630 case DMDO_180: |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
631 settings.dmDisplayOrientation = DMDO_270; |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
632 break; |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
633 } |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
634 if( settings.dmDisplayOrientation != rotation ) |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
635 { |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
636 // go to portrait |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
637 this->hidden->origRotation = rotation; |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
638 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
|
639 } |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
640 } |
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 } |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
643 #endif |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
644 |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
645 #ifndef _WIN32_WCE |
0 | 646 settings.dmBitsPerPel = video->format->BitsPerPixel; |
647 settings.dmPelsWidth = width; | |
648 settings.dmPelsHeight = height; | |
649 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
|
650 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
|
651 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
|
652 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
|
653 settings.dmFields |= DM_DISPLAYFREQUENCY; |
c3e36ac8a94c
Date: Sun, 6 Mar 2005 17:06:20 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
1292
diff
changeset
|
654 } |
c3e36ac8a94c
Date: Sun, 6 Mar 2005 17:06:20 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
1292
diff
changeset
|
655 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
|
656 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
|
657 settings.dmFields &= ~DM_DISPLAYFREQUENCY; |
c3e36ac8a94c
Date: Sun, 6 Mar 2005 17:06:20 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
1292
diff
changeset
|
658 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
|
659 } |
1465
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
660 #else |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
661 changed = 1; |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
662 #endif |
1295
c3e36ac8a94c
Date: Sun, 6 Mar 2005 17:06:20 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
1292
diff
changeset
|
663 if ( changed ) { |
0 | 664 video->flags |= SDL_FULLSCREEN; |
304
ec53caed9fb2
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
252
diff
changeset
|
665 SDL_fullscreen_mode = settings; |
0 | 666 } |
1465
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
667 |
0 | 668 } |
669 #endif /* !NO_CHANGEDISPLAYSETTINGS */ | |
670 | |
45
60a6e045808e
Fix palette creation in windowed mode at 8 bpp
Sam Lantinga <slouken@lokigames.com>
parents:
36
diff
changeset
|
671 /* 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
|
672 if ( grab_palette ) { |
fda6e33893b7
Always advertise hardware palette, since Windows will remap colors for us.
Sam Lantinga <slouken@libsdl.org>
parents:
4075
diff
changeset
|
673 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
|
674 grab_palette = FALSE; |
fda6e33893b7
Always advertise hardware palette, since Windows will remap colors for us.
Sam Lantinga <slouken@libsdl.org>
parents:
4075
diff
changeset
|
675 } |
45
60a6e045808e
Fix palette creation in windowed mode at 8 bpp
Sam Lantinga <slouken@lokigames.com>
parents:
36
diff
changeset
|
676 if ( screen_pal != NULL ) { |
60a6e045808e
Fix palette creation in windowed mode at 8 bpp
Sam Lantinga <slouken@lokigames.com>
parents:
36
diff
changeset
|
677 /* RJR: March 28, 2000 |
60a6e045808e
Fix palette creation in windowed mode at 8 bpp
Sam Lantinga <slouken@lokigames.com>
parents:
36
diff
changeset
|
678 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
|
679 DeleteObject(screen_pal); |
60a6e045808e
Fix palette creation in windowed mode at 8 bpp
Sam Lantinga <slouken@lokigames.com>
parents:
36
diff
changeset
|
680 screen_pal = NULL; |
60a6e045808e
Fix palette creation in windowed mode at 8 bpp
Sam Lantinga <slouken@lokigames.com>
parents:
36
diff
changeset
|
681 } |
3992 | 682 if ( screen_logpal != NULL ) { |
683 SDL_free(screen_logpal); | |
684 screen_logpal = NULL; | |
685 } | |
4079
fda6e33893b7
Always advertise hardware palette, since Windows will remap colors for us.
Sam Lantinga <slouken@libsdl.org>
parents:
4075
diff
changeset
|
686 |
45
60a6e045808e
Fix palette creation in windowed mode at 8 bpp
Sam Lantinga <slouken@lokigames.com>
parents:
36
diff
changeset
|
687 if ( bpp <= 8 ) |
60a6e045808e
Fix palette creation in windowed mode at 8 bpp
Sam Lantinga <slouken@lokigames.com>
parents:
36
diff
changeset
|
688 { |
60a6e045808e
Fix palette creation in windowed mode at 8 bpp
Sam Lantinga <slouken@lokigames.com>
parents:
36
diff
changeset
|
689 /* RJR: March 28, 2000 |
60a6e045808e
Fix palette creation in windowed mode at 8 bpp
Sam Lantinga <slouken@lokigames.com>
parents:
36
diff
changeset
|
690 create identity palette switching to a palettized mode */ |
3992 | 691 DIB_CreatePalette(this, bpp); |
45
60a6e045808e
Fix palette creation in windowed mode at 8 bpp
Sam Lantinga <slouken@lokigames.com>
parents:
36
diff
changeset
|
692 } |
60a6e045808e
Fix palette creation in windowed mode at 8 bpp
Sam Lantinga <slouken@lokigames.com>
parents:
36
diff
changeset
|
693 |
1480 | 694 style = GetWindowLong(SDL_Window, GWL_STYLE); |
0 | 695 style &= ~(resizestyle|WS_MAXIMIZE); |
696 if ( (video->flags & SDL_FULLSCREEN) == SDL_FULLSCREEN ) { | |
697 style &= ~windowstyle; | |
698 style |= directstyle; | |
699 } else { | |
700 #ifndef NO_CHANGEDISPLAYSETTINGS | |
701 if ( (prev_flags & SDL_FULLSCREEN) == SDL_FULLSCREEN ) { | |
702 ChangeDisplaySettings(NULL, 0); | |
703 } | |
704 #endif | |
705 if ( flags & SDL_NOFRAME ) { | |
706 style &= ~windowstyle; | |
707 style |= directstyle; | |
708 video->flags |= SDL_NOFRAME; | |
709 } else { | |
710 style &= ~directstyle; | |
711 style |= windowstyle; | |
712 if ( flags & SDL_RESIZABLE ) { | |
713 style |= resizestyle; | |
714 video->flags |= SDL_RESIZABLE; | |
715 } | |
716 } | |
453
a6fa62b1be09
Updated for embedded Visual C++ 4.0
Sam Lantinga <slouken@libsdl.org>
parents:
448
diff
changeset
|
717 #if WS_MAXIMIZE |
0 | 718 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
|
719 #endif |
0 | 720 } |
145
29a638dc26db
Applied David MacCormack's patch to fix SDL_WINDOWID on Windows,
Sam Lantinga <slouken@libsdl.org>
parents:
112
diff
changeset
|
721 |
448
323c766f5a46
Fullscreen windows are always topmost under Windows
Sam Lantinga <slouken@libsdl.org>
parents:
442
diff
changeset
|
722 /* 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
|
723 if ( !SDL_windowid ) |
1480 | 724 SetWindowLong(SDL_Window, GWL_STYLE, style); |
0 | 725 |
726 /* Delete the old bitmap if necessary */ | |
727 if ( screen_bmp != NULL ) { | |
728 DeleteObject(screen_bmp); | |
729 } | |
730 if ( ! (flags & SDL_OPENGL) ) { | |
731 BOOL is16bitmode = (video->format->BytesPerPixel == 2); | |
732 | |
733 /* Suss out the bitmap info header */ | |
734 binfo_size = sizeof(*binfo); | |
735 if( is16bitmode ) { | |
736 /* 16bit modes, palette area used for rgb bitmasks */ | |
737 binfo_size += 3*sizeof(DWORD); | |
738 } else if ( video->format->palette ) { | |
739 binfo_size += video->format->palette->ncolors * | |
740 sizeof(RGBQUAD); | |
741 } | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
742 binfo = (BITMAPINFO *)SDL_malloc(binfo_size); |
0 | 743 if ( ! binfo ) { |
744 if ( video != current ) { | |
745 SDL_FreeSurface(video); | |
746 } | |
747 SDL_OutOfMemory(); | |
748 return(NULL); | |
749 } | |
750 | |
751 binfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); | |
752 binfo->bmiHeader.biWidth = video->w; | |
753 binfo->bmiHeader.biHeight = -video->h; /* -ve for topdown bitmap */ | |
754 binfo->bmiHeader.biPlanes = 1; | |
755 binfo->bmiHeader.biSizeImage = video->h * video->pitch; | |
756 binfo->bmiHeader.biXPelsPerMeter = 0; | |
757 binfo->bmiHeader.biYPelsPerMeter = 0; | |
758 binfo->bmiHeader.biClrUsed = 0; | |
759 binfo->bmiHeader.biClrImportant = 0; | |
760 binfo->bmiHeader.biBitCount = video->format->BitsPerPixel; | |
761 | |
762 if ( is16bitmode ) { | |
763 /* BI_BITFIELDS tells CreateDIBSection about the rgb masks in the palette */ | |
764 binfo->bmiHeader.biCompression = BI_BITFIELDS; | |
765 ((Uint32*)binfo->bmiColors)[0] = video->format->Rmask; | |
766 ((Uint32*)binfo->bmiColors)[1] = video->format->Gmask; | |
767 ((Uint32*)binfo->bmiColors)[2] = video->format->Bmask; | |
768 } else { | |
769 binfo->bmiHeader.biCompression = BI_RGB; /* BI_BITFIELDS for 565 vs 555 */ | |
770 if ( video->format->palette ) { | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
771 SDL_memset(binfo->bmiColors, 0, |
0 | 772 video->format->palette->ncolors*sizeof(RGBQUAD)); |
773 } | |
774 } | |
775 | |
776 /* Create the offscreen bitmap buffer */ | |
777 hdc = GetDC(SDL_Window); | |
778 screen_bmp = CreateDIBSection(hdc, binfo, DIB_RGB_COLORS, | |
779 (void **)(&video->pixels), NULL, 0); | |
780 ReleaseDC(SDL_Window, hdc); | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
781 SDL_free(binfo); |
0 | 782 if ( screen_bmp == NULL ) { |
783 if ( video != current ) { | |
784 SDL_FreeSurface(video); | |
785 } | |
786 SDL_SetError("Couldn't create DIB section"); | |
787 return(NULL); | |
788 } | |
789 this->UpdateRects = DIB_NormalUpdate; | |
790 | |
791 /* 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
|
792 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
|
793 grab_palette = TRUE; |
0 | 794 } |
4136
8797fa6e2fb2
Fixed crash in SDL_SetGammaRamp()
Sam Lantinga <slouken@libsdl.org>
parents:
4134
diff
changeset
|
795 if ( screen_pal ) { |
8797fa6e2fb2
Fixed crash in SDL_SetGammaRamp()
Sam Lantinga <slouken@libsdl.org>
parents:
4134
diff
changeset
|
796 /* BitBlt() maps colors for us */ |
8797fa6e2fb2
Fixed crash in SDL_SetGammaRamp()
Sam Lantinga <slouken@libsdl.org>
parents:
4134
diff
changeset
|
797 video->flags |= SDL_HWPALETTE; |
8797fa6e2fb2
Fixed crash in SDL_SetGammaRamp()
Sam Lantinga <slouken@libsdl.org>
parents:
4134
diff
changeset
|
798 } |
0 | 799 } |
1465
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
800 #ifndef _WIN32_WCE |
0 | 801 /* 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
|
802 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
|
803 #else |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
804 if ( !SDL_windowid ) { |
8dfa9a6d69a5
Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents:
1433
diff
changeset
|
805 #endif |
448
323c766f5a46
Fullscreen windows are always topmost under Windows
Sam Lantinga <slouken@libsdl.org>
parents:
442
diff
changeset
|
806 HWND top; |
0 | 807 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
|
808 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
|
809 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
|
810 |
4085 | 811 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
|
812 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
|
813 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
|
814 if ( window ) { |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
815 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
|
816 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
|
817 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
|
818 } |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
819 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
|
820 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
|
821 } |
31fa08b36380
Added support for SDL_VIDEO_WINDOW_POS and SDL_VIDEO_CENTERED on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
766
diff
changeset
|
822 } |
31fa08b36380
Added support for SDL_VIDEO_WINDOW_POS and SDL_VIDEO_CENTERED on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
766
diff
changeset
|
823 } |
31fa08b36380
Added support for SDL_VIDEO_WINDOW_POS and SDL_VIDEO_CENTERED on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
766
diff
changeset
|
824 swp_flags = (SWP_NOCOPYBITS | SWP_SHOWWINDOW); |
0 | 825 |
833
31fa08b36380
Added support for SDL_VIDEO_WINDOW_POS and SDL_VIDEO_CENTERED on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
766
diff
changeset
|
826 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
|
827 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
|
828 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
|
829 bounds.bottom = SDL_windowY+video->h; |
3868 | 830 #ifndef _WIN32_WCE |
1882 | 831 AdjustWindowRectEx(&bounds, GetWindowLong(SDL_Window, GWL_STYLE), (GetMenu(SDL_Window) != NULL), 0); |
3868 | 832 #else |
833 // The bMenu parameter must be FALSE; menu bars are not supported | |
834 AdjustWindowRectEx(&bounds, GetWindowLong(SDL_Window, GWL_STYLE), 0, 0); | |
835 #endif | |
0 | 836 width = bounds.right-bounds.left; |
837 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
|
838 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
|
839 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
|
840 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
|
841 } else if ( center ) { |
96671ebc50a4
Date: Mon, 25 Oct 2004 17:30:06 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
966
diff
changeset
|
842 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
|
843 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
|
844 } 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
|
845 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
|
846 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
|
847 } else { |
31fa08b36380
Added support for SDL_VIDEO_WINDOW_POS and SDL_VIDEO_CENTERED on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
766
diff
changeset
|
848 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
|
849 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
|
850 } |
448
323c766f5a46
Fullscreen windows are always topmost under Windows
Sam Lantinga <slouken@libsdl.org>
parents:
442
diff
changeset
|
851 if ( flags & SDL_FULLSCREEN ) { |
323c766f5a46
Fullscreen windows are always topmost under Windows
Sam Lantinga <slouken@libsdl.org>
parents:
442
diff
changeset
|
852 top = HWND_TOPMOST; |
323c766f5a46
Fullscreen windows are always topmost under Windows
Sam Lantinga <slouken@libsdl.org>
parents:
442
diff
changeset
|
853 } else { |
323c766f5a46
Fullscreen windows are always topmost under Windows
Sam Lantinga <slouken@libsdl.org>
parents:
442
diff
changeset
|
854 top = HWND_NOTOPMOST; |
323c766f5a46
Fullscreen windows are always topmost under Windows
Sam Lantinga <slouken@libsdl.org>
parents:
442
diff
changeset
|
855 } |
323c766f5a46
Fullscreen windows are always topmost under Windows
Sam Lantinga <slouken@libsdl.org>
parents:
442
diff
changeset
|
856 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
|
857 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
|
858 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
|
859 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
|
860 } |
0 | 861 SetForegroundWindow(SDL_Window); |
862 } | |
1291
31331c444ea2
Only save the window position if we're in windowed mode
Sam Lantinga <slouken@libsdl.org>
parents:
1290
diff
changeset
|
863 SDL_resizing = 0; |
0 | 864 |
865 /* Set up for OpenGL */ | |
866 if ( flags & SDL_OPENGL ) { | |
867 if ( WIN_GL_SetupWindow(this) < 0 ) { | |
868 return(NULL); | |
869 } | |
870 video->flags |= SDL_OPENGL; | |
871 } | |
36
13ee9f4834ea
Windows CE patches contributed by Rainer Loritz
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
872 |
1523 | 873 /* JC 14 Mar 2006 |
874 Flush the message loop or this can cause big problems later | |
875 Especially if the user decides to use dialog boxes or assert()! | |
876 */ | |
877 WIN_FlushMessageQueue(); | |
878 | |
0 | 879 /* We're live! */ |
880 return(video); | |
881 } | |
882 | |
883 /* We don't actually allow hardware surfaces in the DIB driver */ | |
884 static int DIB_AllocHWSurface(_THIS, SDL_Surface *surface) | |
885 { | |
886 return(-1); | |
887 } | |
888 static void DIB_FreeHWSurface(_THIS, SDL_Surface *surface) | |
889 { | |
890 return; | |
891 } | |
892 static int DIB_LockHWSurface(_THIS, SDL_Surface *surface) | |
893 { | |
894 return(0); | |
895 } | |
896 static void DIB_UnlockHWSurface(_THIS, SDL_Surface *surface) | |
897 { | |
898 return; | |
899 } | |
900 | |
901 static void DIB_NormalUpdate(_THIS, int numrects, SDL_Rect *rects) | |
902 { | |
903 HDC hdc, mdc; | |
904 int i; | |
905 | |
906 hdc = GetDC(SDL_Window); | |
907 if ( screen_pal ) { | |
908 SelectPalette(hdc, screen_pal, FALSE); | |
909 } | |
910 mdc = CreateCompatibleDC(hdc); | |
911 SelectObject(mdc, screen_bmp); | |
912 for ( i=0; i<numrects; ++i ) { | |
913 BitBlt(hdc, rects[i].x, rects[i].y, rects[i].w, rects[i].h, | |
914 mdc, rects[i].x, rects[i].y, SRCCOPY); | |
915 } | |
916 DeleteDC(mdc); | |
917 ReleaseDC(SDL_Window, hdc); | |
918 } | |
919 | |
3992 | 920 static int FindPaletteIndex(LOGPALETTE *pal, BYTE r, BYTE g, BYTE b) |
921 { | |
922 PALETTEENTRY *entry; | |
923 int i; | |
924 int nentries = pal->palNumEntries; | |
925 | |
926 for ( i = 0; i < nentries; ++i ) { | |
927 entry = &pal->palPalEntry[i]; | |
928 if ( entry->peRed == r && entry->peGreen == g && entry->peBlue == b ) { | |
929 return i; | |
930 } | |
931 } | |
932 return -1; | |
933 } | |
934 | |
935 static BOOL CheckPaletteEntry(LOGPALETTE *pal, int index, BYTE r, BYTE g, BYTE b) | |
936 { | |
937 PALETTEENTRY *entry; | |
938 BOOL moved = 0; | |
939 | |
940 entry = &pal->palPalEntry[index]; | |
941 if ( entry->peRed != r || entry->peGreen != g || entry->peBlue != b ) { | |
942 int found = FindPaletteIndex(pal, r, g, b); | |
943 if ( found >= 0 ) { | |
944 pal->palPalEntry[found] = *entry; | |
945 } | |
946 entry->peRed = r; | |
947 entry->peGreen = g; | |
948 entry->peBlue = b; | |
949 moved = 1; | |
950 } | |
951 entry->peFlags = 0; | |
952 | |
953 return moved; | |
954 } | |
1251
86d0d01290ea
Updated Windows CE/PocketPC support...adds GAPI driver, landscape mode,
Ryan C. Gordon <icculus@icculus.org>
parents:
1152
diff
changeset
|
955 |
0 | 956 int DIB_SetColors(_THIS, int firstcolor, int ncolors, SDL_Color *colors) |
957 { | |
1292
59c7a470a51e
Fixed palette bug on non-WinCE
Sam Lantinga <slouken@libsdl.org>
parents:
1291
diff
changeset
|
958 #if !defined(_WIN32_WCE) || (_WIN32_WCE >= 400) |
59c7a470a51e
Fixed palette bug on non-WinCE
Sam Lantinga <slouken@libsdl.org>
parents:
1291
diff
changeset
|
959 HDC hdc, mdc; |
0 | 960 RGBQUAD *pal; |
1292
59c7a470a51e
Fixed palette bug on non-WinCE
Sam Lantinga <slouken@libsdl.org>
parents:
1291
diff
changeset
|
961 #else |
1251
86d0d01290ea
Updated Windows CE/PocketPC support...adds GAPI driver, landscape mode,
Ryan C. Gordon <icculus@icculus.org>
parents:
1152
diff
changeset
|
962 HDC hdc; |
36
13ee9f4834ea
Windows CE patches contributed by Rainer Loritz
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
963 #endif |
1292
59c7a470a51e
Fixed palette bug on non-WinCE
Sam Lantinga <slouken@libsdl.org>
parents:
1291
diff
changeset
|
964 int i; |
3992 | 965 int moved_entries = 0; |
0 | 966 |
967 /* Update the display palette */ | |
968 hdc = GetDC(SDL_Window); | |
969 if ( screen_pal ) { | |
3992 | 970 PALETTEENTRY *entry; |
0 | 971 |
972 for ( i=0; i<ncolors; ++i ) { | |
3992 | 973 entry = &screen_logpal->palPalEntry[firstcolor+i]; |
974 entry->peRed = colors[i].r; | |
975 entry->peGreen = colors[i].g; | |
976 entry->peBlue = colors[i].b; | |
977 entry->peFlags = PC_NOCOLLAPSE; | |
978 } | |
4075
0207ca19fd8f
Fixed building on Windows CE
Sam Lantinga <slouken@libsdl.org>
parents:
3992
diff
changeset
|
979 #ifdef SYSPAL_NOSTATIC |
3992 | 980 /* Check to make sure black and white are in position */ |
981 if ( GetSystemPaletteUse(hdc) != SYSPAL_NOSTATIC256 ) { | |
982 moved_entries += CheckPaletteEntry(screen_logpal, 0, 0x00, 0x00, 0x00); | |
983 moved_entries += CheckPaletteEntry(screen_logpal, screen_logpal->palNumEntries-1, 0xff, 0xff, 0xff); | |
0 | 984 } |
3992 | 985 /* FIXME: |
986 If we don't have full access to the palette, what we | |
987 really want to do is find the 236 most diverse colors | |
988 in the desired palette, set those entries (10-245) and | |
989 then map everything into the new system palette. | |
990 */ | |
4075
0207ca19fd8f
Fixed building on Windows CE
Sam Lantinga <slouken@libsdl.org>
parents:
3992
diff
changeset
|
991 #endif |
3992 | 992 |
4075
0207ca19fd8f
Fixed building on Windows CE
Sam Lantinga <slouken@libsdl.org>
parents:
3992
diff
changeset
|
993 #ifndef _WIN32_WCE |
3992 | 994 /* Copy the entries into the system palette */ |
995 UnrealizeObject(screen_pal); | |
4075
0207ca19fd8f
Fixed building on Windows CE
Sam Lantinga <slouken@libsdl.org>
parents:
3992
diff
changeset
|
996 #endif |
3992 | 997 SetPaletteEntries(screen_pal, 0, screen_logpal->palNumEntries, screen_logpal->palPalEntry); |
0 | 998 SelectPalette(hdc, screen_pal, FALSE); |
999 RealizePalette(hdc); | |
1000 } | |
1001 | |
1292
59c7a470a51e
Fixed palette bug on non-WinCE
Sam Lantinga <slouken@libsdl.org>
parents:
1291
diff
changeset
|
1002 #if !defined(_WIN32_WCE) || (_WIN32_WCE >= 400) |
0 | 1003 /* 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
|
1004 pal = SDL_stack_alloc(RGBQUAD, ncolors); |
0 | 1005 for ( i=0; i<ncolors; ++i ) { |
1006 pal[i].rgbRed = colors[i].r; | |
1007 pal[i].rgbGreen = colors[i].g; | |
1008 pal[i].rgbBlue = colors[i].b; | |
1009 pal[i].rgbReserved = 0; | |
1010 } | |
1011 | |
1012 /* Set the DIB palette and update the display */ | |
1013 mdc = CreateCompatibleDC(hdc); | |
1014 SelectObject(mdc, screen_bmp); | |
1015 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
|
1016 if ( moved_entries || !grab_palette ) { |
3992 | 1017 BitBlt(hdc, 0, 0, this->screen->w, this->screen->h, |
1018 mdc, 0, 0, SRCCOPY); | |
1019 } | |
0 | 1020 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
|
1021 SDL_stack_free(pal); |
36
13ee9f4834ea
Windows CE patches contributed by Rainer Loritz
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
1022 #endif |
0 | 1023 ReleaseDC(SDL_Window, hdc); |
1024 return(1); | |
1025 } | |
1026 | |
1251
86d0d01290ea
Updated Windows CE/PocketPC support...adds GAPI driver, landscape mode,
Ryan C. Gordon <icculus@icculus.org>
parents:
1152
diff
changeset
|
1027 |
0 | 1028 static void DIB_CheckGamma(_THIS) |
1029 { | |
1030 #ifndef NO_GAMMA_SUPPORT | |
1031 HDC hdc; | |
1032 WORD ramp[3*256]; | |
1033 | |
1034 /* If we fail to get gamma, disable gamma control */ | |
1035 hdc = GetDC(SDL_Window); | |
1036 if ( ! GetDeviceGammaRamp(hdc, ramp) ) { | |
1037 this->GetGammaRamp = NULL; | |
1038 this->SetGammaRamp = NULL; | |
1039 } | |
1040 ReleaseDC(SDL_Window, hdc); | |
1041 #endif /* !NO_GAMMA_SUPPORT */ | |
1042 } | |
338
518ffd98a8f6
Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents:
304
diff
changeset
|
1043 void DIB_SwapGamma(_THIS) |
0 | 1044 { |
1045 #ifndef NO_GAMMA_SUPPORT | |
1046 HDC hdc; | |
1047 | |
1048 if ( gamma_saved ) { | |
1049 hdc = GetDC(SDL_Window); | |
1050 if ( SDL_GetAppState() & SDL_APPINPUTFOCUS ) { | |
1051 /* About to leave active state, restore gamma */ | |
1052 SetDeviceGammaRamp(hdc, gamma_saved); | |
1053 } else { | |
1054 /* About to enter active state, set game gamma */ | |
1055 GetDeviceGammaRamp(hdc, gamma_saved); | |
1056 SetDeviceGammaRamp(hdc, this->gamma); | |
1057 } | |
1058 ReleaseDC(SDL_Window, hdc); | |
1059 } | |
1060 #endif /* !NO_GAMMA_SUPPORT */ | |
1061 } | |
338
518ffd98a8f6
Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents:
304
diff
changeset
|
1062 void DIB_QuitGamma(_THIS) |
0 | 1063 { |
1064 #ifndef NO_GAMMA_SUPPORT | |
1065 if ( gamma_saved ) { | |
1066 /* Restore the original gamma if necessary */ | |
1067 if ( SDL_GetAppState() & SDL_APPINPUTFOCUS ) { | |
1068 HDC hdc; | |
1069 | |
1070 hdc = GetDC(SDL_Window); | |
1071 SetDeviceGammaRamp(hdc, gamma_saved); | |
1072 ReleaseDC(SDL_Window, hdc); | |
1073 } | |
1074 | |
1075 /* Free the saved gamma memory */ | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
1076 SDL_free(gamma_saved); |
0 | 1077 gamma_saved = 0; |
1078 } | |
1079 #endif /* !NO_GAMMA_SUPPORT */ | |
1080 } | |
1081 | |
338
518ffd98a8f6
Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents:
304
diff
changeset
|
1082 int DIB_SetGammaRamp(_THIS, Uint16 *ramp) |
0 | 1083 { |
338
518ffd98a8f6
Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents:
304
diff
changeset
|
1084 #ifdef NO_GAMMA_SUPPORT |
518ffd98a8f6
Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents:
304
diff
changeset
|
1085 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
|
1086 return -1; |
518ffd98a8f6
Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents:
304
diff
changeset
|
1087 #else |
0 | 1088 HDC hdc; |
1089 BOOL succeeded; | |
1090 | |
1091 /* Set the ramp for the display */ | |
1092 if ( ! gamma_saved ) { | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
1093 gamma_saved = (WORD *)SDL_malloc(3*256*sizeof(*gamma_saved)); |
0 | 1094 if ( ! gamma_saved ) { |
1095 SDL_OutOfMemory(); | |
1096 return -1; | |
1097 } | |
1098 hdc = GetDC(SDL_Window); | |
1099 GetDeviceGammaRamp(hdc, gamma_saved); | |
1100 ReleaseDC(SDL_Window, hdc); | |
1101 } | |
1102 if ( SDL_GetAppState() & SDL_APPINPUTFOCUS ) { | |
1103 hdc = GetDC(SDL_Window); | |
1104 succeeded = SetDeviceGammaRamp(hdc, ramp); | |
1105 ReleaseDC(SDL_Window, hdc); | |
1106 } else { | |
1107 succeeded = TRUE; | |
1108 } | |
1109 return succeeded ? 0 : -1; | |
338
518ffd98a8f6
Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents:
304
diff
changeset
|
1110 #endif /* !NO_GAMMA_SUPPORT */ |
0 | 1111 } |
1112 | |
338
518ffd98a8f6
Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents:
304
diff
changeset
|
1113 int DIB_GetGammaRamp(_THIS, Uint16 *ramp) |
0 | 1114 { |
338
518ffd98a8f6
Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents:
304
diff
changeset
|
1115 #ifdef NO_GAMMA_SUPPORT |
518ffd98a8f6
Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents:
304
diff
changeset
|
1116 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
|
1117 return -1; |
518ffd98a8f6
Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents:
304
diff
changeset
|
1118 #else |
0 | 1119 HDC hdc; |
1120 BOOL succeeded; | |
1121 | |
1122 /* Get the ramp from the display */ | |
1123 hdc = GetDC(SDL_Window); | |
1124 succeeded = GetDeviceGammaRamp(hdc, ramp); | |
1125 ReleaseDC(SDL_Window, hdc); | |
1126 return succeeded ? 0 : -1; | |
338
518ffd98a8f6
Fixed gamma ramps in DirectX windowed and OpenGL modes
Sam Lantinga <slouken@libsdl.org>
parents:
304
diff
changeset
|
1127 #endif /* !NO_GAMMA_SUPPORT */ |
0 | 1128 } |
1129 | |
1130 void DIB_VideoQuit(_THIS) | |
1131 { | |
1881 | 1132 int i, j; |
1133 | |
0 | 1134 /* Destroy the window and everything associated with it */ |
1135 if ( SDL_Window ) { | |
1136 /* Delete the screen bitmap (also frees screen->pixels) */ | |
1137 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
|
1138 if ( grab_palette ) { |
3992 | 1139 DIB_ReleaseStaticColors(SDL_Window); |
1140 } | |
0 | 1141 #ifndef NO_CHANGEDISPLAYSETTINGS |
1142 if ( this->screen->flags & SDL_FULLSCREEN ) { | |
1143 ChangeDisplaySettings(NULL, 0); | |
376
a5f60a847a89
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
374
diff
changeset
|
1144 ShowWindow(SDL_Window, SW_HIDE); |
0 | 1145 } |
1146 #endif | |
1147 if ( this->screen->flags & SDL_OPENGL ) { | |
1148 WIN_GL_ShutDown(this); | |
1149 } | |
1150 this->screen->pixels = NULL; | |
1151 } | |
3992 | 1152 if ( screen_pal != NULL ) { |
1153 DeleteObject(screen_pal); | |
1154 screen_pal = NULL; | |
1155 } | |
1156 if ( screen_logpal != NULL ) { | |
1157 SDL_free(screen_logpal); | |
1158 screen_logpal = NULL; | |
1159 } | |
0 | 1160 if ( screen_bmp ) { |
1161 DeleteObject(screen_bmp); | |
1162 screen_bmp = NULL; | |
1163 } | |
1164 if ( screen_icn ) { | |
1165 DestroyIcon(screen_icn); | |
1166 screen_icn = NULL; | |
1167 } | |
1168 DIB_QuitGamma(this); | |
1169 DIB_DestroyWindow(this); | |
1170 | |
1171 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
|
1172 |
51a8702d8ecd
Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents:
1145
diff
changeset
|
1173 #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
|
1174 |
51a8702d8ecd
Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents:
1145
diff
changeset
|
1175 // 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
|
1176 if( aygshell ) |
51a8702d8ecd
Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents:
1145
diff
changeset
|
1177 { |
51a8702d8ecd
Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents:
1145
diff
changeset
|
1178 FreeLibrary(aygshell); |
51a8702d8ecd
Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents:
1145
diff
changeset
|
1179 aygshell = NULL; |
51a8702d8ecd
Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents:
1145
diff
changeset
|
1180 } |
51a8702d8ecd
Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents:
1145
diff
changeset
|
1181 #endif |
1881 | 1182 } |
1152
51a8702d8ecd
Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
Ryan C. Gordon <icculus@icculus.org>
parents:
1145
diff
changeset
|
1183 |
1881 | 1184 for ( i=0; i < SDL_arraysize(SDL_modelist); ++i ) { |
1185 if ( !SDL_modelist[i] ) { | |
1186 continue; | |
1187 } | |
1188 for ( j=0; SDL_modelist[i][j]; ++j ) { | |
1189 SDL_free(SDL_modelist[i][j]); | |
1190 } | |
1191 SDL_free(SDL_modelist[i]); | |
1192 SDL_modelist[i] = NULL; | |
1193 SDL_nummodes[i] = 0; | |
0 | 1194 } |
1195 } | |
1196 | |
1197 /* Exported for the windows message loop only */ | |
3992 | 1198 static void DIB_GrabStaticColors(HWND window) |
1199 { | |
4075
0207ca19fd8f
Fixed building on Windows CE
Sam Lantinga <slouken@libsdl.org>
parents:
3992
diff
changeset
|
1200 #ifdef SYSPAL_NOSTATIC |
3992 | 1201 HDC hdc; |
1202 | |
1203 hdc = GetDC(window); | |
1204 SetSystemPaletteUse(hdc, SYSPAL_NOSTATIC256); | |
1205 if ( GetSystemPaletteUse(hdc) != SYSPAL_NOSTATIC256 ) { | |
1206 SetSystemPaletteUse(hdc, SYSPAL_NOSTATIC); | |
1207 } | |
1208 ReleaseDC(window, hdc); | |
4075
0207ca19fd8f
Fixed building on Windows CE
Sam Lantinga <slouken@libsdl.org>
parents:
3992
diff
changeset
|
1209 #endif |
3992 | 1210 } |
1211 static void DIB_ReleaseStaticColors(HWND window) | |
1212 { | |
4075
0207ca19fd8f
Fixed building on Windows CE
Sam Lantinga <slouken@libsdl.org>
parents:
3992
diff
changeset
|
1213 #ifdef SYSPAL_NOSTATIC |
3992 | 1214 HDC hdc; |
1215 | |
1216 hdc = GetDC(window); | |
1217 SetSystemPaletteUse(hdc, SYSPAL_STATIC); | |
1218 ReleaseDC(window, hdc); | |
4075
0207ca19fd8f
Fixed building on Windows CE
Sam Lantinga <slouken@libsdl.org>
parents:
3992
diff
changeset
|
1219 #endif |
3992 | 1220 } |
1221 static void DIB_Activate(_THIS, BOOL active, BOOL minimized) | |
1222 { | |
4079
fda6e33893b7
Always advertise hardware palette, since Windows will remap colors for us.
Sam Lantinga <slouken@libsdl.org>
parents:
4075
diff
changeset
|
1223 if ( grab_palette ) { |
3992 | 1224 if ( !active ) { |
1225 DIB_ReleaseStaticColors(SDL_Window); | |
1226 DIB_RealizePalette(this); | |
1227 } else if ( !minimized ) { | |
1228 DIB_GrabStaticColors(SDL_Window); | |
1229 DIB_RealizePalette(this); | |
1230 } | |
1231 } | |
1232 } | |
1233 static void DIB_RealizePalette(_THIS) | |
0 | 1234 { |
1235 if ( screen_pal != NULL ) { | |
1236 HDC hdc; | |
1237 | |
1238 hdc = GetDC(SDL_Window); | |
4075
0207ca19fd8f
Fixed building on Windows CE
Sam Lantinga <slouken@libsdl.org>
parents:
3992
diff
changeset
|
1239 #ifndef _WIN32_WCE |
3992 | 1240 UnrealizeObject(screen_pal); |
4075
0207ca19fd8f
Fixed building on Windows CE
Sam Lantinga <slouken@libsdl.org>
parents:
3992
diff
changeset
|
1241 #endif |
0 | 1242 SelectPalette(hdc, screen_pal, FALSE); |
3992 | 1243 if ( RealizePalette(hdc) ) { |
0 | 1244 InvalidateRect(SDL_Window, NULL, FALSE); |
3992 | 1245 } |
0 | 1246 ReleaseDC(SDL_Window, hdc); |
1247 } | |
1248 } | |
1249 static void DIB_PaletteChanged(_THIS, HWND window) | |
1250 { | |
1251 if ( window != SDL_Window ) { | |
3992 | 1252 DIB_RealizePalette(this); |
0 | 1253 } |
1254 } | |
1255 | |
1256 /* Exported for the windows message loop only */ | |
1257 static void DIB_WinPAINT(_THIS, HDC hdc) | |
1258 { | |
1259 HDC mdc; | |
1260 | |
1261 if ( screen_pal ) { | |
1262 SelectPalette(hdc, screen_pal, FALSE); | |
1263 } | |
1264 mdc = CreateCompatibleDC(hdc); | |
1265 SelectObject(mdc, screen_bmp); | |
1266 BitBlt(hdc, 0, 0, SDL_VideoSurface->w, SDL_VideoSurface->h, | |
1267 mdc, 0, 0, SRCCOPY); | |
1268 DeleteDC(mdc); | |
1269 } | |
1270 | |
1271 /* 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
|
1272 #if !SDL_AUDIO_DRIVER_DSOUND |
0 | 1273 void DX5_SoundFocus(HWND hwnd) |
1274 { | |
1275 return; | |
1276 } | |
1277 #endif |