mirror of
https://github.com/libretro/RetroArch.git
synced 2025-02-26 04:36:56 +00:00
Create separate wnd_proc functions for winraw
This commit is contained in:
parent
f4b79ad13d
commit
2af9441d35
@ -967,6 +967,130 @@ static LRESULT CALLBACK wnd_proc_common_internal(HWND hwnd,
|
||||
bool quit = false;
|
||||
win32_common_state_t *g_win32 = (win32_common_state_t*)&win32_st;
|
||||
|
||||
switch (message)
|
||||
{
|
||||
case WM_KEYUP: /* Key released */
|
||||
case WM_SYSKEYUP: /* Key released */
|
||||
keydown = false;
|
||||
/* fall-through */
|
||||
case WM_KEYDOWN: /* Key pressed */
|
||||
case WM_SYSKEYDOWN: /* Key pressed */
|
||||
quit = true;
|
||||
{
|
||||
uint16_t mod = 0;
|
||||
unsigned keycode = 0;
|
||||
unsigned keysym = (lparam >> 16) & 0xff;
|
||||
|
||||
if (GetKeyState(VK_SHIFT) & 0x80)
|
||||
mod |= RETROKMOD_SHIFT;
|
||||
if (GetKeyState(VK_CONTROL) & 0x80)
|
||||
mod |= RETROKMOD_CTRL;
|
||||
if (GetKeyState(VK_MENU) & 0x80)
|
||||
mod |= RETROKMOD_ALT;
|
||||
if (GetKeyState(VK_CAPITAL) & 0x81)
|
||||
mod |= RETROKMOD_CAPSLOCK;
|
||||
if (GetKeyState(VK_SCROLL) & 0x81)
|
||||
mod |= RETROKMOD_SCROLLOCK;
|
||||
if ((GetKeyState(VK_LWIN) | GetKeyState(VK_RWIN)) & 0x80)
|
||||
mod |= RETROKMOD_META;
|
||||
|
||||
keysym = (unsigned)wparam;
|
||||
/* fix key binding issues on winraw when
|
||||
* DirectInput is not available */
|
||||
switch (keysym)
|
||||
{
|
||||
/* Mod & Keypad handling done in winraw_callback */
|
||||
case VK_SHIFT:
|
||||
case VK_CONTROL:
|
||||
case VK_MENU:
|
||||
case VK_INSERT:
|
||||
case VK_DELETE:
|
||||
case VK_HOME:
|
||||
case VK_END:
|
||||
case VK_PRIOR:
|
||||
case VK_NEXT:
|
||||
case VK_UP:
|
||||
case VK_DOWN:
|
||||
case VK_LEFT:
|
||||
case VK_RIGHT:
|
||||
case VK_CLEAR:
|
||||
case VK_RETURN:
|
||||
return 0;
|
||||
}
|
||||
|
||||
keycode = input_keymaps_translate_keysym_to_rk(keysym);
|
||||
|
||||
input_keyboard_event(keydown, keycode,
|
||||
0, mod, RETRO_DEVICE_KEYBOARD);
|
||||
|
||||
if (message != WM_SYSKEYDOWN)
|
||||
return 0;
|
||||
|
||||
if (
|
||||
wparam == VK_F10 ||
|
||||
wparam == VK_MENU ||
|
||||
wparam == VK_RSHIFT
|
||||
)
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
case WM_MOUSEMOVE:
|
||||
case WM_POINTERDOWN:
|
||||
case WM_POINTERUP:
|
||||
case WM_POINTERUPDATE:
|
||||
case WM_DEVICECHANGE:
|
||||
case WM_MOUSEWHEEL:
|
||||
case WM_MOUSEHWHEEL:
|
||||
case WM_NCLBUTTONDBLCLK:
|
||||
#if _WIN32_WINNT >= 0x0500 /* 2K */
|
||||
if (g_win32->taskbar_message && message == g_win32->taskbar_message)
|
||||
taskbar_is_created = true;
|
||||
#endif
|
||||
break;
|
||||
case WM_DROPFILES:
|
||||
case WM_SYSCOMMAND:
|
||||
case WM_CHAR:
|
||||
case WM_CLOSE:
|
||||
case WM_DESTROY:
|
||||
case WM_QUIT:
|
||||
case WM_MOVE:
|
||||
case WM_SIZE:
|
||||
case WM_COMMAND:
|
||||
ret = wnd_proc_common(&quit, hwnd, message, wparam, lparam);
|
||||
if (quit)
|
||||
return ret;
|
||||
#if _WIN32_WINNT >= 0x0500 /* 2K */
|
||||
if (g_win32->taskbar_message && message == g_win32->taskbar_message)
|
||||
taskbar_is_created = true;
|
||||
#endif
|
||||
break;
|
||||
#ifdef HAVE_CLIP_WINDOW
|
||||
case WM_SETFOCUS:
|
||||
if (input_mouse_grabbed())
|
||||
win32_clip_window(true);
|
||||
break;
|
||||
case WM_KILLFOCUS:
|
||||
if (input_mouse_grabbed())
|
||||
win32_clip_window(false);
|
||||
break;
|
||||
#endif
|
||||
case WM_DISPLAYCHANGE: /* fix size after display mode switch when using SR */
|
||||
win32_resize_after_display_change(hwnd);
|
||||
break;
|
||||
}
|
||||
|
||||
return DefWindowProc(hwnd, message, wparam, lparam);
|
||||
}
|
||||
|
||||
#ifdef HAVE_WINRAWINPUT
|
||||
static LRESULT CALLBACK wnd_proc_winraw_common_internal(HWND hwnd,
|
||||
UINT message, WPARAM wparam, LPARAM lparam)
|
||||
{
|
||||
LRESULT ret;
|
||||
bool keydown = true;
|
||||
bool quit = false;
|
||||
win32_common_state_t *g_win32 = (win32_common_state_t*)&win32_st;
|
||||
|
||||
switch (message)
|
||||
{
|
||||
case WM_KEYUP: /* Key released */
|
||||
@ -1086,6 +1210,7 @@ static LRESULT CALLBACK wnd_proc_common_internal(HWND hwnd,
|
||||
|
||||
return DefWindowProc(hwnd, message, wparam, lparam);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_DINPUT
|
||||
static LRESULT CALLBACK wnd_proc_common_dinput_internal(HWND hwnd,
|
||||
@ -1226,6 +1351,25 @@ LRESULT CALLBACK wnd_proc_d3d_common(HWND hwnd, UINT message,
|
||||
return wnd_proc_common_internal(hwnd, message, wparam, lparam);
|
||||
}
|
||||
|
||||
#ifdef HAVE_WINRAWINPUT
|
||||
LRESULT CALLBACK wnd_proc_d3d_winraw(HWND hwnd, UINT message,
|
||||
WPARAM wparam, LPARAM lparam)
|
||||
{
|
||||
win32_common_state_t *g_win32 = (win32_common_state_t*)&win32_st;
|
||||
|
||||
if (message == WM_CREATE)
|
||||
{
|
||||
if (DragAcceptFiles_func)
|
||||
DragAcceptFiles_func(hwnd, true);
|
||||
|
||||
g_win32_inited = true;
|
||||
return 0;
|
||||
}
|
||||
|
||||
return wnd_proc_winraw_common_internal(hwnd, message, wparam, lparam);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_DINPUT
|
||||
LRESULT CALLBACK wnd_proc_d3d_dinput(HWND hwnd, UINT message,
|
||||
WPARAM wparam, LPARAM lparam)
|
||||
@ -1259,6 +1403,7 @@ LRESULT CALLBACK wnd_proc_wgl_dinput(HWND hwnd, UINT message,
|
||||
create_wgl_context(hwnd, &g_win32->quit);
|
||||
if (DragAcceptFiles_func)
|
||||
DragAcceptFiles_func(hwnd, true);
|
||||
g_win32_inited = true;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1266,6 +1411,25 @@ LRESULT CALLBACK wnd_proc_wgl_dinput(HWND hwnd, UINT message,
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_WINRAWINPUT
|
||||
LRESULT CALLBACK wnd_proc_wgl_winraw(HWND hwnd, UINT message,
|
||||
WPARAM wparam, LPARAM lparam)
|
||||
{
|
||||
win32_common_state_t *g_win32 = (win32_common_state_t*)&win32_st;
|
||||
|
||||
if (message == WM_CREATE)
|
||||
{
|
||||
create_wgl_context(hwnd, &g_win32->quit);
|
||||
if (DragAcceptFiles_func)
|
||||
DragAcceptFiles_func(hwnd, true);
|
||||
g_win32_inited = true;
|
||||
return 0;
|
||||
}
|
||||
|
||||
return wnd_proc_winraw_common_internal(hwnd, message, wparam, lparam);
|
||||
}
|
||||
#endif
|
||||
|
||||
LRESULT CALLBACK wnd_proc_wgl_common(HWND hwnd, UINT message,
|
||||
WPARAM wparam, LPARAM lparam)
|
||||
{
|
||||
@ -1284,6 +1448,7 @@ LRESULT CALLBACK wnd_proc_wgl_common(HWND hwnd, UINT message,
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_VULKAN
|
||||
|
||||
#ifdef HAVE_DINPUT
|
||||
LRESULT CALLBACK wnd_proc_vk_dinput(HWND hwnd, UINT message,
|
||||
WPARAM wparam, LPARAM lparam)
|
||||
@ -1295,6 +1460,7 @@ LRESULT CALLBACK wnd_proc_vk_dinput(HWND hwnd, UINT message,
|
||||
create_vk_context(hwnd, &g_win32->quit);
|
||||
if (DragAcceptFiles_func)
|
||||
DragAcceptFiles_func(hwnd, true);
|
||||
g_win32_inited = true;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1302,6 +1468,25 @@ LRESULT CALLBACK wnd_proc_vk_dinput(HWND hwnd, UINT message,
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_WINRAWINPUT
|
||||
LRESULT CALLBACK wnd_proc_vk_winraw(HWND hwnd, UINT message,
|
||||
WPARAM wparam, LPARAM lparam)
|
||||
{
|
||||
win32_common_state_t *g_win32 = (win32_common_state_t*)&win32_st;
|
||||
|
||||
if (message == WM_CREATE)
|
||||
{
|
||||
create_vk_context(hwnd, &g_win32->quit);
|
||||
if (DragAcceptFiles_func)
|
||||
DragAcceptFiles_func(hwnd, true);
|
||||
g_win32_inited = true;
|
||||
return 0;
|
||||
}
|
||||
|
||||
return wnd_proc_winraw_common_internal(hwnd, message, wparam, lparam);
|
||||
}
|
||||
#endif
|
||||
|
||||
LRESULT CALLBACK wnd_proc_vk_common(HWND hwnd, UINT message,
|
||||
WPARAM wparam, LPARAM lparam)
|
||||
{
|
||||
@ -1320,6 +1505,7 @@ LRESULT CALLBACK wnd_proc_vk_common(HWND hwnd, UINT message,
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_GDI
|
||||
|
||||
#ifdef HAVE_DINPUT
|
||||
LRESULT CALLBACK wnd_proc_gdi_dinput(HWND hwnd, UINT message,
|
||||
WPARAM wparam, LPARAM lparam)
|
||||
@ -1369,6 +1555,55 @@ LRESULT CALLBACK wnd_proc_gdi_dinput(HWND hwnd, UINT message,
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_WINRAWINPUT
|
||||
LRESULT CALLBACK wnd_proc_gdi_winraw(HWND hwnd, UINT message,
|
||||
WPARAM wparam, LPARAM lparam)
|
||||
{
|
||||
win32_common_state_t *g_win32 = (win32_common_state_t*)&win32_st;
|
||||
|
||||
if (message == WM_CREATE)
|
||||
{
|
||||
create_gdi_context(hwnd, &g_win32->quit);
|
||||
if (DragAcceptFiles_func)
|
||||
DragAcceptFiles_func(hwnd, true);
|
||||
return 0;
|
||||
}
|
||||
else if (message == WM_PAINT)
|
||||
{
|
||||
gdi_t *gdi = (gdi_t*)video_driver_get_ptr();
|
||||
|
||||
if (gdi && gdi->memDC)
|
||||
{
|
||||
gdi->bmp_old = (HBITMAP)SelectObject(gdi->memDC, gdi->bmp);
|
||||
|
||||
/* Draw video content */
|
||||
StretchBlt(
|
||||
gdi->winDC,
|
||||
0,
|
||||
0,
|
||||
gdi->screen_width,
|
||||
gdi->screen_height,
|
||||
gdi->memDC,
|
||||
0,
|
||||
0,
|
||||
gdi->video_width,
|
||||
gdi->video_height,
|
||||
SRCCOPY);
|
||||
|
||||
SelectObject(gdi->memDC, gdi->bmp_old);
|
||||
}
|
||||
|
||||
#if _WIN32_WINNT >= 0x0500 /* 2K */
|
||||
if ( g_win32->taskbar_message
|
||||
&& message == g_win32->taskbar_message)
|
||||
taskbar_is_created = true;
|
||||
#endif
|
||||
}
|
||||
|
||||
return wnd_proc_winraw_common_internal(hwnd, message, wparam, lparam);
|
||||
}
|
||||
#endif
|
||||
|
||||
LRESULT CALLBACK wnd_proc_gdi_common(HWND hwnd, UINT message,
|
||||
WPARAM wparam, LPARAM lparam)
|
||||
{
|
||||
|
@ -127,6 +127,8 @@ float win32_get_refresh_rate(void *data);
|
||||
#if defined(HAVE_D3D8) || defined(HAVE_D3D9) || defined (HAVE_D3D10) || defined (HAVE_D3D11) || defined (HAVE_D3D12)
|
||||
LRESULT CALLBACK wnd_proc_d3d_dinput(HWND hwnd, UINT message,
|
||||
WPARAM wparam, LPARAM lparam);
|
||||
LRESULT CALLBACK wnd_proc_d3d_winraw(HWND hwnd, UINT message,
|
||||
WPARAM wparam, LPARAM lparam);
|
||||
LRESULT CALLBACK wnd_proc_d3d_common(HWND hwnd, UINT message,
|
||||
WPARAM wparam, LPARAM lparam);
|
||||
#endif
|
||||
@ -134,6 +136,8 @@ LRESULT CALLBACK wnd_proc_d3d_common(HWND hwnd, UINT message,
|
||||
#if defined(HAVE_OPENGL) || defined(HAVE_OPENGL1) || defined(HAVE_OPENGL_CORE)
|
||||
LRESULT CALLBACK wnd_proc_wgl_dinput(HWND hwnd, UINT message,
|
||||
WPARAM wparam, LPARAM lparam);
|
||||
LRESULT CALLBACK wnd_proc_wgl_winraw(HWND hwnd, UINT message,
|
||||
WPARAM wparam, LPARAM lparam);
|
||||
LRESULT CALLBACK wnd_proc_wgl_common(HWND hwnd, UINT message,
|
||||
WPARAM wparam, LPARAM lparam);
|
||||
#endif
|
||||
@ -141,12 +145,16 @@ LRESULT CALLBACK wnd_proc_wgl_common(HWND hwnd, UINT message,
|
||||
#if defined(HAVE_VULKAN)
|
||||
LRESULT CALLBACK wnd_proc_vk_dinput(HWND hwnd, UINT message,
|
||||
WPARAM wparam, LPARAM lparam);
|
||||
LRESULT CALLBACK wnd_proc_vk_winraw(HWND hwnd, UINT message,
|
||||
WPARAM wparam, LPARAM lparam);
|
||||
LRESULT CALLBACK wnd_proc_vk_common(HWND hwnd, UINT message,
|
||||
WPARAM wparam, LPARAM lparam);
|
||||
#endif
|
||||
|
||||
LRESULT CALLBACK wnd_proc_gdi_dinput(HWND hwnd, UINT message,
|
||||
WPARAM wparam, LPARAM lparam);
|
||||
LRESULT CALLBACK wnd_proc_gdi_winraw(HWND hwnd, UINT message,
|
||||
WPARAM wparam, LPARAM lparam);
|
||||
LRESULT CALLBACK wnd_proc_gdi_common(HWND hwnd, UINT message,
|
||||
WPARAM wparam, LPARAM lparam);
|
||||
|
||||
|
@ -651,6 +651,11 @@ static void *d3d10_gfx_init(const video_info_t* video,
|
||||
#ifdef HAVE_DINPUT
|
||||
if (string_is_equal(settings->arrays.input_driver, "dinput"))
|
||||
wndclass.lpfnWndProc = wnd_proc_d3d_dinput;
|
||||
else
|
||||
#endif
|
||||
#ifdef HAVE_WINRAWINPUT
|
||||
if (string_is_equal(settings->arrays.input_driver, "raw"))
|
||||
wndclass.lpfnWndProc = wnd_proc_d3d_winraw;
|
||||
#endif
|
||||
#ifdef HAVE_WINDOW
|
||||
win32_window_init(&wndclass, true, NULL);
|
||||
|
@ -814,6 +814,11 @@ static void *d3d11_gfx_init(const video_info_t* video,
|
||||
#ifdef HAVE_DINPUT
|
||||
if (string_is_equal(settings->arrays.input_driver, "dinput"))
|
||||
wndclass.lpfnWndProc = wnd_proc_d3d_dinput;
|
||||
else
|
||||
#endif
|
||||
#ifdef HAVE_WINRAWINPUT
|
||||
if (string_is_equal(settings->arrays.input_driver, "raw"))
|
||||
wndclass.lpfnWndProc = wnd_proc_d3d_winraw;
|
||||
#endif
|
||||
#ifdef HAVE_WINDOW
|
||||
win32_window_init(&wndclass, true, NULL);
|
||||
|
@ -923,6 +923,11 @@ static void *d3d12_gfx_init(const video_info_t* video,
|
||||
#ifdef HAVE_DINPUT
|
||||
if (string_is_equal(settings->arrays.input_driver, "dinput"))
|
||||
wndclass.lpfnWndProc = wnd_proc_d3d_dinput;
|
||||
else
|
||||
#endif
|
||||
#ifdef HAVE_WINRAWINPUT
|
||||
if (string_is_equal(settings->arrays.input_driver, "raw"))
|
||||
wndclass.lpfnWndProc = wnd_proc_d3d_winraw;
|
||||
#endif
|
||||
#ifdef HAVE_WINDOW
|
||||
win32_window_init(&wndclass, true, NULL);
|
||||
|
@ -1152,6 +1152,11 @@ static bool d3d8_init_internal(d3d8_video_t *d3d,
|
||||
#ifdef HAVE_DINPUT
|
||||
if (string_is_equal(settings->arrays.input_driver, "dinput"))
|
||||
d3d->windowClass.lpfnWndProc = wnd_proc_d3d_dinput;
|
||||
else
|
||||
#endif
|
||||
#ifdef HAVE_WINRAWINPUT
|
||||
if (string_is_equal(settings->arrays.input_driver, "raw"))
|
||||
d3d->windowClass.lpfnWndProc = wnd_proc_d3d_winraw;
|
||||
#endif
|
||||
win32_window_init(&d3d->windowClass, true, NULL);
|
||||
#endif
|
||||
|
@ -1152,6 +1152,11 @@ static bool d3d9_init_internal(d3d9_video_t *d3d,
|
||||
#ifdef HAVE_DINPUT
|
||||
if (string_is_equal(settings->arrays.input_driver, "dinput"))
|
||||
d3d->windowClass.lpfnWndProc = wnd_proc_d3d_dinput;
|
||||
else
|
||||
#endif
|
||||
#ifdef HAVE_WINRAWINPUT
|
||||
if (string_is_equal(settings->arrays.input_driver, "raw"))
|
||||
d3d->windowClass.lpfnWndProc = wnd_proc_d3d_winraw;
|
||||
#endif
|
||||
win32_window_init(&d3d->windowClass, true, NULL);
|
||||
#endif
|
||||
|
@ -104,6 +104,11 @@ static bool gfx_ctx_gdi_init(void)
|
||||
#ifdef HAVE_DINPUT
|
||||
if (string_is_equal(settings->arrays.input_driver, "dinput"))
|
||||
wndclass.lpfnWndProc = wnd_proc_gdi_dinput;
|
||||
else
|
||||
#endif
|
||||
#ifdef HAVE_WINRAWINPUT
|
||||
if (string_is_equal(settings->arrays.input_driver, "raw"))
|
||||
wndclass.lpfnWndProc = wnd_proc_gdi_winraw;
|
||||
#endif
|
||||
if (!win32_window_init(&wndclass, true, NULL))
|
||||
return false;
|
||||
|
@ -222,6 +222,11 @@ static void *gfx_ctx_w_vk_init(void *video_driver)
|
||||
#ifdef HAVE_DINPUT
|
||||
if (string_is_equal(settings->arrays.input_driver, "dinput"))
|
||||
wndclass.lpfnWndProc = wnd_proc_vk_dinput;
|
||||
else
|
||||
#endif
|
||||
#ifdef HAVE_WINRAWINPUT
|
||||
if (string_is_equal(settings->arrays.input_driver, "raw"))
|
||||
wndclass.lpfnWndProc = wnd_proc_vk_winraw;
|
||||
#endif
|
||||
}
|
||||
if (!win32_window_init(&wndclass, true, NULL))
|
||||
|
@ -636,6 +636,11 @@ static void *gfx_ctx_wgl_init(void *video_driver)
|
||||
#ifdef HAVE_DINPUT
|
||||
if (string_is_equal(settings->arrays.input_driver, "dinput"))
|
||||
wndclass.lpfnWndProc = wnd_proc_wgl_dinput;
|
||||
else
|
||||
#endif
|
||||
#ifdef HAVE_WINRAWINPUT
|
||||
if (string_is_equal(settings->arrays.input_driver, "raw"))
|
||||
wndclass.lpfnWndProc = wnd_proc_wgl_winraw;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user