- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files
- Directories
- Examples

- File List
- File Members

# qgraphicseffect.h

Go to the documentation of this file.

    00001 /****************************************************************************
    00002 **
    00003 ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    00004 ** All rights reserved.
    00005 ** Contact: Nokia Corporation (qt-info@nokia.com)
    00006 **
    00007 ** This file is part of the QtGui module of the Qt Toolkit.
    00008 **
    00009 ** $QT_BEGIN_LICENSE:LGPL$
    00010 ** Commercial Usage
    00011 ** Licensees holding valid Qt Commercial licenses may use this file in
    00012 ** accordance with the Qt Commercial License Agreement provided with the
    00013 ** Software or, alternatively, in accordance with the terms contained in
    00014 ** a written agreement between you and Nokia.
    00015 **
    00016 ** GNU Lesser General Public License Usage
    00017 ** Alternatively, this file may be used under the terms of the GNU Lesser
    00018 ** General Public License version 2.1 as published by the Free Software
    00019 ** Foundation and appearing in the file LICENSE.LGPL included in the
    00020 ** packaging of this file.  Please review the following information to
    00021 ** ensure the GNU Lesser General Public License version 2.1 requirements
    00022 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
    00023 **
    00024 ** In addition, as a special exception, Nokia gives you certain additional
    00025 ** rights.  These rights are described in the Nokia Qt LGPL Exception
    00026 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this module.
    00027 **
    00028 ** GNU General Public License Usage
    00029 ** Alternatively, this file may be used under the terms of the GNU
    00030 ** General Public License version 3.0 as published by the Free Software
    00031 ** Foundation and appearing in the file LICENSE.GPL included in the
    00032 ** packaging of this file.  Please review the following information to
    00033 ** ensure the GNU General Public License version 3.0 requirements will be
    00034 ** met: http://www.gnu.org/copyleft/gpl.html.
    00035 **
    00036 ** If you have questions regarding the use of this file, please contact
    00037 ** Nokia at qt-info@nokia.com.
    00038 ** $QT_END_LICENSE$
    00039 **
    00040 ****************************************************************************/
    00041
    00042 #ifndef QGRAPHICSEFFECT_H
    00043 #define QGRAPHICSEFFECT_H
    00044
    00045 #include <QtCore/qobject.h>
    00046 #include <QtCore/qpoint.h>
    00047 #include <QtCore/qrect.h>
    00048 #include <QtGui/qcolor.h>
    00049 #include <QtGui/qbrush.h>
    00050
    00051 #ifndef QT_NO_GRAPHICSEFFECT
    00052 QT_BEGIN_HEADER
    00053
    00054 QT_BEGIN_NAMESPACE
    00055
    00056 QT_MODULE(Gui)
    00057
    00058 class QGraphicsItem;
    00059 class QStyleOption;
    00060 class QPainter;
    00061 class QPixmap;
    00062
    00063 class QGraphicsEffectSource;
    00064
    00065 class QGraphicsEffectPrivate;
    00066 class Q_GUI_EXPORT QGraphicsEffect : public QObject
    00067 {
    00068     Q_OBJECT
    00069     Q_FLAGS(ChangeFlags)
    00070     Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged)
    00071 public:
    00072     enum ChangeFlag {
    00073         SourceAttached = 0x1,
    00074         SourceDetached = 0x2,
    00075         SourceBoundingRectChanged = 0x4,
    00076         SourceInvalidated = 0x8
    00077     };
    00078     Q_DECLARE_FLAGS(ChangeFlags, ChangeFlag)
    00079
    00080     enum PixmapPadMode {
    00081         NoPad,
    00082         PadToTransparentBorder,
    00083         PadToEffectiveBoundingRect
    00084     };
    00085
    00086     QGraphicsEffect(QObject *parent = 0);
    00087     virtual ~QGraphicsEffect();
    00088
    00089     virtual QRectF boundingRectFor(const QRectF &sourceRect) const;
    00090     QRectF boundingRect() const;
    00091
    00092     bool isEnabled() const;
    00093
    00094 public Q_SLOTS:
    00095     void setEnabled(bool enable);
    00096     void update();
    00097
    00098 Q_SIGNALS:
    00099     void enabledChanged(bool enabled);
    00100
    00101 protected:
    00102     QGraphicsEffect(QGraphicsEffectPrivate &d, QObject *parent = 0);
    00103     virtual void draw(QPainter *painter) = 0;
    00104     virtual void sourceChanged(ChangeFlags flags);
    00105     void updateBoundingRect();
    00106
    00107     bool sourceIsPixmap() const;
    00108     QRectF sourceBoundingRect(Qt::CoordinateSystem system = Qt::LogicalCoordinates) const;
    00109     void drawSource(QPainter *painter);
    00110     QPixmap sourcePixmap(Qt::CoordinateSystem system = Qt::LogicalCoordinates,
    00111                          QPoint *offset = 0,
    00112                          PixmapPadMode mode = PadToEffectiveBoundingRect) const;
    00113
    00114 private:
    00115     Q_DECLARE_PRIVATE(QGraphicsEffect)
    00116     Q_DISABLE_COPY(QGraphicsEffect)
    00117     friend class QGraphicsItem;
    00118     friend class QGraphicsItemPrivate;
    00119     friend class QGraphicsScenePrivate;
    00120     friend class QWidget;
    00121     friend class QWidgetPrivate;
    00122
    00123 public:
    00124     QGraphicsEffectSource *source() const; // internal
    00125
    00126 };
    00127 Q_DECLARE_OPERATORS_FOR_FLAGS(QGraphicsEffect::ChangeFlags)
    00128
    00129 class QGraphicsColorizeEffectPrivate;
    00130 class Q_GUI_EXPORT QGraphicsColorizeEffect: public QGraphicsEffect
    00131 {
    00132     Q_OBJECT
    00133     Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
    00134     Q_PROPERTY(qreal strength READ strength WRITE setStrength NOTIFY strengthChanged)
    00135 public:
    00136     QGraphicsColorizeEffect(QObject *parent = 0);
    00137     ~QGraphicsColorizeEffect();
    00138
    00139     QColor color() const;
    00140     qreal strength() const;
    00141
    00142 public Q_SLOTS:
    00143     void setColor(const QColor &c);
    00144     void setStrength(qreal strength);
    00145
    00146 Q_SIGNALS:
    00147     void colorChanged(const QColor &color);
    00148     void strengthChanged(qreal strength);
    00149
    00150 protected:
    00151     void draw(QPainter *painter);
    00152
    00153 private:
    00154     Q_DECLARE_PRIVATE(QGraphicsColorizeEffect)
    00155     Q_DISABLE_COPY(QGraphicsColorizeEffect)
    00156 };
    00157
    00158 class QGraphicsBlurEffectPrivate;
    00159 class Q_GUI_EXPORT QGraphicsBlurEffect: public QGraphicsEffect
    00160 {
    00161     Q_OBJECT
    00162     Q_FLAGS(BlurHint BlurHints)
    00163     Q_PROPERTY(qreal blurRadius READ blurRadius WRITE setBlurRadius NOTIFY blurRadiusChanged)
    00164     Q_PROPERTY(BlurHints blurHints READ blurHints WRITE setBlurHints NOTIFY blurHintsChanged)
    00165 public:
    00166     enum BlurHint {
    00167         PerformanceHint = 0x00,
    00168         QualityHint = 0x01,
    00169         AnimationHint = 0x02
    00170     };
    00171     Q_DECLARE_FLAGS(BlurHints, BlurHint)
    00172
    00173     QGraphicsBlurEffect(QObject *parent = 0);
    00174     ~QGraphicsBlurEffect();
    00175
    00176     QRectF boundingRectFor(const QRectF &rect) const;
    00177     qreal blurRadius() const;
    00178     BlurHints blurHints() const;
    00179
    00180 public Q_SLOTS:
    00181     void setBlurRadius(qreal blurRadius);
    00182     void setBlurHints(BlurHints hints);
    00183
    00184 Q_SIGNALS:
    00185     void blurRadiusChanged(qreal blurRadius);
    00186     void blurHintsChanged(BlurHints hints);
    00187
    00188 protected:
    00189     void draw(QPainter *painter);
    00190
    00191 private:
    00192     Q_DECLARE_PRIVATE(QGraphicsBlurEffect)
    00193     Q_DISABLE_COPY(QGraphicsBlurEffect)
    00194 };
    00195
    00196 Q_DECLARE_OPERATORS_FOR_FLAGS(QGraphicsBlurEffect::BlurHints)
    00197
    00198 class QGraphicsDropShadowEffectPrivate;
    00199 class Q_GUI_EXPORT QGraphicsDropShadowEffect: public QGraphicsEffect
    00200 {
    00201     Q_OBJECT
    00202     Q_PROPERTY(QPointF offset READ offset WRITE setOffset NOTIFY offsetChanged)
    00203     Q_PROPERTY(qreal xOffset READ xOffset WRITE setXOffset NOTIFY offsetChanged)
    00204     Q_PROPERTY(qreal yOffset READ yOffset WRITE setYOffset NOTIFY offsetChanged)
    00205     Q_PROPERTY(qreal blurRadius READ blurRadius WRITE setBlurRadius NOTIFY blurRadiusChanged)
    00206     Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
    00207 public:
    00208     QGraphicsDropShadowEffect(QObject *parent = 0);
    00209     ~QGraphicsDropShadowEffect();
    00210
    00211     QRectF boundingRectFor(const QRectF &rect) const;
    00212     QPointF offset() const;
    00213
    00214     inline qreal xOffset() const
    00215     { return offset().x(); }
    00216
    00217     inline qreal yOffset() const
    00218     { return offset().y(); }
    00219
    00220     qreal blurRadius() const;
    00221     QColor color() const;
    00222
    00223 public Q_SLOTS:
    00224     void setOffset(const QPointF &ofs);
    00225
    00226     inline void setOffset(qreal dx, qreal dy)
    00227     { setOffset(QPointF(dx, dy)); }
    00228
    00229     inline void setOffset(qreal d)
    00230     { setOffset(QPointF(d, d)); }
    00231
    00232     inline void setXOffset(qreal dx)
    00233     { setOffset(QPointF(dx, yOffset())); }
    00234
    00235     inline void setYOffset(qreal dy)
    00236     { setOffset(QPointF(xOffset(), dy)); }
    00237
    00238     void setBlurRadius(qreal blurRadius);
    00239     void setColor(const QColor &color);
    00240
    00241 Q_SIGNALS:
    00242     void offsetChanged(const QPointF &offset);
    00243     void blurRadiusChanged(qreal blurRadius);
    00244     void colorChanged(const QColor &color);
    00245
    00246 protected:
    00247     void draw(QPainter *painter);
    00248
    00249 private:
    00250     Q_DECLARE_PRIVATE(QGraphicsDropShadowEffect)
    00251     Q_DISABLE_COPY(QGraphicsDropShadowEffect)
    00252 };
    00253
    00254 class QGraphicsOpacityEffectPrivate;
    00255 class Q_GUI_EXPORT QGraphicsOpacityEffect: public QGraphicsEffect
    00256 {
    00257     Q_OBJECT
    00258     Q_PROPERTY(qreal opacity READ opacity WRITE setOpacity NOTIFY opacityChanged)
    00259     Q_PROPERTY(QBrush opacityMask READ opacityMask WRITE setOpacityMask NOTIFY opacityMaskChanged)
    00260 public:
    00261     QGraphicsOpacityEffect(QObject *parent = 0);
    00262     ~QGraphicsOpacityEffect();
    00263
    00264     qreal opacity() const;
    00265     QBrush opacityMask() const;
    00266
    00267 public Q_SLOTS:
    00268     void setOpacity(qreal opacity);
    00269     void setOpacityMask(const QBrush &mask);
    00270
    00271 Q_SIGNALS:
    00272     void opacityChanged(qreal opacity);
    00273     void opacityMaskChanged(const QBrush &mask);
    00274
    00275 protected:
    00276     void draw(QPainter *painter);
    00277
    00278 private:
    00279     Q_DECLARE_PRIVATE(QGraphicsOpacityEffect)
    00280     Q_DISABLE_COPY(QGraphicsOpacityEffect)
    00281 };
    00282
    00283 QT_END_NAMESPACE
    00284
    00285 QT_END_HEADER
    00286 #endif //QT_NO_GRAPHICSEFFECT
    00287
    00288 #endif // QGRAPHICSEFFECT_H
    00289