// -*- C++ -*- /* This file is part of * ====================================================== * * LyX, The Document Processor * * Copyright (C) 1997 Asger Alstrup * and the LyX Team. *
*======================================================*/
// Initialize font loader
FontLoader::FontLoader()
{
reset();
}
// Destroy font loader
FontLoader::~FontLoader()
{
unload();
}
// Update fonts after zoom, dpi, font names, or norm change // For now, we just ditch all fonts we have. Later, we should // reuse the ones that are already loaded. void FontLoader::update()
{
unload();
}
// Reset font loader void FontLoader::reset()
{ // Clear font infos, font structs and font metrics for (int i1=0; i1<4; i1++) for (int i2=0; i2<2; i2++) for (int i3=0; i3<4; i3++) {
fontinfo[i1][i2][i3] = 0; for (int i4=0; i4<10; i4++) {
fontstruct[i1][i2][i3][i4] = 0;
}
}
}
// Unload all fonts void FontLoader::unload()
{ // Unload all fonts for (int i1=0; i1<4; i1++) for (int i2=0; i2<2; i2++) for (int i3=0; i3<4; i3++) { if (fontinfo[i1][i2][i3]) { delete fontinfo[i1][i2][i3];
fontinfo[i1][i2][i3] = 0;
} for (int i4=0; i4<10; i4++) { if (fontstruct[i1][i2][i3][i4]) {
XFreeFont(fl_display, fontstruct[i1][i2][i3][i4]);
fontstruct[i1][i2][i3][i4] = 0;
}
}
}
}
// Get font info /* Takes care of finding which font that can match the given request. Tries
different alternatives. */ void FontLoader::getFontinfo(LyXFont::FONT_FAMILY family,
LyXFont::FONT_SERIES series,
LyXFont::FONT_SHAPE shape)
{ // Do we have the font info already? if (fontinfo[family][series][shape] != 0) return;
// Special code for the symbol family if (family == LyXFont::SYMBOL_FAMILY){
fontinfo[family][series][shape] = new FontInfo("-*-symbol-*"); return;
}
// Normal font. Let's search for an existing name that matches.
LString ffamily;
LString fseries;
LString fshape;
LString norm = lyxrc->font_norm;
LString fontname;
FontInfo * fi = new FontInfo();
fontinfo[family][series][shape] = fi;
LString font = fontinfo[family][series][shape]->getFontname(fsize);
if (font.empty()) {
lyxerr.print("No font matches request. Using 'fixed'.");
lyxerr.print("Start LyX as 'lyx -dbg 515' to get more information.");
font = "fixed";
}
minibuffer->Store();
minibuffer->Set(_("Loading font into X-Server..."));
if (fs == 0) { if (font=="fixed") {
lyxerr.print("We're doomed. Can't get 'fixed' font.");
} else {
lyxerr.print("Could not get font. Using 'fixed'.");
fs = XLoadQueryFont(fl_display, "fixed");
}
} else { if (lyxerr.debugging(Error::FONT)) { // Tell user the font matching
LyXFont f;
f.setFamily(family);
f.setSeries(series);
f.setShape(shape);
f.setSize(size); // The rest of the attributes are not interesting
f.setEmph(LyXFont::INHERIT);
f.setUnderbar(LyXFont::INHERIT);
f.setNoun(LyXFont::INHERIT);
f.setLatex(LyXFont::INHERIT);
f.setColor(LyXFont::INHERIT_COLOR);
lyxerr.print(LString("Font '") + f.stateText()
+ "' matched by\n" + font + '\n');
}
}
minibuffer->Reset();
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.