X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b7081ff84f440249ead9c217d8ed5ec53e4b824c..133506215101bd8cffbf81e6c36944f7d5e2f8db:/src/msw/settings.cpp diff --git a/src/msw/settings.cpp b/src/msw/settings.cpp index 0092138732..eec4fea1a9 100644 --- a/src/msw/settings.cpp +++ b/src/msw/settings.cpp @@ -34,6 +34,7 @@ #include "wx/msw/private.h" #include "wx/msw/missing.h" // for SM_CXCURSOR, SM_CYCURSOR, SM_TABLETPC +#include "wx/msw/private/metrics.h" #ifndef SPI_GETFLATMENU #define SPI_GETFLATMENU 0x1022 @@ -90,8 +91,7 @@ bool wxSystemSettingsModule::OnInit() void wxSystemSettingsModule::OnExit() { - delete gs_fontDefault; - gs_fontDefault = NULL; + wxDELETE(gs_fontDefault); } // ---------------------------------------------------------------------------- @@ -208,7 +208,7 @@ wxColour wxSystemSettingsNative::GetColour(wxSystemColour index) colSys = ::GetSysColor(index); #endif } - + wxColour ret = wxRGBToColour(colSys); wxASSERT(ret.IsOk()); return ret; @@ -230,13 +230,6 @@ wxFont wxCreateFontFromStockObject(int index) { wxNativeFontInfo info; info.lf = lf; -#ifndef __WXWINCE__ - // We want Windows 2000 or later to have new fonts even MS Shell Dlg - // is returned as default GUI font for compatibility - int verMaj; - if(index == DEFAULT_GUI_FONT && wxGetOsVersion(&verMaj) == wxOS_WINDOWS_NT && verMaj >= 5) - wxStrcpy(info.lf.lfFaceName, wxT("MS Shell Dlg 2")); -#endif // Under MicroWindows we pass the HFONT as well // because it's hard to convert HFONT -> LOGFONT -> HFONT // It's OK to delete stock objects, the delete will be ignored. @@ -270,27 +263,34 @@ wxFont wxSystemSettingsNative::GetFont(wxSystemFont index) gs_fontDefault = new wxFont(wxCreateFontFromStockObject(SYSTEM_FONT)); } - wxASSERT(gs_fontDefault->IsOk() && + wxASSERT(gs_fontDefault->IsOk() && wxFontEnumerator::IsValidFacename(gs_fontDefault->GetFaceName())); return *gs_fontDefault; #else // !__WXWINCE__ // wxWindow ctor calls GetFont(wxSYS_DEFAULT_GUI_FONT) so we're // called fairly often -- this is why we cache this particular font - const bool isDefaultRequested = index == wxSYS_DEFAULT_GUI_FONT; - if ( isDefaultRequested ) + if ( index == wxSYS_DEFAULT_GUI_FONT ) { - if ( gs_fontDefault ) - return *gs_fontDefault; + if ( !gs_fontDefault ) + { + // http://blogs.msdn.com/oldnewthing/archive/2005/07/07/436435.aspx + // explains why neither SYSTEM_FONT nor DEFAULT_GUI_FONT should be + // used here + // + // the message box font seems to be the one which should be used + // for most (simple) controls, e.g. buttons and such but other + // controls may prefer to use lfStatusFont or lfCaptionFont if it + // is more appropriate for them + wxNativeFontInfo info; + info.lf = wxMSWImpl::GetNonClientMetrics().lfMessageFont; + gs_fontDefault = new wxFont(info); + } + + return *gs_fontDefault; } wxFont font = wxCreateFontFromStockObject(index); - if ( isDefaultRequested ) - { - // if we got here it means we hadn't cached it yet - do now - gs_fontDefault = new wxFont(font); - } - wxASSERT(font.IsOk()); #if wxUSE_FONTENUM