lyxrc.*_font_foundry

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@5737 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Dekel Tsur 2002-11-27 21:49:50 +00:00
parent 80d98d4d86
commit 568ce36c5c
12 changed files with 274 additions and 54 deletions

View File

@ -1,3 +1,7 @@
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

View File

@ -1,3 +1,11 @@
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:

View File

@ -83,6 +83,8 @@ libqt2_la_SOURCES = \
qscreen.C \
qsetborder.h \
qsetborder.C \
qt_helpers.h \
qt_helpers.C \
qttableview.h \
qttableview.C \
$(DIALOGSOURCES)

View File

@ -39,8 +39,11 @@
#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>
@ -51,6 +54,7 @@
#include "qcoloritem.h"
using std::vector;
using std::pair;
using std::ostringstream;
using std::setfill;
using std::setw;
@ -230,10 +234,14 @@ void QPrefs::apply()
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());
@ -299,6 +307,29 @@ findPos(std::vector<A> const & vec, A const & val)
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()
@ -436,36 +467,17 @@ 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());

View File

@ -20,6 +20,7 @@
#include "debug.h"
#include "lyxrc.h"
#include "BufferView.h"
#include "qt_helpers.h"
#include <qglobal.h>
#if QT_VERSION < 300
@ -176,13 +177,16 @@ qfont_loader::font_info::font_info(LyXFont const & f)
} 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;

View File

@ -0,0 +1,49 @@
/**
* \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
}

View File

@ -0,0 +1,26 @@
// -*- 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

View File

@ -1,3 +1,9 @@
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:

View File

@ -70,6 +70,24 @@ namespace {
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
@ -2435,25 +2453,32 @@ void FormPreferences::ScreenFonts::apply(LyXRC & rc) const
{
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;
@ -2690,11 +2715,14 @@ bool FormPreferences::ScreenFonts::input()
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,

View File

@ -128,6 +128,15 @@ string const symbolPattern(LyXFont::FONT_FAMILY family)
}
}
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"));
@ -192,21 +201,27 @@ void xfont_loader::getFontinfo(LyXFont::FONT_FAMILY family,
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;
}

View File

@ -126,10 +126,13 @@ keyword_item lyxrcTags[] = {
// 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 },
@ -208,9 +211,9 @@ void LyXRC::setDefaults() {
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";
@ -285,6 +288,21 @@ void LyXRC::readBindFileIfNeeded()
}
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);
@ -686,18 +704,41 @@ int LyXRC::read(string const & filename)
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;
@ -1299,16 +1340,32 @@ void LyXRC::output(ostream & os) const
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 "

View File

@ -55,6 +55,9 @@ enum LyXRCTags {
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,
@ -242,6 +245,12 @@ enum LyXRCTags {
///
string typewriter_font_name;
///
string roman_font_foundry;
///
string sans_font_foundry;
///
string typewriter_font_foundry;
///
string popup_bold_font;
///
string popup_normal_font;