summaryrefslogtreecommitdiff
path: root/alf/alflayout.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'alf/alflayout.cpp')
-rw-r--r--alf/alflayout.cpp31
1 files changed, 30 insertions, 1 deletions
diff --git a/alf/alflayout.cpp b/alf/alflayout.cpp
index c05d355..73b05a8 100644
--- a/alf/alflayout.cpp
+++ b/alf/alflayout.cpp
@@ -102,6 +102,18 @@ ALF_Layout_ForwardFont(ALFLayout *layout, HWND window, HFONT font, LPARAM redraw
}
}
+static void
+ALF_Layout_ForwardBgColor(ALFLayout *layout, HWND window, WPARAM wparam, LPARAM lparam)
+{
+ (void)window;
+
+ ALF_FOR_LIST(ALFWidgetPriv, list, &layout->widgets, i) {
+ if (i->flags & ALF_LAYOUT_INHERITBGCOLOR) {
+ SendMessage(i->hwnd, ALF_WM_SETBGCOLOR, wparam, lparam);
+ }
+ }
+}
+
void
ALF_Layout_EnsureRowExists(ALFLayout *layout, int rowno)
{
@@ -305,6 +317,8 @@ ALF_Layout_Apply(ALFLayout* layout, HWND window)
// now apply positions to widgets
HDWP hdwp = BeginDeferWindowPos(layout->nColumns * layout->nRows);
+ ALFColor bgcolor = (ALFColor)SendMessage(window, ALF_WM_GETBGCOLOR, 0, 0);
+
ALF_FOR_LIST(ALFWidgetPriv, list, &layout->widgets, c) {
int col = c->x;
int row = c->y;
@@ -320,10 +334,15 @@ ALF_Layout_Apply(ALFLayout* layout, HWND window)
if (c->flags & ALF_LAYOUT_CUSTOMPOS) {
hdwp = (HDWP)SendMessage(c->hwnd, ALF_WM_APPLYSIZE, (WPARAM)hdwp, (LPARAM)&r);
} else {
+ UINT flags = SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOOWNERZORDER;
+
+ if (bgcolor == ALF_COLOR_TRANSPARENT)
+ flags |= SWP_NOCOPYBITS;
+
hdwp = DeferWindowPos(hdwp,
c->hwnd, 0,
r.left, r.top, r.right - r.left, r.bottom - r.top,
- SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOCOPYBITS);
+ flags);
}
}
@@ -349,6 +368,9 @@ ALF_Layout_AddWidget(ALFLayout* layout, HWND window, const ALFAddWidgetParams* p
if (w->flags & ALF_LAYOUT_INHERITFONT) {
SendMessage(w->hwnd, WM_SETFONT, (WPARAM)SendMessage(window, WM_GETFONT, 0, 0), 0);
}
+ if (w->flags & ALF_LAYOUT_INHERITBGCOLOR) {
+ SendMessage(w->hwnd, ALF_WM_SETBGCOLOR, (WPARAM)SendMessage(window, ALF_WM_GETBGCOLOR, 0, 0), 0);
+ }
ALF_ListInsert(layout->widgets.prev, &w->list);
@@ -502,6 +524,8 @@ ALF_Layout_SetWidgetFlags(ALFLayout *layout, HWND window, HWND needle, DWORD fla
if (flags & ALF_LAYOUT_INHERITFONT)
SendMessage(w->hwnd, WM_SETFONT, (WPARAM)SendMessage(window, WM_GETFONT, 0, 0), 0);
+ if (flags & ALF_LAYOUT_INHERITBGCOLOR)
+ SendMessage(w->hwnd, ALF_WM_SETBGCOLOR, (WPARAM)SendMessage(window, ALF_WM_GETBGCOLOR, 0, 0), 0);
ALF_InvalidateLayout(window);
@@ -681,6 +705,11 @@ ALF_Layout_HandleMessage(ALFLayout *layout, HWND hwnd, UINT msg, WPARAM wparam,
return TRUE;
}
+ if (msg == ALF_WM_SETBGCOLOR) {
+ ALF_Layout_ForwardBgColor(layout, hwnd, wparam, lparam);
+ return TRUE;
+ }
+
if (msg == ALF_WM_INVALIDATELAYOUT) {
ALF_Layout_Invalidate(layout, hwnd);
return TRUE;