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

View 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

View File

@@ -16,21 +16,36 @@
#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);
}

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