qbrush.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 QtGui 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 QBRUSH_H
  38. #define QBRUSH_H
  39. #include <QtCore/qpair.h>
  40. #include <QtCore/qpoint.h>
  41. #include <QtCore/qvector.h>
  42. #include <QtGui/qcolor.h>
  43. #include <QtGui/qmatrix.h>
  44. #include <QtGui/qtransform.h>
  45. #include <QtGui/qimage.h>
  46. #include <QtGui/qpixmap.h>
  47. QT_BEGIN_HEADER
  48. QT_BEGIN_NAMESPACE
  49. QT_MODULE(Gui)
  50. struct QBrushData;
  51. class QPixmap;
  52. class QGradient;
  53. class QVariant;
  54. class Q_GUI_EXPORT QBrush
  55. {
  56. public:
  57.     QBrush();
  58.     QBrush(Qt::BrushStyle bs);
  59.     QBrush(const QColor &color, Qt::BrushStyle bs=Qt::SolidPattern);
  60.     QBrush(Qt::GlobalColor color, Qt::BrushStyle bs=Qt::SolidPattern);
  61.     QBrush(const QColor &color, const QPixmap &pixmap);
  62.     QBrush(Qt::GlobalColor color, const QPixmap &pixmap);
  63.     QBrush(const QPixmap &pixmap);
  64.     QBrush(const QImage &image);
  65.     QBrush(const QBrush &brush);
  66.     QBrush(const QGradient &gradient);
  67.     ~QBrush();
  68.     QBrush &operator=(const QBrush &brush);
  69.     operator QVariant() const;
  70.     inline Qt::BrushStyle style() const;
  71.     void setStyle(Qt::BrushStyle);
  72.     inline const QMatrix &matrix() const;
  73.     void setMatrix(const QMatrix &mat);
  74.     inline QTransform transform() const;
  75.     void setTransform(const QTransform &);
  76.     QPixmap texture() const;
  77.     void setTexture(const QPixmap &pixmap);
  78.     QImage textureImage() const;
  79.     void setTextureImage(const QImage &image);
  80.     inline const QColor &color() const;
  81.     void setColor(const QColor &color);
  82.     inline void setColor(Qt::GlobalColor color);
  83.     const QGradient *gradient() const;
  84.     bool isOpaque() const;
  85.     bool operator==(const QBrush &b) const;
  86.     inline bool operator!=(const QBrush &b) const { return !(operator==(b)); }
  87. #ifdef QT3_SUPPORT
  88.     inline QT3_SUPPORT operator const QColor&() const;
  89.     QT3_SUPPORT QPixmap *pixmap() const;
  90.     inline QT3_SUPPORT void setPixmap(const QPixmap &pixmap) { setTexture(pixmap); }
  91. #endif
  92. private:
  93. #if defined(Q_WS_X11)
  94.     friend class QX11PaintEngine;
  95. #endif
  96.     friend class QRasterPaintEngine;
  97.     friend class QRasterPaintEnginePrivate;
  98.     friend struct QSpanData;
  99.     friend class QPainter;
  100.     friend bool qHasPixmapTexture(const QBrush& brush);
  101.     void detach(Qt::BrushStyle newStyle);
  102.     void init(const QColor &color, Qt::BrushStyle bs);
  103.     QBrushData *d;
  104.     void cleanUp(QBrushData *x);
  105. public:
  106.     inline bool isDetached() const;
  107.     typedef QBrushData * DataPtr;
  108.     inline DataPtr &data_ptr() { return d; }
  109. };
  110. inline void QBrush::setColor(Qt::GlobalColor acolor)
  111. { setColor(QColor(acolor)); }
  112. Q_DECLARE_TYPEINFO(QBrush, Q_MOVABLE_TYPE);
  113. Q_DECLARE_SHARED(QBrush)
  114. /*****************************************************************************
  115.   QBrush stream functions
  116.  *****************************************************************************/
  117. #ifndef QT_NO_DATASTREAM
  118. Q_GUI_EXPORT QDataStream &operator<<(QDataStream &, const QBrush &);
  119. Q_GUI_EXPORT QDataStream &operator>>(QDataStream &, QBrush &);
  120. #endif
  121. #ifndef QT_NO_DEBUG_STREAM
  122. Q_GUI_EXPORT QDebug operator<<(QDebug, const QBrush &);
  123. #endif
  124. struct QBrushData
  125. {
  126.     QAtomicInt ref;
  127.     Qt::BrushStyle style;
  128.     QColor color;
  129.     QTransform transform;
  130.     QRect sourceRect;
  131.     uint hasTransform : 1;
  132. };
  133. inline Qt::BrushStyle QBrush::style() const { return d->style; }
  134. inline const QColor &QBrush::color() const { return d->color; }
  135. inline const QMatrix &QBrush::matrix() const { return d->transform.toAffine(); }
  136. inline QTransform QBrush::transform() const { return d->transform; }
  137. inline bool QBrush::isDetached() const { return d->ref == 1; }
  138. #ifdef QT3_SUPPORT
  139. inline QBrush::operator const QColor&() const { return d->color; }
  140. #endif
  141. /*******************************************************************************
  142.  * QGradients
  143.  */
  144. class QGradientPrivate;
  145. typedef QPair<qreal, QColor> QGradientStop;
  146. typedef QVector<QGradientStop> QGradientStops;
  147. class Q_GUI_EXPORT QGradient
  148. {
  149.     Q_GADGET
  150.     Q_ENUMS(Type Spread CoordinateMode)
  151. public:
  152.     enum Type {
  153.         LinearGradient,
  154.         RadialGradient,
  155.         ConicalGradient,
  156.         NoGradient
  157.     };
  158.     enum Spread {
  159.         PadSpread,
  160.         ReflectSpread,
  161.         RepeatSpread
  162.     };
  163.     enum CoordinateMode {
  164.         LogicalMode,
  165.         StretchToDeviceMode,
  166.         ObjectBoundingMode
  167.     };
  168.     QGradient();
  169.     Type type() const { return m_type; }
  170.     inline void setSpread(Spread spread);
  171.     Spread spread() const { return m_spread; }
  172.     void setColorAt(qreal pos, const QColor &color);
  173.     void setStops(const QGradientStops &stops);
  174.     QGradientStops stops() const;
  175.     CoordinateMode coordinateMode() const;
  176.     void setCoordinateMode(CoordinateMode mode);
  177.     bool operator==(const QGradient &gradient) const;
  178.     inline bool operator!=(const QGradient &other) const
  179.     { return !operator==(other); }
  180.     bool operator==(const QGradient &gradient); // ### Qt 5: remove
  181. private:
  182.     friend class QLinearGradient;
  183.     friend class QRadialGradient;
  184.     friend class QConicalGradient;
  185.     Type m_type;
  186.     Spread m_spread;
  187.     QGradientStops m_stops;
  188.     union {
  189.         struct {
  190.             qreal x1, y1, x2, y2;
  191.         } linear;
  192.         struct {
  193.             qreal cx, cy, fx, fy, radius;
  194.         } radial;
  195.         struct {
  196.             qreal cx, cy, angle;
  197.         } conical;
  198.     } m_data;
  199.     void *dummy;
  200. };
  201. inline void QGradient::setSpread(Spread aspread)
  202. { m_spread = aspread; }
  203. class Q_GUI_EXPORT QLinearGradient : public QGradient
  204. {
  205. public:
  206.     QLinearGradient();
  207.     QLinearGradient(const QPointF &start, const QPointF &finalStop);
  208.     QLinearGradient(qreal xStart, qreal yStart, qreal xFinalStop, qreal yFinalStop);
  209.     QPointF start() const;
  210.     void setStart(const QPointF &start);
  211.     inline void setStart(qreal x, qreal y) { setStart(QPointF(x, y)); }
  212.     QPointF finalStop() const;
  213.     void setFinalStop(const QPointF &stop);
  214.     inline void setFinalStop(qreal x, qreal y) { setFinalStop(QPointF(x, y)); }
  215. };
  216. class Q_GUI_EXPORT QRadialGradient : public QGradient
  217. {
  218. public:
  219.     QRadialGradient();
  220.     QRadialGradient(const QPointF &center, qreal radius, const QPointF &focalPoint);
  221.     QRadialGradient(qreal cx, qreal cy, qreal radius, qreal fx, qreal fy);
  222.     QRadialGradient(const QPointF &center, qreal radius);
  223.     QRadialGradient(qreal cx, qreal cy, qreal radius);
  224.     QPointF center() const;
  225.     void setCenter(const QPointF &center);
  226.     inline void setCenter(qreal x, qreal y) { setCenter(QPointF(x, y)); }
  227.     QPointF focalPoint() const;
  228.     void setFocalPoint(const QPointF &focalPoint);
  229.     inline void setFocalPoint(qreal x, qreal y) { setFocalPoint(QPointF(x, y)); }
  230.     qreal radius() const;
  231.     void setRadius(qreal radius);
  232. };
  233. class Q_GUI_EXPORT QConicalGradient : public QGradient
  234. {
  235. public:
  236.     QConicalGradient();
  237.     QConicalGradient(const QPointF &center, qreal startAngle);
  238.     QConicalGradient(qreal cx, qreal cy, qreal startAngle);
  239.     QPointF center() const;
  240.     void setCenter(const QPointF &center);
  241.     inline void setCenter(qreal x, qreal y) { setCenter(QPointF(x, y)); }
  242.     qreal angle() const;
  243.     void setAngle(qreal angle);
  244. };
  245. QT_END_NAMESPACE
  246. QT_END_HEADER
  247. #endif // QBRUSH_H