2002-06-19 03:38:44 +00:00
|
|
|
/**
|
|
|
|
* \file qfont_loader.C
|
2002-09-24 13:57:09 +00:00
|
|
|
* This file is part of LyX, the document processor.
|
|
|
|
* Licence details can be found in the file COPYING.
|
2002-06-19 03:38:44 +00:00
|
|
|
*
|
|
|
|
* \author Asger Alstrup
|
2002-09-24 13:57:09 +00:00
|
|
|
* \author John Levon
|
|
|
|
*
|
|
|
|
* Full author contact details are available in file CREDITS
|
2002-06-19 03:38:44 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
#include <config.h>
|
|
|
|
|
|
|
|
#ifdef __GNUG__
|
|
|
|
#pragma implementation
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#include "qfont_loader.h"
|
|
|
|
#include "gettext.h"
|
|
|
|
#include "debug.h"
|
|
|
|
#include "lyxrc.h"
|
|
|
|
#include "BufferView.h"
|
2002-10-15 12:59:08 +00:00
|
|
|
|
|
|
|
#include <qglobal.h>
|
|
|
|
#if QT_VERSION < 0x030000
|
|
|
|
#include "support/lstrings.h"
|
|
|
|
#endif
|
2002-06-19 03:38:44 +00:00
|
|
|
|
2002-09-07 19:51:58 +00:00
|
|
|
using std::endl;
|
|
|
|
|
2002-06-19 03:38:44 +00:00
|
|
|
qfont_loader::qfont_loader()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
qfont_loader::~qfont_loader()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void qfont_loader::update()
|
|
|
|
{
|
|
|
|
int i1,i2,i3,i4;
|
|
|
|
|
|
|
|
// fuck this !
|
|
|
|
|
|
|
|
for (i1 = 0; i1 < LyXFont::NUM_FAMILIES; ++i1) {
|
|
|
|
for (i2 = 0; i1 < 2; ++i2) {
|
|
|
|
for (i3 = 0; i1 < 4; ++i3) {
|
|
|
|
for (i4 = 0; i1 < 10; ++i4) {
|
|
|
|
fontinfo_[i1][i2][i3][i4].reset(0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2002-09-07 19:51:58 +00:00
|
|
|
QFont const & qfont_loader::get(LyXFont const & f)
|
|
|
|
{
|
|
|
|
QFont const & ret(getfontinfo(f)->font);
|
|
|
|
|
|
|
|
if (lyxerr.debugging(Debug::FONT)) {
|
|
|
|
lyxerr[Debug::FONT] << "Font '" << f.stateText(0)
|
|
|
|
<< "' matched by\n" << ret.rawName().latin1() << endl;
|
|
|
|
}
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2002-06-19 03:38:44 +00:00
|
|
|
qfont_loader::font_info::font_info(LyXFont const & f)
|
|
|
|
: metrics(font)
|
|
|
|
{
|
|
|
|
switch (f.family()) {
|
|
|
|
case LyXFont::SYMBOL_FAMILY:
|
|
|
|
font.setRawName("-*-symbol-*-*-*-*-*-*-*-*-*-*-adobe-fontspecific");
|
|
|
|
break;
|
|
|
|
case LyXFont::CMR_FAMILY:
|
|
|
|
font.setRawName("-*-cmr10-medium-*-*-*-*-*-*-*-*-*-*-*");
|
|
|
|
break;
|
|
|
|
case LyXFont::CMSY_FAMILY:
|
|
|
|
font.setRawName("-*-cmsy10-*-*-*-*-*-*-*-*-*-*-*-*");
|
|
|
|
break;
|
|
|
|
case LyXFont::CMM_FAMILY:
|
|
|
|
font.setRawName("-*-cmmi10-medium-*-*-*-*-*-*-*-*-*-*-*");
|
|
|
|
break;
|
|
|
|
case LyXFont::CMEX_FAMILY:
|
|
|
|
font.setRawName("-*-cmex10-*-*-*-*-*-*-*-*-*-*-*-*");
|
|
|
|
break;
|
|
|
|
case LyXFont::MSA_FAMILY:
|
|
|
|
font.setRawName("-*-msam10-*-*-*-*-*-*-*-*-*-*-*-*");
|
|
|
|
break;
|
|
|
|
case LyXFont::MSB_FAMILY:
|
|
|
|
font.setRawName("-*-msbm10-*-*-*-*-*-*-*-*-*-*-*-*");
|
|
|
|
break;
|
|
|
|
case LyXFont::EUFRAK_FAMILY:
|
|
|
|
font.setRawName("-*-eufm10-medium-*-*-*-*-*-*-*-*-*-*-*");
|
|
|
|
break;
|
|
|
|
case LyXFont::ROMAN_FAMILY:
|
|
|
|
font.setFamily("times");
|
|
|
|
break;
|
|
|
|
case LyXFont::SANS_FAMILY:
|
|
|
|
font.setFamily("helvetica");
|
|
|
|
break;
|
|
|
|
case LyXFont::TYPEWRITER_FAMILY:
|
|
|
|
font.setFamily("courier");
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2002-09-07 20:23:40 +00:00
|
|
|
font.setPointSize(int((lyxrc.font_sizes[f.size()] * lyxrc.dpi *
|
|
|
|
(lyxrc.zoom / 100.0)) / 72.27 + 0.5));
|
|
|
|
|
|
|
|
// FIXME: lyxrc, check for failure etc.
|
|
|
|
|
2002-06-19 03:38:44 +00:00
|
|
|
switch (f.series()) {
|
|
|
|
case LyXFont::MEDIUM_SERIES:
|
|
|
|
font.setWeight(QFont::Normal);
|
|
|
|
break;
|
|
|
|
case LyXFont::BOLD_SERIES:
|
|
|
|
font.setWeight(QFont::Bold);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2002-09-08 05:13:04 +00:00
|
|
|
switch (f.realShape()) {
|
2002-06-19 03:38:44 +00:00
|
|
|
case LyXFont::ITALIC_SHAPE:
|
|
|
|
case LyXFont::SLANTED_SHAPE:
|
|
|
|
font.setItalic(true);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
metrics = QFontMetrics(font);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
qfont_loader::font_info const * qfont_loader::getfontinfo(LyXFont const & f)
|
|
|
|
{
|
|
|
|
if (!lyxrc.use_gui) {
|
|
|
|
// FIXME
|
|
|
|
}
|
|
|
|
|
2002-09-08 05:13:04 +00:00
|
|
|
font_info * fi = fontinfo_[f.family()][f.series()][f.realShape()][f.size()].get();
|
2002-06-19 03:38:44 +00:00
|
|
|
if (fi) {
|
|
|
|
return fi;
|
|
|
|
} else {
|
2002-09-14 01:44:58 +00:00
|
|
|
fi = new font_info(f);
|
2002-09-08 05:13:04 +00:00
|
|
|
fontinfo_[f.family()][f.series()][f.realShape()][f.size()].reset(fi);
|
2002-06-19 03:38:44 +00:00
|
|
|
return fi;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2002-10-14 14:49:00 +00:00
|
|
|
bool qfont_loader::available(LyXFont const & f)
|
2002-06-19 03:38:44 +00:00
|
|
|
{
|
2002-10-14 14:49:00 +00:00
|
|
|
if (!lyxrc.use_gui)
|
|
|
|
return false;
|
|
|
|
|
2002-10-15 12:59:08 +00:00
|
|
|
#if QT_VERSION >= 0x030000
|
2002-10-14 14:49:00 +00:00
|
|
|
return getfontinfo(f)->font.exactMatch();
|
2002-10-15 12:59:08 +00:00
|
|
|
#else
|
|
|
|
string tmp;
|
|
|
|
switch (f.family()) {
|
|
|
|
case LyXFont::SYMBOL_FAMILY: tmp = "symbol"; break;
|
|
|
|
case LyXFont::CMR_FAMILY: tmp = "cmr10"; break;
|
|
|
|
case LyXFont::CMSY_FAMILY: tmp = "cmsy10"; break;
|
|
|
|
case LyXFont::CMM_FAMILY: tmp = "cmmi10"; break;
|
|
|
|
case LyXFont::CMEX_FAMILY: tmp = "cmex10"; break;
|
|
|
|
case LyXFont::MSA_FAMILY: tmp = "msam10"; break;
|
|
|
|
case LyXFont::MSB_FAMILY: tmp = "msbm10"; break;
|
|
|
|
default: break;
|
|
|
|
}
|
|
|
|
if (tmp.empty())
|
|
|
|
return false;
|
|
|
|
else
|
|
|
|
return token(getfontinfo(f)->font.rawName().latin1(), '-', 2)
|
|
|
|
== tmp;
|
|
|
|
#endif
|
2002-06-19 03:38:44 +00:00
|
|
|
}
|