[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