X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c1637c8933a99cbce15d896ea43d741a14b8155a..5e0526df034ebceefc8e6ab813e32e38a9ac90ff:/src/msw/notebook.cpp diff --git a/src/msw/notebook.cpp b/src/msw/notebook.cpp index 7b5b6de8e5..e738530676 100644 --- a/src/msw/notebook.cpp +++ b/src/msw/notebook.cpp @@ -34,6 +34,7 @@ #include "wx/control.h" #include "wx/notebook.h" #include "wx/app.h" +#include "wx/sysopt.h" #include "wx/msw/private.h" @@ -295,6 +296,15 @@ bool wxNotebook::Create(wxWindow *parent, if ( !MSWCreateControl(className, wxEmptyString, pos, size) ) return false; + if (HasFlag(wxNB_NOPAGETHEME) || (wxSystemOptions::HasOption(wxT("msw.notebook.themed-background")) && + wxSystemOptions::GetOptionInt(wxT("msw.notebook.themed-background")) == 0)) + { + wxColour col = GetThemeBackgroundColour(); + if (col.Ok()) + { + SetBackgroundColour(col); + } + } return true; } @@ -470,7 +480,7 @@ wxSize wxNotebook::CalcSizeFromPage(const wxSize& sizePage) const wxSize sizeTotal = sizePage; // We need to make getting tab size part of the wxWidgets API. - wxSize tabSize(0, 0); + wxSize tabSize; if (GetPageCount() > 0) { RECT rect; @@ -617,7 +627,7 @@ bool wxNotebook::InsertPage(size_t nPage, } // and the text - if ( !strText.IsEmpty() ) + if ( !strText.empty() ) { tcItem.mask |= TCIF_TEXT; tcItem.pszText = (wxChar *)strText.c_str(); // const_cast @@ -681,6 +691,7 @@ bool wxNotebook::InsertPage(size_t nPage, SetSelection(selNew); InvalidateBestSize(); + return true; } @@ -991,8 +1002,82 @@ wxColour wxNotebook::MSWGetBgColourForChild(wxWindow *win) return c == CLR_INVALID ? wxNullColour : wxRGBToColour(c); } +bool +wxNotebook::MSWPrintChild(wxWindow *win, + WXWPARAM wParam, + WXLPARAM WXUNUSED(lParam)) +{ + RECT rc; + ::GetClientRect(GetHwnd(), &rc); + TabCtrl_AdjustRect(GetHwnd(), true, &rc); + ::MapWindowPoints(GetHwnd(), GetHwndOf(win), (POINT *)&rc, 2); + + wxUxThemeHandle theme(win, L"TAB"); + if ( theme ) + { + wxUxThemeEngine::Get()->DrawThemeBackground + ( + theme, + (WXHDC)wParam, + 9 /* TABP_PANE */, + 0, + &rc, + NULL + ); + } + + return true; +} + +#endif // wxUSE_UXTHEME + +// Windows only: attempts to get colour for UX theme page background +wxColour wxNotebook::GetThemeBackgroundColour() const +{ +#if wxUSE_UXTHEME + if (wxUxThemeEngine::Get()) + { + wxUxThemeHandle hTheme((wxNotebook*) this, L"TAB"); + if (hTheme) + { + // This is total guesswork. + // See PlatformSDK\Include\Tmschema.h for values + COLORREF themeColor; + wxUxThemeEngine::Get()->GetThemeColor( + hTheme, + 10 /* TABP_BODY */, + 1 /* NORMAL */, + 3821 /* FILLCOLORHINT */, + &themeColor); + + /* + [DS] Workaround for WindowBlinds: + Some themes return a near black theme color using FILLCOLORHINT, + this makes notebook pages have an ugly black background and makes + text (usually black) unreadable. Retry again with FILLCOLOR. + + This workaround potentially breaks appearance of some themes, + but in practice it already fixes some themes. + */ + if (themeColor == 1) + { + wxUxThemeEngine::Get()->GetThemeColor( + hTheme, + 10 /* TABP_BODY */, + 1 /* NORMAL */, + 3802 /* FILLCOLOR */, + &themeColor); + } + + wxColour colour(GetRValue(themeColor), GetGValue(themeColor), GetBValue(themeColor)); + return colour; + } + } #endif // wxUSE_UXTHEME + return GetBackgroundColour(); +} + // ---------------------------------------------------------------------------- // wxNotebook base class virtuals // ----------------------------------------------------------------------------