Andrey A.
I made a video driver GAPI/RAW for WinCE (SDL-1.3). RAW mode has a priority, and also, GAPI mode works with environment "SDL_VIDEO_RENDERER=gapi" and for RAW mode "SDL_VIDEO_RENDERER=raw". I checked the work on the screens of VGA, WVGA, QVGA, WQVGA, HVGA, + tested all modes with WindowsMobile Emulator. Also, correctly draws the pointer position and the scale of the pointer for VGA/WVGA modes, correctly draws top left position for DM orientation screen, and portrait/landscape/square geometry the screen also correct. Also, I added a small fix for GDI fullscreen mode. Patch for latest revision SDL-1.3 in an attachment. Also added small path for mingw32ce build.
This commit is contained in:
parent
4e19d730a1
commit
8d14ec12cc
16 changed files with 1360 additions and 774 deletions
22
configure.in
22
configure.in
|
@ -1917,7 +1917,7 @@ CheckWIN32()
|
||||||
AC_MSG_CHECKING(Windows CE)
|
AC_MSG_CHECKING(Windows CE)
|
||||||
have_wince=no
|
have_wince=no
|
||||||
AC_TRY_COMPILE([
|
AC_TRY_COMPILE([
|
||||||
#ifndef _WIN32_WCE
|
#if !defined(_WIN32_WCE) && !defined(__MINGW32CE__)
|
||||||
#error This is not Windows CE
|
#error This is not Windows CE
|
||||||
#endif
|
#endif
|
||||||
],[
|
],[
|
||||||
|
@ -2388,6 +2388,12 @@ AC_HELP_STRING([--enable-render-d3d], [enable the Direct3D render driver [[defau
|
||||||
SOURCES="$SOURCES $srcdir/src/atomic/win32/*.c"
|
SOURCES="$SOURCES $srcdir/src/atomic/win32/*.c"
|
||||||
have_atomic=yes
|
have_atomic=yes
|
||||||
fi
|
fi
|
||||||
|
# Set up dummy files for the joystick for now
|
||||||
|
if test x$enable_joystick = xyes; then
|
||||||
|
AC_DEFINE(SDL_JOYSTICK_DUMMY)
|
||||||
|
SOURCES="$SOURCES $srcdir/src/joystick/dummy/*.c"
|
||||||
|
have_joystick=yes
|
||||||
|
fi
|
||||||
# Set up files for the thread library
|
# Set up files for the thread library
|
||||||
if test x$enable_threads = xyes; then
|
if test x$enable_threads = xyes; then
|
||||||
AC_DEFINE(SDL_THREAD_WIN32)
|
AC_DEFINE(SDL_THREAD_WIN32)
|
||||||
|
@ -2411,10 +2417,20 @@ AC_HELP_STRING([--enable-render-d3d], [enable the Direct3D render driver [[defau
|
||||||
fi
|
fi
|
||||||
# Set up the system libraries we need
|
# Set up the system libraries we need
|
||||||
EXTRA_LDFLAGS="$EXTRA_LDFLAGS -lcoredll -lcommctrl -lmmtimer"
|
EXTRA_LDFLAGS="$EXTRA_LDFLAGS -lcoredll -lcommctrl -lmmtimer"
|
||||||
|
|
||||||
|
# mingw32ce library
|
||||||
|
case "$host" in
|
||||||
|
*-mingw32ce)
|
||||||
|
EXTRA_LDFLAGS="$EXTRA_LDFLAGS -lmingwex"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
# The Win32 platform requires special setup
|
# The Win32 platform requires special setup
|
||||||
SDLMAIN_SOURCES="$srcdir/src/main/win32/*.c"
|
SDLMAIN_SOURCES="$srcdir/src/main/win32/*.c"
|
||||||
SDL_CFLAGS="$SDL_CFLAGS -Dmain=SDL_main -D_WIN32_WCE=0x420"
|
EXTRA_CFLAGS="$EXTRA_CFLAGS -Dmain=SDL_main -D_WIN32_WCE=0x420"
|
||||||
SDL_LIBS="-lSDLmain $SDL_LIBS"
|
EXTRA_LDFLAGS="-lSDLmain $EXTRA_LDFLAGS"
|
||||||
;;
|
;;
|
||||||
*-*-cygwin* | *-*-mingw32*)
|
*-*-cygwin* | *-*-mingw32*)
|
||||||
ARCH=win32
|
ARCH=win32
|
||||||
|
|
|
@ -387,9 +387,6 @@ extern VideoBootStrap PS3_bootstrap;
|
||||||
#if SDL_VIDEO_DRIVER_SVGALIB
|
#if SDL_VIDEO_DRIVER_SVGALIB
|
||||||
extern VideoBootStrap SVGALIB_bootstrap;
|
extern VideoBootStrap SVGALIB_bootstrap;
|
||||||
#endif
|
#endif
|
||||||
#if SDL_VIDEO_DRIVER_GAPI
|
|
||||||
extern VideoBootStrap GAPI_bootstrap;
|
|
||||||
#endif
|
|
||||||
#if SDL_VIDEO_DRIVER_WIN32
|
#if SDL_VIDEO_DRIVER_WIN32
|
||||||
extern VideoBootStrap WIN32_bootstrap;
|
extern VideoBootStrap WIN32_bootstrap;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -67,9 +67,6 @@ static VideoBootStrap *bootstrap[] = {
|
||||||
#if SDL_VIDEO_DRIVER_SVGALIB
|
#if SDL_VIDEO_DRIVER_SVGALIB
|
||||||
&SVGALIB_bootstrap,
|
&SVGALIB_bootstrap,
|
||||||
#endif
|
#endif
|
||||||
#if SDL_VIDEO_DRIVER_GAPI
|
|
||||||
&GAPI_bootstrap,
|
|
||||||
#endif
|
|
||||||
#if SDL_VIDEO_DRIVER_WIN32
|
#if SDL_VIDEO_DRIVER_WIN32
|
||||||
&WIN32_bootstrap,
|
&WIN32_bootstrap,
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -459,6 +459,8 @@ DDRAW_CreateRenderer(SDL_Window * window, Uint32 flags)
|
||||||
}
|
}
|
||||||
data->ddraw = videodata->ddraw;
|
data->ddraw = videodata->ddraw;
|
||||||
|
|
||||||
|
videodata->render = RENDER_DDRAW;
|
||||||
|
|
||||||
renderer->DisplayModeChanged = DDRAW_DisplayModeChanged;
|
renderer->DisplayModeChanged = DDRAW_DisplayModeChanged;
|
||||||
renderer->CreateTexture = DDRAW_CreateTexture;
|
renderer->CreateTexture = DDRAW_CreateTexture;
|
||||||
renderer->QueryTexturePixels = DDRAW_QueryTexturePixels;
|
renderer->QueryTexturePixels = DDRAW_QueryTexturePixels;
|
||||||
|
|
|
@ -451,6 +451,8 @@ D3D_CreateRenderer(SDL_Window * window, Uint32 flags)
|
||||||
}
|
}
|
||||||
data->d3d = videodata->d3d;
|
data->d3d = videodata->d3d;
|
||||||
|
|
||||||
|
videodata->render = RENDER_D3D;
|
||||||
|
|
||||||
renderer->DisplayModeChanged = D3D_DisplayModeChanged;
|
renderer->DisplayModeChanged = D3D_DisplayModeChanged;
|
||||||
renderer->CreateTexture = D3D_CreateTexture;
|
renderer->CreateTexture = D3D_CreateTexture;
|
||||||
renderer->QueryTexturePixels = D3D_QueryTexturePixels;
|
renderer->QueryTexturePixels = D3D_QueryTexturePixels;
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -27,7 +27,11 @@
|
||||||
/* SDL surface based renderer implementation */
|
/* SDL surface based renderer implementation */
|
||||||
|
|
||||||
#if SDL_VIDEO_RENDER_GAPI
|
#if SDL_VIDEO_RENDER_GAPI
|
||||||
extern void GAPI_AddRenderDriver(_THIS);
|
extern void WINCE_AddRenderDriver(_THIS);
|
||||||
|
extern int WINCE_Available(void);
|
||||||
|
extern void WINCE_ShowWindow(_THIS, SDL_Window* window, int visible);
|
||||||
|
extern int WINCE_GetDMOrientation(void);
|
||||||
|
extern int WINCE_SetDMOrientation(int orientation);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* vi: set ts=4 sw=4 expandtab: */
|
/* vi: set ts=4 sw=4 expandtab: */
|
||||||
|
|
|
@ -22,100 +22,3 @@
|
||||||
Stefan Klug
|
Stefan Klug
|
||||||
klug.stefan@gmx.de
|
klug.stefan@gmx.de
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define WIN32_LEAN_AND_MEAN
|
|
||||||
#include <windows.h>
|
|
||||||
|
|
||||||
/* hi res definitions */
|
|
||||||
typedef struct _RawFrameBufferInfo
|
|
||||||
{
|
|
||||||
WORD wFormat;
|
|
||||||
WORD wBPP;
|
|
||||||
VOID *pFramePointer;
|
|
||||||
int cxStride;
|
|
||||||
int cyStride;
|
|
||||||
int cxPixels;
|
|
||||||
int cyPixels;
|
|
||||||
} RawFrameBufferInfo;
|
|
||||||
|
|
||||||
#define GETRAWFRAMEBUFFER 0x00020001
|
|
||||||
|
|
||||||
#define FORMAT_565 1
|
|
||||||
#define FORMAT_555 2
|
|
||||||
#define FORMAT_OTHER 3
|
|
||||||
|
|
||||||
|
|
||||||
/* From gx.h, since it's not really C compliant */
|
|
||||||
|
|
||||||
struct GXDisplayProperties
|
|
||||||
{
|
|
||||||
DWORD cxWidth;
|
|
||||||
DWORD cyHeight; // notice lack of 'th' in the word height.
|
|
||||||
long cbxPitch; // number of bytes to move right one x pixel - can be negative.
|
|
||||||
long cbyPitch; // number of bytes to move down one y pixel - can be negative.
|
|
||||||
long cBPP; // # of bits in each pixel
|
|
||||||
DWORD ffFormat; // format flags.
|
|
||||||
};
|
|
||||||
|
|
||||||
struct GXKeyList
|
|
||||||
{
|
|
||||||
short vkUp; // key for up
|
|
||||||
POINT ptUp; // x,y position of key/button. Not on screen but in screen coordinates.
|
|
||||||
short vkDown;
|
|
||||||
POINT ptDown;
|
|
||||||
short vkLeft;
|
|
||||||
POINT ptLeft;
|
|
||||||
short vkRight;
|
|
||||||
POINT ptRight;
|
|
||||||
short vkA;
|
|
||||||
POINT ptA;
|
|
||||||
short vkB;
|
|
||||||
POINT ptB;
|
|
||||||
short vkC;
|
|
||||||
POINT ptC;
|
|
||||||
short vkStart;
|
|
||||||
POINT ptStart;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef int (*PFNGXOpenDisplay) (HWND hWnd, DWORD dwFlags);
|
|
||||||
typedef int (*PFNGXCloseDisplay) ();
|
|
||||||
typedef void *(*PFNGXBeginDraw) ();
|
|
||||||
typedef int (*PFNGXEndDraw) ();
|
|
||||||
typedef int (*PFNGXOpenInput) ();
|
|
||||||
typedef int (*PFNGXCloseInput) ();
|
|
||||||
typedef struct GXDisplayProperties (*PFNGXGetDisplayProperties) ();
|
|
||||||
typedef struct GXKeyList (*PFNGXGetDefaultKeys) (int iOptions);
|
|
||||||
typedef int (*PFNGXSuspend) ();
|
|
||||||
typedef int (*PFNGXResume) ();
|
|
||||||
typedef int (*PFNGXSetViewport) (DWORD dwTop, DWORD dwHeight,
|
|
||||||
DWORD dwReserved1, DWORD dwReserved2);
|
|
||||||
typedef BOOL(*PFNGXIsDisplayDRAMBuffer) ();
|
|
||||||
|
|
||||||
struct GapiFunc
|
|
||||||
{
|
|
||||||
PFNGXOpenDisplay GXOpenDisplay;
|
|
||||||
PFNGXCloseDisplay GXCloseDisplay;
|
|
||||||
PFNGXBeginDraw GXBeginDraw;
|
|
||||||
PFNGXEndDraw GXEndDraw;
|
|
||||||
PFNGXOpenInput GXOpenInput;
|
|
||||||
PFNGXCloseInput GXCloseInput;
|
|
||||||
PFNGXGetDisplayProperties GXGetDisplayProperties;
|
|
||||||
PFNGXGetDefaultKeys GXGetDefaultKeys;
|
|
||||||
PFNGXSuspend GXSuspend;
|
|
||||||
PFNGXResume GXResume;
|
|
||||||
PFNGXSetViewport GXSetViewport;
|
|
||||||
PFNGXIsDisplayDRAMBuffer GXIsDisplayDRAMBuffer;
|
|
||||||
} gx;
|
|
||||||
|
|
||||||
#define kfLandscape 0x8 // Screen is rotated 270 degrees
|
|
||||||
#define kfPalette 0x10 // Pixel values are indexes into a palette
|
|
||||||
#define kfDirect 0x20 // Pixel values contain actual level information
|
|
||||||
#define kfDirect555 0x40 // 5 bits each for red, green and blue values in a pixel.
|
|
||||||
#define kfDirect565 0x80 // 5 red bits, 6 green bits and 5 blue bits per pixel
|
|
||||||
#define kfDirect888 0x100 // 8 bits each for red, green and blue values in a pixel.
|
|
||||||
#define kfDirect444 0x200 // 4 red, 4 green, 4 blue
|
|
||||||
#define kfDirectInverted 0x400
|
|
||||||
|
|
||||||
#define GX_FULLSCREEN 0x01 // for OpenDisplay()
|
|
||||||
#define GX_NORMALKEYS 0x02
|
|
||||||
#define GX_LANDSCAPEKEYS 0x03
|
|
||||||
|
|
|
@ -184,6 +184,8 @@ GDI_CreateRenderer(SDL_Window * window, Uint32 flags)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
windowdata->videodata->render = RENDER_GDI;
|
||||||
|
|
||||||
renderer->DisplayModeChanged = GDI_DisplayModeChanged;
|
renderer->DisplayModeChanged = GDI_DisplayModeChanged;
|
||||||
renderer->CreateTexture = GDI_CreateTexture;
|
renderer->CreateTexture = GDI_CreateTexture;
|
||||||
renderer->QueryTexturePixels = GDI_QueryTexturePixels;
|
renderer->QueryTexturePixels = GDI_QueryTexturePixels;
|
||||||
|
@ -267,6 +269,34 @@ GDI_CreateRenderer(SDL_Window * window, Uint32 flags)
|
||||||
}
|
}
|
||||||
data->current_hbm = 0;
|
data->current_hbm = 0;
|
||||||
|
|
||||||
|
#ifdef _WIN32_WCE
|
||||||
|
// check size for GDI fullscreen and rotate
|
||||||
|
if((window->flags & SDL_WINDOW_FULLSCREEN) &&
|
||||||
|
GetSystemMetrics(SM_CXSCREEN) != GetSystemMetrics(SM_CYSCREEN) &&
|
||||||
|
((GetSystemMetrics(SM_CXSCREEN) < GetSystemMetrics(SM_CYSCREEN) && window->w > window->h) ||
|
||||||
|
(GetSystemMetrics(SM_CXSCREEN) > GetSystemMetrics(SM_CYSCREEN) && window->w < window->h)))
|
||||||
|
{
|
||||||
|
int orientation = WINCE_GetDMOrientation();
|
||||||
|
switch(orientation)
|
||||||
|
{
|
||||||
|
case DMDO_0: orientation = DMDO_90; break;
|
||||||
|
case DMDO_270: orientation = DMDO_180; break;
|
||||||
|
case DMDO_90: orientation = DMDO_0; break;
|
||||||
|
case DMDO_180: orientation = DMDO_270; break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
GDI_DestroyRenderer(renderer);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(0 > WINCE_SetDMOrientation(orientation))
|
||||||
|
{
|
||||||
|
GDI_DestroyRenderer(renderer);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return renderer;
|
return renderer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -416,6 +446,7 @@ GDI_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture)
|
||||||
WIN_SetError("Couldn't create bitmap");
|
WIN_SetError("Couldn't create bitmap");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -95,7 +95,11 @@ WIN_SetClipboardText(_THIS, const char *text)
|
||||||
WIN_SetError("Couldn't set clipboard data");
|
WIN_SetError("Couldn't set clipboard data");
|
||||||
result = -1;
|
result = -1;
|
||||||
}
|
}
|
||||||
|
#ifdef _WIN32_WCE
|
||||||
|
data->clipboard_count = 0;
|
||||||
|
#else
|
||||||
data->clipboard_count = GetClipboardSequenceNumber();
|
data->clipboard_count = GetClipboardSequenceNumber();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
SDL_free(tstr);
|
SDL_free(tstr);
|
||||||
|
|
||||||
|
@ -149,7 +153,11 @@ WIN_CheckClipboardUpdate(struct SDL_VideoData * data)
|
||||||
{
|
{
|
||||||
DWORD count;
|
DWORD count;
|
||||||
|
|
||||||
|
#ifdef _WIN32_WCE
|
||||||
|
count = 0;
|
||||||
|
#else
|
||||||
count = GetClipboardSequenceNumber();
|
count = GetClipboardSequenceNumber();
|
||||||
|
#endif
|
||||||
if (count != data->clipboard_count) {
|
if (count != data->clipboard_count) {
|
||||||
if (data->clipboard_count) {
|
if (data->clipboard_count) {
|
||||||
SDL_SendClipboardUpdate();
|
SDL_SendClipboardUpdate();
|
||||||
|
|
|
@ -184,6 +184,22 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_MOUSEMOVE:
|
case WM_MOUSEMOVE:
|
||||||
|
#ifdef _WIN32_WCE
|
||||||
|
/* transform coords for VGA, WVGA... */
|
||||||
|
{
|
||||||
|
SDL_VideoData *videodata = data->videodata;
|
||||||
|
if(videodata->CoordTransform &&
|
||||||
|
(videodata->render == RENDER_GAPI || videodata->render == RENDER_RAW))
|
||||||
|
{
|
||||||
|
POINT pt;
|
||||||
|
pt.x = LOWORD(lParam);
|
||||||
|
pt.y = HIWORD(lParam);
|
||||||
|
videodata->CoordTransform(data->window, &pt);
|
||||||
|
SDL_SendMouseMotion(data->window, 0, pt.x, pt.y);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
SDL_SendMouseMotion(data->window, 0, LOWORD(lParam), HIWORD(lParam));
|
SDL_SendMouseMotion(data->window, 0, LOWORD(lParam), HIWORD(lParam));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -203,10 +203,18 @@ WIN_GetDisplayBounds(_THIS, SDL_VideoDisplay * display, SDL_Rect * rect)
|
||||||
{
|
{
|
||||||
SDL_DisplayModeData *data = (SDL_DisplayModeData *) display->desktop_mode.driverdata;
|
SDL_DisplayModeData *data = (SDL_DisplayModeData *) display->desktop_mode.driverdata;
|
||||||
|
|
||||||
|
#ifdef _WIN32_WCE
|
||||||
|
// WINCE: DEVMODE.dmPosition not found, or may be mingw32ce bug
|
||||||
|
rect->x = 0;
|
||||||
|
rect->y = 0;
|
||||||
|
rect->w = display->windows->w;
|
||||||
|
rect->h = display->windows->h;
|
||||||
|
#else
|
||||||
rect->x = (int)data->DeviceMode.dmPosition.x;
|
rect->x = (int)data->DeviceMode.dmPosition.x;
|
||||||
rect->y = (int)data->DeviceMode.dmPosition.y;
|
rect->y = (int)data->DeviceMode.dmPosition.y;
|
||||||
rect->w = data->DeviceMode.dmPelsWidth;
|
rect->w = data->DeviceMode.dmPelsWidth;
|
||||||
rect->h = data->DeviceMode.dmPelsHeight;
|
rect->h = data->DeviceMode.dmPelsHeight;
|
||||||
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
#include "SDL_win32video.h"
|
#include "SDL_win32video.h"
|
||||||
#include "SDL_d3drender.h"
|
#include "SDL_d3drender.h"
|
||||||
#include "SDL_gdirender.h"
|
#include "SDL_gdirender.h"
|
||||||
|
#include "SDL_gapirender.h"
|
||||||
|
|
||||||
/* Initialization/Query functions */
|
/* Initialization/Query functions */
|
||||||
static int WIN_VideoInit(_THIS);
|
static int WIN_VideoInit(_THIS);
|
||||||
|
@ -48,6 +49,7 @@ WIN_SetError(const char *prefix)
|
||||||
SDL_free(message);
|
SDL_free(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* WIN32 driver bootstrap functions */
|
/* WIN32 driver bootstrap functions */
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -73,6 +75,11 @@ WIN_DeleteDevice(SDL_VideoDevice * device)
|
||||||
data->ddraw->lpVtbl->Release(data->ddraw);
|
data->ddraw->lpVtbl->Release(data->ddraw);
|
||||||
FreeLibrary(data->ddrawDLL);
|
FreeLibrary(data->ddrawDLL);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef _WIN32_WCE
|
||||||
|
if(data->hAygShell) {
|
||||||
|
FreeLibrary(data->hAygShell);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
SDL_free(device->driverdata);
|
SDL_free(device->driverdata);
|
||||||
SDL_free(device);
|
SDL_free(device);
|
||||||
|
@ -138,6 +145,15 @@ WIN_CreateDevice(int devindex)
|
||||||
}
|
}
|
||||||
#endif /* SDL_VIDEO_RENDER_DDRAW */
|
#endif /* SDL_VIDEO_RENDER_DDRAW */
|
||||||
|
|
||||||
|
#ifdef _WIN32_WCE
|
||||||
|
data->hAygShell = LoadLibrary(TEXT("\\windows\\aygshell.dll"));
|
||||||
|
if(0 == data->hAygShell)
|
||||||
|
data->hAygShell = LoadLibrary(TEXT("aygshell.dll"));
|
||||||
|
data->SHFullScreen = (0 != data->hAygShell ?
|
||||||
|
(PFNSHFullScreen) GetProcAddress(data->hAygShell, TEXT("SHFullScreen")) : 0);
|
||||||
|
data->CoordTransform = NULL;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Set the function pointers */
|
/* Set the function pointers */
|
||||||
device->VideoInit = WIN_VideoInit;
|
device->VideoInit = WIN_VideoInit;
|
||||||
device->VideoQuit = WIN_VideoQuit;
|
device->VideoQuit = WIN_VideoQuit;
|
||||||
|
@ -186,10 +202,13 @@ WIN_CreateDevice(int devindex)
|
||||||
}
|
}
|
||||||
|
|
||||||
VideoBootStrap WIN32_bootstrap = {
|
VideoBootStrap WIN32_bootstrap = {
|
||||||
|
#ifdef _WIN32_WCE
|
||||||
|
"wince", "SDL WinCE video driver", WINCE_Available, WIN_CreateDevice
|
||||||
|
#else
|
||||||
"win32", "SDL Win32/64 video driver", WIN_Available, WIN_CreateDevice
|
"win32", "SDL Win32/64 video driver", WIN_Available, WIN_CreateDevice
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
WIN_VideoInit(_THIS)
|
WIN_VideoInit(_THIS)
|
||||||
{
|
{
|
||||||
|
@ -207,7 +226,7 @@ WIN_VideoInit(_THIS)
|
||||||
GDI_AddRenderDriver(_this);
|
GDI_AddRenderDriver(_this);
|
||||||
#endif
|
#endif
|
||||||
#if SDL_VIDEO_RENDER_GAPI
|
#if SDL_VIDEO_RENDER_GAPI
|
||||||
GAPI_AddRenderDriver(_this);
|
WINCE_AddRenderDriver(_this);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
WIN_InitKeyboard(_this);
|
WIN_InitKeyboard(_this);
|
||||||
|
|
|
@ -28,7 +28,9 @@
|
||||||
|
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#define STRICT
|
#define STRICT
|
||||||
|
#ifndef UNICODE
|
||||||
#define UNICODE
|
#define UNICODE
|
||||||
|
#endif
|
||||||
#undef WINVER
|
#undef WINVER
|
||||||
#define WINVER 0x500 /* Need 0x410 for AlphaBlend() and 0x500 for EnumDisplayDevices() */
|
#define WINVER 0x500 /* Need 0x410 for AlphaBlend() and 0x500 for EnumDisplayDevices() */
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
@ -63,10 +65,17 @@
|
||||||
#endif
|
#endif
|
||||||
extern void WIN_SetError(const char *prefix);
|
extern void WIN_SetError(const char *prefix);
|
||||||
|
|
||||||
|
enum { RENDER_NONE, RENDER_D3D, RENDER_DDRAW, RENDER_GDI, RENDER_GAPI, RENDER_RAW };
|
||||||
|
|
||||||
|
typedef BOOL (*PFNSHFullScreen)(HWND, DWORD);
|
||||||
|
typedef void (*PFCoordTransform)(SDL_Window*, POINT*);
|
||||||
|
|
||||||
/* Private display data */
|
/* Private display data */
|
||||||
|
|
||||||
typedef struct SDL_VideoData
|
typedef struct SDL_VideoData
|
||||||
{
|
{
|
||||||
|
int render;
|
||||||
|
|
||||||
#if SDL_VIDEO_RENDER_D3D
|
#if SDL_VIDEO_RENDER_D3D
|
||||||
HANDLE d3dDLL;
|
HANDLE d3dDLL;
|
||||||
IDirect3D9 *d3d;
|
IDirect3D9 *d3d;
|
||||||
|
@ -75,6 +84,11 @@ typedef struct SDL_VideoData
|
||||||
HANDLE ddrawDLL;
|
HANDLE ddrawDLL;
|
||||||
IDirectDraw *ddraw;
|
IDirectDraw *ddraw;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef _WIN32_WCE
|
||||||
|
HMODULE hAygShell;
|
||||||
|
PFNSHFullScreen SHFullScreen;
|
||||||
|
PFCoordTransform CoordTransform;
|
||||||
|
#endif
|
||||||
|
|
||||||
DWORD clipboard_count;
|
DWORD clipboard_count;
|
||||||
|
|
||||||
|
|
|
@ -34,45 +34,13 @@
|
||||||
#include "../../events/SDL_keyboard_c.h"
|
#include "../../events/SDL_keyboard_c.h"
|
||||||
|
|
||||||
#include "SDL_win32video.h"
|
#include "SDL_win32video.h"
|
||||||
|
#include "SDL_win32window.h"
|
||||||
|
|
||||||
/* This is included after SDL_win32video.h, which includes windows.h */
|
/* This is included after SDL_win32video.h, which includes windows.h */
|
||||||
#include "SDL_syswm.h"
|
#include "SDL_syswm.h"
|
||||||
|
#include "SDL_gapirender.h"
|
||||||
|
|
||||||
|
|
||||||
#define SHFS_SHOWTASKBAR 0x0001
|
|
||||||
#define SHFS_HIDETASKBAR 0x0002
|
|
||||||
#define SHFS_SHOWSIPBUTTON 0x0004
|
|
||||||
#define SHFS_HIDESIPBUTTON 0x0008
|
|
||||||
#define SHFS_SHOWSTARTICON 0x0010
|
|
||||||
#define SHFS_HIDESTARTICON 0x0020
|
|
||||||
|
|
||||||
#ifdef _WIN32_WCE
|
|
||||||
// dynamically load aygshell dll because we want SDL to work on HPC and be300
|
|
||||||
int aygshell_loaded = 0;
|
|
||||||
BOOL(WINAPI * SHFullScreen) (HWND hwndRequester, DWORD dwState) = 0;
|
|
||||||
|
|
||||||
|
|
||||||
static BOOL
|
|
||||||
CE_SHFullScreen(HWND hwndRequester, DWORD dwState)
|
|
||||||
{
|
|
||||||
if (SHFullScreen == 0 && aygshell_loaded == 0) {
|
|
||||||
aygshell_loaded = 0;
|
|
||||||
void *lib = SDL_LoadObject("aygshell.dll");
|
|
||||||
if (lib) {
|
|
||||||
SHFullScreen =
|
|
||||||
(BOOL(WINAPI *) (HWND, DWORD)) SDL_LoadFunction(lib,
|
|
||||||
"SHFullScreen");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (SHFullScreen) {
|
|
||||||
SHFullScreen(hwndRequester, dwState);
|
|
||||||
//printf("SHFullscreen(%i)\n",dwState);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Fake window to help with DirectInput events. */
|
/* Fake window to help with DirectInput events. */
|
||||||
HWND SDL_HelperWindow = NULL;
|
HWND SDL_HelperWindow = NULL;
|
||||||
static WCHAR *SDL_HelperWindowClassName = TEXT("SDLHelperWindowInputCatcher");
|
static WCHAR *SDL_HelperWindowClassName = TEXT("SDLHelperWindowInputCatcher");
|
||||||
|
@ -472,32 +440,22 @@ WIN_SetWindowSize(_THIS, SDL_Window * window)
|
||||||
void
|
void
|
||||||
WIN_ShowWindow(_THIS, SDL_Window * window)
|
WIN_ShowWindow(_THIS, SDL_Window * window)
|
||||||
{
|
{
|
||||||
HWND hwnd = ((SDL_WindowData *) window->driverdata)->hwnd;
|
|
||||||
|
|
||||||
ShowWindow(hwnd, SW_SHOW);
|
|
||||||
|
|
||||||
#ifdef _WIN32_WCE
|
#ifdef _WIN32_WCE
|
||||||
if (window->flags & SDL_WINDOW_FULLSCREEN) {
|
WINCE_ShowWindow(_this, window, 1);
|
||||||
CE_SHFullScreen(hwnd,
|
#else
|
||||||
SHFS_HIDESTARTICON | SHFS_HIDETASKBAR |
|
HWND hwnd = ((SDL_WindowData *) window->driverdata)->hwnd;
|
||||||
SHFS_HIDESIPBUTTON);
|
ShowWindow(hwnd, SW_SHOW);
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
WIN_HideWindow(_THIS, SDL_Window * window)
|
WIN_HideWindow(_THIS, SDL_Window * window)
|
||||||
{
|
{
|
||||||
HWND hwnd = ((SDL_WindowData *) window->driverdata)->hwnd;
|
|
||||||
|
|
||||||
ShowWindow(hwnd, SW_HIDE);
|
|
||||||
|
|
||||||
#ifdef _WIN32_WCE
|
#ifdef _WIN32_WCE
|
||||||
if (window->flags & SDL_WINDOW_FULLSCREEN) {
|
WINCE_ShowWindow(_this, window, 0);
|
||||||
CE_SHFullScreen(hwnd,
|
#else
|
||||||
SHFS_SHOWSTARTICON | SHFS_SHOWTASKBAR |
|
HWND hwnd = ((SDL_WindowData *) window->driverdata)->hwnd;
|
||||||
SHFS_SHOWSIPBUTTON);
|
ShowWindow(hwnd, SW_HIDE);
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -513,45 +471,33 @@ WIN_RaiseWindow(_THIS, SDL_Window * window)
|
||||||
top = HWND_NOTOPMOST;
|
top = HWND_NOTOPMOST;
|
||||||
}
|
}
|
||||||
SetWindowPos(hwnd, top, 0, 0, 0, 0, (SWP_NOMOVE | SWP_NOSIZE));
|
SetWindowPos(hwnd, top, 0, 0, 0, 0, (SWP_NOMOVE | SWP_NOSIZE));
|
||||||
|
|
||||||
#ifdef _WIN32_WCE
|
|
||||||
if (window->flags & SDL_WINDOW_FULLSCREEN) {
|
|
||||||
CE_SHFullScreen(hwnd,
|
|
||||||
SHFS_HIDESTARTICON | SHFS_HIDETASKBAR |
|
|
||||||
SHFS_HIDESIPBUTTON);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
WIN_MaximizeWindow(_THIS, SDL_Window * window)
|
WIN_MaximizeWindow(_THIS, SDL_Window * window)
|
||||||
{
|
{
|
||||||
HWND hwnd = ((SDL_WindowData *) window->driverdata)->hwnd;
|
HWND hwnd = ((SDL_WindowData *) window->driverdata)->hwnd;
|
||||||
|
SDL_VideoData *videodata = (SDL_VideoData *) _this->driverdata;
|
||||||
ShowWindow(hwnd, SW_MAXIMIZE);
|
|
||||||
|
|
||||||
#ifdef _WIN32_WCE
|
#ifdef _WIN32_WCE
|
||||||
if (window->flags & SDL_WINDOW_FULLSCREEN) {
|
if((window->flags & SDL_WINDOW_FULLSCREEN) && videodata->SHFullScreen)
|
||||||
CE_SHFullScreen(hwnd,
|
videodata->SHFullScreen(hwnd, SHFS_HIDETASKBAR | SHFS_HIDESTARTICON | SHFS_HIDESIPBUTTON);
|
||||||
SHFS_HIDESTARTICON | SHFS_HIDETASKBAR |
|
|
||||||
SHFS_HIDESIPBUTTON);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
ShowWindow(hwnd, SW_MAXIMIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
WIN_MinimizeWindow(_THIS, SDL_Window * window)
|
WIN_MinimizeWindow(_THIS, SDL_Window * window)
|
||||||
{
|
{
|
||||||
HWND hwnd = ((SDL_WindowData *) window->driverdata)->hwnd;
|
HWND hwnd = ((SDL_WindowData *) window->driverdata)->hwnd;
|
||||||
|
SDL_VideoData *videodata = (SDL_VideoData *) _this->driverdata;
|
||||||
|
|
||||||
ShowWindow(hwnd, SW_MINIMIZE);
|
ShowWindow(hwnd, SW_MINIMIZE);
|
||||||
|
|
||||||
#ifdef _WIN32_WCE
|
#ifdef _WIN32_WCE
|
||||||
if (window->flags & SDL_WINDOW_FULLSCREEN) {
|
if((window->flags & SDL_WINDOW_FULLSCREEN) && videodata->SHFullScreen)
|
||||||
CE_SHFullScreen(hwnd,
|
videodata->SHFullScreen(hwnd, SHFS_SHOWTASKBAR | SHFS_SHOWSTARTICON | SHFS_SHOWSIPBUTTON);
|
||||||
SHFS_SHOWSTARTICON | SHFS_SHOWTASKBAR |
|
|
||||||
SHFS_SHOWSIPBUTTON);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -586,6 +532,9 @@ WIN_DestroyWindow(_THIS, SDL_Window * window)
|
||||||
SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
|
SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
|
||||||
|
|
||||||
if (data) {
|
if (data) {
|
||||||
|
#ifdef _WIN32_WCE
|
||||||
|
WINCE_ShowWindow(_this, window, 0);
|
||||||
|
#endif
|
||||||
ReleaseDC(data->hwnd, data->hdc);
|
ReleaseDC(data->hwnd, data->hdc);
|
||||||
if (data->created) {
|
if (data->created) {
|
||||||
DestroyWindow(data->hwnd);
|
DestroyWindow(data->hwnd);
|
||||||
|
|
|
@ -24,6 +24,15 @@
|
||||||
#ifndef _SDL_win32window_h
|
#ifndef _SDL_win32window_h
|
||||||
#define _SDL_win32window_h
|
#define _SDL_win32window_h
|
||||||
|
|
||||||
|
#ifdef _WIN32_WCE
|
||||||
|
#define SHFS_SHOWTASKBAR 0x0001
|
||||||
|
#define SHFS_HIDETASKBAR 0x0002
|
||||||
|
#define SHFS_SHOWSIPBUTTON 0x0004
|
||||||
|
#define SHFS_HIDESIPBUTTON 0x0008
|
||||||
|
#define SHFS_SHOWSTARTICON 0x0010
|
||||||
|
#define SHFS_HIDESTARTICON 0x0020
|
||||||
|
#endif
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
SDL_Window *window;
|
SDL_Window *window;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue