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

系统编程

开发平台:

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 QSIZE_H
  38. #define QSIZE_H
  39. #include <QtCore/qnamespace.h>
  40. QT_BEGIN_HEADER
  41. QT_BEGIN_NAMESPACE
  42. QT_MODULE(Core)
  43. class Q_CORE_EXPORT QSize
  44. {
  45. public:
  46.     QSize();
  47.     QSize(int w, int h);
  48.     bool isNull() const;
  49.     bool isEmpty() const;
  50.     bool isValid() const;
  51.     int width() const;
  52.     int height() const;
  53.     void setWidth(int w);
  54.     void setHeight(int h);
  55.     void transpose();
  56.     void scale(int w, int h, Qt::AspectRatioMode mode);
  57.     void scale(const QSize &s, Qt::AspectRatioMode mode);
  58.     QSize expandedTo(const QSize &) const;
  59.     QSize boundedTo(const QSize &) const;
  60.     int &rwidth();
  61.     int &rheight();
  62.     QSize &operator+=(const QSize &);
  63.     QSize &operator-=(const QSize &);
  64.     QSize &operator*=(qreal c);
  65.     QSize &operator/=(qreal c);
  66.     friend inline bool operator==(const QSize &, const QSize &);
  67.     friend inline bool operator!=(const QSize &, const QSize &);
  68.     friend inline const QSize operator+(const QSize &, const QSize &);
  69.     friend inline const QSize operator-(const QSize &, const QSize &);
  70.     friend inline const QSize operator*(const QSize &, qreal);
  71.     friend inline const QSize operator*(qreal, const QSize &);
  72.     friend inline const QSize operator/(const QSize &, qreal);
  73. private:
  74.     int wd;
  75.     int ht;
  76. };
  77. Q_DECLARE_TYPEINFO(QSize, Q_MOVABLE_TYPE);
  78. /*****************************************************************************
  79.   QSize stream functions
  80.  *****************************************************************************/
  81. Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, const QSize &);
  82. Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QSize &);
  83. /*****************************************************************************
  84.   QSize inline functions
  85.  *****************************************************************************/
  86. inline QSize::QSize()
  87. { wd = ht = -1; }
  88. inline QSize::QSize(int w, int h)
  89. { wd = w; ht = h; }
  90. inline bool QSize::isNull() const
  91. { return wd==0 && ht==0; }
  92. inline bool QSize::isEmpty() const
  93. { return wd<1 || ht<1; }
  94. inline bool QSize::isValid() const
  95. { return wd>=0 && ht>=0; }
  96. inline int QSize::width() const
  97. { return wd; }
  98. inline int QSize::height() const
  99. { return ht; }
  100. inline void QSize::setWidth(int w)
  101. { wd = w; }
  102. inline void QSize::setHeight(int h)
  103. { ht = h; }
  104. inline void QSize::scale(int w, int h, Qt::AspectRatioMode mode)
  105. { scale(QSize(w, h), mode); }
  106. inline int &QSize::rwidth()
  107. { return wd; }
  108. inline int &QSize::rheight()
  109. { return ht; }
  110. inline QSize &QSize::operator+=(const QSize &s)
  111. { wd+=s.wd; ht+=s.ht; return *this; }
  112. inline QSize &QSize::operator-=(const QSize &s)
  113. { wd-=s.wd; ht-=s.ht; return *this; }
  114. inline QSize &QSize::operator*=(qreal c)
  115. { wd = qRound(wd*c); ht = qRound(ht*c); return *this; }
  116. inline bool operator==(const QSize &s1, const QSize &s2)
  117. { return s1.wd == s2.wd && s1.ht == s2.ht; }
  118. inline bool operator!=(const QSize &s1, const QSize &s2)
  119. { return s1.wd != s2.wd || s1.ht != s2.ht; }
  120. inline const QSize operator+(const QSize & s1, const QSize & s2)
  121. { return QSize(s1.wd+s2.wd, s1.ht+s2.ht); }
  122. inline const QSize operator-(const QSize &s1, const QSize &s2)
  123. { return QSize(s1.wd-s2.wd, s1.ht-s2.ht); }
  124. inline const QSize operator*(const QSize &s, qreal c)
  125. { return QSize(qRound(s.wd*c), qRound(s.ht*c)); }
  126. inline const QSize operator*(qreal c, const QSize &s)
  127. { return QSize(qRound(s.wd*c), qRound(s.ht*c)); }
  128. inline QSize &QSize::operator/=(qreal c)
  129. {
  130.     Q_ASSERT(!qFuzzyCompare(c + 1, 1));
  131.     wd = qRound(wd/c); ht = qRound(ht/c);
  132.     return *this;
  133. }
  134. inline const QSize operator/(const QSize &s, qreal c)
  135. {
  136.     Q_ASSERT(!qFuzzyCompare(c + 1, 1));
  137.     return QSize(qRound(s.wd/c), qRound(s.ht/c));
  138. }
  139. inline QSize QSize::expandedTo(const QSize & otherSize) const
  140. {
  141.     return QSize(qMax(wd,otherSize.wd), qMax(ht,otherSize.ht));
  142. }
  143. inline QSize QSize::boundedTo(const QSize & otherSize) const
  144. {
  145.     return QSize(qMin(wd,otherSize.wd), qMin(ht,otherSize.ht));
  146. }
  147. #ifndef QT_NO_DEBUG_STREAM
  148. Q_CORE_EXPORT QDebug operator<<(QDebug, const QSize &);
  149. #endif
  150. class Q_CORE_EXPORT QSizeF
  151. {
  152. public:
  153.     QSizeF();
  154.     QSizeF(const QSize &sz);
  155.     QSizeF(qreal w, qreal h);
  156.     bool isNull() const;
  157.     bool isEmpty() const;
  158.     bool isValid() const;
  159.     qreal width() const;
  160.     qreal height() const;
  161.     void setWidth(qreal w);
  162.     void setHeight(qreal h);
  163.     void transpose();
  164.     void scale(qreal w, qreal h, Qt::AspectRatioMode mode);
  165.     void scale(const QSizeF &s, Qt::AspectRatioMode mode);
  166.     QSizeF expandedTo(const QSizeF &) const;
  167.     QSizeF boundedTo(const QSizeF &) const;
  168.     qreal &rwidth();
  169.     qreal &rheight();
  170.     QSizeF &operator+=(const QSizeF &);
  171.     QSizeF &operator-=(const QSizeF &);
  172.     QSizeF &operator*=(qreal c);
  173.     QSizeF &operator/=(qreal c);
  174.     friend inline bool operator==(const QSizeF &, const QSizeF &);
  175.     friend inline bool operator!=(const QSizeF &, const QSizeF &);
  176.     friend inline const QSizeF operator+(const QSizeF &, const QSizeF &);
  177.     friend inline const QSizeF operator-(const QSizeF &, const QSizeF &);
  178.     friend inline const QSizeF operator*(const QSizeF &, qreal);
  179.     friend inline const QSizeF operator*(qreal, const QSizeF &);
  180.     friend inline const QSizeF operator/(const QSizeF &, qreal);
  181.     inline QSize toSize() const;
  182. private:
  183.     qreal wd;
  184.     qreal ht;
  185. };
  186. Q_DECLARE_TYPEINFO(QSizeF, Q_MOVABLE_TYPE);
  187. /*****************************************************************************
  188.   QSizeF stream functions
  189.  *****************************************************************************/
  190. Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, const QSizeF &);
  191. Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QSizeF &);
  192. /*****************************************************************************
  193.   QSizeF inline functions
  194.  *****************************************************************************/
  195. inline QSizeF::QSizeF()
  196. { wd = ht = -1.; }
  197. inline QSizeF::QSizeF(const QSize &sz)
  198.     : wd(sz.width()), ht(sz.height())
  199. {
  200. }
  201. inline QSizeF::QSizeF(qreal w, qreal h)
  202. { wd = w; ht = h; }
  203. inline bool QSizeF::isNull() const
  204. { return qIsNull(wd) && qIsNull(ht); }
  205. inline bool QSizeF::isEmpty() const
  206. { return wd <= 0. || ht <= 0.; }
  207. inline bool QSizeF::isValid() const
  208. { return wd >= 0. && ht >= 0.; }
  209. inline qreal QSizeF::width() const
  210. { return wd; }
  211. inline qreal QSizeF::height() const
  212. { return ht; }
  213. inline void QSizeF::setWidth(qreal w)
  214. { wd = w; }
  215. inline void QSizeF::setHeight(qreal h)
  216. { ht = h; }
  217. inline void QSizeF::scale(qreal w, qreal h, Qt::AspectRatioMode mode)
  218. { scale(QSizeF(w, h), mode); }
  219. inline qreal &QSizeF::rwidth()
  220. { return wd; }
  221. inline qreal &QSizeF::rheight()
  222. { return ht; }
  223. inline QSizeF &QSizeF::operator+=(const QSizeF &s)
  224. { wd += s.wd; ht += s.ht; return *this; }
  225. inline QSizeF &QSizeF::operator-=(const QSizeF &s)
  226. { wd -= s.wd; ht -= s.ht; return *this; }
  227. inline QSizeF &QSizeF::operator*=(qreal c)
  228. { wd *= c; ht *= c; return *this; }
  229. inline bool operator==(const QSizeF &s1, const QSizeF &s2)
  230. { return qFuzzyCompare(s1.wd, s2.wd) && qFuzzyCompare(s1.ht, s2.ht); }
  231. inline bool operator!=(const QSizeF &s1, const QSizeF &s2)
  232. { return !qFuzzyCompare(s1.wd, s2.wd) || !qFuzzyCompare(s1.ht, s2.ht); }
  233. inline const QSizeF operator+(const QSizeF & s1, const QSizeF & s2)
  234. { return QSizeF(s1.wd+s2.wd, s1.ht+s2.ht); }
  235. inline const QSizeF operator-(const QSizeF &s1, const QSizeF &s2)
  236. { return QSizeF(s1.wd-s2.wd, s1.ht-s2.ht); }
  237. inline const QSizeF operator*(const QSizeF &s, qreal c)
  238. { return QSizeF(s.wd*c, s.ht*c); }
  239. inline const QSizeF operator*(qreal c, const QSizeF &s)
  240. { return QSizeF(s.wd*c, s.ht*c); }
  241. inline QSizeF &QSizeF::operator/=(qreal c)
  242. {
  243.     Q_ASSERT(!qFuzzyCompare(c + 1, 1));
  244.     wd = wd/c; ht = ht/c;
  245.     return *this;
  246. }
  247. inline const QSizeF operator/(const QSizeF &s, qreal c)
  248. {
  249.     Q_ASSERT(!qFuzzyCompare(c + 1, 1));
  250.     return QSizeF(s.wd/c, s.ht/c);
  251. }
  252. inline QSizeF QSizeF::expandedTo(const QSizeF & otherSize) const
  253. {
  254.     return QSizeF(qMax(wd,otherSize.wd), qMax(ht,otherSize.ht));
  255. }
  256. inline QSizeF QSizeF::boundedTo(const QSizeF & otherSize) const
  257. {
  258.     return QSizeF(qMin(wd,otherSize.wd), qMin(ht,otherSize.ht));
  259. }
  260. inline QSize QSizeF::toSize() const
  261. {
  262.     return QSize(qRound(wd), qRound(ht));
  263. }
  264. #ifndef QT_NO_DEBUG_STREAM
  265. Q_CORE_EXPORT QDebug operator<<(QDebug, const QSizeF &);
  266. #endif
  267. QT_END_NAMESPACE
  268. QT_END_HEADER
  269. #endif // QSIZE_H