]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/fontcmn.cpp
there is no sqrt(int) in standard C++ (although glibc seems to provide it); select...
[wxWidgets.git] / src / common / fontcmn.cpp
index f0d3ccf9c409076c2f2b996d4cf6d88dda6d7fab..a5ff16a10fef310b384d9394ebf549589f2b3210 100644 (file)
     #include "wx/intl.h"
     #include "wx/dcscreen.h"
     #include "wx/log.h"
+    #include "wx/gdicmn.h"
 #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"
@@ -56,7 +55,6 @@
 
 static void AdjustFontSize(wxFont& font, wxDC& dc, const wxSize& pixelSize)
 {
-    int currentSize = 0;
     int largestGood = 0;
     int smallestBad = 0;
 
@@ -65,7 +63,7 @@ static void AdjustFontSize(wxFont& font, wxDC& dc, const wxSize& pixelSize)
 
     // NB: this assignment was separated from the variable definition
     // in order to fix a gcc v3.3.3 compiler crash
-    currentSize = font.GetPointSize();
+    int currentSize = font.GetPointSize();
     while (currentSize > 0)
     {
         dc.SetFont(font);
@@ -132,9 +130,9 @@ wxFontBase::~wxFontBase()
 
 /* static */
 wxFont *wxFontBase::New(int size,
-                        int family,
-                        int style,
-                        int weight,
+                        wxFontFamily family,
+                        wxFontStyle style,
+                        wxFontWeight weight,
                         bool underlined,
                         const wxString& face,
                         wxFontEncoding encoding)
@@ -178,9 +176,9 @@ wxFont *wxFontBase::New(int pointSize,
 
 /* static */
 wxFont *wxFontBase::New(const wxSize& pixelSize,
-                        int family,
-                        int style,
-                        int weight,
+                        wxFontFamily family,
+                        wxFontStyle style,
+                        wxFontWeight weight,
                         bool underlined,
                         const wxString& face,
                         wxFontEncoding encoding)
@@ -268,7 +266,7 @@ wxString wxFontBase::GetNativeFontInfoDesc() const
     if ( fontInfo )
     {
         fontDesc = fontInfo->ToString();
-        wxASSERT_MSG(!fontDesc.IsEmpty(), wxT("This should be a non-empty string!"));
+        wxASSERT_MSG(!fontDesc.empty(), wxT("This should be a non-empty string!"));
     }
     else
     {
@@ -285,7 +283,7 @@ wxString wxFontBase::GetNativeFontInfoUserDesc() const
     if ( fontInfo )
     {
         fontDesc = fontInfo->ToUserString();
-        wxASSERT_MSG(!fontDesc.IsEmpty(), wxT("This should be a non-empty string!"));
+        wxASSERT_MSG(!fontDesc.empty(), wxT("This should be a non-empty string!"));
     }
     else
     {
@@ -304,7 +302,6 @@ bool wxFontBase::SetNativeFontInfo(const wxString& info)
         return true;
     }
 
-    UnRef();
     return false;
 }
 
@@ -317,7 +314,6 @@ bool wxFontBase::SetNativeFontInfoUserDesc(const wxString& info)
         return true;
     }
 
-    UnRef();
     return false;
 }
 
@@ -325,10 +321,16 @@ bool wxFontBase::operator==(const wxFont& font) const
 {
     // either it is the same font, i.e. they share the same common data or they
     // have different ref datas but still describe the same font
-    return GetFontData() == font.GetFontData() ||
+    return IsSameAs(font) ||
            (
             Ok() == font.Ok() &&
             GetPointSize() == font.GetPointSize() &&
+            // in wxGTK1 GetPixelSize() calls GetInternalFont() which uses
+            // operator==() resulting in infinite recursion so we can't use it
+            // in that port
+#if !defined(__WXGTK__) || defined(__WXGTK20__)
+            GetPixelSize() == font.GetPixelSize() &&
+#endif
             GetFamily() == font.GetFamily() &&
             GetStyle() == font.GetStyle() &&
             GetWeight() == font.GetWeight() &&
@@ -338,11 +340,6 @@ bool wxFontBase::operator==(const wxFont& font) const
            );
 }
 
-bool wxFontBase::operator!=(const wxFont& font) const
-{
-    return !(*this == font);
-}
-
 wxString wxFontBase::GetFamilyString() const
 {
     wxCHECK_MSG( Ok(), wxT("wxDEFAULT"), wxT("invalid font") );
@@ -385,13 +382,17 @@ wxString wxFontBase::GetWeightString() const
     }
 }
 
