1
0
mirror of https://github.com/FunkyFr3sh/cnc-ddraw.git synced 2025-03-15 06:04:49 +01:00

#117 add hotkey settings to .ini

This commit is contained in:
FunkyFr3sh 2021-09-29 12:55:20 +02:00
parent 3015ddeb52
commit 768a3aaa7f
3 changed files with 66 additions and 11 deletions

View File

@ -104,6 +104,15 @@ typedef struct CNCDDRAW
RECT rc;
} mouse;
struct
{
int toggle_fullscreen;
int toggle_maximize;
int unlock_cursor1;
int unlock_cursor2;
int screenshot;
} hotkeys;
HWND hwnd;
WNDPROC wndproc;
struct { DWORD x; DWORD y; } cursor;

View File

@ -51,6 +51,12 @@ void cfg_load()
g_ddraw->armadahack = cfg_get_bool("armadahack", FALSE);
g_ddraw->tshack = cfg_get_bool("tshack", FALSE);
g_ddraw->hotkeys.toggle_fullscreen = cfg_get_int("keytogglefullscreen", VK_RETURN);
g_ddraw->hotkeys.toggle_maximize = cfg_get_int("keytogglemaximize", VK_NEXT);
g_ddraw->hotkeys.unlock_cursor1 = cfg_get_int("keyunlockcursor1", VK_TAB);
g_ddraw->hotkeys.unlock_cursor2 = cfg_get_int("keyunlockcursor2", VK_RCONTROL);
g_ddraw->hotkeys.screenshot = cfg_get_int("keyscreenshot", VK_SNAPSHOT);
g_config.window_rect.right = cfg_get_int("width", 0);
g_config.window_rect.bottom = cfg_get_int("height", 0);
g_config.window_rect.left = cfg_get_int("posX", -32000);
@ -328,6 +334,28 @@ static void cfg_create_ini()
"\n"
"\n"
"\n"
"; ### Hotkeys ###\n"
"; Use the following settings to configure your hotkeys, 0x00 = disabled\n"
"; Virtual-Key Codes: https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes\n"
"\n"
"\n"
"; Toggle fullscreen - Alt + ???\n"
"keytogglefullscreen=0x0D\n"
"\n"
"; Toggle maximize - Alt + ???\n"
"keytogglemaximize=0x22\n"
"\n"
"; Unlock Cursor 1 - Ctrl + ???\n"
"keyunlockcursor1=0x09\n"
"\n"
"; Unlock Cursor 2 - RightAlt + ???\n"
"keyunlockcursor2=0xA3\n"
"\n"
"; Screenshot\n"
"keyscreenshot=0x2C\n"
"\n"
"\n"
"\n"
"; ### Game specific settings ###\n"
"; The following settings override all settings shown above, section name = executable name\n"
"\n"
@ -996,11 +1024,18 @@ BOOL cfg_get_bool(LPCSTR key, BOOL default_value)
int cfg_get_int(LPCSTR key, int default_value)
{
char def_value[16];
char def_value[20];
_snprintf(def_value, sizeof(def_value), "%d", default_value);
char value[16];
char value[20];
cfg_get_string(key, def_value, value, sizeof(value));
return atoi(value);
if (strstr(value, "0x"))
{
return (int)strtol(value, NULL, 0);
}
else
{
return atoi(value);
}
}

View File

@ -579,13 +579,22 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam
BOOL context_code = (lParam & (1 << 29)) != 0;
BOOL key_state = (lParam & (1 << 30)) != 0;
if (wParam == VK_RETURN && !g_ddraw->fullscreen && context_code && !key_state)
if (g_ddraw->hotkeys.toggle_fullscreen &&
wParam == g_ddraw->hotkeys.toggle_fullscreen &&
!g_ddraw->fullscreen &&
context_code &&
!key_state)
{
util_toggle_fullscreen();
return 0;
}
if (wParam == VK_NEXT && g_ddraw->resizable && !g_ddraw->border && g_ddraw->windowed && !g_ddraw->fullscreen)
if (g_ddraw->hotkeys.toggle_maximize &&
wParam == g_ddraw->hotkeys.toggle_maximize &&
g_ddraw->resizable &&
!g_ddraw->border &&
g_ddraw->windowed &&
!g_ddraw->fullscreen)
{
util_toggle_maximize();
return 0;
@ -605,7 +614,7 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam
g_ddraw->alt_key_down = FALSE;
}
if (wParam == VK_TAB || wParam == VK_RETURN)
if (wParam == VK_TAB || (g_ddraw->hotkeys.toggle_fullscreen && wParam == g_ddraw->hotkeys.toggle_fullscreen))
{
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
@ -614,18 +623,20 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam
}
case WM_KEYDOWN:
{
if (wParam == VK_CONTROL || wParam == VK_TAB)
if (g_ddraw->hotkeys.unlock_cursor1 &&
(wParam == VK_CONTROL || wParam == g_ddraw->hotkeys.unlock_cursor1))
{
if (GetAsyncKeyState(VK_CONTROL) & 0x8000 && GetAsyncKeyState(VK_TAB) & 0x8000)
if (GetAsyncKeyState(VK_CONTROL) & 0x8000 && GetAsyncKeyState(g_ddraw->hotkeys.unlock_cursor1) & 0x8000)
{
mouse_unlock();
return 0;
}
}
if (wParam == VK_CONTROL || wParam == VK_MENU)
if (g_ddraw->hotkeys.unlock_cursor2 &&
(wParam == g_ddraw->hotkeys.unlock_cursor2 || wParam == VK_MENU || wParam == VK_CONTROL))
{
if ((GetAsyncKeyState(VK_RMENU) & 0x8000) && GetAsyncKeyState(VK_RCONTROL) & 0x8000)
if ((GetAsyncKeyState(VK_RMENU) & 0x8000) && GetAsyncKeyState(g_ddraw->hotkeys.unlock_cursor2) & 0x8000)
{
mouse_unlock();
return 0;
@ -636,7 +647,7 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam
}
case WM_KEYUP:
{
if (wParam == VK_SNAPSHOT)
if (g_ddraw->hotkeys.screenshot && wParam == g_ddraw->hotkeys.screenshot)
ss_take_screenshot(g_ddraw->primary);
break;