/**************************************************************************** | |
** | |
** Copyright (C) 2011 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$ | |
** GNU Lesser General Public License Usage | |
** 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. | |
** | |
** Other Usage | |
** Alternatively, this file may be used in accordance with the terms and | |
** conditions contained in a signed written agreement between you and Nokia. | |
** | |
** | |
** | |
** | |
** | |
** $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 |