]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt/GuiFontLoader.cpp
Get rid of Qt4 code in src/
[lyx.git] / src / frontends / qt / GuiFontLoader.cpp
index 6f1de04652d08315a41fe8061480723c897bbb4a..ebc38575558cdc6b2911e3e0fa2c706ecdeb25da 100644 (file)
 
 #include <config.h>
 
-#include "FontLoader.h"
+#include "GuiFontLoader.h"
 
-#include "FontInfo.h"
+#include "FontLoader.h"
+#include "Font.h"
 #include "GuiFontMetrics.h"
 #include "qt_helpers.h"
 
 #include "support/debug.h"
 #include "support/filetools.h"
 #include "support/gettext.h"
+#include "support/lassert.h"
 #include "support/lstrings.h"
 #include "support/Systemcall.h"
 #include "support/Package.h"
 #include "support/os.h"
 
+#include "GuiApplication.h"
+
 #include <QFontInfo>
 #include <QFontDatabase>
 
-#include "support/lassert.h"
-
 using namespace std;
 using namespace lyx::support;
 
@@ -64,27 +66,9 @@ namespace {
 struct SymbolFont {
        FontFamily lyx_family;
        QString family;
-#if (QT_VERSION < QT_VERSION_CHECK(5, 0, 0))
-       QString xlfd;
-#endif
 };
 
 SymbolFont symbol_fonts[] = {
-#if (QT_VERSION < QT_VERSION_CHECK(5, 0, 0))
-       { SYMBOL_FAMILY,"symbol", "-*-symbol-*-*-*-*-*-*-*-*-*-*-adobe-fontspecific"},
-       { CMR_FAMILY,   "cmr10",  "-*-cmr10-medium-*-*-*-*-*-*-*-*-*-*-*" },
-       { CMSY_FAMILY,  "cmsy10", "-*-cmsy10-*-*-*-*-*-*-*-*-*-*-*-*" },
-       { CMM_FAMILY,   "cmmi10", "-*-cmmi10-medium-*-*-*-*-*-*-*-*-*-*-*" },
-       { CMEX_FAMILY,  "cmex10", "-*-cmex10-*-*-*-*-*-*-*-*-*-*-*-*" },
-       { MSA_FAMILY,   "msam10", "-*-msam10-*-*-*-*-*-*-*-*-*-*-*-*" },
-       { MSB_FAMILY,   "msbm10", "-*-msbm10-*-*-*-*-*-*-*-*-*-*-*-*" },
-       { DS_FAMILY,    "dsrom10", "-*-dsrom10-*-*-*-*-*-*-*-*-*-*-*-*" },
-       { EUFRAK_FAMILY,"eufm10", "-*-eufm10-medium-*-*-*-*-*-*-*-*-*-*-*" },
-       { RSFS_FAMILY,  "rsfs10", "-*-rsfs10-medium-*-*-*-*-*-*-*-*-*-*-*" },
-       { STMARY_FAMILY,"stmary10","-*-stmary10-medium-*-*-*-*-*-*-*-*-*-*-*" },
-       { WASY_FAMILY,  "wasy10", "-*-wasy10-medium-*-*-*-*-*-*-*-*-*-*-*" },
-       { ESINT_FAMILY, "esint10","-*-esint10-medium-*-*-*-*-*-*-*-*-*-*-*" }
-#else
        { SYMBOL_FAMILY,"symbol"},
        { CMR_FAMILY,   "cmr10"},
        { CMSY_FAMILY,  "cmsy10"},
@@ -98,7 +82,6 @@ SymbolFont symbol_fonts[] = {
        { STMARY_FAMILY,"stmary10"},
        { WASY_FAMILY,  "wasy10"},
        { ESINT_FAMILY, "esint10"}
-#endif
 };
 
 size_t const nr_symbol_fonts = sizeof(symbol_fonts) / sizeof(symbol_fonts[0]);
@@ -129,8 +112,8 @@ GuiFontInfo & fontinfo(FontInfo const & f)
             (f.size() < NUM_SIZE);
     if (!fontIsRealized) {
         // We can reset the font to something sensible in release mode.
+        LYXERR0("Unrealized font!" << f);
         LATTEST(false);
-        LYXERR0("Unrealized font!");
         FontInfo f2 = f;
         f2.realize(sane_font);
         GuiFontInfo * & fi = fontinfo_ptr(f2);
@@ -145,19 +128,6 @@ GuiFontInfo & fontinfo(FontInfo const & f)
 }
 
 
-#if (QT_VERSION < QT_VERSION_CHECK(5, 0, 0))
-QString rawName(QString const & family)
-{
-       for (size_t i = 0; i < nr_symbol_fonts; ++i)
-               if (family == symbol_fonts[i].family)
-                       return symbol_fonts[i].xlfd;
-
-       LYXERR(Debug::FONT, "BUG: family not found !");
-       return QString();
-}
-#endif
-
-
 QString symbolFamily(FontFamily family)
 {
        for (size_t i = 0; i < nr_symbol_fonts; ++i) {
@@ -185,14 +155,11 @@ static bool isChosenFont(QFont & font, QString const & family,
        // positions.
        QFontInfo fi(font);
 
-       LYXERR(Debug::FONT, "got: " << fi.family());
+       LYXERR_NOPOS(Debug::FONT, "got: " << fi.family());
 
        if (fi.family().contains(family)
-#if QT_VERSION >= 0x040800
-           && (style.isEmpty() || fi.styleName().contains(style))
-#endif
-           ) {
-               LYXERR(Debug::FONT, " got it ");
+           && (style.isEmpty() || fi.styleName().contains(style))) {
+               LYXERR_NOENDL(Debug::FONT, " got it ");
                return true;
        }
 
@@ -202,55 +169,48 @@ static bool isChosenFont(QFont & font, QString const & family,
 
 QFont symbolFont(QString const & family, bool * ok)
 {
-       LYXERR(Debug::FONT, "Looking for font family " << family << " ... ");
+       LYXERR_NOENDL(Debug::FONT, "Looking for font family " << family << " ... ");
        QString upper = family;
        upper[0] = family[0].toUpper();
 
        QFont font;
-       font.setFamily(family);
-#if QT_VERSION >= 0x040800
+       if (guiApp->platformName() == "xcb"
+           || guiApp->platformName().contains("wayland")) {
+               // On *nix we have to also specify the foundry to be able to
+               // discriminate our fonts when the texlive fonts are managed by
+               // fontconfig. Unfortunately, doing the same on Windows breaks things.
+               font.setFamily(family + QLatin1String(" [LyEd]"));
+       } else {
+               font.setFamily(family);
+       }
+       font.setStyleStrategy(QFont::NoFontMerging);
        font.setStyleName("LyX");
 
        if (isChosenFont(font, family, "LyX")) {
-               LYXERR(Debug::FONT, "lyx!");
+               LYXERR_NOPOS(Debug::FONT, "lyx!");
                *ok = true;
                return font;
        }
 
-       LYXERR(Debug::FONT, "Trying normal " << family << " ... ");
+       LYXERR_NOENDL(Debug::FONT, "Trying normal " << family << " ... ");
        font.setStyleName(QString());
-#endif
 
        if (isChosenFont(font, family, QString())) {
-               LYXERR(Debug::FONT, "normal!");
+               LYXERR_NOPOS(Debug::FONT, "normal!");
                *ok = true;
                return font;
        }
 
-       LYXERR(Debug::FONT, "Trying " << upper << " ... ");
+       LYXERR_NOENDL(Debug::FONT, "Trying " << upper << " ... ");
        font.setFamily(upper);
 
        if (isChosenFont(font, upper, QString())) {
-               LYXERR(Debug::FONT, "upper!");
-               *ok = true;
-               return font;
-       }
-
-#if (QT_VERSION < QT_VERSION_CHECK(5, 0, 0))
-       // A simple setFamily() fails on Qt 2
-
-       QString const raw = rawName(family);
-       LYXERR(Debug::FONT, "Trying " << raw << " ... ");
-       font.setRawName(raw);
-
-       if (isChosenFont(font, family, QString())) {
-               LYXERR(Debug::FONT, "raw version!");
+               LYXERR_NOPOS(Debug::FONT, "upper!");
                *ok = true;
                return font;
        }
-#endif
 
-       LYXERR(Debug::FONT, " FAILED :-(");
+       LYXERR_NOPOS(Debug::FONT, " FAILED :-(");
        *ok = false;
        return font;
 }
@@ -325,13 +285,12 @@ QFont makeQFont(FontInfo const & f)
                                toqstr(lyxrc.roman_font_foundry));
                        font.setFamily(family);
 #ifdef Q_OS_MAC
-#if QT_VERSION >= 0x040300 //&& QT_VERSION < 0x040800
+                       // FIXME KILLQT4: Double-check that this is fixed in Qt5
                        // Workaround for a Qt bug, see http://www.lyx.org/trac/ticket/3684
                        // and http://bugreports.qt.nokia.com/browse/QTBUG-11145.
                        // FIXME: Check whether this is really fixed in Qt 4.8
                        if (family == "Times" && !font.exactMatch())
                                font.setFamily("Times New Roman");
-#endif
 #endif
                        break;
                }
@@ -382,10 +341,6 @@ QFont makeQFont(FontInfo const & f)
        else
                LYXERR(Debug::FONT, "This font is NOT an exact match");
 
-#if (QT_VERSION < QT_VERSION_CHECK(5, 0, 0))
-       LYXERR(Debug::FONT, "XFLD: " << font.rawName());
-#endif
-
        font.setPointSizeF(f.realSize() * lyxrc.currentZoom / 100.0);
 
        LYXERR(Debug::FONT, "The font has size: " << font.pointSizeF());
@@ -441,13 +396,9 @@ bool FontLoader::canBeDisplayed(char_type c)
 {
        // bug 8493
        if (c == 0x0009)
+               // FIXME KILLQT4: get rid of this function if not needed anymore
                // FIXME check whether this is still needed for Qt5
                return false;
-#if QT_VERSION < 0x050000 && defined(QT_MAC_USE_COCOA) && (QT_MAC_USE_COCOA > 0)
-       // bug 7954, see also comment in GuiPainter::text()
-       if (c == 0x00ad)
-               return false;
-#endif
        return true;
 }