Add support for loading fonts from files.

wxFont::AddPrivateFont() can now be used to load a font from a file for the
applications private use. Update the font sample to show this.

Closes #13568.
This commit is contained in:
Arthur Norman
2017-11-07 17:41:11 +01:00
committed by Vadim Zeitlin
parent 760bd1bf4e
commit 547e40b114
19 changed files with 366 additions and 8 deletions

View File

@@ -109,6 +109,7 @@ All (GUI):
- Allow wxWebView::RunScript() return values (Jose Lorenzo, GSoC 2017).
- Allow using fractional pen widths with wxGraphicsContext (Adrien Tétar).
- Add support for loading fonts from external files (Arthur Norman).
- Improve wxSVGFileDC to support more of wxDC API (Maarten Bent).
- Add support for wxAuiManager and wxAuiPaneInfo to XRC (Andrea Zanellato).
- Add support for wxSL_MIN_MAX_LABELS and wxSL_VALUE_LABEL to XRC (ousnius).

View File

@@ -188,6 +188,7 @@ Currently the following symbols exist:
@itemdef{wxHAS_IMAGES_IN_RESOURCES, Defined if <a href="http://en.wikipedia.org/wiki/Resource_(Windows)">
Windows resource files</a> or OS/2 resource files are available on the current platform.}
@itemdef{wxHAS_POWER_EVENTS, Defined if wxPowerEvent are ever generated on the current platform.}
@itemdef{wxHAS_PRIVATE_FONTS, Defined if wxFont::AddPrivateFont() is implemented.}
@itemdef{wxHAS_RADIO_MENU_ITEMS,
Defined if the current port supports radio menu items (see wxMenu::AppendRadioItem).}
@itemdef{wxHAS_RAW_BITMAP, Defined if direct access to bitmap data using the classes in @c wx/rawbmp.h is supported.}

View File

@@ -75,4 +75,19 @@ implemented for Windows and Unix (GTK+ and Motif) ports only, all the methods
are available for all the ports and should be used to make your program work
correctly when they are implemented later.
@section overview_font_privateinfo Private font information
Sometimes an application needs fonts that are not globally installed on the
system. On Macintosh/OSX this can be arranged by placing the desired fonts
within the Application Bundle in Contents/Resources/Fonts and using
the ATSApplicationFontsPath key to point there. The full details of the
procedure there can be found as OSX developer resources. For the GTK+ and
Windows ports it is possible to add TrueType fonts at run-time using
a sequence of calls to wxFont::AddPrivateFont() to give the names of files
containing font data, followed by a call to wxFont::ActivatePrivateFonts()
to complete the process of making the fonts available. These functions
return false if they fail. They should be called just once before any
graphics contexts have been created or other activity liable to use fonts
has happened.
*/

View File

@@ -328,6 +328,12 @@ public:
// from the string representation of wxNativeFontInfo
static wxFont *New(const wxString& strNativeFontDesc);
// These functions can be used to load private fonts if supported by this
// platform (wxHAS_PRIVATE_FONTS is defined): first add one or more files
// and then activate all of them at once.
static bool AddPrivateFont(const wxString& filename);
static bool ActivatePrivateFonts();
// comparison
bool operator==(const wxFont& font) const;
bool operator!=(const wxFont& font) const { return !(*this == font); }

View File

@@ -118,4 +118,8 @@ private:
wxDECLARE_DYNAMIC_CLASS(wxFont);
};
#ifndef __WXMSW__
#define wxHAS_PRIVATE_FONTS 1
#endif
#endif // _WX_GTK_FONT_H_

View File

@@ -169,4 +169,6 @@ private:
wxDECLARE_DYNAMIC_CLASS(wxFont);
};
#define wxHAS_PRIVATE_FONTS 1
#endif // _WX_FONT_H_

View File

@@ -167,4 +167,6 @@ private:
wxDECLARE_DYNAMIC_CLASS(wxFont);
};
#define wxHAS_PRIVATE_FONTS 1
#endif // _WX_FONT_H_

View File

