commit 21422dd6527754d8b7876a6e11b686cd726321ed Author: Jean-Marc Lasgouttes <lasgout...@lyx.org> Date: Sat Oct 24 19:29:34 2020 +0200
Replace QFontMetrics::width() by horizontalAdvance() in Qt>=5.11 The method horizontalAdvance() replaces width() starting with Qt 5.11. To handle this, all direct calls to QFontMetrics::width() are replaced by calls to GuiFontMetrics::width(), and the code for GuiFontMetrics::width(QChar) uses horizontalAdvance on newer Qt versions. --- src/frontends/qt/GuiFontExample.cpp | 9 +++++---- src/frontends/qt/GuiFontMetrics.cpp | 7 +++++++ src/frontends/qt/GuiView.cpp | 5 +++-- src/frontends/qt/PanelStack.cpp | 4 ++-- 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/frontends/qt/GuiFontExample.cpp b/src/frontends/qt/GuiFontExample.cpp index cb27b5f..8a4ca13 100644 --- a/src/frontends/qt/GuiFontExample.cpp +++ b/src/frontends/qt/GuiFontExample.cpp @@ -11,6 +11,7 @@ #include <config.h> #include "GuiFontExample.h" +#include "GuiFontMetrics.h" #include <QPainter> #include <QPaintEvent> @@ -28,20 +29,20 @@ void GuiFontExample::set(QFont const & font, QString const & text) QSize GuiFontExample::sizeHint() const { - QFontMetrics m(font_); - return QSize(m.width(text_) + 10, m.ascent() + m.descent() + 6); + lyx::frontend::GuiFontMetrics m(font_); + return QSize(m.width(text_) + 10, m.maxHeight() + 6); } void GuiFontExample::paintEvent(QPaintEvent *) { QPainter p; - QFontMetrics m(font_); + lyx::frontend::GuiFontMetrics m(font_); p.begin(this); p.setFont(font_); p.drawRect(0, 0, width() - 1, height() - 1); - p.drawText(5, 3 + m.ascent(), text_); + p.drawText(5, 3 + m.maxAscent(), text_); p.end(); } diff --git a/src/frontends/qt/GuiFontMetrics.cpp b/src/frontends/qt/GuiFontMetrics.cpp index 83c9f65..dffa827 100644 --- a/src/frontends/qt/GuiFontMetrics.cpp +++ b/src/frontends/qt/GuiFontMetrics.cpp @@ -627,10 +627,17 @@ int GuiFontMetrics::width(char_type c) const if (value != outOfLimitMetric) return value; +#if QT_VERSION >= 0x050b00 + if (is_utf16(c)) + value = metrics_.horizontalAdvance(ucs4_to_qchar(c)); + else + value = metrics_.horizontalAdvance(toqstr(docstring(1, c))); +#else if (is_utf16(c)) value = metrics_.width(ucs4_to_qchar(c)); else value = metrics_.width(toqstr(docstring(1, c))); +#endif width_cache_.insert(c, value); diff --git a/src/frontends/qt/GuiView.cpp b/src/frontends/qt/GuiView.cpp index 4dca7bf..907f151 100644 --- a/src/frontends/qt/GuiView.cpp +++ b/src/frontends/qt/GuiView.cpp @@ -21,6 +21,7 @@ #include "GuiApplication.h" #include "GuiClickableLabel.h" #include "GuiCompleter.h" +#include "GuiFontMetrics.h" #include "GuiKeySymbol.h" #include "GuiToc.h" #include "GuiToolbar.h" @@ -199,12 +200,12 @@ public: // Check how long the logo gets with the current font // and adapt if the font is running wider than what // we assume - QFontMetrics fm(font); + GuiFontMetrics fm(font); // Split the title into lines to measure the longest line // in the current l7n. QStringList titlesegs = htext.split('\n'); int wline = 0; - int hline = fm.height(); + int hline = fm.maxHeight(); QStringList::const_iterator sit; for (sit = titlesegs.constBegin(); sit != titlesegs.constEnd(); ++sit) { if (fm.width(*sit) > wline) diff --git a/src/frontends/qt/PanelStack.cpp b/src/frontends/qt/PanelStack.cpp index 2614284..22eab2a 100644 --- a/src/frontends/qt/PanelStack.cpp +++ b/src/frontends/qt/PanelStack.cpp @@ -13,6 +13,7 @@ #include "PanelStack.h" #include "GuiApplication.h" +#include "GuiFontMetrics.h" #include "qt_helpers.h" #include "FancyLineEdit.h" @@ -23,7 +24,6 @@ #include <QAbstractButton> #include <QApplication> #include <QComboBox> -#include <QFontMetrics> #include <QGroupBox> #include <QHideEvent> #include <QHash> @@ -120,7 +120,7 @@ void PanelStack::addCategory(QString const & name, QString const & parent) panel_map_[name] = item; - QFontMetrics fm(list_->font()); + GuiFontMetrics fm(list_->font()); // calculate the real size the current item needs in the listview int itemsize = fm.width(qt_(name)) + 10 + list_->indentation() * depth; -- lyx-cvs mailing list lyx-cvs@lists.lyx.org http://lists.lyx.org/mailman/listinfo/lyx-cvs