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.
This commit is contained in:
Jean-Marc Lasgouttes 2020-10-24 19:29:34 +02:00
parent 6bf0578e6e
commit 21422dd652
4 changed files with 17 additions and 8 deletions

View File

@ -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();
}

View File

@ -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);

View File

@ -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)

View File

@ -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;