1*4882a593SmuzhiyunFrom caacc9bc622238ca48674ea6f40d07466e4b97a5 Mon Sep 17 00:00:00 2001
2*4882a593SmuzhiyunFrom: Valentin Ochs <a@0au.de>
3*4882a593SmuzhiyunDate: Sat, 20 Jun 2020 16:01:27 +0200
4*4882a593SmuzhiyunSubject: [PATCH] Replace obsolete/deprecated Qt methods
5*4882a593Smuzhiyun
6*4882a593Smuzhiyun[Thomas: Backport from upstream commit
7*4882a593Smuzhiyunae726b70a7ada9a4be5808e00f0c951318479684, one conflict manually
8*4882a593Smuzhiyunresolved in pv/util.cpp.]
9*4882a593SmuzhiyunSigned-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
10*4882a593Smuzhiyun[Fabrice: restore original patch in pv/util.cpp for 0.4.2]
11*4882a593SmuzhiyunSigned-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
12*4882a593Smuzhiyun---
13*4882a593Smuzhiyun pv/util.cpp                     | 21 +++++++++++++++++++--
14*4882a593Smuzhiyun pv/util.hpp                     | 10 ++++++++++
15*4882a593Smuzhiyun pv/views/trace/decodetrace.cpp  |  3 ++-
16*4882a593Smuzhiyun pv/views/trace/ruler.cpp        |  2 +-
17*4882a593Smuzhiyun pv/widgets/timestampspinbox.cpp |  2 +-
18*4882a593Smuzhiyun 5 files changed, 33 insertions(+), 5 deletions(-)
19*4882a593Smuzhiyun
20*4882a593Smuzhiyundiff --git a/pv/util.cpp b/pv/util.cpp
21*4882a593Smuzhiyunindex 49b9467c..2a63038d 100644
22*4882a593Smuzhiyun--- a/pv/util.cpp
23*4882a593Smuzhiyun+++ b/pv/util.cpp
24*4882a593Smuzhiyun@@ -137,7 +137,7 @@ QString format_time_si(const Timestamp& v, SIPrefix prefix,
25*4882a593Smuzhiyun 	QString s;
26*4882a593Smuzhiyun 	QTextStream ts(&s);
27*4882a593Smuzhiyun 	if (sign && !v.is_zero())
28*4882a593Smuzhiyun-		ts << forcesign;
29*4882a593Smuzhiyun+		ts.setNumberFlags(ts.numberFlags() | QTextStream::ForceSign);
30*4882a593Smuzhiyun 	ts << qSetRealNumberPrecision(precision) << (v * multiplier);
31*4882a593Smuzhiyun 	ts << ' ' << prefix << unit;
32*4882a593Smuzhiyun
33*4882a593Smuzhiyun@@ -171,7 +171,7 @@ QString format_value_si(double v, SIPrefix prefix, unsigned precision,
34*4882a593Smuzhiyun 	QString s;
35*4882a593Smuzhiyun 	QTextStream ts(&s);
36*4882a593Smuzhiyun 	if (sign && (v != 0))
37*4882a593Smuzhiyun-		ts << forcesign;
38*4882a593Smuzhiyun+		ts.setNumberFlags(ts.numberFlags() | QTextStream::ForceSign);
39*4882a593Smuzhiyun 	ts.setRealNumberNotation(QTextStream::FixedNotation);
40*4882a593Smuzhiyun 	ts.setRealNumberPrecision(precision);
41*4882a593Smuzhiyun 	ts << (v * multiplier) << ' ' << prefix << unit;
42*4882a593Smuzhiyun@@ -281,5 +281,22 @@ vector<string> split_string(string text, string separator)
43*4882a593Smuzhiyun 	return result;
44*4882a593Smuzhiyun }
45*4882a593Smuzhiyun
46*4882a593Smuzhiyun+/**
47*4882a593Smuzhiyun+ * Return the width of a string in a given font.
48*4882a593Smuzhiyun+ *
49*4882a593Smuzhiyun+ * @param[in] metric metrics of the font
50*4882a593Smuzhiyun+ * @param[in] string the string whose width should be determined
51*4882a593Smuzhiyun+ *
52*4882a593Smuzhiyun+ * @return width of the string in pixels
53*4882a593Smuzhiyun+ */
54*4882a593Smuzhiyun+std::streamsize text_width(const QFontMetrics &metric, const QString &string)
55*4882a593Smuzhiyun+{
56*4882a593Smuzhiyun+#if QT_VERSION >= QT_VERSION_CHECK(5, 11, 0)
57*4882a593Smuzhiyun+	return metric.horizontalAdvance(string);
58*4882a593Smuzhiyun+#else
59*4882a593Smuzhiyun+	return metric.width(string);
60*4882a593Smuzhiyun+#endif
61*4882a593Smuzhiyun+}
62*4882a593Smuzhiyun+
63*4882a593Smuzhiyun } // namespace util
64*4882a593Smuzhiyun } // namespace pv
65*4882a593Smuzhiyundiff --git a/pv/util.hpp b/pv/util.hpp
66*4882a593Smuzhiyunindex dd7be222..ad904f85 100644
67*4882a593Smuzhiyun--- a/pv/util.hpp
68*4882a593Smuzhiyun+++ b/pv/util.hpp
69*4882a593Smuzhiyun@@ -30,6 +30,7 @@
70*4882a593Smuzhiyun
71*4882a593Smuzhiyun #include <QMetaType>
72*4882a593Smuzhiyun #include <QString>
73*4882a593Smuzhiyun+#include <QFontMetrics>
74*4882a593Smuzhiyun
75*4882a593Smuzhiyun using std::string;
76*4882a593Smuzhiyun using std::vector;
77*4882a593Smuzhiyun@@ -137,6 +138,15 @@ QString format_time_minutes(const Timestamp& t, signed precision = 0,
78*4882a593Smuzhiyun
79*4882a593Smuzhiyun vector<string> split_string(string text, string separator);
80*4882a593Smuzhiyun
81*4882a593Smuzhiyun+/**
82*4882a593Smuzhiyun+ * Return the width of a string in a given font.
83*4882a593Smuzhiyun+ * @param[in] metric metrics of the font
84*4882a593Smuzhiyun+ * @param[in] string the string whose width should be determined
85*4882a593Smuzhiyun+ *
86*4882a593Smuzhiyun+ * @return width of the string in pixels
87*4882a593Smuzhiyun+ */
88*4882a593Smuzhiyun+std::streamsize text_width(const QFontMetrics &metric, const QString &string);
89*4882a593Smuzhiyun+
90*4882a593Smuzhiyun } // namespace util
91*4882a593Smuzhiyun } // namespace pv
92*4882a593Smuzhiyun
93*4882a593Smuzhiyundiff --git a/pv/views/trace/decodetrace.cpp b/pv/views/trace/decodetrace.cpp
94*4882a593Smuzhiyunindex 9c7196bf..1ee7ae9f 100644
95*4882a593Smuzhiyun--- a/pv/views/trace/decodetrace.cpp
96*4882a593Smuzhiyun+++ b/pv/views/trace/decodetrace.cpp
97*4882a593Smuzhiyun@@ -103,7 +103,8 @@ DecodeTrace::DecodeTrace(pv::Session &session,
98*4882a593Smuzhiyun
99*4882a593Smuzhiyun 	// Determine shortest string we want to see displayed in full
100*4882a593Smuzhiyun 	QFontMetrics m(QApplication::font());
101*4882a593Smuzhiyun-	min_useful_label_width_ = m.width("XX"); // e.g. two hex characters
102*4882a593Smuzhiyun+	// e.g. two hex characters
103*4882a593Smuzhiyun+	min_useful_label_width_ = util::text_width(m, "XX");
104*4882a593Smuzhiyun
105*4882a593Smuzhiyun 	// For the base color, we want to start at a very different color for
106*4882a593Smuzhiyun 	// every decoder stack, so multiply the index with a number that is
107*4882a593Smuzhiyundiff --git a/pv/views/trace/ruler.cpp b/pv/views/trace/ruler.cpp
108*4882a593Smuzhiyunindex acea8a36..68134966 100644
109*4882a593Smuzhiyun--- a/pv/views/trace/ruler.cpp
110*4882a593Smuzhiyun+++ b/pv/views/trace/ruler.cpp
111*4882a593Smuzhiyun@@ -218,7 +218,7 @@ void Ruler::paintEvent(QPaintEvent*)
112*4882a593Smuzhiyun 		const int rightedge = width();
113*4882a593Smuzhiyun 		const int x_tick = tick.first;
114*4882a593Smuzhiyun 		if ((x_tick > leftedge) && (x_tick < rightedge)) {
115*4882a593Smuzhiyun-			const int x_left_bound = QFontMetrics(font()).width(tick.second) / 2;
116*4882a593Smuzhiyun+			const int x_left_bound = util::text_width(QFontMetrics(font()), tick.second) / 2;
117*4882a593Smuzhiyun 			const int x_right_bound = rightedge - x_left_bound;
118*4882a593Smuzhiyun 			const int x_legend = min(max(x_tick, x_left_bound), x_right_bound);
119*4882a593Smuzhiyun 			p.drawText(x_legend, ValueMargin, 0, text_height,
120*4882a593Smuzhiyundiff --git a/pv/widgets/timestampspinbox.cpp b/pv/widgets/timestampspinbox.cpp
121*4882a593Smuzhiyunindex 21b3d0d7..383aed1f 100644
122*4882a593Smuzhiyun--- a/pv/widgets/timestampspinbox.cpp
123*4882a593Smuzhiyun+++ b/pv/widgets/timestampspinbox.cpp
124*4882a593Smuzhiyun@@ -75,7 +75,7 @@ QSize TimestampSpinBox::minimumSizeHint() const
125*4882a593Smuzhiyun {
126*4882a593Smuzhiyun 	const QFontMetrics fm(fontMetrics());
127*4882a593Smuzhiyun 	const int l = round(value_).str().size() + precision_ + 10;
128*4882a593Smuzhiyun-	const int w = fm.width(QString(l, '0'));
129*4882a593Smuzhiyun+	const int w = util::text_width(fm, QString(l, '0'));
130*4882a593Smuzhiyun 	const int h = lineEdit()->minimumSizeHint().height();
131*4882a593Smuzhiyun 	return QSize(w, h);
132*4882a593Smuzhiyun }
133*4882a593Smuzhiyun--
134*4882a593Smuzhiyun2.26.2
135*4882a593Smuzhiyun
136