commit 87c85303c5c5980b1189867c5dc9e711acf77c07
Author: Stephan Witt <[email protected]>
Date: Fri Apr 15 11:49:04 2016 +0200
Improved fix for #9966
* provide GuiApplication::typewriterSystemFont() to get a fixed font
consistently
* enlarge fixed font on Mac because of the too small default Qt system font
* use it in source pane, progress view, log view and document preamble
editor
diff --git a/src/frontends/qt4/GuiApplication.cpp
b/src/frontends/qt4/GuiApplication.cpp
index 12f99d5..6fb5499 100644
--- a/src/frontends/qt4/GuiApplication.cpp
+++ b/src/frontends/qt4/GuiApplication.cpp
@@ -82,6 +82,7 @@
#include <queue>
+#include <QFontDatabase>
#include <QByteArray>
#include <QClipboard>
#include <QDateTime>
@@ -2557,11 +2558,41 @@ QString const GuiApplication::sansFontName()
QString const GuiApplication::typewriterFontName()
{
- QFont font;
- font.setStyleHint(QFont::TypeWriter);
- font.setFamily("monospace");
+ return QFontInfo(typewriterSystemFont()).family();
+}
- return QFontInfo(font).family();
+
+namespace {
+ // We cannot use QFont::fixedPitch() because it doesn't
+ // return the fact but only if it is requested.
+ static bool isFixedPitch(const QFont & font) {
+ const QFontInfo fi(font);
+ return fi.fixedPitch();
+ }
+}
+
+
+QFont const GuiApplication::typewriterSystemFont()
+{
+#if QT_VERSION >= 0x050200
+ QFont font = QFontDatabase::systemFont(QFontDatabase::FixedFont);
+#else
+ QFont font("monospace");
+#endif
+ if (!isFixedPitch(font)) {
+ // try to enforce a real monospaced font
+ font.setStyleHint(QFont::Monospace);
+ if (!isFixedPitch(font)) {
+ font.setStyleHint(QFont::TypeWriter);
+ if (!isFixedPitch(font)) font.setFamily("courier");
+ }
+ }
+#ifdef Q_OS_MAC
+ // On a Mac the result is too small and it's not practical to
+ // rely on Qtconfig utility to change the system settings of Qt.
+ font.setPointSize(12);
+#endif
+ return font;
}
diff --git a/src/frontends/qt4/GuiApplication.h
b/src/frontends/qt4/GuiApplication.h
index 350adc8..861810d 100644
--- a/src/frontends/qt4/GuiApplication.h
+++ b/src/frontends/qt4/GuiApplication.h
@@ -25,6 +25,7 @@
class QAbstractItemModel;
class QIcon;
class QSessionManager;
+class QFont;
namespace lyx {
@@ -145,6 +146,8 @@ public:
/// return a suitable monospaced font name.
QString const typewriterFontName();
+ QFont const typewriterSystemFont();
+
///
void unregisterView(GuiView * gv);
///
diff --git a/src/frontends/qt4/GuiDocument.cpp
b/src/frontends/qt4/GuiDocument.cpp
index e4dff1d..2eedec9 100644
--- a/src/frontends/qt4/GuiDocument.cpp
+++ b/src/frontends/qt4/GuiDocument.cpp
@@ -453,10 +453,7 @@ PreambleModule::PreambleModule() : current_id_(0)
// This is not a memory leak. The object will be destroyed
// with this.
(void) new LaTeXHighlighter(preambleTE->document());
- QFont font(guiApp->typewriterFontName());
- font.setFixedPitch(true);
- font.setStyleHint(QFont::TypeWriter);
- preambleTE->setFont(font);
+ preambleTE->setFont(guiApp->typewriterSystemFont());
preambleTE->setWordWrapMode(QTextOption::NoWrap);
setFocusProxy(preambleTE);
connect(preambleTE, SIGNAL(textChanged()), this, SIGNAL(changed()));
diff --git a/src/frontends/qt4/GuiLog.cpp b/src/frontends/qt4/GuiLog.cpp
index dec7c25..23ba276 100644
--- a/src/frontends/qt4/GuiLog.cpp
+++ b/src/frontends/qt4/GuiLog.cpp
@@ -133,10 +133,7 @@ GuiLog::GuiLog(GuiView & lv)
highlighter = new LogHighlighter(logTB->document());
logTB->setReadOnly(true);
- QFont font(guiApp->typewriterFontName());
- font.setFixedPitch(true);
- font.setStyleHint(QFont::TypeWriter);
- logTB->setFont(font);
+ logTB->setFont(guiApp->typewriterSystemFont());
}
diff --git a/src/frontends/qt4/GuiProgressView.cpp
b/src/frontends/qt4/GuiProgressView.cpp
index fa15786..af455f2 100644
--- a/src/frontends/qt4/GuiProgressView.cpp
+++ b/src/frontends/qt4/GuiProgressView.cpp
@@ -71,10 +71,7 @@ GuiProgressView::GuiProgressView(GuiView & parent,
Qt::DockWidgetArea area,
widget_->adjustSize();
setWidget(widget_);
- QFont font(guiApp->typewriterFontName());
- font.setFixedPitch(true);
- font.setStyleHint(QFont::TypeWriter);
- widget_->outTE->setFont(font);
+ widget_->outTE->setFont(guiApp->typewriterSystemFont());
widget_->tabWidget->widget(0)->setContentsMargins(-5, -7, 0, -7);
connect(widget_->debugNoneRB, SIGNAL(clicked()),
diff --git a/src/frontends/qt4/GuiViewSource.cpp
b/src/frontends/qt4/GuiViewSource.cpp
index e528222..192a163 100644
--- a/src/frontends/qt4/GuiViewSource.cpp
+++ b/src/frontends/qt4/GuiViewSource.cpp
@@ -86,10 +86,7 @@ ViewSourceWidget::ViewSourceWidget()
viewSourceTV->setReadOnly(true);
///dialog_->viewSourceTV->setAcceptRichText(false);
// this is personal. I think source code should be in fixed-size font
- QFont font(guiApp->typewriterFontName());
- font.setFixedPitch(true);
- font.setStyleHint(QFont::TypeWriter);
- viewSourceTV->setFont(font);
+ viewSourceTV->setFont(guiApp->typewriterSystemFont());
// again, personal taste
viewSourceTV->setWordWrapMode(QTextOption::NoWrap);
}