*
* \author Asger Alstrup
*
- * Full author contact details are available in file CREDITS
+ * Full author contact details are available in file CREDITS.
*/
#include <config.h>
-#include <cmath> // fabs()
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
#include "xfont_loader.h"
#include "FontInfo.h"
-#include "gettext.h"
+
#include "debug.h"
+#include "LColor.h"
#include "lyxrc.h" // lyxrc.font_*
-#include "BufferView.h"
-#include "frontends/LyXView.h"
-#include "support/systemcall.h"
+
+#include "frontends/lyx_gui.h"
+
#include "support/filetools.h"
+#include "support/systemcall.h"
-#include FORMS_H_LOCATION
+#include "lyx_forms.h"
+
+#include <algorithm>
+
+using lyx::support::LibFileSearch;
+using lyx::support::OnlyPath;
+using lyx::support::Systemcall;
using std::endl;
+using std::string;
+
// The global fontloader
xfont_loader fontloader;
}
namespace {
+
string const symbolPattern(LyXFont::FONT_FAMILY family)
{
switch (family) {
default:
return string();
- }
+ }
}
+string const fontName(string const & family, string const & foundry)
+{
+ if (foundry.empty() || foundry == "Xft")
+ return "-*-"+family;
+ else
+ return "-"+foundry+"-"+family;
}
+
+bool addFontPath()
+{
+ string const dir = OnlyPath(LibFileSearch("xfonts", "fonts.dir"));
+ if (!dir.empty()) {
+ int n;
+ char ** p = XGetFontPath(fl_get_display(), &n);
+ if (std::find(p, p + n, dir) != p + n)
+ return false;
+ lyxerr[Debug::FONT] << "Adding " << dir
+ << " to the font path." << endl;
+ string const command = "xset fp+ " + dir;
+ Systemcall s;
+ if (!s.startscript(Systemcall::Wait, command))
+ return true;
+ lyxerr << "Unable to add " << dir << "to the font path."
+ << endl;
+ }
+ return false;
+}
+
+} // namespace anon
+
// Get font info
/* Takes care of finding which font that can match the given request. Tries
different alternatives. */
!fontinfo[family][series][shape]->exist() &&
first_time) {
first_time = false;
- string const dir =
- OnlyPath(LibFileSearch("xfonts", "fonts.dir"));
- if (!dir.empty()) {
- int n;
- char ** p = XGetFontPath(fl_get_display(), &n);
- if (std::find(p, p+n, dir) != p+n)
- return;
- lyxerr << "Adding " << dir << " to the font path.\n";
- string const command = "xset fp+ " + dir;
- Systemcall s;
- if (!s.startscript(Systemcall::Wait, command)) {
- delete fontinfo[family][series][shape];
- fontinfo[family][series][shape] = new FontInfo(pat);
- } else
- lyxerr << "Unable to add font path.\n";
+ if (addFontPath()) {
+ delete fontinfo[family][series][shape];
+ fontinfo[family][series][shape] = new FontInfo(pat);
}
}
return;
switch (family) {
case LyXFont::ROMAN_FAMILY:
switch (cfam) {
- case 0: ffamily = lyxrc.roman_font_name; break;
+ case 0: ffamily = fontName(lyxrc.roman_font_name,
+ lyxrc.roman_font_foundry);
+ break;
case 1: ffamily = "-*-times";
default: cfam = 100;
}
break;
case LyXFont::SANS_FAMILY:
switch (cfam) {
- case 0: ffamily = lyxrc.sans_font_name; break;
+ case 0: ffamily = fontName(lyxrc.sans_font_name,
+ lyxrc.sans_font_foundry);
+ break;
case 1: ffamily = "-*-helvetica";
default: cfam = 100;
}
break;
case LyXFont::TYPEWRITER_FAMILY:
switch (cfam) {
- case 0: ffamily = lyxrc.typewriter_font_name; break;
+ case 0: ffamily = fontName(lyxrc.typewriter_font_name,
+ lyxrc.typewriter_font_foundry);
+ break;
case 1: ffamily = "-*-courier";
default: cfam = 100;
}
LyXFont::FONT_SHAPE shape,
LyXFont::FONT_SIZE size)
{
- if (!lyxrc.use_gui) {
+ if (!lyx_gui::use_gui) {
if (!dummyXFontStructisGood) {
// no character specific info
dummyXFontStruct.per_char = 0;
bool xfont_loader::available(LyXFont const & f)
{
- if (!lyxrc.use_gui)
+ if (!lyx_gui::use_gui)
return false;
if (!fontinfo[f.family()][f.series()][f.realShape()])