]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/font.cpp
Must strip menu codes from labels before measuring (fixes bug 1400552)
[wxWidgets.git] / src / msw / font.cpp
index 28ff194ba007b61227decd6fcb416c2738d28794..d335ae6fce6bd48a49302192a12059344ca32b55 100644 (file)
 // headers
 // ----------------------------------------------------------------------------
 
 // headers
 // ----------------------------------------------------------------------------
 
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-    #pragma implementation "font.h"
-#endif
-
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
@@ -108,8 +104,8 @@ public:
     // constructors
     wxFontRefData()
     {
     // constructors
     wxFontRefData()
     {
-        Init(-1, wxSize(0, 0), FALSE, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL,
-             wxFONTWEIGHT_NORMAL, FALSE, wxEmptyString,
+        Init(-1, wxSize(0,0), false, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL,
+             wxFONTWEIGHT_NORMAL, false, wxEmptyString,
              wxFONTENCODING_DEFAULT);
     }
 
              wxFONTENCODING_DEFAULT);
     }
 
@@ -132,7 +128,7 @@ public:
         Init(info, hFont);
     }
 
         Init(info, hFont);
     }
 
-    wxFontRefData(const wxFontRefData& data)
+    wxFontRefData(const wxFontRefData& data) : wxGDIRefData()
     {
         if ( data.m_nativeFontInfoOk )
         {
     {
         if ( data.m_nativeFontInfoOk )
         {
@@ -165,10 +161,10 @@ public:
         return m_nativeFontInfoOk ? m_nativeFontInfo.GetPixelSize()
                                   : m_pixelSize;
     }
         return m_nativeFontInfoOk ? m_nativeFontInfo.GetPixelSize()
                                   : m_pixelSize;
     }
-    
+
     bool IsUsingSizeInPixels() const
     {
     bool IsUsingSizeInPixels() const
     {
-        return m_nativeFontInfoOk ? TRUE : m_sizeUsingPixels;
+        return m_nativeFontInfoOk ? true : m_sizeUsingPixels;
     }
 
     int GetFamily() const
     }
 
     int GetFamily() const
@@ -223,7 +219,7 @@ public:
         else
         {
             m_pointSize = pointSize;
         else
         {
             m_pointSize = pointSize;
-            m_sizeUsingPixels = FALSE;
+            m_sizeUsingPixels = false;
         }
     }
 
         }
     }
 
@@ -236,7 +232,7 @@ public:
         else
         {
             m_pixelSize = pixelSize;
         else
         {
             m_pixelSize = pixelSize;
-            m_sizeUsingPixels = TRUE;
+            m_sizeUsingPixels = true;
         }
     }
 
         }
     }
 
@@ -506,16 +502,11 @@ wxFontEncoding wxNativeFontInfo::GetEncoding() const
 
 void wxNativeFontInfo::SetPointSize(int pointsize)
 {
 
 void wxNativeFontInfo::SetPointSize(int pointsize)
 {
-#if wxFONT_SIZE_COMPATIBILITY
-    // Incorrect, but compatible with old wxWidgets behaviour
-    lf.lfHeight = (pointSize*ppInch)/72;
-#else // wxFONT_SIZE_COMPATIBILITY
     // FIXME: using the screen here results in incorrect font size calculation
     //        for printing!
     const int ppInch = ::GetDeviceCaps(ScreenHDC(), LOGPIXELSY);
 
     lf.lfHeight = -(int)((pointsize*((double)ppInch)/72.0) + 0.5);
     // FIXME: using the screen here results in incorrect font size calculation
     //        for printing!
     const int ppInch = ::GetDeviceCaps(ScreenHDC(), LOGPIXELSY);
 
     lf.lfHeight = -(int)((pointsize*((double)ppInch)/72.0) + 0.5);
-#endif // wxFONT_SIZE_COMPATIBILITY/!wxFONT_SIZE_COMPATIBILITY
 }
 
 void wxNativeFontInfo::SetPixelSize(const wxSize& pixelSize)
 }
 
 void wxNativeFontInfo::SetPixelSize(const wxSize& pixelSize)
