// -*- C++ -*-
/* This file is part of
- * ======================================================
+ * ======================================================
*
* LyX, The Document Processor
*
- * Copyright (C) 1997 Asger Alstrup
+ * Copyright 1997 Asger Alstrup
* and the LyX Team.
*
- * ======================================================*/
+ * ====================================================== */
#include <config.h>
#include <cmath> // fabs()
#include <cstdlib> // atoi()
+#include FORMS_H_LOCATION
+
#ifdef __GNUG__
#pragma implementation "FontInfo.h"
#endif
#include "lyxrc.h" // lyxrc.use_scalable_fonts
#include "support/lstrings.h"
-extern LyXRC * lyxrc;
+using std::endl;
/// Load font close to this size
string FontInfo::getFontname(int size)
int closestind = -1;
double error = 100000;
- for (int i=0; i<matches; i++) {
+ for (int i = 0; i < matches; ++i) {
if (sizes[i] == 0) {
// Scalable font should not be considered close
} else if (sizes[i] == size) {
}
}
- if (scalable && lyxrc->use_scalable_fonts) {
+ if (scalable && lyxrc.use_scalable_fonts) {
// We can use scalable
string font = resize(strings[scaleindex], size);
lyxerr[Debug::FONT] << "Using scalable font to get\n"
return strings[closestind];
}
+
/// Build newly sized font string
-string FontInfo::resize(string const & font, int size) const {
+string FontInfo::resize(string const & font, int size) const
+{
+ string ret(font);
// Find the position of the size spec
-#ifdef WITH_WARNINGS
-#warning rewrite to use std::string constructs
-#endif
- int cut = 0, before = 0, after = 0;
- for (string::size_type i = 0; i < font.length(); ++i) {
- if (font[i] == '-') {
+ int cut = 0;
+ string::iterator before = string::iterator(0);
+ string::iterator after = string::iterator(0);
+ for (string::iterator sit = ret.begin();
+ sit != ret.end(); ++sit)
+ if ((*sit) == '-') {
++cut;
- if (cut == 7) {
- before = i;
- } else if (cut == 8) {
- after = i;
+ if (cut == 7) before = sit + 1;
+ else if (cut == 8) {
+ after = sit;
break;
}
}
- }
-
- string head = font;
- head.erase(before + 1, string::npos);
- string tail = font;
- tail.erase(0, after);
- return head + tostr(size) + tail;
+ ret.replace(before, after, tostr(size));
+ return ret;
}
+
/// Set new pattern
void FontInfo::setPattern(string const & pat)
{
pattern = pat;
}
+
/// Query font in X11
void FontInfo::query()
{
return;
if (pattern.empty()) {
- lyxerr << "Can not use empty font name for font query." << endl;
+ lyxerr << "Can not use empty font name for font query."
+ << endl;
queried = true;
return;
}
- char ** list = XListFonts(fl_display, pattern.c_str(), 100, &matches);
+ char ** list = 0;
+ if (lyxrc.use_gui)
+ list = XListFonts(fl_display, pattern.c_str(), 100, &matches);
if (list == 0) {
// No fonts matched
strings = new string[matches];
// We have matches. Run them through
- for(int i=0; i<matches; i++) {
+ for(int i = 0; i < matches; ++i) {
string name(list[i]);
- sizes[i] = atoi(token(name, '-',7).c_str());
+ sizes[i] = atoi(token(name, '-', 7).c_str());
strings[i] = name;
if (sizes[i] == 0) {
if (scaleindex == -1) {
queried = true;
}
+
+void FontInfo::init()
+{
+ sizes = 0;
+ strings = 0;
+ matches = 0;
+ queried = false;
+ scalable = false;
+ scaleindex = -1;
+}
+
+
/// Release allocated stuff
void FontInfo::release()
{