From 2765ee8bfc1fb0152ed2da324bdcb0a37f43c722 Mon Sep 17 00:00:00 2001 From: Jonas Kümmerlin Date: Tue, 21 Apr 2020 16:27:40 +0200 Subject: make ALF_SetBackgroundColor disable color inheritance --- alf/alf.cpp | 7 ++++++- alf/alf.h | 8 +++++++- alf/alflayout.cpp | 4 ++-- alf/alfnotebook.cpp | 8 ++++---- widgetfactory.cpp | 6 +++--- 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); -- cgit v1.2.3