]> git.saurik.com Git - wxWidgets.git/commitdiff
implemented wxFontEnumerator for wxDFB
authorVáclav Slavík <vslavik@fastmail.fm>
Fri, 1 Dec 2006 10:14:28 +0000 (10:14 +0000)
committerVáclav Slavík <vslavik@fastmail.fm>
Fri, 1 Dec 2006 10:14:28 +0000 (10:14 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@43727 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/fontenum.h
src/common/fontenumcmn.cpp
src/dfb/fontenum.cpp
src/unix/fontenum.cpp

index 8544e0dc493662504487926c030d2bf57765bcf1..9a669505dd2da4e45e7e722e1475a1e0acdf9bda 100644 (file)
 #include "wx/fontenc.h"
 #include "wx/arrstr.h"
 
+#if wxUSE_PANGO || defined(__WXDFB__)
+    // defined if the port uses only UTF-8 font encodings internally
+    #define wxHAS_UTF8_FONTS
+#endif
+
 // ----------------------------------------------------------------------------
 // wxFontEnumerator enumerates all available fonts on the system or only the
 // fonts with given attributes
@@ -72,6 +77,11 @@ public:
     static bool IsValidFacename(const wxString &str);
 
 private:
+#ifdef wxHAS_UTF8_FONTS
+    // helper for ports that only use UTF-8 encoding natively
+    bool EnumerateEncodingsUTF8(const wxString& facename);
+#endif
+
     DECLARE_NO_COPY_CLASS(wxFontEnumerator)
 };
 
index fb57dd9104bab4a173b26d4319fa1f1538ac7910..c2ef4c882052887d13ca643067506fcdcb76d094 100644 (file)
@@ -100,3 +100,32 @@ bool wxFontEnumerator::IsValidFacename(const wxString &facename)
     return true;
 }
 
+#ifdef wxHAS_UTF8_FONTS
+bool wxFontEnumerator::EnumerateEncodingsUTF8(const wxString& facename)
+{
+    // name of UTF-8 encoding: no need to use wxFontMapper for it as it's
+    // unlikely to change
+    const wxString utf8(_T("UTF-8"));
+
+    // all fonts are in UTF-8 only if this code is used
+    if ( !facename.empty() )
+    {
+        OnFontEncoding(facename, utf8);
+        return true;
+    }
+
+    // so enumerating all facenames supporting this encoding is the same as
+    // enumerating all facenames
+    const wxArrayString facenames(GetFacenames(wxFONTENCODING_UTF8));
+    const size_t count = facenames.size();
+    if ( !count )
+        return false;
+
+    for ( size_t n = 0; n < count; n++ )
+    {
+        OnFontEncoding(facenames[n], utf8);
+    }
+
+    return true;
+}
+#endif // wxHAS_UTF8_FONTS
index 4e1f9050cc46dc2021aabad6ff1200b190fb2aa6..fe1e05340e9c6f8a0dde82253b0b815f1a04bf08 100644 (file)
 #endif
 
 #include "wx/fontenum.h"
+#include "wx/private/fontmgr.h"
 
 // ----------------------------------------------------------------------------
 // wxFontEnumerator
 // ----------------------------------------------------------------------------
 
-bool wxFontEnumerator::EnumerateFacenames(wxFontEncoding WXUNUSED(encoding),
-                                          bool WXUNUSED(fixedWidthOnly))
+bool wxFontEnumerator::EnumerateFacenames(wxFontEncoding encoding,
+                                          bool fixedWidthOnly)
 {
-    // FIXME_DFB
-    OnFacename(_T("Default"));
-    return true;
+    // we only support UTF-8 and system (which means "use any"):
+    if ( encoding != wxFONTENCODING_SYSTEM && encoding != wxFONTENCODING_UTF8 )
+        return false;
+
+    bool found = false;
+    const wxFontBundleList& list = wxFontsManager::Get()->GetBundles();
+
+    for ( wxFontBundleList::const_iterator f = list.begin(); f != list.end(); ++f )
+    {
+        if ( fixedWidthOnly && !(*f)->IsFixed() )
+            continue;
+
+        found = true;
+        if ( !OnFacename((*f)->GetName()) )
+            break; // OnFacename() requests us to stop enumeration
+    }
+
+    return found;
 }
 
-bool wxFontEnumerator::EnumerateEncodings(const wxString& WXUNUSED(family))
+bool wxFontEnumerator::EnumerateEncodings(const wxString& facename)
 {
-    // FIXME_DFB
-    return false;
+    return EnumerateEncodingsUTF8(facename);
 }
index 25ab0816321a08f08ea37139b7393a56fb007af9..e09f06170e4e7e073fd6d17fdd3a76fdeb4ba308 100644 (file)
@@ -112,31 +112,7 @@ bool wxFontEnumerator::EnumerateFacenames(wxFontEncoding encoding,
 
 bool wxFontEnumerator::EnumerateEncodings(const wxString& facename)
 {
-    // name of UTF-8 encoding: no need to use wxFontMapper for it as it's
-    // unlikely to change
-    const wxString utf8(_T("UTF-8"));
-
-
-    // all fonts are in UTF-8 only when using Pango
-    if ( !facename.empty() )
-    {
-        OnFontEncoding(facename, utf8);
-        return true;
-    }
-
-    // so enumerating all facenames supporting this encoding is the same as
-    // enumerating all facenames
-    const wxArrayString facenames(GetFacenames(wxFONTENCODING_UTF8));
-    const size_t count = facenames.size();
-    if ( !count )
-        return false;
-
-    for ( size_t n = 0; n < count; n++ )
-    {
-        OnFontEncoding(facenames[n], utf8);
-    }
-
-    return true;
+    return EnumerateEncodingsUTF8(facename);
 }