diff options
Diffstat (limited to 'src/corelib/tools/qpoint.cpp')
-rw-r--r-- | src/corelib/tools/qpoint.cpp | 204 |
1 files changed, 107 insertions, 97 deletions
diff --git a/src/corelib/tools/qpoint.cpp b/src/corelib/tools/qpoint.cpp index 432fb33297..775a354469 100644 --- a/src/corelib/tools/qpoint.cpp +++ b/src/corelib/tools/qpoint.cpp @@ -1,46 +1,11 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtCore module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only #include "qpoint.h" #include "qdatastream.h" #include <private/qdebug_p.h> +#include <QtCore/qhashfunctions.h> QT_BEGIN_NAMESPACE @@ -50,6 +15,10 @@ QT_BEGIN_NAMESPACE \ingroup painting \reentrant + \compares equality + \compareswith equality QPointF + \endcompareswith + \brief The QPoint class defines a point in the plane using integer precision. @@ -243,23 +212,21 @@ QT_BEGIN_NAMESPACE */ /*! - \fn bool operator==(const QPoint &p1, const QPoint &p2) - \relates QPoint + \fn bool QPoint::operator==(const QPoint &lhs, const QPoint &rhs) - Returns \c true if \a p1 and \a p2 are equal; otherwise returns - false. + Returns \c true if \a lhs and \a rhs are equal; otherwise returns + \c false. */ /*! - \fn bool operator!=(const QPoint &p1, const QPoint &p2) - \relates QPoint + \fn bool QPoint::operator!=(const QPoint &lhs, const QPoint &rhs) - Returns \c true if \a p1 and \a p2 are not equal; otherwise returns \c false. + Returns \c true if \a lhs and \a rhs are not equal; otherwise returns + \c false. */ /*! - \fn const QPoint operator+(const QPoint &p1, const QPoint &p2) - \relates QPoint + \fn QPoint QPoint::operator+(const QPoint &p1, const QPoint &p2) Returns a QPoint object that is the sum of the given points, \a p1 and \a p2; each component is added separately. @@ -268,8 +235,7 @@ QT_BEGIN_NAMESPACE */ /*! - \fn const QPoint operator-(const QPoint &p1, const QPoint &p2) - \relates QPoint + \fn Point QPoint::operator-(const QPoint &p1, const QPoint &p2) Returns a QPoint object that is formed by subtracting \a p2 from \a p1; each component is subtracted separately. @@ -278,8 +244,7 @@ QT_BEGIN_NAMESPACE */ /*! - \fn const QPoint operator*(const QPoint &point, float factor) - \relates QPoint + \fn QPoint QPoint::operator*(const QPoint &point, float factor) Returns a copy of the given \a point multiplied by the given \a factor. @@ -290,8 +255,7 @@ QT_BEGIN_NAMESPACE */ /*! - \fn const QPoint operator*(const QPoint &point, double factor) - \relates QPoint + \fn QPoint QPoint::operator*(const QPoint &point, double factor) Returns a copy of the given \a point multiplied by the given \a factor. @@ -302,8 +266,7 @@ QT_BEGIN_NAMESPACE */ /*! - \fn const QPoint operator*(const QPoint &point, int factor) - \relates QPoint + \fn QPoint QPoint::operator*(const QPoint &point, int factor) Returns a copy of the given \a point multiplied by the given \a factor. @@ -311,9 +274,8 @@ QT_BEGIN_NAMESPACE */ /*! - \fn const QPoint operator*(float factor, const QPoint &point) + \fn QPoint QPoint::operator*(float factor, const QPoint &point) \overload - \relates QPoint Returns a copy of the given \a point multiplied by the given \a factor. @@ -324,9 +286,8 @@ QT_BEGIN_NAMESPACE */ /*! - \fn const QPoint operator*(double factor, const QPoint &point) + \fn QPoint QPoint::operator*(double factor, const QPoint &point) \overload - \relates QPoint Returns a copy of the given \a point multiplied by the given \a factor. @@ -337,9 +298,8 @@ QT_BEGIN_NAMESPACE */ /*! - \fn const QPoint operator*(int factor, const QPoint &point) + \fn QPoint QPoint::operator*(int factor, const QPoint &point) \overload - \relates QPoint Returns a copy of the given \a point multiplied by the given \a factor. @@ -347,17 +307,15 @@ QT_BEGIN_NAMESPACE */ /*! - \fn const QPoint operator+(const QPoint &point) - \relates QPoint + \fn QPoint QPoint::operator+(const QPoint &point) \since 5.0 Returns \a point unmodified. */ /*! - \fn const QPoint operator-(const QPoint &point) + \fn QPoint QPoint::operator-(const QPoint &point) \overload - \relates QPoint Returns a QPoint object that is formed by changing the sign of both components of the given \a point. @@ -381,8 +339,7 @@ QT_BEGIN_NAMESPACE */ /*! - \fn const QPoint operator/(const QPoint &point, qreal divisor) - \relates QPoint + \fn const QPoint QPoint::operator/(const QPoint &point, qreal divisor) Returns the QPoint formed by dividing both components of the given \a point by the given \a divisor. @@ -393,6 +350,15 @@ QT_BEGIN_NAMESPACE \sa QPoint::operator/=() */ +/*! + \fn QPoint::toPointF() const + \since 6.4 + + Returns this point as a point with floating point accuracy. + + \sa QPointF::toPoint() +*/ + /***************************************************************************** QPoint stream functions *****************************************************************************/ @@ -484,17 +450,34 @@ QDebug operator<<(QDebug dbg, const QPointF &p) #endif /*! + \fn size_t qHash(QPoint key, size_t seed = 0) + \relates QHash + \since 6.0 + + Returns the hash value for the \a key, using \a seed to seed the + calculation. +*/ +size_t qHash(QPoint key, size_t seed) noexcept +{ + return qHashMulti(seed, key.x(), key.y()); +} + +/*! \class QPointF \inmodule QtCore \ingroup painting \reentrant + \compares equality + \compareswith equality QPoint + \endcompareswith + \brief The QPointF class defines a point in the plane using floating point precision. A point is specified by a x coordinate and an y coordinate which can be accessed using the x() and y() functions. The coordinates - of the point are specified using floating point numbers for + of the point are specified using finite floating point numbers for accuracy. The isNull() function returns \c true if both x and y are set to 0.0. The coordinates can be set (or altered) using the setX() and setY() functions, or alternatively the rx() and ry() functions which @@ -531,7 +514,7 @@ QDebug operator<<(QDebug dbg, const QPointF &p) Constructs a copy of the given \a point. - \sa toPoint() + \sa toPoint(), QPoint::toPointF() */ /*! @@ -580,7 +563,7 @@ QDebug operator<<(QDebug dbg, const QPointF &p) /*! \fn void QPointF::setX(qreal x) - Sets the x coordinate of this point to the given \a x coordinate. + Sets the x coordinate of this point to the given finite \a x coordinate. \sa x(), setY() */ @@ -588,7 +571,7 @@ QDebug operator<<(QDebug dbg, const QPointF &p) /*! \fn void QPointF::setY(qreal y) - Sets the y coordinate of this point to the given \a y coordinate. + Sets the y coordinate of this point to the given finite \a y coordinate. \sa y(), setX() */ @@ -654,7 +637,7 @@ QDebug operator<<(QDebug dbg, const QPointF &p) /*! \fn QPointF& QPointF::operator*=(qreal factor) - Multiplies this point's coordinates by the given \a factor, and + Multiplies this point's coordinates by the given finite \a factor, and returns a reference to this point. For example: \snippet code/src_corelib_tools_qpoint.cpp 14 @@ -670,12 +653,13 @@ QDebug operator<<(QDebug dbg, const QPointF &p) \snippet code/src_corelib_tools_qpoint.cpp 15 + The \a divisor must not be zero or NaN. + \sa operator*=() */ /*! - \fn const QPointF operator+(const QPointF &p1, const QPointF &p2) - \relates QPointF + \fn QPointF QPointF::operator+(const QPointF &p1, const QPointF &p2) Returns a QPointF object that is the sum of the given points, \a p1 and \a p2; each component is added separately. @@ -684,8 +668,7 @@ QDebug operator<<(QDebug dbg, const QPointF &p) */ /*! - \fn const QPointF operator-(const QPointF &p1, const QPointF &p2) - \relates QPointF + \fn QPointF QPointF::operator-(const QPointF &p1, const QPointF &p2) Returns a QPointF object that is formed by subtracting \a p2 from \a p1; each component is subtracted separately. @@ -694,49 +677,46 @@ QDebug operator<<(QDebug dbg, const QPointF &p) */ /*! - \fn const QPointF operator*(const QPointF &point, qreal factor) - \relates QPointF + \fn QPointF QPointF::operator*(const QPointF &point, qreal factor) - Returns a copy of the given \a point, multiplied by the given \a factor. + Returns a copy of the given \a point, multiplied by the given finite \a factor. \sa QPointF::operator*=() */ /*! - \fn const QPointF operator*(qreal factor, const QPointF &point) - \relates QPointF + \fn QPointF QPointF::operator*(qreal factor, const QPointF &point) \overload - Returns a copy of the given \a point, multiplied by the given \a factor. + Returns a copy of the given \a point, multiplied by the given finite \a factor. */ /*! - \fn const QPointF operator+(const QPointF &point) - \relates QPointF + \fn QPointF QPointF::operator+(const QPointF &point) \since 5.0 Returns \a point unmodified. */ /*! - \fn const QPointF operator-(const QPointF &point) - \relates QPointF + \fn QPointF QPointF::operator-(const QPointF &point) \overload Returns a QPointF object that is formed by changing the sign of - both components of the given \a point. + each component of the given \a point. Equivalent to \c {QPointF(0,0) - point}. */ /*! - \fn const QPointF operator/(const QPointF &point, qreal divisor) - \relates QPointF + \fn QPointF QPointF::operator/(const QPointF &point, qreal divisor) - Returns the QPointF object formed by dividing both components of + Returns the QPointF object formed by dividing each component of the given \a point by the given \a divisor. + The \a divisor must not be zero or NaN. + \sa QPointF::operator/=() */ @@ -746,7 +726,7 @@ QDebug operator<<(QDebug dbg, const QPointF &p) Rounds the coordinates of this point to the nearest integer, and returns a QPoint object with the rounded coordinates. - \sa QPointF() + \sa QPointF(), QPoint::toPointF() */ /*! @@ -759,17 +739,47 @@ QDebug operator<<(QDebug dbg, const QPointF &p) */ /*! - \fn bool operator==(const QPointF &p1, const QPointF &p2) - \relates QPointF + \fn bool QPointF::operator==(const QPointF &lhs, const QPointF &rhs) + + Returns \c true if \a lhs is approximately equal to \a rhs; otherwise + returns \c false. + + \warning This function does not check for strict equality; instead, + it uses a fuzzy comparison to compare the points' coordinates. - Returns \c true if \a p1 is equal to \a p2; otherwise returns \c false. + \sa qFuzzyCompare */ /*! - \fn bool operator!=(const QPointF &p1, const QPointF &p2); - \relates QPointF + \fn bool QPointF::operator!=(const QPointF &lhs, const QPointF &rhs) + + Returns \c true if \a lhs is sufficiently different from \a rhs; + otherwise returns \c false. + + \warning This function does not check for strict inequality; instead, + it uses a fuzzy comparison to compare the points' coordinates. + + \sa qFuzzyCompare +*/ + +/*! + \fn bool QPointF::qFuzzyCompare(const QPointF &p1, const QPointF &p2) + \since 6.8 + + Returns \c true if \a p1 is approximately equal to \a p2; otherwise + returns \c false. + + \sa qFuzzyIsNull +*/ + +/*! + \fn bool QPointF::qFuzzyIsNull(const QPointF &point) + \since 6.8 + + Returns \c true if \a point is approximately equal to a point + \c {(0.0, 0.0)}. - Returns \c true if \a p1 is not equal to \a p2; otherwise returns \c false. + \sa qFuzzyCompare */ #ifndef QT_NO_DATASTREAM |