mirror of
https://github.com/rizonesoft/Notepad3.git
synced 2026-06-14 21:09:05 +08:00
+ try: fix AboutBox's RichEdit control DPI scale behavior
This commit is contained in:
parent
9cc4469f44
commit
eaadd5efee
@ -1 +1 @@
|
||||
2
|
||||
3
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
<assemblyIdentity
|
||||
name="Notepad3"
|
||||
processorArchitecture="*"
|
||||
version="5.20.309.2"
|
||||
version="5.20.309.3"
|
||||
type="win32"
|
||||
/>
|
||||
<description>Notepad3 RC3</description>
|
||||
|
||||
@ -685,53 +685,65 @@ INT_PTR CALLBACK AboutDlgProc(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam
|
||||
GetLngStringA(IDS_MUI_ABOUT_RTF_6, pAboutRes, COUNTOF(pAboutRes));
|
||||
StringCchCatA(pAboutResource, COUNTOF(pAboutResource), pAboutRes);
|
||||
|
||||
// paint richedit box
|
||||
pAboutInfo = pAboutResource;
|
||||
EDITSTREAM editStreamIn = { (DWORD_PTR)&pAboutInfo, 0, _LoadRtfCallback };
|
||||
SendDlgItemMessage(hwnd, IDC_RICHEDITABOUT, EM_STREAMIN, SF_RTF, (LPARAM)&editStreamIn);
|
||||
|
||||
CenterDlgInParent(hwnd, NULL);
|
||||
}
|
||||
// fall-through
|
||||
break;
|
||||
|
||||
|
||||
case WM_DPICHANGED:
|
||||
{
|
||||
// get current richedit box format
|
||||
CHARFORMAT2 currentFormat; ZeroMemory(¤tFormat, sizeof(CHARFORMAT2)); currentFormat.cbSize = sizeof(CHARFORMAT2);
|
||||
currentFormat.dwMask = CFM_ALL2; // CFM_SIZE | CFM_FACE | CFM_CHARSET | CFM_LCID; CFM_ALL; CFM_ALL2;
|
||||
SendDlgItemMessage(hwnd, IDC_RICHEDITABOUT, EM_GETCHARFORMAT, SCF_DEFAULT, (LPARAM)¤tFormat);
|
||||
|
||||
UpdateWindowLayoutForDPI(hwnd, 0, 0, 0, 0);
|
||||
|
||||
// --- keep original font size ---
|
||||
CHARFORMAT dpiCharFmt; ZeroMemory(&dpiCharFmt, sizeof(CHARFORMAT)); dpiCharFmt.cbSize = sizeof(CHARFORMAT);
|
||||
dpiCharFmt.dwMask = CFM_SIZE; //~ | CFM_FACE;
|
||||
dpiCharFmt.yHeight = currentFormat.yHeight; // keep size
|
||||
//~StringCchCopy(dpiCharFmt.szFaceName, COUNTOF(dpiCharFmt.szFaceName), L"Consolas");
|
||||
SendDlgItemMessage(hwnd, IDC_RICHEDITABOUT, EM_SETCHARFORMAT, SCF_ALL, (LPARAM)&dpiCharFmt);
|
||||
DPI_T const dpi = GetCurrentDPI(hwnd);
|
||||
SendDlgItemMessage(hwnd, IDC_RICHEDITABOUT, EM_SETZOOM, (WPARAM)dpi.y, (LPARAM)USER_DEFAULT_SCREEN_DPI);
|
||||
|
||||
// --- larger bold version string
|
||||
//~~// get current richedit box format
|
||||
//~~CHARFORMAT2 currentFormat; ZeroMemory(¤tFormat, sizeof(CHARFORMAT2)); currentFormat.cbSize = sizeof(CHARFORMAT2);
|
||||
//~~currentFormat.dwMask = CFM_ALL2; // CFM_SIZE | CFM_FACE | CFM_CHARSET | CFM_LCID; CFM_ALL; CFM_ALL2;
|
||||
//~~SendDlgItemMessage(hwnd, IDC_RICHEDITABOUT, EM_GETCHARFORMAT, SCF_DEFAULT, (LPARAM)¤tFormat);
|
||||
//~~
|
||||
//~~//CHARFORMAT dpiCharFmt; ZeroMemory(&dpiCharFmt, sizeof(CHARFORMAT)); dpiCharFmt.cbSize = sizeof(CHARFORMAT);
|
||||
//~~//dpiCharFmt.dwMask = CFM_ALL; CFM_SIZE; //~ | CFM_FACE;
|
||||
//~~CHARFORMAT2 dpiCharFmt = currentFormat;
|
||||
//~~dpiCharFmt.yHeight = (currentFormat.yHeight == 180) ? ScaleIntToDPI_Y(hwnd, 180) : currentFormat.yHeight; // keep size
|
||||
//~~//~StringCchCopy(dpiCharFmt.szFaceName, COUNTOF(dpiCharFmt.szFaceName), L"Segoe UI");
|
||||
//~~SendDlgItemMessage(hwnd, IDC_RICHEDITABOUT, EM_SETCHARFORMAT, SCF_ALL, (LPARAM)&dpiCharFmt);
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case WM_PAINT:
|
||||
{
|
||||
if (Globals.hIcon128) {
|
||||
int const iconSize = 128;
|
||||
int const dpiScaledWidth = ScaleIntToDPI_X(hwnd, iconSize);
|
||||
int const dpiScaledHeight = ScaleIntToDPI_Y(hwnd, iconSize);
|
||||
HDC const hdc = GetWindowDC(hwnd);
|
||||
DrawIconEx(hdc, ScaleIntToDPI_X(hwnd, 22), ScaleIntToDPI_Y(hwnd, 44),
|
||||
Globals.hIcon128, dpiScaledWidth, dpiScaledHeight, 0, NULL, DI_NORMAL);
|
||||
ReleaseDC(hwnd, hdc);
|
||||
}
|
||||
|
||||
// --- larger bold condensed version string
|
||||
if (hVersionFont) { DeleteObject(hVersionFont); }
|
||||
if ((hVersionFont = (HFONT)SendDlgItemMessage(hwnd, IDC_VERSION, WM_GETFONT, 0, 0)) == NULL) {
|
||||
hVersionFont = GetStockObject(DEFAULT_GUI_FONT);
|
||||
}
|
||||
LOGFONT lf; GetObject(hVersionFont, sizeof(LOGFONT), &lf);
|
||||
lf.lfWeight = FW_BOLD;
|
||||
lf.lfWidth = ScaleIntFontSizeW(hwnd, 8);
|
||||
lf.lfHeight = ScaleIntFontSizeH(hwnd, 22);
|
||||
// lf.lfQuality = ANTIALIASED_QUALITY;
|
||||
lf.lfWidth = ScaleIntToDPI_X(hwnd, 8);
|
||||
lf.lfHeight = ScaleIntToDPI_Y(hwnd, 22);
|
||||
//StringCchCopy(lf.lfFaceName, LF_FACESIZE, L"Segoe UI");
|
||||
hVersionFont = CreateFontIndirect(&lf);
|
||||
SendDlgItemMessage(hwnd, IDC_VERSION, WM_SETFONT, (WPARAM)hVersionFont, true);
|
||||
}
|
||||
return true;
|
||||
|
||||
|
||||
case WM_PAINT:
|
||||
if (Globals.hIcon128) {
|
||||
RECT rt;
|
||||
GetWindowRect(hwnd, &rt);
|
||||
HDC hdc = GetWindowDC(hwnd);
|
||||
DrawIconEx(hdc, 22, 44, Globals.hIcon128, 128, 128, 0, NULL, DI_NORMAL);
|
||||
ReleaseDC(hwnd, hdc);
|
||||
// rich edit control
|
||||
SendDlgItemMessage(hwnd, IDC_RICHEDITABOUT, EM_SETZOOM, 0, 0);
|
||||
}
|
||||
return false;
|
||||
|
||||
@ -833,7 +845,7 @@ INT_PTR CALLBACK AboutDlgProc(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam
|
||||
StringCchCat(wchVerInfo, COUNTOF(wchVerInfo), wchBuf);
|
||||
|
||||
DPI_T dpi = GetCurrentDPI(hwnd);
|
||||
StringCchPrintf(wchBuf, COUNTOF(wchBuf), L"\n- Display-DPI = %i x %i (Scale: %i%%).", dpi.x, dpi.y, ScaleIntToCurrentDPIX(hwnd, 100));
|
||||
StringCchPrintf(wchBuf, COUNTOF(wchBuf), L"\n- Display-DPI = %i x %i (Scale: %i%%).", dpi.x, dpi.y, ScaleIntToDPI_X(hwnd, 100));
|
||||
StringCchCat(wchVerInfo, COUNTOF(wchVerInfo), wchBuf);
|
||||
|
||||
StringCchPrintf(wchBuf, COUNTOF(wchBuf), L"\n- Rendering-Technology = '%s'", Settings.RenderingTechnology ? L"DIRECT-WRITE" : L"GDI");
|
||||
@ -3963,8 +3975,6 @@ void StatusSetText(HWND hwnd, UINT nPart, LPCWSTR lpszText)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
//=============================================================================
|
||||
//
|
||||
// StatusSetTextID()
|
||||
|
||||
@ -400,7 +400,7 @@ if (!bSucceed) {
|
||||
//
|
||||
int GetSystemMetricsEx(HWND hwnd, int nValue) {
|
||||
|
||||
return ScaleIntToCurrentDPIY(hwnd, GetSystemMetrics(nValue));
|
||||
return ScaleIntToDPI_Y(hwnd, GetSystemMetrics(nValue));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -223,8 +223,9 @@ DPI_T GetCurrentPPI(HWND hwnd);
|
||||
|
||||
void UpdateWindowLayoutForDPI(HWND hWnd, int x_96dpi, int y_96dpi, int w_96dpi, int h_96dpi);
|
||||
HBITMAP ResizeImageForCurrentDPI(HWND hwnd, HBITMAP hbmp);
|
||||
inline int ScaleIntToCurrentDPIX(HWND hwnd, int val) { DPI_T const dpi = GetCurrentDPI(hwnd); return MulDiv((val), dpi.x, USER_DEFAULT_SCREEN_DPI); }
|
||||
inline int ScaleIntToCurrentDPIY(HWND hwnd, int val) { DPI_T const dpi = GetCurrentDPI(hwnd); return MulDiv((val), dpi.y, USER_DEFAULT_SCREEN_DPI); }
|
||||
|
||||
inline int ScaleIntToDPI_X(HWND hwnd, int val) { DPI_T const dpi = GetCurrentDPI(hwnd); return MulDiv((val), dpi.x, USER_DEFAULT_SCREEN_DPI); }
|
||||
inline int ScaleIntToDPI_Y(HWND hwnd, int val) { DPI_T const dpi = GetCurrentDPI(hwnd); return MulDiv((val), dpi.y, USER_DEFAULT_SCREEN_DPI); }
|
||||
inline int ScaleToCurrentDPIX(HWND hwnd, float fVal) { DPI_T const dpi = GetCurrentDPI(hwnd); return float2int((fVal * dpi.x) / (float)USER_DEFAULT_SCREEN_DPI); }
|
||||
inline int ScaleToCurrentDPIY(HWND hwnd, float fVal) { DPI_T const dpi = GetCurrentDPI(hwnd); return float2int((fVal * dpi.y) / (float)USER_DEFAULT_SCREEN_DPI); }
|
||||
inline int ScaleIntFontSizeW(HWND hwnd, int val) { DPI_T const dpi = GetCurrentDPI(hwnd); DPI_T const ppi = GetCurrentPPI(hwnd); return MulDiv((val), dpi.x, ppi.x); }
|
||||
|
||||
@ -155,8 +155,6 @@ static int s_iExprError = -1;
|
||||
|
||||
static WIN32_FIND_DATA s_fdCurFile;
|
||||
|
||||
static HMODULE s_hRichEdit = INVALID_HANDLE_VALUE;
|
||||
|
||||
static int const INISECTIONBUFCNT = 32; // .ini file load buffer in KB
|
||||
|
||||
static TBBUTTON s_tbbMainWnd[] = {
|
||||
@ -765,11 +763,6 @@ static void _CleanUpResources(const HWND hwnd, bool bIsInitialized)
|
||||
|
||||
FreeLanguageResources();
|
||||
|
||||
if (s_hRichEdit) {
|
||||
FreeLibrary(s_hRichEdit);
|
||||
s_hRichEdit = INVALID_HANDLE_VALUE;
|
||||
}
|
||||
|
||||
if (bIsInitialized) {
|
||||
UnregisterClass(s_wchWndClass, Globals.hInstance);
|
||||
}
|
||||
@ -862,6 +855,9 @@ int WINAPI wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance,
|
||||
|
||||
Scintilla_RegisterClasses(hInstance);
|
||||
|
||||
//SetProcessDPIAware(); -> .manifest
|
||||
//SetThreadDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE);
|
||||
|
||||
// ----------------------------------------------------
|
||||
// MultiLingual
|
||||
//
|
||||
@ -869,11 +865,6 @@ int WINAPI wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance,
|
||||
|
||||
// ----------------------------------------------------
|
||||
|
||||
if (s_hRichEdit == INVALID_HANDLE_VALUE) {
|
||||
//s_hRichEdit = LoadLibrary(L"RICHED20.DLL"); // Use RICHEDIT_CONTROL_VER for control in common_res.h
|
||||
s_hRichEdit = LoadLibrary(L"MSFTEDIT.DLL"); // Use "RichEdit50W" for control in common_res.h
|
||||
}
|
||||
|
||||
int const cxs = GetSystemMetrics(SM_CXSMICON);
|
||||
int const cys = GetSystemMetrics(SM_CYSMICON);
|
||||
|
||||
@ -1223,7 +1214,7 @@ HWND InitInstance(HINSTANCE hInstance,LPCWSTR pszCmdLine,int nCmdShow)
|
||||
if ((Settings.AlwaysOnTop || s_flagAlwaysOnTop == 2) && s_flagAlwaysOnTop != 1) {
|
||||
SetWindowPos(Globals.hwndMain, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
|
||||
}
|
||||
//UpdateWindowLayoutForDPI(Globals.hwndMain, 0, 0, 0, 0);
|
||||
//~UpdateWindowLayoutForDPI(Globals.hwndMain, 0, 0, 0, 0);
|
||||
|
||||
if (Globals.hIcon128) {
|
||||
SendMessage(Globals.hwndMain, WM_SETICON, ICON_BIG, (LPARAM)Globals.hIcon128);
|
||||
@ -2188,7 +2179,7 @@ static HIMAGELIST CreateScaledImageListFromBitmap(HWND hWnd, HBITMAP hBmp)
|
||||
int const cx = (bmp.bmWidth - mod) / NUMTOOLBITMAPS;
|
||||
int const cy = bmp.bmHeight;
|
||||
|
||||
HIMAGELIST himl = ImageList_Create(cx, cy, ILC_COLOR32 | ILC_MASK, 0, 0);
|
||||
HIMAGELIST himl = ImageList_Create(cx, cy, ILC_COLOR32 | ILC_MASK, NUMTOOLBITMAPS, NUMTOOLBITMAPS);
|
||||
ImageList_AddMasked(himl, hBmp, CLR_DEFAULT);
|
||||
|
||||
DPI_T dpi = GetCurrentDPI(hWnd);
|
||||
@ -2200,10 +2191,10 @@ static HIMAGELIST CreateScaledImageListFromBitmap(HWND hWnd, HBITMAP hBmp)
|
||||
|
||||
|
||||
// Scale button icons/images
|
||||
int const scx = ScaleIntToCurrentDPIX(hWnd, cx);
|
||||
int const scy = ScaleIntToCurrentDPIX(hWnd, cy);
|
||||
int const scx = ScaleIntToDPI_X(hWnd, cx);
|
||||
int const scy = ScaleIntToDPI_Y(hWnd, cy);
|
||||
|
||||
HIMAGELIST hsciml = ImageList_Create(scx, scy, ILC_COLOR32 | ILC_MASK | ILC_HIGHQUALITYSCALE, 0, 0);
|
||||
HIMAGELIST hsciml = ImageList_Create(scx, scy, ILC_COLOR32 | ILC_MASK | ILC_HIGHQUALITYSCALE, NUMTOOLBITMAPS, NUMTOOLBITMAPS);
|
||||
|
||||
for (int i = 0; i < NUMTOOLBITMAPS; ++i)
|
||||
{
|
||||
@ -3375,7 +3366,6 @@ LRESULT MsgInitMenu(HWND hwnd, WPARAM wParam, LPARAM lParam)
|
||||
CheckCmd(hmenu, IDM_VIEW_STATUSBAR, Settings.ShowStatusbar);
|
||||
CheckCmd(hmenu, IDM_VIEW_DPISCALETB, Settings.DpiScaleToolBar);
|
||||
|
||||
|
||||
//i = SciCall_GetLexer();
|
||||
//EnableCmd(hmenu,IDM_VIEW_AUTOCLOSETAGS,(i == SCLEX_HTML || i == SCLEX_XML));
|
||||
CheckCmd(hmenu, IDM_VIEW_AUTOCLOSETAGS, Settings.AutoCloseTags /*&& (i == SCLEX_HTML || i == SCLEX_XML)*/);
|
||||
@ -3543,7 +3533,6 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
|
||||
MarkAllOccurrences(Settings2.UpdateDelayMarkAllOccurrences, false);
|
||||
break;
|
||||
|
||||
|
||||
case IDT_TIMER_UPDATE_STATUSBAR:
|
||||
_UpdateStatusbarDelayed((bool)lParam);
|
||||
break;
|
||||
@ -5604,7 +5593,14 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
|
||||
break;
|
||||
|
||||
case IDM_HELP_ABOUT:
|
||||
{
|
||||
//~HMODULE hRichEdit = LoadLibrary(L"RICHED20.DLL"); // Use RICHEDIT_CONTROL_VER for control in common_res.h
|
||||
HMODULE hRichEdit = LoadLibrary(L"MSFTEDIT.DLL"); // Use "RichEdit50W" for control in common_res.h;
|
||||
if (hRichEdit != INVALID_HANDLE_VALUE) {
|
||||
ThemedDialogBox(Globals.hLngResContainer, MAKEINTRESOURCE(IDD_MUI_ABOUT), hwnd, AboutDlgProc);
|
||||
FreeLibrary(hRichEdit);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case IDM_SETPASS:
|
||||
@ -8824,7 +8820,6 @@ static void _UpdateStatusbarDelayed(bool bForceRedraw)
|
||||
StatusSetText(Globals.hwndStatus, cnt++, tchStatusBar[id]);
|
||||
}
|
||||
}
|
||||
//InvalidateRect(Globals.hwndStatus,NULL,true);
|
||||
}
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
@ -9336,9 +9331,10 @@ bool FileIO(bool fLoad,LPWSTR pszFileName,
|
||||
{
|
||||
WCHAR tch[MAX_PATH + 40];
|
||||
FormatLngStringW(tch, COUNTOF(tch), (fLoad) ? IDS_MUI_LOADFILE : IDS_MUI_SAVEFILE, PathFindFileName(pszFileName));
|
||||
bool fSuccess = false;
|
||||
|
||||
BeginWaitCursor(tch);
|
||||
|
||||
bool fSuccess = false;
|
||||
if (fLoad) {
|
||||
fSuccess = EditLoadFile(Globals.hwndEdit,pszFileName,bSkipUnicodeDetect,bSkipANSICPDetection,bForceEncDetection,bSetSavePoint,status);
|
||||
}
|
||||
@ -9689,6 +9685,7 @@ bool FileLoad(bool bDontSave, bool bNew, bool bReload,
|
||||
}
|
||||
|
||||
EndWaitCursor();
|
||||
|
||||
UpdateAllBars(true);
|
||||
|
||||
return fSuccess;
|
||||
|
||||
@ -1639,7 +1639,7 @@ void Style_HighlightCurrentLine(HWND hwnd, int iHiLitCurLn)
|
||||
if (!Style_StrGetSizeInt(szValue, &iFrameSize)) {
|
||||
iFrameSize = 2;
|
||||
}
|
||||
iFrameSize = max_i(1, ScaleIntToCurrentDPIY(hwnd, iFrameSize));
|
||||
iFrameSize = max_i(1, ScaleIntToDPI_Y(hwnd, iFrameSize));
|
||||
SendMessage(hwnd, SCI_SETCARETLINEFRAME, iFrameSize, 0);
|
||||
}
|
||||
|
||||
|
||||
@ -9,11 +9,11 @@
|
||||
#define VERSION_MAJOR 5
|
||||
#define VERSION_MINOR 20
|
||||
#define VERSION_REV 309
|
||||
#define VERSION_BUILD 2
|
||||
#define VERSION_BUILD 3
|
||||
#define SCINTILLA_VER 432
|
||||
#define ONIGURUMA_REGEX_VER 6.9.4
|
||||
#define UCHARDET_VER 2018.09.27
|
||||
#define TINYEXPR_VER 2018.05.11
|
||||
#define UTHASH_VER 2.1.0
|
||||
#define VERSION_PATCH RC3
|
||||
#define VERSION_COMMIT_ID dkt1-amr
|
||||
#define VERSION_COMMIT_ID nebukadn
|
||||
|
||||
Loading…
Reference in New Issue
Block a user