summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--alf/alf.cpp7
-rw-r--r--alf/alf.h8
-rw-r--r--alf/alflayout.cpp4
-rw-r--r--alf/alfnotebook.cpp8
-rw-r--r--widgetfactory.cpp6
5 files changed, 22 insertions, 11 deletions
diff --git a/alf/alf.cpp b/alf/alf.cpp
index 3bf9ae7..a23bdf0 100644
--- a/alf/alf.cpp
+++ b/alf/alf.cpp
@@ -449,11 +449,16 @@ ALF_InvalidateBackground(HWND win)
void
ALF_SetBackgroundColor(HWND win, ALFColor color)
{
+ HWND parent = GetParent(win);
+ if (parent) {
+ ALF_RemoveWidgetLayoutFlag(parent, win, ALF_LAYOUT_INHERITBGCOLOR);
+ }
+
SendMessage(win, ALF_WM_SETBGCOLOR, 0, (LPARAM)color);
}
ALFColor
-ALF_GetBackgroundColor(HWND win)
+ALF_BackgroundColor(HWND win)
{
return (ALFColor)SendMessage(win, ALF_WM_GETBGCOLOR, 0, 0);
}
diff --git a/alf/alf.h b/alf/alf.h
index bd8ca0e..32e221c 100644
--- a/alf/alf.h
+++ b/alf/alf.h
@@ -206,11 +206,17 @@ ALF_InvalidateBackground(HWND win);
void
ALF_UpdateFonts(HWND win);
+// Sets the background color of the given window
+// Also, if the window is a child window, disables the ALF_LAYOUT_INHERITBGCOLOR flag
+// Only the following widgets have background colors:
+// - Top-Level window
+// - Panel
+// TODO fix label, button
void
ALF_SetBackgroundColor(HWND win, ALFColor color);
ALFColor
-ALF_GetBackgroundColor(HWND win);
+ALF_BackgroundColor(HWND win);
void
ALF_ResizeWindow(HWND win, int cptWidth, int cptHeight);
diff --git a/alf/alflayout.cpp b/alf/alflayout.cpp
index 228e5b3..2dfe16d 100644
--- a/alf/alflayout.cpp
+++ b/alf/alflayout.cpp
@@ -444,7 +444,7 @@ ALF_Layout_AddWidget(ALFLayout* layout, HWND window, const ALFAddWidgetParams* p
ALF_Layout_ForwardFontToWidget(layout, window, w, (HFONT)SendMessage(window, WM_GETFONT, 0, 0), 0);
}
if (w->flags & ALF_LAYOUT_INHERITBGCOLOR) {
- ALF_SetBackgroundColor(w->hwnd, ALF_GetBackgroundColor(window));
+ SendMessage(w->hwnd, ALF_WM_SETBGCOLOR, 0, (LPARAM)ALF_BackgroundColor(window));
}
ALF_ListInsert(layout->widgets.prev, &w->list);
@@ -600,7 +600,7 @@ ALF_Layout_SetWidgetFlags(ALFLayout *layout, HWND window, HWND needle, DWORD fla
if (flags & ALF_LAYOUT_INHERITFONT)
ALF_Layout_ForwardFontToWidget(layout, window, w, (HFONT)SendMessage(window, WM_GETFONT, 0, 0), 0);
if (flags & ALF_LAYOUT_INHERITBGCOLOR)
- ALF_SetBackgroundColor(w->hwnd, ALF_GetBackgroundColor(window));
+ SendMessage(w->hwnd, ALF_WM_SETBGCOLOR, 0, (LPARAM)ALF_BackgroundColor(window));
ALF_Layout_Invalidate(layout, window);
diff --git a/alf/alfnotebook.cpp b/alf/alfnotebook.cpp
index a2a21f1..d1024e2 100644
--- a/alf/alfnotebook.cpp
+++ b/alf/alfnotebook.cpp
@@ -96,9 +96,9 @@ ALF_Notebook_InternalHandleThemeChange(HWND hwndNotebook, ALFNotebookPriv *priv)
HWND panel = ALF_Notebook_InternalTabPanel(hwndNotebook, priv->hwndTabCtrl, i);
if (priv->hTheme) {
- ALF_SetBackgroundColor(panel, ALF_COLOR_TRANSPARENT);
+ SendMessage(panel, ALF_WM_SETBGCOLOR, 0, (LPARAM)ALF_COLOR_TRANSPARENT);
} else {
- ALF_SetBackgroundColor(panel, ALF_COLOR_SYS(COLOR_BTNFACE));
+ SendMessage(panel, ALF_WM_SETBGCOLOR, 0, (LPARAM)ALF_COLOR_SYS(COLOR_BTNFACE));
}
}
}
@@ -118,9 +118,9 @@ ALF_Notebook_InternalAddTab(HWND notebook, ALFNotebookPriv *priv, const TCHAR *t
SendMessage(hwndPanel, WM_SETFONT, (WPARAM)SendMessage(priv->hwndTabCtrl, WM_GETFONT, 0, 0), 0);
if (priv->hTheme) {
- ALF_SetBackgroundColor(hwndPanel, ALF_COLOR_TRANSPARENT);
+ SendMessage(hwndPanel, ALF_WM_SETBGCOLOR, 0, (LPARAM)ALF_COLOR_TRANSPARENT);
} else {
- ALF_SetBackgroundColor(hwndPanel, ALF_COLOR_SYS(COLOR_BTNFACE));
+ SendMessage(hwndPanel, ALF_WM_SETBGCOLOR, 0, (LPARAM)ALF_COLOR_SYS(COLOR_BTNFACE));
}
TCITEM tie;
diff --git a/widgetfactory.cpp b/widgetfactory.cpp
index 3c8e35a..2457a84 100644
--- a/widgetfactory.cpp
+++ b/widgetfactory.cpp
@@ -80,7 +80,7 @@ handleCommand(void *closure, HWND window, WORD notificationcode, WORD sourceid,
MessageBox(window, TEXT("Hello World!"), TEXT("Hello"), MB_ICONASTERISK|MB_OK);
}
if (control != NULL && sourceid == ID_B3) {
- ALFColor oldcolor = ALF_GetBackgroundColor(window);
+ ALFColor oldcolor = ALF_BackgroundColor(window);
if (oldcolor == ALF_COLOR_TRANSPARENT) {
ALF_SetBackgroundColor(window, ALF_COLOR_SYS(COLOR_BTNFACE));
} else {
@@ -96,7 +96,7 @@ handlePaint(void *closure, HWND window, HDC dc, RECT *rcPaint)
{
(void)closure;
- ALFColor color = ALF_GetBackgroundColor(window);
+ ALFColor color = ALF_BackgroundColor(window);
if (color == ALF_COLOR_TRANSPARENT) {
RECT rcClient;
@@ -192,7 +192,7 @@ static void handleWindowPosChanged(void *closure, HWND window, WINDOWPOS *pos)
(void)closure;
if (!(pos->flags & SWP_NOSIZE)) {
- ALFColor bgcolor = ALF_GetBackgroundColor(window);
+ ALFColor bgcolor = ALF_BackgroundColor(window);
if (bgcolor == ALF_COLOR_TRANSPARENT)
ALF_InvalidateBackground(window);