From a7372fd79d9416d4b0de3d47ef869aff12048aa3 Mon Sep 17 00:00:00 2001 From: Lorenz Haas Date: Sun, 1 May 2016 22:47:01 +0200 Subject: Add QLineF::center() returning the point in the center of the line [ChangeLog][QtCore][QLine/QLineF] Added center(). Change-Id: I6dcfa9e839190c0a4caf36fb6ecd01b37d65d274 Reviewed-by: Marc Mutz --- src/corelib/tools/qline.cpp | 23 +++++++++++++++++++++++ src/corelib/tools/qline.h | 14 ++++++++++++++ 2 files changed, 37 insertions(+) (limited to 'src/corelib') diff --git a/src/corelib/tools/qline.cpp b/src/corelib/tools/qline.cpp index b004f74be9..8942292a3d 100644 --- a/src/corelib/tools/qline.cpp +++ b/src/corelib/tools/qline.cpp @@ -214,6 +214,14 @@ QT_BEGIN_NAMESPACE Returns this line translated the distance specified by \a dx and \a dy. */ +/*! + \fn QPoint QLine::center() const + + \since 5.8 + + Returns the center point of this line. This is equivalent to + (p1() + p2()) / 2, except it will never overflow. +*/ /*! \fn void QLine::setP1(const QPoint &p1) @@ -351,6 +359,12 @@ QDataStream &operator>>(QDataStream &stream, QLine &line) translate() function, and can be traversed using the pointAt() function. + \section1 Constraints + + QLine is limited to the minimum and maximum values for the + \c int type. Operations on a QLine that could potentially result + in values outside this range will result in undefined behavior. + \sa QLine, QPolygonF, QRectF */ @@ -710,6 +724,15 @@ QLineF::IntersectType QLineF::intersect(const QLineF &l, QPointF *intersectionPo Returns this line translated the distance specified by \a dx and \a dy. */ +/*! + \fn QPointF QLineF::center() const + + \since 5.8 + + Returns the center point of this line. This is equivalent to + 0.5 * p1() + 0.5 * p2(). +*/ + /*! \fn void QLineF::setP1(const QPointF &p1) \since 4.4 diff --git a/src/corelib/tools/qline.h b/src/corelib/tools/qline.h index 819dd3fd3b..5b5ca3b4c8 100644 --- a/src/corelib/tools/qline.h +++ b/src/corelib/tools/qline.h @@ -76,6 +76,8 @@ public: Q_DECL_CONSTEXPR inline QLine translated(const QPoint &p) const Q_REQUIRED_RESULT; Q_DECL_CONSTEXPR inline QLine translated(int dx, int dy) const Q_REQUIRED_RESULT; + Q_DECL_CONSTEXPR inline QPoint center() const Q_REQUIRED_RESULT; + inline void setP1(const QPoint &p1); inline void setP2(const QPoint &p2); inline void setPoints(const QPoint &p1, const QPoint &p2); @@ -165,6 +167,11 @@ Q_DECL_CONSTEXPR inline QLine QLine::translated(int adx, int ady) const return translated(QPoint(adx, ady)); } +Q_DECL_CONSTEXPR inline QPoint QLine::center() const +{ + return QPoint(int((qint64(pt1.x()) + pt2.x()) / 2), int((qint64(pt1.y()) + pt2.y()) / 2)); +} + inline void QLine::setP1(const QPoint &aP1) { pt1 = aP1; @@ -253,6 +260,8 @@ public: Q_DECL_CONSTEXPR inline QLineF translated(const QPointF &p) const Q_REQUIRED_RESULT; Q_DECL_CONSTEXPR inline QLineF translated(qreal dx, qreal dy) const Q_REQUIRED_RESULT; + Q_DECL_CONSTEXPR inline QPointF center() const Q_REQUIRED_RESULT; + inline void setP1(const QPointF &p1); inline void setP2(const QPointF &p2); inline void setPoints(const QPointF &p1, const QPointF &p2); @@ -357,6 +366,11 @@ Q_DECL_CONSTEXPR inline QLineF QLineF::translated(qreal adx, qreal ady) const return translated(QPointF(adx, ady)); } +Q_DECL_CONSTEXPR inline QPointF QLineF::center() const +{ + return QPointF(0.5 * pt1.x() + 0.5 * pt2.x(), 0.5 * pt1.y() + 0.5 * pt2.y()); +} + inline void QLineF::setLength(qreal len) { if (isNull()) -- cgit v1.2.3