summaryrefslogtreecommitdiff
path: root/alf/alflabel.cpp
diff options
context:
space:
mode:
authorJonas Kümmerlin <jonas@kuemmerlin.eu>2020-04-23 15:07:21 +0200
committerJonas Kümmerlin <jonas@kuemmerlin.eu>2020-04-23 15:07:21 +0200
commit51daba89072cb66fe5e43015484a554555a40499 (patch)
tree372502daebee3c3f3b2cfa68047e03f164f3d95c /alf/alflabel.cpp
parentd17d8f49777d802b56aa332077afbfa83af691e1 (diff)
changed DPI handling: dpi is now pushed into every control and saved there
Diffstat (limited to 'alf/alflabel.cpp')
-rw-r--r--alf/alflabel.cpp28
1 files changed, 19 insertions, 9 deletions
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;
}