# HG changeset patch # User Sam Lantinga # Date 1295912771 28800 # Node ID c2539ff054c83bc740d833b790bd4b5e5ed0524c # Parent e7680e2c9f3ce0392a811b1d792972deb7e12f04 Fixed compiling on Windows Mobile SDK 5.0 with Visual Studio 2008 diff -r e7680e2c9f3c -r c2539ff054c8 VisualCE/SDL.sln --- a/VisualCE/SDL.sln Mon Jan 24 15:10:16 2011 -0800 +++ b/VisualCE/SDL.sln Mon Jan 24 15:46:11 2011 -0800 @@ -1,6 +1,6 @@  -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SDL", "SDL\SDL.vcproj", "{C598024D-8030-4F9C-AB76-69BF4CA0645F}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SDLmain", "SDLmain\SDLmain.vcproj", "{5AC88B84-5EAA-4C1E-948D-332DA34227F6}" diff -r e7680e2c9f3c -r c2539ff054c8 VisualCE/SDL/SDL.vcproj --- a/VisualCE/SDL/SDL.vcproj Mon Jan 24 15:10:16 2011 -0800 +++ b/VisualCE/SDL/SDL.vcproj Mon Jan 24 15:46:11 2011 -0800 @@ -1,10 +1,11 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - + + + + @@ -1941,60 +916,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - - - - - - - + + + + - - - - - - - - - - - - - - - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - - - - - @@ -3670,11 +1223,23 @@ > + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - diff -r e7680e2c9f3c -r c2539ff054c8 VisualCE/SDLMain/SDLmain.vcproj --- a/VisualCE/SDLMain/SDLmain.vcproj Mon Jan 24 15:10:16 2011 -0800 +++ b/VisualCE/SDLMain/SDLmain.vcproj Mon Jan 24 15:46:11 2011 -0800 @@ -1,10 +1,11 @@ + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + #define SDL_TriggerBreakpoint() __debugbreak() #elif (defined(__GNUC__) && ((__i386__) || (__x86_64__))) diff -r e7680e2c9f3c -r c2539ff054c8 include/SDL_atomic.h --- a/include/SDL_atomic.h Mon Jan 24 15:10:16 2011 -0800 +++ b/include/SDL_atomic.h Mon Jan 24 15:46:11 2011 -0800 @@ -58,7 +58,7 @@ /* Need to do this here because intrin.h has C++ code in it */ /* Visual Studio 2005 has a bug where intrin.h conflicts with winnt.h */ -#if defined(_MSC_VER) && (_MSC_VER >= 1500) +#if defined(_MSC_VER) && (_MSC_VER >= 1500) && !defined(_WIN32_WCE) #include #define HAVE_MSC_ATOMICS #endif diff -r e7680e2c9f3c -r c2539ff054c8 include/SDL_compat.h --- a/include/SDL_compat.h Mon Jan 24 15:10:16 2011 -0800 +++ b/include/SDL_compat.h Mon Jan 24 15:46:11 2011 -0800 @@ -65,7 +65,7 @@ /*@{*/ /* Platform */ -#ifdef __WINDOWS__ +#ifdef __WIN32__ #undef __WIN32__ #define __WIN32__ 1 #endif diff -r e7680e2c9f3c -r c2539ff054c8 include/SDL_config_windows.h --- a/include/SDL_config_windows.h Mon Jan 24 15:10:16 2011 -0800 +++ b/include/SDL_config_windows.h Mon Jan 24 15:46:11 2011 -0800 @@ -20,8 +20,8 @@ slouken@libsdl.org */ -#ifndef _SDL_config_windows2_h -#define _SDL_config_windows2_h +#ifndef _SDL_config_windows_h +#define _SDL_config_windows_h #include "SDL_platform.h" @@ -178,7 +178,11 @@ #define SDL_VIDEO_DRIVER_DUMMY 1 #define SDL_VIDEO_DRIVER_WINDOWS 1 +#ifdef _WIN32_WCE +#define SDL_VIDEO_RENDER_GAPI 1 +#else #define SDL_VIDEO_RENDER_D3D 1 +#endif #define SDL_VIDEO_RENDER_GDI 1 /* Enable OpenGL support */ @@ -196,4 +200,4 @@ #define SDL_ASSEMBLY_ROUTINES 1 #endif -#endif /* _SDL_config_windows2_h */ +#endif /* _SDL_config_windows_h */ diff -r e7680e2c9f3c -r c2539ff054c8 include/SDL_main.h --- a/include/SDL_main.h Mon Jan 24 15:10:16 2011 -0800 +++ b/include/SDL_main.h Mon Jan 24 15:46:11 2011 -0800 @@ -31,7 +31,7 @@ * Redefine main() on some platforms so that it is called by SDL. */ -#if defined(__WINDOWS__) || \ +#if defined(__WIN32__) || \ (defined(__MWERKS__) && !defined(__BEOS__)) || \ defined(__SYMBIAN32__) || defined(__IPHONEOS__) || \ defined(__ANDROID__) @@ -66,7 +66,7 @@ /* From the SDL library code -- needed for registering the app on Win32 */ -#ifdef __WINDOWS__ +#ifdef __WIN32__ #include "begin_code.h" #ifdef __cplusplus diff -r e7680e2c9f3c -r c2539ff054c8 include/SDL_opengl.h --- a/include/SDL_opengl.h Mon Jan 24 15:10:16 2011 -0800 +++ b/include/SDL_opengl.h Mon Jan 24 15:46:11 2011 -0800 @@ -31,7 +31,7 @@ #include "SDL_config.h" -#ifdef __WINDOWS__ +#ifdef __WIN32__ #define WIN32_LEAN_AND_MEAN #ifndef NOMINMAX #define NOMINMAX /* Don't defined min() and max() */ diff -r e7680e2c9f3c -r c2539ff054c8 include/SDL_platform.h --- a/include/SDL_platform.h Mon Jan 24 15:10:16 2011 -0800 +++ b/include/SDL_platform.h Mon Jan 24 15:46:11 2011 -0800 @@ -125,8 +125,8 @@ #define __SOLARIS__ 1 #endif #if defined(WIN32) || defined(_WIN32) -#undef __WINDOWS__ -#define __WINDOWS__ 1 +#undef __WIN32__ +#define __WIN32__ 1 #endif #if defined(__NDS__) diff -r e7680e2c9f3c -r c2539ff054c8 include/SDL_rwops.h --- a/include/SDL_rwops.h Mon Jan 24 15:10:16 2011 -0800 +++ b/include/SDL_rwops.h Mon Jan 24 15:46:11 2011 -0800 @@ -83,7 +83,7 @@ Uint32 type; union { -#ifdef __WINDOWS__ +#ifdef __WIN32__ struct { SDL_bool append; diff -r e7680e2c9f3c -r c2539ff054c8 include/SDL_thread.h --- a/include/SDL_thread.h Mon Jan 24 15:10:16 2011 -0800 +++ b/include/SDL_thread.h Mon Jan 24 15:46:11 2011 -0800 @@ -55,7 +55,7 @@ */ typedef int (SDLCALL * SDL_ThreadFunction) (void *data); -#if defined(__WINDOWS__) && !defined(HAVE_LIBC) +#if defined(__WIN32__) && !defined(HAVE_LIBC) /** * \file SDL_thread.h * diff -r e7680e2c9f3c -r c2539ff054c8 include/begin_code.h --- a/include/begin_code.h Mon Jan 24 15:10:16 2011 -0800 +++ b/include/begin_code.h Mon Jan 24 15:46:11 2011 -0800 @@ -42,7 +42,7 @@ # else # define DECLSPEC __declspec(export) # endif -# elif defined(__WINDOWS__) +# elif defined(__WIN32__) # ifdef __BORLANDC__ # ifdef BUILD_SDL # define DECLSPEC @@ -63,7 +63,7 @@ /* By default SDL uses the C calling convention */ #ifndef SDLCALL -#if defined(__WINDOWS__) && !defined(__GNUC__) +#if defined(__WIN32__) && !defined(__GNUC__) #define SDLCALL __cdecl #else #define SDLCALL diff -r e7680e2c9f3c -r c2539ff054c8 src/SDL.c --- a/src/SDL.c Mon Jan 24 15:10:16 2011 -0800 +++ b/src/SDL.c Mon Jan 24 15:46:11 2011 -0800 @@ -39,7 +39,7 @@ extern int SDL_TimerInit(void); extern void SDL_TimerQuit(void); #endif -#if defined(__WINDOWS__) +#if defined(__WIN32__) extern int SDL_HelperWindowCreate(void); extern int SDL_HelperWindowDestroy(void); #endif @@ -147,7 +147,7 @@ /* Clear the error message */ SDL_ClearError(); -#if defined(__WINDOWS__) +#if defined(__WIN32__) if (SDL_HelperWindowCreate() < 0) { return -1; } @@ -220,7 +220,7 @@ fflush(stdout); #endif -#if defined(__WINDOWS__) +#if defined(__WIN32__) SDL_HelperWindowDestroy(); #endif SDL_QuitSubSystem(SDL_INIT_EVERYTHING); @@ -312,7 +312,7 @@ return "RISC OS"; #elif __SOLARIS__ return "Solaris"; -#elif __WINDOWS__ +#elif __WIN32__ #ifdef _WIN32_WCE return "Windows CE"; #else @@ -325,7 +325,7 @@ #endif } -#if defined(__WINDOWS__) +#if defined(__WIN32__) #if !defined(HAVE_LIBC) || (defined(__WATCOMC__) && defined(BUILD_DLL)) /* Need to include DllMain() on Watcom C for some reason.. */ @@ -347,6 +347,6 @@ } #endif /* building DLL with Watcom C */ -#endif /* __WINDOWS__ */ +#endif /* __WIN32__ */ /* vi: set ts=4 sw=4 expandtab: */ diff -r e7680e2c9f3c -r c2539ff054c8 src/SDL_assert.c --- a/src/SDL_assert.c Mon Jan 24 15:10:16 2011 -0800 +++ b/src/SDL_assert.c Mon Jan 24 15:46:11 2011 -0800 @@ -26,9 +26,19 @@ #include "SDL_assert_c.h" #include "video/SDL_sysvideo.h" -#ifdef __WINDOWS__ +#ifdef __WIN32__ #define WIN32_LEAN_AND_MEAN #include + +#ifndef WS_OVERLAPPEDWINDOW +#define WS_OVERLAPPEDWINDOW 0 +#endif + +#ifdef UNICODE +#define WIN_UTF8ToString(S) (WCHAR *)SDL_iconv_string("UCS-2", "UTF-8", (char *)S, SDL_strlen(S)+1) +#else +#define WIN_UTF8ToString(S) SDL_iconv_string("ASCII", "UTF-8", (char *)S, SDL_strlen(S)+1) +#endif #else /* fprintf, _exit(), etc. */ #include #include @@ -57,11 +67,12 @@ static void debug_print(const char *fmt, ...) { -#ifdef __WINDOWS__ +#ifdef __WIN32__ /* Format into a buffer for OutputDebugStringA(). */ char buf[1024]; char *startptr; char *ptr; + LPTSTR tstr; int len; va_list ap; va_start(ap, fmt); @@ -78,15 +89,19 @@ for (ptr = startptr; *ptr; ptr++) { if (*ptr == '\n') { *ptr = '\0'; - OutputDebugStringA(startptr); - OutputDebugStringA("\r\n"); + tstr = WIN_UTF8ToString(startptr); + OutputDebugString(tstr); + SDL_free(tstr); + OutputDebugString(TEXT("\r\n")); startptr = ptr+1; } } /* catch that last piece if it didn't have a newline... */ if (startptr != ptr) { - OutputDebugStringA(startptr); + tstr = WIN_UTF8ToString(startptr); + OutputDebugString(tstr); + SDL_free(tstr); } #else /* Unix has it easy. Just dump it to stderr. */ @@ -99,7 +114,7 @@ } -#ifdef __WINDOWS__ +#ifdef __WIN32__ static SDL_assert_state SDL_Windows_AssertChoice = SDL_ASSERTION_ABORT; static const SDL_assert_data *SDL_Windows_AssertData = NULL; @@ -113,6 +128,7 @@ /* !!! FIXME: all this code stinks. */ const SDL_assert_data *data = SDL_Windows_AssertData; char buf[1024]; + LPTSTR tstr; const int w = 100; const int h = 25; const int gap = 10; @@ -121,14 +137,14 @@ int len; int i; static const struct { - const char *name; + LPCTSTR name; SDL_assert_state state; } buttons[] = { - {"Abort", SDL_ASSERTION_ABORT }, - {"Break", SDL_ASSERTION_BREAK }, - {"Retry", SDL_ASSERTION_RETRY }, - {"Ignore", SDL_ASSERTION_IGNORE }, - {"Always Ignore", SDL_ASSERTION_ALWAYS_IGNORE }, + {TEXT("Abort"), SDL_ASSERTION_ABORT }, + {TEXT("Break"), SDL_ASSERTION_BREAK }, + {TEXT("Retry"), SDL_ASSERTION_RETRY }, + {TEXT("Ignore"), SDL_ASSERTION_IGNORE }, + {TEXT("Always Ignore"), SDL_ASSERTION_ALWAYS_IGNORE }, }; len = (int) SDL_snprintf(buf, sizeof (buf), @@ -140,14 +156,16 @@ buf[sizeof (buf) - 1] = '\0'; } - CreateWindowA("STATIC", buf, + tstr = WIN_UTF8ToString(buf); + CreateWindow(TEXT("STATIC"), tstr, WS_VISIBLE | WS_CHILD | SS_LEFT, x, y, 550, 100, hwnd, (HMENU) 1, NULL, NULL); + SDL_free(tstr); y += 110; for (i = 0; i < (sizeof (buttons) / sizeof (buttons[0])); i++) { - CreateWindowA("BUTTON", buttons[i].name, + CreateWindow(TEXT("BUTTON"), buttons[i].name, WS_VISIBLE | WS_CHILD, x, y, w, h, hwnd, (HMENU) buttons[i].state, NULL, NULL); @@ -248,7 +266,7 @@ static void SDL_ExitProcess(int exitcode) { -#ifdef __WINDOWS__ +#ifdef __WIN32__ ExitProcess(42); #else _exit(42); @@ -311,7 +329,7 @@ /* platform-specific UI... */ -#ifdef __WINDOWS__ +#ifdef __WIN32__ state = SDL_PromptAssertion_windows(data); #elif __MACOSX__ diff -r e7680e2c9f3c -r c2539ff054c8 src/atomic/SDL_spinlock.c --- a/src/atomic/SDL_spinlock.c Mon Jan 24 15:10:16 2011 -0800 +++ b/src/atomic/SDL_spinlock.c Mon Jan 24 15:46:11 2011 -0800 @@ -26,8 +26,13 @@ /* Don't do the check for Visual Studio 2005, it's safe here */ #if defined(_MSC_VER) +#ifdef _WIN32_WCE +#define WIN32_LEAN_AND_MEAN +#include +#else #include #endif +#endif /* _MSC_VER */ /* This function is where all the magic happens... */ SDL_bool diff -r e7680e2c9f3c -r c2539ff054c8 src/audio/SDL_audio.c --- a/src/audio/SDL_audio.c Mon Jan 24 15:10:16 2011 -0800 +++ b/src/audio/SDL_audio.c Mon Jan 24 15:46:11 2011 -0800 @@ -971,7 +971,7 @@ if (!current_audio.impl.ProvidesOwnCallbackThread) { /* Start the audio thread */ /* !!! FIXME: this is nasty. */ -#if (defined(__WINDOWS__) && !defined(_WIN32_WCE)) && !defined(HAVE_LIBC) +#if (defined(__WIN32__) && !defined(_WIN32_WCE)) && !defined(HAVE_LIBC) #undef SDL_CreateThread device->thread = SDL_CreateThread(SDL_RunAudio, device, NULL, NULL); #else diff -r e7680e2c9f3c -r c2539ff054c8 src/cpuinfo/SDL_cpuinfo.c --- a/src/cpuinfo/SDL_cpuinfo.c Mon Jan 24 15:10:16 2011 -0800 +++ b/src/cpuinfo/SDL_cpuinfo.c Mon Jan 24 15:46:11 2011 -0800 @@ -38,7 +38,7 @@ #include #include #endif -#ifdef __WINDOWS__ +#ifdef __WIN32__ #define WIN32_LEAN_AND_MEAN #include #endif @@ -319,7 +319,7 @@ sysctlbyname("hw.ncpu", &SDL_CPUCount, &size, NULL, 0); } #endif -#ifdef __WINDOWS__ +#ifdef __WIN32__ if (SDL_CPUCount <= 0) { SYSTEM_INFO info; GetSystemInfo(&info); diff -r e7680e2c9f3c -r c2539ff054c8 src/events/SDL_events.c --- a/src/events/SDL_events.c Mon Jan 24 15:10:16 2011 -0800 +++ b/src/events/SDL_events.c Mon Jan 24 15:46:11 2011 -0800 @@ -170,7 +170,7 @@ /* The event thread will handle timers too */ SDL_SetTimerThreaded(2); -#if (defined(__WINDOWS__) && !defined(_WIN32_WCE)) && !defined(HAVE_LIBC) +#if (defined(__WIN32__) && !defined(_WIN32_WCE)) && !defined(HAVE_LIBC) #undef SDL_CreateThread SDL_EventThread = SDL_CreateThread(SDL_GobbleEvents, NULL, NULL, NULL); diff -r e7680e2c9f3c -r c2539ff054c8 src/events/SDL_sysevents.h --- a/src/events/SDL_sysevents.h Mon Jan 24 15:10:16 2011 -0800 +++ b/src/events/SDL_sysevents.h Mon Jan 24 15:46:11 2011 -0800 @@ -29,7 +29,7 @@ #define MUST_THREAD_EVENTS #endif -#ifdef __WINDOWS__ /* Windows doesn't allow a separate event thread */ +#ifdef __WIN32__ /* Windows doesn't allow a separate event thread */ #define CANT_THREAD_EVENTS #endif diff -r e7680e2c9f3c -r c2539ff054c8 src/file/SDL_rwops.c --- a/src/file/SDL_rwops.c Mon Jan 24 15:10:16 2011 -0800 +++ b/src/file/SDL_rwops.c Mon Jan 24 15:46:11 2011 -0800 @@ -37,7 +37,7 @@ #include #endif /* __NDS__ */ -#ifdef __WINDOWS__ +#ifdef __WIN32__ /* Functions to read/write Win32 API file pointers */ /* Will not use it on WinCE because stdio is buffered, it means @@ -295,7 +295,7 @@ } return (0); } -#endif /* __WINDOWS__ */ +#endif /* __WIN32__ */ #ifdef HAVE_STDIO_H @@ -449,7 +449,7 @@ SDL_SetError("SDL_RWFromFile(): No file or no mode specified"); return NULL; } -#if defined(__WINDOWS__) +#if defined(__WIN32__) rwops = SDL_AllocRW(); if (!rwops) return NULL; /* SDL_SetError already setup by SDL_AllocRW() */ diff -r e7680e2c9f3c -r c2539ff054c8 src/libm/math_private.h --- a/src/libm/math_private.h Mon Jan 24 15:10:16 2011 -0800 +++ b/src/libm/math_private.h Mon Jan 24 15:46:11 2011 -0800 @@ -19,7 +19,7 @@ /*#include */ #include "SDL_endian.h" -#include +/*#include */ #define attribute_hidden #define libm_hidden_proto(x) diff -r e7680e2c9f3c -r c2539ff054c8 src/loadso/windows/SDL_sysloadso.c --- a/src/loadso/windows/SDL_sysloadso.c Mon Jan 24 15:10:16 2011 -0800 +++ b/src/loadso/windows/SDL_sysloadso.c Mon Jan 24 15:46:11 2011 -0800 @@ -61,7 +61,7 @@ SDL_free(sofile_t); SDL_free(errbuf_t); -#else /*if defined(__WINDOWS__) */ +#else /*if defined(__WIN32__) */ char errbuf[512]; handle = (void *) LoadLibrary(sofile); diff -r e7680e2c9f3c -r c2539ff054c8 src/power/windows/SDL_syspower.c --- a/src/power/windows/SDL_syspower.c Mon Jan 24 15:10:16 2011 -0800 +++ b/src/power/windows/SDL_syspower.c Mon Jan 24 15:46:11 2011 -0800 @@ -32,11 +32,20 @@ SDL_bool SDL_GetPowerInfo_Windows(SDL_PowerState * state, int *seconds, int *percent) { +#ifdef _WIN32_WCE + SYSTEM_POWER_STATUS_EX status; +#else SYSTEM_POWER_STATUS status; +#endif SDL_bool need_details = SDL_FALSE; /* This API should exist back to Win95 and Windows CE. */ - if (!GetSystemPowerStatus(&status)) { +#ifdef _WIN32_WCE + if (!GetSystemPowerStatusEx(&status, FALSE)) +#else + if (!GetSystemPowerStatus(&status)) +#endif + { /* !!! FIXME: push GetLastError() into SDL_GetError() */ *state = SDL_POWERSTATE_UNKNOWN; } else if (status.BatteryFlag == 0xFF) { /* unknown state */ diff -r e7680e2c9f3c -r c2539ff054c8 src/stdlib/SDL_getenv.c --- a/src/stdlib/SDL_getenv.c Mon Jan 24 15:10:16 2011 -0800 +++ b/src/stdlib/SDL_getenv.c Mon Jan 24 15:46:11 2011 -0800 @@ -25,7 +25,7 @@ #ifndef HAVE_GETENV -#if defined(__WINDOWS__) && !defined(_WIN32_WCE) +#if defined(__WIN32__) && !defined(_WIN32_WCE) #define WIN32_LEAN_AND_MEAN #include @@ -163,7 +163,7 @@ return value; } -#endif /* __WINDOWS__ */ +#endif /* __WIN32__ */ #endif /* !HAVE_GETENV */ diff -r e7680e2c9f3c -r c2539ff054c8 src/stdlib/SDL_stdlib.c --- a/src/stdlib/SDL_stdlib.c Mon Jan 24 15:10:16 2011 -0800 +++ b/src/stdlib/SDL_stdlib.c Mon Jan 24 15:46:11 2011 -0800 @@ -35,9 +35,7 @@ __declspec(selectany) int _fltused = 1; #endif -#ifdef _WIN64 - -#else +#ifdef _M_IX86 void __declspec(naked) diff -r e7680e2c9f3c -r c2539ff054c8 src/thread/windows/SDL_syssem.c --- a/src/thread/windows/SDL_syssem.c Mon Jan 24 15:10:16 2011 -0800 +++ b/src/thread/windows/SDL_syssem.c Mon Jan 24 15:46:11 2011 -0800 @@ -39,7 +39,7 @@ #else HANDLE id; #endif - LONG volatile count; + LONG count; }; diff -r e7680e2c9f3c -r c2539ff054c8 src/thread/windows/SDL_systhread.c --- a/src/thread/windows/SDL_systhread.c Mon Jan 24 15:10:16 2011 -0800 +++ b/src/thread/windows/SDL_systhread.c Mon Jan 24 15:46:11 2011 -0800 @@ -23,12 +23,10 @@ /* Win32 thread management routines for SDL */ -#define WIN32_LEAN_AND_MEAN -#include - #include "SDL_thread.h" #include "../SDL_thread_c.h" #include "../SDL_systhread.h" +#include "SDL_systhread_c.h" #ifndef SDL_PASSED_BEGINTHREAD_ENDTHREAD #ifndef _WIN32_WCE diff -r e7680e2c9f3c -r c2539ff054c8 src/video/SDL_renderer_gl.c --- a/src/video/SDL_renderer_gl.c Mon Jan 24 15:10:16 2011 -0800 +++ b/src/video/SDL_renderer_gl.c Mon Jan 24 15:46:11 2011 -0800 @@ -1181,7 +1181,7 @@ } data->glEnd(); } else { -#if defined(__APPLE__) || defined(__WINDOWS__) +#if defined(__APPLE__) || defined(__WIN32__) #else int x1, y1, x2, y2; #endif @@ -1200,7 +1200,7 @@ * least it would be pixel perfect. */ data->glBegin(GL_POINTS); -#if defined(__APPLE__) || defined(__WINDOWS__) +#if defined(__APPLE__) || defined(__WIN32__) /* Mac OS X and Windows seem to always leave the second point open */ data->glVertex2f(0.5f + points[count-1].x, 0.5f + points[count-1].y); #else diff -r e7680e2c9f3c -r c2539ff054c8 src/video/windows/SDL_gapirender.c --- a/src/video/windows/SDL_gapirender.c Mon Jan 24 15:10:16 2011 -0800 +++ b/src/video/windows/SDL_gapirender.c Mon Jan 24 15:46:11 2011 -0800 @@ -92,19 +92,19 @@ //#define DM_DISPLAYORIENTATION 0x00800000L //#endif -#define FORMAT_565 1 -#define FORMAT_555 2 -#define FORMAT_OTHER 3 +#define FORMAT_565 1 +#define FORMAT_555 2 +#define FORMAT_OTHER 3 -#define GETRAWFRAMEBUFFER 0x00020001 -#define GETGXINFO 0x00020000 +#define GETRAWFRAMEBUFFER 0x00020001 +#define GETGXINFO 0x00020000 -#define kfPalette 0x10 -#define kfDirect 0x20 -#define kfDirect555 0x40 -#define kfDirect565 0x80 +#define kfPalette 0x10 +#define kfDirect 0x20 +#define kfDirect555 0x40 +#define kfDirect565 0x80 -#define GX_FULLSCREEN 0x01 +#define GX_FULLSCREEN 0x01 enum ScreenOrientation { ORIENTATION_UNKNOWN = -1, ORIENTATION_UP = DMDO_0, ORIENTATION_DOWN = DMDO_180, ORIENTATION_LEFT = DMDO_270, ORIENTATION_RIGHT = DMDO_90 }; enum ScreenGeometry { GEOMETRY_UNKNOWN, GEOMETRY_PORTRAIT, GEOMETRY_LANDSCAPE, GEOMETRY_SQUARE }; @@ -123,15 +123,15 @@ // private display data typedef struct { - unsigned char* pixels; // video memory - int format; // video format - FrameBufferInfo fb; // framebuffer geometry - GapiInfo* gapi; // GAPI module + unsigned char* pixels; // video memory + int format; // video format + FrameBufferInfo fb; // framebuffer geometry + GapiInfo* gapi; // GAPI module int userOrientation; int systemOrientation; int hardwareGeometry; - int flags; // fb flags - float scale; // scale pointer position + int flags; // fb flags + float scale; // scale pointer position int debug; } WINCE_RenderData; @@ -147,110 +147,111 @@ // system func -SDL_Renderer* WINCE_CreateRenderer(SDL_Window* window, Uint32 flags); -void WINCE_DestroyRenderer(SDL_Renderer* renderer); +SDL_Renderer* WINCE_CreateRenderer(SDL_Window* window, Uint32 flags); +void WINCE_DestroyRenderer(SDL_Renderer* renderer); -int WINCE_CreateTexture(SDL_Renderer* renderer, SDL_Texture* texture); -void WINCE_DestroyTexture(SDL_Renderer* renderer, SDL_Texture* texture); -int WINCE_QueryTexturePixels(SDL_Renderer* renderer, SDL_Texture* texture, void** pixels, int* pitch); -int WINCE_UpdateTexture(SDL_Renderer* renderer, SDL_Texture* texture, const SDL_Rect* rect, const void* pixels, int pitch); -int WINCE_LockTexture(SDL_Renderer* renderer, SDL_Texture* texture, const SDL_Rect* rect, int dirty, void** pixels, int* pitch); -void WINCE_UnlockTexture(SDL_Renderer* renderer, SDL_Texture* texture); +int WINCE_CreateTexture(SDL_Renderer* renderer, SDL_Texture* texture); +void WINCE_DestroyTexture(SDL_Renderer* renderer, SDL_Texture* texture); +int WINCE_QueryTexturePixels(SDL_Renderer* renderer, SDL_Texture* texture, void** pixels, int* pitch); +int WINCE_UpdateTexture(SDL_Renderer* renderer, SDL_Texture* texture, const SDL_Rect* rect, const void* pixels, int pitch); +int WINCE_LockTexture(SDL_Renderer* renderer, SDL_Texture* texture, const SDL_Rect* rect, int dirty, void** pixels, int* pitch); +void WINCE_UnlockTexture(SDL_Renderer* renderer, SDL_Texture* texture); -int WINCE_Available(void); -void WINCE_SetupOrientation(WINCE_RenderData* data, int width, int height); +int WINCE_Available(void); +void WINCE_SetupOrientation(WINCE_RenderData* data, int width, int height); -int WINCE_RenderCopy(SDL_Renderer* renderer, SDL_Texture* texture, const SDL_Rect* srect, const SDL_Rect* drect); -void WINCE_ShowWindow(_THIS, SDL_Window* window, int visible); +int WINCE_RenderCopy(SDL_Renderer* renderer, SDL_Texture* texture, const SDL_Rect* srect, const SDL_Rect* drect); +void WINCE_ShowWindow(_THIS, SDL_Window* window, int visible); -void WINCE_RenderPresent(SDL_Renderer* renderer); -int WINCE_RenderDrawPoints(SDL_Renderer* renderer, const SDL_Point* points, int count); -int WINCE_RenderDrawLines(SDL_Renderer* renderer, const SDL_Point* points, int count); -int WINCE_RenderDrawRects(SDL_Renderer* renderer, const SDL_Rect ** rects, int count); -int WINCE_RenderFillRects(SDL_Renderer* renderer, const SDL_Rect** rects, int count); +void WINCE_RenderPresent(SDL_Renderer* renderer); +int WINCE_RenderDrawPoints(SDL_Renderer* renderer, const SDL_Point* points, int count); +int WINCE_RenderDrawLines(SDL_Renderer* renderer, const SDL_Point* points, int count); +int WINCE_RenderDrawRects(SDL_Renderer* renderer, const SDL_Rect ** rects, int count); +int WINCE_RenderFillRects(SDL_Renderer* renderer, const SDL_Rect** rects, int count); -void WINCE_PointerCoordinateTransform(SDL_Window* window, POINT* pt); -void WINCE_DumpVideoInfo(WINCE_RenderData* data); -void WINCE_PortraitTransform(WINCE_RenderData* data, int width, int height); -void WINCE_LandscapeTransform(WINCE_RenderData* data, int width, int height); -void WINCE_SquareTransform(WINCE_RenderData* data, int width, int height); -int WINCE_FixedGeometry(FrameBufferInfo* fb, int bpp, int debug); -int WINCE_GetDMOrientation(void); -int WINCE_SetDMOrientation(int orientation); -void WINCE_UpdateYUVTextureData(SDL_Texture* texture); +void WINCE_PointerCoordinateTransform(SDL_Window* window, POINT* pt); +void WINCE_DumpVideoInfo(WINCE_RenderData* data); +void WINCE_PortraitTransform(WINCE_RenderData* data, int width, int height); +void WINCE_LandscapeTransform(WINCE_RenderData* data, int width, int height); +void WINCE_SquareTransform(WINCE_RenderData* data, int width, int height); +int WINCE_FixedGeometry(FrameBufferInfo* fb, int bpp, int debug); +int WINCE_GetDMOrientation(void); +int WINCE_SetDMOrientation(int orientation); +void WINCE_UpdateYUVTextureData(SDL_Texture* texture); // gapi engine specific -int GAPI_Init(WINCE_RenderData* data, HWND hwnd); -void GAPI_Quit(WINCE_RenderData* data); +int GAPI_Init(WINCE_RenderData* data, HWND hwnd); +void GAPI_Quit(WINCE_RenderData* data); // raw engine specific -int RAW_Init(WINCE_RenderData* data); -void RAW_Quit(WINCE_RenderData* data); +int RAW_Init(WINCE_RenderData* data); +void RAW_Quit(WINCE_RenderData* data); // tools -void FrameBufferRotate(FrameBufferInfo* src, int orientation); -int GetFrameBufferOrientation(const FrameBufferInfo* src); -void PointerRotate(POINT* pt, const FrameBufferInfo* fb, int orientation); -void FrameBufferInitialize(FrameBufferInfo* fb); -void FrameBufferDumpInfo(const FrameBufferInfo* fb, const char*); -const char* GetOrientationName(int orientation); -void UpdateLine16to16(const FrameBufferInfo* fb, const Uint16* src, Uint16* dst, Uint16 width); +void FrameBufferRotate(FrameBufferInfo* src, int orientation); +int GetFrameBufferOrientation(const FrameBufferInfo* src); +void PointerRotate(POINT* pt, const FrameBufferInfo* fb, int orientation); +void FrameBufferInitialize(FrameBufferInfo* fb); +void FrameBufferDumpInfo(const FrameBufferInfo* fb, const char*); +const char* GetOrientationName(int orientation); +void UpdateLine16to16(const FrameBufferInfo* fb, const Uint16* src, Uint16* dst, Uint16 width); // stdlib -inline int __abs(int x){ return x < 0 ? -x : x; }; -inline void __swap(int* a, int* b){ int t = *a; *a = *b; *b = t; }; +static __inline__ int __abs(int x){ return x < 0 ? -x : x; }; +static __inline__ void __swap(int* a, int* b){ int t = *a; *a = *b; *b = t; }; -#define GAPI_RENDER_NAME "gapi" -#define RAW_RENDER_NAME "raw" +#define GAPI_RENDER_NAME "gapi" +#define RAW_RENDER_NAME "raw" // SDL_RenderDriver GAPI_RenderDriver = { WINCE_CreateRenderer, { - GAPI_RENDER_NAME, - (SDL_RENDERER_SINGLEBUFFER | SDL_RENDERER_PRESENTDISCARD), - (SDL_TEXTUREMODULATE_NONE), - (SDL_BLENDMODE_NONE), - (SDL_SCALEMODE_NONE), - 7, - { - SDL_PIXELFORMAT_RGB555, - SDL_PIXELFORMAT_RGB565, - SDL_PIXELFORMAT_YV12, - SDL_PIXELFORMAT_IYUV, - SDL_PIXELFORMAT_YUY2, - SDL_PIXELFORMAT_UYVY, - SDL_PIXELFORMAT_YVYU - }, - 0, - 0 + GAPI_RENDER_NAME, + (SDL_RENDERER_SINGLEBUFFER | SDL_RENDERER_PRESENTDISCARD), + (SDL_TEXTUREMODULATE_NONE), + (SDL_BLENDMODE_NONE), + (SDL_SCALEMODE_NONE), + 7, + { + SDL_PIXELFORMAT_RGB555, + SDL_PIXELFORMAT_RGB565, + SDL_PIXELFORMAT_YV12, + SDL_PIXELFORMAT_IYUV, + SDL_PIXELFORMAT_YUY2, + SDL_PIXELFORMAT_UYVY, + SDL_PIXELFORMAT_YVYU + }, + 0, + 0 } }; SDL_RenderDriver RAW_RenderDriver = { WINCE_CreateRenderer, { - RAW_RENDER_NAME, - (SDL_RENDERER_SINGLEBUFFER | SDL_RENDERER_PRESENTDISCARD), - (SDL_TEXTUREMODULATE_NONE), - (SDL_BLENDMODE_NONE), - (SDL_SCALEMODE_NONE), - 7, - { - SDL_PIXELFORMAT_RGB555, - SDL_PIXELFORMAT_RGB565, - SDL_PIXELFORMAT_YV12, - SDL_PIXELFORMAT_IYUV, - SDL_PIXELFORMAT_YUY2, - SDL_PIXELFORMAT_UYVY, - SDL_PIXELFORMAT_YVYU - }, - 0, - 0 + RAW_RENDER_NAME, + (SDL_RENDERER_SINGLEBUFFER | SDL_RENDERER_PRESENTDISCARD), + (SDL_TEXTUREMODULATE_NONE), + (SDL_BLENDMODE_NONE), + (SDL_SCALEMODE_NONE), + 7, + { + SDL_PIXELFORMAT_RGB555, + SDL_PIXELFORMAT_RGB565, + SDL_PIXELFORMAT_YV12, + SDL_PIXELFORMAT_IYUV, + SDL_PIXELFORMAT_YUY2, + SDL_PIXELFORMAT_UYVY, + SDL_PIXELFORMAT_YVYU + }, + 0, + 0 } }; int WINCE_Available(void) { + HMODULE render_gapi; const char* preferably = SDL_getenv("SDL_VIDEO_RENDERER"); // raw check @@ -260,13 +261,13 @@ ReleaseDC(NULL, hdc); if(render_raw != 0 && rfbi.cxPixels != 0 && rfbi.cyPixels != 0 && - rfbi.pFramePointer != 0 && rfbi.cxStride != 0 && rfbi.cyStride != 0) - render_raw = 1; + rfbi.pFramePointer != 0 && rfbi.cxStride != 0 && rfbi.cyStride != 0) + render_raw = 1; if(preferably && 0 == SDL_strcasecmp(preferably, RAW_RENDER_NAME)) return 0 != render_raw; // gapi check - HMODULE render_gapi = LoadLibrary(TEXT("\\Windows\\gx.dll")); + render_gapi = LoadLibrary(TEXT("\\Windows\\gx.dll")); if(0 == render_gapi) render_gapi = LoadLibrary(TEXT("gx.dll")); FreeLibrary(render_gapi); @@ -290,8 +291,8 @@ ReleaseDC(NULL, hdc); if(render_raw != 0 && rfbi.cxPixels != 0 && rfbi.cyPixels != 0 && - rfbi.pFramePointer != 0 && rfbi.cxStride != 0 && rfbi.cyStride != 0) - render_raw = 1; + rfbi.pFramePointer != 0 && rfbi.cxStride != 0 && rfbi.cyStride != 0) + render_raw = 1; // gapi check render_gapi = LoadLibrary(TEXT("\\Windows\\gx.dll")); @@ -299,25 +300,25 @@ render_gapi = LoadLibrary(TEXT("gx.dll")); if(render_gapi) - FreeLibrary(render_gapi); + FreeLibrary(render_gapi); for(ii = 0; ii < _this->num_displays; ++ii) { - if(preferably) - { - if(0 == SDL_strcasecmp(preferably, RAW_RENDER_NAME) && render_raw) - SDL_AddRenderDriver(&_this->displays[ii], &RAW_RenderDriver); - else - if(0 == SDL_strcasecmp(preferably, GAPI_RENDER_NAME) && render_gapi) - SDL_AddRenderDriver(&_this->displays[ii], &GAPI_RenderDriver); - } - else - { - if(render_raw) - SDL_AddRenderDriver(&_this->displays[ii], &RAW_RenderDriver); - if(render_gapi) - SDL_AddRenderDriver(&_this->displays[ii], &GAPI_RenderDriver); - } + if(preferably) + { + if(0 == SDL_strcasecmp(preferably, RAW_RENDER_NAME) && render_raw) + SDL_AddRenderDriver(&_this->displays[ii], &RAW_RenderDriver); + else + if(0 == SDL_strcasecmp(preferably, GAPI_RENDER_NAME) && render_gapi) + SDL_AddRenderDriver(&_this->displays[ii], &GAPI_RenderDriver); + } + else + { + if(render_raw) + SDL_AddRenderDriver(&_this->displays[ii], &RAW_RenderDriver); + if(render_gapi) + SDL_AddRenderDriver(&_this->displays[ii], &GAPI_RenderDriver); + } } } @@ -332,7 +333,7 @@ Uint32 Rmask, Gmask, Bmask, Amask; if(!(window->flags & SDL_WINDOW_FULLSCREEN)) - window->flags |= SDL_WINDOW_FULLSCREEN; + window->flags |= SDL_WINDOW_FULLSCREEN; if(!SDL_PixelFormatEnumToMasks(displayMode->format, &bpp, &Rmask, &Gmask, &Bmask, &Amask)) { @@ -342,13 +343,13 @@ switch(window->fullscreen_mode.format) { - case SDL_PIXELFORMAT_RGB555: - case SDL_PIXELFORMAT_RGB565: - break; + case SDL_PIXELFORMAT_RGB555: + case SDL_PIXELFORMAT_RGB565: + break; - default: - SDL_SetError("Support only 16 or 15 bpp"); - return NULL; + default: + SDL_SetError("Support only 16 or 15 bpp"); + return NULL; } renderer = (SDL_Renderer*) SDL_calloc(1, sizeof(SDL_Renderer)); @@ -375,9 +376,9 @@ // set debug - data->debug = SDL_getenv("DEBUG_VIDEO_GAPI") || SDL_getenv("GAPI_RENDERER_DEBUG") ? 1 : 0; + data->debug = SDL_getenv("DEBUG_VIDEO_GAPI") || SDL_getenv("GAPI_RENDERER_DEBUG") ? 1 : 0; #if defined(DEBUG_VIDEO_GAPI) || defined(GAPI_RENDERER_DEBUG) - data->debug = 1; + data->debug = 1; #endif windowdata->videodata->render = data->gapi ? RENDER_GAPI : RENDER_RAW; @@ -418,10 +419,10 @@ if(renderdata) { - if(renderdata->gapi) - GAPI_Quit(renderdata); - else - RAW_Quit(renderdata); + if(renderdata->gapi) + GAPI_Quit(renderdata); + else + RAW_Quit(renderdata); SDL_free(renderdata); } @@ -448,20 +449,21 @@ if(SDL_ISPIXELFORMAT_FOURCC(texture->format)) { - texturedata->yuv = SDL_SW_CreateYUVTexture(texture->format, texture->w, texture->h); + SDL_Window* window = renderer->window; + SDL_VideoDisplay* display = window->display; + + texturedata->yuv = SDL_SW_CreateYUVTexture(texture->format, texture->w, texture->h); if(NULL == texturedata->yuv) - { - SDL_OutOfMemory(); + { + SDL_OutOfMemory(); return -1; } - SDL_Window* window = renderer->window; - SDL_VideoDisplay* display = window->display; - texturedata->format = display->current_mode.format; + texturedata->format = display->current_mode.format; } else { - texturedata->yuv = NULL; - texturedata->format = texture->format; + texturedata->yuv = NULL; + texturedata->format = texture->format; } texture->driverdata = texturedata; @@ -475,10 +477,10 @@ if(texturedata) { - if(texturedata->yuv) SDL_SW_DestroyYUVTexture(texturedata->yuv); - if(texturedata->pixels) SDL_free(texturedata->pixels); - SDL_free(texturedata); - texture->driverdata = NULL; + if(texturedata->yuv) SDL_SW_DestroyYUVTexture(texturedata->yuv); + if(texturedata->pixels) SDL_free(texturedata->pixels); + SDL_free(texturedata); + texture->driverdata = NULL; } } @@ -509,19 +511,19 @@ if(0 < rect->w && 0 < rect->h) { - const unsigned char *src = ((const unsigned char*) pixels); - unsigned char *dst = ((unsigned char*) texturedata->pixels) + - rect->y * texturedata->pitch + - rect->x * SDL_BYTESPERPIXEL(texture->format); + const unsigned char *src = ((const unsigned char*) pixels); + unsigned char *dst = ((unsigned char*) texturedata->pixels) + + rect->y * texturedata->pitch + + rect->x * SDL_BYTESPERPIXEL(texture->format); int length = rect->w * SDL_BYTESPERPIXEL(texture->format); - int height = rect->h; + int height = rect->h; - while(height--) - { - SDL_memcpy(dst, src, length); - dst += texturedata->pitch; - src += pitch; - } + while(height--) + { + SDL_memcpy(dst, src, length); + dst += texturedata->pitch; + src += pitch; + } } return 0; @@ -535,9 +537,10 @@ return SDL_SW_LockYUVTexture(texturedata->yuv, rect, dirty, pixels, pitch); *pixels = (void *) ((unsigned char*) texturedata->pixels + - rect->y * texturedata->pitch + - rect->x * SDL_BYTESPERPIXEL(texture->format)); + rect->y * texturedata->pitch + + rect->x * SDL_BYTESPERPIXEL(texture->format)); *pitch = texturedata->pitch; + return 0; } void WINCE_UnlockTexture(SDL_Renderer* renderer, SDL_Texture* texture) @@ -547,7 +550,7 @@ if(texturedata->yuv) { SDL_SW_UnlockYUVTexture(texturedata->yuv); - WINCE_UpdateYUVTextureData(texture); + WINCE_UpdateYUVTextureData(texture); } } @@ -555,41 +558,43 @@ { WINCE_RenderData* dstdata = (WINCE_RenderData*) renderer->driverdata; WINCE_TextureData* srcdata = (WINCE_TextureData*) texture->driverdata; + const unsigned char *src; + unsigned char *dst; if((dstdata->flags & FB_SUSPENDED) || - 0 >= srect->w || 0 >= srect->h) return; + 0 >= srect->w || 0 >= srect->h) return 0; // lock gapi if(dstdata->gapi) dstdata->gapi->GXBeginDraw(); - const unsigned char *src = ((const unsigned char*) srcdata->pixels); - unsigned char *dst = dstdata->pixels + (dstdata->flags & FB_SKIP_OFFSET ? 0 : dstdata->fb.offset) + - drect->y * dstdata->fb.ypitch + - drect->x * dstdata->fb.xpitch; + src = ((const unsigned char*) srcdata->pixels); + dst = dstdata->pixels + (dstdata->flags & FB_SKIP_OFFSET ? 0 : dstdata->fb.offset) + + drect->y * dstdata->fb.ypitch + + drect->x * dstdata->fb.xpitch; if(srcdata->yuv) { - return SDL_SW_CopyYUVToRGB(srcdata->yuv, + return SDL_SW_CopyYUVToRGB(srcdata->yuv, srect, srcdata->format, drect->w, drect->h, dst, dstdata->fb.ypitch); } else { - int height = drect->h; - int length = drect->w * SDL_BYTESPERPIXEL(texture->format); // in bytes + int height = drect->h; + int length = drect->w * SDL_BYTESPERPIXEL(texture->format); // in bytes - while(height--) - { - switch(SDL_BYTESPERPIXEL(texture->format)) - { - case 2: UpdateLine16to16(&dstdata->fb, (Uint16*) src, (Uint16*) dst, length >> 1); break; + while(height--) + { + switch(SDL_BYTESPERPIXEL(texture->format)) + { + case 2: UpdateLine16to16(&dstdata->fb, (Uint16*) src, (Uint16*) dst, length >> 1); break; - default: break; - } + default: break; + } - dst += dstdata->fb.ypitch; - src += srcdata->pitch; - } + dst += dstdata->fb.ypitch; + src += srcdata->pitch; + } } // unlock gapi @@ -630,8 +635,8 @@ void WINCE_SetupOrientation(WINCE_RenderData* data, int width, int height) { - const float maxW1 = GetSystemMetrics(SM_CXSCREEN) > GetSystemMetrics(SM_CYSCREEN) ? GetSystemMetrics(SM_CXSCREEN) : GetSystemMetrics(SM_CYSCREEN); - const float maxW2 = data->fb.width > data->fb.height ? data->fb.width : data->fb.height; + const float maxW1 = (float)(GetSystemMetrics(SM_CXSCREEN) > GetSystemMetrics(SM_CYSCREEN) ? GetSystemMetrics(SM_CXSCREEN) : GetSystemMetrics(SM_CYSCREEN)); + const float maxW2 = (float)(data->fb.width > data->fb.height ? data->fb.width : data->fb.height); // scale define data->scale = maxW2 / maxW1; @@ -643,31 +648,31 @@ data->userOrientation = ORIENTATION_UP; data->systemOrientation = WINCE_GetDMOrientation(); data->hardwareGeometry = data->fb.width == data->fb.height ? GEOMETRY_SQUARE : - (data->fb.width < data->fb.height ? GEOMETRY_PORTRAIT : GEOMETRY_LANDSCAPE); + (data->fb.width < data->fb.height ? GEOMETRY_PORTRAIT : GEOMETRY_LANDSCAPE); if(data->debug) - WINCE_DumpVideoInfo(data); + WINCE_DumpVideoInfo(data); if(data->systemOrientation == ORIENTATION_UNKNOWN) - data->systemOrientation == ORIENTATION_UP; + data->systemOrientation = ORIENTATION_UP; data->userOrientation = ORIENTATION_UP; switch(data->hardwareGeometry) { - case GEOMETRY_PORTRAIT: WINCE_PortraitTransform(data, width, height); break; - case GEOMETRY_LANDSCAPE: WINCE_LandscapeTransform(data, width, height); break; - case GEOMETRY_SQUARE: WINCE_SquareTransform(data, width, height); break; - default: break; + case GEOMETRY_PORTRAIT: WINCE_PortraitTransform(data, width, height); break; + case GEOMETRY_LANDSCAPE: WINCE_LandscapeTransform(data, width, height); break; + case GEOMETRY_SQUARE: WINCE_SquareTransform(data, width, height); break; + default: break; } // debug if(data->debug) { - printf("\n"); - printf("user video width: %d\n", width); - printf("user video height: %d\n", height); - FrameBufferDumpInfo(&data->fb, "user"); + printf("\n"); + printf("user video width: %d\n", width); + printf("user video height: %d\n", height); + FrameBufferDumpInfo(&data->fb, "user"); } } @@ -705,42 +710,42 @@ if(visible) { - if(window->flags & SDL_WINDOW_FULLSCREEN) - { - if(videodata->SHFullScreen) - videodata->SHFullScreen(windowdata->hwnd, SHFS_HIDETASKBAR | SHFS_HIDESTARTICON | SHFS_HIDESIPBUTTON); - ShowWindow(FindWindow(TEXT("HHTaskBar"), NULL), SW_HIDE); - } + if(window->flags & SDL_WINDOW_FULLSCREEN) + { + if(videodata->SHFullScreen) + videodata->SHFullScreen(windowdata->hwnd, SHFS_HIDETASKBAR | SHFS_HIDESTARTICON | SHFS_HIDESIPBUTTON); + ShowWindow(FindWindow(TEXT("HHTaskBar"), NULL), SW_HIDE); + } - ShowWindow(windowdata->hwnd, SW_SHOW); + ShowWindow(windowdata->hwnd, SW_SHOW); SetForegroundWindow(windowdata->hwnd); - if(renderer && - (videodata->render == RENDER_GAPI || videodata->render == RENDER_RAW)) - { - WINCE_RenderData* renderdata = (WINCE_RenderData*) renderer->driverdata; - renderdata->flags &= ~FB_SUSPENDED; - if(renderdata->gapi) renderdata->gapi->GXResume(); - } + if(renderer && + (videodata->render == RENDER_GAPI || videodata->render == RENDER_RAW)) + { + WINCE_RenderData* renderdata = (WINCE_RenderData*) renderer->driverdata; + renderdata->flags &= ~FB_SUSPENDED; + if(renderdata->gapi) renderdata->gapi->GXResume(); + } } else { - if(renderer && - (videodata->render == RENDER_GAPI || videodata->render == RENDER_RAW)) - { - WINCE_RenderData* renderdata = (WINCE_RenderData*) renderer->driverdata; - if(renderdata->gapi) renderdata->gapi->GXSuspend(); - renderdata->flags |= FB_SUSPENDED; - } + if(renderer && + (videodata->render == RENDER_GAPI || videodata->render == RENDER_RAW)) + { + WINCE_RenderData* renderdata = (WINCE_RenderData*) renderer->driverdata; + if(renderdata->gapi) renderdata->gapi->GXSuspend(); + renderdata->flags |= FB_SUSPENDED; + } - ShowWindow(windowdata->hwnd, SW_HIDE); + ShowWindow(windowdata->hwnd, SW_HIDE); - if(window->flags & SDL_WINDOW_FULLSCREEN) - { - if(videodata->SHFullScreen) - videodata->SHFullScreen(windowdata->hwnd, SHFS_SHOWTASKBAR | SHFS_SHOWSTARTICON | SHFS_SHOWSIPBUTTON); - ShowWindow(FindWindow(TEXT("HHTaskBar"), NULL), SW_SHOW); - } + if(window->flags & SDL_WINDOW_FULLSCREEN) + { + if(videodata->SHFullScreen) + videodata->SHFullScreen(windowdata->hwnd, SHFS_SHOWTASKBAR | SHFS_SHOWSTARTICON | SHFS_SHOWSIPBUTTON); + ShowWindow(FindWindow(TEXT("HHTaskBar"), NULL), SW_SHOW); + } } } @@ -749,8 +754,8 @@ { WINCE_RenderData* data = (WINCE_RenderData*) window->renderer->driverdata; - pt->x *= data->scale; - pt->y *= data->scale; + pt->x = (LONG)(pt->x * data->scale); + pt->y = (LONG)(pt->y * data->scale); PointerRotate(pt, &data->fb, data->userOrientation); } @@ -758,44 +763,45 @@ void WINCE_PortraitTransform(WINCE_RenderData* data, int width, int height) { if(data->systemOrientation != ORIENTATION_UP) - FrameBufferRotate(&data->fb, data->systemOrientation); + FrameBufferRotate(&data->fb, data->systemOrientation); - if(data->fb.width != width || data->fb.height != height) - switch(data->systemOrientation) - { - case ORIENTATION_UP: - case ORIENTATION_LEFT: data->userOrientation = ORIENTATION_RIGHT; break; - case ORIENTATION_RIGHT: - case ORIENTATION_DOWN: data->userOrientation = ORIENTATION_LEFT; break; - default: break; + if(data->fb.width != width || data->fb.height != height) { + switch(data->systemOrientation) + { + case ORIENTATION_UP: + case ORIENTATION_LEFT: data->userOrientation = ORIENTATION_RIGHT; break; + case ORIENTATION_RIGHT: + case ORIENTATION_DOWN: data->userOrientation = ORIENTATION_LEFT; break; + default: break; + } } if(data->userOrientation != ORIENTATION_UP) - FrameBufferRotate(&data->fb, data->userOrientation); + FrameBufferRotate(&data->fb, data->userOrientation); } void WINCE_LandscapeTransform(WINCE_RenderData* data, int width, int height) { switch(data->systemOrientation) { - case ORIENTATION_UP: FrameBufferRotate(&data->fb, ORIENTATION_LEFT); break; - case ORIENTATION_LEFT:FrameBufferRotate(&data->fb, ORIENTATION_DOWN); break; - case ORIENTATION_DOWN:FrameBufferRotate(&data->fb, ORIENTATION_RIGHT); break; - default: break; + case ORIENTATION_UP: FrameBufferRotate(&data->fb, ORIENTATION_LEFT); break; + case ORIENTATION_LEFT:FrameBufferRotate(&data->fb, ORIENTATION_DOWN); break; + case ORIENTATION_DOWN:FrameBufferRotate(&data->fb, ORIENTATION_RIGHT); break; + default: break; } if(data->fb.width != width || data->fb.height != height) switch(data->systemOrientation) { - case ORIENTATION_UP: - case ORIENTATION_LEFT: data->userOrientation = ORIENTATION_RIGHT; break; - case ORIENTATION_RIGHT: - case ORIENTATION_DOWN: data->userOrientation = ORIENTATION_LEFT; break; - default: break; + case ORIENTATION_UP: + case ORIENTATION_LEFT: data->userOrientation = ORIENTATION_RIGHT; break; + case ORIENTATION_RIGHT: + case ORIENTATION_DOWN: data->userOrientation = ORIENTATION_LEFT; break; + default: break; } if(data->userOrientation != ORIENTATION_UP) - FrameBufferRotate(&data->fb, data->userOrientation); + FrameBufferRotate(&data->fb, data->userOrientation); } void WINCE_SquareTransform(WINCE_RenderData* data, int width, int height) @@ -807,43 +813,43 @@ { // check square if(GetSystemMetrics(SM_CXSCREEN) == GetSystemMetrics(SM_CYSCREEN) && - fb->width != fb->height) + fb->width != fb->height) { - if(fb->width < fb->height) - fb->height = fb->width; - else - if(fb->height < fb->width) - fb->width = fb->height; + if(fb->width < fb->height) + fb->height = fb->width; + else + if(fb->height < fb->width) + fb->width = fb->height; } // check width if(__abs(fb->xpitch) == bpp && - fb->width != __abs(fb->ypitch) / bpp) + fb->width != __abs(fb->ypitch) / bpp) { - if(fb->height == __abs(fb->ypitch) / bpp) - { - __swap(&fb->width, &fb->height); + if(fb->height == __abs(fb->ypitch) / bpp) + { + __swap(&fb->width, &fb->height); - if(debug) - printf("WINCE_FixedGeometry: width: %d, height: %d\n", fb->width, fb->height); - } - else - return -1; + if(debug) + printf("WINCE_FixedGeometry: width: %d, height: %d\n", fb->width, fb->height); + } + else + return -1; } else // check height if(__abs(fb->ypitch) == bpp && - fb->height != __abs(fb->xpitch) / bpp) + fb->height != __abs(fb->xpitch) / bpp) { - if(fb->width == __abs(fb->xpitch) / bpp) - { - __swap(&fb->width, &fb->height); + if(fb->width == __abs(fb->xpitch) / bpp) + { + __swap(&fb->width, &fb->height); - if(debug) - printf("WINCE_FixedGeometry: width: %d, height: %d\n", fb->width, fb->height); - } - else - return -1; + if(debug) + printf("WINCE_FixedGeometry: width: %d, height: %d\n", fb->width, fb->height); + } + else + return -1; } return 0; @@ -865,8 +871,12 @@ { if(NULL == data->gapi) { - const char* preferably = SDL_getenv("SDL_VIDEO_RENDERER"); - if(preferably && 0 != SDL_strcasecmp(preferably, GAPI_RENDER_NAME)) return 0; + struct GXDisplayProperties gxProperties; + GXDeviceInfo gxInfo = { 0 }; + HDC hdc; + int enable, result; + const char* preferably = SDL_getenv("SDL_VIDEO_RENDERER"); + if(preferably && 0 != SDL_strcasecmp(preferably, GAPI_RENDER_NAME)) return 0; data->gapi = (GapiInfo *) SDL_calloc(1, sizeof(GapiInfo)); if(NULL == data->gapi) @@ -875,116 +885,116 @@ return 0; } - data->gapi->hGapiLib = LoadLibrary(TEXT("\\Windows\\gx.dll")); - if(0 == data->gapi->hGapiLib) - { - data->gapi->hGapiLib = LoadLibrary(TEXT("gx.dll")); - if(0 == data->gapi->hGapiLib) return 0; - } + data->gapi->hGapiLib = LoadLibrary(TEXT("\\Windows\\gx.dll")); + if(0 == data->gapi->hGapiLib) + { + data->gapi->hGapiLib = LoadLibrary(TEXT("gx.dll")); + if(0 == data->gapi->hGapiLib) return 0; + } - // load gapi library + // load gapi library #define LINK(type,name,import) name=(PFN##type)GetProcAddress(data->gapi->hGapiLib,TEXT(import)) - LINK(GXOpenDisplay, data->gapi->GXOpenDisplay, "?GXOpenDisplay@@YAHPAUHWND__@@K@Z"); - LINK(GXCloseDisplay, data->gapi->GXCloseDisplay, "?GXCloseDisplay@@YAHXZ"); - LINK(GXBeginDraw, data->gapi->GXBeginDraw, "?GXBeginDraw@@YAPAXXZ"); - LINK(GXEndDraw, data->gapi->GXEndDraw, "?GXEndDraw@@YAHXZ"); - LINK(GXGetDisplayProperties,data->gapi->GXGetDisplayProperties,"?GXGetDisplayProperties@@YA?AUGXDisplayProperties@@XZ"); - LINK(GXSuspend, data->gapi->GXSuspend, "?GXSuspend@@YAHXZ"); - LINK(GXResume, data->gapi->GXResume, "?GXResume@@YAHXZ"); + LINK(GXOpenDisplay, data->gapi->GXOpenDisplay, "?GXOpenDisplay@@YAHPAUHWND__@@K@Z"); + LINK(GXCloseDisplay, data->gapi->GXCloseDisplay, "?GXCloseDisplay@@YAHXZ"); + LINK(GXBeginDraw, data->gapi->GXBeginDraw, "?GXBeginDraw@@YAPAXXZ"); + LINK(GXEndDraw, data->gapi->GXEndDraw, "?GXEndDraw@@YAHXZ"); + LINK(GXGetDisplayProperties,data->gapi->GXGetDisplayProperties,"?GXGetDisplayProperties@@YA?AUGXDisplayProperties@@XZ"); + LINK(GXSuspend, data->gapi->GXSuspend, "?GXSuspend@@YAHXZ"); + LINK(GXResume, data->gapi->GXResume, "?GXResume@@YAHXZ"); #undef LINK - int enable = data->gapi->GXGetDisplayProperties && data->gapi->GXCloseDisplay && data->gapi->GXOpenDisplay && - data->gapi->GXBeginDraw && data->gapi->GXEndDraw && data->gapi->GXSuspend && data->gapi->GXResume; + enable = data->gapi->GXGetDisplayProperties && data->gapi->GXCloseDisplay && data->gapi->GXOpenDisplay && + data->gapi->GXBeginDraw && data->gapi->GXEndDraw && data->gapi->GXSuspend && data->gapi->GXResume; - if(!enable) - { - SDL_SetError("GAPI_Init: error gx.dll: internal error"); - GAPI_Quit(data); - return 0; - } + if(!enable) + { + SDL_SetError("GAPI_Init: error gx.dll: internal error"); + GAPI_Quit(data); + return 0; + } - if(0 == data->gapi->GXOpenDisplay(hwnd, GX_FULLSCREEN)) - { - SDL_SetError("GAPI_Init: couldn't initialize GAPI"); - GAPI_Quit(data); - return 0; - } + if(0 == data->gapi->GXOpenDisplay(hwnd, GX_FULLSCREEN)) + { + SDL_SetError("GAPI_Init: couldn't initialize GAPI"); + GAPI_Quit(data); + return 0; + } - struct GXDisplayProperties gxProperties = data->gapi->GXGetDisplayProperties(); + gxProperties = data->gapi->GXGetDisplayProperties(); - // fill FrameBufferInfo - data->fb.xpitch = gxProperties.cbxPitch; - data->fb.ypitch = gxProperties.cbyPitch; - data->fb.width = gxProperties.cxWidth; - data->fb.height = gxProperties.cyHeight; - data->fb.offset = 0; + // fill FrameBufferInfo + data->fb.xpitch = gxProperties.cbxPitch; + data->fb.ypitch = gxProperties.cbyPitch; + data->fb.width = gxProperties.cxWidth; + data->fb.height = gxProperties.cyHeight; + data->fb.offset = 0; if((gxProperties.ffFormat & kfDirect565) || 16 == gxProperties.cBPP) - data->format = SDL_PIXELFORMAT_RGB565; - else - if((gxProperties.ffFormat & kfDirect555) || 15 == gxProperties.cBPP) - data->format = SDL_PIXELFORMAT_RGB555; - else - data->format = 0; + data->format = SDL_PIXELFORMAT_RGB565; + else + if((gxProperties.ffFormat & kfDirect555) || 15 == gxProperties.cBPP) + data->format = SDL_PIXELFORMAT_RGB555; + else + data->format = 0; - // get pixels - GXDeviceInfo gxInfo = { 0 }; - HDC hdc = GetDC(NULL); + // get pixels + hdc = GetDC(NULL); - gxInfo.Version = 100; - int result = ExtEscape(hdc, GETGXINFO, 0, NULL, sizeof(gxInfo), (char *) &gxInfo); - ReleaseDC(NULL, hdc); + gxInfo.Version = 100; + result = ExtEscape(hdc, GETGXINFO, 0, NULL, sizeof(gxInfo), (char *) &gxInfo); + ReleaseDC(NULL, hdc); - if(result > 0) - { - // more debug - if(data->debug) - { - printf("GXDeviceInfo.pvFrameBuffer: %p\n", gxInfo.pvFrameBuffer); - printf("GXDeviceInfo.cxWidth: %d\n", gxInfo.cxWidth); - printf("GXDeviceInfo.cyHeight: %d\n", gxInfo.cyHeight); - printf("GXDeviceInfo.cbStride: %d\n", gxInfo.cbStride); - printf("GXDeviceInfo.cBPP: %d\n", gxInfo.cBPP); - printf("GXDeviceInfo.ffFormat: 0x%x\n", gxInfo.ffFormat); + if(result > 0) + { + // more debug + if(data->debug) + { + int i; - printf("GXDeviceInfo.unk:\n"); - int ii; for(ii = 0; ii < sizeof(gxInfo.unknown); ++ii) - printf("0x%02hhX,", gxInfo.unknown[ii]); - printf("\n"); - } + printf("GXDeviceInfo.pvFrameBuffer: %p\n", gxInfo.pvFrameBuffer); + printf("GXDeviceInfo.cxWidth: %d\n", gxInfo.cxWidth); + printf("GXDeviceInfo.cyHeight: %d\n", gxInfo.cyHeight); + printf("GXDeviceInfo.cbStride: %d\n", gxInfo.cbStride); + printf("GXDeviceInfo.cBPP: %d\n", gxInfo.cBPP); + printf("GXDeviceInfo.ffFormat: 0x%x\n", gxInfo.ffFormat); - if(gxInfo.ffFormat && gxInfo.ffFormat != gxProperties.ffFormat) - { - if((gxInfo.ffFormat & kfDirect565) || 16 == gxInfo.cBPP) - data->format = SDL_PIXELFORMAT_RGB565; - else - if((gxInfo.ffFormat & kfDirect555) || 15 == gxInfo.cBPP) - data->format = SDL_PIXELFORMAT_RGB555; - } + printf("GXDeviceInfo.unk:\n"); + for(i = 0; i < sizeof(gxInfo.unknown); ++i) + printf("0x%02hhX,", gxInfo.unknown[i]); + printf("\n"); + } - data->pixels = gxInfo.pvFrameBuffer; + if(gxInfo.ffFormat && gxInfo.ffFormat != gxProperties.ffFormat) { + if((gxInfo.ffFormat & kfDirect565) || 16 == gxInfo.cBPP) + data->format = SDL_PIXELFORMAT_RGB565; + else + if((gxInfo.ffFormat & kfDirect555) || 15 == gxInfo.cBPP) + data->format = SDL_PIXELFORMAT_RGB555; + } + + data->pixels = gxInfo.pvFrameBuffer; } - else - { - data->flags |= FB_SKIP_OFFSET; - data->pixels = data->gapi->GXBeginDraw(); - data->gapi->GXEndDraw(); + else + { + data->flags |= FB_SKIP_OFFSET; + data->pixels = data->gapi->GXBeginDraw(); + data->gapi->GXEndDraw(); - if(data->debug) - { - printf("GAPI_Init\n"); - printf("use GXBeginDraw: %p\n", data->pixels); - printf("use skip offset\n"); - } - } + if(data->debug) + { + printf("GAPI_Init\n"); + printf("use GXBeginDraw: %p\n", data->pixels); + printf("use skip offset\n"); + } + } - if(0 == data->format || - 0 > WINCE_FixedGeometry(&data->fb, SDL_BYTESPERPIXEL(data->format), data->debug)) - { - SDL_SetError("GAPI_Init: unknown hardware"); - GAPI_Quit(data); - return 0; - } + if(0 == data->format || + 0 > WINCE_FixedGeometry(&data->fb, SDL_BYTESPERPIXEL(data->format), data->debug)) + { + SDL_SetError("GAPI_Init: unknown hardware"); + GAPI_Quit(data); + return 0; + } } return data->gapi && data->pixels ? 1 : 0; @@ -994,28 +1004,30 @@ { if(data->gapi) { - if(data->gapi->GXCloseDisplay) data->gapi->GXCloseDisplay(); - if(data->gapi->hGapiLib) FreeLibrary(data->gapi->hGapiLib); + if(data->gapi->GXCloseDisplay) data->gapi->GXCloseDisplay(); + if(data->gapi->hGapiLib) FreeLibrary(data->gapi->hGapiLib); - SDL_free(data->gapi); + SDL_free(data->gapi); data->gapi = NULL; } } int RAW_Init(WINCE_RenderData* data) { + RawFrameBufferInfo rfbi = { 0 }; + HDC hdc; + int result; const char* preferably = SDL_getenv("SDL_VIDEO_RENDERER"); if(preferably && 0 != SDL_strcasecmp(preferably, RAW_RENDER_NAME)) return 0; - RawFrameBufferInfo rfbi = { 0 }; - HDC hdc = GetDC(NULL); - int result = ExtEscape(hdc, GETRAWFRAMEBUFFER, 0, NULL, sizeof(RawFrameBufferInfo), (char *) &rfbi); + hdc = GetDC(NULL); + result = ExtEscape(hdc, GETRAWFRAMEBUFFER, 0, NULL, sizeof(RawFrameBufferInfo), (char *) &rfbi); ReleaseDC(NULL, hdc); //disable if(result == 0 || rfbi.pFramePointer == 0 || - rfbi.cxPixels == 0 || rfbi.cyPixels == 0 || - rfbi.cxStride == 0 || rfbi.cyStride == 0) return 0; + rfbi.cxPixels == 0 || rfbi.cyPixels == 0 || + rfbi.cxStride == 0 || rfbi.cyStride == 0) return 0; data->flags = FB_RAW_MODE; @@ -1029,19 +1041,19 @@ data->fb.offset = 0; if((FORMAT_565 & rfbi.wFormat) || 16 == rfbi.wBPP) - data->format = SDL_PIXELFORMAT_RGB565; + data->format = SDL_PIXELFORMAT_RGB565; else if((FORMAT_555 & rfbi.wFormat) || 15 == rfbi.wBPP) - data->format = SDL_PIXELFORMAT_RGB555; + data->format = SDL_PIXELFORMAT_RGB555; else - data->format = 0; + data->format = 0; if(0 == data->format || - 0 > WINCE_FixedGeometry(&data->fb, SDL_BYTESPERPIXEL(data->format), data->debug)) + 0 > WINCE_FixedGeometry(&data->fb, SDL_BYTESPERPIXEL(data->format), data->debug)) { - SDL_SetError("RAW_Init: unknown hardware"); - RAW_Quit(data); - return 0; + SDL_SetError("RAW_Init: unknown hardware"); + RAW_Quit(data); + return 0; } data->pixels = rfbi.pFramePointer; @@ -1060,50 +1072,50 @@ // set correct start offset switch(orientation) { - case ORIENTATION_UP: - fb->offset = 0; - break; + case ORIENTATION_UP: + fb->offset = 0; + break; - case ORIENTATION_LEFT: - fb->offset = __abs(fb->ypitch * (fb->height - 1)); - break; + case ORIENTATION_LEFT: + fb->offset = __abs(fb->ypitch * (fb->height - 1)); + break; - case ORIENTATION_RIGHT: - fb->offset = __abs(fb->xpitch * (fb->width - 1)); - break; + case ORIENTATION_RIGHT: + fb->offset = __abs(fb->xpitch * (fb->width - 1)); + break; - case ORIENTATION_DOWN: - fb->offset = __abs(fb->xpitch * (fb->width - 1) + - fb->ypitch * (fb->height - 1)); - break; + case ORIENTATION_DOWN: + fb->offset = __abs(fb->xpitch * (fb->width - 1) + + fb->ypitch * (fb->height - 1)); + break; - default: break; + default: break; } //if(orientation != ORIENTATION_UP) switch(orientation) { - case ORIENTATION_LEFT: FrameBufferRotate(fb, ORIENTATION_RIGHT); break; - case ORIENTATION_RIGHT:FrameBufferRotate(fb, ORIENTATION_LEFT); break; - case ORIENTATION_DOWN: FrameBufferRotate(fb, ORIENTATION_DOWN); break; + case ORIENTATION_LEFT: FrameBufferRotate(fb, ORIENTATION_RIGHT); break; + case ORIENTATION_RIGHT:FrameBufferRotate(fb, ORIENTATION_LEFT); break; + case ORIENTATION_DOWN: FrameBufferRotate(fb, ORIENTATION_DOWN); break; - default: break; + default: break; } } int GetFrameBufferOrientation(const FrameBufferInfo* src) { if(src->xpitch > 0 && src->ypitch > 0) - return ORIENTATION_UP; + return ORIENTATION_UP; else if(src->xpitch > 0 && src->ypitch < 0) - return ORIENTATION_LEFT; + return ORIENTATION_LEFT; else if(src->xpitch < 0 && src->ypitch > 0) - return ORIENTATION_RIGHT; + return ORIENTATION_RIGHT; else if(src->xpitch < 0 && src->ypitch < 0) - return ORIENTATION_DOWN; + return ORIENTATION_DOWN; return ORIENTATION_UNKNOWN; } @@ -1117,28 +1129,28 @@ switch(orientation) { case ORIENTATION_LEFT: - dst->width = src.height; - dst->height = src.width; - dst->xpitch = src.ypitch; - dst->ypitch = -src.xpitch; - dst->offset = src.offset + src.xpitch * (src.width - 1); - break; + dst->width = src.height; + dst->height = src.width; + dst->xpitch = src.ypitch; + dst->ypitch = -src.xpitch; + dst->offset = src.offset + src.xpitch * (src.width - 1); + break; case ORIENTATION_RIGHT: - dst->width = src.height; - dst->height = src.width; - dst->xpitch = -src.ypitch; - dst->ypitch = src.xpitch; - dst->offset = src.offset + src.ypitch * (src.height - 1); - break; + dst->width = src.height; + dst->height = src.width; + dst->xpitch = -src.ypitch; + dst->ypitch = src.xpitch; + dst->offset = src.offset + src.ypitch * (src.height - 1); + break; case ORIENTATION_DOWN: - FrameBufferRotate(dst, ORIENTATION_LEFT); - FrameBufferRotate(dst, ORIENTATION_LEFT); - break; + FrameBufferRotate(dst, ORIENTATION_LEFT); + FrameBufferRotate(dst, ORIENTATION_LEFT); + break; default: - break; + break; } } @@ -1146,31 +1158,31 @@ { switch(orientation) { - case ORIENTATION_UP: - break; + case ORIENTATION_UP: + break; - case ORIENTATION_LEFT: - { - int temp = pt->y; - pt->y = fb->height - pt->x; - pt->x = temp; - } - break; + case ORIENTATION_LEFT: + { + int temp = pt->y; + pt->y = fb->height - pt->x; + pt->x = temp; + } + break; - case ORIENTATION_RIGHT: - { - int temp = pt->x; - pt->x = fb->width - pt->y; - pt->y = temp; - } - break; + case ORIENTATION_RIGHT: + { + int temp = pt->x; + pt->x = fb->width - pt->y; + pt->y = temp; + } + break; - case ORIENTATION_DOWN: - pt->x = fb->width - pt->x; - pt->y = fb->height - pt->y; - break; + case ORIENTATION_DOWN: + pt->x = fb->width - pt->x; + pt->y = fb->height - pt->y; + break; - default: break; + default: break; } } @@ -1196,14 +1208,14 @@ // DMDO_0, DMDO_90, DMDO_180, DMDO_270 if(DISP_CHANGE_BADMODE != ChangeDisplaySettingsEx(NULL, &sDevMode, 0, CDS_TEST, NULL)) - switch(sDevMode.dmDisplayOrientation) - { - case DMDO_0: return DMDO_0; - case DMDO_90: return DMDO_90; - case DMDO_180: return DMDO_180; - case DMDO_270: return DMDO_270; - default: break; - } + switch(sDevMode.dmDisplayOrientation) + { + case DMDO_0: return DMDO_0; + case DMDO_90: return DMDO_90; + case DMDO_180: return DMDO_180; + case DMDO_270: return DMDO_270; + default: break; + } SDL_SetError("WINCE_GetDMOrientation: ChangeDisplaySettingsEx return BADMODE"); return -1; @@ -1217,15 +1229,15 @@ switch(orientation) { - case DMDO_0: sDevMode.dmDisplayOrientation = DMDO_0; break; - case DMDO_90: sDevMode.dmDisplayOrientation = DMDO_90; break; - case DMDO_180: sDevMode.dmDisplayOrientation = DMDO_180; break; - case DMDO_270: sDevMode.dmDisplayOrientation = DMDO_270; break; - default: return 0; + case DMDO_0: sDevMode.dmDisplayOrientation = DMDO_0; break; + case DMDO_90: sDevMode.dmDisplayOrientation = DMDO_90; break; + case DMDO_180: sDevMode.dmDisplayOrientation = DMDO_180; break; + case DMDO_270: sDevMode.dmDisplayOrientation = DMDO_270; break; + default: return 0; } if(DISP_CHANGE_BADMODE != ChangeDisplaySettingsEx(NULL, &sDevMode, 0, CDS_RESET, NULL)) - return 1; + return 1; SDL_SetError("WINCE_SetDMOrientation: ChangeDisplaySettingsEx return BADMODE"); return -1; @@ -1233,13 +1245,15 @@ void FrameBufferDumpInfo(const FrameBufferInfo* fb, const char* name) { + int orientation; + printf("%s fb.width: %d\n", name, fb->width); printf("%s fb.height: %d\n", name, fb->height); printf("%s fb.xpitch: %d\n", name, fb->xpitch); printf("%s fb.ypitch: %d\n", name, fb->ypitch); printf("%s fb.offset: %d\n", name, fb->offset); - int orientation = GetFrameBufferOrientation(fb); + orientation = GetFrameBufferOrientation(fb); printf("%s fb.orientation: %d, %s\n", name, orientation, GetOrientationName(orientation)); } @@ -1247,34 +1261,34 @@ { if(2 == fb->xpitch) { - switch(width) - { - case 1: - *dst = *src; - break; + switch(width) + { + case 1: + *dst = *src; + break; - case 2: - *((Uint32*) dst) = *((Uint32*) src); - break; + case 2: + *((Uint32*) dst) = *((Uint32*) src); + break; - default: - SDL_memcpy(dst, src, width * 2); - break; - } + default: + SDL_memcpy(dst, src, width * 2); + break; + } } else if(-2 == fb->xpitch) { - while(width--) - *dst-- = *src++; + while(width--) + *dst-- = *src++; } else { - while(width--) - { - *dst = *src++; - dst += fb->xpitch / 2; - } + while(width--) + { + *dst = *src++; + dst += fb->xpitch / 2; + } } } diff -r e7680e2c9f3c -r c2539ff054c8 src/video/windows/SDL_gdirender.c --- a/src/video/windows/SDL_gdirender.c Mon Jan 24 15:10:16 2011 -0800 +++ b/src/video/windows/SDL_gdirender.c Mon Jan 24 15:46:11 2011 -0800 @@ -167,8 +167,10 @@ SDL_WindowData *windowdata = (SDL_WindowData *) window->driverdata; SDL_Renderer *renderer; GDI_RenderData *data; +#ifndef NO_GETDIBBITS int bmi_size; HBITMAP hbm; +#endif int i, n; renderer = (SDL_Renderer *) SDL_calloc(1, sizeof(*renderer)); diff -r e7680e2c9f3c -r c2539ff054c8 src/video/windows/SDL_windowsevents.c --- a/src/video/windows/SDL_windowsevents.c Mon Jan 24 15:10:16 2011 -0800 +++ b/src/video/windows/SDL_windowsevents.c Mon Jan 24 15:46:11 2011 -0800 @@ -192,20 +192,20 @@ 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; - } - } + /* 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)); break; @@ -252,12 +252,15 @@ break; } +#ifdef WM_MOUSELEAVE + /* FIXME: Do we need the SDL 1.2 hack to generate WM_MOUSELEAVE now? */ case WM_MOUSELEAVE: if (SDL_GetMouseFocus() == data->window) { SDL_SetMouseFocus(NULL); } returnCode = 0; break; +#endif /* WM_MOUSELEAVE */ case WM_SYSKEYDOWN: case WM_KEYDOWN: @@ -382,13 +385,16 @@ returnCode = 0; break; +#ifdef WM_INPUTLANGCHANGE case WM_INPUTLANGCHANGE: { WIN_UpdateKeymap(); } returnCode = 1; break; +#endif /* WM_INPUTLANGCHANGE */ +#ifdef WM_GETMINMAXINFO case WM_GETMINMAXINFO: { MINMAXINFO *info; @@ -447,6 +453,7 @@ } returnCode = 0; break; +#endif /* WM_GETMINMAXINFO */ case WM_WINDOWPOSCHANGED: { @@ -534,6 +541,7 @@ } return (1); +#if defined(SC_SCREENSAVE) || defined(SC_MONITORPOWER) case WM_SYSCOMMAND: { /* Don't start the screensaver or blank the monitor in fullscreen apps */ @@ -545,6 +553,7 @@ } } break; +#endif /* System has screensaver support */ case WM_CLOSE: { @@ -656,7 +665,9 @@ } if (!name && !SDL_Appname) { name = "SDL_app"; +#if defined(CS_BYTEALIGNCLIENT) || defined(CS_OWNDC) SDL_Appstyle = (CS_BYTEALIGNCLIENT | CS_OWNDC); +#endif SDL_Instance = hInst ? hInst : GetModuleHandle(NULL); } diff -r e7680e2c9f3c -r c2539ff054c8 src/video/windows/SDL_windowskeyboard.c --- a/src/video/windows/SDL_windowskeyboard.c Mon Jan 24 15:10:16 2011 -0800 +++ b/src/video/windows/SDL_windowskeyboard.c Mon Jan 24 15:46:11 2011 -0800 @@ -21,6 +21,10 @@ */ #include "SDL_config.h" +#ifdef _WIN32_WCE +#define SDL_DISABLE_WINDOWS_IME +#endif + #include "SDL_windowsvideo.h" #include "../../events/SDL_keyboard_c.h" @@ -29,10 +33,12 @@ #include #include +#ifndef SDL_DISABLE_WINDOWS_IME static void IME_Init(SDL_VideoData *videodata, HWND hwnd); static void IME_Enable(SDL_VideoData *videodata, HWND hwnd); static void IME_Disable(SDL_VideoData *videodata, HWND hwnd); static void IME_Quit(SDL_VideoData *videodata); +#endif /* !SDL_DISABLE_WINDOWS_IME */ #ifndef MAPVK_VK_TO_VSC #define MAPVK_VK_TO_VSC 0 @@ -172,12 +178,15 @@ void WIN_QuitKeyboard(_THIS) { +#ifndef SDL_DISABLE_WINDOWS_IME IME_Quit((SDL_VideoData *)_this->driverdata); +#endif } void WIN_StartTextInput(_THIS) { +#ifndef SDL_DISABLE_WINDOWS_IME SDL_Window *window = SDL_GetKeyboardFocus(); if (window) { HWND hwnd = ((SDL_WindowData *) window->driverdata)->hwnd; @@ -186,11 +195,13 @@ IME_Init(videodata, hwnd); IME_Enable(videodata, hwnd); } +#endif /* !SDL_DISABLE_WINDOWS_IME */ } void WIN_StopTextInput(_THIS) { +#ifndef SDL_DISABLE_WINDOWS_IME SDL_Window *window = SDL_GetKeyboardFocus(); if (window) { HWND hwnd = ((SDL_WindowData *) window->driverdata)->hwnd; @@ -198,6 +209,7 @@ IME_Init(videodata, hwnd); IME_Disable(videodata, hwnd); } +#endif /* !SDL_DISABLE_WINDOWS_IME */ } void @@ -207,6 +219,21 @@ videodata->ime_rect = *rect; } +#ifdef SDL_DISABLE_WINDOWS_IME + + +SDL_bool +IME_HandleMessage(HWND hwnd, UINT msg, WPARAM wParam, LPARAM *lParam, SDL_VideoData *videodata) +{ + return SDL_FALSE; +} + +void IME_Present(SDL_VideoData *videodata) +{ +} + +#else + #ifdef __GNUC__ #undef DEFINE_GUID #define DEFINE_GUID(n,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) static const GUID n = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}} @@ -1552,4 +1579,6 @@ SDL_RenderCopy(videodata->ime_candtex, NULL, &videodata->ime_candlistrect); } +#endif /* SDL_DISABLE_WINDOWS_IME */ + /* vi: set ts=4 sw=4 expandtab: */ diff -r e7680e2c9f3c -r c2539ff054c8 src/video/windows/SDL_windowsmodes.c --- a/src/video/windows/SDL_windowsmodes.c Mon Jan 24 15:10:16 2011 -0800 +++ b/src/video/windows/SDL_windowsmodes.c Mon Jan 24 15:46:11 2011 -0800 @@ -23,13 +23,19 @@ #include "SDL_windowsvideo.h" +/* Windows CE compatibility */ +#ifndef CDS_FULLSCREEN +#define CDS_FULLSCREEN 0 +#endif static SDL_bool WIN_GetDisplayMode(LPCTSTR deviceName, DWORD index, SDL_DisplayMode * mode) { SDL_DisplayModeData *data; DEVMODE devmode; +#ifndef _WIN32_WCE HDC hdc; +#endif devmode.dmSize = sizeof(devmode); devmode.dmDriverExtra = 0; diff -r e7680e2c9f3c -r c2539ff054c8 src/video/windows/SDL_windowsvideo.c --- a/src/video/windows/SDL_windowsvideo.c Mon Jan 24 15:10:16 2011 -0800 +++ b/src/video/windows/SDL_windowsvideo.c Mon Jan 24 15:46:11 2011 -0800 @@ -161,9 +161,9 @@ data->userDLL = LoadLibrary(TEXT("USER32.DLL")); if (data->userDLL) { - data->CloseTouchInputHandle = (BOOL (WINAPI *)( HTOUCHINPUT )) GetProcAddress(data->userDLL, "CloseTouchInputHandle"); - data->GetTouchInputInfo = (BOOL (WINAPI *)( HTOUCHINPUT, UINT, PTOUCHINPUT, int )) GetProcAddress(data->userDLL, "GetTouchInputInfo"); - data->RegisterTouchWindow = (BOOL (WINAPI *)( HWND, ULONG )) GetProcAddress(data->userDLL, "RegisterTouchWindow"); + data->CloseTouchInputHandle = (BOOL (WINAPI *)( HTOUCHINPUT )) GetProcAddress(data->userDLL, TEXT("CloseTouchInputHandle")); + data->GetTouchInputInfo = (BOOL (WINAPI *)( HTOUCHINPUT, UINT, PTOUCHINPUT, int )) GetProcAddress(data->userDLL, TEXT("GetTouchInputInfo")); + data->RegisterTouchWindow = (BOOL (WINAPI *)( HWND, ULONG )) GetProcAddress(data->userDLL, TEXT("RegisterTouchWindow")); } /* Set the function pointers */ @@ -222,11 +222,7 @@ } VideoBootStrap WINDOWS_bootstrap = { -#ifdef _WIN32_WCE - "wince", "SDL WinCE video driver", WINCE_Available, WIN_CreateDevice -#else - "windows", "SDL Win32/64 video driver", WIN_Available, WIN_CreateDevice -#endif + "windows", "SDL Windows video driver", WIN_Available, WIN_CreateDevice }; int diff -r e7680e2c9f3c -r c2539ff054c8 src/video/windows/SDL_windowsvideo.h --- a/src/video/windows/SDL_windowsvideo.h Mon Jan 24 15:10:16 2011 -0800 +++ b/src/video/windows/SDL_windowsvideo.h Mon Jan 24 15:46:11 2011 -0800 @@ -36,7 +36,7 @@ #include -#ifndef __GNUC__ +#if defined(_MSC_VER) && !defined(_WIN32_WCE) #include #else #include "SDL_msctf.h" diff -r e7680e2c9f3c -r c2539ff054c8 src/video/windows/SDL_windowswindow.c --- a/src/video/windows/SDL_windowswindow.c Mon Jan 24 15:10:16 2011 -0800 +++ b/src/video/windows/SDL_windowswindow.c Mon Jan 24 15:46:11 2011 -0800 @@ -32,6 +32,10 @@ #include "SDL_syswm.h" #include "SDL_gapirender.h" +/* Windows CE compatibility */ +#ifndef SWP_NOCOPYBITS +#define SWP_NOCOPYBITS 0 +#endif /* Fake window to help with DirectInput events. */ HWND SDL_HelperWindow = NULL; @@ -68,13 +72,21 @@ } /* Set up the window proc function */ +#ifdef GWLP_WNDPROC data->wndproc = (WNDPROC) GetWindowLongPtr(hwnd, GWLP_WNDPROC); if (data->wndproc == WIN_WindowProc) { data->wndproc = NULL; - } - else { + } else { SetWindowLongPtr(hwnd, GWLP_WNDPROC, (LONG_PTR) WIN_WindowProc); } +#else + data->wndproc = (WNDPROC) GetWindowLong(hwnd, GWL_WNDPROC); + if (data->wndproc == WIN_WindowProc) { + data->wndproc = NULL; + } else { + SetWindowLong(hwnd, GWL_WNDPROC, (LONG_PTR) WIN_WindowProc); + } +#endif /* Fill in the SDL window with the window data */ { @@ -112,14 +124,20 @@ } else { window->flags &= ~SDL_WINDOW_RESIZABLE; } +#ifdef WS_MAXIMIZE if (style & WS_MAXIMIZE) { window->flags |= SDL_WINDOW_MAXIMIZED; - } else { + } else +#endif + { window->flags &= ~SDL_WINDOW_MAXIMIZED; } +#ifdef WS_MINIMIZE if (style & WS_MINIMIZE) { window->flags |= SDL_WINDOW_MINIMIZED; - } else { + } else +#endif + { window->flags &= ~SDL_WINDOW_MINIMIZED; } } diff -r e7680e2c9f3c -r c2539ff054c8 test/testgesture.c --- a/test/testgesture.c Mon Jan 24 15:10:16 2011 -0800 +++ b/test/testgesture.c Mon Jan 24 15:46:11 2011 -0800 @@ -19,14 +19,14 @@ #define PRIu32 "u" #endif #ifndef PRIs64 -#ifdef __WINDOWS__ +#ifdef __WIN32__ #define PRIs64 "I64" #else #define PRIs64 "lld" #endif #endif #ifndef PRIu64 -#ifdef __WINDOWS__ +#ifdef __WIN32__ #define PRIu64 "I64u" #else #define PRIu64 "llu"