@@ -571,14 +562,14 @@ void wxNativeFontInfo::SetUnderlined(bool underlined)
     lf.lfUnderline = underlined;
 }
 
     lf.lfUnderline = underlined;
 }
 
-void wxNativeFontInfo::SetFaceName(wxString facename)
+void wxNativeFontInfo::SetFaceName(const wxString& facename)
 {
     wxStrncpy(lf.lfFaceName, facename, WXSIZEOF(lf.lfFaceName));
 }
 
 void wxNativeFontInfo::SetFamily(wxFontFamily family)
 {
 {
     wxStrncpy(lf.lfFaceName, facename, WXSIZEOF(lf.lfFaceName));
 }
 
 void wxNativeFontInfo::SetFamily(wxFontFamily family)
 {
-    int ff_family;
+    BYTE ff_family;
     wxString facename;
 
     switch ( family )
     wxString facename;
 
     switch ( family )
@@ -611,11 +602,19 @@ void wxNativeFontInfo::SetFamily(wxFontFamily family)
 
         case wxDEFAULT:
         default:
 
         case wxDEFAULT:
         default:
+        {
+            // We want Windows 2000 or later to have new fonts even MS Shell Dlg
+            // is returned as default GUI font for compatibility
+            int verMaj;
             ff_family = FF_SWISS;
             ff_family = FF_SWISS;
-            facename = _T("MS Sans Serif");
+            if(wxGetOsVersion(&verMaj) == wxWINDOWS_NT && verMaj >= 5)
+                facename = _T("MS Shell Dlg 2");
+            else
+                facename = _T("MS Shell Dlg");
+        }
     }
 
     }
 
-    lf.lfPitchAndFamily = DEFAULT_PITCH | ff_family;
+    lf.lfPitchAndFamily = (BYTE)(DEFAULT_PITCH) | ff_family;
 
     if ( !wxStrlen(lf.lfFaceName) )
     {
 
     if ( !wxStrlen(lf.lfFaceName) )
     {
@@ -647,7 +646,7 @@ void wxNativeFontInfo::SetEncoding(wxFontEncoding encoding)
         }
     }
 
         }
     }
 
-    lf.lfCharSet = info.charset;
+    lf.lfCharSet = (BYTE)info.charset;
 }
 
 bool wxNativeFontInfo::FromString(const wxString& s)
 }
 
 bool wxNativeFontInfo::FromString(const wxString& s)
@@ -787,15 +786,15 @@ wxFont::wxFont(const wxString& fontdesc)
 /* Constructor for a font. Note that the real construction is done
  * in wxDC::SetFont, when information is available about scaling etc.
  */
 /* Constructor for a font. Note that the real construction is done
  * in wxDC::SetFont, when information is available about scaling etc.
  */
-bool wxFont::Create(int pointSize,
-                    const wxSize& pixelSize,
-                    bool sizeUsingPixels,
-                    int family,
-                    int style,
-                    int weight,
-                    bool underlined,
-                    const wxString& faceName,
-                    wxFontEncoding encoding)
+bool wxFont::DoCreate(int pointSize,
+                      const wxSize& pixelSize,
+                      bool sizeUsingPixels,
+                      int family,
+                      int style,
+                      int weight,
+                      bool underlined,
+                      const wxString& faceName,
+                      wxFontEncoding encoding)
 {
     UnRef();
 
 {
     UnRef();
 
@@ -1041,8 +1040,8 @@ bool wxFont::IsFixedWidth() const
     {
         // the two low-order bits specify the pitch of the font, the rest is
         // family
     {
         // the two low-order bits specify the pitch of the font, the rest is
         // family
-        BYTE pitch = M_FONTDATA->GetNativeFontInfo().
-                        lf.lfPitchAndFamily & PITCH_MASK;
+        BYTE pitch =
+            (BYTE)(M_FONTDATA->GetNativeFontInfo().lf.lfPitchAndFamily & PITCH_MASK);
 
         return pitch == FIXED_PITCH;
     }
 
         return pitch == FIXED_PITCH;
     }