use WXDFB_FONTPATH variable instead of WXDFB_FONTDIR and search the dirs recursively for fonts
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@43835 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -72,6 +72,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
// adds all fonts using AddBundle()
|
// adds all fonts using AddBundle()
|
||||||
void AddAllFonts();
|
void AddAllFonts();
|
||||||
|
void AddFontsFromDir(const wxString& indexFile);
|
||||||
void AddFont(const wxString& dir, const wxString& name, wxFileConfig& cfg);
|
void AddFont(const wxString& dir, const wxString& name, wxFileConfig& cfg);
|
||||||
void SetDefaultFonts(wxFileConfig& cfg);
|
void SetDefaultFonts(wxFileConfig& cfg);
|
||||||
|
|
||||||
|
@@ -18,6 +18,8 @@
|
|||||||
|
|
||||||
#include "wx/fileconf.h"
|
#include "wx/fileconf.h"
|
||||||
#include "wx/filename.h"
|
#include "wx/filename.h"
|
||||||
|
#include "wx/tokenzr.h"
|
||||||
|
#include "wx/dir.h"
|
||||||
|
|
||||||
#include "wx/private/fontmgr.h"
|
#include "wx/private/fontmgr.h"
|
||||||
#include "wx/dfb/wrapdfb.h"
|
#include "wx/dfb/wrapdfb.h"
|
||||||
@@ -91,13 +93,16 @@ wxFontBundle::wxFontBundle(const wxString& name,
|
|||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
/*
|
/*
|
||||||
The code below parses font configuration file ${WXDFB_FONTDIR}/FontsIndex.
|
The code below looks up and parses font configuration files FontsIndex.
|
||||||
By default, the directory is $prefix/share/wx/fonts, but can be ovewritten
|
The files are looked up in directories specified in the WXDFB_FONTPATH
|
||||||
by setting WXDFB_FONTDIR environment variable.
|
environment variable (separated with :, similarly to the PATH variable).
|
||||||
|
If the variable is not set, $prefix/share/wx/fonts directory is used.
|
||||||
|
All subdirectories of directories on the path are scanned for FontsIndex
|
||||||
|
files.
|
||||||
|
|
||||||
The file is standard wxFileConfig file text file. Each toplevel group
|
The FontsIndex file is standard wxFileConfig file text file. Each toplevel
|
||||||
specifies one font bundle, font's name is the name of group. Group's entries
|
group specifies one font bundle, font's name is the name of group. Group's
|
||||||
look like this:
|
entries look like this:
|
||||||
|
|
||||||
[Font Name]
|
[Font Name]
|
||||||
# font files (at least one of them must be present):
|
# font files (at least one of them must be present):
|
||||||
@@ -125,14 +130,42 @@ wxFontBundle::wxFontBundle(const wxString& name,
|
|||||||
|
|
||||||
void wxFontsManager::AddAllFonts()
|
void wxFontsManager::AddAllFonts()
|
||||||
{
|
{
|
||||||
wxString dir = _T(wxINSTALL_PREFIX "/share/wx/fonts");
|
wxString path;
|
||||||
wxGetEnv(_T("WXDFB_FONTDIR"), &dir);
|
if ( !wxGetEnv(_T("WXDFB_FONTPATH"), &path) )
|
||||||
|
path = _T(wxINSTALL_PREFIX "/share/wx/fonts");
|
||||||
|
|
||||||
wxString indexFile = dir + _T("/FontsIndex");
|
wxStringTokenizer tkn(path, wxPATH_SEP);
|
||||||
|
while ( tkn.HasMoreTokens() )
|
||||||
if ( !wxFileName::FileExists(indexFile) )
|
|
||||||
{
|
{
|
||||||
wxLogWarning(_("No fonts found in %s"), dir.c_str());
|
wxString dir = tkn.GetNextToken();
|
||||||
|
|
||||||
|
wxArrayString indexFiles;
|
||||||
|
if ( !wxDir::GetAllFiles(dir, &indexFiles, _T("FontsIndex")) )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
for ( wxArrayString::const_iterator i = indexFiles.begin();
|
||||||
|
i != indexFiles.end(); ++i )
|
||||||
|
{
|
||||||
|
AddFontsFromDir(*i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( GetBundles().empty() )
|
||||||
|
{
|
||||||
|
// wxDFB is unusable without fonts, so terminate the app
|
||||||
|
wxLogFatalError(_("No fonts found in %s."), path.c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxFontsManager::AddFontsFromDir(const wxString& indexFile)
|
||||||
|
{
|
||||||
|
wxFileName fn(indexFile);
|
||||||
|
wxString dir = fn.GetPath();
|
||||||
|
|
||||||
|
if ( !fn.FileExists() )
|
||||||
|
{
|
||||||
|
wxLogWarning(_("Fonts index file %s disappeared while loading fonts."),
|
||||||
|
indexFile.c_str());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user