+2002-11-27 Dekel Tsur <dekelts@tau.ac.il>
+
+ * lyxrc.[Ch]: Add {roman,sans,typewriter}_font_foundry variables.
+
2002-11-27 Lars Gullik Bjønnes <larsbj@gullik.net>
* tabular.C (asciiPrintCell): use string(size, char) instead of
+2002-11-27 Dekel Tsur <dekelts@tau.ac.il>
+
+ * qfont_loader.C (font_info): Use lyxrc.*_font_foundry.
+
+ * QPrefs.C: Handle lyxrc.*_font_foundry.
+
+ * qt_helpers.C: New file.
+
2002-11-27 John Levon <levon@movementarian.org>
* qsetborder.h:
qscreen.C \
qsetborder.h \
qsetborder.C \
+ qt_helpers.h \
+ qt_helpers.C \
qttableview.h \
qttableview.C \
$(DIALOGSOURCES)
#include "lyxrc.h"
#include "frnt_lang.h"
#include "helper_funcs.h"
+#include "qt_helpers.h"
#include "debug.h"
+#include <boost/tuple/tuple.hpp>
+
#include <qpushbutton.h>
#include <qcheckbox.h>
#include <qlineedit.h>
#include "qcoloritem.h"
using std::vector;
+using std::pair;
using std::ostringstream;
using std::setfill;
using std::setw;
QPrefScreenFontsModule * fontmod(dialog_->screenfontsModule);
LyXRC const oldrc(rc);
+
+ boost::tie(rc.roman_font_name, rc.roman_font_foundry)
+ = parseFontName(fontmod->screenRomanCO->currentText().latin1());
+ boost::tie(rc.sans_font_name, rc.sans_font_foundry) =
+ parseFontName(fontmod->screenSansCO->currentText().latin1());
+ boost::tie(rc.typewriter_font_name, rc.typewriter_font_foundry) =
+ parseFontName(fontmod->screenTypewriterCO->currentText().latin1());
- rc.roman_font_name = fontmod->screenRomanCO->currentText().latin1();
- rc.sans_font_name = fontmod->screenSansCO->currentText().latin1();
- rc.typewriter_font_name = fontmod->screenTypewriterCO->currentText().latin1();
rc.zoom = fontmod->screenZoomSB->value();
rc.dpi = fontmod->screenDpiSB->value();
rc.font_sizes[LyXFont::SIZE_TINY] = strToDbl(fontmod->screenTinyED->text().latin1());
return std::distance(vec.begin(), it);
}
+void setComboxFont(QComboBox * cb,
+ string const & family, string const & foundry)
+{
+
+ string const name = makeFontName(family, foundry);
+ for (int i = 0; i < cb->count(); ++i) {
+ if (compare_no_case(cb->text(i).latin1(), name) == 0) {
+ cb->setCurrentItem(i);
+ return;
+ }
+ }
+
+ // Try matching without foundary name
+ for (int i = cb->count() - 1; i >= 0; --i) {
+ // We count in reverse in order to prefer the Xft foundry
+ pair<string, string> tmp = parseFontName(cb->text(i).latin1());
+ if (compare_no_case(tmp.first, family) == 0) {
+ cb->setCurrentItem(i);
+ return;
+ }
+ }
+}
+
}
void QPrefs::update_contents()
QPrefScreenFontsModule * fontmod(dialog_->screenfontsModule);
- QString roman(rc.roman_font_name.c_str());
- QString sans(rc.sans_font_name.c_str());
- QString typewriter(rc.typewriter_font_name.c_str());
-
- for (int i = 0; i < fontmod->screenRomanCO->count(); ++i) {
- if (fontmod->screenRomanCO->text(i) == roman) {
- fontmod->screenRomanCO->setCurrentItem(i);
- break;
- }
- }
-
- for (int i = 0; i < fontmod->screenSansCO->count(); ++i) {
- if (fontmod->screenSansCO->text(i) == sans) {
- fontmod->screenSansCO->setCurrentItem(i);
- break;
- }
- }
-
- for (int i = 0; i < fontmod->screenTypewriterCO->count(); ++i) {
- if (fontmod->screenTypewriterCO->text(i) == typewriter) {
- fontmod->screenTypewriterCO->setCurrentItem(i);
- break;
- }
- }
-
- // Fucked if I know why we need this. But we do
- dialog_->select_roman(roman);
- dialog_->select_sans(sans);
- dialog_->select_typewriter(typewriter);
-
+ setComboxFont(fontmod->screenRomanCO,
+ rc.roman_font_name, rc.roman_font_foundry);
+ setComboxFont(fontmod->screenSansCO,
+ rc.sans_font_name, rc.sans_font_foundry);
+ setComboxFont(fontmod->screenTypewriterCO,
+ rc.typewriter_font_name, rc.typewriter_font_foundry);
+
+ dialog_->select_roman(fontmod->screenRomanCO->currentText());
+ dialog_->select_sans(fontmod->screenSansCO->currentText());
+ dialog_->select_typewriter(fontmod->screenTypewriterCO->currentText());
+
fontmod->screenZoomSB->setValue(rc.zoom);
fontmod->screenDpiSB->setValue(int(rc.dpi));
fontmod->screenTinyED->setText(tostr(rc.font_sizes[LyXFont::SIZE_TINY]).c_str());
#include "debug.h"
#include "lyxrc.h"
#include "BufferView.h"
+#include "qt_helpers.h"
#include <qglobal.h>
#if QT_VERSION < 300
} else
switch (f.family()) {
case LyXFont::ROMAN_FAMILY:
- font.setFamily(lyxrc.roman_font_name.c_str());
+ font.setFamily(makeFontName(lyxrc.roman_font_name,
+ lyxrc.roman_font_foundry).c_str());
break;
case LyXFont::SANS_FAMILY:
- font.setFamily(lyxrc.sans_font_name.c_str());
+ font.setFamily(makeFontName(lyxrc.sans_font_name,
+ lyxrc.sans_font_foundry).c_str());
break;
case LyXFont::TYPEWRITER_FAMILY:
- font.setFamily(lyxrc.typewriter_font_name.c_str());
+ font.setFamily(makeFontName(lyxrc.typewriter_font_name,
+ lyxrc.typewriter_font_foundry).c_str());
break;
default:
break;
--- /dev/null
+/**
+ * \file qt_helpers.C
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
+ *
+ * \author Dekel Tsur
+ *
+ * Full author contact details are available in file CREDITS
+ */
+
+#include <config.h>
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include "qt_helpers.h"
+
+#include <qglobal.h>
+
+
+string makeFontName(string const & family, string const & foundry)
+{
+ if (foundry.empty())
+ return family;
+#if QT_VERSION >= 300
+ return family + " [" + foundry + ']';
+#else
+ return foundry + '-' + family;
+#endif
+}
+
+
+pair<string,string> parseFontName(string const & name)
+{
+#if QT_VERSION >= 300
+ string::size_type const idx = name.find('[');
+ if (idx == string::npos || idx == 0)
+ return make_pair(name, string());
+ return make_pair(name.substr(0, idx - 1),
+ name.substr(idx + 1, name.size() - idx - 2));
+#else
+ string::size_type const idx = name.find('-');
+ if (idx == string::npos || idx == 0)
+ return make_pair(name, string());
+ return make_pair(name.substr(idx + 1),
+ name.substr(0, idx));
+#endif
+}
--- /dev/null
+// -*- C++ -*-
+/**
+ * \file qt_helpers.h
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
+ *
+ * \author Dekel Tsur
+ *
+ * Full author contact details are available in file CREDITS
+ */
+
+#ifndef QTHELPERS_H
+#define QTHELPERS_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "LString.h"
+
+#include <utility>
+
+string makeFontName(string const & family, string const & foundry);
+std::pair<string,string> parseFontName(string const & name);
+
+#endif // QTHELPERS_H
+2002-11-27 Dekel Tsur <dekelts@tau.ac.il>
+
+ * xfont_loader.C (getFontinfo): Use lyxrc.*_font_foundry.
+
+ * FormPreferences.C: Handle lyxrc.*_font_foundry.
+
2002-11-27 Angus Leeming <leeming@lyx.org>
* forms/fdfix.sh:
Formats local_formats;
Converters local_converters;
+string makeFontName(string const & family, string const & foundry)
+{
+ if (foundry.empty())
+ return family;
+ return family + ',' + foundry;
+}
+
+
+pair<string,string> parseFontName(string const & name)
+{
+ string::size_type const idx = name.find(',');
+ if (idx == string::npos)
+ return make_pair(name, string());
+ return make_pair(name.substr(0, idx),
+ name.substr(idx+1));
+}
+
+
} // namespace anon
{
bool changed = false;
- string str = fl_get_input(dialog_->input_roman);
- if (rc.roman_font_name != str) {
+ pair<string, string> tmp =
+ parseFontName(fl_get_input(dialog_->input_roman));
+ if (rc.roman_font_name != tmp.first ||
+ rc.roman_font_foundry != tmp.second) {
changed = true;
- rc.roman_font_name = str;
+ rc.roman_font_name = tmp.first;
+ rc.roman_font_foundry = tmp.second;
}
- str = fl_get_input(dialog_->input_sans);
- if (rc.sans_font_name != str) {
+ tmp = parseFontName(fl_get_input(dialog_->input_sans));
+ if (rc.sans_font_name != tmp.first ||
+ rc.sans_font_foundry != tmp.second) {
changed = true;
- rc.sans_font_name = str;
+ rc.sans_font_name = tmp.first;
+ rc.sans_font_foundry = tmp.second;
}
- str = fl_get_input(dialog_->input_typewriter);
- if (rc.typewriter_font_name != str) {
+ tmp = parseFontName(fl_get_input(dialog_->input_typewriter));
+ if (rc.typewriter_font_name != tmp.first ||
+ rc.typewriter_font_foundry != tmp.second) {
changed = true;
- rc.typewriter_font_name = str;
+ rc.typewriter_font_name = tmp.first;
+ rc.typewriter_font_foundry = tmp.second;
}
- str = fl_get_input(dialog_->input_screen_encoding);
+ string str = fl_get_input(dialog_->input_screen_encoding);
if (rc.font_norm != str) {
changed = true;
rc.font_norm = str;
void FormPreferences::ScreenFonts::update(LyXRC const & rc)
{
fl_set_input(dialog_->input_roman,
- rc.roman_font_name.c_str());
+ makeFontName(rc.roman_font_name,
+ rc.roman_font_foundry).c_str());
fl_set_input(dialog_->input_sans,
- rc.sans_font_name.c_str());
+ makeFontName(rc.sans_font_name,
+ rc.sans_font_foundry).c_str());
fl_set_input(dialog_->input_typewriter,
- rc.typewriter_font_name.c_str());
+ makeFontName(rc.typewriter_font_name,
+ rc.typewriter_font_foundry).c_str());
fl_set_input(dialog_->input_screen_encoding,
rc.font_norm.c_str());
fl_set_button(dialog_->check_scalable,
}
}
+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"));
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;
}
// compatibility with versions older than 1.2.0 only Angus 10 Jan 2002
{ "\\screen_font_popup", LyXRC::RC_POPUP_NORMAL_FONT },
{ "\\screen_font_roman", LyXRC::RC_SCREEN_FONT_ROMAN },
+ { "\\screen_font_roman_foundry", LyXRC::RC_SCREEN_FONT_ROMAN_FOUNDRY },
{ "\\screen_font_sans", LyXRC::RC_SCREEN_FONT_SANS },
+ { "\\screen_font_sans_foundry", LyXRC::RC_SCREEN_FONT_SANS_FOUNDRY },
{ "\\screen_font_scalable", LyXRC::RC_SCREEN_FONT_SCALABLE },
{ "\\screen_font_sizes", LyXRC::RC_SCREEN_FONT_SIZES },
{ "\\screen_font_typewriter", LyXRC::RC_SCREEN_FONT_TYPEWRITER },
+ { "\\screen_font_typewriter_foundry", LyXRC::RC_SCREEN_FONT_TYPEWRITER_FOUNDRY },
{ "\\screen_zoom", LyXRC::RC_SCREEN_ZOOM },
{ "\\serverpipe", LyXRC::RC_SERVERPIPE },
{ "\\set_color", LyXRC::RC_SET_COLOR },
font_sizes[LyXFont::SIZE_HUGE] = 20.74;
font_sizes[LyXFont::SIZE_HUGER] = 24.88;
use_scalable_fonts = true;
- roman_font_name = "-*-times";
- sans_font_name = "-*-helvetica";
- typewriter_font_name = "-*-courier";
+ roman_font_name = "times";
+ sans_font_name = "helvetica";
+ typewriter_font_name = "courier";
popup_bold_font = "-*-helvetica-bold-r";
popup_normal_font = "-*-helvetica-medium-r";
font_norm = "iso8859-1";
}
+namespace {
+
+void oldFontFormat(string & family, string & foundry)
+{
+ if (family.empty() || family[0] != '-')
+ return;
+ foundry = token(family, '-', 1);
+ family = token(family, '-', 2);
+ if (foundry == "*")
+ foundry.erase();
+}
+
+} // namespace anon
+
+
int LyXRC::read(string const & filename)
{
LyXLex lexrc(lyxrcTags, lyxrcCount);
case RC_SCREEN_FONT_ROMAN:
if (lexrc.next()) {
roman_font_name = lexrc.getString();
+ oldFontFormat(roman_font_name,
+ roman_font_foundry);
}
break;
case RC_SCREEN_FONT_SANS:
if (lexrc.next()) {
sans_font_name = lexrc.getString();
+ oldFontFormat(sans_font_name, sans_font_foundry);
}
break;
case RC_SCREEN_FONT_TYPEWRITER:
if (lexrc.next()) {
typewriter_font_name = lexrc.getString();
+ oldFontFormat(typewriter_font_name,
+ typewriter_font_foundry);
+ }
+ break;
+
+ case RC_SCREEN_FONT_ROMAN_FOUNDRY:
+ if (lexrc.next()) {
+ roman_font_foundry = lexrc.getString();
+ }
+ break;
+
+ case RC_SCREEN_FONT_SANS_FOUNDRY:
+ if (lexrc.next()) {
+ sans_font_foundry = lexrc.getString();
+ }
+ break;
+
+ case RC_SCREEN_FONT_TYPEWRITER_FOUNDRY:
+ if (lexrc.next()) {
+ typewriter_font_foundry = lexrc.getString();
}
break;
os << "\\screen_font_roman \"" << roman_font_name
<< "\"\n";
}
+ case RC_SCREEN_FONT_ROMAN_FOUNDRY:
+ if (roman_font_foundry != system_lyxrc.roman_font_foundry) {
+ os << "\\screen_font_roman_foundry \"" << roman_font_foundry
+ << "\"\n";
+ }
case RC_SCREEN_FONT_SANS:
if (sans_font_name != system_lyxrc.sans_font_name) {
os << "\\screen_font_sans \"" << sans_font_name
<< "\"\n";
}
+ case RC_SCREEN_FONT_SANS_FOUNDRY:
+ if (sans_font_foundry != system_lyxrc.sans_font_foundry) {
+ os << "\\screen_font_sans_foundry \"" << sans_font_foundry
+ << "\"\n";
+ }
case RC_SCREEN_FONT_TYPEWRITER:
if (typewriter_font_name != system_lyxrc.typewriter_font_name) {
os << "\\screen_font_typewriter \""
<< typewriter_font_name << "\"\n";
}
+ case RC_SCREEN_FONT_TYPEWRITER_FOUNDRY:
+ if (typewriter_font_foundry != system_lyxrc.typewriter_font_foundry) {
+ os << "\\screen_font_typewriter_foundry \""
+ << typewriter_font_foundry << "\"\n";
+ }
+
case RC_SCREEN_FONT_SCALABLE:
if (use_scalable_fonts != system_lyxrc.use_scalable_fonts) {
os << "\\screen_font_scalable "
RC_SCREEN_FONT_ROMAN,
RC_SCREEN_FONT_SANS,
RC_SCREEN_FONT_TYPEWRITER,
+ RC_SCREEN_FONT_ROMAN_FOUNDRY,
+ RC_SCREEN_FONT_SANS_FOUNDRY,
+ RC_SCREEN_FONT_TYPEWRITER_FOUNDRY,
RC_SCREEN_FONT_ENCODING,
RC_POPUP_BOLD_FONT,
RC_POPUP_NORMAL_FONT,
///
string typewriter_font_name;
///
+ string roman_font_foundry;
+ ///
+ string sans_font_foundry;
+ ///
+ string typewriter_font_foundry;
+ ///
string popup_bold_font;
///
string popup_normal_font;