From c0c4be672bd652d29a5c8f52e31ad76a1361e320 Mon Sep 17 00:00:00 2001 From: Luca Beldi Date: Tue, 13 Nov 2018 08:54:37 +0000 Subject: Fix constness of QPaintDevice arguments QFont, QFontMetrics, QFontMetricsF and QTextLayout constructors use only const methods of QPaintDevice so there is no reason for them to require a non-const pointer argument Fixes: QTBUG-65967 Change-Id: Ibfcdef2a25f0cd4284dad76135fc4c9bf5667d7a Reviewed-by: Samuel Gaist Reviewed-by: Christian Ehrlicher Reviewed-by: Eskil Abrahamsen Blomfeldt --- src/gui/text/qfont.cpp | 15 +++++++++++++-- src/gui/text/qfont.h | 7 +++++-- src/gui/text/qfontmetrics.cpp | 31 ++++++++++++++++++++++++++++++- src/gui/text/qfontmetrics.h | 30 +++++++++++++++++++++++++++--- src/gui/text/qtextlayout.cpp | 19 +++++++++++++++---- src/gui/text/qtextlayout.h | 14 +++++++++++++- 6 files changed, 103 insertions(+), 13 deletions(-) diff --git a/src/gui/text/qfont.cpp b/src/gui/text/qfont.cpp index 258a9ba675..27d804a3b4 100644 --- a/src/gui/text/qfont.cpp +++ b/src/gui/text/qfont.cpp @@ -562,14 +562,25 @@ QFontEngineData::~QFontEngineData() \since 5.2 */ +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) /*! + \obsolete Constructs a font from \a font for use on the paint device \a pd. */ QFont::QFont(const QFont &font, QPaintDevice *pd) + : QFont(font, static_cast(pd)) +{} +#endif + +/*! + \since 5.13 + Constructs a font from \a font for use on the paint device \a pd. +*/ +QFont::QFont(const QFont &font, const QPaintDevice *pd) : resolve_mask(font.resolve_mask) { - Q_ASSERT(pd != 0); - int dpi = pd->logicalDpiY(); + Q_ASSERT(pd); + const int dpi = pd->logicalDpiY(); const int screen = 0; if (font.d->dpi != dpi || font.d->screen != screen ) { d = new QFontPrivate(*font.d); diff --git a/src/gui/text/qfont.h b/src/gui/text/qfont.h index 1fe450e002..e86f06353a 100644 --- a/src/gui/text/qfont.h +++ b/src/gui/text/qfont.h @@ -170,8 +170,11 @@ public: QFont(); QFont(const QString &family, int pointSize = -1, int weight = -1, bool italic = false); - QFont(const QFont &, QPaintDevice *pd); - QFont(const QFont &); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + QFont(const QFont &font, QPaintDevice *pd); +#endif + QFont(const QFont &font, const QPaintDevice *pd); + QFont(const QFont &font); ~QFont(); void swap(QFont &other) diff --git a/src/gui/text/qfontmetrics.cpp b/src/gui/text/qfontmetrics.cpp index 407559ad51..c8dc8d676e 100644 --- a/src/gui/text/qfontmetrics.cpp +++ b/src/gui/text/qfontmetrics.cpp @@ -156,6 +156,8 @@ QFontMetrics::QFontMetrics(const QFont &font) } /*! + \since 5.13 + \fn QFontMetrics::QFontMetrics(const QFont &font, const QPaintDevice *paintdevice) Constructs a font metrics object for \a font and \a paintdevice. The font metrics will be compatible with the paintdevice passed. @@ -168,9 +170,21 @@ QFontMetrics::QFontMetrics(const QFont &font) passed in the constructor at the time it is created, and is not updated if the font's attributes are changed later. */ + +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) +/*! + \fn QFontMetrics::QFontMetrics(const QFont &font, QPaintDevice *paintdevice) + \obsolete + Identical to QFontMetrics::QFontMetrics(const QFont &font, const QPaintDevice *paintdevice) +*/ + + QFontMetrics::QFontMetrics(const QFont &font, QPaintDevice *paintdevice) +#else +QFontMetrics::QFontMetrics(const QFont &font, const QPaintDevice *paintdevice) +#endif { - int dpi = paintdevice ? paintdevice->logicalDpiY() : qt_defaultDpi(); + const int dpi = paintdevice ? paintdevice->logicalDpiY() : qt_defaultDpi(); const int screen = 0; if (font.d->dpi != dpi || font.d->screen != screen ) { d = new QFontPrivate(*font.d); @@ -1127,6 +1141,8 @@ QFontMetricsF::QFontMetricsF(const QFont &font) } /*! + \fn QFontMetricsF::QFontMetricsF(const QFont &font, const QPaintDevice *paintdevice) + \since 5.13 Constructs a font metrics object for \a font and \a paintdevice. The font metrics will be compatible with the paintdevice passed. @@ -1139,7 +1155,20 @@ QFontMetricsF::QFontMetricsF(const QFont &font) passed in the constructor at the time it is created, and is not updated if the font's attributes are changed later. */ + + +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) +/*! + \fn QFontMetricsF::QFontMetricsF(const QFont &font, QPaintDevice *paintdevice) + \obsolete + Identical to QFontMetricsF::QFontMetricsF(const QFont &font, const QPaintDevice *paintdevice) +*/ + + QFontMetricsF::QFontMetricsF(const QFont &font, QPaintDevice *paintdevice) +#else +QFontMetricsF::QFontMetricsF(const QFont &font, const QPaintDevice *paintdevice) +#endif { int dpi = paintdevice ? paintdevice->logicalDpiY() : qt_defaultDpi(); const int screen = 0; diff --git a/src/gui/text/qfontmetrics.h b/src/gui/text/qfontmetrics.h index b6167a1d47..ba7f695380 100644 --- a/src/gui/text/qfontmetrics.h +++ b/src/gui/text/qfontmetrics.h @@ -59,7 +59,19 @@ class Q_GUI_EXPORT QFontMetrics { public: explicit QFontMetrics(const QFont &); - QFontMetrics(const QFont &, QPaintDevice *pd); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + QFontMetrics(const QFont &font, QPaintDevice *pd); +#ifndef Q_QDOC + // the template is necessary to make QFontMetrics(font,nullptr) and QFontMetrics(font,NULL) + // not ambiguous. Implementation detail that should not be documented. + template +#endif + QFontMetrics(const QFont &font, const QPaintDevice *pd) + : QFontMetrics(font, const_cast(pd)) + {} +#else + QFontMetrics(const QFont &font, const QPaintDevice *pd); +#endif QFontMetrics(const QFontMetrics &); ~QFontMetrics(); @@ -137,8 +149,20 @@ Q_DECLARE_SHARED(QFontMetrics) class Q_GUI_EXPORT QFontMetricsF { public: - explicit QFontMetricsF(const QFont &); - QFontMetricsF(const QFont &, QPaintDevice *pd); + explicit QFontMetricsF(const QFont &font); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + QFontMetricsF(const QFont &font, QPaintDevice *pd); +#ifndef Q_QDOC + // the template is necessary to make QFontMetrics(font,nullptr) and QFontMetrics(font,NULL) + // not ambiguous. Implementation detail that should not be documented. + template +#endif + QFontMetricsF(const QFont &font, const QPaintDevice *pd) + : QFontMetricsF(font, const_cast(pd)) + {} +#else + QFontMetricsF(const QFont &font, const QPaintDevice *pd); +#endif QFontMetricsF(const QFontMetrics &); QFontMetricsF(const QFontMetricsF &); ~QFontMetricsF(); diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp index ca6866d836..ec49406548 100644 --- a/src/gui/text/qtextlayout.cpp +++ b/src/gui/text/qtextlayout.cpp @@ -344,6 +344,8 @@ QTextLayout::QTextLayout(const QString& text) } /*! + \since 5.13 + \fn QTextLayout::QTextLayout(const QString &text, const QFont &font, const QPaintDevice *paintdevice) Constructs a text layout to lay out the given \a text with the specified \a font. @@ -351,11 +353,20 @@ QTextLayout::QTextLayout(const QString& text) the paint device, \a paintdevice. If \a paintdevice is 0 the calculations will be done in screen metrics. */ -QTextLayout::QTextLayout(const QString& text, const QFont &font, QPaintDevice *paintdevice) + +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) +/*! + \fn QTextLayout::QTextLayout(const QString &text, const QFont &font, QPaintDevice *paintdevice) + \obsolete + Identical to QTextLayout::QTextLayout(const QString &text, const QFont &font, const QPaintDevice *paintdevice) +*/ + +QTextLayout::QTextLayout(const QString &text, const QFont &font, QPaintDevice *paintdevice) +#else +QTextLayout::QTextLayout(const QString &text, const QFont &font, const QPaintDevice *paintdevice) +#endif { - QFont f(font); - if (paintdevice) - f = QFont(font, paintdevice); + const QFont f(paintdevice ? QFont(font, paintdevice) : font); d = new QTextEngine((text.isNull() ? (const QString&)QString::fromLatin1("") : text), f); } diff --git a/src/gui/text/qtextlayout.h b/src/gui/text/qtextlayout.h index 67bc75a6b8..a29791534e 100644 --- a/src/gui/text/qtextlayout.h +++ b/src/gui/text/qtextlayout.h @@ -107,7 +107,19 @@ public: // does itemization QTextLayout(); QTextLayout(const QString& text); - QTextLayout(const QString& text, const QFont &font, QPaintDevice *paintdevice = nullptr); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + QTextLayout(const QString &text, const QFont &font, QPaintDevice *paintdevice = nullptr); +#ifndef Q_QDOC + // the template is necessary to make QTextLayout(font,text,nullptr) and QTextLayout(font,text,NULL) + // not ambiguous. Implementation detail that should not be documented. + template +#endif + QTextLayout(const QString &text, const QFont &font, const QPaintDevice *paintdevice) + : QTextLayout(text, font, const_cast(paintdevice)) + {} +#else + QTextLayout(const QString &text, const QFont &font, const QPaintDevice *paintdevice = nullptr); +#endif QTextLayout(const QTextBlock &b); ~QTextLayout(); -- cgit v1.2.3