@@ -664,6 +664,44 @@ public:
const wxNativeFontInfo *GetNativeFontInfo() const;
/**
Specify the name of a file containing a TrueType font to be
made available to the current application.
This method can be used to allow this application to use the font from
the given file even if it is not globally installed on the system.
Under OS X this method actually doesn't do anything other than check
for the existence of the file in the "Fonts" subdirectory of the
application bundle "Resources" directory. You are responsible for
actually making the font file available in this directory and setting
@c ATSApplicationFontsPath to @c Fonts value in your @c Info.plist
file. See also wxStandardPaths::GetResourcesDir().
Notice that this method must be called before any graphics contexts
have been created.
Currently this method is implemented for all major platforms but you
may also test for @c wxHAS_PRIVATE_FONTS preprocessor symbol: if it is
not defined, this function and ActivatePrivatefonts() are not
implemented at all and always simply return false.
@return @true if the font was added and ActivatePrivatefonts() should
be called next or @false if adding it failed.
@since 2.9.5
*/
static bool AddPrivateFont(const wxString& filename);
/**
Make all fonts registered by AddPrivateFont() actually available.
@return @true if the private fonts can now be used or @false on error.
@since 2.9.5
*/
static bool ActivatePrivatefonts();
/**
Gets the point size.

View File

@@ -128,7 +128,7 @@ COND_wxUSE_REGEX_builtin___LIB_REGEX_p = \
### Targets: ###
all: font$(EXEEXT) $(__font_bundle___depname)
all: font$(EXEEXT) $(__font_bundle___depname) data
install:
@@ -171,6 +171,18 @@ font$(EXEEXT): $(FONT_OBJECTS) $(__font___win32rc)
@COND_PLATFORM_MACOSX_1@font_bundle: $(____font_BUNDLE_TGT_REF_DEP)
data:
@mkdir -p .
@for f in wxprivate.ttf; do \
if test ! -f ./$$f -a ! -d ./$$f ; \
then x=yep ; \
else x=`find $(srcdir)/$$f -newer ./$$f -print` ; \
fi; \
case "$$x" in ?*) \
cp -pRf $(srcdir)/$$f . ;; \
esac; \
done
font_sample_rc.o: $(srcdir)/../../samples/sample.rc
$(WINDRES) -i$< -o$@ --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_1) $(__DEBUG_DEFINE_p_1) $(__EXCEPTIONS_DEFINE_p_1) $(__RTTI_DEFINE_p_1) $(__THREAD_DEFINE_p_1) --include-dir $(srcdir) $(__DLLFLAG_p_1) --include-dir $(srcdir)/../../samples $(__RCDEFDIR_p) --include-dir $(top_srcdir)/include
@@ -181,4 +193,4 @@ font_font.o: $(srcdir)/font.cpp
# Include dependency info, if present:
@IF_GNU_MAKE@-include ./.deps/*.d
.PHONY: all install uninstall clean distclean font_bundle
.PHONY: all install uninstall clean distclean font_bundle data

View File

@@ -9,4 +9,11 @@
<wx-lib>base</wx-lib>
</exe>
<wx-data id="data">
<files>
wxprivate.ttf
</files>
</wx-data>
</makefile>

View File

@@ -29,6 +29,7 @@
#include "wx/fontmap.h"
#include "wx/encconv.h"
#include "wx/splitter.h"
#include "wx/stdpaths.h"
#include "wx/textfile.h"
#include "wx/settings.h"
@@ -130,6 +131,7 @@ public:
void OnSetFamily(wxCommandEvent& event);
void OnSetFaceName(wxCommandEvent& event);
void OnSetEncoding(wxCommandEvent& event);
void OnPrivateFont(wxCommandEvent& event);
protected:
bool DoEnumerateFamilies(bool fixedWidthOnly,
@@ -212,6 +214,8 @@ enum
Font_SetFamily,
Font_SetFaceName,
Font_SetEncoding,
Font_Private,
Font_Max
};
@@ -265,6 +269,7 @@ wxBEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU(Font_EnumFamilies, MyFrame::OnEnumerateFamilies)
EVT_MENU(Font_EnumFixedFamilies, MyFrame::OnEnumerateFixedFamilies)
EVT_MENU(Font_EnumEncodings, MyFrame::OnEnumerateEncodings)
EVT_MENU(Font_Private, MyFrame::OnPrivateFont)
wxEND_EVENT_TABLE()
// Create a new application object: this macro will allow wxWidgets to create
@@ -287,6 +292,7 @@ bool MyApp::OnInit()
{
if ( !wxApp::OnInit() )
return false;
wxString privfont = argv[0].BeforeLast('/');
// Create the main application window
MyFrame *frame = new MyFrame(wxT("Font wxWidgets demo"),
@@ -381,7 +387,6 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
wxT("Default font for user interface objects such as menus and dialog boxes. "));
menuSelect->Append(Font_SystemSettings, wxT("System fonts"), menuSettingFonts);
menuSelect->AppendSeparator();
menuSelect->Append(Font_EnumFamilies, wxT("Enumerate font &families\tCtrl-F"));
menuSelect->Append(Font_EnumFixedFamilies,
@@ -392,6 +397,42 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
wxT("Find font for en&coding...\tCtrl-C"),
wxT("Find font families for given encoding"));
#ifdef wxHAS_PRIVATE_FONTS
// Try to use a private font, under most platforms we just look for it in
// the current directory but under OS X it must be in a specific location
// so look for it there.
//
// For OS X you also need to ensure that you actually do put wxprivate.ttf
// in font.app/Contents/Resources/Fonts and add the following snippet
//
// <plist version="0.9">
// <dict>
// ...
// <key>ATSApplicationFontsPath</key>
// <string>Fonts</string>
// ...
// </dict>
// </plist>
//
// to your font.app/Contents/Info.plist.
wxString privfont;
#ifdef __WXOSX__
privfont << wxStandardPaths::Get().GetResourcesDir() << "/Fonts/";
#endif
privfont << "wxprivate.ttf";
if ( wxFont::AddPrivateFont(privfont) &&
wxFont::ActivatePrivateFonts() )
{
menuSelect->AppendSeparator();
menuSelect->Append(Font_Private,
"Select private font",
"Select a font available only in this application");
}
#endif // wxHAS_PRIVATE_FONTS
// now append the freshly created menu to the menu bar...
wxMenuBar *menuBar = new wxMenuBar;
menuBar->Append(menuFile, wxT("&File"));
@@ -873,6 +914,20 @@ void MyFrame::OnSelectFont(wxCommandEvent& WXUNUSED(event))
}
}
void MyFrame::OnPrivateFont(wxCommandEvent& WXUNUSED(event))
{
wxFont font(GetCanvas()->GetTextFont());
if (font.SetFaceName("wxprivate"))
{
wxASSERT_MSG( font.IsOk(), wxT("The font should now be valid")) ;
DoChangeFont(font);
}
else
{
wxLogError("Failed to use private font.");
}
}
void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
{
// true is to force the frame to close

View File

@@ -213,7 +213,7 @@ $(OBJS):
### Targets: ###
all: $(OBJS)\font.exe
all: $(OBJS)\font.exe data
clean:
-if exist $(OBJS)\*.obj del $(OBJS)\*.obj
@@ -231,6 +231,10 @@ $(OBJS)\font.exe: $(FONT_OBJECTS) $(OBJS)\font_sample.res
c0w32.obj $(FONT_OBJECTS),$@,, $(__WXLIB_CORE_p) $(__WXLIB_BASE_p) $(__WXLIB_MONO_p) $(__LIB_SCINTILLA_IF_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__CAIRO_LIB_p) ole2w32.lib oleacc.lib import32.lib cw32$(__THREADSFLAG_5)$(__RUNTIME_LIBS_8).lib,, $(OBJS)\font_sample.res
|
data:
if not exist $(OBJS) mkdir $(OBJS)
for %f in (wxprivate.ttf) do if not exist $(OBJS)\%f copy .\%f $(OBJS)
$(OBJS)\font_sample.res: .\..\..\samples\sample.rc
brcc32 -32 -r -fo$@ -i$(BCCDIR)\include -d__WXMSW__ $(__WXUNIV_DEFINE_p_1) $(__DEBUG_DEFINE_p_1) $(__NDEBUG_DEFINE_p_1) $(__EXCEPTIONS_DEFINE_p_1) $(__RTTI_DEFINE_p_1) $(__THREAD_DEFINE_p_1) $(__UNICODE_DEFINE_p_1) -i$(SETUPHDIR) -i.\..\..\include $(____CAIRO_INCLUDEDIR_FILENAMES_1_p) -i. $(__DLLFLAG_p_1) -i.\..\..\samples -i$(BCCDIR)\include\windows\sdk -dNOPCH .\..\..\samples\sample.rc

View File

@@ -210,7 +210,7 @@ $(OBJS):
### Targets: ###
all: $(OBJS)\font.exe
all: $(OBJS)\font.exe data
clean:
-if exist $(OBJS)\*.o del $(OBJS)\*.o
@@ -220,13 +220,17 @@ clean:
$(OBJS)\font.exe: $(FONT_OBJECTS) $(OBJS)\font_sample_rc.o
$(CXX) -o $@ $(FONT_OBJECTS) $(__DEBUGINFO) $(__THREADSFLAG) -L$(LIBDIRNAME) -Wl,--subsystem,windows -mwindows $(____CAIRO_LIBDIR_FILENAMES_p) $(LDFLAGS) $(__WXLIB_CORE_p) $(__WXLIB_BASE_p) $(__WXLIB_MONO_p) $(__LIB_SCINTILLA_IF_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) -lwxzlib$(WXDEBUGFLAG) -lwxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG) -lwxexpat$(WXDEBUGFLAG) $(EXTRALIBS_FOR_BASE) $(__CAIRO_LIB_p) -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwinspool -lwinmm -lshell32 -lshlwapi -lcomctl32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lversion -lwsock32 -lwininet -loleacc
data:
if not exist $(OBJS) mkdir $(OBJS)
for %%f in (wxprivate.ttf) do if not exist $(OBJS)\%%f copy .\%%f $(OBJS)
$(OBJS)\font_sample_rc.o: ./../../samples/sample.rc
$(WINDRES) -i$< -o$@ --define __WXMSW__ $(__WXUNIV_DEFINE_p_1) $(__DEBUG_DEFINE_p_1) $(__NDEBUG_DEFINE_p_1) $(__EXCEPTIONS_DEFINE_p_1) $(__RTTI_DEFINE_p_1) $(__THREAD_DEFINE_p_1) $(__UNICODE_DEFINE_p_1) --include-dir $(SETUPHDIR) --include-dir ./../../include $(__CAIRO_INCLUDEDIR_p) --include-dir . $(__DLLFLAG_p_1) --include-dir ./../../samples --define NOPCH
$(OBJS)\font_font.o: ./font.cpp
$(CXX) -c -o $@ $(FONT_CXXFLAGS) $(CPPDEPS) $<
.PHONY: all clean
.PHONY: all clean data
SHELL := $(COMSPEC)

View File

@@ -339,7 +339,7 @@ $(OBJS):
### Targets: ###
all: $(OBJS)\font.exe
all: $(OBJS)\font.exe data
clean:
-if exist $(OBJS)\*.obj del $(OBJS)\*.obj
@@ -354,6 +354,10 @@ $(OBJS)\font.exe: $(FONT_OBJECTS) $(OBJS)\font_sample.res
$(FONT_OBJECTS) $(FONT_RESOURCES) $(__WXLIB_CORE_p) $(__WXLIB_BASE_p) $(__WXLIB_MONO_p) $(__LIB_SCINTILLA_IF_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__CAIRO_LIB_p) kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib shlwapi.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib version.lib wsock32.lib wininet.lib
<<
data:
if not exist $(OBJS) mkdir $(OBJS)
for %f in (wxprivate.ttf) do if not exist $(OBJS)\%f copy .\%f $(OBJS)
$(OBJS)\font_sample.res: .\..\..\samples\sample.rc
rc /fo$@ /d WIN32 $(____DEBUGRUNTIME_3_p_1) /d _CRT_SECURE_NO_DEPRECATE=1 /d _CRT_NON_CONFORMING_SWPRINTFS=1 /d _SCL_SECURE_NO_WARNINGS=1 $(__NO_VC_CRTDBG_p_1) /d __WXMSW__ $(__WXUNIV_DEFINE_p_1) $(__DEBUG_DEFINE_p_1) $(__NDEBUG_DEFINE_p_1) $(__EXCEPTIONS_DEFINE_p_1) $(__RTTI_DEFINE_p_1) $(__THREAD_DEFINE_p_1) $(__UNICODE_DEFINE_p_1) /i $(SETUPHDIR) /i .\..\..\include $(____CAIRO_INCLUDEDIR_FILENAMES_1_p) /i . $(__DLLFLAG_p_1) /d _WINDOWS /i .\..\..\samples /d NOPCH .\..\..\samples\sample.rc

BIN
samples/font/wxprivate.ttf Normal file

Binary file not shown.

View File

@@ -1137,4 +1137,20 @@ bool wxFromString(const wxString& str, wxFontBase *font)
return font->SetNativeFontInfo(str);
}
#ifndef wxHAS_PRIVATE_FONTS
// Adding private fonts is not supported on this platform, so provide the
// functions that would be used, but make them no-ops that return a code
// that indicates failure.
bool wxFontBase::AddPrivateFont(const wxString& WXUNUSED(filename))
{
return false;
}
bool wxFontBase::ActivatePrivateFonts()
{
return false;
}
#endif // !wxHAS_PRIVATE_FONTS

View File

@@ -31,6 +31,11 @@
#include "wx/gtk/private.h"
#ifdef GDK_WINDOWING_X11
#include <X11/Xlib.h>
#include <X11/Xft/Xft.h>
#endif
// ----------------------------------------------------------------------------
// constants
// ----------------------------------------------------------------------------
@@ -551,3 +556,58 @@ bool wxFont::GTKSetPangoAttrs(PangoLayout* layout) const
return true;
}
// ----------------------------------------------------------------------------
// Support for adding private fonts
// ----------------------------------------------------------------------------
#ifdef wxHAS_PRIVATE_FONTS
namespace
{
FcConfig* gs_fcConfig = NULL;
}
bool wxFontBase::AddPrivateFont(const wxString& filename)
{
if ( !gs_fcConfig )
{
gs_fcConfig = FcConfigGetCurrent();
if ( !gs_fcConfig )
{
gs_fcConfig = FcConfigCreate();
if ( !gs_fcConfig )
{
wxLogError(_("Failed to add custom font \"%s\" as "
"font configuration object creation failed."),
filename);
return false;
}
}
}
if ( !FcConfigAppFontAddFile(gs_fcConfig,
reinterpret_cast<const FcChar8*>(
static_cast<const char*>(filename.utf8_str())
)) )
{
wxLogError(_("Failed to add custom font \"%s\"."), filename);
return false;
}
return true;
}
bool wxFontBase::ActivatePrivateFonts()
{
if ( !FcConfigSetCurrent(gs_fcConfig) )
{
wxLogError(_("Failed to update current font configuration."));
return false;
}
return true;
}
#endif // wxHAS_PRIVATE_FONTS

View File

@@ -37,6 +37,7 @@
#include "wx/dcprint.h"
#endif
#include "wx/filename.h"
#include "wx/stack.h"
#include "wx/private/graphics.h"
@@ -959,6 +960,47 @@ wxGDIPlusBrushData::CreateRadialGradientBrush(wxDouble xo, wxDouble yo,
SetGradientStops(brush, stops, true);
}
//-----------------------------------------------------------------------------
// Support for adding private fonts
//-----------------------------------------------------------------------------
namespace
{
wxArrayString gs_privateFontFileNames;
Gdiplus::PrivateFontCollection* gs_privateFonts = NULL;
Gdiplus::FontFamily* gs_pFontFamily = NULL;
} // anonymous namespace
bool wxFontBase::AddPrivateFont(const wxString& filename)
{
if ( !wxFileName::FileExists(filename) )
{
wxLogError(_("Font file \"%s\" doesn't exist."), filename);
return false;
}
gs_privateFontFileNames.Add(filename);
return true;
}
bool wxFontBase::ActivatePrivateFonts()
{
const int n = gs_privateFontFileNames.size();
for ( int i = 0 ; i < n; i++ )
{
const wxString& fname = gs_privateFontFileNames[i];
if ( !AddFontResourceEx(fname.t_str(), FR_PRIVATE, 0) )
{
wxLogSysError(_("Font file \"%s\" couldn't be loaded"),
fname);
}
}
return true;
}
//-----------------------------------------------------------------------------
// wxGDIPlusFont implementation
//-----------------------------------------------------------------------------
@@ -970,7 +1012,31 @@ wxGDIPlusFontData::Init(const wxString& name,
const wxColour& col,
Unit fontUnit)
{
m_font = new Font(name.wc_str(), size, style, fontUnit);
// If the user has registered any private fonts, they should be used in
// preference to any system-wide ones.
m_font = NULL;
if ( gs_privateFonts )
{
const int count = gs_privateFonts->GetFamilyCount();
// We should find all the families, i.e. "found" should be "count".
int found = 0;
gs_privateFonts->GetFamilies(count, gs_pFontFamily, &found);
for ( int j = 0 ; j < found; j++ )
{
wchar_t familyName[LF_FACESIZE];
int rc = gs_pFontFamily[j].GetFamilyName(familyName);
if ( rc == 0 && lstrcmp(name, familyName) == 0 )
{
m_font = new Font(&gs_pFontFamily[j], size, style, fontUnit);
break;
}
}
}
if ( !m_font )
m_font = new Font(name, size, style, fontUnit);
m_textBrush = new SolidBrush(wxColourToColor(col));
}
@@ -2275,6 +2341,20 @@ void wxGDIPlusRenderer::Load()
{
wxLogTrace("gdiplus", "successfully initialized GDI+");
m_loaded = 1;
// Make private fonts available to GDI+, if any.
const int n = gs_privateFontFileNames.size();
if ( n )
{
gs_privateFonts = new Gdiplus::PrivateFontCollection();
for ( int i = 0 ; i < n; i++ )
{
const wxString& fname = gs_privateFontFileNames[i];
gs_privateFonts->AddFontFile(fname.t_str());
}
gs_pFontFamily = new Gdiplus::FontFamily[n];
}
}
else
{
@@ -2289,6 +2369,15 @@ void wxGDIPlusRenderer::Unload()
{
GdiplusShutdown(m_gditoken);
m_gditoken = 0;
if ( gs_privateFonts )
{
delete gs_privateFonts;
gs_privateFonts = NULL;
delete[] gs_pFontFamily;
gs_pFontFamily = NULL;
}
}
m_loaded = -1; // next Load() will try again
}

View File

@@ -24,6 +24,8 @@
#include "wx/fontutil.h"
#include "wx/fontmap.h"
#include "wx/encinfo.h"
#include "wx/filename.h"
#include "wx/stdpaths.h"
#include "wx/tokenzr.h"
@@ -63,6 +65,42 @@ wxString wxNativeEncodingInfo::ToString() const
return s;
}
// ----------------------------------------------------------------------------
// Private Fonts
// ----------------------------------------------------------------------------
// On OSX one can provide private fonts simply by putting the font files in
// with the resources in your application bundle. So the API for adding fonts
// does not do anything except checking that the file you pass to it actually
// does exist and is in the correct directory.
bool wxFontBase::AddPrivateFont(const wxString& filename)
{
wxFileName fn(filename);
if ( !fn.FileExists() )
{
wxLogError(_("Font file \"%s\" doesn't exist."), filename);
return false;
}
wxString fontsDir;
fontsDir << wxStandardPaths::Get().GetResourcesDir() << "/Fonts";
if ( fn.GetPath() != fontsDir )
{
wxLogError(_("Font file \"%s\" cannot be used as it is not inside "
"the font directory \"%s\"."), filename, fontsDir);
return false;
}
return true;
}
bool wxFontBase::ActivatePrivateFonts()
{
// Nothing to do here.
return true;
}
// ----------------------------------------------------------------------------
// helper functions
// ----------------------------------------------------------------------------