summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonas Kümmerlin <jonas@kuemmerlin.eu>2020-04-22 21:17:44 +0200
committerJonas Kümmerlin <jonas@kuemmerlin.eu>2020-04-22 21:20:47 +0200
commita61c62ff6d9e95c9cc9a0f55de8e40b8e7339007 (patch)
tree022c6ad4e99eaf592ad5c22970efb1b64afb04ff
parentf81e1371de63c0bd4c0ae77cbba0fed908fd58b2 (diff)
label: allow custom background color
-rw-r--r--alf/alf.h3
-rw-r--r--alf/alflabel.cpp30
-rw-r--r--widgetfactory.cpp3
3 files changed, 30 insertions, 6 deletions
diff --git a/alf/alf.h b/alf/alf.h
index 0d336c9..721a2e5 100644
--- a/alf/alf.h
+++ b/alf/alf.h
@@ -217,7 +217,8 @@ ALF_UpdateFonts(HWND win);
// Only the following widgets have background colors:
// - Top-Level window
// - Panel
-// TODO fix label, button
+// - Label
+// TODO: button, ...
void
ALF_SetBackgroundColor(HWND win, ALFColor color);
diff --git a/alf/alflabel.cpp b/alf/alflabel.cpp
index 8a878a0..dbb6367 100644
--- a/alf/alflabel.cpp
+++ b/alf/alflabel.cpp
@@ -3,8 +3,9 @@
/* LABEL */
typedef struct {
- DWORD style;
- HFONT font;
+ DWORD style;
+ HFONT font;
+ ALFColor bgcolor;
} ALFLabelPriv;
TCHAR *_alf_labelClass;
@@ -90,7 +91,11 @@ ALF__LabelWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
- ALF_Compat_DrawThemeParentBackground(hwnd, hdc, &ps.rcPaint);
+ if (priv->bgcolor == ALF_COLOR_TRANSPARENT) {
+ ALF_Compat_DrawThemeParentBackground(hwnd, hdc, &ps.rcPaint);
+ } else {
+ ALF_FillRect(hdc, &ps.rcPaint, priv->bgcolor);
+ }
HFONT oldFont = NULL;
if (priv->font)
@@ -216,6 +221,22 @@ ALF__LabelWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
InvalidateRect(hwnd, NULL, TRUE);
}
}
+ } else if (uMsg == ALF_WM_BACKGROUNDCHANGE) {
+ if (priv->bgcolor == ALF_COLOR_TRANSPARENT) {
+ InvalidateRect(hwnd, NULL, TRUE);
+ }
+ return TRUE;
+ } else if (uMsg == ALF_WM_SETBGCOLOR) {
+ ALFColor newcolor = (ALFColor)lParam;
+ if (priv->bgcolor == newcolor)
+ return TRUE;
+
+ priv->bgcolor = newcolor;
+ InvalidateRect(hwnd, NULL, TRUE);
+
+ return TRUE;
+ } else if (uMsg == ALF_WM_GETBGCOLOR) {
+ return (LRESULT)priv->bgcolor;
} else if (uMsg == WM_DESTROY) {
ALF_Free(priv);
SetWindowLongPtr(hwnd, 0, 0);
@@ -238,9 +259,10 @@ ALF_AddLabel(HWND win, WORD id, int x, int y, const TCHAR *text)
ALFLabelPriv *priv = ALF_New(ALFLabelPriv, 1);
priv->style = ALF_LABEL_ALIGN_LEFT | ALF_LABEL_ALIGN_TOP_LIKE_EDIT;
+ priv->bgcolor = ALF_COLOR_SYS(COLOR_BTNFACE);
SetWindowLongPtr(hwndLabel, 0, (LONG_PTR)priv);
- ALF_AddWidget(win, x, y, hwndLabel, 0, 0, ALF_LAYOUT_SIZE_QUERY | ALF_LAYOUT_INHERITFONT | ALF_LAYOUT_TRANSPARENTBG);
+ ALF_AddWidget(win, x, y, hwndLabel, 0, 0, ALF_LAYOUT_SIZE_QUERY | ALF_LAYOUT_INHERITFONT | ALF_LAYOUT_INHERITBGCOLOR | ALF_LAYOUT_SENDBGCHANGE);
return hwndLabel;
}
diff --git a/widgetfactory.cpp b/widgetfactory.cpp
index e03c7fc..8d240d7 100644
--- a/widgetfactory.cpp
+++ b/widgetfactory.cpp
@@ -293,7 +293,8 @@ WinMain
ALF_ComboBoxAddString(hwndCombo2, TEXT("Goodbye World!"));
ALF_ComboBoxAddString(hwndCombo2, TEXT("The quick brown fox jumps over the lazy dog"));
- ALF_AddLabel(win, ID_LBL6, 0, 5, TEXT("[ComboBox2 value]"));
+ HWND hwndLbl6 = ALF_AddLabel(win, ID_LBL6, 0, 5, TEXT("[ComboBox2 value]"));
+ ALF_SetBackgroundColor(hwndLbl6, ALF_COLOR_RGB(0, 0, 255));
//ALF_AddWidgetLayoutFlag(win, ALF_WidgetHwndById(win, ID_LBL6), ALF_VEXPAND);
//ALF_AddWidgetLayoutFlag(win, ALF_WidgetHwndById(win, ID_B1), ALF_HEXPAND);