-bool wxFontBase::SetFaceName(const wxString &facename)
+bool wxFontBase::SetFaceName(const wxStringfacename)
 {
+#if wxUSE_FONTENUM
     if (!wxFontEnumerator::IsValidFacename(facename))
     {
         UnRef();        // make Ok() return false
         return false;
     }
+#else // !wxUSE_FONTENUM
+    wxUnusedVar(facename);
+#endif // wxUSE_FONTENUM/!wxUSE_FONTENUM
 
     return true;
 }
@@ -402,8 +403,9 @@ bool wxFontBase::SetFaceName(const wxString &facename)
 // ----------------------------------------------------------------------------
 
 // Up to now, there are no native implementations of this function:
-void wxNativeFontInfo::SetFaceName(const wxArrayString &facenames)
+void wxNativeFontInfo::SetFaceName(const wxArrayStringfacenames)
 {
+#if wxUSE_FONTENUM
     for (size_t i=0; i < facenames.GetCount(); i++)
     {
         if (wxFontEnumerator::IsValidFacename(facenames[i]))
@@ -417,6 +419,9 @@ void wxNativeFontInfo::SetFaceName(const wxArrayString &facenames)
     wxString validfacename = wxFontEnumerator::GetFacenames().Item(0);
     wxLogTrace(wxT("font"), wxT("Falling back to '%s'"), validfacename.c_str());
     SetFaceName(validfacename);
+#else // !wxUSE_FONTENUM
+    SetFaceName(facenames[0]);
+#endif // wxUSE_FONTENUM/!wxUSE_FONTENUM
 }
 
 
@@ -666,7 +671,10 @@ bool wxNativeFontInfo::FromUserString(const wxString& s)
 
     wxString face;
     unsigned long size;
-    bool weightfound = false, pointsizefound = false, encodingfound = false;
+    bool weightfound = false, pointsizefound = false;
+#if wxUSE_FONTMAP
+    bool encodingfound = false;
+#endif
 
     while ( tokenizer.HasMoreTokens() )
     {
@@ -738,9 +746,15 @@ bool wxNativeFontInfo::FromUserString(const wxString& s)
             // NB: the check on the facename is implemented in wxFontBase::SetFaceName
             //     and not in wxNativeFontInfo::SetFaceName thus we need to explicitely
             //     call here wxFontEnumerator::IsValidFacename
-            if (!wxFontEnumerator::IsValidFacename(face) ||
-                !SetFaceName(face))
+            if (
+#if wxUSE_FONTENUM
+                    !wxFontEnumerator::IsValidFacename(face) ||
+#endif // wxUSE_FONTENUM
+                    !SetFaceName(face) )
+            {
                 SetFaceName(wxNORMAL_FONT->GetFaceName());
+            }
+
             face.clear();
         }
     }
@@ -751,9 +765,14 @@ bool wxNativeFontInfo::FromUserString(const wxString& s)
         // NB: the check on the facename is implemented in wxFontBase::SetFaceName
         //     and not in wxNativeFontInfo::SetFaceName thus we need to explicitely
         //     call here wxFontEnumerator::IsValidFacename
-        if (!wxFontEnumerator::IsValidFacename(face) ||
-            !SetFaceName(face))
-            SetFaceName(wxNORMAL_FONT->GetFaceName());
+        if (
+#if wxUSE_FONTENUM
+                !wxFontEnumerator::IsValidFacename(face) ||
+#endif // wxUSE_FONTENUM
+                !SetFaceName(face) )
+            {
+                SetFaceName(wxNORMAL_FONT->GetFaceName());
+            }
     }
 
     // set point size to default value if size was not given
@@ -774,3 +793,26 @@ bool wxNativeFontInfo::FromUserString(const wxString& s)
 }
 
 #endif // generic or wxMSW or wxOS2
+
+
+// wxFont <-> wxString utilities, used by wxConfig
+wxString wxToString(const wxFontBase& font)
+{
+    return font.IsOk() ? font.GetNativeFontInfoDesc()
+                       : wxString();
+}
+
+bool wxFromString(const wxString& str, wxFontBase *font)
+{
+    wxCHECK_MSG( font, false, _T("NULL output parameter") );
+
+    if ( str.empty() )
+    {
+        *font = wxNullFont;
+        return true;
+    }
+
+    return font->SetNativeFontInfo(str);
+}
+
+