tweak menu animation

This commit is contained in:
laserpants 2016-04-28 03:48:08 +03:00
parent 1395f1c1eb
commit 15c970ff51
2 changed files with 16 additions and 10 deletions

View File

@ -32,11 +32,11 @@ IconMenu::IconMenu(const QIcon &icon, QWidget *parent)
_animation->setPropertyName("progress"); _animation->setPropertyName("progress");
_animation->setTargetObject(this); _animation->setTargetObject(this);
_animation->setDuration(270); _animation->setDuration(200);
_animation->setStartValue(1); _animation->setStartValue(1);
_animation->setEndValue(0); _animation->setEndValue(0);
_animation->setEasingCurve(QEasingCurve::OutCubic); _animation->setEasingCurve(QEasingCurve::InCurve);
_menu->hide(); _menu->hide();
@ -108,7 +108,7 @@ void IconMenu::animationFinished()
bool IconMenu::eventFilter(QObject *obj, QEvent *event) bool IconMenu::eventFilter(QObject *obj, QEvent *event)
{ {
if (QEvent::MouseButtonRelease == event->type() && _menuOverlay == obj) if (QEvent::MouseButtonRelease == event->type() && _menuVisible && _menuOverlay == obj)
toggleMenu(); toggleMenu();
return IconButton::eventFilter(obj, event); return IconButton::eventFilter(obj, event);
} }
@ -130,5 +130,11 @@ void IconMenu::updateOverlayGeometry()
{ {
const QPoint pos = _menuPos; const QPoint pos = _menuPos;
const QSize size = _menu->layout()->sizeHint(); const QSize size = _menu->layout()->sizeHint();
_menu->setGeometry(QRect(pos, size * _progress)); if (QAbstractAnimation::Running == _animation->state()) {
const QSize menuSize = size*(_progress*0.4 + 0.6);
_menu->setGeometry(QRect(pos, menuSize));
_menu->layout()->setGeometry(QRect(0, 0, menuSize.width(), size.height()*_progress));
} else {
_menu->setGeometry(QRect(pos, size));
}
} }

View File

@ -47,13 +47,13 @@ protected:
void updateOverlayGeometry(); void updateOverlayGeometry();
private: private:
MenuOverlay *const _menuOverlay; MenuOverlay *const _menuOverlay;
Menu *const _menu; Menu *const _menu;
QPropertyAnimation *const _animation; QPropertyAnimation *const _animation;
//ScaleEffect *const _effect; //ScaleEffect *const _effect;
QPoint _menuPos; QPoint _menuPos;
bool _menuVisible; bool _menuVisible;
qreal _progress; qreal _progress;
}; };
#endif // ICONMENU_H #endif // ICONMENU_H