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:
@@ -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)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
@@ -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;
|
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user