From 8c8b9a4173f4add522ec13de85107deba7c82da0 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Wed, 20 May 2020 13:05:46 +0200 Subject: Normalize rounding Change the rounding of negative half values to match standard C++ round, this will also allow future optimizations. Change-Id: I8f8c71bed1f05891e82ea787c6bc284297de9c5c Reviewed-by: Thiago Macieira --- src/corelib/global/qglobal.cpp | 8 ++++---- src/corelib/global/qglobal.h | 8 ++++---- tests/auto/corelib/tools/qpointf/tst_qpointf.cpp | 2 +- .../auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp | 1 + 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp index 39f36bb3cc..1c55cb8f9f 100644 --- a/src/corelib/global/qglobal.cpp +++ b/src/corelib/global/qglobal.cpp @@ -973,7 +973,7 @@ static_assert((std::is_same::value)); Rounds \a d to the nearest integer. - Rounds half up (e.g. 0.5 -> 1, -0.5 -> 0). + Rounds half away from zero (e.g. 0.5 -> 1, -0.5 -> -1). Example: @@ -985,7 +985,7 @@ static_assert((std::is_same::value)); Rounds \a d to the nearest integer. - Rounds half up (e.g. 0.5f -> 1, -0.5f -> 0). + Rounds half away from zero (e.g. 0.5f -> 1, -0.5f -> -1). Example: @@ -997,7 +997,7 @@ static_assert((std::is_same::value)); Rounds \a d to the nearest 64-bit integer. - Rounds half up (e.g. 0.5 -> 1, -0.5 -> 0). + Rounds half away from zero (e.g. 0.5 -> 1, -0.5 -> -1). Example: @@ -1009,7 +1009,7 @@ static_assert((std::is_same::value)); Rounds \a d to the nearest 64-bit integer. - Rounds half up (e.g. 0.5f -> 1, -0.5f -> 0). + Rounds half away from zero (e.g. 0.5f -> 1, -0.5f -> -1). Example: diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index 418cc2f66b..c268d59e8f 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -582,14 +582,14 @@ template constexpr inline T qAbs(const T &t) { return t >= 0 ? t : -t; } constexpr inline int qRound(double d) -{ return d >= 0.0 ? int(d + 0.5) : int(d - double(int(d-1)) + 0.5) + int(d-1); } +{ return d >= 0.0 ? int(d + 0.5) : int(d - 0.5); } constexpr inline int qRound(float d) -{ return d >= 0.0f ? int(d + 0.5f) : int(d - float(int(d-1)) + 0.5f) + int(d-1); } +{ return d >= 0.0f ? int(d + 0.5f) : int(d - 0.5f); } constexpr inline qint64 qRound64(double d) -{ return d >= 0.0 ? qint64(d + 0.5) : qint64(d - double(qint64(d-1)) + 0.5) + qint64(d-1); } +{ return d >= 0.0 ? qint64(d + 0.5) : qint64(d - 0.5); } constexpr inline qint64 qRound64(float d) -{ return d >= 0.0f ? qint64(d + 0.5f) : qint64(d - float(qint64(d-1)) + 0.5f) + qint64(d-1); } +{ return d >= 0.0f ? qint64(d + 0.5f) : qint64(d - 0.5f); } namespace QTypeTraits { diff --git a/tests/auto/corelib/tools/qpointf/tst_qpointf.cpp b/tests/auto/corelib/tools/qpointf/tst_qpointf.cpp index e78a8e3082..ef08352dfc 100644 --- a/tests/auto/corelib/tools/qpointf/tst_qpointf.cpp +++ b/tests/auto/corelib/tools/qpointf/tst_qpointf.cpp @@ -381,7 +381,7 @@ void tst_QPointF::toPoint_data() QTest::newRow("(0.0, 0.0) ==> (0, 0)") << QPointF(0, 0) << QPoint(0, 0); QTest::newRow("(0.5, 0.5) ==> (1, 1)") << QPointF(0.5, 0.5) << QPoint(1, 1); - QTest::newRow("(-0.5, -0.5) ==> (0, 0)") << QPointF(-0.5, -0.5) << QPoint(0, 0); + QTest::newRow("(-0.5, -0.5) ==> (-1, -1)") << QPointF(-0.5, -0.5) << QPoint(-1, -1); } void tst_QPointF::toPoint() diff --git a/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp b/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp index 77b2c0251d..42a16dc1f4 100644 --- a/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp +++ b/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp @@ -4840,6 +4840,7 @@ public: { setFlag(QGraphicsItem::ItemIsFocusable, true); setFlag(QGraphicsItem::ItemAcceptsInputMethod, true); + setPen(Qt::NoPen); // Avoid adding a half pixel border to the rect. } QVariant inputMethodQuery(Qt::InputMethodQuery) const override -- cgit v1.2.3