1
1
Fork 0
mirror of https://github.com/pbatard/rufus.git synced 2024-08-14 23:57:05 +00:00

[ui] fix multiple UI issues

* Disable Windows To Go support for Windows 7 and earlier
* Fix placement of the advanced button on high DPI displays
* Reposition the log window for Windows 10
* Use a slightly larger and better scaling font for the info field,
  and also fix the vertical text alignment
This commit is contained in:
Pete Batard 2015-02-08 00:38:21 +00:00
parent 09d24551b8
commit a13351b656
3 changed files with 69 additions and 40 deletions

View file

@ -109,6 +109,8 @@ static loc_cmd* selected_locale = NULL;
static UINT_PTR UM_LANGUAGE_MENU_MAX = UM_LANGUAGE_MENU;
static RECT relaunch_rc = { -65536, -65536, 0, 0};
static UINT uBootChecked = BST_CHECKED, uQFChecked = BST_CHECKED, uMBRChecked = BST_UNCHECKED;
static HFONT hFont;
static WNDPROC info_original_proc = NULL;
char ClusterSizeLabel[MAX_CLUSTER_SIZES][64];
char msgbox[1024], msgbox_title[32], *ini_file = NULL;
char lost_translators[][6] = LOST_TRANSLATORS;
@ -1119,6 +1121,12 @@ static void ToggleToGo(void)
POINT point;
int toggle;
// Windows To Go mode is only available for Windows 8 or later due to the lack
// of an ISO mounting API on previous versions.
// But we still need to be able to hide the Windows To Go option on startup.
if ((nWindowsVersion < WINDOWS_8) && (!togo_mode))
return;
togo_mode = !togo_mode;
if (!togo_mode)
dialog_shift = -dialog_shift;
@ -1481,10 +1489,43 @@ static __inline const char* IsAlphaOrBeta(void)
#endif
}
INT_PTR CALLBACK InfoCallback(HWND hCtrl, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
RECT rect;
PAINTSTRUCT ps;
wchar_t winfo[128];
switch (message) {
// Prevent select (which screws up our display as it redraws the font using different settings)
case WM_LBUTTONDOWN:
return (INT_PTR)FALSE;
// Prevent the select cursor from appearing
case WM_SETCURSOR:
SetCursor(LoadCursor(NULL, IDC_ARROW));
return (INT_PTR)TRUE;
// The things one needs to do to vertically center text in an edit control...
case WM_PAINT:
GetWindowTextW(hInfo, winfo, ARRAYSIZE(winfo));
hdc = BeginPaint(hCtrl , &ps);
SelectObject(hdc, hFont);
SetBkColor(hdc, GetSysColor(COLOR_BTNFACE));
SetTextAlign(hdc , TA_CENTER | TA_BASELINE);
GetClientRect(hCtrl , &rect);
TextOutW(hdc, rect.right/2, rect.bottom/2 + (int)(5.0f * fScale), winfo, wcslen(winfo));
EndPaint(hCtrl, &ps);
return (INT_PTR)TRUE;
}
return CallWindowProc(info_original_proc, hCtrl, message, wParam, lParam);
}
void InitDialog(HWND hDlg)
{
HINSTANCE hDllInst;
HFONT hf;
DWORD len;
SIZE sz;
HWND hCtrl;
@ -1517,7 +1558,7 @@ void InitDialog(HWND hDlg)
i16 = GetSystemMetrics(SM_CXSMICON);
hDC = GetDC(hDlg);
fScale = GetDeviceCaps(hDC, LOGPIXELSX) / 96.0f;
lfHeight = -MulDiv(8, GetDeviceCaps(hDC, LOGPIXELSY), 72);
lfHeight = -MulDiv(9, GetDeviceCaps(hDC, LOGPIXELSY), 72);
ReleaseDC(hDlg, hDC);
// Adjust icon size lookup
s16 = i16;
@ -1530,14 +1571,9 @@ void InitDialog(HWND hDlg)
else if (s16 >= 20)
s16 = 24;
// Change the font of the Info edit box
#if defined(COLOURED_INFO)
hf = CreateFontA(lfHeight, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE,
#else
hf = CreateFontA(lfHeight, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE,
#endif
DEFAULT_CHARSET, 0, 0, PROOF_QUALITY, 0, "Arial Unicode MS");
SendDlgItemMessageA(hDlg, IDC_INFO, WM_SETFONT, (WPARAM)hf, TRUE);
// Create the font for the Info edit box
hFont = CreateFontA(lfHeight, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, DEFAULT_CHARSET,
0, 0, PROOF_QUALITY, 0, (nWindowsVersion >= WINDOWS_VISTA)?"Segoe UI":"Arial Unicode MS");
// Create the title bar icon
SetTitleBarIcon(hDlg);
@ -1626,7 +1662,7 @@ void InitDialog(HWND hDlg)
// Reposition the Advanced button
hCtrl = GetDlgItem(hDlg, IDS_FORMAT_OPTIONS_GRP);
sz = GetTextSize(hCtrl);
ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDC_ADVANCED), sz.cx, 0, 0, 0);
ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDC_ADVANCED), (int)((1.0f * sz.cx) / fScale), 0, 0, 0);
// Add a space to the "Format Options" text
GetWindowTextW(hCtrl, wtmp, ARRAYSIZE(wtmp));
wtmp[wcslen(wtmp)] = ' ';
@ -1635,8 +1671,12 @@ void InitDialog(HWND hDlg)
if (nWindowsVersion == WINDOWS_7) {
ResizeMoveCtrl(hDlg, GetDlgItem(hMainDialog, IDS_ADVANCED_OPTIONS_GRP), 0, -1, 0, 2);
ResizeMoveCtrl(hDlg, hProgress, 0, 1, 0, 0);
ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDC_ADVANCED), -2, 0, 0, 0);
}
// Subclass the Info box so that we can align its text vertically
info_original_proc = (WNDPROC)SetWindowLongPtr(hInfo, GWLP_WNDPROC, (LONG_PTR)InfoCallback);
// Set the icons on the the buttons
PF_INIT(ImageList_Create, Comctl32);
PF_INIT(ImageList_ReplaceIcon, Comctl32);
@ -1791,7 +1831,7 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
POINT Point;
RECT DialogRect, DesktopRect;
LONG progress_style;
int nDeviceIndex, fs, bt, i, nWidth, nHeight, nb_devices, selected_language;
int nDeviceIndex, fs, bt, i, nWidth, nHeight, nb_devices, selected_language, offset;
char tmp[128];
loc_cmd* lcmd = NULL;
// TODO: Add "*.img;*.vhd" / "All Supported Images" to the list below and use a generic "%s Image" in the .loc
@ -1891,20 +1931,6 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
}
break;
#if defined(COLOURED_INFO)
case WM_CTLCOLORSTATIC:
// Must be transparent for XP and non Aero Vista/7
SetBkMode((HDC)wParam, TRANSPARENT);
if ((HWND)lParam == hInfo) {
SetTextColor((HDC)wParam, RGB(0,192,255));
return (INT_PTR)CreateSolidBrush(RGB(0,0,0));
}
// Restore transparency if we don't change the background
SetBkMode((HDC)wParam, OPAQUE);
return (INT_PTR)FALSE;
break;
#endif
case WM_COMMAND:
if ((LOWORD(wParam) >= UM_LANGUAGE_MENU) && (LOWORD(wParam) < UM_LANGUAGE_MENU_MAX)) {
selected_language = LOWORD(wParam) - UM_LANGUAGE_MENU;
@ -1965,10 +1991,13 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
nWidth = DialogRect.right - DialogRect.left;
nHeight = DialogRect.bottom - DialogRect.top;
GetWindowRect(hDlg, &DialogRect);
offset = GetSystemMetrics(SM_CXSIZEFRAME) + (int)(2.0f * fScale);
if (nWindowsVersion >= WINDOWS_10)
offset += (int)(-14.0f * fScale);
if (right_to_left_mode)
Point.x = max(DialogRect.left - GetSystemMetrics(SM_CXSIZEFRAME)-(int)(2.0f * fScale) - nWidth, 0);
Point.x = max(DialogRect.left - offset - nWidth, 0);
else
Point.x = min(DialogRect.right + GetSystemMetrics(SM_CXSIZEFRAME)+(int)(2.0f * fScale), DesktopRect.right - nWidth);
Point.x = min(DialogRect.right + offset, DesktopRect.right - nWidth);
Point.y = max(DialogRect.top, DesktopRect.top - nHeight);
MoveWindow(hLogDlg, Point.x, Point.y, nWidth, nHeight, FALSE);
@ -1978,10 +2007,9 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
if (right_to_left_mode) {
Point.x = DialogRect.left;
GetWindowRect(hLogDlg, &DialogRect);
Point.x = max(Point.x, DialogRect.right - DialogRect.left + GetSystemMetrics(SM_CXSIZEFRAME) + (int)(2.0f * fScale));
Point.x = max(Point.x, DialogRect.right - DialogRect.left + offset);
} else {
Point.x = max((DialogRect.left<0)?DialogRect.left:0,
Point.x - nWidth - GetSystemMetrics(SM_CXSIZEFRAME) - (int)(2.0f * fScale));
Point.x = max((DialogRect.left<0)?DialogRect.left:0, Point.x - offset - nWidth);
}
MoveWindow(hDlg, Point.x, Point.y, nWidth, nHeight, TRUE);
first_log_display = FALSE;

View file

@ -325,7 +325,8 @@ enum WindowsVersion {
WINDOWS_7 = 0x61,
WINDOWS_8 = 0x62,
WINDOWS_8_1 = 0x63,
WINDOWS_10 = 0x64,
WINDOWS_10_PREVIEW1 = 0x64,
WINDOWS_10 = 0xA0,
WINDOWS_MAX
};

View file

@ -32,7 +32,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
IDD_DIALOG DIALOGEX 12, 12, 242, 376
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Rufus 2.0.0.601"
CAPTION "Rufus 2.0.0.602"
FONT 8, "Segoe UI", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "Start",IDC_START,127,339,50,14
@ -157,7 +157,7 @@ END
IDD_DIALOG_XP DIALOGEX 12, 12, 242, 376
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Rufus 2.0.0.601"
CAPTION "Rufus 2.0.0.602"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "Start",IDC_START,127,339,50,14
@ -283,7 +283,7 @@ END
IDD_DIALOG_RTL DIALOGEX 12, 12, 242, 376
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_RTLREADING | WS_EX_APPWINDOW | WS_EX_LAYOUTRTL
CAPTION "Rufus 2.0.0.601"
CAPTION "Rufus 2.0.0.602"
FONT 8, "Segoe UI", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "Start",IDC_START,127,339,50,14
@ -415,7 +415,7 @@ END
IDD_DIALOG_RTL_XP DIALOGEX 12, 12, 242, 376
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_RTLREADING | WS_EX_APPWINDOW | WS_EX_LAYOUTRTL
CAPTION "Rufus 2.0.0.601"
CAPTION "Rufus 2.0.0.602"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "Start",IDC_START,127,339,50,14
@ -671,8 +671,8 @@ END
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 2,0,0,601
PRODUCTVERSION 2,0,0,601
FILEVERSION 2,0,0,602
PRODUCTVERSION 2,0,0,602
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@ -689,13 +689,13 @@ BEGIN
BEGIN
VALUE "CompanyName", "Akeo Consulting (http://akeo.ie)"
VALUE "FileDescription", "Rufus"
VALUE "FileVersion", "2.0.0.601"
VALUE "FileVersion", "2.0.0.602"
VALUE "InternalName", "Rufus"
VALUE "LegalCopyright", "© 2011-2015 Pete Batard (GPL v3)"
VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html"
VALUE "OriginalFilename", "rufus.exe"
VALUE "ProductName", "Rufus"
VALUE "ProductVersion", "2.0.0.601"
VALUE "ProductVersion", "2.0.0.602"
END
END
BLOCK "VarFileInfo"