qt-material-widgets/lib/ripple.h

65 lines
1.8 KiB
C
Raw Normal View History

2016-03-18 14:36:02 +00:00
#ifndef RIPPLE_H
#define RIPPLE_H
#include <QObject>
#include <QPoint>
#include <QParallelAnimationGroup>
#include <QPropertyAnimation>
2016-05-14 18:32:36 +00:00
#include <QBrush>
2016-03-18 14:36:02 +00:00
class Ripple : public QObject
{
Q_OBJECT
Q_PROPERTY(qreal radius WRITE setRadius READ radius)
Q_PROPERTY(qreal opacity WRITE setOpacity READ opacity)
public:
explicit Ripple(const QPoint &center, QObject *parent = 0);
~Ripple();
void setRadius(qreal radius);
2016-03-18 14:36:02 +00:00
inline qreal radius() const { return _radius; }
void setOpacity(qreal opacity);
2016-03-18 14:36:02 +00:00
inline qreal opacity() const { return _opacity; }
2016-05-14 18:32:36 +00:00
void setColor(const QColor &color);
inline QColor color() const { return _brush.color(); }
inline void setBrush(const QBrush &brush) { _brush = brush; }
inline QBrush brush() const { return _brush; }
2016-03-18 14:36:02 +00:00
inline const QPoint &center() const { return _center; }
inline void setDuration(int duration)
{
_radiusAnimation->setDuration(duration);
_opacityAnimation->setDuration(duration);
}
inline void setOpacityStartValue(qreal value) { _opacityAnimation->setStartValue(value); }
inline void setOpacityEndValue(qreal value) { _opacityAnimation->setEndValue(value); }
inline void setRadiusStartValue(qreal value) { _radiusAnimation->setStartValue(value); }
inline void setRadiusEndValue(qreal value) { _radiusAnimation->setEndValue(value); }
inline void startAnimation() { _group.start(); }
signals:
2016-05-14 09:10:30 +00:00
void changed();
2016-03-18 14:36:02 +00:00
void finished();
private:
QPropertyAnimation *animate(const QByteArray &property);
QParallelAnimationGroup _group;
QPropertyAnimation *const _radiusAnimation;
QPropertyAnimation *const _opacityAnimation;
qreal _radius;
qreal _opacity;
QPoint _center;
2016-05-14 18:32:36 +00:00
QBrush _brush;
2016-03-18 14:36:02 +00:00
};
#endif // RIPPLE_H