From 27bcc24f30a65dc0eaf89a5b713062b363d636a2 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Wed, 31 Jan 2024 15:17:43 +0200 Subject: [PATCH] [win] online-installer: add RTL mode --- .../extras/online-installer/res/dialog.rc | 16 +++++++++++++++- win-linux/extras/online-installer/src/main.cpp | 2 +- .../extras/online-installer/src/resource.h | 1 + .../extras/online-installer/src/utils.cpp | 18 ++++++++++++++++++ win-linux/extras/online-installer/src/utils.h | 1 + 5 files changed, 36 insertions(+), 2 deletions(-) diff --git a/win-linux/extras/online-installer/res/dialog.rc b/win-linux/extras/online-installer/res/dialog.rc index 23bc71599..14c403f34 100644 --- a/win-linux/extras/online-installer/res/dialog.rc +++ b/win-linux/extras/online-installer/res/dialog.rc @@ -1,5 +1,5 @@ #pragma code_page(65001) -#include +#include #include "../src/version.h" #include "../src/resource.h" @@ -52,3 +52,17 @@ BEGIN PUSHBUTTON "", IDC_BUTTON_CANCEL, 225, 72, 80, 18 CONTROL "", IDC_SILENT_CHECK, "BUTTON", BS_AUTOCHECKBOX | WS_TABSTOP, 30, 70, 100, 20 END + +IDD_DIALOG_RTL DIALOGEX 0, 0, 320, 100 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_STATICEDGE | WS_EX_LAYOUTRTL +CAPTION "" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + CONTROL "Progress", IDC_PROGRESS, "msctls_progress32", WS_BORDER, 15, 56, 290, 6 + CONTROL "Icon", IDC_MAIN_ICON, "Static", SS_ICON | SS_CENTER | WS_CHILD | WS_VISIBLE, 15, 10, 32, 32 + LTEXT "", IDC_LABEL_TITLE, 75, 15, 220, 14, SS_LEFT | WS_CHILD | WS_VISIBLE + LTEXT "", IDC_LABEL_MESSAGE, 75, 28, 220, 24, SS_LEFT | WS_CHILD | WS_VISIBLE + PUSHBUTTON "", IDC_BUTTON_CANCEL, 225, 72, 80, 18 + CONTROL "", IDC_SILENT_CHECK, "BUTTON", BS_AUTOCHECKBOX | WS_TABSTOP, 30, 70, 100, 20 +END diff --git a/win-linux/extras/online-installer/src/main.cpp b/win-linux/extras/online-installer/src/main.cpp index 4f94e770d..50c306e57 100644 --- a/win-linux/extras/online-installer/src/main.cpp +++ b/win-linux/extras/online-installer/src/main.cpp @@ -82,7 +82,7 @@ int WINAPI _tWinMain(_In_ HINSTANCE hInst, _In_opt_ HINSTANCE hPrevInstance, _In data.file_name = &fileName; InitCommonControls(); - HWND hDlg = CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_DIALOG), NULL, DialogProc, (LPARAM)&data); + HWND hDlg = CreateDialogParam(hInst, MAKEINTRESOURCE(NS_Utils::IsRtlLanguage(lcid) ? IDD_DIALOG_RTL : IDD_DIALOG), NULL, DialogProc, (LPARAM)&data); ShowWindow(hDlg, nCmdShow); BOOL ret; diff --git a/win-linux/extras/online-installer/src/resource.h b/win-linux/extras/online-installer/src/resource.h index 9e1cf2041..4a2488eca 100644 --- a/win-linux/extras/online-installer/src/resource.h +++ b/win-linux/extras/online-installer/src/resource.h @@ -2,6 +2,7 @@ #define IDI_MAINICON 101 #define IDD_DIALOG 102 +#define IDD_DIALOG_RTL 103 #define IDC_MAIN_ICON 1001 #define IDC_LABEL_TITLE 1002 diff --git a/win-linux/extras/online-installer/src/utils.cpp b/win-linux/extras/online-installer/src/utils.cpp index c329c2187..262fda9d9 100644 --- a/win-linux/extras/online-installer/src/utils.cpp +++ b/win-linux/extras/online-installer/src/utils.cpp @@ -41,6 +41,10 @@ #include #define _TR(str) Translator::tr(str).c_str() +#define BIT123_LAYOUTRTL 0x08000000 +#ifndef LOCALE_IREADINGLAYOUT +# define LOCALE_IREADINGLAYOUT 0x70 +#endif namespace NS_Utils @@ -67,6 +71,20 @@ namespace NS_Utils caption.append(_TR(CAPTION_TEXT)); MessageBox(NULL, str.c_str(), caption.c_str(), MB_ICONERROR | MB_SERVICE_NOTIFICATION_NT3X | MB_SETFOREGROUND); } + + bool IsRtlLanguage(unsigned long lcid) + { + if (NS_File::getWinVersion() >= WinVer::Win7) { + DWORD layout = 0; + if (GetLocaleInfo(lcid, LOCALE_IREADINGLAYOUT | LOCALE_RETURN_NUMBER, (LPWSTR)&layout, sizeof(layout)/sizeof(WCHAR)) > 0) + return layout == 1; + } else { + LOCALESIGNATURE lsig; + if (GetLocaleInfo(lcid, LOCALE_FONTSIGNATURE, (LPWSTR)&lsig, sizeof(lsig)/sizeof(WCHAR)) > 0) + return (lsig.lsUsb[3] & BIT123_LAYOUTRTL) != 0; + } + return false; + } } namespace NS_File diff --git a/win-linux/extras/online-installer/src/utils.h b/win-linux/extras/online-installer/src/utils.h index e2b5c3bef..78d7b9dc1 100644 --- a/win-linux/extras/online-installer/src/utils.h +++ b/win-linux/extras/online-installer/src/utils.h @@ -56,6 +56,7 @@ namespace NS_Utils { wstring GetLastErrorAsString(); void ShowMessage(wstring str, bool showError = false); +bool IsRtlLanguage(unsigned long lcid); } namespace NS_File