summary refs log tree commit diff
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2018-03-16 17:56:45 +0200
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2018-03-16 17:56:45 +0200
commit4a6becacca08fbb66d254fdca4870a33013df77a (patch)
tree21ade90977db21099de3a357829afd16f599ea86
parentRemove opacity animation from the scrollbar (diff)
downloadnheko-4a6becacca08fbb66d254fdca4870a33013df77a.tar.xz
Add fancy snackbar animation
-rw-r--r--CMakeLists.txt8
-rw-r--r--cmake/Tweeny.cmake25
-rw-r--r--include/ui/SnackBar.h1
-rw-r--r--src/ui/SnackBar.cc28
4 files changed, 46 insertions, 16 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt

index 48c79496..ddbd3d35 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt
@@ -218,6 +218,12 @@ include(MatrixStructs) include_directories(${MATRIX_STRUCTS_INCLUDE_DIRS}) # +# libtweeny +# +include(Tweeny) +include_directories(${TWEENY_INCLUDE_DIRS}) + +# # lmdbxx # include(LMDBXX) @@ -342,7 +348,7 @@ else() target_link_libraries (nheko ${NHEKO_LIBS} Qt5::Multimedia) endif() -add_dependencies(nheko MatrixStructs lmdbxx) +add_dependencies(nheko MatrixStructs Tweeny lmdbxx) if(UNIX AND NOT APPLE) install (TARGETS nheko RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") diff --git a/cmake/Tweeny.cmake b/cmake/Tweeny.cmake new file mode 100644
index 00000000..87a2ade8 --- /dev/null +++ b/cmake/Tweeny.cmake
@@ -0,0 +1,25 @@ +include(ExternalProject) + +# +# Build tweeny +# + +set(THIRD_PARTY_ROOT ${CMAKE_SOURCE_DIR}/.third-party) +set(TWEENY_ROOT ${THIRD_PARTY_ROOT}/tweeny) + +set(TWEENY_INCLUDE_DIRS ${TWEENY_ROOT}/include) + +ExternalProject_Add( + Tweeny + + GIT_REPOSITORY https://github.com/mobius3/tweeny + GIT_TAG b94ce07cfb02a0eb8ac8aaf66137dabdaea857cf + + BUILD_IN_SOURCE 1 + SOURCE_DIR ${TWEENY_ROOT} + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" +) + +include_directories(SYSTEM ${TWEENY_ROOT}/include) diff --git a/include/ui/SnackBar.h b/include/ui/SnackBar.h
index bb579e92..89a8adaa 100644 --- a/include/ui/SnackBar.h +++ b/include/ui/SnackBar.h
@@ -32,7 +32,6 @@ protected: void mousePressEvent(QMouseEvent *event) override; private slots: - void onTimeout(); void hideMessage(); private: diff --git a/src/ui/SnackBar.cc b/src/ui/SnackBar.cc
index 1f02ee95..123d83e8 100644 --- a/src/ui/SnackBar.cc +++ b/src/ui/SnackBar.cc
@@ -1,6 +1,8 @@ #include <QDebug> #include <QPainter> +#include <tweeny.h> + #include "SnackBar.h" constexpr int STARTING_OFFSET = 1; @@ -27,7 +29,18 @@ SnackBar::SnackBar(QWidget *parent) hideTimer_ = QSharedPointer<QTimer>(new QTimer); hideTimer_->setSingleShot(true); - connect(showTimer_.data(), SIGNAL(timeout()), this, SLOT(onTimeout())); + auto offset_anim = tweeny::from(1.0f).to(0.0f).during(4000).via(tweeny::easing::elasticOut); + connect(showTimer_.data(), &QTimer::timeout, this, [this, offset_anim]() mutable { + if (offset_anim.progress() < 1.0f) { + offset_ = offset_anim.step(0.02f); + update(); + } else { + showTimer_->stop(); + hideTimer_->start(duration_); + offset_anim.seek(0.0f); + } + }); + connect(hideTimer_.data(), SIGNAL(timeout()), this, SLOT(hideMessage())); } @@ -76,19 +89,6 @@ SnackBar::showMessage(const QString &msg) } void -SnackBar::onTimeout() -{ - offset_ -= 1.1; - - if (offset_ <= 0.0) { - showTimer_->stop(); - hideTimer_->start(duration_); - } - - update(); -} - -void SnackBar::mousePressEvent(QMouseEvent *) { hideMessage();