From 9ec6b5be10e25d363f51dd3d1ee8c7f6d3ac2fc1 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Mon, 24 Jan 2011 15:46:11 -0800 Subject: [PATCH] Fixed compiling on Windows Mobile SDK 5.0 with Visual Studio 2008 --- VisualCE/SDL.sln | 4 +- VisualCE/SDL/SDL.vcproj | 3147 +++-------------------- VisualCE/SDLMain/SDLmain.vcproj | 77 +- VisualCE/loopwave/loopwave.vcproj | 25 +- VisualCE/testalpha/testalpha.vcproj | 33 +- VisualCE/testtimer/testtimer.vcproj | 25 +- VisualCE/testwin/testwin.vcproj | 33 +- include/SDL_assert.h | 2 +- include/SDL_atomic.h | 2 +- include/SDL_compat.h | 2 +- include/SDL_config_windows.h | 10 +- include/SDL_main.h | 4 +- include/SDL_opengl.h | 2 +- include/SDL_platform.h | 4 +- include/SDL_rwops.h | 2 +- include/SDL_thread.h | 2 +- include/begin_code.h | 4 +- src/SDL.c | 12 +- src/SDL_assert.c | 50 +- src/atomic/SDL_spinlock.c | 5 + src/audio/SDL_audio.c | 2 +- src/cpuinfo/SDL_cpuinfo.c | 4 +- src/events/SDL_events.c | 2 +- src/events/SDL_sysevents.h | 2 +- src/file/SDL_rwops.c | 6 +- src/libm/math_private.h | 2 +- src/loadso/windows/SDL_sysloadso.c | 2 +- src/power/windows/SDL_syspower.c | 11 +- src/stdlib/SDL_getenv.c | 4 +- src/stdlib/SDL_stdlib.c | 4 +- src/thread/windows/SDL_syssem.c | 2 +- src/thread/windows/SDL_systhread.c | 4 +- src/video/SDL_renderer_gl.c | 4 +- src/video/windows/SDL_gapirender.c | 978 +++---- src/video/windows/SDL_gdirender.c | 2 + src/video/windows/SDL_windowsevents.c | 39 +- src/video/windows/SDL_windowskeyboard.c | 29 + src/video/windows/SDL_windowsmodes.c | 6 + src/video/windows/SDL_windowsvideo.c | 12 +- src/video/windows/SDL_windowsvideo.h | 2 +- src/video/windows/SDL_windowswindow.c | 26 +- test/testgesture.c | 4 +- 42 files changed, 1146 insertions(+), 3446 deletions(-) diff --git a/VisualCE/SDL.sln b/VisualCE/SDL.sln index aaf906f4e..8e17b70a8 100644 --- a/VisualCE/SDL.sln +++ b/VisualCE/SDL.sln @@ -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 --git a/VisualCE/SDL/SDL.vcproj b/VisualCE/SDL/SDL.vcproj index 54ffdd82d..ca83d77ac 100644 --- a/VisualCE/SDL/SDL.vcproj +++ b/VisualCE/SDL/SDL.vcproj @@ -1,10 +1,11 @@ + @@ -195,6 +201,8 @@ StackCommitSize="4096" EntryPointSymbol="_DllMainCRTStartup" BaseAddress="0x00100000" + RandomizedBaseAddress="1" + DataExecutionPrevention="0" ImportLibrary="$(PlatformName)\$(ConfigurationName)/SDL.lib" /> + @@ -296,6 +307,8 @@ StackCommitSize="4096" EntryPointSymbol="_DllMainCRTStartup" BaseAddress="0x00100000" + RandomizedBaseAddress="1" + DataExecutionPrevention="0" ImportLibrary="$(PlatformName)\$(ConfigurationName)/SDL.lib" /> + @@ -396,6 +412,8 @@ StackCommitSize="4096" EntryPointSymbol="_DllMainCRTStartup" BaseAddress="0x00100000" + RandomizedBaseAddress="1" + DataExecutionPrevention="0" ImportLibrary="$(PlatformName)\$(ConfigurationName)/SDL.lib" /> + @@ -500,6 +521,8 @@ StackCommitSize="4096" EntryPointSymbol="_DllMainCRTStartup" BaseAddress="0x00100000" + RandomizedBaseAddress="1" + DataExecutionPrevention="0" ImportLibrary="$(PlatformName)\$(ConfigurationName)/SDL.lib" /> + @@ -606,6 +632,8 @@ LinkTimeCodeGeneration="1" EntryPointSymbol="_DllMainCRTStartup" BaseAddress="0x00100000" + RandomizedBaseAddress="1" + DataExecutionPrevention="0" ImportLibrary="$(PlatformName)\$(ConfigurationName)/SDL.lib" /> + @@ -642,938 +673,194 @@ Name="Source Files" Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" > + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + @@ -1581,355 +868,43 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + @@ -1941,60 +916,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - + RelativePath="..\..\src\power\windows\SDL_syspower.c" + > + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + RelativePath="..\..\src\video\windows\SDL_windowsevents.c" + > - - + + diff --git a/VisualCE/SDLMain/SDLmain.vcproj b/VisualCE/SDLMain/SDLmain.vcproj index 95526d296..4876aae67 100644 --- a/VisualCE/SDLMain/SDLmain.vcproj +++ b/VisualCE/SDLMain/SDLmain.vcproj @@ -1,10 +1,11 @@ + @@ -171,6 +175,9 @@ SuppressStartupBanner="true" OutputFile="$(PlatformName)\$(ConfigurationName)/SDLmain.bsc" /> + @@ -254,6 +261,9 @@ SuppressStartupBanner="true" OutputFile="$(PlatformName)\$(ConfigurationName)/SDLmain.bsc" /> + @@ -337,6 +347,9 @@ SuppressStartupBanner="true" OutputFile="$(PlatformName)\$(ConfigurationName)/SDLmain.bsc" /> + @@ -420,6 +433,9 @@ SuppressStartupBanner="true" OutputFile="$(PlatformName)\$(ConfigurationName)/SDLmain.bsc" /> + @@ -506,6 +522,9 @@ SuppressStartupBanner="true" OutputFile="$(PlatformName)\$(ConfigurationName)/SDLmain.bsc" /> + @@ -530,62 +549,8 @@ Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" > - - - - - - - - - - - - - - - - - - + @@ -125,7 +131,7 @@ Name="VCCLCompilerTool" ExecutionBucket="7" Optimization="0" - AdditionalIncludeDirectories="..\..\nclude" + AdditionalIncludeDirectories="..\..\include" PreprocessorDefinitions="_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;DEBUG;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE" MinimalRebuild="true" RuntimeLibrary="1" @@ -154,6 +160,8 @@ GenerateDebugInformation="true" ProgramDatabaseFile="$(OutDir)/loopwave.pdb" SubSystem="0" + RandomizedBaseAddress="1" + DataExecutionPrevention="0" /> + @@ -236,6 +247,8 @@ SubSystem="0" OptimizeReferences="2" EnableCOMDATFolding="2" + RandomizedBaseAddress="1" + DataExecutionPrevention="0" /> + @@ -317,6 +333,8 @@ SubSystem="0" OptimizeReferences="2" EnableCOMDATFolding="2" + RandomizedBaseAddress="1" + DataExecutionPrevention="0" /> + diff --git a/VisualCE/testalpha/testalpha.vcproj b/VisualCE/testalpha/testalpha.vcproj index 5e4d62349..3db0bd3a2 100644 --- a/VisualCE/testalpha/testalpha.vcproj +++ b/VisualCE/testalpha/testalpha.vcproj @@ -1,10 +1,11 @@ + @@ -195,6 +201,8 @@ StackCommitSize="4096" EntryPointSymbol="WinMainCRTStartup" BaseAddress="0x00010000" + RandomizedBaseAddress="1" + DataExecutionPrevention="0" /> + @@ -300,6 +311,8 @@ LinkTimeCodeGeneration="1" EntryPointSymbol="WinMainCRTStartup" BaseAddress="0x00010000" + RandomizedBaseAddress="1" + DataExecutionPrevention="0" /> + @@ -400,6 +416,8 @@ StackCommitSize="4096" EntryPointSymbol="WinMainCRTStartup" BaseAddress="0x00010000" + RandomizedBaseAddress="1" + DataExecutionPrevention="0" /> + @@ -500,6 +521,8 @@ StackCommitSize="4096" EntryPointSymbol="WinMainCRTStartup" BaseAddress="0x00010000" + RandomizedBaseAddress="1" + DataExecutionPrevention="0" /> + @@ -600,6 +626,8 @@ StackCommitSize="4096" EntryPointSymbol="WinMainCRTStartup" BaseAddress="0x00010000" + RandomizedBaseAddress="1" + DataExecutionPrevention="0" /> + diff --git a/VisualCE/testtimer/testtimer.vcproj b/VisualCE/testtimer/testtimer.vcproj index 6c84ea6ee..cce6a01ca 100644 --- a/VisualCE/testtimer/testtimer.vcproj +++ b/VisualCE/testtimer/testtimer.vcproj @@ -1,11 +1,12 @@ + @@ -125,6 +131,7 @@ Name="VCCLCompilerTool" ExecutionBucket="7" Optimization="0" + AdditionalIncludeDirectories="..\..\include" PreprocessorDefinitions="_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;DEBUG;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE" MinimalRebuild="true" RuntimeLibrary="1" @@ -153,6 +160,8 @@ GenerateDebugInformation="true" ProgramDatabaseFile="$(OutDir)/testtimer.pdb" SubSystem="0" + RandomizedBaseAddress="1" + DataExecutionPrevention="0" /> + @@ -235,6 +247,8 @@ SubSystem="0" OptimizeReferences="2" EnableCOMDATFolding="2" + RandomizedBaseAddress="1" + DataExecutionPrevention="0" /> + @@ -286,6 +303,7 @@ Name="VCCLCompilerTool" ExecutionBucket="7" Optimization="2" + AdditionalIncludeDirectories="..\..\include" PreprocessorDefinitions="NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;_WINDOWS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE" RuntimeLibrary="0" UsePrecompiledHeader="0" @@ -315,6 +333,8 @@ SubSystem="0" OptimizeReferences="2" EnableCOMDATFolding="2" + RandomizedBaseAddress="1" + DataExecutionPrevention="0" /> + diff --git a/VisualCE/testwin/testwin.vcproj b/VisualCE/testwin/testwin.vcproj index e95b02e60..8dac65eba 100644 --- a/VisualCE/testwin/testwin.vcproj +++ b/VisualCE/testwin/testwin.vcproj @@ -1,10 +1,11 @@ + @@ -194,6 +200,8 @@ StackCommitSize="4096" EntryPointSymbol="WinMainCRTStartup" BaseAddress="0x00010000" + RandomizedBaseAddress="1" + DataExecutionPrevention="0" /> + @@ -295,6 +306,8 @@ StackCommitSize="4096" EntryPointSymbol="WinMainCRTStartup" BaseAddress="0x00010000" + RandomizedBaseAddress="1" + DataExecutionPrevention="0" /> + @@ -395,6 +411,8 @@ StackCommitSize="4096" EntryPointSymbol="WinMainCRTStartup" BaseAddress="0x00010000" + RandomizedBaseAddress="1" + DataExecutionPrevention="0" /> + @@ -495,6 +516,8 @@ StackCommitSize="4096" EntryPointSymbol="WinMainCRTStartup" BaseAddress="0x00010000" + RandomizedBaseAddress="1" + DataExecutionPrevention="0" /> + @@ -595,6 +621,8 @@ StackCommitSize="4096" EntryPointSymbol="WinMainCRTStartup" BaseAddress="0x00010000" + RandomizedBaseAddress="1" + DataExecutionPrevention="0" /> + diff --git a/include/SDL_assert.h b/include/SDL_assert.h index d822303d6..74eb465e9 100644 --- a/include/SDL_assert.h +++ b/include/SDL_assert.h @@ -50,7 +50,7 @@ on the assertion line and not in some random guts of SDL, and so each assert can have unique static variables associated with it. */ -#if defined(_MSC_VER) +#if defined(_MSC_VER) && !defined(_WIN32_WCE) #include #define SDL_TriggerBreakpoint() __debugbreak() #elif (defined(__GNUC__) && ((__i386__) || (__x86_64__))) diff --git a/include/SDL_atomic.h b/include/SDL_atomic.h index c2dfd045e..9f339c7cb 100644 --- a/include/SDL_atomic.h +++ b/include/SDL_atomic.h @@ -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 --git a/include/SDL_compat.h b/include/SDL_compat.h index 069df66e0..92f622be8 100644 --- a/include/SDL_compat.h +++ b/include/SDL_compat.h @@ -65,7 +65,7 @@ extern "C" { /*@{*/ /* Platform */ -#ifdef __WINDOWS__ +#ifdef __WIN32__ #undef __WIN32__ #define __WIN32__ 1 #endif diff --git a/include/SDL_config_windows.h b/include/SDL_config_windows.h index 489d4b9aa..f02d18f0b 100644 --- a/include/SDL_config_windows.h +++ b/include/SDL_config_windows.h @@ -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 @@ typedef unsigned int uintptr_t; #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 @@ typedef unsigned int uintptr_t; #define SDL_ASSEMBLY_ROUTINES 1 #endif -#endif /* _SDL_config_windows2_h */ +#endif /* _SDL_config_windows_h */ diff --git a/include/SDL_main.h b/include/SDL_main.h index fe9f45986..df75a2f63 100644 --- a/include/SDL_main.h +++ b/include/SDL_main.h @@ -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 @@ extern C_LINKAGE int SDL_main(int argc, char *argv[]); /* From the SDL library code -- needed for registering the app on Win32 */ -#ifdef __WINDOWS__ +#ifdef __WIN32__ #include "begin_code.h" #ifdef __cplusplus diff --git a/include/SDL_opengl.h b/include/SDL_opengl.h index 5a391c034..8402e72c9 100644 --- a/include/SDL_opengl.h +++ b/include/SDL_opengl.h @@ -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 --git a/include/SDL_platform.h b/include/SDL_platform.h index 583c6a81a..13bdc0d74 100644 --- a/include/SDL_platform.h +++ b/include/SDL_platform.h @@ -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 --git a/include/SDL_rwops.h b/include/SDL_rwops.h index 1bbac964e..ab6f26878 100644 --- a/include/SDL_rwops.h +++ b/include/SDL_rwops.h @@ -83,7 +83,7 @@ typedef struct SDL_RWops Uint32 type; union { -#ifdef __WINDOWS__ +#ifdef __WIN32__ struct { SDL_bool append; diff --git a/include/SDL_thread.h b/include/SDL_thread.h index dd94bd714..1c8a76a25 100644 --- a/include/SDL_thread.h +++ b/include/SDL_thread.h @@ -55,7 +55,7 @@ typedef unsigned long SDL_threadID; */ typedef int (SDLCALL * SDL_ThreadFunction) (void *data); -#if defined(__WINDOWS__) && !defined(HAVE_LIBC) +#if defined(__WIN32__) && !defined(HAVE_LIBC) /** * \file SDL_thread.h * diff --git a/include/begin_code.h b/include/begin_code.h index ccdcea612..395dc7c6a 100644 --- a/include/begin_code.h +++ b/include/begin_code.h @@ -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 --git a/src/SDL.c b/src/SDL.c index 9913dbdad..49620a8e1 100644 --- a/src/SDL.c +++ b/src/SDL.c @@ -39,7 +39,7 @@ extern void SDL_StartTicks(void); 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 @@ SDL_Init(Uint32 flags) /* Clear the error message */ SDL_ClearError(); -#if defined(__WINDOWS__) +#if defined(__WIN32__) if (SDL_HelperWindowCreate() < 0) { return -1; } @@ -220,7 +220,7 @@ SDL_Quit(void) fflush(stdout); #endif -#if defined(__WINDOWS__) +#if defined(__WIN32__) SDL_HelperWindowDestroy(); #endif SDL_QuitSubSystem(SDL_INIT_EVERYTHING); @@ -312,7 +312,7 @@ SDL_GetPlatform() return "RISC OS"; #elif __SOLARIS__ return "Solaris"; -#elif __WINDOWS__ +#elif __WIN32__ #ifdef _WIN32_WCE return "Windows CE"; #else @@ -325,7 +325,7 @@ SDL_GetPlatform() #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 @@ _DllMainCRTStartup(HANDLE hModule, } #endif /* building DLL with Watcom C */ -#endif /* __WINDOWS__ */ +#endif /* __WIN32__ */ /* vi: set ts=4 sw=4 expandtab: */ diff --git a/src/SDL_assert.c b/src/SDL_assert.c index 9c4a73eec..38ee92560 100644 --- a/src/SDL_assert.c +++ b/src/SDL_assert.c @@ -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 @@ debug_print(const char *fmt, ...) __attribute__((format (printf, 1, 2))); 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 @@ debug_print(const char *fmt, ...) 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 @@ debug_print(const char *fmt, ...) } -#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 @@ SDL_Assertion_WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) /* !!! 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 @@ SDL_Assertion_WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) 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 @@ SDL_Assertion_WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) 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_GenerateAssertionReport(void) static void SDL_ExitProcess(int exitcode) { -#ifdef __WINDOWS__ +#ifdef __WIN32__ ExitProcess(42); #else _exit(42); @@ -311,7 +329,7 @@ SDL_PromptAssertion(const SDL_assert_data *data, void *userdata) /* platform-specific UI... */ -#ifdef __WINDOWS__ +#ifdef __WIN32__ state = SDL_PromptAssertion_windows(data); #elif __MACOSX__ diff --git a/src/atomic/SDL_spinlock.c b/src/atomic/SDL_spinlock.c index 19efbfca8..9d9a136d9 100644 --- a/src/atomic/SDL_spinlock.c +++ b/src/atomic/SDL_spinlock.c @@ -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 --git a/src/audio/SDL_audio.c b/src/audio/SDL_audio.c index d4b72a7d3..b55fee325 100644 --- a/src/audio/SDL_audio.c +++ b/src/audio/SDL_audio.c @@ -971,7 +971,7 @@ open_audio_device(const char *devname, int iscapture, 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 --git a/src/cpuinfo/SDL_cpuinfo.c b/src/cpuinfo/SDL_cpuinfo.c index b79f02bb0..7fa382818 100644 --- a/src/cpuinfo/SDL_cpuinfo.c +++ b/src/cpuinfo/SDL_cpuinfo.c @@ -38,7 +38,7 @@ #include #include #endif -#ifdef __WINDOWS__ +#ifdef __WIN32__ #define WIN32_LEAN_AND_MEAN #include #endif @@ -319,7 +319,7 @@ SDL_GetCPUCount() sysctlbyname("hw.ncpu", &SDL_CPUCount, &size, NULL, 0); } #endif -#ifdef __WINDOWS__ +#ifdef __WIN32__ if (SDL_CPUCount <= 0) { SYSTEM_INFO info; GetSystemInfo(&info); diff --git a/src/events/SDL_events.c b/src/events/SDL_events.c index ad19c09e4..06f533cd2 100644 --- a/src/events/SDL_events.c +++ b/src/events/SDL_events.c @@ -170,7 +170,7 @@ SDL_StartEventThread(Uint32 flags) /* 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 --git a/src/events/SDL_sysevents.h b/src/events/SDL_sysevents.h index 98440eaaf..994477733 100644 --- a/src/events/SDL_sysevents.h +++ b/src/events/SDL_sysevents.h @@ -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 --git a/src/file/SDL_rwops.c b/src/file/SDL_rwops.c index 2710872ca..6548403f0 100644 --- a/src/file/SDL_rwops.c +++ b/src/file/SDL_rwops.c @@ -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 @@ windows_file_close(SDL_RWops * context) } return (0); } -#endif /* __WINDOWS__ */ +#endif /* __WIN32__ */ #ifdef HAVE_STDIO_H @@ -449,7 +449,7 @@ SDL_RWFromFile(const char *file, const char *mode) 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 --git a/src/libm/math_private.h b/src/libm/math_private.h index 63c98bf61..500e7da96 100644 --- a/src/libm/math_private.h +++ b/src/libm/math_private.h @@ -19,7 +19,7 @@ /*#include */ #include "SDL_endian.h" -#include +/*#include */ #define attribute_hidden #define libm_hidden_proto(x) diff --git a/src/loadso/windows/SDL_sysloadso.c b/src/loadso/windows/SDL_sysloadso.c index c6706be71..061243429 100644 --- a/src/loadso/windows/SDL_sysloadso.c +++ b/src/loadso/windows/SDL_sysloadso.c @@ -61,7 +61,7 @@ SDL_LoadObject(const char *sofile) SDL_free(sofile_t); SDL_free(errbuf_t); -#else /*if defined(__WINDOWS__) */ +#else /*if defined(__WIN32__) */ char errbuf[512]; handle = (void *) LoadLibrary(sofile); diff --git a/src/power/windows/SDL_syspower.c b/src/power/windows/SDL_syspower.c index af007d4d8..a5e23e7fa 100644 --- a/src/power/windows/SDL_syspower.c +++ b/src/power/windows/SDL_syspower.c @@ -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 --git a/src/stdlib/SDL_getenv.c b/src/stdlib/SDL_getenv.c index 5d0502f8e..387531a88 100644 --- a/src/stdlib/SDL_getenv.c +++ b/src/stdlib/SDL_getenv.c @@ -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 @@ SDL_getenv(const char *name) return value; } -#endif /* __WINDOWS__ */ +#endif /* __WIN32__ */ #endif /* !HAVE_GETENV */ diff --git a/src/stdlib/SDL_stdlib.c b/src/stdlib/SDL_stdlib.c index 93e13b3cc..39e70f6ff 100644 --- a/src/stdlib/SDL_stdlib.c +++ b/src/stdlib/SDL_stdlib.c @@ -35,9 +35,7 @@ __declspec(selectany) int _fltused = 1; #endif -#ifdef _WIN64 - -#else +#ifdef _M_IX86 void __declspec(naked) diff --git a/src/thread/windows/SDL_syssem.c b/src/thread/windows/SDL_syssem.c index 4fcb8c6e1..9673ee898 100644 --- a/src/thread/windows/SDL_syssem.c +++ b/src/thread/windows/SDL_syssem.c @@ -39,7 +39,7 @@ struct SDL_semaphore #else HANDLE id; #endif - LONG volatile count; + LONG count; }; diff --git a/src/thread/windows/SDL_systhread.c b/src/thread/windows/SDL_systhread.c index 71313c3be..5a00e9723 100644 --- a/src/thread/windows/SDL_systhread.c +++ b/src/thread/windows/SDL_systhread.c @@ -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 --git a/src/video/SDL_renderer_gl.c b/src/video/SDL_renderer_gl.c index b9155fa62..e3938b1af 100644 --- a/src/video/SDL_renderer_gl.c +++ b/src/video/SDL_renderer_gl.c @@ -1181,7 +1181,7 @@ GL_RenderDrawLines(SDL_Renderer * renderer, const SDL_Point * points, } data->glEnd(); } else { -#if defined(__APPLE__) || defined(__WINDOWS__) +#if defined(__APPLE__) || defined(__WIN32__) #else int x1, y1, x2, y2; #endif @@ -1200,7 +1200,7 @@ GL_RenderDrawLines(SDL_Renderer * renderer, const SDL_Point * points, * 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 --git a/src/video/windows/SDL_gapirender.c b/src/video/windows/SDL_gapirender.c index d8d1dd6f2..a0485aea6 100644 --- a/src/video/windows/SDL_gapirender.c +++ b/src/video/windows/SDL_gapirender.c @@ -92,19 +92,19 @@ typedef struct //#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 @@ typedef struct // 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 @@ typedef struct // system func -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_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); - -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); +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_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); + +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); // 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 @@ int WINCE_Available(void) 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 @@ void WINCE_AddRenderDriver(_THIS) 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 @@ void WINCE_AddRenderDriver(_THIS) 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 @@ SDL_Renderer* WINCE_CreateRenderer(SDL_Window* window, Uint32 flags) 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 @@ SDL_Renderer* WINCE_CreateRenderer(SDL_Window* window, Uint32 flags) 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 @@ SDL_Renderer* WINCE_CreateRenderer(SDL_Window* window, Uint32 flags) // 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 @@ void WINCE_DestroyRenderer(SDL_Renderer* renderer) 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 @@ int WINCE_CreateTexture(SDL_Renderer* renderer, SDL_Texture* texture) 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 @@ void WINCE_DestroyTexture(SDL_Renderer* renderer, SDL_Texture* texture) 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 @@ int WINCE_UpdateTexture(SDL_Renderer* renderer, SDL_Texture* texture, const SDL_ 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; - - while(height--) - { - SDL_memcpy(dst, src, length); - dst += texturedata->pitch; - src += pitch; - } + int height = rect->h; + + while(height--) + { + SDL_memcpy(dst, src, length); + dst += texturedata->pitch; + src += pitch; + } } return 0; @@ -535,9 +537,10 @@ int WINCE_LockTexture(SDL_Renderer* renderer, SDL_Texture* texture, const SDL_Re 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 @@ void WINCE_UnlockTexture(SDL_Renderer* renderer, SDL_Texture* texture) if(texturedata->yuv) { SDL_SW_UnlockYUVTexture(texturedata->yuv); - WINCE_UpdateYUVTextureData(texture); + WINCE_UpdateYUVTextureData(texture); } } @@ -555,41 +558,43 @@ int WINCE_RenderCopy(SDL_Renderer* renderer, SDL_Texture* texture, const SDL_Rec { 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 @@ int WINCE_RenderFillRects(SDL_Renderer* renderer, const SDL_Rect** rects, int co 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 @@ void WINCE_SetupOrientation(WINCE_RenderData* data, int width, int height) 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 @@ void WINCE_ShowWindow(_THIS, SDL_Window* window, int visible) 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); - } - - ShowWindow(windowdata->hwnd, SW_SHOW); + 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); 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; - } - - 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(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); + + 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 @@ void WINCE_PointerCoordinateTransform(SDL_Window* window, POINT* pt) { 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_PointerCoordinateTransform(SDL_Window* window, POINT* pt) 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 @@ int WINCE_FixedGeometry(FrameBufferInfo* fb, int bpp, int debug) { // 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(debug) - printf("WINCE_FixedGeometry: width: %d, height: %d\n", fb->width, fb->height); - } - else - return -1; + 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; } 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(debug) - printf("WINCE_FixedGeometry: width: %d, height: %d\n", fb->width, fb->height); - } - else - return -1; + 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; } return 0; @@ -865,8 +871,12 @@ int GAPI_Init(WINCE_RenderData* data, HWND hwnd) { 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 @@ int GAPI_Init(WINCE_RenderData* data, HWND hwnd) 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; - - // get pixels - GXDeviceInfo gxInfo = { 0 }; - HDC hdc = GetDC(NULL); - - gxInfo.Version = 100; - int 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); - - printf("GXDeviceInfo.unk:\n"); - int ii; for(ii = 0; ii < sizeof(gxInfo.unknown); ++ii) - printf("0x%02hhX,", gxInfo.unknown[ii]); - printf("\n"); - } - - 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; + data->format = SDL_PIXELFORMAT_RGB565; + else + if((gxProperties.ffFormat & kfDirect555) || 15 == gxProperties.cBPP) + data->format = SDL_PIXELFORMAT_RGB555; + else + data->format = 0; + + // get pixels + hdc = GetDC(NULL); + + gxInfo.Version = 100; + result = ExtEscape(hdc, GETGXINFO, 0, NULL, sizeof(gxInfo), (char *) &gxInfo); + ReleaseDC(NULL, hdc); + + if(result > 0) + { + // more debug + if(data->debug) + { + int i; + + 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); + + printf("GXDeviceInfo.unk:\n"); + for(i = 0; i < sizeof(gxInfo.unknown); ++i) + printf("0x%02hhX,", gxInfo.unknown[i]); + printf("\n"); + } + + 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(); + + 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; } - 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(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 @@ void GAPI_Quit(WINCE_RenderData* data) { 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 @@ int RAW_Init(WINCE_RenderData* data) 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 @@ void FrameBufferInitialize(FrameBufferInfo* fb) // 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 @@ void FrameBufferRotate(FrameBufferInfo* dst, int orientation) 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 @@ void PointerRotate(POINT* pt, const FrameBufferInfo* fb, int orientation) { switch(orientation) { - case ORIENTATION_UP: - 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_DOWN: - pt->x = fb->width - pt->x; - pt->y = fb->height - pt->y; - break; - - default: break; + case ORIENTATION_UP: + 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_DOWN: + pt->x = fb->width - pt->x; + pt->y = fb->height - pt->y; + break; + + default: break; } } @@ -1196,14 +1208,14 @@ int WINCE_GetDMOrientation(void) // 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 @@ int WINCE_SetDMOrientation(int orientation) 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 @@ int WINCE_SetDMOrientation(int orientation) 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 @@ void UpdateLine16to16(const FrameBufferInfo* fb, const Uint16* src, Uint16* dst, { if(2 == fb->xpitch) { - switch(width) - { - case 1: - *dst = *src; - break; - - case 2: - *((Uint32*) dst) = *((Uint32*) src); - break; - - default: - SDL_memcpy(dst, src, width * 2); - break; - } + switch(width) + { + case 1: + *dst = *src; + break; + + case 2: + *((Uint32*) dst) = *((Uint32*) src); + 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 --git a/src/video/windows/SDL_gdirender.c b/src/video/windows/SDL_gdirender.c index c52366117..06ab8686f 100644 --- a/src/video/windows/SDL_gdirender.c +++ b/src/video/windows/SDL_gdirender.c @@ -167,8 +167,10 @@ GDI_CreateRenderer(SDL_Window * window, Uint32 flags) 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 --git a/src/video/windows/SDL_windowsevents.c b/src/video/windows/SDL_windowsevents.c index 563d5d7bd..89e9d2804 100644 --- a/src/video/windows/SDL_windowsevents.c +++ b/src/video/windows/SDL_windowsevents.c @@ -192,20 +192,20 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) 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 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) 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 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) 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 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) } returnCode = 0; break; +#endif /* WM_GETMINMAXINFO */ case WM_WINDOWPOSCHANGED: { @@ -534,6 +541,7 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) } 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 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) } } break; +#endif /* System has screensaver support */ case WM_CLOSE: { @@ -656,7 +665,9 @@ SDL_RegisterApp(char *name, Uint32 style, void *hInst) } 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 --git a/src/video/windows/SDL_windowskeyboard.c b/src/video/windows/SDL_windowskeyboard.c index 4f442f2e1..45fd8284e 100644 --- a/src/video/windows/SDL_windowskeyboard.c +++ b/src/video/windows/SDL_windowskeyboard.c @@ -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 @@ WIN_UpdateKeymap() 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 @@ WIN_StartTextInput(_THIS) 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 @@ WIN_StopTextInput(_THIS) IME_Init(videodata, hwnd); IME_Disable(videodata, hwnd); } +#endif /* !SDL_DISABLE_WINDOWS_IME */ } void @@ -207,6 +219,21 @@ WIN_SetTextInputRect(_THIS, SDL_Rect *rect) 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 @@ void IME_Present(SDL_VideoData *videodata) SDL_RenderCopy(videodata->ime_candtex, NULL, &videodata->ime_candlistrect); } +#endif /* SDL_DISABLE_WINDOWS_IME */ + /* vi: set ts=4 sw=4 expandtab: */ diff --git a/src/video/windows/SDL_windowsmodes.c b/src/video/windows/SDL_windowsmodes.c index bd6bbf276..62ff9553c 100644 --- a/src/video/windows/SDL_windowsmodes.c +++ b/src/video/windows/SDL_windowsmodes.c @@ -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 --git a/src/video/windows/SDL_windowsvideo.c b/src/video/windows/SDL_windowsvideo.c index 38f0a071e..3d053fd44 100644 --- a/src/video/windows/SDL_windowsvideo.c +++ b/src/video/windows/SDL_windowsvideo.c @@ -161,9 +161,9 @@ WIN_CreateDevice(int devindex) 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 @@ WIN_CreateDevice(int devindex) } 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 --git a/src/video/windows/SDL_windowsvideo.h b/src/video/windows/SDL_windowsvideo.h index 9051b11b9..895aa08c0 100644 --- a/src/video/windows/SDL_windowsvideo.h +++ b/src/video/windows/SDL_windowsvideo.h @@ -36,7 +36,7 @@ #include -#ifndef __GNUC__ +#if defined(_MSC_VER) && !defined(_WIN32_WCE) #include #else #include "SDL_msctf.h" diff --git a/src/video/windows/SDL_windowswindow.c b/src/video/windows/SDL_windowswindow.c index 9a2ec5a63..2302a33f5 100644 --- a/src/video/windows/SDL_windowswindow.c +++ b/src/video/windows/SDL_windowswindow.c @@ -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 @@ SetupWindowData(_THIS, SDL_Window * window, HWND hwnd, SDL_bool created) } /* 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 @@ SetupWindowData(_THIS, SDL_Window * window, HWND hwnd, SDL_bool created) } 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 --git a/test/testgesture.c b/test/testgesture.c index 29f7106f0..0667c539e 100644 --- a/test/testgesture.c +++ b/test/testgesture.c @@ -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"