X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4676948b6814c97b93c431a8cbcd8c0352c87ba9..2b0246530d08cf7724d94c70d631c166f9717c2c:/src/msw/settings.cpp diff --git a/src/msw/settings.cpp b/src/msw/settings.cpp index 1c5c52d672..76d77a96bf 100644 --- a/src/msw/settings.cpp +++ b/src/msw/settings.cpp @@ -40,6 +40,10 @@ #include "wx/module.h" #include "wx/fontutil.h" +#ifdef __WXWINCE__ // for SM_CXCURSOR and SM_CYCURSOR +#include "wx/msw/wince/missing.h" +#endif // __WXWINCE__ + // ---------------------------------------------------------------------------- // private classes // ---------------------------------------------------------------------------- @@ -83,7 +87,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxSystemSettingsModule, wxModule) bool wxSystemSettingsModule::OnInit() { - return TRUE; + return true; } void wxSystemSettingsModule::OnExit() @@ -106,7 +110,7 @@ wxColour wxSystemSettingsNative::GetColour(wxSystemColour index) // is no invalid colour value we use hasCol as the real indicator of // whether colSys was initialized or not COLORREF colSys = 0; - bool hasCol = FALSE; + bool hasCol = false; // the default colours for the entries after BTNHIGHLIGHT static const COLORREF s_defaultSysColors[] = @@ -137,14 +141,12 @@ wxColour wxSystemSettingsNative::GetColour(wxSystemColour index) // all Windows version, for the other ones we have to check bool useDefault; - // none of the is supported under Win16 anyhow -#ifdef __WIN32__ int verMaj, verMin; wxGetOsVersion(&verMaj, &verMin); if ( verMaj < 4 ) { // NT 3.5 - useDefault = TRUE; + useDefault = true; } else if ( verMaj == 4 ) { @@ -159,21 +161,18 @@ wxColour wxSystemSettingsNative::GetColour(wxSystemColour index) else // >= 5.1 { // 5.1 is Windows XP - useDefault = FALSE; - // Determine if we are using flat menus, only then allow wxSYS_COLOUR_MENUBAR - if ( index == wxSYS_COLOUR_MENUBAR ) - { - BOOL isFlat ; - if ( SystemParametersInfo( SPI_GETFLATMENU , 0 ,&isFlat, 0 ) ) - { - if ( !isFlat ) - index = wxSYS_COLOUR_MENU ; - } - } - } -#else - useDefault = TRUE; -#endif // __WIN32__ + useDefault = false; + // Determine if we are using flat menus, only then allow wxSYS_COLOUR_MENUBAR + if ( index == wxSYS_COLOUR_MENUBAR ) + { + BOOL isFlat ; + if ( SystemParametersInfo( SPI_GETFLATMENU , 0 ,&isFlat, 0 ) ) + { + if ( !isFlat ) + index = wxSYS_COLOUR_MENU ; + } + } + } if ( useDefault ) { @@ -193,14 +192,18 @@ wxColour wxSystemSettingsNative::GetColour(wxSystemColour index) _T("forgot tp update the default colours array") ); colSys = s_defaultSysColors[n]; - hasCol = TRUE; + hasCol = true; } } } if ( !hasCol ) { +#ifdef __WXWINCE__ + colSys = ::GetSysColor(index|SYS_COLOR_INDEX_FLAG); +#else colSys = ::GetSysColor(index); +#endif } return wxRGBToColour(colSys); @@ -222,6 +225,13 @@ 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) == wxWINDOWS_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. @@ -246,12 +256,24 @@ wxFont wxCreateFontFromStockObject(int index) wxFont wxSystemSettingsNative::GetFont(wxSystemFont index) { - // wxWindow ctor calls GetSystemFont(wxSYS_DEFAULT_GUI_FONT) so we're - // called fairly often - this is why we cache this particular font - bool isDefaultRequested = index == wxSYS_DEFAULT_GUI_FONT; - if ( isDefaultRequested && gs_fontDefault ) +#ifdef __WXWINCE__ + // under CE only a single SYSTEM_FONT exists + index; + + if ( !gs_fontDefault ) { - return *gs_fontDefault; + gs_fontDefault = new wxFont(wxCreateFontFromStockObject(SYSTEM_FONT)); + } + + 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 ( gs_fontDefault ) + return *gs_fontDefault; } wxFont font = wxCreateFontFromStockObject(index); @@ -263,6 +285,7 @@ wxFont wxSystemSettingsNative::GetFont(wxSystemFont index) } return font; +#endif // __WXWINCE__/!__WXWINCE__ } // ---------------------------------------------------------------------------- @@ -361,7 +384,7 @@ static const int gs_metricsMap[] = }; // Get a system metric, e.g. scrollbar size -int wxSystemSettingsNative::GetMetric(wxSystemMetric index) +int wxSystemSettingsNative::GetMetric(wxSystemMetric index, wxWindow* WXUNUSED(win)) { #ifdef __WXMICROWIN__ // TODO: probably use wxUniv themes functionality @@ -374,7 +397,7 @@ int wxSystemSettingsNative::GetMetric(wxSystemMetric index) if ( indexMSW == -1 ) { // not supported under current system - return 0; + return -1; } int rc = ::GetSystemMetrics(indexMSW); @@ -394,11 +417,68 @@ bool wxSystemSettingsNative::HasFeature(wxSystemFeature index) { case wxSYS_CAN_ICONIZE_FRAME: case wxSYS_CAN_DRAW_FRAME_DECORATIONS: - return TRUE; + return true; default: wxFAIL_MSG( _T("unknown system feature") ); - return FALSE; + return false; } } + +// ---------------------------------------------------------------------------- +// function from wx/msw/wrapcctl.h: there is really no other place for it... +// ---------------------------------------------------------------------------- + +#if wxUSE_LISTCTRL || wxUSE_TREECTRL + +extern wxFont wxGetCCDefaultFont() +{ +#ifndef __WXWINCE__ + // under the systems enumerated below (anything released after Win98), the + // default font used for the common controls seems to be the desktop font + // which is also used for the icon titles and not the stock default GUI + // font + bool useIconFont; + int verMaj, verMin; + switch ( wxGetOsVersion(&verMaj, &verMin) ) + { + case wxWIN95: + // 4.10 is Win98 + useIconFont = verMaj == 4 && verMin >= 10; + break; + + case wxWINDOWS_NT: + // 5.0 is Win2k + useIconFont = verMaj >= 5; + break; + + default: + useIconFont = false; + } + + if ( useIconFont ) + { + LOGFONT lf; + if ( ::SystemParametersInfo + ( + SPI_GETICONTITLELOGFONT, + sizeof(lf), + &lf, + 0 + ) ) + { + return wxFont(wxCreateFontFromLogFont(&lf)); + } + else + { + wxLogLastError(_T("SystemParametersInfo(SPI_GETICONTITLELOGFONT")); + } + } +#endif // __WXWINCE__ + + // fall back to the default font for the normal controls + return wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); +} + +#endif // wxUSE_LISTCTRL || wxUSE_TREECTRL