]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/fontcmn.cpp
Also allow key events for Shift-Tab when wxWANTS_CHARS style is used
[wxWidgets.git] / src / common / fontcmn.cpp
index 320d37935ecdc95f6a9caaa618943452aefe0df9..7c3412b48d8345e99382ee0b555d2b0d399507b1 100644 (file)
@@ -6,7 +6,7 @@
 // Created:     20.09.99
 // RCS-ID:      $Id$
 // Copyright:   (c) wxWindows team
-// Licence:     wxWindows license
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 // ============================================================================
@@ -17,7 +17,7 @@
 // headers
 // ----------------------------------------------------------------------------
 
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
 #pragma implementation "fontbase.h"
 #endif
 
 #endif // WX_PRECOMP
 
 #include "wx/gdicmn.h"
+
+#if defined(__WXMSW__)
+  #include  "wx/msw/private.h"  // includes windows.h for LOGFONT
+  #include  "wx/msw/winundef.h"
+#endif
+
 #include "wx/fontutil.h" // for wxNativeFontInfo
 #include "wx/fontmap.h"
 
 
 wxFontEncoding wxFontBase::ms_encodingDefault = wxFONTENCODING_SYSTEM;
 
+/* static */
+void wxFontBase::SetDefaultEncoding(wxFontEncoding encoding)
+{
+    // GetDefaultEncoding() should return something != wxFONTENCODING_DEFAULT
+    // and, besides, using this value here doesn't make any sense
+    wxCHECK_RET( encoding != wxFONTENCODING_DEFAULT,
+                 _T("can't set default encoding to wxFONTENCODING_DEFAULT") );
+
+    ms_encodingDefault = encoding;
+}
+
 wxFontBase::~wxFontBase()
 {
     // this destructor is required for Darwin
@@ -66,6 +83,33 @@ wxFont *wxFontBase::New(int size,
     return new wxFont(size, family, style, weight, underlined, face, encoding);
 }
 
+/* static */
+wxFont *wxFontBase::New(int pointSize,
+                        wxFontFamily family,
+                        int flags,
+                        const wxString& face,
+                        wxFontEncoding encoding)
+{
+    return New
+           (
+                pointSize,
+                family,
+                flags & wxFONTFLAG_ITALIC
+                    ? wxFONTSTYLE_ITALIC
+                    : flags & wxFONTFLAG_SLANT
+                        ? wxFONTSTYLE_SLANT
+                        : wxFONTSTYLE_NORMAL,
+                flags & wxFONTFLAG_LIGHT
+                    ? wxFONTWEIGHT_LIGHT
+                    : flags & wxFONTFLAG_BOLD
+                        ? wxFONTWEIGHT_BOLD
+                        : wxFONTWEIGHT_NORMAL,
+                (flags & wxFONTFLAG_UNDERLINED) != 0,
+                face,
+                encoding
+           );
+}
+
 /* static */
 wxFont *wxFontBase::New(const wxNativeFontInfo& info)
 {
@@ -87,26 +131,7 @@ bool wxFontBase::IsFixedWidth() const
     return GetFamily() == wxFONTFAMILY_TELETYPE;
 }
 
-wxNativeFontInfo *wxFontBase::GetNativeFontInfo() const
-{
-#ifdef wxNO_NATIVE_FONTINFO
-    wxNativeFontInfo *fontInfo = new wxNativeFontInfo();
-
-    fontInfo->SetPointSize(GetPointSize());
-    fontInfo->SetFamily((wxFontFamily)GetFamily());
-    fontInfo->SetStyle((wxFontStyle)GetStyle());
-    fontInfo->SetWeight((wxFontWeight)GetWeight());
-    fontInfo->SetUnderlined(GetUnderlined());
-    fontInfo->SetFaceName(GetFaceName());
-    fontInfo->SetEncoding(GetEncoding());
-
-    return fontInfo;
-#else
-    return (wxNativeFontInfo *)NULL;
-#endif
-}
-
-void wxFontBase::SetNativeFontInfo(const wxNativeFontInfo& info)
+void wxFontBase::DoSetNativeFontInfo(const wxNativeFontInfo& info)
 {
 #ifdef wxNO_NATIVE_FONTINFO
     SetPointSize(info.pointSize);
@@ -124,11 +149,10 @@ void wxFontBase::SetNativeFontInfo(const wxNativeFontInfo& info)
 wxString wxFontBase::GetNativeFontInfoDesc() const
 {
     wxString fontDesc;
-    wxNativeFontInfo *fontInfo = GetNativeFontInfo();
+    const wxNativeFontInfo *fontInfo = GetNativeFontInfo();
     if ( fontInfo )
     {
         fontDesc = fontInfo->ToString();
-        delete fontInfo;
     }
 
     return fontDesc;
@@ -137,11 +161,10 @@ wxString wxFontBase::GetNativeFontInfoDesc() const
 wxString wxFontBase::GetNativeFontInfoUserDesc() const
 {
     wxString fontDesc;
-    wxNativeFontInfo *fontInfo = GetNativeFontInfo();
+    const wxNativeFontInfo *fontInfo = GetNativeFontInfo();
     if ( fontInfo )
     {
         fontDesc = fontInfo->ToUserString();
-        delete fontInfo;
     }
 
     return fontDesc;
@@ -285,8 +308,11 @@ bool wxNativeFontInfo::FromString(const wxString& s)
     underlined = l != 0;
 
     faceName = tokenizer.GetNextToken();
+
+#ifndef __WXMAC__
     if( !faceName )
         return FALSE;
+#endif
 
     token = tokenizer.GetNextToken();
     if ( !token.ToLong(&l) )
@@ -315,7 +341,7 @@ wxString wxNativeFontInfo::ToString() const
 
 void wxNativeFontInfo::Init()
 {
-    pointSize = wxNORMAL_FONT->GetPointSize();
+    pointSize = 0;
     family = wxFONTFAMILY_DEFAULT;
     style = wxFONTSTYLE_NORMAL;
     weight = wxFONTWEIGHT_NORMAL;
@@ -464,7 +490,7 @@ wxString wxNativeFontInfo::ToUserString() const
     wxFontEncoding enc = GetEncoding();
     if ( enc != wxFONTENCODING_DEFAULT && enc != wxFONTENCODING_SYSTEM )
     {
-        desc << _T(' ') << wxTheFontMapper->GetEncodingName(enc);
+        desc << _T(' ') << wxFontMapper::Get()->GetEncodingName(enc);
     }
 #endif // wxUSE_FONTMAP
 
@@ -517,7 +543,7 @@ bool wxNativeFontInfo::FromUserString(const wxString& s)
             SetPointSize(size);
         }
 #if wxUSE_FONTMAP
-        else if ( (encoding = wxTheFontMapper->CharsetToEncoding(token, FALSE))
+        else if ( (encoding = wxFontMapper::Get()->CharsetToEncoding(token, FALSE))
                     != wxFONTENCODING_DEFAULT )
         {
             SetEncoding(encoding);