114 lines
2.3 KiB
C++
114 lines
2.3 KiB
C++
#include <lib/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()));
|
|
}
|