From 700b57d758f47fbb21066cba933ddd45ddf6045b Mon Sep 17 00:00:00 2001 From: kanjitalk755 Date: Wed, 27 Jun 2018 19:13:30 +0900 Subject: [PATCH] added pref item "hotkey" added MB notation pref item "ramsize" --- BasiliskII/src/SDL/video_sdl2.cpp | 62 ++++++++++++++++++++---- BasiliskII/src/Unix/main_unix.cpp | 3 ++ BasiliskII/src/Windows/main_windows.cpp | 3 ++ BasiliskII/src/include/user_strings.h | 5 ++ BasiliskII/src/prefs_items.cpp | 1 + BasiliskII/src/user_strings.cpp | 10 ++++ SheepShaver/src/Unix/main_unix.cpp | 3 ++ SheepShaver/src/Windows/main_windows.cpp | 3 ++ SheepShaver/src/include/user_strings.h | 5 ++ SheepShaver/src/prefs_items.cpp | 1 + SheepShaver/src/user_strings.cpp | 10 ++++ 11 files changed, 96 insertions(+), 10 deletions(-) diff --git a/BasiliskII/src/SDL/video_sdl2.cpp b/BasiliskII/src/SDL/video_sdl2.cpp index 79bdc105..bf8e61f7 100644 --- a/BasiliskII/src/SDL/video_sdl2.cpp +++ b/BasiliskII/src/SDL/video_sdl2.cpp @@ -48,6 +48,7 @@ #include #include #include +#include #ifdef WIN32 #include /* alloca() */ @@ -120,6 +121,8 @@ static const bool use_vosf = false; // VOSF not possible #endif static bool ctrl_down = false; // Flag: Ctrl key pressed +static bool opt_down = false; // Flag: Opt key pressed +static bool cmd_down = false; // Flag: Cmd key pressed static bool caps_on = false; // Flag: Caps Lock on static bool quit_full_screen = false; // Flag: DGA close requested from redraw thread static bool emerg_quit = false; // Flag: Ctrl-Esc pressed, emergency quit requested from MacOS thread @@ -532,6 +535,18 @@ static void set_window_name(int name) SDL_SetWindowTitle(sdl_window, str); } +static void set_window_name_grabbed() { + if (!sdl_window) return; + int hotkey = PrefsFindInt32("hotkey"); + if (!hotkey) hotkey = 1; + std::string s = GetString(STR_WINDOW_TITLE_GRABBED0); + if (hotkey & 1) s += GetString(STR_WINDOW_TITLE_GRABBED1); + if (hotkey & 2) s += GetString(STR_WINDOW_TITLE_GRABBED2); + if (hotkey & 4) s += GetString(STR_WINDOW_TITLE_GRABBED3); + s += GetString(STR_WINDOW_TITLE_GRABBED4); + SDL_SetWindowTitle(sdl_window, s.c_str()); +} + // Set mouse grab mode static void set_grab_mode(bool grab) { @@ -1024,7 +1039,7 @@ void driver_base::adapt_to_video_mode() { SDL_ShowCursor(hardware_cursor); // Set window name/class - set_window_name(mouse_grabbed ? (int)STR_WINDOW_TITLE_GRABBED : (int)STR_WINDOW_TITLE); + mouse_grabbed ? set_window_name_grabbed() : set_window_name((int)STR_WINDOW_TITLE); // Everything went well init_ok = true; @@ -1118,7 +1133,7 @@ void driver_base::grab_mouse(void) if (!mouse_grabbed) { mouse_grabbed = true; update_mouse_grab(); - set_window_name(STR_WINDOW_TITLE_GRABBED); + set_window_name_grabbed(); disable_mouse_accel(); ADBSetRelMouseMode(true); } @@ -1856,9 +1871,13 @@ static bool is_modifier_key(SDL_KeyboardEvent const & e) return false; } -static bool is_ctrl_down(SDL_Keysym const & ks) +static bool is_hotkey_down(SDL_Keysym const & ks) { - return ctrl_down || (ks.mod & KMOD_CTRL); + int hotkey = PrefsFindInt32("hotkey"); + if (!hotkey) hotkey = 1; + return (ctrl_down || (ks.mod & KMOD_CTRL) || !(hotkey & 1)) && + (opt_down || (ks.mod & KMOD_ALT) || !(hotkey & 2)) && + (cmd_down || (ks.mod & KMOD_GUI) || !(hotkey & 4)); } @@ -1920,8 +1939,8 @@ static int kc_decode(SDL_Keysym const & ks, bool key_down) case SDLK_PERIOD: case SDLK_GREATER: return 0x2f; case SDLK_SLASH: case SDLK_QUESTION: return 0x2c; - case SDLK_TAB: if (is_ctrl_down(ks)) {if (!key_down) drv->suspend(); return -2;} else return 0x30; - case SDLK_RETURN: if (is_ctrl_down(ks)) {if (!key_down) toggle_fullscreen = true; return -2;} else return 0x24; + case SDLK_TAB: if (is_hotkey_down(ks)) {if (!key_down) drv->suspend(); return -2;} else return 0x30; + case SDLK_RETURN: if (is_hotkey_down(ks)) {if (!key_down) toggle_fullscreen = true; return -2;} else return 0x24; case SDLK_SPACE: return 0x31; case SDLK_BACKSPACE: return 0x33; @@ -1936,7 +1955,7 @@ static int kc_decode(SDL_Keysym const & ks, bool key_down) case SDLK_RCTRL: return 0x36; case SDLK_LSHIFT: return 0x38; case SDLK_RSHIFT: return 0x38; -#if (defined(__APPLE__) && defined(__MACH__)) +#ifdef __APPLE__ case SDLK_LALT: return 0x3a; case SDLK_RALT: return 0x3a; case SDLK_LGUI: return 0x37; @@ -1956,9 +1975,9 @@ static int kc_decode(SDL_Keysym const & ks, bool key_down) case SDLK_LEFT: return 0x3b; case SDLK_RIGHT: return 0x3c; - case SDLK_ESCAPE: if (is_ctrl_down(ks)) {if (!key_down) { quit_full_screen = true; emerg_quit = true; } return -2;} else return 0x35; + case SDLK_ESCAPE: if (is_hotkey_down(ks)) {if (!key_down) { quit_full_screen = true; emerg_quit = true; } return -2;} else return 0x35; - case SDLK_F1: if (is_ctrl_down(ks)) {if (!key_down) SysMountFirstFloppy(); return -2;} else return 0x7a; + case SDLK_F1: if (is_hotkey_down(ks)) {if (!key_down) SysMountFirstFloppy(); return -2;} else return 0x7a; case SDLK_F2: return 0x78; case SDLK_F3: return 0x63; case SDLK_F4: return 0x76; @@ -2043,7 +2062,7 @@ static int SDLCALL on_sdl_event_generated(void *userdata, SDL_Event * event) SDL_Keysym const & ks = event->key.keysym; switch (ks.sym) { case SDLK_F5: { - if (is_ctrl_down(ks)) { + if (is_hotkey_down(ks)) { drv->toggle_mouse_grab(); return EVENT_DROP_FROM_QUEUE; } @@ -2164,6 +2183,18 @@ static void handle_events(void) ADBKeyDown(code); if (code == 0x36) ctrl_down = true; +#ifdef __APPLE__ + if (code == 0x3a) + opt_down = true; + if (code == 0x37) + cmd_down = true; +#else + if (code == 0x37) + opt_down = true; + if (code == 0x3a) + cmd_down = true; +#endif + } else { if (code == 0x31) drv->resume(); // Space wakes us up @@ -2191,6 +2222,17 @@ static void handle_events(void) ADBKeyUp(code); if (code == 0x36) ctrl_down = false; +#ifdef __APPLE__ + if (code == 0x3a) + opt_down = false; + if (code == 0x37) + cmd_down = false; +#else + if (code == 0x37) + opt_down = false; + if (code == 0x3a) + cmd_down = false; +#endif } break; } diff --git a/BasiliskII/src/Unix/main_unix.cpp b/BasiliskII/src/Unix/main_unix.cpp index b409c222..17e9827f 100644 --- a/BasiliskII/src/Unix/main_unix.cpp +++ b/BasiliskII/src/Unix/main_unix.cpp @@ -568,6 +568,9 @@ int main(int argc, char **argv) // Read RAM size RAMSize = PrefsFindInt32("ramsize") & 0xfff00000; // Round down to 1MB boundary + if (RAMSize <= 1000) { + RAMSize *= 1024 * 1024; + } if (RAMSize < 1024*1024) { WarningAlert(GetString(STR_SMALL_RAM_WARN)); RAMSize = 1024*1024; diff --git a/BasiliskII/src/Windows/main_windows.cpp b/BasiliskII/src/Windows/main_windows.cpp index 9b992dc1..b5ce8593 100755 --- a/BasiliskII/src/Windows/main_windows.cpp +++ b/BasiliskII/src/Windows/main_windows.cpp @@ -320,6 +320,9 @@ int main(int argc, char **argv) // Read RAM size RAMSize = PrefsFindInt32("ramsize") & 0xfff00000; // Round down to 1MB boundary + if (RAMSize <= 1000) { + RAMSize *= 1024 * 1024; + } if (RAMSize < 1024*1024) { WarningAlert(GetString(STR_SMALL_RAM_WARN)); RAMSize = 1024*1024; diff --git a/BasiliskII/src/include/user_strings.h b/BasiliskII/src/include/user_strings.h index 24a0b28a..c030b20e 100644 --- a/BasiliskII/src/include/user_strings.h +++ b/BasiliskII/src/include/user_strings.h @@ -214,6 +214,11 @@ enum { STR_WINDOW_TITLE = 4000, STR_WINDOW_TITLE_FROZEN, STR_WINDOW_TITLE_GRABBED, + STR_WINDOW_TITLE_GRABBED0, + STR_WINDOW_TITLE_GRABBED1, + STR_WINDOW_TITLE_GRABBED2, + STR_WINDOW_TITLE_GRABBED3, + STR_WINDOW_TITLE_GRABBED4, STR_WINDOW_MENU = 4050, STR_WINDOW_ITEM_ABOUT, STR_WINDOW_ITEM_REFRESH, diff --git a/BasiliskII/src/prefs_items.cpp b/BasiliskII/src/prefs_items.cpp index 6da364b0..07234d39 100644 --- a/BasiliskII/src/prefs_items.cpp +++ b/BasiliskII/src/prefs_items.cpp @@ -72,6 +72,7 @@ prefs_desc common_prefs_items[] = { {"keycodefile",TYPE_STRING,"Keycode file"}, {"mousewheelmode",TYPE_BOOLEAN,"Use WheelMode"}, {"mousewheellines",TYPE_INT32,"wheel line nb"}, + {"hotkey",TYPE_INT32,false,"hotkey modifier"}, {NULL, TYPE_END, false, NULL} // End of list }; diff --git a/BasiliskII/src/user_strings.cpp b/BasiliskII/src/user_strings.cpp index 55a7fb87..d182f633 100644 --- a/BasiliskII/src/user_strings.cpp +++ b/BasiliskII/src/user_strings.cpp @@ -227,6 +227,16 @@ user_string_def common_strings[] = { {STR_WINDOW_TITLE, "Basilisk II"}, {STR_WINDOW_TITLE_FROZEN, "Basilisk II *** FROZEN ***"}, {STR_WINDOW_TITLE_GRABBED, "Basilisk II (mouse grabbed, press Ctrl-F5 to release)"}, + {STR_WINDOW_TITLE_GRABBED0, "Basilisk II (mouse grabbed, press "}, + {STR_WINDOW_TITLE_GRABBED1, "Ctrl-"}, +#ifdef __APPLE__ + {STR_WINDOW_TITLE_GRABBED2, "Opt-"}, + {STR_WINDOW_TITLE_GRABBED3, "Cmd-"}, +#else + {STR_WINDOW_TITLE_GRABBED2, "Alt-"}, + {STR_WINDOW_TITLE_GRABBED3, "Win-"}, +#endif + {STR_WINDOW_TITLE_GRABBED4, "F5 to release)"}, {STR_WINDOW_MENU, "Basilisk II"}, {STR_WINDOW_ITEM_ABOUT, "About Basilisk II" ELLIPSIS}, {STR_WINDOW_ITEM_REFRESH, "Refresh Rate"}, diff --git a/SheepShaver/src/Unix/main_unix.cpp b/SheepShaver/src/Unix/main_unix.cpp index 45d16686..8eb6420a 100755 --- a/SheepShaver/src/Unix/main_unix.cpp +++ b/SheepShaver/src/Unix/main_unix.cpp @@ -941,6 +941,9 @@ int main(int argc, char **argv) // Create area for Mac RAM RAMSize = PrefsFindInt32("ramsize"); + if (RAMSize <= 1000) { + RAMSize *= 1024 * 1024; + } if (RAMSize < 8*1024*1024) { WarningAlert(GetString(STR_SMALL_RAM_WARN)); RAMSize = 8*1024*1024; diff --git a/SheepShaver/src/Windows/main_windows.cpp b/SheepShaver/src/Windows/main_windows.cpp index 4f2a2432..6f20097a 100755 --- a/SheepShaver/src/Windows/main_windows.cpp +++ b/SheepShaver/src/Windows/main_windows.cpp @@ -303,6 +303,9 @@ int main(int argc, char **argv) // Create area for Mac RAM RAMSize = PrefsFindInt32("ramsize"); + if (RAMSize <= 1000) { + RAMSize *= 1024 * 1024; + } if (RAMSize < 8*1024*1024) { WarningAlert(GetString(STR_SMALL_RAM_WARN)); RAMSize = 8*1024*1024; diff --git a/SheepShaver/src/include/user_strings.h b/SheepShaver/src/include/user_strings.h index c0fbb6dc..1813954a 100644 --- a/SheepShaver/src/include/user_strings.h +++ b/SheepShaver/src/include/user_strings.h @@ -167,6 +167,11 @@ enum { STR_WINDOW_TITLE = 4000, STR_WINDOW_TITLE_FROZEN, STR_WINDOW_TITLE_GRABBED, + STR_WINDOW_TITLE_GRABBED0, + STR_WINDOW_TITLE_GRABBED1, + STR_WINDOW_TITLE_GRABBED2, + STR_WINDOW_TITLE_GRABBED3, + STR_WINDOW_TITLE_GRABBED4, STR_WINDOW_MENU = 4050, STR_WINDOW_ITEM_ABOUT, STR_WINDOW_ITEM_REFRESH, diff --git a/SheepShaver/src/prefs_items.cpp b/SheepShaver/src/prefs_items.cpp index c0e7feb1..f4db6031 100644 --- a/SheepShaver/src/prefs_items.cpp +++ b/SheepShaver/src/prefs_items.cpp @@ -59,6 +59,7 @@ prefs_desc common_prefs_items[] = { {"jit68k", TYPE_BOOLEAN, false, "enable 68k DR emulator"}, {"keyboardtype", TYPE_INT32, false, "hardware keyboard type"}, {"hardcursor", TYPE_BOOLEAN, false, "hardware mouse cursor"}, + {"hotkey", TYPE_INT32, false, "hotkey modifier"}, {NULL, TYPE_END, false, NULL} // End of list }; diff --git a/SheepShaver/src/user_strings.cpp b/SheepShaver/src/user_strings.cpp index f4618b55..ee9e1d1c 100644 --- a/SheepShaver/src/user_strings.cpp +++ b/SheepShaver/src/user_strings.cpp @@ -173,6 +173,16 @@ user_string_def common_strings[] = { {STR_WINDOW_TITLE, "SheepShaver"}, {STR_WINDOW_TITLE_FROZEN, "SheepShaver *** FROZEN ***"}, {STR_WINDOW_TITLE_GRABBED, "SheepShaver (mouse grabbed, press Ctrl-F5 to release)"}, + {STR_WINDOW_TITLE_GRABBED0, "SheepShaver (mouse grabbed, press "}, + {STR_WINDOW_TITLE_GRABBED1, "Ctrl-"}, +#ifdef __APPLE__ + {STR_WINDOW_TITLE_GRABBED2, "Opt-"}, + {STR_WINDOW_TITLE_GRABBED3, "Cmd-"}, +#else + {STR_WINDOW_TITLE_GRABBED2, "Alt-"}, + {STR_WINDOW_TITLE_GRABBED3, "Win-"}, +#endif + {STR_WINDOW_TITLE_GRABBED4, "F5 to release)"}, {STR_WINDOW_MENU, "SheepShaver"}, {STR_WINDOW_ITEM_ABOUT, "About SheepShaver" ELLIPSIS}, {STR_WINDOW_ITEM_REFRESH, "Refresh Rate"},