]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/GuiFontLoader.cpp
Amend f441590c
[lyx.git] / src / frontends / qt4 / GuiFontLoader.cpp
index fa5370cfd32497624e11e7efea248de326b78e9c..9a662a893b3ce846386588370befeeaeae755f15 100644 (file)
@@ -139,7 +139,8 @@ bool isSymbolFamily(FontFamily family)
 #endif
 
 
-static bool isChosenFont(QFont & font, QString const & family)
+static bool isChosenFont(QFont & font, QString const & family,
+                        QString const & style)
 {
        // QFontInfo won't find a font that has only a few glyphs at unusual
        // positions, e.g. the original esint10 font.
@@ -149,7 +150,11 @@ static bool isChosenFont(QFont & font, QString const & family)
 
        LYXERR(Debug::FONT, "got: " << fi.family());
 
-       if (fi.family().contains(family)) {
+       if (fi.family().contains(family)
+#if QT_VERSION >= 0x040800
+           && (style.isEmpty() || fi.styleName().contains(style))
+#endif
+           ) {
                LYXERR(Debug::FONT, " got it ");
                return true;
        }
@@ -165,10 +170,21 @@ QFont symbolFont(QString const & family, bool * ok)
        upper[0] = family[0].toUpper();
 
        QFont font;
-       font.setKerning(false);
        font.setFamily(family);
+#if QT_VERSION >= 0x040800
+       font.setStyleName("LyX");
+
+       if (isChosenFont(font, family, "LyX")) {
+               LYXERR(Debug::FONT, "lyx!");
+               *ok = true;
+               return font;
+       }
+
+       LYXERR(Debug::FONT, "Trying normal " << family << " ... ");
+       font.setStyleName(QString());
+#endif
 
-       if (isChosenFont(font, family)) {
+       if (isChosenFont(font, family, QString())) {
                LYXERR(Debug::FONT, "normal!");
                *ok = true;
                return font;
@@ -177,7 +193,7 @@ QFont symbolFont(QString const & family, bool * ok)
        LYXERR(Debug::FONT, "Trying " << upper << " ... ");
        font.setFamily(upper);
 
-       if (isChosenFont(font, upper)) {
+       if (isChosenFont(font, upper, QString())) {
                LYXERR(Debug::FONT, "upper!");
                *ok = true;
                return font;
@@ -189,7 +205,7 @@ QFont symbolFont(QString const & family, bool * ok)
        LYXERR(Debug::FONT, "Trying " << raw << " ... ");
        font.setRawName(raw);
 
-       if (isChosenFont(font, family)) {
+       if (isChosenFont(font, family, QString())) {
                LYXERR(Debug::FONT, "raw version!");
                *ok = true;
                return font;
@@ -243,8 +259,9 @@ FontLoader::~FontLoader()
 
 /////////////////////////////////////////////////
 
+namespace {
 
-static QString makeFontName(QString const & family, QString const & foundry)
+QString makeFontName(QString const & family, QString const & foundry)
 {
        QString res = family;
        if (!foundry.isEmpty())
@@ -253,10 +270,9 @@ static QString makeFontName(QString const & family, QString const & foundry)
 }
 
 
-GuiFontInfo::GuiFontInfo(FontInfo const & f)
-       : metrics(QFont())
+QFont makeQFont(FontInfo const & f)
 {
-       font.setKerning(false);
+       QFont font;
        QString const pat = symbolFamily(f.family());
        if (!pat.isEmpty()) {
                bool ok;
@@ -267,7 +283,7 @@ GuiFontInfo::GuiFontInfo(FontInfo const & f)
                        QString family = makeFontName(toqstr(lyxrc.roman_font_name),
                                toqstr(lyxrc.roman_font_foundry)); 
                        font.setFamily(family);
-#ifdef Q_WS_MACX
+#ifdef Q_OS_MAC
 #if QT_VERSION >= 0x040300 //&& QT_VERSION < 0x040800
                        // Workaround for a Qt bug, see http://www.lyx.org/trac/ticket/3684
                        // and http://bugreports.qt.nokia.com/browse/QTBUG-11145.
@@ -332,9 +348,16 @@ GuiFontInfo::GuiFontInfo(FontInfo const & f)
 
        LYXERR(Debug::FONT, "The font has size: " << font.pointSizeF());
 
-       metrics = GuiFontMetrics(font);
+       return font;
 }
 
+} // anon namespace
+
+
+GuiFontInfo::GuiFontInfo(FontInfo const & f)
+       : font(makeQFont(f)), metrics(font)
+{}
+
 
 bool FontLoader::available(FontInfo const & f)
 {
@@ -343,7 +366,7 @@ bool FontLoader::available(FontInfo const & f)
        static vector<int> cache(NUM_FAMILIES, false);
 
        FontFamily family = f.family();
-#ifdef Q_WS_MACX
+#ifdef Q_OS_MAC
        // Apple ships a font name "Symbol", which has more or less the same
        // glyphs as the original PostScript Symbol font, but it uses a different
        // encoding (see https://en.wikipedia.org/wiki/Symbol_(typeface)#cite_note-2).