// qgraphicseffect.sip generated by MetaSIP on Sun Nov  9 16:48:00 2014
//
// This file is part of the QtGui Python extension module.
//
// Copyright (c) 2014 Riverbank Computing Limited <info@riverbankcomputing.com>
// 
// This file is part of PyQt.
// 
// This file may be used under the terms of the GNU General Public
// License versions 2.0 or 3.0 as published by the Free Software
// Foundation and appearing in the files LICENSE.GPL2 and LICENSE.GPL3
// included in the packaging of this file.  Alternatively you may (at
// your option) use any later version of the GNU General Public
// License if such license has been publicly approved by Riverbank
// Computing Limited (or its successors, if any) and the KDE Free Qt
// Foundation. In addition, as a special exception, Riverbank gives you
// certain additional rights. These rights are described in the Riverbank
// GPL Exception version 1.1, which can be found in the file
// GPL_EXCEPTION.txt in this package.
// 
// If you are unsure which license is appropriate for your use, please
// contact the sales department at sales@riverbankcomputing.com.
// 
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.


%If (Qt_4_6_0 -)
%ModuleCode
#include <qgraphicseffect.h>
%End
%End

%If (Qt_4_6_0 -)

class QGraphicsEffect : QObject
{
%TypeHeaderCode
#include <qgraphicseffect.h>
%End

public:
    enum ChangeFlag
    {
        SourceAttached,
        SourceDetached,
        SourceBoundingRectChanged,
        SourceInvalidated,
    };

    typedef QFlags<QGraphicsEffect::ChangeFlag> ChangeFlags;

    enum PixmapPadMode
    {
        NoPad,
        PadToTransparentBorder,
        PadToEffectiveBoundingRect,
    };

    QGraphicsEffect(QObject *parent /TransferThis/ = 0);
    virtual ~QGraphicsEffect();
    virtual QRectF boundingRectFor(const QRectF &sourceRect) const;
    QRectF boundingRect() const;
    bool isEnabled() const;

public slots:
    void setEnabled(bool enable);
    void update();

signals:
    void enabledChanged(bool enabled);

protected:
    virtual void draw(QPainter *painter) = 0;
    virtual void sourceChanged(QFlags<QGraphicsEffect::ChangeFlag> flags);
    void updateBoundingRect();
    bool sourceIsPixmap() const;
    QRectF sourceBoundingRect(Qt::CoordinateSystem system = Qt::LogicalCoordinates) const;
    void drawSource(QPainter *painter);
    QPixmap sourcePixmap(Qt::CoordinateSystem system = Qt::LogicalCoordinates, QPoint *offset /Out/ = 0, QGraphicsEffect::PixmapPadMode mode = QGraphicsEffect::PadToEffectiveBoundingRect) const;

private:
    QGraphicsEffect(const QGraphicsEffect &);
};

%End
%If (Qt_4_6_0 -)
QFlags<QGraphicsEffect::ChangeFlag> operator|(QGraphicsEffect::ChangeFlag f1, QFlags<QGraphicsEffect::ChangeFlag> f2);
%End
%If (Qt_4_6_0 -)

class QGraphicsColorizeEffect : QGraphicsEffect
{
%TypeHeaderCode
#include <qgraphicseffect.h>
%End

public:
    QGraphicsColorizeEffect(QObject *parent /TransferThis/ = 0);
    virtual ~QGraphicsColorizeEffect();
    QColor color() const;
    qreal strength() const;

public slots:
    void setColor(const QColor &c);
    void setStrength(qreal strength);

signals:
    void colorChanged(const QColor &color);
    void strengthChanged(qreal strength);

protected:
    virtual void draw(QPainter *painter);

private:
    QGraphicsColorizeEffect(const QGraphicsColorizeEffect &);
};

%End
%If (Qt_4_6_0 -)

class QGraphicsBlurEffect : QGraphicsEffect
{
%TypeHeaderCode
#include <qgraphicseffect.h>
%End

public:
    enum BlurHint
    {
        PerformanceHint,
        QualityHint,
        AnimationHint,
    };

    typedef QFlags<QGraphicsBlurEffect::BlurHint> BlurHints;
    QGraphicsBlurEffect(QObject *parent /TransferThis/ = 0);
    virtual ~QGraphicsBlurEffect();
    virtual QRectF boundingRectFor(const QRectF &rect) const;
    qreal blurRadius() const;
    QFlags<QGraphicsBlurEffect::BlurHint> blurHints() const;

public slots:
    void setBlurRadius(qreal blurRadius);
    void setBlurHints(QFlags<QGraphicsBlurEffect::BlurHint> hints);

signals:
    void blurRadiusChanged(qreal blurRadius);
    void blurHintsChanged(QFlags<QGraphicsBlurEffect::BlurHint> hints);

protected:
    virtual void draw(QPainter *painter);

private:
    QGraphicsBlurEffect(const QGraphicsBlurEffect &);
};

%End
%If (Qt_4_6_0 -)
QFlags<QGraphicsBlurEffect::BlurHint> operator|(QGraphicsBlurEffect::BlurHint f1, QFlags<QGraphicsBlurEffect::BlurHint> f2);
%End
%If (Qt_4_6_0 -)

class QGraphicsDropShadowEffect : QGraphicsEffect
{
%TypeHeaderCode
#include <qgraphicseffect.h>
%End

public:
    QGraphicsDropShadowEffect(QObject *parent /TransferThis/ = 0);
    virtual ~QGraphicsDropShadowEffect();
    virtual QRectF boundingRectFor(const QRectF &rect) const;
    QPointF offset() const;
    qreal xOffset() const;
    qreal yOffset() const;
    qreal blurRadius() const;
    QColor color() const;

public slots:
    void setOffset(const QPointF &ofs);
    void setOffset(qreal dx, qreal dy);
    void setOffset(qreal d);
    void setXOffset(qreal dx);
    void setYOffset(qreal dy);
    void setBlurRadius(qreal blurRadius);
    void setColor(const QColor &color);

signals:
    void offsetChanged(const QPointF &offset);
    void blurRadiusChanged(qreal blurRadius);
    void colorChanged(const QColor &color);

protected:
    virtual void draw(QPainter *painter);

private:
    QGraphicsDropShadowEffect(const QGraphicsDropShadowEffect &);
};

%End
%If (Qt_4_6_0 -)

class QGraphicsOpacityEffect : QGraphicsEffect
{
%TypeHeaderCode
#include <qgraphicseffect.h>
%End

public:
    QGraphicsOpacityEffect(QObject *parent /TransferThis/ = 0);
    virtual ~QGraphicsOpacityEffect();
    qreal opacity() const;
    QBrush opacityMask() const;

public slots:
    void setOpacity(qreal opacity);
    void setOpacityMask(const QBrush &mask);

signals:
    void opacityChanged(qreal opacity);
    void opacityMaskChanged(const QBrush &mask);

protected:
    virtual void draw(QPainter *painter);

private:
    QGraphicsOpacityEffect(const QGraphicsOpacityEffect &);
};

%End
