implemented wxFontEnumerator for wxDFB

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@43727 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Václav Slavík
2006-12-01 10:14:28 +00:00
parent c97c995223
commit 4e1d79d308
4 changed files with 63 additions and 33 deletions

View File

@@ -16,6 +16,11 @@
#include "wx/fontenc.h" #include "wx/fontenc.h"
#include "wx/arrstr.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 // wxFontEnumerator enumerates all available fonts on the system or only the
// fonts with given attributes // fonts with given attributes
@@ -72,6 +77,11 @@ public:
static bool IsValidFacename(const wxString &str); static bool IsValidFacename(const wxString &str);
private: 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) DECLARE_NO_COPY_CLASS(wxFontEnumerator)
}; };

View File

@@ -100,3 +100,32 @@ bool wxFontEnumerator::IsValidFacename(const wxString &facename)
return true; 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

View File

@@ -16,21 +16,36 @@
#endif #endif
#include "wx/fontenum.h" #include "wx/fontenum.h"
#include "wx/private/fontmgr.h"
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// wxFontEnumerator // wxFontEnumerator
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
bool wxFontEnumerator::EnumerateFacenames(wxFontEncoding WXUNUSED(encoding), bool wxFontEnumerator::EnumerateFacenames(wxFontEncoding encoding,
bool WXUNUSED(fixedWidthOnly)) bool fixedWidthOnly)
{ {
// FIXME_DFB // we only support UTF-8 and system (which means "use any"):
OnFacename(_T("Default")); if ( encoding != wxFONTENCODING_SYSTEM && encoding != wxFONTENCODING_UTF8 )
return true; 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 EnumerateEncodingsUTF8(facename);
return false;
} }

View File

@@ -112,31 +112,7 @@ bool wxFontEnumerator::EnumerateFacenames(wxFontEncoding encoding,
bool wxFontEnumerator::EnumerateEncodings(const wxString& facename) bool wxFontEnumerator::EnumerateEncodings(const wxString& facename)
{ {
// name of UTF-8 encoding: no need to use wxFontMapper for it as it's return EnumerateEncodingsUTF8(facename);
// 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;
} }