X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c1637c8933a99cbce15d896ea43d741a14b8155a..1eeb64fb65f7e6cf10b05ba8a0875206cf47d94c:/src/msw/notebook.cpp diff --git a/src/msw/notebook.cpp b/src/msw/notebook.cpp index 7b5b6de8e5..db34763fd5 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; } @@ -993,6 +1004,53 @@ wxColour wxNotebook::MSWGetBgColourForChild(wxWindow *win) #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 // ----------------------------------------------------------------------------