#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
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)
};
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
#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);
}
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);
}