Include windows.h in a single point in the source, so we can be consistent about the definition of UNICODE and have core utility functions for Windows that all modules can share.

I think this also fixes the bug relating to non-latin characters in filenames, since UNICODE wasn't defined in SDL_rwops.c

--HG--
rename : src/SDL_android.cpp => src/core/android/SDL_android.cpp
rename : src/SDL_android.h => src/core/android/SDL_android.h
This commit is contained in:
Sam Lantinga 2011-01-24 21:20:30 -08:00
parent 1775cf40fd
commit b4497865bd
37 changed files with 274 additions and 273 deletions

View file

@ -78,7 +78,7 @@ typedef int (*PFNGXResume)();
typedef struct
{
// gx.dll
HMODULE hGapiLib;
void* hGapiLib;
PFNGXOpenDisplay GXOpenDisplay;
PFNGXCloseDisplay GXCloseDisplay;
PFNGXBeginDraw GXBeginDraw;
@ -251,7 +251,7 @@ SDL_RenderDriver RAW_RenderDriver = {
int WINCE_Available(void)
{
HMODULE render_gapi;
void* render_gapi;
const char* preferably = SDL_getenv("SDL_VIDEO_RENDERER");
// raw check
@ -267,10 +267,10 @@ int WINCE_Available(void)
if(preferably && 0 == SDL_strcasecmp(preferably, RAW_RENDER_NAME)) return 0 != render_raw;
// gapi check
render_gapi = LoadLibrary(TEXT("\\Windows\\gx.dll"));
render_gapi = SDL_LoadObject("\\Windows\\gx.dll");
if(0 == render_gapi)
render_gapi = LoadLibrary(TEXT("gx.dll"));
FreeLibrary(render_gapi);
render_gapi = SDL_LoadObject("gx.dll");
SDL_UnloadObject(render_gapi);
if(preferably && 0 == SDL_strcasecmp(preferably, GAPI_RENDER_NAME)) return 0 != render_gapi;
@ -280,7 +280,7 @@ int WINCE_Available(void)
void WINCE_AddRenderDriver(_THIS)
{
HDC hdc;
HMODULE render_gapi;
void* render_gapi;
int render_raw, ii;
const char* preferably = SDL_getenv("SDL_VIDEO_RENDERER");
@ -295,12 +295,12 @@ void WINCE_AddRenderDriver(_THIS)
render_raw = 1;
// gapi check
render_gapi = LoadLibrary(TEXT("\\Windows\\gx.dll"));
render_gapi = SDL_LoadObject("\\Windows\\gx.dll");
if(0 == render_gapi)
render_gapi = LoadLibrary(TEXT("gx.dll"));
render_gapi = SDL_LoadObject("gx.dll");
if(render_gapi)
FreeLibrary(render_gapi);
SDL_UnloadObject(render_gapi);
for(ii = 0; ii < _this->num_displays; ++ii)
{
@ -885,15 +885,15 @@ int GAPI_Init(WINCE_RenderData* data, HWND hwnd)
return 0;
}
data->gapi->hGapiLib = LoadLibrary(TEXT("\\Windows\\gx.dll"));
data->gapi->hGapiLib = SDL_LoadObject("\\Windows\\gx.dll");
if(0 == data->gapi->hGapiLib)
{
data->gapi->hGapiLib = LoadLibrary(TEXT("gx.dll"));
data->gapi->hGapiLib = SDL_LoadObject("gx.dll");
if(0 == data->gapi->hGapiLib) return 0;
}
// load gapi library
#define LINK(type,name,import) name=(PFN##type)GetProcAddress(data->gapi->hGapiLib,TEXT(import))
#define LINK(type,name,import) name=(PFN##type)SDL_LoadFunction(data->gapi->hGapiLib,import)
LINK(GXOpenDisplay, data->gapi->GXOpenDisplay, "?GXOpenDisplay@@YAHPAUHWND__@@K@Z");
LINK(GXCloseDisplay, data->gapi->GXCloseDisplay, "?GXCloseDisplay@@YAHXZ");
LINK(GXBeginDraw, data->gapi->GXBeginDraw, "?GXBeginDraw@@YAPAXXZ");
@ -1005,7 +1005,7 @@ 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->hGapiLib) SDL_UnloadObject(data->gapi->hGapiLib);
SDL_free(data->gapi);
data->gapi = NULL;

View file

@ -312,15 +312,15 @@ IME_Init(SDL_VideoData *videodata, HWND hwnd)
CoCreateInstance(&CLSID_TF_ThreadMgr, NULL, CLSCTX_INPROC_SERVER, &IID_ITfThreadMgr, (LPVOID *)&videodata->ime_threadmgr);
}
videodata->ime_initialized = SDL_TRUE;
videodata->ime_himm32 = LoadLibraryA("imm32.dll");
videodata->ime_himm32 = SDL_LoadObject("imm32.dll");
if (!videodata->ime_himm32) {
videodata->ime_available = SDL_FALSE;
return;
}
videodata->ImmLockIMC = (LPINPUTCONTEXT2 (WINAPI *)(HIMC))GetProcAddress(videodata->ime_himm32, "ImmLockIMC");
videodata->ImmUnlockIMC = (BOOL (WINAPI *)(HIMC))GetProcAddress(videodata->ime_himm32, "ImmUnlockIMC");
videodata->ImmLockIMCC = (LPVOID (WINAPI *)(HIMCC))GetProcAddress(videodata->ime_himm32, "ImmLockIMCC");
videodata->ImmUnlockIMCC = (BOOL (WINAPI *)(HIMCC))GetProcAddress(videodata->ime_himm32, "ImmUnlockIMCC");
videodata->ImmLockIMC = (LPINPUTCONTEXT2 (WINAPI *)(HIMC))SDL_LoadFunction(videodata->ime_himm32, "ImmLockIMC");
videodata->ImmUnlockIMC = (BOOL (WINAPI *)(HIMC))SDL_LoadFunction(videodata->ime_himm32, "ImmUnlockIMC");
videodata->ImmLockIMCC = (LPVOID (WINAPI *)(HIMCC))SDL_LoadFunction(videodata->ime_himm32, "ImmLockIMCC");
videodata->ImmUnlockIMCC = (BOOL (WINAPI *)(HIMCC))SDL_LoadFunction(videodata->ime_himm32, "ImmUnlockIMCC");
IME_SetWindow(videodata, hwnd);
videodata->ime_himc = ImmGetContext(hwnd);
@ -383,7 +383,7 @@ IME_Quit(SDL_VideoData *videodata)
videodata->ime_hwnd_main = 0;
videodata->ime_himc = 0;
if (videodata->ime_himm32) {
FreeLibrary(videodata->ime_himm32);
SDL_UnloadObject(videodata->ime_himm32);
videodata->ime_himm32 = 0;
}
if (videodata->ime_threadmgr) {
@ -606,7 +606,7 @@ static void
IME_SetupAPI(SDL_VideoData *videodata)
{
char ime_file[MAX_PATH + 1];
HMODULE hime = 0;
void* hime = 0;
HKL hkl = 0;
videodata->GetReadingString = 0;
videodata->ShowReadingWindow = 0;
@ -617,14 +617,14 @@ IME_SetupAPI(SDL_VideoData *videodata)
if (ImmGetIMEFileNameA(hkl, ime_file, sizeof(ime_file) - 1) <= 0)
return;
hime = LoadLibraryA(ime_file);
hime = SDL_LoadObject(ime_file);
if (!hime)
return;
videodata->GetReadingString = (UINT (WINAPI *)(HIMC, UINT, LPWSTR, PINT, BOOL*, PUINT))
GetProcAddress(hime, "GetReadingString");
SDL_LoadFunction(hime, "GetReadingString");
videodata->ShowReadingWindow = (BOOL (WINAPI *)(HIMC, BOOL))
GetProcAddress(hime, "ShowReadingWindow");
SDL_LoadFunction(hime, "ShowReadingWindow");
if (videodata->ShowReadingWindow) {
HIMC himc = ImmGetContext(videodata->ime_hwnd_current);

View file

@ -101,7 +101,7 @@ WIN_GL_LoadLibrary(_THIS, const char *path)
!_this->gl_data->wglDeleteContext ||
!_this->gl_data->wglMakeCurrent) {
SDL_SetError("Could not retrieve OpenGL functions");
FreeLibrary(handle);
SDL_UnloadObject(handle);
return -1;
}

View file

@ -37,19 +37,6 @@
static int WIN_VideoInit(_THIS);
static void WIN_VideoQuit(_THIS);
/* Sets an error message based on GetLastError() */
void
WIN_SetError(const char *prefix)
{
TCHAR buffer[1024];
char *message;
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), 0,
buffer, SDL_arraysize(buffer), NULL);
message = WIN_StringToUTF8(buffer);
SDL_SetError("%s%s%s", prefix ? prefix : "", prefix ? ": " : "", message);
SDL_free(message);
}
/* Windows driver bootstrap functions */
@ -68,22 +55,22 @@ WIN_DeleteDevice(SDL_VideoDevice * device)
#if SDL_VIDEO_RENDER_D3D
if (data->d3d) {
IDirect3D9_Release(data->d3d);
FreeLibrary(data->d3dDLL);
SDL_UnloadObject(data->d3dDLL);
}
#endif
#if SDL_VIDEO_RENDER_DDRAW
if (data->ddraw) {
data->ddraw->lpVtbl->Release(data->ddraw);
FreeLibrary(data->ddrawDLL);
SDL_UnloadObject(data->ddrawDLL);
}
#endif
#ifdef _WIN32_WCE
if(data->hAygShell) {
FreeLibrary(data->hAygShell);
SDL_UnloadObject(data->hAygShell);
}
#endif
if (data->userDLL) {
FreeLibrary(data->userDLL);
SDL_UnloadObject(data->userDLL);
}
SDL_free(device->driverdata);
@ -115,24 +102,24 @@ WIN_CreateDevice(int devindex)
device->driverdata = data;
#if SDL_VIDEO_RENDER_D3D
data->d3dDLL = LoadLibrary(TEXT("D3D9.DLL"));
data->d3dDLL = SDL_LoadObject("D3D9.DLL");
if (data->d3dDLL) {
IDirect3D9 *(WINAPI * D3DCreate) (UINT SDKVersion);
D3DCreate =
(IDirect3D9 * (WINAPI *) (UINT)) GetProcAddress(data->d3dDLL,
(IDirect3D9 * (WINAPI *) (UINT)) SDL_LoadFunction(data->d3dDLL,
"Direct3DCreate9");
if (D3DCreate) {
data->d3d = D3DCreate(D3D_SDK_VERSION);
}
if (!data->d3d) {
FreeLibrary(data->d3dDLL);
SDL_UnloadObject(data->d3dDLL);
data->d3dDLL = NULL;
}
}
#endif /* SDL_VIDEO_RENDER_D3D */
#if SDL_VIDEO_RENDER_DDRAW
data->ddrawDLL = LoadLibrary(TEXT("ddraw.dll"));
data->ddrawDLL = SDL_LoadObject("ddraw.dll");
if (data->ddrawDLL) {
IDirectDraw *(WINAPI * DDCreate) (GUID FAR * lpGUID,
LPDIRECTDRAW FAR * lplpDD,
@ -141,9 +128,9 @@ WIN_CreateDevice(int devindex)
DDCreate =
(IDirectDraw *
(WINAPI *) (GUID FAR *, LPDIRECTDRAW FAR *, IUnknown FAR *))
GetProcAddress(data->ddrawDLL, TEXT("DirectDrawCreate"));
SDL_LoadFunction(data->ddrawDLL, "DirectDrawCreate");
if (!DDCreate || DDCreate(NULL, &data->ddraw, NULL) != DD_OK) {
FreeLibrary(data->ddrawDLL);
SDL_UnloadObject(data->ddrawDLL);
data->ddrawDLL = NULL;
data->ddraw = NULL;
}
@ -151,19 +138,19 @@ WIN_CreateDevice(int devindex)
#endif /* SDL_VIDEO_RENDER_DDRAW */
#ifdef _WIN32_WCE
data->hAygShell = LoadLibrary(TEXT("\\windows\\aygshell.dll"));
data->hAygShell = SDL_LoadObject("\\windows\\aygshell.dll");
if(0 == data->hAygShell)
data->hAygShell = LoadLibrary(TEXT("aygshell.dll"));
data->hAygShell = SDL_LoadObject("aygshell.dll");
data->SHFullScreen = (0 != data->hAygShell ?
(PFNSHFullScreen) GetProcAddress(data->hAygShell, TEXT("SHFullScreen")) : 0);
(PFNSHFullScreen) SDL_LoadFunction(data->hAygShell, "SHFullScreen") : 0);
data->CoordTransform = NULL;
#endif
data->userDLL = LoadLibrary(TEXT("USER32.DLL"));
data->userDLL = SDL_LoadObject("USER32.DLL");
if (data->userDLL) {
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"));
data->CloseTouchInputHandle = (BOOL (WINAPI *)( HTOUCHINPUT )) SDL_LoadFunction(data->userDLL, "CloseTouchInputHandle");
data->GetTouchInputInfo = (BOOL (WINAPI *)( HTOUCHINPUT, UINT, PTOUCHINPUT, int )) SDL_LoadFunction(data->userDLL, "GetTouchInputInfo");
data->RegisterTouchWindow = (BOOL (WINAPI *)( HWND, ULONG )) SDL_LoadFunction(data->userDLL, "RegisterTouchWindow");
}
/* Set the function pointers */

View file

@ -26,15 +26,7 @@
#include "../SDL_sysvideo.h"
#define WIN32_LEAN_AND_MEAN
#define STRICT
#ifndef UNICODE
#define UNICODE
#endif
#undef WINVER
#define WINVER 0x500 /* Need 0x410 for AlphaBlend() and 0x500 for EnumDisplayDevices() */
#include <windows.h>
#include "../../core/windows/SDL_windows.h"
#if defined(_MSC_VER) && !defined(_WIN32_WCE)
#include <msctf.h>
@ -68,15 +60,8 @@
#include "SDL_windowsopengl.h"
#include "SDL_windowswindow.h"
#include "SDL_events.h"
#include "SDL_loadso.h"
#ifdef UNICODE
#define WIN_StringToUTF8(S) SDL_iconv_string("UTF-8", "UCS-2", (char *)S, (SDL_wcslen(S)+1)*sizeof(WCHAR))
#define WIN_UTF8ToString(S) (WCHAR *)SDL_iconv_string("UCS-2", "UTF-8", (char *)S, SDL_strlen(S)+1)
#else
#define WIN_StringToUTF8(S) SDL_iconv_string("UTF-8", "ASCII", (char *)S, (SDL_strlen(S)+1))
#define WIN_UTF8ToString(S) SDL_iconv_string("ASCII", "UTF-8", (char *)S, SDL_strlen(S)+1)
#endif
extern void WIN_SetError(const char *prefix);
enum { RENDER_NONE, RENDER_D3D, RENDER_DDRAW, RENDER_GDI, RENDER_GAPI, RENDER_RAW };
@ -147,15 +132,15 @@ typedef struct SDL_VideoData
int render;
#if SDL_VIDEO_RENDER_D3D
HANDLE d3dDLL;
void* d3dDLL;
IDirect3D9 *d3d;
#endif
#if SDL_VIDEO_RENDER_DDRAW
HANDLE ddrawDLL;
void* ddrawDLL;
IDirectDraw *ddraw;
#endif
#ifdef _WIN32_WCE
HMODULE hAygShell;
void* hAygShell;
PFNSHFullScreen SHFullScreen;
PFCoordTransform CoordTransform;
#endif
@ -164,7 +149,7 @@ typedef struct SDL_VideoData
DWORD clipboard_count;
/* Touch input functions */
HANDLE userDLL;
void* userDLL;
BOOL (WINAPI *CloseTouchInputHandle)( HTOUCHINPUT );
BOOL (WINAPI *GetTouchInputInfo)( HTOUCHINPUT, UINT, PTOUCHINPUT, int );
BOOL (WINAPI *RegisterTouchWindow)( HWND, ULONG );
@ -199,7 +184,7 @@ typedef struct SDL_VideoData
int ime_winheight;
HKL ime_hkl;
HMODULE ime_himm32;
void* ime_himm32;
UINT (WINAPI *GetReadingString)(HIMC himc, UINT uReadingBufLen, LPWSTR lpwReadingBuf, PINT pnErrorIndex, BOOL *pfIsVertical, PUINT puMaxReadingLen);
BOOL (WINAPI *ShowReadingWindow)(HIMC himc, BOOL bShow);
LPINPUTCONTEXT2 (WINAPI *ImmLockIMC)(HIMC himc);