qpoint.h
上传用户:detong
上传日期:2022-06-22
资源大小:20675k
文件大小:9k
源码类别:

系统编程

开发平台:

Unix_Linux

  1. /****************************************************************************
  2. **
  3. ** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
  4. ** Contact: Qt Software Information (qt-info@nokia.com)
  5. **
  6. ** This file is part of the QtCore module of the Qt Toolkit.
  7. **
  8. ** Commercial Usage
  9. ** Licensees holding valid Qt Commercial licenses may use this file in
  10. ** accordance with the Qt Commercial License Agreement provided with the
  11. ** Software or, alternatively, in accordance with the terms contained in
  12. ** a written agreement between you and Nokia.
  13. **
  14. **
  15. ** GNU General Public License Usage
  16. ** Alternatively, this file may be used under the terms of the GNU
  17. ** General Public License versions 2.0 or 3.0 as published by the Free
  18. ** Software Foundation and appearing in the file LICENSE.GPL included in
  19. ** the packaging of this file.  Please review the following information
  20. ** to ensure GNU General Public Licensing requirements will be met:
  21. ** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
  22. ** http://www.gnu.org/copyleft/gpl.html.  In addition, as a special
  23. ** exception, Nokia gives you certain additional rights. These rights
  24. ** are described in the Nokia Qt GPL Exception version 1.3, included in
  25. ** the file GPL_EXCEPTION.txt in this package.
  26. **
  27. ** Qt for Windows(R) Licensees
  28. ** As a special exception, Nokia, as the sole copyright holder for Qt
  29. ** Designer, grants users of the Qt/Eclipse Integration plug-in the
  30. ** right for the Qt/Eclipse Integration to link to functionality
  31. ** provided by Qt Designer and its related libraries.
  32. **
  33. ** If you are unsure which license is appropriate for your use, please
  34. ** contact the sales department at qt-sales@nokia.com.
  35. **
  36. ****************************************************************************/
  37. #ifndef QPOINT_H
  38. #define QPOINT_H
  39. #include <QtCore/qnamespace.h>
  40. QT_BEGIN_HEADER
  41. QT_BEGIN_NAMESPACE
  42. QT_MODULE(Core)
  43. class Q_CORE_EXPORT QPoint
  44. {
  45. public:
  46.     QPoint();
  47.     QPoint(int xpos, int ypos);
  48.     bool isNull() const;
  49.     int x() const;
  50.     int y() const;
  51.     void setX(int x);
  52.     void setY(int y);
  53.     int manhattanLength() const;
  54.     int &rx();
  55.     int &ry();
  56.     QPoint &operator+=(const QPoint &p);
  57.     QPoint &operator-=(const QPoint &p);
  58.     QPoint &operator*=(qreal c);
  59.     QPoint &operator/=(qreal c);
  60.     friend inline bool operator==(const QPoint &, const QPoint &);
  61.     friend inline bool operator!=(const QPoint &, const QPoint &);
  62.     friend inline const QPoint operator+(const QPoint &, const QPoint &);
  63.     friend inline const QPoint operator-(const QPoint &, const QPoint &);
  64.     friend inline const QPoint operator*(const QPoint &, qreal);
  65.     friend inline const QPoint operator*(qreal, const QPoint &);
  66.     friend inline const QPoint operator-(const QPoint &);
  67.     friend inline const QPoint operator/(const QPoint &, qreal);
  68. private:
  69.     friend class QTransform;
  70. #if defined(Q_OS_MAC)
  71.     int yp;
  72.     int xp;
  73. #else
  74.     int xp;
  75.     int yp;
  76. #endif
  77. };
  78. Q_DECLARE_TYPEINFO(QPoint, Q_MOVABLE_TYPE);
  79. /*****************************************************************************
  80.   QPoint stream functions
  81.  *****************************************************************************/
  82. #ifndef QT_NO_DATASTREAM
  83. Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, const QPoint &);
  84. Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QPoint &);
  85. #endif
  86. /*****************************************************************************
  87.   QPoint inline functions
  88.  *****************************************************************************/
  89. inline QPoint::QPoint()
  90. { xp=0; yp=0; }
  91. inline QPoint::QPoint(int xpos, int ypos)
  92. { xp = xpos; yp = ypos; }
  93. inline bool QPoint::isNull() const
  94. { return xp == 0 && yp == 0; }
  95. inline int QPoint::x() const
  96. { return xp; }
  97. inline int QPoint::y() const
  98. { return yp; }
  99. inline void QPoint::setX(int xpos)
  100. { xp = xpos; }
  101. inline void QPoint::setY(int ypos)
  102. { yp = ypos; }
  103. inline int &QPoint::rx()
  104. { return xp; }
  105. inline int &QPoint::ry()
  106. { return yp; }
  107. inline QPoint &QPoint::operator+=(const QPoint &p)
  108. { xp+=p.xp; yp+=p.yp; return *this; }
  109. inline QPoint &QPoint::operator-=(const QPoint &p)
  110. { xp-=p.xp; yp-=p.yp; return *this; }
  111. inline QPoint &QPoint::operator*=(qreal c)
  112. { xp = qRound(xp*c); yp = qRound(yp*c); return *this; }
  113. inline bool operator==(const QPoint &p1, const QPoint &p2)
  114. { return p1.xp == p2.xp && p1.yp == p2.yp; }
  115. inline bool operator!=(const QPoint &p1, const QPoint &p2)
  116. { return p1.xp != p2.xp || p1.yp != p2.yp; }
  117. inline const QPoint operator+(const QPoint &p1, const QPoint &p2)
  118. { return QPoint(p1.xp+p2.xp, p1.yp+p2.yp); }
  119. inline const QPoint operator-(const QPoint &p1, const QPoint &p2)
  120. { return QPoint(p1.xp-p2.xp, p1.yp-p2.yp); }
  121. inline const QPoint operator*(const QPoint &p, qreal c)
  122. { return QPoint(qRound(p.xp*c), qRound(p.yp*c)); }
  123. inline const QPoint operator*(qreal c, const QPoint &p)
  124. { return QPoint(qRound(p.xp*c), qRound(p.yp*c)); }
  125. inline const QPoint operator-(const QPoint &p)
  126. { return QPoint(-p.xp, -p.yp); }
  127. inline QPoint &QPoint::operator/=(qreal c)
  128. {
  129.     xp = qRound(xp/c);
  130.     yp = qRound(yp/c);
  131.     return *this;
  132. }
  133. inline const QPoint operator/(const QPoint &p, qreal c)
  134. {
  135.     return QPoint(qRound(p.xp/c), qRound(p.yp/c));
  136. }
  137. #ifndef QT_NO_DEBUG_STREAM
  138. Q_CORE_EXPORT QDebug operator<<(QDebug, const QPoint &);
  139. #endif
  140. class Q_CORE_EXPORT QPointF
  141. {
  142. public:
  143.     QPointF();
  144.     QPointF(const QPoint &p);
  145.     QPointF(qreal xpos, qreal ypos);
  146.     bool isNull() const;
  147.     qreal x() const;
  148.     qreal y() const;
  149.     void setX(qreal x);
  150.     void setY(qreal y);
  151.     qreal &rx();
  152.     qreal &ry();
  153.     QPointF &operator+=(const QPointF &p);
  154.     QPointF &operator-=(const QPointF &p);
  155.     QPointF &operator*=(qreal c);
  156.     QPointF &operator/=(qreal c);
  157.     friend inline bool operator==(const QPointF &, const QPointF &);
  158.     friend inline bool operator!=(const QPointF &, const QPointF &);
  159.     friend inline const QPointF operator+(const QPointF &, const QPointF &);
  160.     friend inline const QPointF operator-(const QPointF &, const QPointF &);
  161.     friend inline const QPointF operator*(qreal, const QPointF &);
  162.     friend inline const QPointF operator*(const QPointF &, qreal);
  163.     friend inline const QPointF operator-(const QPointF &);
  164.     friend inline const QPointF operator/(const QPointF &, qreal);
  165.     QPoint toPoint() const;
  166. private:
  167.     friend class QMatrix;
  168.     friend class QTransform;
  169.     qreal xp;
  170.     qreal yp;
  171. };
  172. Q_DECLARE_TYPEINFO(QPointF, Q_MOVABLE_TYPE);
  173. /*****************************************************************************
  174.   QPointF stream functions
  175.  *****************************************************************************/
  176. #ifndef QT_NO_DATASTREAM
  177. Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, const QPointF &);
  178. Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QPointF &);
  179. #endif
  180. /*****************************************************************************
  181.   QPointF inline functions
  182.  *****************************************************************************/
  183. inline QPointF::QPointF() : xp(0), yp(0) { }
  184. inline QPointF::QPointF(qreal xpos, qreal ypos) : xp(xpos), yp(ypos) { }
  185. inline QPointF::QPointF(const QPoint &p) : xp(p.x()), yp(p.y()) { }
  186. inline bool QPointF::isNull() const
  187. {
  188.     return qIsNull(xp) && qIsNull(yp);
  189. }
  190. inline qreal QPointF::x() const
  191. {
  192.     return xp;
  193. }
  194. inline qreal QPointF::y() const
  195. {
  196.     return yp;
  197. }
  198. inline void QPointF::setX(qreal xpos)
  199. {
  200.     xp = xpos;
  201. }
  202. inline void QPointF::setY(qreal ypos)
  203. {
  204.     yp = ypos;
  205. }
  206. inline qreal &QPointF::rx()
  207. {
  208.     return xp;
  209. }
  210. inline qreal &QPointF::ry()
  211. {
  212.     return yp;
  213. }
  214. inline QPointF &QPointF::operator+=(const QPointF &p)
  215. {
  216.     xp+=p.xp;
  217.     yp+=p.yp;
  218.     return *this;
  219. }
  220. inline QPointF &QPointF::operator-=(const QPointF &p)
  221. {
  222.     xp-=p.xp; yp-=p.yp; return *this;
  223. }
  224. inline QPointF &QPointF::operator*=(qreal c)
  225. {
  226.     xp*=c; yp*=c; return *this;
  227. }
  228. inline bool operator==(const QPointF &p1, const QPointF &p2)
  229. {
  230.     return qFuzzyCompare(p1.xp, p2.xp) && qFuzzyCompare(p1.yp, p2.yp);
  231. }
  232. inline bool operator!=(const QPointF &p1, const QPointF &p2)
  233. {
  234.     return !qFuzzyCompare(p1.xp, p2.xp) || !qFuzzyCompare(p1.yp, p2.yp);
  235. }
  236. inline const QPointF operator+(const QPointF &p1, const QPointF &p2)
  237. {
  238.     return QPointF(p1.xp+p2.xp, p1.yp+p2.yp);
  239. }
  240. inline const QPointF operator-(const QPointF &p1, const QPointF &p2)
  241. {
  242.     return QPointF(p1.xp-p2.xp, p1.yp-p2.yp);
  243. }
  244. inline const QPointF operator*(const QPointF &p, qreal c)
  245. {
  246.     return QPointF(p.xp*c, p.yp*c);
  247. }
  248. inline const QPointF operator*(qreal c, const QPointF &p)
  249. {
  250.     return QPointF(p.xp*c, p.yp*c);
  251. }
  252. inline const QPointF operator-(const QPointF &p)
  253. {
  254.     return QPointF(-p.xp, -p.yp);
  255. }
  256. inline QPointF &QPointF::operator/=(qreal c)
  257. {
  258.     xp/=c;
  259.     yp/=c;
  260.     return *this;
  261. }
  262. inline const QPointF operator/(const QPointF &p, qreal c)
  263. {
  264.     return QPointF(p.xp/c, p.yp/c);
  265. }
  266. inline QPoint QPointF::toPoint() const
  267. {
  268.     return QPoint(qRound(xp), qRound(yp));
  269. }
  270. #ifndef QT_NO_DEBUG_STREAM
  271. Q_CORE_EXPORT QDebug operator<<(QDebug d, const QPointF &p);
  272. #endif
  273. QT_END_NAMESPACE
  274. QT_END_HEADER
  275. #endif // QPOINT_H