mirror of
https://github.com/Nheko-Reborn/nheko.git
synced 2024-11-22 11:00:48 +03:00
Add geometry animation on emoji picker
This commit is contained in:
parent
992af5611b
commit
c470e49aa9
2 changed files with 28 additions and 9 deletions
|
@ -20,6 +20,7 @@
|
|||
|
||||
#include <QFrame>
|
||||
#include <QGraphicsOpacityEffect>
|
||||
#include <QParallelAnimationGroup>
|
||||
#include <QPropertyAnimation>
|
||||
#include <QScrollArea>
|
||||
#include <QWidget>
|
||||
|
@ -47,13 +48,22 @@ protected:
|
|||
private:
|
||||
void showEmojiCategory(const EmojiCategory *category);
|
||||
|
||||
QPropertyAnimation *animation_;
|
||||
QPropertyAnimation *opacity_anim_;
|
||||
QPropertyAnimation *size_anim_;
|
||||
QGraphicsOpacityEffect *opacity_;
|
||||
QParallelAnimationGroup *animation_;
|
||||
|
||||
EmojiProvider emoji_provider_;
|
||||
|
||||
QScrollArea *scroll_area_;
|
||||
|
||||
// Panel dimensions.
|
||||
const int WIDTH = 370;
|
||||
const int HEIGHT = 350;
|
||||
|
||||
const int ANIMATION_DURATION = 100;
|
||||
const int ANIMATION_OFFSET = 50;
|
||||
|
||||
const int category_icon_size_ = 20;
|
||||
};
|
||||
|
||||
|
|
|
@ -44,8 +44,7 @@ EmojiPanel::EmojiPanel(QWidget *parent)
|
|||
|
||||
// TODO: Make it MainWindow aware
|
||||
auto main_frame_ = new QFrame(this);
|
||||
main_frame_->setMinimumSize(370, 350);
|
||||
main_frame_->setMaximumSize(370, 350);
|
||||
main_frame_->setMaximumSize(WIDTH, HEIGHT);
|
||||
|
||||
auto top_layout = new QVBoxLayout(this);
|
||||
top_layout->addWidget(main_frame_);
|
||||
|
@ -150,16 +149,26 @@ EmojiPanel::EmojiPanel(QWidget *parent)
|
|||
|
||||
setLayout(top_layout);
|
||||
|
||||
// TODO: Add parallel animation with geometry
|
||||
opacity_ = new QGraphicsOpacityEffect(this);
|
||||
opacity_->setOpacity(1.0);
|
||||
|
||||
setGraphicsEffect(opacity_);
|
||||
|
||||
animation_ = new QPropertyAnimation(opacity_, "opacity", this);
|
||||
animation_->setDuration(180);
|
||||
animation_->setStartValue(1.0);
|
||||
animation_->setEndValue(0.0);
|
||||
opacity_anim_ = new QPropertyAnimation(opacity_, "opacity", this);
|
||||
opacity_anim_->setDuration(ANIMATION_DURATION);
|
||||
opacity_anim_->setStartValue(1);
|
||||
opacity_anim_->setEndValue(0);
|
||||
|
||||
size_anim_ = new QPropertyAnimation(this);
|
||||
size_anim_->setTargetObject(main_frame_);
|
||||
size_anim_->setPropertyName("geometry");
|
||||
size_anim_->setDuration(ANIMATION_DURATION);
|
||||
size_anim_->setStartValue(QRect(0, 0, WIDTH, HEIGHT));
|
||||
size_anim_->setEndValue(QRect(ANIMATION_OFFSET, ANIMATION_OFFSET, WIDTH - ANIMATION_OFFSET, HEIGHT - ANIMATION_OFFSET));
|
||||
|
||||
animation_ = new QParallelAnimationGroup(this);
|
||||
animation_->addAnimation(opacity_anim_);
|
||||
animation_->addAnimation(size_anim_);
|
||||
|
||||
connect(people_emoji, &EmojiCategory::emojiSelected, this, &EmojiPanel::emojiSelected);
|
||||
connect(people_category, &QPushButton::clicked, [this, people_emoji]() {
|
||||
|
@ -201,7 +210,7 @@ EmojiPanel::EmojiPanel(QWidget *parent)
|
|||
this->showEmojiCategory(flags_emoji);
|
||||
});
|
||||
|
||||
connect(animation_, &QPropertyAnimation::finished, [this]() {
|
||||
connect(animation_, &QAbstractAnimation::finished, [this]() {
|
||||
if (animation_->direction() == QAbstractAnimation::Forward)
|
||||
this->hide();
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue