X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/bd507486e07b742bb7acb118811efd60ee027859..c57c2993ecaa4acf32585f18e0185ea00bb34981:/src/msw/notebook.cpp diff --git a/src/msw/notebook.cpp b/src/msw/notebook.cpp index e04027b7da..7e3bbcbd49 100644 --- a/src/msw/notebook.cpp +++ b/src/msw/notebook.cpp @@ -22,7 +22,7 @@ #if wxUSE_NOTEBOOK -// wxWindows +// wxWidgets #ifndef WX_PRECOMP #include "wx/string.h" #endif // WX_PRECOMP @@ -167,7 +167,7 @@ wxBEGIN_PROPERTIES_TABLE(wxNotebook) wxEVENT_PROPERTY( PageChanged , wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED , wxNotebookEvent ) wxPROPERTY_COLLECTION( PageInfos , wxNotebookPageInfoList , wxNotebookPageInfo* , AddPageInfo , GetPageInfos , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) - wxPROPERTY_FLAGS( WindowStyle , wxNotebookStyle , long , SetWindowStyleFlag , GetWindowStyleFlag , , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) // style + wxPROPERTY_FLAGS( WindowStyle , wxNotebookStyle , long , SetWindowStyleFlag , GetWindowStyleFlag , EMPTY_MACROVALUE , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) // style wxEND_PROPERTIES_TABLE() wxBEGIN_HANDLERS_TABLE(wxNotebook) @@ -177,7 +177,7 @@ wxCONSTRUCTOR_5( wxNotebook , wxWindow* , Parent , wxWindowID , Id , wxPoint , P wxBEGIN_PROPERTIES_TABLE(wxNotebookPageInfo) - wxREADONLY_PROPERTY( Page , wxNotebookPage* , GetPage , , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) + wxREADONLY_PROPERTY( Page , wxNotebookPage* , GetPage , EMPTY_MACROVALUE , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) wxREADONLY_PROPERTY( Text , wxString , GetText , wxString() , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) wxREADONLY_PROPERTY( Selected , bool , GetSelected , false, 0 /*flags*/ , wxT("Helpstring") , wxT("group") ) wxREADONLY_PROPERTY( ImageId , int , GetImageId , -1 , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) @@ -438,7 +438,7 @@ wxSize wxNotebook::CalcSizeFromPage(const wxSize& sizePage) const { wxSize sizeTotal = sizePage; - // We need to make getting tab size part of the wxWindows API. + // We need to make getting tab size part of the wxWidgets API. wxSize tabSize(0, 0); if (GetPageCount() > 0) { @@ -471,9 +471,18 @@ void wxNotebook::AdjustPageSize(wxNotebookPage *page) // get the page size from the notebook size GetSize((int *)&rc.right, (int *)&rc.bottom); - TabCtrl_AdjustRect(m_hwnd, false, &rc); - page->SetSize(rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top); + // This check is to work around a bug in TabCtrl_AdjustRect which will + // cause a crash on win2k, or on XP with themes disabled, if the + // wxNB_MULTILINE style is used and the rectangle is very small, (such as + // when the notebook is first created.) The value of 20 is just + // arbitrarily chosen, if there is a better way to determine this value + // then please do so. --RD + if (rc.right > 20 && rc.bottom > 20) + { + TabCtrl_AdjustRect(m_hwnd, false, &rc); + page->SetSize(rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top); + } } // ---------------------------------------------------------------------------- @@ -544,6 +553,7 @@ bool wxNotebook::DeleteAllPages() m_nSelection = -1; + InvalidateBestSize(); return true; } @@ -660,6 +670,7 @@ bool wxNotebook::InsertPage(size_t nPage, if ( selNew != -1 ) SetSelection(selNew); + InvalidateBestSize(); return true; } @@ -946,9 +957,28 @@ wxColour wxNotebook::GetThemeBackgroundColour() hTheme, 10 /* TABP_BODY */, 1 /* NORMAL */, - 3802 /* color of bg fill */, + 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; } @@ -966,19 +996,9 @@ void wxNotebook::ApplyThemeBackground(wxWindow*, const wxColour&) #endif { #if wxUSE_UXTHEME - // Special case for wxButton: Don't set the background for buttons since - // this will switch it into ownerdraw mode - if (window->IsKindOf(CLASSINFO(wxButton)) && !window->IsKindOf(CLASSINFO(wxBitmapButton))) - // This is essential, otherwise you'll see dark grey - // corners in the buttons. - ((wxButton*)window)->wxControl::SetBackgroundColour(colour); - - // for all other classes let them decide - else if ((window != this) && window->CanApplyParentThemeBackground()) - { - window->SetBackgroundColour(colour); - } + window->ApplyParentThemeBackground(colour); + for ( wxWindowList::compatibility_iterator node = window->GetChildren().GetFirst(); node; node = node->GetNext() ) { wxWindow *child = node->GetData();