summary refs log tree commit diff
path: root/src/ui/RaisedButton.cpp
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2018-07-17 16:37:25 +0300
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2018-07-17 16:37:25 +0300
commit0e814da91c8e041897a4c3f7e6e9234bbc7c6f7a (patch)
tree21f655d30630fe77ba48d07e4b357e2b6c6a5730 /src/ui/RaisedButton.cpp
parentMerge pull request #372 from bebehei/notification (diff)
downloadnheko-0e814da91c8e041897a4c3f7e6e9234bbc7c6f7a.tar.xz
Move all files under src/
Diffstat (limited to 'src/ui/RaisedButton.cpp')
-rw-r--r--src/ui/RaisedButton.cpp89
1 files changed, 89 insertions, 0 deletions
diff --git a/src/ui/RaisedButton.cpp b/src/ui/RaisedButton.cpp
new file mode 100644

index 00000000..c519f84f --- /dev/null +++ b/src/ui/RaisedButton.cpp
@@ -0,0 +1,89 @@ +#include <QEventTransition> +#include <QPropertyAnimation> + +#include "RaisedButton.h" + +void +RaisedButton::init() +{ + shadow_state_machine_ = new QStateMachine(this); + normal_state_ = new QState; + pressed_state_ = new QState; + effect_ = new QGraphicsDropShadowEffect; + + effect_->setBlurRadius(7); + effect_->setOffset(QPointF(0, 2)); + effect_->setColor(QColor(0, 0, 0, 75)); + + setBackgroundMode(Qt::OpaqueMode); + setMinimumHeight(42); + setGraphicsEffect(effect_); + setBaseOpacity(0.3); + + shadow_state_machine_->addState(normal_state_); + shadow_state_machine_->addState(pressed_state_); + + normal_state_->assignProperty(effect_, "offset", QPointF(0, 2)); + normal_state_->assignProperty(effect_, "blurRadius", 7); + + pressed_state_->assignProperty(effect_, "offset", QPointF(0, 5)); + pressed_state_->assignProperty(effect_, "blurRadius", 29); + + QAbstractTransition *transition; + + transition = new QEventTransition(this, QEvent::MouseButtonPress); + transition->setTargetState(pressed_state_); + normal_state_->addTransition(transition); + + transition = new QEventTransition(this, QEvent::MouseButtonDblClick); + transition->setTargetState(pressed_state_); + normal_state_->addTransition(transition); + + transition = new QEventTransition(this, QEvent::MouseButtonRelease); + transition->setTargetState(normal_state_); + pressed_state_->addTransition(transition); + + QPropertyAnimation *animation; + + animation = new QPropertyAnimation(effect_, "offset", this); + animation->setDuration(100); + shadow_state_machine_->addDefaultAnimation(animation); + + animation = new QPropertyAnimation(effect_, "blurRadius", this); + animation->setDuration(100); + shadow_state_machine_->addDefaultAnimation(animation); + + shadow_state_machine_->setInitialState(normal_state_); + shadow_state_machine_->start(); +} + +RaisedButton::RaisedButton(QWidget *parent) + : FlatButton(parent) +{ + init(); +} + +RaisedButton::RaisedButton(const QString &text, QWidget *parent) + : FlatButton(parent) +{ + init(); + setText(text); +} + +RaisedButton::~RaisedButton() {} + +bool +RaisedButton::event(QEvent *event) +{ + if (QEvent::EnabledChange == event->type()) { + if (isEnabled()) { + shadow_state_machine_->start(); + effect_->setEnabled(true); + } else { + shadow_state_machine_->stop(); + effect_->setEnabled(false); + } + } + + return FlatButton::event(event); +}