]> git.saurik.com Git - wxWidgets.git/commitdiff
Use correct font instead of DEFAULT_GUI_FONT.
authorVadim Zeitlin <vadim@wxwidgets.org>
Sun, 30 Aug 2009 20:42:46 +0000 (20:42 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sun, 30 Aug 2009 20:42:46 +0000 (20:42 +0000)
DEFAULT_GUI_FONT is a misnomer, not only is it not a default (and never was)
but it shouldn't be used at all. Instead use lfMessageFont from the
NONCLIENTMETRICS structure as it seems to correspond to the font used by
the native controls under 2000, XP and Vista and respects Vista global DPI
setting unlike DEFAULT_GUI_FONT.

Closes #11008.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61790 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/msw/settings.cpp

index ea2e76c0c08ce85dcf349bb5be47f926377b7eda..84a4ee3348e14459d0f87345339c8b31e98b6211 100644 (file)
@@ -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
@@ -230,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.
@@ -276,21 +270,28 @@ wxFont wxSystemSettingsNative::GetFont(wxSystemFont index)
 #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