120 lines
2.4 KiB
C++
120 lines
2.4 KiB
C++
|
#include "qtmaterialripple.h"
|
||
|
#include "lib/qtmaterialrippleoverlay.h"
|
||
|
|
||
|
/*!
|
||
|
* \class QtMaterialRipple
|
||
|
* \internal
|
||
|
*/
|
||
|
|
||
|
QtMaterialRipple::QtMaterialRipple(const QPoint ¢er, QObject *parent)
|
||
|
: QParallelAnimationGroup(parent),
|
||
|
m_overlay(0),
|
||
|
m_radiusAnimation(animate("radius")),
|
||
|
m_opacityAnimation(animate("opacity")),
|
||
|
m_radius(0),
|
||
|
m_opacity(0),
|
||
|
m_center(center)
|
||
|
{
|
||
|
init();
|
||
|
}
|
||
|
|
||
|
QtMaterialRipple::QtMaterialRipple(const QPoint ¢er,
|
||
|
QtMaterialRippleOverlay *overlay,
|
||
|
QObject *parent)
|
||
|
: QParallelAnimationGroup(parent),
|
||
|
m_overlay(overlay),
|
||
|
m_radiusAnimation(animate("radius")),
|
||
|
m_opacityAnimation(animate("opacity")),
|
||
|
m_radius(0),
|
||
|
m_opacity(0),
|
||
|
m_center(center)
|
||
|
{
|
||
|
init();
|
||
|
}
|
||
|
|
||
|
QtMaterialRipple::~QtMaterialRipple()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void QtMaterialRipple::setRadius(qreal radius)
|
||
|
{
|
||
|
Q_ASSERT(m_overlay);
|
||
|
|
||
|
if (m_radius == radius) {
|
||
|
return;
|
||
|
}
|
||
|
m_radius = radius;
|
||
|
m_overlay->update();
|
||
|
}
|
||
|
|
||
|
void QtMaterialRipple::setOpacity(qreal opacity)
|
||
|
{
|
||
|
Q_ASSERT(m_overlay);
|
||
|
|
||
|
if (m_opacity == opacity) {
|
||
|
return;
|
||
|
}
|
||
|
m_opacity = opacity;
|
||
|
m_overlay->update();
|
||
|
}
|
||
|
|
||
|
void QtMaterialRipple::setColor(const QColor &color)
|
||
|
{
|
||
|
if (m_brush.color() == color) {
|
||
|
return;
|
||
|
}
|
||
|
m_brush.setColor(color);
|
||
|
|
||
|
if (m_overlay) {
|
||
|
m_overlay->update();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void QtMaterialRipple::setBrush(const QBrush &brush)
|
||
|
{
|
||
|
m_brush = brush;
|
||
|
|
||
|
if (m_overlay) {
|
||
|
m_overlay->update();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void QtMaterialRipple::destroy()
|
||
|
{
|
||
|
Q_ASSERT(m_overlay);
|
||
|
|
||
|
m_overlay->removeRipple(this);
|
||
|
}
|
||
|
|
||
|
/*!
|
||
|
* \internal
|
||
|
*/
|
||
|
QPropertyAnimation *QtMaterialRipple::animate(const QByteArray &property,
|
||
|
const QEasingCurve &easing,
|
||
|
int duration)
|
||
|
{
|
||
|
QPropertyAnimation *animation = new QPropertyAnimation;
|
||
|
animation->setTargetObject(this);
|
||
|
animation->setPropertyName(property);
|
||
|
animation->setEasingCurve(easing);
|
||
|
animation->setDuration(duration);
|
||
|
addAnimation(animation);
|
||
|
return animation;
|
||
|
}
|
||
|
|
||
|
/*!
|
||
|
* \internal
|
||
|
*/
|
||
|
void QtMaterialRipple::init()
|
||
|
{
|
||
|
setOpacityStartValue(0.5);
|
||
|
setOpacityEndValue(0);
|
||
|
setRadiusStartValue(0);
|
||
|
setRadiusEndValue(300);
|
||
|
|
||
|
m_brush.setColor(Qt::black);
|
||
|
m_brush.setStyle(Qt::SolidPattern);
|
||
|
|
||
|
connect(this, SIGNAL(finished()), this, SLOT(destroy()));
|
||
|
}
|