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 ++++---- 4 files changed, 19 insertions(+), 8 deletions(-) (limited to 'alf') 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; -- cgit v1.2.3