diff --git a/src/blackgui/guiutility.cpp b/src/blackgui/guiutility.cpp index 92ed03282..bf8fd03ac 100644 --- a/src/blackgui/guiutility.cpp +++ b/src/blackgui/guiutility.cpp @@ -29,8 +29,11 @@ #include #include #include +#include #include #include +#include +#include using namespace BlackMisc; @@ -345,4 +348,33 @@ namespace BlackGui { return QApplication::topLevelWidgets().contains(widget); } + + QGraphicsOpacityEffect *CGuiUtility::fadeInWidget(int durationMs, QWidget *widget, double startValue, double endValue) + { + // http://stackoverflow.com/questions/19087822/how-to-make-qt-widgets-fade-in-or-fade-out# + Q_ASSERT(widget); + QGraphicsOpacityEffect *effect = new QGraphicsOpacityEffect(widget); + widget->setGraphicsEffect(effect); + QPropertyAnimation *a = new QPropertyAnimation(effect, "opacity"); + a->setDuration(durationMs); + a->setStartValue(startValue); + a->setEndValue(endValue); + a->setEasingCurve(QEasingCurve::InBack); + a->start(QPropertyAnimation::DeleteWhenStopped); + return effect; + } + + QGraphicsOpacityEffect *CGuiUtility::fadeOutWidget(int durationMs, QWidget *widget, double startValue, double endValue) + { + Q_ASSERT(widget); + QGraphicsOpacityEffect *effect = new QGraphicsOpacityEffect(widget); + widget->setGraphicsEffect(effect); + QPropertyAnimation *a = new QPropertyAnimation(effect, "opacity"); + a->setDuration(durationMs); + a->setStartValue(startValue); + a->setEndValue(endValue); + a->setEasingCurve(QEasingCurve::OutBack); + a->start(QPropertyAnimation::DeleteWhenStopped); + return effect; + } } // ns diff --git a/src/blackgui/guiutility.h b/src/blackgui/guiutility.h index 4d3daf4a0..d17099d67 100644 --- a/src/blackgui/guiutility.h +++ b/src/blackgui/guiutility.h @@ -27,6 +27,7 @@ class QLayout; class QMimeData; class QTabWidget; class QWidget; +class QGraphicsOpacityEffect; namespace BlackGui { @@ -106,6 +107,12 @@ namespace BlackGui //! Is top level widget? static bool isTopLevelWidget(QWidget *widget); + //! Fade in a widget + static QGraphicsOpacityEffect *fadeInWidget(int durationMs, QWidget *widget, double startValue = 0.0, double endValue = 1.0); + + //! Fade out a widget + static QGraphicsOpacityEffect *fadeOutWidget(int durationMs, QWidget *widget, double startValue = 1.0, double endValue = 0.0); + private: //! Constructor, use static methods only CGuiUtility() {}