mirror of
https://gitlab.com/shinovon/re3-symbian.git
synced 2026-05-23 01:57:21 +03:00
Initial commit
This commit is contained in:
commit
77cdaaf97e
827 changed files with 418745 additions and 0 deletions
315
vendor/librw/skeleton/win.cpp
vendored
Normal file
315
vendor/librw/skeleton/win.cpp
vendored
Normal file
|
|
@ -0,0 +1,315 @@
|
|||
#ifdef _WIN32
|
||||
#include <windows.h>
|
||||
#include <rw.h>
|
||||
#include "skeleton.h"
|
||||
|
||||
using namespace sk;
|
||||
using namespace rw;
|
||||
|
||||
#ifdef RW_D3D9
|
||||
|
||||
#ifndef VK_OEM_NEC_EQUAL
|
||||
#define VK_OEM_NEC_EQUAL 0x92
|
||||
#endif
|
||||
|
||||
static int keymap[256];
|
||||
static void
|
||||
initkeymap(void)
|
||||
{
|
||||
int i;
|
||||
for(i = 0; i < 256; i++)
|
||||
keymap[i] = KEY_NULL;
|
||||
keymap[VK_SPACE] = ' ';
|
||||
keymap[VK_OEM_7] = '\'';
|
||||
keymap[VK_OEM_COMMA] = ',';
|
||||
keymap[VK_OEM_MINUS] = '-';
|
||||
keymap[VK_OEM_PERIOD] = '.';
|
||||
keymap[VK_OEM_2] = '/';
|
||||
for(i = '0'; i <= '9'; i++)
|
||||
keymap[i] = i;
|
||||
keymap[VK_OEM_1] = ';';
|
||||
keymap[VK_OEM_NEC_EQUAL] = '=';
|
||||
for(i = 'A'; i <= 'Z'; i++)
|
||||
keymap[i] = i;
|
||||
keymap[VK_OEM_4] = '[';
|
||||
keymap[VK_OEM_5] = '\\';
|
||||
keymap[VK_OEM_6] = ']';
|
||||
keymap[VK_OEM_3] = '`';
|
||||
keymap[VK_ESCAPE] = KEY_ESC;
|
||||
keymap[VK_RETURN] = KEY_ENTER;
|
||||
keymap[VK_TAB] = KEY_TAB;
|
||||
keymap[VK_BACK] = KEY_BACKSP;
|
||||
keymap[VK_INSERT] = KEY_INS;
|
||||
keymap[VK_DELETE] = KEY_DEL;
|
||||
keymap[VK_RIGHT] = KEY_RIGHT;
|
||||
keymap[VK_LEFT] = KEY_LEFT;
|
||||
keymap[VK_DOWN] = KEY_DOWN;
|
||||
keymap[VK_UP] = KEY_UP;
|
||||
keymap[VK_PRIOR] = KEY_PGUP;
|
||||
keymap[VK_NEXT] = KEY_PGDN;
|
||||
keymap[VK_HOME] = KEY_HOME;
|
||||
keymap[VK_END] = KEY_END;
|
||||
keymap[VK_MODECHANGE] = KEY_CAPSLK;
|
||||
for(i = VK_F1; i <= VK_F24; i++)
|
||||
keymap[i] = i-VK_F1+KEY_F1;
|
||||
keymap[VK_LSHIFT] = KEY_LSHIFT;
|
||||
keymap[VK_LCONTROL] = KEY_LCTRL;
|
||||
keymap[VK_LMENU] = KEY_LALT;
|
||||
keymap[VK_RSHIFT] = KEY_RSHIFT;
|
||||
keymap[VK_RCONTROL] = KEY_RCTRL;
|
||||
keymap[VK_RMENU] = KEY_RALT;
|
||||
}
|
||||
bool running;
|
||||
|
||||
static void KeyUp(int key) { EventHandler(KEYUP, &key); }
|
||||
static void KeyDown(int key) { EventHandler(KEYDOWN, &key); }
|
||||
|
||||
LRESULT CALLBACK
|
||||
WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
static int resizing = 0;
|
||||
static int buttons = 0;
|
||||
POINTS p;
|
||||
|
||||
MouseState ms;
|
||||
switch(msg){
|
||||
case WM_DESTROY:
|
||||
PostQuitMessage(0);
|
||||
break;
|
||||
|
||||
case WM_SYSKEYDOWN:
|
||||
case WM_KEYDOWN:
|
||||
if(wParam == VK_MENU){
|
||||
if(GetKeyState(VK_LMENU) & 0x8000) KeyDown(keymap[VK_LMENU]);
|
||||
if(GetKeyState(VK_RMENU) & 0x8000) KeyDown(keymap[VK_RMENU]);
|
||||
}else if(wParam == VK_CONTROL){
|
||||
if(GetKeyState(VK_LCONTROL) & 0x8000) KeyDown(keymap[VK_LCONTROL]);
|
||||
if(GetKeyState(VK_RCONTROL) & 0x8000) KeyDown(keymap[VK_RCONTROL]);
|
||||
}else if(wParam == VK_SHIFT){
|
||||
if(GetKeyState(VK_LSHIFT) & 0x8000) KeyDown(keymap[VK_LSHIFT]);
|
||||
if(GetKeyState(VK_RSHIFT) & 0x8000) KeyDown(keymap[VK_RSHIFT]);
|
||||
}else
|
||||
KeyDown(keymap[wParam]);
|
||||
break;
|
||||
|
||||
case WM_SYSKEYUP:
|
||||
case WM_KEYUP:
|
||||
if(wParam == VK_MENU){
|
||||
if((GetKeyState(VK_LMENU) & 0x8000) == 0) KeyUp(keymap[VK_LMENU]);
|
||||
if((GetKeyState(VK_RMENU) & 0x8000) == 0) KeyUp(keymap[VK_RMENU]);
|
||||
}else if(wParam == VK_CONTROL){
|
||||
if((GetKeyState(VK_LCONTROL) & 0x8000) == 0) KeyUp(keymap[VK_LCONTROL]);
|
||||
if((GetKeyState(VK_RCONTROL) & 0x8000) == 0) KeyUp(keymap[VK_RCONTROL]);
|
||||
}else if(wParam == VK_SHIFT){
|
||||
if((GetKeyState(VK_LSHIFT) & 0x8000) == 0) KeyUp(keymap[VK_LSHIFT]);
|
||||
if((GetKeyState(VK_RSHIFT) & 0x8000) == 0) KeyUp(keymap[VK_RSHIFT]);
|
||||
}else
|
||||
KeyUp(keymap[wParam]);
|
||||
break;
|
||||
|
||||
case WM_CHAR:
|
||||
if(wParam > 0 && wParam < 0x10000)
|
||||
EventHandler(CHARINPUT, (void*)wParam);
|
||||
break;
|
||||
|
||||
case WM_MOUSEMOVE:
|
||||
p = MAKEPOINTS(lParam);
|
||||
ms.posx = p.x;
|
||||
ms.posy = p.y;
|
||||
EventHandler(MOUSEMOVE, &ms);
|
||||
break;
|
||||
|
||||
case WM_LBUTTONDOWN:
|
||||
buttons |= 1; goto mbtn;
|
||||
case WM_LBUTTONUP:
|
||||
buttons &= ~1; goto mbtn;
|
||||
case WM_MBUTTONDOWN:
|
||||
buttons |= 2; goto mbtn;
|
||||
case WM_MBUTTONUP:
|
||||
buttons &= ~2; goto mbtn;
|
||||
case WM_RBUTTONDOWN:
|
||||
buttons |= 4; goto mbtn;
|
||||
case WM_RBUTTONUP:
|
||||
buttons &= ~4;
|
||||
mbtn:
|
||||
ms.buttons = buttons;
|
||||
EventHandler(MOUSEBTN, &ms);
|
||||
break;
|
||||
|
||||
case WM_SIZE:
|
||||
rw::Rect r;
|
||||
r.x = 0;
|
||||
r.y = 0;
|
||||
r.w = LOWORD(lParam);
|
||||
r.h = HIWORD(lParam);
|
||||
EventHandler(RESIZE, &r);
|
||||
break;
|
||||
|
||||
case WM_CLOSE:
|
||||
DestroyWindow(hwnd);
|
||||
break;
|
||||
|
||||
case WM_SYSCOMMAND:
|
||||
if ((wParam & 0xfff0) == SC_KEYMENU) // Disable ALT application menu
|
||||
return 0;
|
||||
break;
|
||||
|
||||
case WM_QUIT:
|
||||
running = false;
|
||||
break;
|
||||
}
|
||||
return DefWindowProc(hwnd, msg, wParam, lParam);
|
||||
}
|
||||
|
||||
HWND
|
||||
MakeWindow(HINSTANCE instance, int width, int height, const char *title)
|
||||
{
|
||||
WNDCLASS wc;
|
||||
wc.style = CS_HREDRAW | CS_VREDRAW;
|
||||
wc.lpfnWndProc = WndProc;
|
||||
wc.cbClsExtra = 0;
|
||||
wc.cbWndExtra = 0;
|
||||
wc.hInstance = instance;
|
||||
wc.hIcon = LoadIcon(0, IDI_APPLICATION);
|
||||
wc.hCursor = LoadCursor(0, IDC_ARROW);
|
||||
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
|
||||
wc.lpszMenuName = 0;
|
||||
wc.lpszClassName = "librwD3D9";
|
||||
if(!RegisterClass(&wc)){
|
||||
MessageBox(0, "RegisterClass() - FAILED", 0, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int offx = 100;
|
||||
int offy = 100;
|
||||
RECT rect;
|
||||
rect.left = 0;
|
||||
rect.top = 0;
|
||||
rect.right = width;
|
||||
rect.bottom = height;
|
||||
DWORD style = WS_OVERLAPPEDWINDOW;
|
||||
AdjustWindowRect(&rect, style, FALSE);
|
||||
rect.right += -rect.left;
|
||||
rect.bottom += -rect.top;
|
||||
HWND win;
|
||||
win = CreateWindow("librwD3D9", title, style,
|
||||
offx, offy, rect.right, rect.bottom, 0, 0, instance, 0);
|
||||
if(!win){
|
||||
MessageBox(0, "CreateWindow() - FAILED", 0, 0);
|
||||
return 0;
|
||||
}
|
||||
ShowWindow(win, SW_SHOW);
|
||||
UpdateWindow(win);
|
||||
return win;
|
||||
}
|
||||
|
||||
void
|
||||
pollEvents(void)
|
||||
{
|
||||
MSG msg;
|
||||
while(PeekMessage(&msg, 0, 0, 0, PM_REMOVE)){
|
||||
if(msg.message == WM_QUIT){
|
||||
running = false;
|
||||
break;
|
||||
}else{
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int WINAPI
|
||||
WinMain(HINSTANCE instance, HINSTANCE,
|
||||
PSTR cmdLine, int showCmd)
|
||||
{
|
||||
/*
|
||||
AllocConsole();
|
||||
freopen("CONIN$", "r", stdin);
|
||||
freopen("CONOUT$", "w", stdout);
|
||||
freopen("CONOUT$", "w", stderr);
|
||||
*/
|
||||
|
||||
INT64 ticks;
|
||||
INT64 ticksPerSecond;
|
||||
if(!QueryPerformanceFrequency((LARGE_INTEGER*)&ticksPerSecond))
|
||||
return 0;
|
||||
if(!QueryPerformanceCounter((LARGE_INTEGER*)&ticks))
|
||||
return 0;
|
||||
|
||||
#if defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)
|
||||
args.argc = _argc;
|
||||
args.argv = _argv;
|
||||
#else
|
||||
args.argc = __argc;
|
||||
args.argv = __argv;
|
||||
#endif
|
||||
|
||||
if(EventHandler(INITIALIZE, nil) == EVENTERROR)
|
||||
return 0;
|
||||
|
||||
HWND win = MakeWindow(instance,
|
||||
sk::globals.width, sk::globals.height,
|
||||
sk::globals.windowtitle);
|
||||
if(win == 0){
|
||||
MessageBox(0, "MakeWindow() - FAILED", 0, 0);
|
||||
return 0;
|
||||
}
|
||||
engineOpenParams.window = win;
|
||||
initkeymap();
|
||||
|
||||
if(EventHandler(RWINITIALIZE, nil) == EVENTERROR)
|
||||
return 0;
|
||||
|
||||
INT64 lastTicks;
|
||||
QueryPerformanceCounter((LARGE_INTEGER *)&lastTicks);
|
||||
running = true;
|
||||
while((pollEvents(), running) && !globals.quit){
|
||||
QueryPerformanceCounter((LARGE_INTEGER *)&ticks);
|
||||
float timeDelta = (float)(ticks - lastTicks)/ticksPerSecond;
|
||||
|
||||
EventHandler(IDLE, &timeDelta);
|
||||
|
||||
lastTicks = ticks;
|
||||
}
|
||||
|
||||
EventHandler(RWTERMINATE, nil);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
namespace sk {
|
||||
|
||||
void
|
||||
SetMousePosition(int x, int y)
|
||||
{
|
||||
POINT pos = { x, y };
|
||||
ClientToScreen(engineOpenParams.window, &pos);
|
||||
SetCursorPos(pos.x, pos.y);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef RW_OPENGL
|
||||
int main(int argc, char *argv[]);
|
||||
|
||||
int WINAPI
|
||||
WinMain(HINSTANCE instance, HINSTANCE,
|
||||
PSTR cmdLine, int showCmd)
|
||||
{
|
||||
/*
|
||||
AllocConsole();
|
||||
freopen("CONIN$", "r", stdin);
|
||||
freopen("CONOUT$", "w", stdout);
|
||||
freopen("CONOUT$", "w", stderr);
|
||||
*/
|
||||
|
||||
#if defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)
|
||||
return main(_argc, _argv);
|
||||
#else
|
||||
return main(__argc, __argv);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
Loading…
Add table
Add a link
Reference in a new issue