diff --git a/include/EmojiPanel.h b/include/EmojiPanel.h
index 5e053216..99c8fa63 100644
--- a/include/EmojiPanel.h
+++ b/include/EmojiPanel.h
@@ -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;
};
diff --git a/src/EmojiPanel.cc b/src/EmojiPanel.cc
index afe664f1..4176be0e 100644
--- a/src/EmojiPanel.cc
+++ b/src/EmojiPanel.cc
@@ -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();
});
|