diff options
| author | Jonas Kümmerlin <jonas@kuemmerlin.eu> | 2020-04-18 17:34:55 +0200 |
|---|---|---|
| committer | Jonas Kümmerlin <jonas@kuemmerlin.eu> | 2020-04-18 17:34:55 +0200 |
| commit | 479d1226faaa937ef6820b14f36099ef3f575883 (patch) | |
| tree | 10e5560fb8bae6c317ca06564c9609c3c498503e /alf/alfnotebook.cpp | |
| parent | 4054b17c661d2e709895e8235e9dce6edaa61e4f (diff) | |
implement background color
reduce flickering by keeping pixels if we know the background didn't change
panel text is now gone, it would require us to redraw every transparent
widget on top, which is a bad tradeoff since that panel text isn't very
useful anyway.
Diffstat (limited to 'alf/alfnotebook.cpp')
| -rw-r--r-- | alf/alfnotebook.cpp | 33 |
1 files changed, 25 insertions, 8 deletions
diff --git a/alf/alfnotebook.cpp b/alf/alfnotebook.cpp index dc56769..ddc37b3 100644 --- a/alf/alfnotebook.cpp +++ b/alf/alfnotebook.cpp @@ -90,21 +90,38 @@ ALF_Notebook_InternalHandleThemeChange(HWND hwndNotebook, ALFNotebookPriv *priv) InvalidateRect(hwndNotebook, NULL, TRUE); ALF_InvalidateLayout(hwndNotebook); + + int n = ALF_Notebook_InternalTabCount(hwndNotebook, priv->hwndTabCtrl); + for (int i = 0; i < n; ++i) { + HWND panel = ALF_Notebook_InternalTabPanel(hwndNotebook, priv->hwndTabCtrl, i); + + if (priv->hTheme) { + SendMessage(panel, ALF_WM_SETBGCOLOR, (WPARAM)ALF_COLOR_TRANSPARENT, 0); + } else { + SendMessage(panel, ALF_WM_SETBGCOLOR, (WPARAM)ALF_COLOR_SYS(COLOR_BTNFACE), 0); + } + } } static HWND -ALF_Notebook_InternalAddTab(HWND notebook, HWND tabControl, const TCHAR *title) +ALF_Notebook_InternalAddTab(HWND notebook, ALFNotebookPriv *priv, const TCHAR *title) { RECT r; - GetClientRect(tabControl, &r); - TabCtrl_AdjustRect(tabControl, FALSE, &r); - MapWindowRect(tabControl, notebook, &r); + GetClientRect(priv->hwndTabCtrl, &r); + TabCtrl_AdjustRect(priv->hwndTabCtrl, FALSE, &r); + MapWindowRect(priv->hwndTabCtrl, notebook, &r); HWND hwndPanel = ALF_CreatePanelWindow(notebook, (WORD)-1); SetWindowPos(hwndPanel, NULL, r.left, r.top, r.right - r.left, r.bottom - r.top, SWP_HIDEWINDOW|SWP_NOACTIVATE|SWP_NOZORDER|SWP_NOOWNERZORDER); - SendMessage(hwndPanel, WM_SETFONT, (WPARAM)SendMessage(tabControl, WM_GETFONT, 0, 0), 0); + SendMessage(hwndPanel, WM_SETFONT, (WPARAM)SendMessage(priv->hwndTabCtrl, WM_GETFONT, 0, 0), 0); + + if (priv->hTheme) { + SendMessage(hwndPanel, ALF_WM_SETBGCOLOR, (WPARAM)ALF_COLOR_TRANSPARENT, 0); + } else { + SendMessage(hwndPanel, ALF_WM_SETBGCOLOR, (WPARAM)ALF_COLOR_SYS(COLOR_BTNFACE), 0); + } TCITEM tie; ZeroMemory(&tie, sizeof(tie)); @@ -113,8 +130,8 @@ ALF_Notebook_InternalAddTab(HWND notebook, HWND tabControl, const TCHAR *title) tie.pszText = (TCHAR*)title; tie.lParam = (LPARAM)hwndPanel; - TabCtrl_InsertItem(tabControl, ALF_Notebook_InternalTabCount(notebook, tabControl), &tie); - ALF_Notebook_InternalHandleTabChange(notebook, tabControl); + TabCtrl_InsertItem(priv->hwndTabCtrl, ALF_Notebook_InternalTabCount(notebook, priv->hwndTabCtrl), &tie); + ALF_Notebook_InternalHandleTabChange(notebook, priv->hwndTabCtrl); ALF_InvalidateLayout(notebook); @@ -266,7 +283,7 @@ ALF__NotebookWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) } } } else if (uMsg == ALF_NB_ADDTAB) { - return (LRESULT)ALF_Notebook_InternalAddTab(hwnd, priv->hwndTabCtrl, (TCHAR *)lParam); + return (LRESULT)ALF_Notebook_InternalAddTab(hwnd, priv, (TCHAR *)lParam); } else if (uMsg == ALF_NB_TABCOUNT) { return (LRESULT)ALF_Notebook_InternalTabCount(hwnd, priv->hwndTabCtrl); } else if (uMsg == ALF_NB_GETPANEL) { |
