From 51daba89072cb66fe5e43015484a554555a40499 Mon Sep 17 00:00:00 2001 From: Jonas Kümmerlin Date: Thu, 23 Apr 2020 15:07:21 +0200 Subject: changed DPI handling: dpi is now pushed into every control and saved there --- alf/alflabel.cpp | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) (limited to 'alf/alflabel.cpp') diff --git a/alf/alflabel.cpp b/alf/alflabel.cpp index 37f1e83..13c86ae 100644 --- a/alf/alflabel.cpp +++ b/alf/alflabel.cpp @@ -7,27 +7,32 @@ typedef struct { HFONT font; ALFColor bgcolor; ALFColor textcolor; + int dpi; } ALFLabelPriv; TCHAR *_alf_labelClass; static int -ALF__LabelTopPadding(HWND hwnd) +ALF__LabelTopPadding(HWND hwnd, ALFLabelPriv *priv) { + (void)hwnd; + // some pixels on top to align with the edit control // see also: alfedit.cpp return ALF_Compat_GetSystemMetricsForDpi( - SM_CYEDGE, (UINT)ALF_CentipointsToPixels(GetParent(hwnd), 7200)) + SM_CYEDGE, (UINT)priv->dpi) + (!ALF_Compat_IsMinWindowsVersion(4, 0) ? 2 : 1) /* internal padding in edit control */; } static int -ALF__LabelLeftPadding(HWND hwnd, HDC hdc) +ALF__LabelLeftPadding(HWND hwnd, HDC hdc, ALFLabelPriv *priv) { + (void)hwnd; + // some pixels on the left to align with the edit control // see also: alfedit.cpp int p = ALF_Compat_GetSystemMetricsForDpi( - SM_CXEDGE, (UINT)ALF_CentipointsToPixels(GetParent(hwnd), 7200)); + SM_CXEDGE, (UINT)priv->dpi); p += 1; @@ -98,9 +103,9 @@ ALF_Label_Paint(HWND hwnd, ALFLabelPriv *priv, HDC hdc, RECT *r) } if ((priv->style & ALF_LABEL_HALIGN_MASK) == ALF_LABEL_ALIGN_LEFT_LIKE_EDIT) - rc.left += ALF__LabelLeftPadding(hwnd, hdc); + rc.left += ALF__LabelLeftPadding(hwnd, hdc, priv); if ((priv->style & ALF_LABEL_VALIGN_MASK) == ALF_LABEL_ALIGN_TOP_LIKE_EDIT) - rc.top += ALF__LabelTopPadding(hwnd); + rc.top += ALF__LabelTopPadding(hwnd, priv); TCHAR *text = ALF_Text(hwnd); @@ -160,12 +165,12 @@ ALF_Label_CalculateSize(HWND hwnd, ALFLabelPriv *priv, SIZE *pSize) if (pSize->cx == 0) { pSize->cx = r.right - r.left; if ((priv->style & ALF_LABEL_HALIGN_MASK) == ALF_LABEL_ALIGN_LEFT_LIKE_EDIT) - pSize->cx += ALF__LabelLeftPadding(hwnd, hdcLabel); + pSize->cx += ALF__LabelLeftPadding(hwnd, hdcLabel, priv); } if (pSize->cy == 0) { pSize->cy = r.bottom - r.top; if ((priv->style & ALF_LABEL_VALIGN_MASK) == ALF_LABEL_ALIGN_TOP_LIKE_EDIT) - pSize->cy += ALF__LabelTopPadding(hwnd); + pSize->cy += ALF__LabelTopPadding(hwnd, priv); } SelectFont(hdcLabel, oldFont); @@ -275,6 +280,10 @@ ALF__LabelWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) return TRUE; } else if (uMsg == ALF_WM_GETTEXTCOLOR) { return (LRESULT)priv->textcolor; + } else if (uMsg == ALF_WM_DPICHANGE) { + priv->dpi = (int)lParam; + ALF_InvalidateLayout(GetParent(hwnd)); + return TRUE; } else if (uMsg == WM_DESTROY) { ALF_Free(priv); SetWindowLongPtr(hwnd, 0, 0); @@ -299,9 +308,10 @@ ALF_AddLabel(HWND win, WORD id, int x, int y, const TCHAR *text) priv->style = ALF_LABEL_ALIGN_LEFT | ALF_LABEL_ALIGN_TOP_LIKE_EDIT; priv->bgcolor = ALF_COLOR_SYS(COLOR_BTNFACE); priv->textcolor = ALF_COLOR_SYS(COLOR_BTNTEXT); + priv->dpi = 96; SetWindowLongPtr(hwndLabel, 0, (LONG_PTR)priv); - ALF_AddWidget(win, x, y, hwndLabel, 0, 0, ALF_LAYOUT_SIZE_QUERY | ALF_LAYOUT_INHERITFONT | ALF_LAYOUT_INHERITBGCOLOR | ALF_LAYOUT_SENDBGCHANGE); + ALF_AddWidget(win, x, y, hwndLabel, 0, 0, ALF_LAYOUT_SIZE_QUERY | ALF_LAYOUT_INHERITFONT | ALF_LAYOUT_INHERITBGCOLOR | ALF_LAYOUT_SENDBGCHANGE | ALF_LAYOUT_SENDDPICHANGE); return hwndLabel; } -- cgit v1.2.3