Le 24/10/2020 à 19:38, Jean-Marc Lasgouttes a écrit :
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.

If this turns out to work well, it will be candidate for branch.

JMarc

---
  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-devel mailing list
lyx-devel@lists.lyx.org
http://lists.lyx.org/mailman/listinfo/lyx-devel

Reply via email to