X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/57bd4c6031d438f11af0ec540136f49a928b923c..74b1f0b45e0f0bc7e25c5f32bb495e3e4bcd3392:/src/msw/settings.cpp?ds=inline diff --git a/src/msw/settings.cpp b/src/msw/settings.cpp index e482e95ff1..84a4ee3348 100644 --- a/src/msw/settings.cpp +++ b/src/msw/settings.cpp @@ -27,19 +27,21 @@ #include "wx/settings.h" #ifndef WX_PRECOMP - #include "wx/msw/missing.h" // for SM_CXCURSOR, SM_CYCURSOR, SM_TABLETPC #include "wx/utils.h" #include "wx/gdicmn.h" #include "wx/module.h" #endif #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 #endif #include "wx/fontutil.h" +#include "wx/fontenum.h" // ---------------------------------------------------------------------------- // private classes @@ -127,7 +129,12 @@ wxColour wxSystemSettingsNative::GetColour(wxSystemColour index) 0, // MENUBAR (unused) }; - if ( index == wxSYS_COLOUR_LISTBOX ) + if ( index == wxSYS_COLOUR_LISTBOXTEXT) + { + // there is no standard colour with this index, map to another one + index = wxSYS_COLOUR_WINDOWTEXT; + } + else if ( index == wxSYS_COLOUR_LISTBOX ) { // there is no standard colour with this index, map to another one index = wxSYS_COLOUR_WINDOW; @@ -186,7 +193,7 @@ wxColour wxSystemSettingsNative::GetColour(wxSystemColour index) unsigned int n = index - wxSYS_COLOUR_BTNHIGHLIGHT; wxASSERT_MSG( n < WXSIZEOF(s_defaultSysColors), - _T("forgot tp update the default colours array") ); + wxT("forgot tp update the default colours array") ); colSys = s_defaultSysColors[n]; hasCol = true; @@ -203,7 +210,9 @@ wxColour wxSystemSettingsNative::GetColour(wxSystemColour index) #endif } - return wxRGBToColour(colSys); + wxColour ret = wxRGBToColour(colSys); + wxASSERT(ret.IsOk()); + return ret; } // ---------------------------------------------------------------------------- @@ -222,13 +231,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. @@ -240,12 +242,12 @@ wxFont wxCreateFontFromStockObject(int index) } else { - wxFAIL_MSG( _T("failed to get LOGFONT") ); + wxFAIL_MSG( wxT("failed to get LOGFONT") ); } } else // GetStockObject() failed { - wxFAIL_MSG( _T("stock font not found") ); + wxFAIL_MSG( wxT("stock font not found") ); } return font; @@ -262,24 +264,39 @@ wxFont wxSystemSettingsNative::GetFont(wxSystemFont index) gs_fontDefault = new wxFont(wxCreateFontFromStockObject(SYSTEM_FONT)); } + 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 + wxASSERT(wxFontEnumerator::IsValidFacename(font.GetFaceName())); +#endif // wxUSE_FONTENUM return font; #endif // __WXWINCE__/!__WXWINCE__ @@ -352,7 +369,7 @@ static const int gs_metricsMap[] = -1, -1, -1, -1, #endif SM_CYHSCROLL, - SM_CXVSCROLL, + SM_CXHSCROLL, SM_CXVSCROLL, SM_CYVSCROLL, #ifdef SM_CYVTHUMB @@ -377,11 +394,14 @@ static const int gs_metricsMap[] = #else -1, #endif + // SM_SWAPBUTTON is not available under CE and it doesn't make sense to ask + // for it there #ifdef SM_SWAPBUTTON SM_SWAPBUTTON, #else - -1 + -1, #endif + -1 // wxSYS_DCLICK_MSEC - not available as system metric }; // Get a system metric, e.g. scrollbar size @@ -392,7 +412,13 @@ int wxSystemSettingsNative::GetMetric(wxSystemMetric index, wxWindow* WXUNUSED(w return 0; #else // !__WXMICROWIN__ wxCHECK_MSG( index > 0 && (size_t)index < WXSIZEOF(gs_metricsMap), 0, - _T("invalid metric") ); + wxT("invalid metric") ); + + if ( index == wxSYS_DCLICK_MSEC ) + { + // This one is not a Win32 system metric + return ::GetDoubleClickTime(); + } int indexMSW = gs_metricsMap[index]; if ( indexMSW == -1 ) @@ -424,7 +450,7 @@ bool wxSystemSettingsNative::HasFeature(wxSystemFeature index) return ::GetSystemMetrics(SM_TABLETPC) != 0; default: - wxFAIL_MSG( _T("unknown system feature") ); + wxFAIL_MSG( wxT("unknown system feature") ); return false; } @@ -476,7 +502,7 @@ extern wxFont wxGetCCDefaultFont() } else { - wxLogLastError(_T("SystemParametersInfo(SPI_GETICONTITLELOGFONT")); + wxLogLastError(wxT("SystemParametersInfo(SPI_GETICONTITLELOGFONT")); } } #endif // __WXWINCE__