From 929ee5123446d619617929cab1cc74fdfafea071 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Hrdli=C4=8Dka?= Date: Sun, 9 Jan 2022 18:38:18 +0100 Subject: [PATCH 01/22] Add a toolbar to the Windows GUI --- src/include/86box/win.h | 7 +++- src/win/CMakeLists.txt | 2 +- src/win/win.c | 10 +---- src/win/win_specify_dim.c | 2 +- src/win/win_toolbar.c | 85 +++++++++++++++++++++++++++++++++++++++ src/win/win_ui.c | 44 +++++++++++--------- 6 files changed, 119 insertions(+), 31 deletions(-) create mode 100644 src/win/win_toolbar.c diff --git a/src/include/86box/win.h b/src/include/86box/win.h index d776cccdf..6c061ef4a 100644 --- a/src/include/86box/win.h +++ b/src/include/86box/win.h @@ -107,7 +107,7 @@ extern HANDLE ghMutex; extern HICON hIcon[256]; extern int dpi; extern RECT oldclip; -extern int sbar_height, user_resize; +extern int sbar_height, tbar_height, user_resize; extern int acp_utf8; // extern int status_is_open; @@ -213,6 +213,11 @@ extern void StatusBarCreate(HWND hwndParent, uintptr_t idStatus, HINSTANCE hInst extern int MediaMenuHandler(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); +/* Functions in win_toolbar.c */ +extern HWND hwndRebar; +extern void ToolBarCreate(HWND hwndParent, HINSTANCE hInst); + + /* Functions in win_dialog.c: */ /* Pass NULL in the title param to use the default title. */ extern int file_dlg_w(HWND hwnd, WCHAR *f, WCHAR *fn, WCHAR *title, int save); diff --git a/src/win/CMakeLists.txt b/src/win/CMakeLists.txt index 36c3dc9ac..0d1fb00cc 100644 --- a/src/win/CMakeLists.txt +++ b/src/win/CMakeLists.txt @@ -21,7 +21,7 @@ add_library(plat OBJECT win.c win_dynld.c win_cdrom.c win_keyboard.c add_library(ui OBJECT win_ui.c win_icon.c win_stbar.c win_sdl.c win_dialog.c win_about.c win_settings.c win_devconf.c win_snd_gain.c win_specify_dim.c win_new_floppy.c win_jsconf.c win_media_menu.c win_preferences.c win_discord.c glad.c win_opengl.c - win_opengl_glslp.c 86Box.rc) + win_opengl_glslp.c win_toolbar.c 86Box.rc) if(NOT CPPTHREADS) target_sources(plat PRIVATE win_thread.c) diff --git a/src/win/win.c b/src/win/win.c index a4854f65f..7d127efa6 100644 --- a/src/win/win.c +++ b/src/win/win.c @@ -1118,10 +1118,7 @@ plat_setfullscreen(int on) GetClientRect(hwndMain, &rect); temp_x = rect.right - rect.left + 1; - if (hide_status_bar) - temp_y = rect.bottom - rect.top + 1; - else - temp_y = rect.bottom - rect.top + 1 - sbar_height; + temp_y = rect.bottom - rect.top + 1 - (hide_status_bar ? 0 : sbar_height) - (hide_tool_bar ? 0 : tbar_height); } else { if (dpi_scale) { temp_x = MulDiv((vid_resize & 2) ? fixed_size_x : unscaled_size_x, dpi, 96); @@ -1135,10 +1132,7 @@ plat_setfullscreen(int on) if (vid_resize >= 2) MoveWindow(hwndMain, window_x, window_y, window_w, window_h, TRUE); - if (hide_status_bar) - ResizeWindowByClientArea(hwndMain, temp_x, temp_y); - else - ResizeWindowByClientArea(hwndMain, temp_x, temp_y + sbar_height); + ResizeWindowByClientArea(hwndMain, temp_x, temp_y + (hide_status_bar ? 0 : sbar_height) + (hide_tool_bar ? 0 : tbar_height)); } /* Render window. */ diff --git a/src/win/win_specify_dim.c b/src/win/win_specify_dim.c index 96ae0403c..64a95cef4 100644 --- a/src/win/win_specify_dim.c +++ b/src/win/win_specify_dim.c @@ -119,7 +119,7 @@ SpecifyDimensionsDialogProcedure(HWND hdlg, UINT message, WPARAM wParam, LPARAM temp_y = MulDiv(temp_y, dpi, 96); } - ResizeWindowByClientArea(hwndMain, temp_x, temp_y + sbar_height); + ResizeWindowByClientArea(hwndMain, temp_x, temp_y + sbar_height + tbar_height); if (vid_resize) { CheckMenuItem(hmenu, IDM_VID_SCALE_1X + scale, MF_UNCHECKED); diff --git a/src/win/win_toolbar.c b/src/win/win_toolbar.c new file mode 100644 index 000000000..faf9712f8 --- /dev/null +++ b/src/win/win_toolbar.c @@ -0,0 +1,85 @@ +#define UNICODE +#include +#include +#include +#include +#include +#include <86box/86box.h> +#include <86box/resource.h> +#include <86box/ui.h> +#include <86box/win.h> + +HWND hwndRebar; +static HWND hwndToolbar; +static HIMAGELIST hImageList; + +static TBBUTTON buttons[] = { + { 0, IDM_ACTION_PAUSE, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 }, // Pause + { 0, 0, TBSTATE_INDETERMINATE, BTNS_SEP, { 0 }, 0, 0 }, + { 0, IDM_ACTION_RESET_CAD, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 }, // Ctrl+Alt+Del + { 0, IDM_ACTION_CTRL_ALT_ESC, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 }, // Ctrl+Alt+Esc + { 0, IDM_ACTION_HRESET, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 }, // Hard reset + { 0, 0, TBSTATE_INDETERMINATE, BTNS_BUTTON, { 0 }, 0, 0 }, // ACPI shutdown + { 0, 0, TBSTATE_INDETERMINATE, BTNS_SEP, { 0 }, 0, 0 }, + { 0, IDM_CONFIG, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 } // Settings +}; + +void +ToolBarCreate(HWND hwndParent, HINSTANCE hInst) +{ + REBARINFO rbi = { 0 }; + REBARBANDINFO rbbi = { 0 }; + int btnSize; + + // Create the toolbar. + hwndToolbar = CreateWindowEx(WS_EX_PALETTEWINDOW, TOOLBARCLASSNAME, NULL, + WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | + WS_CLIPSIBLINGS | TBSTYLE_TOOLTIPS | + TBSTYLE_FLAT | CCS_TOP | BTNS_AUTOSIZE | + CCS_NOPARENTALIGN | CCS_NORESIZE | + CCS_NODIVIDER, + 0, 0, 0, 0, + hwndParent, NULL, hInst, NULL); + + // Create the image list. + hImageList = ImageList_Create(win_get_system_metrics(SM_CXSMICON, dpi), + win_get_system_metrics(SM_CYSMICON, dpi), + ILC_MASK | ILC_COLOR32, 1, 1); + + ImageList_AddIcon(hImageList, hIcon[241]); + + SendMessage(hwndToolbar, TB_SETIMAGELIST, 0, (LPARAM) hImageList); + + // Add buttons. + SendMessage(hwndToolbar, TB_BUTTONSTRUCTSIZE, sizeof(TBBUTTON), 0); + SendMessage(hwndToolbar, TB_ADDBUTTONS, sizeof(buttons) / sizeof(TBBUTTON), (LPARAM) &buttons); + + // Autosize the toolbar and determine its size. + btnSize = LOWORD(SendMessage(hwndToolbar, TB_GETBUTTONSIZE, 0,0)); + + // Create the containing Rebar. + hwndRebar = CreateWindowEx(0, REBARCLASSNAME, NULL, + WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | + WS_CLIPCHILDREN | RBS_VARHEIGHT | + RBS_BANDBORDERS | CCS_NODIVIDER | + CCS_NOPARENTALIGN, + 0, 0, 0, 0, + hwndParent, NULL, hInst, NULL); + + // Create and send the REBARINFO structure. + rbi.cbSize = sizeof(rbi); + SendMessage(hwndRebar, RB_SETBARINFO, 0, (LPARAM)&rbi); + + // Add the toolbar to the rebar. + rbbi.cbSize = sizeof(rbbi); + rbbi.fMask = RBBIM_CHILD | RBBIM_CHILDSIZE; + rbbi.hwndChild = hwndToolbar; + rbbi.cxMinChild = 0; + rbbi.cyMinChild = btnSize; + SendMessage(hwndRebar, RB_INSERTBAND, -1, (LPARAM)&rbbi); + SendMessage(hwndRebar, RB_MAXIMIZEBAND, 0, 0); + + ShowWindow(hwndRebar, TRUE); + + return; +} \ No newline at end of file diff --git a/src/win/win_ui.c b/src/win/win_ui.c index f866ed5bf..362ab3343 100644 --- a/src/win/win_ui.c +++ b/src/win/win_ui.c @@ -58,6 +58,7 @@ HWND hwndMain = NULL, /* application main window */ HMENU menuMain; /* application main menu */ RECT oldclip; /* mouse rect */ int sbar_height = 23; /* statusbar height */ +int tbar_height = 23; /* toolbar height */ int minimized = 0; int infocus = 1, button_down = 0; int rctrl_is_lalt = 0; @@ -658,10 +659,7 @@ MainWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) temp_y = unscaled_size_y; } - if (hide_status_bar) - ResizeWindowByClientArea(hwnd, temp_x, temp_y); - else - ResizeWindowByClientArea(hwnd, temp_x, temp_y + sbar_height); + ResizeWindowByClientArea(hwnd, temp_x, temp_y + (hide_status_bar ? 0 : sbar_height) + (hide_tool_bar ? 0 : tbar_height)); if (mouse_capture) { ClipCursor(&rect); @@ -939,6 +937,8 @@ MainWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) dpi = HIWORD(wParam); GetWindowRect(hwndSBAR, &rect); sbar_height = rect.bottom - rect.top; + GetWindowRect(hwndRebar, &rect); + tbar_height = rect.bottom - rect.top; rect_p = (RECT*)lParam; if (vid_resize == 1) MoveWindow(hwnd, rect_p->left, rect_p->top, rect_p->right - rect_p->left, rect_p->bottom - rect_p->top, TRUE); @@ -951,10 +951,7 @@ MainWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) } /* Main Window. */ - if (hide_status_bar) - ResizeWindowByClientArea(hwndMain, temp_x, temp_y); - else - ResizeWindowByClientArea(hwndMain, temp_x, temp_y + sbar_height); + ResizeWindowByClientArea(hwndMain, temp_x, temp_y + (hide_status_bar ? 0 : sbar_height) + (hide_tool_bar ? 0 : tbar_height)); } else if (!user_resize) atomic_flag_clear(&doresize); break; @@ -986,12 +983,13 @@ MainWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) if (!(pos->flags & SWP_NOSIZE) || !user_resize) { plat_vidapi_enable(0); - if (hide_status_bar) - MoveWindow(hwndRender, 0, 0, rect.right, rect.bottom, TRUE); - else { + if (!hide_status_bar) MoveWindow(hwndSBAR, 0, rect.bottom - sbar_height, sbar_height, rect.right, TRUE); - MoveWindow(hwndRender, 0, 0, rect.right, rect.bottom - sbar_height, TRUE); - } + + if (!hide_tool_bar) + MoveWindow(hwndRebar, 0, 0, rect.right, tbar_height, TRUE); + + MoveWindow(hwndRender, 0, hide_tool_bar ? 0 : tbar_height, rect.right, rect.bottom - (hide_status_bar ? 0 : sbar_height) - (hide_tool_bar ? 0 : tbar_height), TRUE); GetClientRect(hwndRender, &rect); if (dpi_scale) { @@ -1244,7 +1242,7 @@ ui_init(int nCmdShow) MSG messages = {0}; /* received-messages buffer */ HWND hwnd = NULL; /* handle for our window */ HACCEL haccel; /* handle to accelerator table */ - RECT sbar_rect; /* RECT of the status bar */ + RECT rect; int bRet; TASKDIALOGCONFIG tdconfig = {0}; TASKDIALOG_BUTTON tdbuttons[] = {{IDCANCEL, MAKEINTRESOURCE(IDS_2119)}}; @@ -1358,11 +1356,20 @@ ui_init(int nCmdShow) StatusBarCreate(hwndMain, IDC_STATUS, hinstance); /* Get the actual height of the status bar */ - GetWindowRect(hwndSBAR, &sbar_rect); - sbar_height = sbar_rect.bottom - sbar_rect.top; + GetWindowRect(hwndSBAR, &rect); + sbar_height = rect.bottom - rect.top; if (hide_status_bar) ShowWindow(hwndSBAR, SW_HIDE); + /* Create the toolbar window. */ + ToolBarCreate(hwndMain, hinstance); + + /* Get the actual height of the toolbar */ + GetWindowRect(hwndRebar, &rect); + tbar_height = rect.bottom - rect.top; + if (hide_tool_bar) + ShowWindow(hwndRebar, SW_HIDE); + /* Set up main window for resizing if configured. */ if (vid_resize == 1) SetWindowLongPtr(hwnd, GWL_STYLE, @@ -1632,10 +1639,7 @@ plat_resize(int x, int y) x = MulDiv(x, dpi, 96); y = MulDiv(y, dpi, 96); } - if (hide_status_bar) - ResizeWindowByClientArea(hwndMain, x, y); - else - ResizeWindowByClientArea(hwndMain, x, y + sbar_height); + ResizeWindowByClientArea(hwndMain, x, y + (hide_status_bar ? 0 : sbar_height) + (hide_tool_bar ? 0 : tbar_height)); } } From e5b56e882096c0cd6256ce8c0948b8f389078fbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Hrdli=C4=8Dka?= Date: Sun, 9 Jan 2022 19:12:08 +0100 Subject: [PATCH 02/22] Move machine information to the toolbar --- src/win/win_toolbar.c | 40 +++++++++++++++++++++++++++++++++++----- src/win/win_ui.c | 22 +--------------------- 2 files changed, 36 insertions(+), 26 deletions(-) diff --git a/src/win/win_toolbar.c b/src/win/win_toolbar.c index faf9712f8..e2addf3e5 100644 --- a/src/win/win_toolbar.c +++ b/src/win/win_toolbar.c @@ -5,6 +5,7 @@ #include #include #include <86box/86box.h> +#include <86box/plat.h> #include <86box/resource.h> #include <86box/ui.h> #include <86box/win.h> @@ -12,6 +13,7 @@ HWND hwndRebar; static HWND hwndToolbar; static HIMAGELIST hImageList; +static wchar_t wTitle[512]; static TBBUTTON buttons[] = { { 0, IDM_ACTION_PAUSE, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 }, // Pause @@ -61,8 +63,7 @@ ToolBarCreate(HWND hwndParent, HINSTANCE hInst) hwndRebar = CreateWindowEx(0, REBARCLASSNAME, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | RBS_VARHEIGHT | - RBS_BANDBORDERS | CCS_NODIVIDER | - CCS_NOPARENTALIGN, + CCS_NODIVIDER | CCS_NOPARENTALIGN, 0, 0, 0, 0, hwndParent, NULL, hInst, NULL); @@ -72,14 +73,43 @@ ToolBarCreate(HWND hwndParent, HINSTANCE hInst) // Add the toolbar to the rebar. rbbi.cbSize = sizeof(rbbi); - rbbi.fMask = RBBIM_CHILD | RBBIM_CHILDSIZE; + rbbi.fMask = RBBIM_CHILD | RBBIM_CHILDSIZE | RBBIM_STYLE; rbbi.hwndChild = hwndToolbar; rbbi.cxMinChild = 0; rbbi.cyMinChild = btnSize; + rbbi.fStyle = RBBS_NOGRIPPER; SendMessage(hwndRebar, RB_INSERTBAND, -1, (LPARAM)&rbbi); - SendMessage(hwndRebar, RB_MAXIMIZEBAND, 0, 0); + // Add a label for machine information. + rbbi.fMask = RBBIM_TEXT | RBBIM_STYLE; + rbbi.lpText = TEXT("Test"); + rbbi.fStyle = RBBS_NOGRIPPER; + SendMessage(hwndRebar, RB_INSERTBAND, -1, (LPARAM)&rbbi); + + SendMessage(hwndRebar, RB_MAXIMIZEBAND, 0, 0); ShowWindow(hwndRebar, TRUE); return; -} \ No newline at end of file +} + +wchar_t * +ui_window_title(wchar_t *s) +{ + REBARBANDINFO rbbi = { 0 }; + if (! video_fullscreen) { + if (s != NULL) { + wcsncpy(wTitle, s, sizeof_w(wTitle) - 1); + } else + s = wTitle; + + rbbi.cbSize = sizeof(rbbi); + rbbi.fMask = RBBIM_TEXT; + rbbi.lpText = s; + SendMessage(hwndRebar, RB_SETBANDINFO, 1, (LPARAM) &rbbi); + } else { + if (s == NULL) + s = wTitle; + } + + return(s); +} diff --git a/src/win/win_ui.c b/src/win/win_ui.c index 362ab3343..95061cbf6 100644 --- a/src/win/win_ui.c +++ b/src/win/win_ui.c @@ -74,7 +74,6 @@ extern WCHAR wopenfilestring[512]; /* Local data. */ -static wchar_t wTitle[512]; static int manager_wm = 0; static int save_window_pos = 0, pause_state = 0; static int padded_frame = 0; @@ -1328,7 +1327,7 @@ ui_init(int nCmdShow) return(2); /* Now create our main window. */ - mbstowcs(title, emu_version, sizeof_w(title)); + swprintf_s(title, sizeof_w(title), L"%hs - %hs", vm_name, EMU_NAME); hwnd = CreateWindowEx ( 0, /* no extended possibilites */ CLASS_NAME, /* class name */ @@ -1560,25 +1559,6 @@ ui_init(int nCmdShow) } -wchar_t * -ui_window_title(wchar_t *s) -{ - if (! video_fullscreen) { - if (s != NULL) { - wcsncpy(wTitle, s, sizeof_w(wTitle) - 1); - } else - s = wTitle; - - SetWindowText(hwndMain, s); - } else { - if (s == NULL) - s = wTitle; - } - - return(s); -} - - /* We should have the language ID as a parameter. */ void plat_pause(int p) From b1664a258d8830ca115bd081e2791f9fdc6cd631 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Hrdli=C4=8Dka?= Date: Sun, 9 Jan 2022 19:56:53 +0100 Subject: [PATCH 03/22] Fix blank space between toolbar and render area --- src/win/win_toolbar.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/win/win_toolbar.c b/src/win/win_toolbar.c index e2addf3e5..7a4d75011 100644 --- a/src/win/win_toolbar.c +++ b/src/win/win_toolbar.c @@ -64,7 +64,7 @@ ToolBarCreate(HWND hwndParent, HINSTANCE hInst) WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | RBS_VARHEIGHT | CCS_NODIVIDER | CCS_NOPARENTALIGN, - 0, 0, 0, 0, + 0, 0, scrnsz_x, 0, hwndParent, NULL, hInst, NULL); // Create and send the REBARINFO structure. From 9abdb1e048f09332a08b095e9e16004db8c91a11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Hrdli=C4=8Dka?= Date: Sun, 9 Jan 2022 19:58:06 +0100 Subject: [PATCH 04/22] Add the toolbar code to the MinGW makefile --- src/win/Makefile.mingw | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/win/Makefile.mingw b/src/win/Makefile.mingw index 303e13961..de29effc5 100644 --- a/src/win/Makefile.mingw +++ b/src/win/Makefile.mingw @@ -691,7 +691,7 @@ UIOBJ := win_ui.o win_icon.o win_stbar.o win_discord.o \ win_dialog.o win_about.o \ win_settings.o win_devconf.o win_snd_gain.o win_specify_dim.o win_preferences.o \ win_new_floppy.o win_jsconf.o \ - win_media_menu.o + win_media_menu.o win_toolbar.o ifeq ($(DINPUT), y) PLATOBJ += win_joystick.o From a284ddd45bab70fb20c79c076a8c8d9dfd170aa7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Hrdli=C4=8Dka?= Date: Mon, 10 Jan 2022 01:20:21 +0100 Subject: [PATCH 05/22] Reduce the status message to speed and mouse capture --- src/86box.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/86box.c b/src/86box.c index 393ce90af..0970a6cb6 100644 --- a/src/86box.c +++ b/src/86box.c @@ -1068,7 +1068,13 @@ void update_mouse_msg() if (wcp) /* remove parentheses */ *(wcp - 1) = L'\0'; mbstowcs(wcpu, cpu_s->name, strlen(cpu_s->name)+1); - +#ifdef _WIN32 + swprintf(mouse_msg[0], sizeof_w(mouse_msg[0]), L"%%i%%%% - %ls", + plat_get_string(IDS_2077)); + swprintf(mouse_msg[1], sizeof_w(mouse_msg[1]), L"%%i%%%% - %ls", + (mouse_get_buttons() > 2) ? plat_get_string(IDS_2078) : plat_get_string(IDS_2079)); + wcsncpy(mouse_msg[2], L"%i%%", sizeof_w(mouse_msg[2])); +#else swprintf(mouse_msg[0], sizeof_w(mouse_msg[0]), L"%ls v%ls - %%i%%%% - %ls - %ls/%ls - %ls", EMU_NAME_W, EMU_VERSION_FULL_W, wmachine, wcpufamily, wcpu, plat_get_string(IDS_2077)); @@ -1077,6 +1083,7 @@ void update_mouse_msg() (mouse_get_buttons() > 2) ? plat_get_string(IDS_2078) : plat_get_string(IDS_2079)); swprintf(mouse_msg[2], sizeof_w(mouse_msg[2]), L"%ls v%ls - %%i%%%% - %ls - %ls/%ls", EMU_NAME_W, EMU_VERSION_FULL_W, wmachine, wcpufamily, wcpu); +#endif } void From 529889d21ea6038e94da019c4356ac0f7bc673c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Hrdli=C4=8Dka?= Date: Mon, 10 Jan 2022 01:25:35 +0100 Subject: [PATCH 06/22] Show full version string in the title bar --- src/win/win_ui.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/win/win_ui.c b/src/win/win_ui.c index 17005ca7c..863701b2d 100644 --- a/src/win/win_ui.c +++ b/src/win/win_ui.c @@ -1328,7 +1328,7 @@ ui_init(int nCmdShow) return(2); /* Now create our main window. */ - swprintf_s(title, sizeof_w(title), L"%hs - %hs", vm_name, EMU_NAME); + swprintf_s(title, sizeof_w(title), L"%hs - %s %s", vm_name, EMU_NAME_W, EMU_VERSION_FULL_W); hwnd = CreateWindowEx ( 0, /* no extended possibilites */ CLASS_NAME, /* class name */ From 513100b7206abb4619a885602b622b01fcefb6ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Hrdli=C4=8Dka?= Date: Mon, 10 Jan 2022 01:49:00 +0100 Subject: [PATCH 07/22] Add a menu option to hide the toolbar --- src/include/86box/resource.h | 1 + src/win/languages/cs-CZ.rc | 1 + src/win/languages/de-DE.rc | 1 + src/win/languages/en-GB.rc | 1 + src/win/languages/en-US.rc | 1 + src/win/languages/es-ES.rc | 1 + src/win/languages/fi-FI.rc | 1 + src/win/languages/fr-FR.rc | 1 + src/win/languages/hr-HR.rc | 1 + src/win/languages/hu-HU.rc | 1 + src/win/languages/it-IT.rc | 1 + src/win/languages/ja-JP.rc | 1 + src/win/languages/ko-KR.rc | 1 + src/win/languages/pt-BR.rc | 1 + src/win/languages/pt-PT.rc | 1 + src/win/languages/ru-RU.rc | 1 + src/win/languages/sl-SI.rc | 1 + src/win/languages/tr-TR.rc | 1 + src/win/languages/zh-CN.rc | 1 + src/win/win_ui.c | 17 +++++++++++++++++ 20 files changed, 36 insertions(+) diff --git a/src/include/86box/resource.h b/src/include/86box/resource.h index b5a67b85b..f35be6465 100644 --- a/src/include/86box/resource.h +++ b/src/include/86box/resource.h @@ -313,6 +313,7 @@ #endif #define IDM_CONFIG 40020 #define IDM_VID_HIDE_STATUS_BAR 40021 +#define IDM_VID_HIDE_TOOLBAR 40022 #define IDM_UPDATE_ICONS 40030 #define IDM_SND_GAIN 40031 #define IDM_VID_RESIZE 40040 diff --git a/src/win/languages/cs-CZ.rc b/src/win/languages/cs-CZ.rc index b63d8a176..d9f392cc9 100644 --- a/src/win/languages/cs-CZ.rc +++ b/src/win/languages/cs-CZ.rc @@ -32,6 +32,7 @@ BEGIN POPUP "&Zobrazení" BEGIN MENUITEM "&Schovat stavový řádek", IDM_VID_HIDE_STATUS_BAR + MENUITEM "Schovat panel &nástrojů", IDM_VID_HIDE_TOOLBAR MENUITEM SEPARATOR MENUITEM "&Měnitelná velikost okna", IDM_VID_RESIZE MENUITEM "&Pamatovat velikost a pozici", IDM_VID_REMEMBER diff --git a/src/win/languages/de-DE.rc b/src/win/languages/de-DE.rc index 5a5ca5914..38a562cd5 100644 --- a/src/win/languages/de-DE.rc +++ b/src/win/languages/de-DE.rc @@ -32,6 +32,7 @@ BEGIN POPUP "&Ansicht" BEGIN MENUITEM "&Statusleiste ausblenden", IDM_VID_HIDE_STATUS_BAR + MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR MENUITEM SEPARATOR MENUITEM "&Größenverstellbares Fenster", IDM_VID_RESIZE MENUITEM "&Größe && Position merken", IDM_VID_REMEMBER diff --git a/src/win/languages/en-GB.rc b/src/win/languages/en-GB.rc index 61749d954..939d96f5c 100644 --- a/src/win/languages/en-GB.rc +++ b/src/win/languages/en-GB.rc @@ -32,6 +32,7 @@ BEGIN POPUP "&View" BEGIN MENUITEM "&Hide status bar", IDM_VID_HIDE_STATUS_BAR + MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR MENUITEM SEPARATOR MENUITEM "&Resizeable window", IDM_VID_RESIZE MENUITEM "R&emember size && position", IDM_VID_REMEMBER diff --git a/src/win/languages/en-US.rc b/src/win/languages/en-US.rc index 3bee70556..c010e9a90 100644 --- a/src/win/languages/en-US.rc +++ b/src/win/languages/en-US.rc @@ -32,6 +32,7 @@ BEGIN POPUP "&View" BEGIN MENUITEM "&Hide status bar", IDM_VID_HIDE_STATUS_BAR + MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR MENUITEM SEPARATOR MENUITEM "&Resizeable window", IDM_VID_RESIZE MENUITEM "R&emember size && position", IDM_VID_REMEMBER diff --git a/src/win/languages/es-ES.rc b/src/win/languages/es-ES.rc index 2232e69c5..44fadfc6e 100644 --- a/src/win/languages/es-ES.rc +++ b/src/win/languages/es-ES.rc @@ -32,6 +32,7 @@ BEGIN POPUP "&Vista" BEGIN MENUITEM "&Ocultar barra de estado", IDM_VID_HIDE_STATUS_BAR + MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR MENUITEM SEPARATOR MENUITEM "&Ventana redimensionable", IDM_VID_RESIZE MENUITEM "&Recordar tamaño y posición", IDM_VID_REMEMBER diff --git a/src/win/languages/fi-FI.rc b/src/win/languages/fi-FI.rc index 56430464d..bedc9d3f7 100644 --- a/src/win/languages/fi-FI.rc +++ b/src/win/languages/fi-FI.rc @@ -32,6 +32,7 @@ BEGIN POPUP "&Näytä" BEGIN MENUITEM "&Piilota tilapalkki", IDM_VID_HIDE_STATUS_BAR + MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR MENUITEM SEPARATOR MENUITEM "&Salli koon muuttaminen", IDM_VID_RESIZE MENUITEM "&Muista koko ja sijainti", IDM_VID_REMEMBER diff --git a/src/win/languages/fr-FR.rc b/src/win/languages/fr-FR.rc index 6b58bd593..a59c78dab 100644 --- a/src/win/languages/fr-FR.rc +++ b/src/win/languages/fr-FR.rc @@ -32,6 +32,7 @@ BEGIN POPUP "&Vue" BEGIN MENUITEM "&Masquer la barre de status", IDM_VID_HIDE_STATUS_BAR + MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR MENUITEM SEPARATOR MENUITEM "Fenètre &Retaillable", IDM_VID_RESIZE MENUITEM "S&auvegarder taille && position", IDM_VID_REMEMBER diff --git a/src/win/languages/hr-HR.rc b/src/win/languages/hr-HR.rc index 61fc0c475..ba384f5a6 100644 --- a/src/win/languages/hr-HR.rc +++ b/src/win/languages/hr-HR.rc @@ -32,6 +32,7 @@ BEGIN POPUP "&Pogled" BEGIN MENUITEM "&Sakrij statusni redak", IDM_VID_HIDE_STATUS_BAR + MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR MENUITEM SEPARATOR MENUITEM "&Prozor s promjenjivim veličinama", IDM_VID_RESIZE MENUITEM "&Zapamtite veličinu i položaj", IDM_VID_REMEMBER diff --git a/src/win/languages/hu-HU.rc b/src/win/languages/hu-HU.rc index 731ef0e42..1b7dfbe43 100644 --- a/src/win/languages/hu-HU.rc +++ b/src/win/languages/hu-HU.rc @@ -35,6 +35,7 @@ BEGIN POPUP "&Nézet" BEGIN MENUITEM "Állapotsor &elrejtése", IDM_VID_HIDE_STATUS_BAR + MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR MENUITEM SEPARATOR MENUITEM "&Átméretezhető ablak", IDM_VID_RESIZE MENUITEM "Méret és pozíció &megjegyzése", IDM_VID_REMEMBER diff --git a/src/win/languages/it-IT.rc b/src/win/languages/it-IT.rc index 461b76e71..2656a2d5d 100644 --- a/src/win/languages/it-IT.rc +++ b/src/win/languages/it-IT.rc @@ -32,6 +32,7 @@ BEGIN POPUP "&Visualizza" BEGIN MENUITEM "&Nascondi barra di stato", IDM_VID_HIDE_STATUS_BAR + MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR MENUITEM SEPARATOR MENUITEM "&Finestra ridimensionabile", IDM_VID_RESIZE MENUITEM "R&icorda dimensioni e posizione", IDM_VID_REMEMBER diff --git a/src/win/languages/ja-JP.rc b/src/win/languages/ja-JP.rc index e88e1822c..c74b99d81 100644 --- a/src/win/languages/ja-JP.rc +++ b/src/win/languages/ja-JP.rc @@ -32,6 +32,7 @@ BEGIN POPUP "表示(&V)" BEGIN MENUITEM "ステータスバーを隠す(&H)", IDM_VID_HIDE_STATUS_BAR + MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR MENUITEM SEPARATOR MENUITEM "ウィンドウのサイズを変更可能にする(&R)", IDM_VID_RESIZE MENUITEM "ウィンドウのサイズと位置を記憶する(&E)", IDM_VID_REMEMBER diff --git a/src/win/languages/ko-KR.rc b/src/win/languages/ko-KR.rc index a46c8f6d7..510bc8c60 100644 --- a/src/win/languages/ko-KR.rc +++ b/src/win/languages/ko-KR.rc @@ -32,6 +32,7 @@ BEGIN POPUP "표시(&V)" BEGIN MENUITEM "상태 바 숨기기(&H)", IDM_VID_HIDE_STATUS_BAR + MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR MENUITEM SEPARATOR MENUITEM "창 크기 조절 가능하게 하기(&R)", IDM_VID_RESIZE MENUITEM "창 크기와 위치를 기억하기(&E)", IDM_VID_REMEMBER diff --git a/src/win/languages/pt-BR.rc b/src/win/languages/pt-BR.rc index 06a000458..58ae5f6b4 100644 --- a/src/win/languages/pt-BR.rc +++ b/src/win/languages/pt-BR.rc @@ -35,6 +35,7 @@ BEGIN POPUP "&Exibir" BEGIN MENUITEM "&Ocultar barra de status", IDM_VID_HIDE_STATUS_BAR + MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR MENUITEM SEPARATOR MENUITEM "&Janela redimensionável", IDM_VID_RESIZE MENUITEM "&Lembrar tamanho e posição", IDM_VID_REMEMBER diff --git a/src/win/languages/pt-PT.rc b/src/win/languages/pt-PT.rc index a424ad141..c30f6d50d 100644 --- a/src/win/languages/pt-PT.rc +++ b/src/win/languages/pt-PT.rc @@ -32,6 +32,7 @@ BEGIN POPUP "&Ver" BEGIN MENUITEM "&Ocultar barra de estado", IDM_VID_HIDE_STATUS_BAR + MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR MENUITEM SEPARATOR MENUITEM "&Janela redimensionável", IDM_VID_RESIZE MENUITEM "&Lembrar tamanho e posição", IDM_VID_REMEMBER diff --git a/src/win/languages/ru-RU.rc b/src/win/languages/ru-RU.rc index 413b0c5f3..72b4e7e66 100644 --- a/src/win/languages/ru-RU.rc +++ b/src/win/languages/ru-RU.rc @@ -32,6 +32,7 @@ BEGIN POPUP "&Вид" BEGIN MENUITEM "&Скрыть строку статуса", IDM_VID_HIDE_STATUS_BAR + MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR MENUITEM SEPARATOR MENUITEM "&Изменяемый размер окна", IDM_VID_RESIZE MENUITEM "&Запомнить размер и положение", IDM_VID_REMEMBER diff --git a/src/win/languages/sl-SI.rc b/src/win/languages/sl-SI.rc index fb1c80b8b..815c08603 100644 --- a/src/win/languages/sl-SI.rc +++ b/src/win/languages/sl-SI.rc @@ -32,6 +32,7 @@ BEGIN POPUP "&Pogled" BEGIN MENUITEM "&Skrij statusno vrstico", IDM_VID_HIDE_STATUS_BAR + MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR MENUITEM SEPARATOR MENUITEM "S&premenljiva velikost okna", IDM_VID_RESIZE MENUITEM "&Zapomni si velikost in položaj", IDM_VID_REMEMBER diff --git a/src/win/languages/tr-TR.rc b/src/win/languages/tr-TR.rc index 5d2ef2c50..91ee1480e 100644 --- a/src/win/languages/tr-TR.rc +++ b/src/win/languages/tr-TR.rc @@ -32,6 +32,7 @@ BEGIN POPUP "&Görüntüleme" BEGIN MENUITEM "&Durum çubuğunu gizle", IDM_VID_HIDE_STATUS_BAR + MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR MENUITEM SEPARATOR MENUITEM "&Yeniden boyutlandırılabilir pencere", IDM_VID_RESIZE MENUITEM "&Pencere boyut ve pozisyonunu hatırla", IDM_VID_REMEMBER diff --git a/src/win/languages/zh-CN.rc b/src/win/languages/zh-CN.rc index 37c5621ab..628ce1210 100644 --- a/src/win/languages/zh-CN.rc +++ b/src/win/languages/zh-CN.rc @@ -32,6 +32,7 @@ BEGIN POPUP "查看(&V)" BEGIN MENUITEM "隐藏状态栏(&H)", IDM_VID_HIDE_STATUS_BAR + MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR MENUITEM SEPARATOR MENUITEM "窗口大小可调(&R)", IDM_VID_RESIZE MENUITEM "记住窗口大小和位置(&E)", IDM_VID_REMEMBER diff --git a/src/win/win_ui.c b/src/win/win_ui.c index 863701b2d..63b3c64b8 100644 --- a/src/win/win_ui.c +++ b/src/win/win_ui.c @@ -276,6 +276,7 @@ ResetAllMenus(void) #endif CheckMenuItem(menuMain, IDM_VID_HIDE_STATUS_BAR, MF_UNCHECKED); + CheckMenuItem(menuMain, IDM_VID_HIDE_TOOLBAR, MF_UNCHECKED); CheckMenuItem(menuMain, IDM_VID_FORCE43, MF_UNCHECKED); CheckMenuItem(menuMain, IDM_VID_OVERSCAN, MF_UNCHECKED); CheckMenuItem(menuMain, IDM_VID_INVERT, MF_UNCHECKED); @@ -344,6 +345,7 @@ ResetAllMenus(void) #endif CheckMenuItem(menuMain, IDM_VID_HIDE_STATUS_BAR, hide_status_bar ? MF_CHECKED : MF_UNCHECKED); + CheckMenuItem(menuMain, IDM_VID_HIDE_TOOLBAR, hide_tool_bar ? MF_CHECKED : MF_UNCHECKED); CheckMenuItem(menuMain, IDM_VID_FORCE43, force_43?MF_CHECKED:MF_UNCHECKED); CheckMenuItem(menuMain, IDM_VID_OVERSCAN, enable_overscan?MF_CHECKED:MF_UNCHECKED); CheckMenuItem(menuMain, IDM_VID_INVERT, invert_display ? MF_CHECKED : MF_UNCHECKED); @@ -641,6 +643,21 @@ MainWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) config_save(); break; + case IDM_VID_HIDE_TOOLBAR: + hide_tool_bar ^= 1; + CheckMenuItem(hmenu, IDM_VID_HIDE_TOOLBAR, hide_tool_bar ? MF_CHECKED : MF_UNCHECKED); + ShowWindow(hwndRebar, hide_tool_bar ? SW_HIDE : SW_SHOW); + GetWindowRect(hwnd, &rect); + if (hide_tool_bar) { + MoveWindow(hwnd, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top - tbar_height, TRUE); + SetWindowPos(hwndRender, NULL, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE); + } else { + MoveWindow(hwnd, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top + tbar_height, TRUE); + SetWindowPos(hwndRender, NULL, 0, tbar_height, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE); + } + config_save(); + break; + case IDM_VID_RESIZE: vid_resize ^= 1; CheckMenuItem(hmenu, IDM_VID_RESIZE, (vid_resize & 1) ? MF_CHECKED : MF_UNCHECKED); From 3198a844b0cc425c8882eee303fd5ebd0c95d9c1 Mon Sep 17 00:00:00 2001 From: altiereslima Date: Mon, 10 Jan 2022 20:55:12 -0300 Subject: [PATCH 08/22] Update pt-BR.rc --- src/win/languages/pt-BR.rc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/win/languages/pt-BR.rc b/src/win/languages/pt-BR.rc index 06a000458..645587d99 100644 --- a/src/win/languages/pt-BR.rc +++ b/src/win/languages/pt-BR.rc @@ -478,7 +478,7 @@ BEGIN IDS_2115 "Magneto-óptico %i (%ls): %ls" IDS_2116 "Imagens magneto-ópticas (*.IM?;*.MDI)\0*.IM?;*.MDI\0Todos os arquivos (*.*)\0*.*\0" IDS_2117 "Bem-vindo ao 86Box!" - IDS_2118 "Controle interno" + IDS_2118 "Controlador interno" IDS_2119 "Sair" IDS_2120 "Nenhum ROM encontrada" IDS_2121 "Você deseja salvar as configurações?" From be76456921299d414f3bb1776b18c09b74e9ead6 Mon Sep 17 00:00:00 2001 From: altiereslima Date: Mon, 10 Jan 2022 21:05:09 -0300 Subject: [PATCH 09/22] Update pt-BR.rc --- src/win/languages/pt-BR.rc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/win/languages/pt-BR.rc b/src/win/languages/pt-BR.rc index 645587d99..2e64edef4 100644 --- a/src/win/languages/pt-BR.rc +++ b/src/win/languages/pt-BR.rc @@ -368,7 +368,7 @@ END #define STR_SIZE_MB "Tamanho (MB):" #define STR_TYPE "Tipo:" #define STR_IMG_FORMAT "Formato:" -#define STR_BLOCK_SIZE "Tamanho do bloco:" +#define STR_BLOCK_SIZE "Bloco:" #define STR_FLOPPY_DRIVES "Unidades de disquete:" #define STR_TURBO "Turbo" From 3be3acf78fd4c4513f6296b78fd83406ece91610 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Tue, 11 Jan 2022 08:04:56 +0200 Subject: [PATCH 10/22] Fix opengl core renderer message pump --- src/win/win_opengl.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/win/win_opengl.c b/src/win/win_opengl.c index 4f328c097..228cbb56f 100644 --- a/src/win/win_opengl.c +++ b/src/win/win_opengl.c @@ -200,8 +200,9 @@ static void set_parent_binding(int enable) * @param wParam * @param lParam * @param fullscreen + * @return Was message handled */ -static void handle_window_messages(UINT message, WPARAM wParam, LPARAM lParam, int fullscreen) +static int handle_window_messages(UINT message, WPARAM wParam, LPARAM lParam, int fullscreen) { switch (message) { @@ -219,7 +220,7 @@ static void handle_window_messages(UINT message, WPARAM wParam, LPARAM lParam, i /* Mouse events that enter and exit capture. */ PostMessage(parent, message, wParam, lParam); } - break; + return 1; case WM_KEYDOWN: case WM_KEYUP: case WM_SYSKEYDOWN: @@ -228,7 +229,7 @@ static void handle_window_messages(UINT message, WPARAM wParam, LPARAM lParam, i { PostMessage(parent, message, wParam, lParam); } - break; + return 1; case WM_INPUT: if (fullscreen) { @@ -256,8 +257,10 @@ static void handle_window_messages(UINT message, WPARAM wParam, LPARAM lParam, i } free(raw); } - break; + return 1; } + + return 0; } /** @@ -638,12 +641,13 @@ static void opengl_main(void* param) /* Handle window messages */ MSG msg; - if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) + while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { - if (msg.hwnd == window_hwnd) - handle_window_messages(msg.message, msg.wParam, msg.lParam, fullscreen); - TranslateMessage(&msg); - DispatchMessage(&msg); + if (msg.hwnd != window_hwnd || !handle_window_messages(msg.message, msg.wParam, msg.lParam, fullscreen)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } } /* Wait for synchronized events for 1ms before going back to window events */ From b13c14b039aff89ef503dbab30a8148256b6c04f Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Wed, 12 Jan 2022 19:39:17 +0200 Subject: [PATCH 11/22] Exit full screen mode if changing window with alt-tab etc. unintended way. --- src/win/win_opengl.c | 14 ++++++++++++++ src/win/win_ui.c | 10 ++++++++++ 2 files changed, 24 insertions(+) diff --git a/src/win/win_opengl.c b/src/win/win_opengl.c index 228cbb56f..99843cd9f 100644 --- a/src/win/win_opengl.c +++ b/src/win/win_opengl.c @@ -258,6 +258,13 @@ static int handle_window_messages(UINT message, WPARAM wParam, LPARAM lParam, in free(raw); } return 1; + case WM_MOUSELEAVE: + if (fullscreen) + { + /* Leave fullscreen if mouse leaves the renderer window. */ + PostMessage(GetAncestor(parent, GA_ROOT), WM_LEAVEFULLSCREEN, 0, 0); + } + return 0; } return 0; @@ -726,7 +733,14 @@ static void opengl_main(void* param) { SetForegroundWindow(window_hwnd); SetFocus(window_hwnd); + + /* Clip cursor to prevent it moving to another monitor. */ + RECT rect; + GetWindowRect(window_hwnd, &rect); + ClipCursor(&rect); } + else + ClipCursor(NULL); } if (fullscreen) diff --git a/src/win/win_ui.c b/src/win/win_ui.c index 97084858c..c2740f0c7 100644 --- a/src/win/win_ui.c +++ b/src/win/win_ui.c @@ -961,6 +961,9 @@ MainWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) break; case WM_WINDOWPOSCHANGED: + if (video_fullscreen & 1) + PostMessage(hwndMain, WM_LEAVEFULLSCREEN, 0, 0); + pos = (WINDOWPOS*)lParam; GetClientRect(hwndMain, &rect); @@ -1160,6 +1163,13 @@ MainWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) } break; + case WM_ACTIVATEAPP: + /* Leave full screen on switching application except + for OpenGL Core and VNC renderers. */ + if (video_fullscreen & 1 && wParam == FALSE && vid_api < 3) + PostMessage(hwndMain, WM_LEAVEFULLSCREEN, 0, 0); + break; + case WM_ENTERSIZEMOVE: user_resize = 1; break; From cd616b407ccecc92685df8cb2941ebfbdc9dc31b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Hrdli=C4=8Dka?= Date: Wed, 12 Jan 2022 22:01:41 +0100 Subject: [PATCH 12/22] Add tooltips to the toolbar buttons --- src/win/win_toolbar.c | 52 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/src/win/win_toolbar.c b/src/win/win_toolbar.c index 7a4d75011..d5d2c87cb 100644 --- a/src/win/win_toolbar.c +++ b/src/win/win_toolbar.c @@ -14,6 +14,7 @@ HWND hwndRebar; static HWND hwndToolbar; static HIMAGELIST hImageList; static wchar_t wTitle[512]; +static WNDPROC pOriginalProcedure; static TBBUTTON buttons[] = { { 0, IDM_ACTION_PAUSE, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 }, // Pause @@ -26,6 +27,52 @@ static TBBUTTON buttons[] = { { 0, IDM_CONFIG, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 } // Settings }; + +int +ToolBarProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) +{ + switch (message) { + case WM_NOTIFY: + switch (((LPNMHDR) lParam)->code) { + case TTN_GETDISPINFO: { + LPTOOLTIPTEXT lpttt = (LPTOOLTIPTEXT)lParam; + + // Set the instance of the module that contains the resource. + lpttt->hinst = hinstance; + + uintptr_t idButton = lpttt->hdr.idFrom; + + switch (idButton) { + case IDM_ACTION_PAUSE: + lpttt->lpszText = L"Pause execution"; + break; + + case IDM_ACTION_RESET_CAD: + lpttt->lpszText = L"Press Ctrl+Alt+Delete"; + break; + + case IDM_ACTION_CTRL_ALT_ESC: + lpttt->lpszText = L"Press Ctrl+Alt+Esc"; + break; + + case IDM_ACTION_HRESET: + lpttt->lpszText = L"Hard reset"; + break; + + case IDM_CONFIG: + lpttt->lpszText = L"Settings"; + break; + } + + return TRUE; + } + } + } + + return(CallWindowProc(pOriginalProcedure, hwnd, message, wParam, lParam)); +} + + void ToolBarCreate(HWND hwndParent, HINSTANCE hInst) { @@ -59,6 +106,10 @@ ToolBarCreate(HWND hwndParent, HINSTANCE hInst) // Autosize the toolbar and determine its size. btnSize = LOWORD(SendMessage(hwndToolbar, TB_GETBUTTONSIZE, 0,0)); + // Replace the original procedure with ours. + pOriginalProcedure = (WNDPROC) GetWindowLongPtr(hwndToolbar, GWLP_WNDPROC); + SetWindowLongPtr(hwndToolbar, GWL_WNDPROC, (LONG_PTR)&ToolBarProcedure); + // Create the containing Rebar. hwndRebar = CreateWindowEx(0, REBARCLASSNAME, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | @@ -92,6 +143,7 @@ ToolBarCreate(HWND hwndParent, HINSTANCE hInst) return; } + wchar_t * ui_window_title(wchar_t *s) { From 8d0c1dec81d5242033564dd0e3468e867ee22d89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Hrdli=C4=8Dka?= Date: Wed, 12 Jan 2022 23:15:33 +0100 Subject: [PATCH 13/22] Add taskbar tooltips to the resources for localization --- src/include/86box/language.h | 7 +++++++ src/win/languages/cs-CZ.rc | 7 +++++++ src/win/languages/de-DE.rc | 7 +++++++ src/win/languages/en-GB.rc | 7 +++++++ src/win/languages/en-US.rc | 7 +++++++ src/win/languages/es-ES.rc | 7 +++++++ src/win/languages/fi-FI.rc | 7 +++++++ src/win/languages/fr-FR.rc | 7 +++++++ src/win/languages/hr-HR.rc | 7 +++++++ src/win/languages/hu-HU.rc | 7 +++++++ src/win/languages/it-IT.rc | 7 +++++++ src/win/languages/ja-JP.rc | 7 +++++++ src/win/languages/ko-KR.rc | 7 +++++++ src/win/languages/pt-BR.rc | 7 +++++++ src/win/languages/pt-PT.rc | 7 +++++++ src/win/languages/ru-RU.rc | 7 +++++++ src/win/languages/sl-SI.rc | 7 +++++++ src/win/languages/tr-TR.rc | 7 +++++++ src/win/languages/zh-CN.rc | 7 +++++++ src/win/win_toolbar.c | 10 +++++----- 20 files changed, 138 insertions(+), 5 deletions(-) diff --git a/src/include/86box/language.h b/src/include/86box/language.h index 467a5704c..f9da499be 100644 --- a/src/include/86box/language.h +++ b/src/include/86box/language.h @@ -127,6 +127,13 @@ #define IDS_2151 2151 // "Cartridge images (*.JRC)\0*.JRC\0..." #define IDS_2152 2152 // "Error initializing renderer" #define IDS_2153 2153 // "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +#define IDS_2154 2154 // "Resume execution" +#define IDS_2155 2155 // "Pause execution" +#define IDS_2156 2156 // "Press Ctrl+Alt+Del" +#define IDS_2157 2157 // "Press Ctrl+Alt+Esc" +#define IDS_2158 2158 // "Hard reset" +#define IDS_2159 2159 // "ACPI shutdown" +#define IDS_2160 2160 // "Settings" #define IDS_4096 4096 // "Hard disk (%s)" #define IDS_4097 4097 // "%01i:%01i" diff --git a/src/win/languages/cs-CZ.rc b/src/win/languages/cs-CZ.rc index d9f392cc9..6ad1d8788 100644 --- a/src/win/languages/cs-CZ.rc +++ b/src/win/languages/cs-CZ.rc @@ -533,6 +533,13 @@ BEGIN IDS_2151 "Obrazy cartridge (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Všechny soubory (*.*)\0*.*\0" IDS_2152 "Error initializing renderer" IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." + IDS_2154 "Obnovit" + IDS_2155 "Pozastavit" + IDS_2156 "Stisknout Ctrl+Alt+Delete" + IDS_2157 "Stisknout Ctrl+Alt+Esc" + IDS_2158 "Resetovat" + IDS_2159 "Vypnout skrze rozhraní ACPI" + IDS_2159 "Nastavení" END STRINGTABLE DISCARDABLE diff --git a/src/win/languages/de-DE.rc b/src/win/languages/de-DE.rc index 38a562cd5..9a89beb24 100644 --- a/src/win/languages/de-DE.rc +++ b/src/win/languages/de-DE.rc @@ -533,6 +533,13 @@ BEGIN IDS_2151 "Cartridgeimages (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Alle Dateien (*.*)\0*.*\0" IDS_2152 "Fehler bei der Rendererinitialisierung" IDS_2153 "Der OpenGL (3.0-Kern)-Renderer konnte nicht initialisiert werden. Bitte benutzen Sie einen anderen Renderer." + IDS_2154 "Resume execution" + IDS_2155 "Pause execution" + IDS_2156 "Press Ctrl+Alt+Del" + IDS_2157 "Press Ctrl+Alt+Esc" + IDS_2158 "Hard reset" + IDS_2159 "ACPI shutdown" + IDS_2160 "Settings" END STRINGTABLE DISCARDABLE diff --git a/src/win/languages/en-GB.rc b/src/win/languages/en-GB.rc index 939d96f5c..936a05e17 100644 --- a/src/win/languages/en-GB.rc +++ b/src/win/languages/en-GB.rc @@ -533,6 +533,13 @@ BEGIN IDS_2151 "Cartridge images (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0All files (*.*)\0*.*\0" IDS_2152 "Error initializing renderer" IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." + IDS_2154 "Resume execution" + IDS_2155 "Pause execution" + IDS_2156 "Press Ctrl+Alt+Del" + IDS_2157 "Press Ctrl+Alt+Esc" + IDS_2158 "Hard reset" + IDS_2159 "ACPI shutdown" + IDS_2160 "Settings" END STRINGTABLE DISCARDABLE diff --git a/src/win/languages/en-US.rc b/src/win/languages/en-US.rc index c010e9a90..0266397a4 100644 --- a/src/win/languages/en-US.rc +++ b/src/win/languages/en-US.rc @@ -533,6 +533,13 @@ BEGIN IDS_2151 "Cartridge images (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0All files (*.*)\0*.*\0" IDS_2152 "Error initializing renderer" IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." + IDS_2154 "Resume execution" + IDS_2155 "Pause execution" + IDS_2156 "Press Ctrl+Alt+Del" + IDS_2157 "Press Ctrl+Alt+Esc" + IDS_2158 "Hard reset" + IDS_2159 "ACPI shutdown" + IDS_2160 "Settings" END STRINGTABLE DISCARDABLE diff --git a/src/win/languages/es-ES.rc b/src/win/languages/es-ES.rc index 44fadfc6e..52cb60c6b 100644 --- a/src/win/languages/es-ES.rc +++ b/src/win/languages/es-ES.rc @@ -533,6 +533,13 @@ BEGIN IDS_2151 "Imágenes de Cartucho (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0All files (*.*)\0*.*\0" IDS_2152 "Error initializing renderer" IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." + IDS_2154 "Resume execution" + IDS_2155 "Pause execution" + IDS_2156 "Press Ctrl+Alt+Del" + IDS_2157 "Press Ctrl+Alt+Esc" + IDS_2158 "Hard reset" + IDS_2159 "ACPI shutdown" + IDS_2160 "Settings" END STRINGTABLE DISCARDABLE diff --git a/src/win/languages/fi-FI.rc b/src/win/languages/fi-FI.rc index bedc9d3f7..5513977af 100644 --- a/src/win/languages/fi-FI.rc +++ b/src/win/languages/fi-FI.rc @@ -533,6 +533,13 @@ BEGIN IDS_2151 "ROM-moduulikuvat (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Kaikki tiedostot (*.*)\0*.*\0" IDS_2152 "Virhe renderöijän alustuksessa" IDS_2153 "OpenGL (3.0 Core) renderöijän alustus epäonnistui. Käytä toista renderöijää." + IDS_2154 "Resume execution" + IDS_2155 "Pause execution" + IDS_2156 "Press Ctrl+Alt+Del" + IDS_2157 "Press Ctrl+Alt+Esc" + IDS_2158 "Hard reset" + IDS_2159 "ACPI shutdown" + IDS_2160 "Settings" END STRINGTABLE DISCARDABLE diff --git a/src/win/languages/fr-FR.rc b/src/win/languages/fr-FR.rc index a59c78dab..460283b0d 100644 --- a/src/win/languages/fr-FR.rc +++ b/src/win/languages/fr-FR.rc @@ -533,6 +533,13 @@ BEGIN IDS_2151 "Images cartouche (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Tous les fichiers (*.*)\0*.*\0" IDS_2152 "Error initializing renderer" IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." + IDS_2154 "Resume execution" + IDS_2155 "Pause execution" + IDS_2156 "Press Ctrl+Alt+Del" + IDS_2157 "Press Ctrl+Alt+Esc" + IDS_2158 "Hard reset" + IDS_2159 "ACPI shutdown" + IDS_2160 "Settings" END STRINGTABLE DISCARDABLE diff --git a/src/win/languages/hr-HR.rc b/src/win/languages/hr-HR.rc index ba384f5a6..575d0ba1d 100644 --- a/src/win/languages/hr-HR.rc +++ b/src/win/languages/hr-HR.rc @@ -533,6 +533,13 @@ BEGIN IDS_2151 "Slike kasete (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Sve datoteke (*.*)\0*.*\0" IDS_2152 "Nije moguće inicijalizirati renderer" IDS_2153 "Nije moguće inicijalizirati OpenGL (3.0 jezgra) renderer. Molimte koristite drugi renderer." + IDS_2154 "Resume execution" + IDS_2155 "Pause execution" + IDS_2156 "Press Ctrl+Alt+Del" + IDS_2157 "Press Ctrl+Alt+Esc" + IDS_2158 "Hard reset" + IDS_2159 "ACPI shutdown" + IDS_2160 "Settings" END STRINGTABLE DISCARDABLE diff --git a/src/win/languages/hu-HU.rc b/src/win/languages/hu-HU.rc index 1b7dfbe43..ae7e51924 100644 --- a/src/win/languages/hu-HU.rc +++ b/src/win/languages/hu-HU.rc @@ -535,6 +535,13 @@ BEGIN IDS_2151 "ROM-kazetta képek (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Minden fájl (*.*)\0*.*\0" IDS_2152 "Hiba történt a renderelő inicializálásakor" IDS_2153 "Az OpenGL (3.0 Core) megjelenítő-motort nem sikerült inicializálni. Kérem használjon másik renderelőt." + IDS_2154 "Resume execution" + IDS_2155 "Pause execution" + IDS_2156 "Press Ctrl+Alt+Del" + IDS_2157 "Press Ctrl+Alt+Esc" + IDS_2158 "Hard reset" + IDS_2159 "ACPI shutdown" + IDS_2160 "Settings" END STRINGTABLE DISCARDABLE diff --git a/src/win/languages/it-IT.rc b/src/win/languages/it-IT.rc index 2656a2d5d..2ee1cb0a8 100644 --- a/src/win/languages/it-IT.rc +++ b/src/win/languages/it-IT.rc @@ -533,6 +533,13 @@ BEGIN IDS_2151 "Immagini cartuccia (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Tutti i file (*.*)\0*.*\0" IDS_2152 "Error initializing renderer" IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." + IDS_2154 "Resume execution" + IDS_2155 "Pause execution" + IDS_2156 "Press Ctrl+Alt+Del" + IDS_2157 "Press Ctrl+Alt+Esc" + IDS_2158 "Hard reset" + IDS_2159 "ACPI shutdown" + IDS_2160 "Settings" END STRINGTABLE DISCARDABLE diff --git a/src/win/languages/ja-JP.rc b/src/win/languages/ja-JP.rc index c74b99d81..47d7184f2 100644 --- a/src/win/languages/ja-JP.rc +++ b/src/win/languages/ja-JP.rc @@ -533,6 +533,13 @@ BEGIN IDS_2151 "カートリッジイメージ (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0すべてのファイル (*.*)\0*.*\0" IDS_2152 "レンダラーの初期化エラー" IDS_2153 "OpenGL(3.0コア)レンダラーが初期化できませんでした。別のレンダラーを使用してください。" + IDS_2154 "Resume execution" + IDS_2155 "Pause execution" + IDS_2156 "Press Ctrl+Alt+Del" + IDS_2157 "Press Ctrl+Alt+Esc" + IDS_2158 "Hard reset" + IDS_2159 "ACPI shutdown" + IDS_2160 "Settings" END STRINGTABLE DISCARDABLE diff --git a/src/win/languages/ko-KR.rc b/src/win/languages/ko-KR.rc index 510bc8c60..b2e86d0ac 100644 --- a/src/win/languages/ko-KR.rc +++ b/src/win/languages/ko-KR.rc @@ -533,6 +533,13 @@ BEGIN IDS_2151 "카트리지 이미지 (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0모든 파일 (*.*)\0*.*\0" IDS_2152 "Error initializing renderer" IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." + IDS_2154 "Resume execution" + IDS_2155 "Pause execution" + IDS_2156 "Press Ctrl+Alt+Del" + IDS_2157 "Press Ctrl+Alt+Esc" + IDS_2158 "Hard reset" + IDS_2159 "ACPI shutdown" + IDS_2160 "Settings" END STRINGTABLE DISCARDABLE diff --git a/src/win/languages/pt-BR.rc b/src/win/languages/pt-BR.rc index e2a9a856e..5732494e6 100644 --- a/src/win/languages/pt-BR.rc +++ b/src/win/languages/pt-BR.rc @@ -536,6 +536,13 @@ BEGIN IDS_2151 "Imagens de cartucho (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Todos os arquivos (*.*)\0*.*\0" IDS_2152 "Erro ao inicializar o renderizador" IDS_2153 "O renderizador OpenGL (Núcleo 3.0) não pôde ser inicializado. Use outro renderizador." + IDS_2154 "Resume execution" + IDS_2155 "Pause execution" + IDS_2156 "Press Ctrl+Alt+Del" + IDS_2157 "Press Ctrl+Alt+Esc" + IDS_2158 "Hard reset" + IDS_2159 "ACPI shutdown" + IDS_2160 "Settings" END STRINGTABLE DISCARDABLE diff --git a/src/win/languages/pt-PT.rc b/src/win/languages/pt-PT.rc index c30f6d50d..cc50665b1 100644 --- a/src/win/languages/pt-PT.rc +++ b/src/win/languages/pt-PT.rc @@ -533,6 +533,13 @@ BEGIN IDS_2151 "Imagens de cartucho (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Todos os ficheiros (*.*)\0*.*\0" IDS_2152 "Error initializing renderer" IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." + IDS_2154 "Resume execution" + IDS_2155 "Pause execution" + IDS_2156 "Press Ctrl+Alt+Del" + IDS_2157 "Press Ctrl+Alt+Esc" + IDS_2158 "Hard reset" + IDS_2159 "ACPI shutdown" + IDS_2160 "Settings" END STRINGTABLE DISCARDABLE diff --git a/src/win/languages/ru-RU.rc b/src/win/languages/ru-RU.rc index 72b4e7e66..6bb1f222a 100644 --- a/src/win/languages/ru-RU.rc +++ b/src/win/languages/ru-RU.rc @@ -533,6 +533,13 @@ BEGIN IDS_2151 "Образы картриджей (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Все файлы (*.*)\0*.*\0" IDS_2152 "Error initializing renderer" IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." + IDS_2154 "Resume execution" + IDS_2155 "Pause execution" + IDS_2156 "Press Ctrl+Alt+Del" + IDS_2157 "Press Ctrl+Alt+Esc" + IDS_2158 "Hard reset" + IDS_2159 "ACPI shutdown" + IDS_2160 "Settings" END STRINGTABLE DISCARDABLE diff --git a/src/win/languages/sl-SI.rc b/src/win/languages/sl-SI.rc index 815c08603..cdc00fc4a 100644 --- a/src/win/languages/sl-SI.rc +++ b/src/win/languages/sl-SI.rc @@ -533,6 +533,13 @@ BEGIN IDS_2151 "Slike spominskega vložka (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Vse datoteke (*.*)\0*.*\0" IDS_2152 "Error initializing renderer" IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." + IDS_2154 "Resume execution" + IDS_2155 "Pause execution" + IDS_2156 "Press Ctrl+Alt+Del" + IDS_2157 "Press Ctrl+Alt+Esc" + IDS_2158 "Hard reset" + IDS_2159 "ACPI shutdown" + IDS_2160 "Settings" END STRINGTABLE DISCARDABLE diff --git a/src/win/languages/tr-TR.rc b/src/win/languages/tr-TR.rc index 91ee1480e..eca2767dc 100644 --- a/src/win/languages/tr-TR.rc +++ b/src/win/languages/tr-TR.rc @@ -533,6 +533,13 @@ BEGIN IDS_2151 "Kartuş imajları (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Tüm dosyalar (*.*)\0*.*\0" IDS_2152 "Error initializing renderer" IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." + IDS_2154 "Resume execution" + IDS_2155 "Pause execution" + IDS_2156 "Press Ctrl+Alt+Del" + IDS_2157 "Press Ctrl+Alt+Esc" + IDS_2158 "Hard reset" + IDS_2159 "ACPI shutdown" + IDS_2160 "Settings" END STRINGTABLE DISCARDABLE diff --git a/src/win/languages/zh-CN.rc b/src/win/languages/zh-CN.rc index 628ce1210..00ec3bc29 100644 --- a/src/win/languages/zh-CN.rc +++ b/src/win/languages/zh-CN.rc @@ -533,6 +533,13 @@ BEGIN IDS_2151 "卡带镜像 (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0所有文件 (*.*)\0*.*\0" IDS_2152 "初始化渲染器时出错" IDS_2153 "无法初始化 OpenGL (3.0 核心) 渲染器。请使用其他渲染器。" + IDS_2154 "Resume execution" + IDS_2155 "Pause execution" + IDS_2156 "Press Ctrl+Alt+Del" + IDS_2157 "Press Ctrl+Alt+Esc" + IDS_2158 "Hard reset" + IDS_2159 "ACPI shutdown" + IDS_2160 "Settings" END STRINGTABLE DISCARDABLE diff --git a/src/win/win_toolbar.c b/src/win/win_toolbar.c index d5d2c87cb..c6f22644c 100644 --- a/src/win/win_toolbar.c +++ b/src/win/win_toolbar.c @@ -44,23 +44,23 @@ ToolBarProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) switch (idButton) { case IDM_ACTION_PAUSE: - lpttt->lpszText = L"Pause execution"; + lpttt->lpszText = MAKEINTRESOURCE(IDS_2155); break; case IDM_ACTION_RESET_CAD: - lpttt->lpszText = L"Press Ctrl+Alt+Delete"; + lpttt->lpszText = MAKEINTRESOURCE(IDS_2156); break; case IDM_ACTION_CTRL_ALT_ESC: - lpttt->lpszText = L"Press Ctrl+Alt+Esc"; + lpttt->lpszText = MAKEINTRESOURCE(IDS_2157); break; case IDM_ACTION_HRESET: - lpttt->lpszText = L"Hard reset"; + lpttt->lpszText = MAKEINTRESOURCE(IDS_2158); break; case IDM_CONFIG: - lpttt->lpszText = L"Settings"; + lpttt->lpszText = MAKEINTRESOURCE(IDS_2160); break; } From e5bf6ea015676621f5c14245c1e7e1ffbfb56446 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Hrdli=C4=8Dka?= Date: Wed, 12 Jan 2022 23:40:40 +0100 Subject: [PATCH 14/22] Add support for icon set switching to the toolbar --- src/include/86box/win.h | 1 + src/win/win_icon.c | 8 ++++-- src/win/win_toolbar.c | 54 +++++++++++++++++++++++++++-------------- 3 files changed, 43 insertions(+), 20 deletions(-) diff --git a/src/include/86box/win.h b/src/include/86box/win.h index 6c061ef4a..0bbc99642 100644 --- a/src/include/86box/win.h +++ b/src/include/86box/win.h @@ -216,6 +216,7 @@ extern int MediaMenuHandler(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPara /* Functions in win_toolbar.c */ extern HWND hwndRebar; extern void ToolBarCreate(HWND hwndParent, HINSTANCE hInst); +extern void ToolBarLoadIcons(); /* Functions in win_dialog.c: */ diff --git a/src/win/win_icon.c b/src/win/win_icon.c index 9b0d5ef23..8d3ec9590 100644 --- a/src/win/win_icon.c +++ b/src/win/win_icon.c @@ -120,9 +120,11 @@ void win_load_icon_set() win_clear_icon_set(); win_system_icon_set(); - if (strlen(icon_set) == 0) + if (strlen(icon_set) == 0) { + ToolBarLoadIcons(); return; - + } + char path_root[2048] = {0}, temp[2048] = {0}; wchar_t wtemp[2048] = {0}; @@ -150,4 +152,6 @@ void win_load_icon_set() uint32_t curr_lang = lang_id; lang_id = 0; set_language(curr_lang); + + ToolBarLoadIcons(); } \ No newline at end of file diff --git a/src/win/win_toolbar.c b/src/win/win_toolbar.c index c6f22644c..aa1d60cd6 100644 --- a/src/win/win_toolbar.c +++ b/src/win/win_toolbar.c @@ -10,21 +10,21 @@ #include <86box/ui.h> #include <86box/win.h> -HWND hwndRebar; -static HWND hwndToolbar; -static HIMAGELIST hImageList; -static wchar_t wTitle[512]; -static WNDPROC pOriginalProcedure; +HWND hwndRebar = NULL; +static HWND hwndToolbar = NULL; +static HIMAGELIST hImageList = NULL; +static wchar_t wTitle[512] = { 0 }; +static WNDPROC pOriginalProcedure = NULL; static TBBUTTON buttons[] = { { 0, IDM_ACTION_PAUSE, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 }, // Pause { 0, 0, TBSTATE_INDETERMINATE, BTNS_SEP, { 0 }, 0, 0 }, - { 0, IDM_ACTION_RESET_CAD, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 }, // Ctrl+Alt+Del - { 0, IDM_ACTION_CTRL_ALT_ESC, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 }, // Ctrl+Alt+Esc - { 0, IDM_ACTION_HRESET, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 }, // Hard reset - { 0, 0, TBSTATE_INDETERMINATE, BTNS_BUTTON, { 0 }, 0, 0 }, // ACPI shutdown + { 1, IDM_ACTION_RESET_CAD, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 }, // Ctrl+Alt+Del + { 2, IDM_ACTION_CTRL_ALT_ESC, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 }, // Ctrl+Alt+Esc + { 3, IDM_ACTION_HRESET, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 }, // Hard reset + { 4, 0, TBSTATE_INDETERMINATE, BTNS_BUTTON, { 0 }, 0, 0 }, // ACPI shutdown { 0, 0, TBSTATE_INDETERMINATE, BTNS_SEP, { 0 }, 0, 0 }, - { 0, IDM_CONFIG, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 } // Settings + { 5, IDM_CONFIG, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 } // Settings }; @@ -73,6 +73,31 @@ ToolBarProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) } +void +ToolBarLoadIcons() +{ + if (!hwndToolbar) + return; + + if (hImageList) + ImageList_Destroy(hImageList); + + hImageList = ImageList_Create(win_get_system_metrics(SM_CXSMICON, dpi), + win_get_system_metrics(SM_CYSMICON, dpi), + ILC_MASK | ILC_COLOR32, 1, 1); + + ImageList_AddIcon(hImageList, hIcon[16]); // Run + ImageList_AddIcon(hImageList, hIcon[24]); // Pause + ImageList_AddIcon(hImageList, hIcon[32]); // Ctrl+Alt+Delete + ImageList_AddIcon(hImageList, hIcon[40]); // Ctrl+Alt+Esc + ImageList_AddIcon(hImageList, hIcon[48]); // Hard reset + ImageList_AddIcon(hImageList, hIcon[56]); // ACPI shutdown + ImageList_AddIcon(hImageList, hIcon[64]); // Settings + + SendMessage(hwndToolbar, TB_SETIMAGELIST, 0, (LPARAM) hImageList); +} + + void ToolBarCreate(HWND hwndParent, HINSTANCE hInst) { @@ -90,14 +115,7 @@ ToolBarCreate(HWND hwndParent, HINSTANCE hInst) 0, 0, 0, 0, hwndParent, NULL, hInst, NULL); - // Create the image list. - hImageList = ImageList_Create(win_get_system_metrics(SM_CXSMICON, dpi), - win_get_system_metrics(SM_CYSMICON, dpi), - ILC_MASK | ILC_COLOR32, 1, 1); - - ImageList_AddIcon(hImageList, hIcon[241]); - - SendMessage(hwndToolbar, TB_SETIMAGELIST, 0, (LPARAM) hImageList); + ToolBarLoadIcons(); // Add buttons. SendMessage(hwndToolbar, TB_BUTTONSTRUCTSIZE, sizeof(TBBUTTON), 0); From 88037d9bdaf1335b218c6eb07c1b0ae6bc135bb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Hrdli=C4=8Dka?= Date: Thu, 13 Jan 2022 00:08:06 +0100 Subject: [PATCH 15/22] Change the Pause icon if paused --- src/include/86box/win.h | 1 + src/win/win_toolbar.c | 25 +++++++++++++++++++------ src/win/win_ui.c | 3 +++ 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/include/86box/win.h b/src/include/86box/win.h index 0bbc99642..4fb6a7d00 100644 --- a/src/include/86box/win.h +++ b/src/include/86box/win.h @@ -217,6 +217,7 @@ extern int MediaMenuHandler(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPara extern HWND hwndRebar; extern void ToolBarCreate(HWND hwndParent, HINSTANCE hInst); extern void ToolBarLoadIcons(); +extern void ToolBarUpdatePause(int paused); /* Functions in win_dialog.c: */ diff --git a/src/win/win_toolbar.c b/src/win/win_toolbar.c index aa1d60cd6..b4ebab0c6 100644 --- a/src/win/win_toolbar.c +++ b/src/win/win_toolbar.c @@ -17,14 +17,14 @@ static wchar_t wTitle[512] = { 0 }; static WNDPROC pOriginalProcedure = NULL; static TBBUTTON buttons[] = { - { 0, IDM_ACTION_PAUSE, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 }, // Pause + { 1, IDM_ACTION_PAUSE, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 }, // Pause { 0, 0, TBSTATE_INDETERMINATE, BTNS_SEP, { 0 }, 0, 0 }, - { 1, IDM_ACTION_RESET_CAD, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 }, // Ctrl+Alt+Del - { 2, IDM_ACTION_CTRL_ALT_ESC, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 }, // Ctrl+Alt+Esc - { 3, IDM_ACTION_HRESET, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 }, // Hard reset - { 4, 0, TBSTATE_INDETERMINATE, BTNS_BUTTON, { 0 }, 0, 0 }, // ACPI shutdown + { 2, IDM_ACTION_RESET_CAD, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 }, // Ctrl+Alt+Del + { 3, IDM_ACTION_CTRL_ALT_ESC, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 }, // Ctrl+Alt+Esc + { 4, IDM_ACTION_HRESET, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 }, // Hard reset + { 5, 0, TBSTATE_INDETERMINATE, BTNS_BUTTON, { 0 }, 0, 0 }, // ACPI shutdown { 0, 0, TBSTATE_INDETERMINATE, BTNS_SEP, { 0 }, 0, 0 }, - { 5, IDM_CONFIG, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 } // Settings + { 6, IDM_CONFIG, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 } // Settings }; @@ -98,6 +98,19 @@ ToolBarLoadIcons() } +void +ToolBarUpdatePause(int pause) +{ + TBBUTTONINFO tbbi; + + tbbi.cbSize = sizeof(tbbi); + tbbi.dwMask = TBIF_IMAGE; + tbbi.iImage = pause ? 0 : 1; + + SendMessage(hwndToolbar, TB_SETBUTTONINFO, IDM_ACTION_PAUSE, (LPARAM) &tbbi); +} + + void ToolBarCreate(HWND hwndParent, HINSTANCE hInst) { diff --git a/src/win/win_ui.c b/src/win/win_ui.c index 0c1fbc930..099540ccb 100644 --- a/src/win/win_ui.c +++ b/src/win/win_ui.c @@ -1630,6 +1630,9 @@ plat_pause(int p) if (enable_discord) discord_update_activity(dopause); + /* Update the toolbar */ + ToolBarUpdatePause(p); + /* Send the WM to a manager if needed. */ if (source_hwnd) PostMessage((HWND) (uintptr_t) source_hwnd, WM_SENDSTATUS, (WPARAM) !!dopause, (LPARAM) hwndMain); From b6d033481f62626cf7bb8861b4657f1cd8d3539e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Hrdli=C4=8Dka?= Date: Thu, 13 Jan 2022 00:09:45 +0100 Subject: [PATCH 16/22] Change tooltip for Pause button if paused --- src/win/win_toolbar.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/win/win_toolbar.c b/src/win/win_toolbar.c index b4ebab0c6..03b796059 100644 --- a/src/win/win_toolbar.c +++ b/src/win/win_toolbar.c @@ -43,8 +43,11 @@ ToolBarProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) uintptr_t idButton = lpttt->hdr.idFrom; switch (idButton) { - case IDM_ACTION_PAUSE: - lpttt->lpszText = MAKEINTRESOURCE(IDS_2155); + case IDM_ACTION_PAUSE: + if (dopause) + lpttt->lpszText = MAKEINTRESOURCE(IDS_2154); + else + lpttt->lpszText = MAKEINTRESOURCE(IDS_2155); break; case IDM_ACTION_RESET_CAD: From 6a98625e28d675f4f056bfc30febd31382db3a2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Hrdli=C4=8Dka?= Date: Thu, 13 Jan 2022 00:14:01 +0100 Subject: [PATCH 17/22] Fix 64-bit build due to no `GWL_WNDPROC` constant --- src/win/win_stbar.c | 6 +----- src/win/win_toolbar.c | 2 +- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/win/win_stbar.c b/src/win/win_stbar.c index afc906215..29985aaf3 100644 --- a/src/win/win_stbar.c +++ b/src/win/win_stbar.c @@ -54,10 +54,6 @@ #include <86box/ui.h> #include <86box/win.h> -#ifndef GWL_WNDPROC -#define GWL_WNDPROC GWLP_WNDPROC -#endif - HWND hwndSBAR; int update_icons = 1, reset_occurred = 1; @@ -992,7 +988,7 @@ StatusBarCreate(HWND hwndParent, uintptr_t idStatus, HINSTANCE hInst) /* Replace the original procedure with ours. */ OriginalProcedure = GetWindowLongPtr(hwndSBAR, GWLP_WNDPROC); - SetWindowLongPtr(hwndSBAR, GWL_WNDPROC, (LONG_PTR)&StatusBarProcedure); + SetWindowLongPtr(hwndSBAR, GWLP_WNDPROC, (LONG_PTR)&StatusBarProcedure); SendMessage(hwndSBAR, SB_SETMINHEIGHT, (WPARAM)17, (LPARAM)0); diff --git a/src/win/win_toolbar.c b/src/win/win_toolbar.c index 03b796059..15bc6ceea 100644 --- a/src/win/win_toolbar.c +++ b/src/win/win_toolbar.c @@ -142,7 +142,7 @@ ToolBarCreate(HWND hwndParent, HINSTANCE hInst) // Replace the original procedure with ours. pOriginalProcedure = (WNDPROC) GetWindowLongPtr(hwndToolbar, GWLP_WNDPROC); - SetWindowLongPtr(hwndToolbar, GWL_WNDPROC, (LONG_PTR)&ToolBarProcedure); + SetWindowLongPtr(hwndToolbar, GWLP_WNDPROC, (LONG_PTR)&ToolBarProcedure); // Create the containing Rebar. hwndRebar = CreateWindowEx(0, REBARCLASSNAME, NULL, From dc8c94814ec0560f69d0753090e84aed0d320373 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Hrdli=C4=8Dka?= Date: Thu, 13 Jan 2022 00:43:01 +0100 Subject: [PATCH 18/22] Initialize the Pause button to the correct state on start --- src/win/win_toolbar.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/win/win_toolbar.c b/src/win/win_toolbar.c index 15bc6ceea..dd484658f 100644 --- a/src/win/win_toolbar.c +++ b/src/win/win_toolbar.c @@ -144,6 +144,9 @@ ToolBarCreate(HWND hwndParent, HINSTANCE hInst) pOriginalProcedure = (WNDPROC) GetWindowLongPtr(hwndToolbar, GWLP_WNDPROC); SetWindowLongPtr(hwndToolbar, GWLP_WNDPROC, (LONG_PTR)&ToolBarProcedure); + // Make sure the Pause button is in the correct state. + ToolBarUpdatePause(dopause); + // Create the containing Rebar. hwndRebar = CreateWindowEx(0, REBARCLASSNAME, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | From 318875bf09fa4f54fcf140a0503c125485db4052 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Hrdli=C4=8Dka?= Date: Thu, 13 Jan 2022 00:47:14 +0100 Subject: [PATCH 19/22] Add proper icons --- src/win/86Box.rc | 7 +++++++ src/win/icons/acpi_shutdown.ico | Bin 0 -> 9622 bytes src/win/icons/hard_reset.ico | Bin 0 -> 9622 bytes src/win/icons/pause.ico | Bin 0 -> 9622 bytes src/win/icons/run.ico | Bin 0 -> 9622 bytes src/win/icons/send_cad.ico | Bin 0 -> 9622 bytes src/win/icons/send_cae.ico | Bin 0 -> 9622 bytes src/win/icons/settings.ico | Bin 0 -> 9622 bytes src/win/win_icon.c | 7 +++++++ src/win/win_toolbar.c | 14 +++++++------- 10 files changed, 21 insertions(+), 7 deletions(-) create mode 100644 src/win/icons/acpi_shutdown.ico create mode 100644 src/win/icons/hard_reset.ico create mode 100644 src/win/icons/pause.ico create mode 100644 src/win/icons/run.ico create mode 100644 src/win/icons/send_cad.ico create mode 100644 src/win/icons/send_cae.ico create mode 100644 src/win/icons/settings.ico diff --git a/src/win/86Box.rc b/src/win/86Box.rc index 1b48edb03..8b34c5c09 100644 --- a/src/win/86Box.rc +++ b/src/win/86Box.rc @@ -139,6 +139,13 @@ END 185 ICON DISCARDABLE ICON_PATH "icons/mo_empty_active.ico" 192 ICON DISCARDABLE ICON_PATH "icons/cassette_empty.ico" 193 ICON DISCARDABLE ICON_PATH "icons/cassette_empty_active.ico" +200 ICON DISCARDABLE ICON_PATH "icons/run.ico" +201 ICON DISCARDABLE ICON_PATH "icons/pause.ico" +202 ICON DISCARDABLE ICON_PATH "icons/send_cad.ico" +203 ICON DISCARDABLE ICON_PATH "icons/send_cae.ico" +204 ICON DISCARDABLE ICON_PATH "icons/hard_reset.ico" +205 ICON DISCARDABLE ICON_PATH "icons/acpi_shutdown.ico" +206 ICON DISCARDABLE ICON_PATH "icons/settings.ico" 232 ICON DISCARDABLE ICON_PATH "icons/cartridge_empty.ico" 240 ICON DISCARDABLE ICON_PATH "icons/machine.ico" 241 ICON DISCARDABLE ICON_PATH "icons/display.ico" diff --git a/src/win/icons/acpi_shutdown.ico b/src/win/icons/acpi_shutdown.ico new file mode 100644 index 0000000000000000000000000000000000000000..a2493b8031b6a7b5de4dff93d43e32c184d5336c GIT binary patch literal 9622 zcmZQzU}Run5D);-3Je)63=D1z3=AS75dID}28MMk3=9$y5Pk?I&BS63vikr3 z85po(m>RG-NM`K(pPh}a9;OyXBg=!tkj+5W50cyY9~~h412PAs2BsfbFG!97tQ9@{ zK!Ol6Kx#l3W(Kl;m|l<^NDVSZmjkH*xdE4ckUTObRX;>M!rc%)!Ve&`@!1biPnv#^ ze<5aq!Vjbugdui<>;qwt8W0AtL25zC05uFidO;YZ7la}D!D^xD3Ry3@evsK9jP8Dr z7!0H9N0@;~hcNqK^nY*~g~)@&K$_4n$XtkDK^$Lbn|eV1x3BW+pDTp__ruhnR`5mss;a>X0$aTyo9BRUQqTd8qM$&3zEJ zp{fIg3GO&XgfnjQ5NeRk0%a5AI0l6`$R3ay2pd!vfG|QovOGu)NG(VVWEKo#GZUm1 zyZaDn6PsBeGa=?7(l*E}5XNR6NSyR~1L6j-KcM9ph>dIx$Za4Dat}TXQiE_W$j!(Y z5{@7>_{_j22hxKLV^a$e`^WzO{}0Ch{~s{a|3AQB55^4)^8Z1Yfr0-&HVl#jVVHW5 zUXU3evq1Hh1Oo$u0aE)offHgE86;9TgTfk)$uJ781<6coVFeO{+XGSy*GQNF(u<5C z=?s!?klDy;z;+QfngNntP|ZR%2bqm-7a=>)&4!o-%G1~|B7MT_0jbAj2fEpa{D{qL zWHE?6`0OBTHga7HVk4UmV&k_1*?d%YgUo_pkl&FpI2=Gm!!g1RkUFqDG`_K$4^az33QX7R(cvb_^EtLGDDxFn@r=@P!ev z?#E^Z$d18eKFB?&?nJ~fsyHa#A##}FAUQ}p!_p}BFao6sh&oJrA!Z=VMpX+5Gf4Ub zk;vu~HVeOOpEDG{|faMwkhc1IdFhKC@wVVY36I7ZMhz=7Ypxm>9EB?Es}e5Qe1{ zNI42}GYBKvQxG*EF_?a0Xpnm#7^EK?hJ+JD4KXI-Rs%BwoyM&LCiB1X|NlP>_Wyq{ z$p8Pq!2kaN1N;9249x!<7#QIgHC({q0BVoGFPqpqP%IgIN}U%!gsr`~$NCq6eV{-5tcb0b&laUqEIe+X*U* zuwi615Iv;20n=`XnTRqFo4we?K>A2?1NH2Nxra12pxY0MSM2`AmG@!xBGZ^|fS8M# z{)n?1VK2xGY#5xzkgW%^3A+K=evrAC{>C%|Ic>q%AiW?=NIygkA`I}`Pn_K_H-Kn} z`C!jO2~;y6@(}xx?IuPqNDUzjF&}C*m_oH5q#vRNRU9G))&M0?_{@gMfoN2_5#~eehLQN)fNBQu{zuh^%WjYx(CtU4#q=%kE$MIF9<{QVcLr84wIJ8yAhR6QmxiVH662%*BUE zGyeYve((Z>e+&%ue;63-e=sn}e_&wXf55=Net?028H5`c7#Lxgkm)dWAR43>gh6J3 S%mkSYvIArncu~X${{H~IhvAU` literal 0 HcmV?d00001 diff --git a/src/win/icons/hard_reset.ico b/src/win/icons/hard_reset.ico new file mode 100644 index 0000000000000000000000000000000000000000..d0494f40bb8220eaf8babada5cc3db648f6a67cd GIT binary patch literal 9622 zcmZQzU}Run5D);-3Je)63=D1z3=AS75dID}28MMk3=9$y5PkV~{vV9wd%z28a)n1JMxve+&Q-hxiSqA0~!u zE=VI(9vmJZHb@MFVd_CNNE}3i>;<VGtiC4r0SFNQ{tvkU7X0WF82E%pjy6qz|MH z8H2=#)eq7Kvjf?kATvN1CI?an;)7_A7>GvZgY?2MNDhXP#gNs55&=jJNDO2iNF9s@ zv5_%I9HbV6L2Qs-5C-u<`av{E97coK$QUG!93CLOFbt9dnE}EuH6Sr$43Yz3sF^UW za2lo-qy`&?$-_0^V8GO&)7X^%kpKVx0sH^|2bll=Z(xLA28RFtv0<1zNG(VYNH3_I z5n+IoH;mxYhJj%M8#bHpiox>tz4FiY`au3Wd7!4AKszIq^Kw|jJ1nI+O9>`pf90-HhFbv|u z%mlGvdO>WEIEaRcf%Jgb=olmp!yxq_eIPf2*dVnaIS?Bp4x(XVAR5F+#~^W#9uNk} zf%Fk$9}D5C-wFnT5?fkXa!0AR43>9fQO{@*sDCFo+Ej1DOTGATf}AAR2_x)Pd77R1esn zAbAi5sfCKei~`djagcc+3{nTfAaQgIlLM&*VQl7s429_fsR3b_K6Dx+2f{G*Aiel7 zOdUuMHVl);X9hMom_BqGn_8IIKlcCse=z?4|A3+X{{aSjFm7Ow{|~|p4E+DGVUQdM z!_BoD(NJ_v*4 zVHhNb%O4;)boC&8ATf{}2*b*cfB*i0^EyNfQ6GZTgT&D70EvOj0m&m{kQhV`W-=xX zk;iWbJ~bc{|9*c5N*@>)BnQIi`ayhTKY;ikw<5b8#0H5&)xpC9BnHDEx&QzFfvf<_ z!^{B5gXBPo3B-npgUm$7AbAi*7YFe{;vjQC7J%5u=79JhIS`F34$?;~2I&QvL8|#6 z`>WS~eJ~8-gD{8>vJYFlfXoJA zWHlf*%v=x~gkgM;c`ytU1IZ(s4Pt}Dpz zB#(?iVo-HpbCC&<9Lx@6Juo&%9)@9J$TUa}m)S6TKx**WfovW!8>Ekr+30qF>;Yk9 zbCB5}IT$9^Y-Bq?ZUSML8R#@f4u)a+$f03opwq;d^}q4||33`&|9>#Z|Np?i|Nj94 z`~L$B%>Nr07~vS|cW}BvW+STs=>h2lnE^5jWG2XLP&*7XM(Kdm4r>4nToU6r{Aw`V zgX}i^TFI7$+le05=zJ=>1#B;}9mwev8yi_Il3PgjII=m|>>)-BW(L$9M7sf`50qz! zv4a>jAoGZI14u0)yFv1}FfR9i%q8RokQ$J=xXb{_fiOrNE)0?fVQglA^x$#>NDh}i zkXax(kQxw%)m7MNkUR*3)PwY)V~`v+H-N

