[LyX/master] Replace QFontMetrics::width() by horizontalAdvance() in Qt>=5.11
Jean-Marc Lasgouttes
lasgouttes at lyx.org
Sat Oct 24 18:17:01 UTC 2020
Le 24/10/2020 à 19:38, Jean-Marc Lasgouttes a écrit :
> commit 21422dd6527754d8b7876a6e11b686cd726321ed
> Author: Jean-Marc Lasgouttes <lasgouttes at 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;
>
More information about the lyx-devel
mailing list