/**************************************************************************** ** ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the QtGui module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial Usage ** Licensees holding valid Qt Commercial licenses may use this file in ** accordance with the Qt Commercial License Agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and Nokia. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional ** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3.0 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU General Public License version 3.0 requirements will be ** met: http://www.gnu.org/copyleft/gpl.html. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef QBRUSH_H #define QBRUSH_H #include <QtCore/qpair.h> #include <QtCore/qpoint.h> #include <QtCore/qvector.h> #include <QtCore/qscopedpointer.h> #include <QtGui/qcolor.h> #include <QtGui/qmatrix.h> #include <QtGui/qtransform.h> #include <QtGui/qimage.h> #include <QtGui/qpixmap.h> #if defined(Q_OS_VXWORKS) # if defined(m_data) # undef m_data # endif # if defined(m_type) # undef m_type # endif #endif QT_BEGIN_HEADER QT_BEGIN_NAMESPACE QT_MODULE(Gui) struct QBrushData; class QPixmap; class QGradient; class QVariant; struct QBrushDataPointerDeleter; class Q_GUI_EXPORT QBrush { public: QBrush(); QBrush(Qt::BrushStyle bs); QBrush(const QColor &color, Qt::BrushStyle bs=Qt::SolidPattern); QBrush(Qt::GlobalColor color, Qt::BrushStyle bs=Qt::SolidPattern); QBrush(const QColor &color, const QPixmap &pixmap); QBrush(Qt::GlobalColor color, const QPixmap &pixmap); QBrush(const QPixmap &pixmap); QBrush(const QImage &image); QBrush(const QBrush &brush); QBrush(const QGradient &gradient); ~QBrush(); QBrush &operator=(const QBrush &brush); operator QVariant() const; inline Qt::BrushStyle style() const; void setStyle(Qt::BrushStyle); inline const QMatrix &matrix() const; void setMatrix(const QMatrix &mat); inline QTransform transform() const; void setTransform(const QTransform &); QPixmap texture() const; void setTexture(const QPixmap &pixmap); QImage textureImage() const; void setTextureImage(const QImage &image); inline const QColor &color() const; void setColor(const QColor &color); inline void setColor(Qt::GlobalColor color); const QGradient *gradient() const; bool isOpaque() const; bool operator==(const QBrush &b) const; inline bool operator!=(const QBrush &b) const { return !(operator==(b)); } #ifdef QT3_SUPPORT inline QT3_SUPPORT operator const QColor&() const; QT3_SUPPORT QPixmap *pixmap() const; inline QT3_SUPPORT void setPixmap(const QPixmap &pixmap) { setTexture(pixmap); } #endif private: #if defined(Q_WS_X11) friend class QX11PaintEngine; #endif friend class QRasterPaintEngine; friend class QRasterPaintEnginePrivate; friend struct QSpanData; friend class QPainter; friend bool Q_GUI_EXPORT qHasPixmapTexture(const QBrush& brush); void detach(Qt::BrushStyle newStyle); void init(const QColor &color, Qt::BrushStyle bs); QScopedPointer<QBrushData, QBrushDataPointerDeleter> d; void cleanUp(QBrushData *x); public: inline bool isDetached() const; typedef QScopedPointer<QBrushData, QBrushDataPointerDeleter> DataPtr; inline DataPtr &data_ptr() { return d; } }; inline void QBrush::setColor(Qt::GlobalColor acolor) { setColor(QColor(acolor)); } Q_DECLARE_TYPEINFO(QBrush, Q_MOVABLE_TYPE); Q_DECLARE_SHARED(QBrush) /***************************************************************************** QBrush stream functions *****************************************************************************/ #ifndef QT_NO_DATASTREAM Q_GUI_EXPORT QDataStream &operator<<(QDataStream &, const QBrush &); Q_GUI_EXPORT QDataStream &operator>>(QDataStream &, QBrush &); #endif #ifndef QT_NO_DEBUG_STREAM Q_GUI_EXPORT QDebug operator<<(QDebug, const QBrush &); #endif struct QBrushData { QAtomicInt ref; Qt::BrushStyle style; QColor color; QTransform transform; }; inline Qt::BrushStyle QBrush::style() const { return d->style; } inline const QColor &QBrush::color() const { return d->color; } inline const QMatrix &QBrush::matrix() const { return d->transform.toAffine(); } inline QTransform QBrush::transform() const { return d->transform; } inline bool QBrush::isDetached() const { return d->ref == 1; } #ifdef QT3_SUPPORT inline QBrush::operator const QColor&() const { return d->color; } #endif /******************************************************************************* * QGradients */ class QGradientPrivate; typedef QPair<qreal, QColor> QGradientStop; typedef QVector<QGradientStop> QGradientStops; class Q_GUI_EXPORT QGradient { Q_GADGET Q_ENUMS(Type Spread CoordinateMode) public: enum Type { LinearGradient, RadialGradient, ConicalGradient, NoGradient }; enum Spread { PadSpread, ReflectSpread, RepeatSpread }; enum CoordinateMode { LogicalMode, StretchToDeviceMode, ObjectBoundingMode }; enum InterpolationMode { ColorInterpolation, ComponentInterpolation }; QGradient(); Type type() const { return m_type; } inline void setSpread(Spread spread); Spread spread() const { return m_spread; } void setColorAt(qreal pos, const QColor &color); void setStops(const QGradientStops &stops); QGradientStops stops() const; CoordinateMode coordinateMode() const; void setCoordinateMode(CoordinateMode mode); InterpolationMode interpolationMode() const; void setInterpolationMode(InterpolationMode mode); bool operator==(const QGradient &gradient) const; inline bool operator!=(const QGradient &other) const { return !operator==(other); } bool operator==(const QGradient &gradient); // ### Qt 5: remove private: friend class QLinearGradient; friend class QRadialGradient; friend class QConicalGradient; Type m_type; Spread m_spread; QGradientStops m_stops; union { struct { qreal x1, y1, x2, y2; } linear; struct { qreal cx, cy, fx, fy, radius; } radial; struct { qreal cx, cy, angle; } conical; } m_data; void *dummy; }; inline void QGradient::setSpread(Spread aspread) { m_spread = aspread; } class Q_GUI_EXPORT QLinearGradient : public QGradient { public: QLinearGradient(); QLinearGradient(const QPointF &start, const QPointF &finalStop); QLinearGradient(qreal xStart, qreal yStart, qreal xFinalStop, qreal yFinalStop); QPointF start() const; void setStart(const QPointF &start); inline void setStart(qreal x, qreal y) { setStart(QPointF(x, y)); } QPointF finalStop() const; void setFinalStop(const QPointF &stop); inline void setFinalStop(qreal x, qreal y) { setFinalStop(QPointF(x, y)); } }; class Q_GUI_EXPORT QRadialGradient : public QGradient { public: QRadialGradient(); QRadialGradient(const QPointF ¢er, qreal radius, const QPointF &focalPoint); QRadialGradient(qreal cx, qreal cy, qreal radius, qreal fx, qreal fy); QRadialGradient(const QPointF ¢er, qreal radius); QRadialGradient(qreal cx, qreal cy, qreal radius); QPointF center() const; void setCenter(const QPointF ¢er); inline void setCenter(qreal x, qreal y) { setCenter(QPointF(x, y)); } QPointF focalPoint() const; void setFocalPoint(const QPointF &focalPoint); inline void setFocalPoint(qreal x, qreal y) { setFocalPoint(QPointF(x, y)); } qreal radius() const; void setRadius(qreal radius); }; class Q_GUI_EXPORT QConicalGradient : public QGradient { public: QConicalGradient(); QConicalGradient(const QPointF ¢er, qreal startAngle); QConicalGradient(qreal cx, qreal cy, qreal startAngle); QPointF center() const; void setCenter(const QPointF ¢er); inline void setCenter(qreal x, qreal y) { setCenter(QPointF(x, y)); } qreal angle() const; void setAngle(qreal angle); }; QT_END_NAMESPACE QT_END_HEADER #endif // QBRUSH_H