4C^&vk|)(L_MPJhq(hJj&46l44>T~ z_1J6yiNi29d0gg##G(4Yc>=^I#eS$>aN7r@7ldJA=g7gQ_QJKPcRg)T5L~ zAUPNYsR3b-xyWt+iQ%&!n>@@+WE!LnhLOe5*&sEfxB;Xd-F@h0lEMd>H<0#&+=}i7 z5Fg!-ATf|TK{UD?$P5q$iQ~c`d0ZG|Cdh19IsoxO<{+yFiGkFBXmmM{I*=Gh4i^T= zgVbTeAUzkJO!XPI2(#0H6j+=lEY7#k!9G8^P~5C-wl)q=!8 zYCvXzFftp&$A>|B(anR|4WdEvAoD12kX{fb*55F@VKm6yAPh1Ch6#l=OdW^@ z=>=h!dF0X{Ghi5GEbQ2&R4!TtvWgZu{u y2L1;O4D1IO7??r0fq{V$hOwD}ECy2tqCt8=7-Sa6Opw_iJ3w}U7e##F{|^ARQ8>&1 literal 0 HcmV?d00001 diff --git a/src/win/icons/pause.ico b/src/win/icons/pause.ico new file mode 100644 index 0000000000000000000000000000000000000000..a57bc0a085526ec30e425e03b6b6cb802b2dba3e GIT binary patch literal 9622 zcmZQzU}Run5D);-3Je)63=D1z3=AS75dID}28MMk3=9$y5PkE%85kJQF-$SKIEW9EgV0qw|1%(Ch*^Z? zASxI@di$>Y|Ie`MKg1j~{W#@D^+Q6SYUh8PVT4Z(qI)#_@r4mSIVy)AC=NjwninCa zL+uBNgD{F5L8O{_j* z)q%`J#>DC)Rvoh0AU3i3h*bwN6B!e$k63lcW`o$o>LXSi$V_BRtUhAZA)5_i6RVF{ zbs#g5F|qoHRflXgh)t|MV%34nM8?GGBUT-<*&sHt`iNBrG7}jStB+W9$Yz7s#Ofnf z9mq^%Osqa))ghY=ViT*6Sal#XkukCQpz1*FBpAlpUP3k-#3oiBa{Z6Y2AP2mBdbMb zL-ic^&-|a37}O2}jZr!vwZj@f1D8J2aeWO-}C$fti$+Z`PfHKqUy2WU8=n*rkE bH3!tr#fM?$6Qc2%0g^+~|3Ll+`#@p|q0v z$EP1=21p$?b3o#R^n=U*VUSu7hL{8K6Npc&evmp42I+z5W&p=MNDO2?E)0?fVURu$ zhUo>-AU;SApI(p}5C*A7#~^WR`axnK43bCJgUkoXgVe$72eCmIBo4yJYO%3FYC!5? z7{mu*Y-+KIfz*QZf@l!NrUsuFNDm0(Q-ecp{{R2~+yDRn-}wLk|AzYi{~PT8|8L;` z|G$Cx|NjO?CykX}$ZBf%mHDT8OSt99Ha(jH!d2a2Ba2*k@cgq zLGmEA_{;&xgVdqx#l{Dz1F1(h4nVApdWzxy{|1Ko{|yZC zPz+*2>o8Eg1yYNp-jZNoU@$;xA183)bOb1mf-p`66iI->2!zqg1Bwhq(hM>iHC{n} z0bwLX6fj}t!_qZ~55m;)56CQ#`(ft8XplGvQ)&;$3~c68%N|1JW4DL+2qD&dWP3;n zGg8e5*#pu8!o=7EQim`6LFVDYAiW@r&mNFGx#q*{1(^ZD5PMML1|&|Y`N;M_>_FsC zYMKvnC&)YyhWP@-28qMmKn@Mk55gd`VCKSTkQhjgQgcD(z|2IZLE@yE4^j`pAiW@r zY#urrBo9(ctouP~L3%(K-7IW;kUEeaLgs_ifG|isHgj-^fz*Ta;W8g22f`qAAdJf# zT;d=-ApPj(gTz1>BoD&4^b-;X=>?esGatkTVURco6Vgve9%Kf{JQxP?L70#}V&y?* zfy@TcAWW=2V%34n1Yu&;6RGb0{rms1w!7G&Z7XoQ%l>}@1ONX92KN6A42)0=VuQp$ za!|D(Js9nID;^H8BI$&kN$AU+7wD?C7Uf&34%A4Y@3K^Wo=`uQJbKa57Wfi`ghG9R1&VfKS) zkQxw%gavio0Wz16{UA4hFi0&3Q_~$F^N6({cJCxC3MksrG~10Ky=>APjK_ zd1(}+pIrMvZUAAB84x#+o;E;wDYYNw29Q~#x&x$#8uo+S0Ky>iKp5fgwgE=@j>DsHRPC&PY=jUkl7#%vIiFi$%EA5Gm8{CkXaxMG8dPf z$l@S%AoZl!flV#Q3=jsH2g1m9;A4Z-g7jfClUOm3evmmJjL$A?av(h*{lwaZtPZ3P zgh6ItGn*JOkY11($mSAagVcjCNG}KzV-GGhApIb-2-yje2dM*LkRA}mWhN=&Aag)w zg3QN-LGmCBQVYVQm`_M8$UKnQ`0NI$0bxRBks}W>7n}VcF%SmHlVdKidO+rb?1A|o z#0FuII0zGK4!P<;c7W`IVGtjL$u*BueIUC)c7tdTCRIPB>OppbFs0^@sQ>)`|NjsF z|Ns902;2Yve?b2K{{!s*{~uud|Nj6({r>|D^8XJo@c%!+!2JIJ0|N-xA7EgRKfu7i ket?028Hzz{kQhh~surXNq_-Yo7RXGH*&sWhc7p5%01J&uFaQ7m literal 0 HcmV?d00001 diff --git a/src/win/icons/send_cad.ico b/src/win/icons/send_cad.ico new file mode 100644 index 0000000000000000000000000000000000000000..e3e64a74349af9f14f900b0cf1d5dcd7b37e024f GIT binary patch literal 9622 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 M3NL)PL4xr=0FdF5-~a#s literal 0 HcmV?d00001 diff --git a/src/win/icons/send_cae.ico b/src/win/icons/send_cae.ico new file mode 100644 index 0000000000000000000000000000000000000000..757f38d351d3992669ae6dbdf051571b4731c873 GIT binary patch literal 9622 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 literal 0 HcmV?d00001 diff --git a/src/win/win_icon.c b/src/win/win_icon.c index 8d3ec9590..33a5932ef 100644 --- a/src/win/win_icon.c +++ b/src/win/win_icon.c @@ -87,6 +87,13 @@ const _ICON_DATA icon_files[] = {185, "mo_empty_active.ico"}, {192, "cassette_empty.ico"}, {193, "cassette_empty_active.ico"}, + {200, "run.ico"}, + {201, "pause.ico"}, + {202, "send_cad.ico"}, + {203, "send_cae.ico"}, + {204, "hard_reset.ico"}, + {205, "acpi_shutdown.ico"}, + {206, "settings.ico"}, {232, "cartridge_empty.ico"}, {240, "machine.ico"}, {241, "display.ico"}, diff --git a/src/win/win_toolbar.c b/src/win/win_toolbar.c index dd484658f..cf461e4c1 100644 --- a/src/win/win_toolbar.c +++ b/src/win/win_toolbar.c @@ -89,13 +89,13 @@ ToolBarLoadIcons() win_get_system_metrics(SM_CYSMICON, dpi), ILC_MASK | ILC_COLOR32, 1, 1); - ImageList_AddIcon(hImageList, hIcon[16]); // Run - ImageList_AddIcon(hImageList, hIcon[24]); // Pause - ImageList_AddIcon(hImageList, hIcon[32]); // Ctrl+Alt+Delete - ImageList_AddIcon(hImageList, hIcon[40]); // Ctrl+Alt+Esc - ImageList_AddIcon(hImageList, hIcon[48]); // Hard reset - ImageList_AddIcon(hImageList, hIcon[56]); // ACPI shutdown - ImageList_AddIcon(hImageList, hIcon[64]); // Settings + ImageList_AddIcon(hImageList, hIcon[200]); // Run + ImageList_AddIcon(hImageList, hIcon[201]); // Pause + ImageList_AddIcon(hImageList, hIcon[202]); // Ctrl+Alt+Delete + ImageList_AddIcon(hImageList, hIcon[203]); // Ctrl+Alt+Esc + ImageList_AddIcon(hImageList, hIcon[204]); // Hard reset + ImageList_AddIcon(hImageList, hIcon[205]); // ACPI shutdown + ImageList_AddIcon(hImageList, hIcon[206]); // Settings SendMessage(hwndToolbar, TB_SETIMAGELIST, 0, (LPARAM) hImageList); } From 6746bbce7deb6e15a35ea0659701150191c9168b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Hrdli=C4=8Dka?= Date: Thu, 13 Jan 2022 00:52:48 +0100 Subject: [PATCH 20/22] Fix duplicate string ID --- src/win/languages/cs-CZ.rc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/win/languages/cs-CZ.rc b/src/win/languages/cs-CZ.rc index 6ad1d8788..f9b128819 100644 --- a/src/win/languages/cs-CZ.rc +++ b/src/win/languages/cs-CZ.rc @@ -539,7 +539,7 @@ BEGIN IDS_2157 "Stisknout Ctrl+Alt+Esc" IDS_2158 "Resetovat" IDS_2159 "Vypnout skrze rozhraní ACPI" - IDS_2159 "Nastavení" + IDS_2160 "Nastavení" END STRINGTABLE DISCARDABLE From 5e51e28f6e89cef9c062ea79923c906255cb069e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Hrdli=C4=8Dka?= Date: Thu, 13 Jan 2022 01:14:58 +0100 Subject: [PATCH 21/22] Reorder the toolbar buttons --- src/win/win_toolbar.c | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/src/win/win_toolbar.c b/src/win/win_toolbar.c index cf461e4c1..8ba1e4911 100644 --- a/src/win/win_toolbar.c +++ b/src/win/win_toolbar.c @@ -16,15 +16,27 @@ static HIMAGELIST hImageList = NULL; static wchar_t wTitle[512] = { 0 }; static WNDPROC pOriginalProcedure = NULL; +// Used for image list indices +// Don't shuffle the values up without updating `ToolBarLoadIcons` to follow suit! +enum image_index { + RUN, + PAUSE, + CTRL_ALT_DEL, + CTRL_ALT_ESC, + HARD_RESET, + ACPI_SHUTDOWN, + SETTINGS +}; + static TBBUTTON buttons[] = { - { 1, IDM_ACTION_PAUSE, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 }, // Pause - { 0, 0, TBSTATE_INDETERMINATE, BTNS_SEP, { 0 }, 0, 0 }, - { 2, IDM_ACTION_RESET_CAD, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 }, // Ctrl+Alt+Del - { 3, IDM_ACTION_CTRL_ALT_ESC, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 }, // Ctrl+Alt+Esc - { 4, IDM_ACTION_HRESET, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 }, // Hard reset - { 5, 0, TBSTATE_INDETERMINATE, BTNS_BUTTON, { 0 }, 0, 0 }, // ACPI shutdown - { 0, 0, TBSTATE_INDETERMINATE, BTNS_SEP, { 0 }, 0, 0 }, - { 6, IDM_CONFIG, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 } // Settings + { PAUSE, IDM_ACTION_PAUSE, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 }, + { HARD_RESET, IDM_ACTION_HRESET, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 }, + { ACPI_SHUTDOWN, 0, TBSTATE_INDETERMINATE, BTNS_BUTTON, { 0 }, 0, 0 }, + { 0, 0, TBSTATE_INDETERMINATE, BTNS_SEP, { 0 }, 0, 0 }, + { CTRL_ALT_DEL, IDM_ACTION_RESET_CAD, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 }, + { CTRL_ALT_ESC, IDM_ACTION_CTRL_ALT_ESC, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 }, + { 0, 0, TBSTATE_INDETERMINATE, BTNS_SEP, { 0 }, 0, 0 }, + { SETTINGS, IDM_CONFIG, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 } }; @@ -89,6 +101,9 @@ ToolBarLoadIcons() win_get_system_metrics(SM_CYSMICON, dpi), ILC_MASK | ILC_COLOR32, 1, 1); + // The icons must be loaded in the same order as the `image_index` + // enumeration on top of the source file. + ImageList_AddIcon(hImageList, hIcon[200]); // Run ImageList_AddIcon(hImageList, hIcon[201]); // Pause ImageList_AddIcon(hImageList, hIcon[202]); // Ctrl+Alt+Delete @@ -108,7 +123,7 @@ ToolBarUpdatePause(int pause) tbbi.cbSize = sizeof(tbbi); tbbi.dwMask = TBIF_IMAGE; - tbbi.iImage = pause ? 0 : 1; + tbbi.iImage = pause ? RUN : PAUSE; SendMessage(hwndToolbar, TB_SETBUTTONINFO, IDM_ACTION_PAUSE, (LPARAM) &tbbi); } From 691aa95cd111260b65ce044304ee672e01107acc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Hrdli=C4=8Dka?= Date: Thu, 13 Jan 2022 01:17:27 +0100 Subject: [PATCH 22/22] Slight function reordering --- src/win/win_toolbar.c | 80 +++++++++++++++++++++---------------------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/src/win/win_toolbar.c b/src/win/win_toolbar.c index 8ba1e4911..71e9a02c3 100644 --- a/src/win/win_toolbar.c +++ b/src/win/win_toolbar.c @@ -16,8 +16,7 @@ static HIMAGELIST hImageList = NULL; static wchar_t wTitle[512] = { 0 }; static WNDPROC pOriginalProcedure = NULL; -// Used for image list indices -// Don't shuffle the values up without updating `ToolBarLoadIcons` to follow suit! + enum image_index { RUN, PAUSE, @@ -28,16 +27,33 @@ enum image_index { SETTINGS }; -static TBBUTTON buttons[] = { - { PAUSE, IDM_ACTION_PAUSE, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 }, - { HARD_RESET, IDM_ACTION_HRESET, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 }, - { ACPI_SHUTDOWN, 0, TBSTATE_INDETERMINATE, BTNS_BUTTON, { 0 }, 0, 0 }, - { 0, 0, TBSTATE_INDETERMINATE, BTNS_SEP, { 0 }, 0, 0 }, - { CTRL_ALT_DEL, IDM_ACTION_RESET_CAD, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 }, - { CTRL_ALT_ESC, IDM_ACTION_CTRL_ALT_ESC, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 }, - { 0, 0, TBSTATE_INDETERMINATE, BTNS_SEP, { 0 }, 0, 0 }, - { SETTINGS, IDM_CONFIG, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 } -}; + +void +ToolBarLoadIcons() +{ + if (!hwndToolbar) + return; + + if (hImageList) + ImageList_Destroy(hImageList); + + hImageList = ImageList_Create(win_get_system_metrics(SM_CXSMICON, dpi), + win_get_system_metrics(SM_CYSMICON, dpi), + ILC_MASK | ILC_COLOR32, 1, 1); + + // The icons must be loaded in the same order as the `image_index` + // enumeration above. + + ImageList_AddIcon(hImageList, hIcon[200]); // Run + ImageList_AddIcon(hImageList, hIcon[201]); // Pause + ImageList_AddIcon(hImageList, hIcon[202]); // Ctrl+Alt+Delete + ImageList_AddIcon(hImageList, hIcon[203]); // Ctrl+Alt+Esc + ImageList_AddIcon(hImageList, hIcon[204]); // Hard reset + ImageList_AddIcon(hImageList, hIcon[205]); // ACPI shutdown + ImageList_AddIcon(hImageList, hIcon[206]); // Settings + + SendMessage(hwndToolbar, TB_SETIMAGELIST, 0, (LPARAM) hImageList); +} int @@ -88,34 +104,6 @@ ToolBarProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) } -void -ToolBarLoadIcons() -{ - if (!hwndToolbar) - return; - - if (hImageList) - ImageList_Destroy(hImageList); - - hImageList = ImageList_Create(win_get_system_metrics(SM_CXSMICON, dpi), - win_get_system_metrics(SM_CYSMICON, dpi), - ILC_MASK | ILC_COLOR32, 1, 1); - - // The icons must be loaded in the same order as the `image_index` - // enumeration on top of the source file. - - ImageList_AddIcon(hImageList, hIcon[200]); // Run - ImageList_AddIcon(hImageList, hIcon[201]); // Pause - ImageList_AddIcon(hImageList, hIcon[202]); // Ctrl+Alt+Delete - ImageList_AddIcon(hImageList, hIcon[203]); // Ctrl+Alt+Esc - ImageList_AddIcon(hImageList, hIcon[204]); // Hard reset - ImageList_AddIcon(hImageList, hIcon[205]); // ACPI shutdown - ImageList_AddIcon(hImageList, hIcon[206]); // Settings - - SendMessage(hwndToolbar, TB_SETIMAGELIST, 0, (LPARAM) hImageList); -} - - void ToolBarUpdatePause(int pause) { @@ -129,6 +117,18 @@ ToolBarUpdatePause(int pause) } +static TBBUTTON buttons[] = { + { PAUSE, IDM_ACTION_PAUSE, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 }, + { HARD_RESET, IDM_ACTION_HRESET, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 }, + { ACPI_SHUTDOWN, 0, TBSTATE_INDETERMINATE, BTNS_BUTTON, { 0 }, 0, 0 }, + { 0, 0, TBSTATE_INDETERMINATE, BTNS_SEP, { 0 }, 0, 0 }, + { CTRL_ALT_DEL, IDM_ACTION_RESET_CAD, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 }, + { CTRL_ALT_ESC, IDM_ACTION_CTRL_ALT_ESC, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 }, + { 0, 0, TBSTATE_INDETERMINATE, BTNS_SEP, { 0 }, 0, 0 }, + { SETTINGS, IDM_CONFIG, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 } +}; + + void ToolBarCreate(HWND hwndParent, HINSTANCE hInst) {