62 lines
1.7 KiB
C++
62 lines
1.7 KiB
C++
#include "qtmaterialdrawer_internal.h"
|
|
#include <QState>
|
|
#include <QSignalTransition>
|
|
#include <QPropertyAnimation>
|
|
#include "qtmaterialdrawer.h"
|
|
|
|
QtMaterialDrawerStateMachine::QtMaterialDrawerStateMachine(QtMaterialDrawer *drawer)
|
|
: QStateMachine(drawer),
|
|
m_drawer(drawer),
|
|
m_openState(new QState),
|
|
m_closedState(new QState),
|
|
m_offset(0)
|
|
{
|
|
addState(m_openState);
|
|
addState(m_closedState);
|
|
|
|
setInitialState(m_closedState);
|
|
|
|
QSignalTransition *transition;
|
|
QPropertyAnimation *animation;
|
|
|
|
transition = new QSignalTransition(this, SIGNAL(enterOpenedState()));
|
|
transition->setTargetState(m_openState);
|
|
m_closedState->addTransition(transition);
|
|
|
|
animation = new QPropertyAnimation(this, "offset", this);
|
|
animation->setDuration(220);
|
|
animation->setEasingCurve(QEasingCurve::OutCirc);
|
|
transition->addAnimation(animation);
|
|
|
|
transition = new QSignalTransition(this, SIGNAL(enterClosedState()));
|
|
transition->setTargetState(m_closedState);
|
|
m_openState->addTransition(transition);
|
|
|
|
animation = new QPropertyAnimation(this, "offset", this);
|
|
animation->setDuration(220);
|
|
animation->setEasingCurve(QEasingCurve::InCirc);
|
|
transition->addAnimation(animation);
|
|
|
|
updatePropertyAssignments();
|
|
}
|
|
|
|
QtMaterialDrawerStateMachine::~QtMaterialDrawerStateMachine()
|
|
{
|
|
}
|
|
|
|
void QtMaterialDrawerStateMachine::setOffset(int offset)
|
|
{
|
|
m_offset = offset;
|
|
|
|
QWidget *widget = m_drawer->parentWidget();
|
|
if (widget) {
|
|
m_drawer->setGeometry(widget->rect().translated(offset, 0));
|
|
}
|
|
}
|
|
|
|
void QtMaterialDrawerStateMachine::updatePropertyAssignments()
|
|
{
|
|
m_closedState->assignProperty(this, "offset", -(m_drawer->width()+32));
|
|
m_openState->assignProperty(this, "offset", 0);
|
|
}
|