From c602346cadb02bff69ff0f96f6c610a64f1b4671 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Fri, 24 Jul 2015 11:14:09 -0700 Subject: [PATCH] Update ApplicationCompositor to use QPropertyAnimation for alpha fades --- interface/src/ui/ApplicationCompositor.cpp | 32 +++++++++++++++++----- interface/src/ui/ApplicationCompositor.h | 15 +++++++--- interface/src/ui/OverlayConductor.cpp | 4 --- 3 files changed, 36 insertions(+), 15 deletions(-) diff --git a/interface/src/ui/ApplicationCompositor.cpp b/interface/src/ui/ApplicationCompositor.cpp index 82a9090d18..fe0e8a2568 100644 --- a/interface/src/ui/ApplicationCompositor.cpp +++ b/interface/src/ui/ApplicationCompositor.cpp @@ -165,6 +165,8 @@ ApplicationCompositor::ApplicationCompositor() { } } }); + + _alphaPropertyAnimation = std::make_unique(this, "alpha"); } ApplicationCompositor::~ApplicationCompositor() { @@ -730,12 +732,28 @@ void ApplicationCompositor::updateTooltips() { } } -void ApplicationCompositor::update(float dt) { - const int ALPHA_FADE_RATE = 2.0f; - _prevAlpha = _alpha; - if (_fadeInAlpha && _alpha < 1.0f) { - _alpha = std::min(_alpha + ALPHA_FADE_RATE * dt, 1.0f); - } else if (!_fadeInAlpha && _alpha > 0.0f) { - _alpha = std::max(_alpha - ALPHA_FADE_RATE * dt, 0.0f); +static const float FADE_DURATION = 500.0f; +void ApplicationCompositor::fadeIn() { + _fadeInAlpha = true; + + _alphaPropertyAnimation->setDuration(FADE_DURATION); + _alphaPropertyAnimation->setStartValue(_alpha); + _alphaPropertyAnimation->setEndValue(1.0f); + _alphaPropertyAnimation->start(); +} +void ApplicationCompositor::fadeOut() { + _fadeInAlpha = false; + + _alphaPropertyAnimation->setDuration(FADE_DURATION); + _alphaPropertyAnimation->setStartValue(_alpha); + _alphaPropertyAnimation->setEndValue(0.0f); + _alphaPropertyAnimation->start(); +} + +void ApplicationCompositor::toggle() { + if (_fadeInAlpha) { + fadeOut(); + } else { + fadeIn(); } } diff --git a/interface/src/ui/ApplicationCompositor.h b/interface/src/ui/ApplicationCompositor.h index aa3a0a1e4d..3074708e70 100644 --- a/interface/src/ui/ApplicationCompositor.h +++ b/interface/src/ui/ApplicationCompositor.h @@ -10,6 +10,7 @@ #define hifi_ApplicationCompositor_h #include +#include #include #include @@ -33,6 +34,8 @@ const float DEFAULT_HMD_UI_ANGULAR_SIZE = 72.0f; // facilities of this class class ApplicationCompositor : public QObject { Q_OBJECT + + Q_PROPERTY(float alpha READ getAlpha WRITE setAlpha) public: ApplicationCompositor(); ~ApplicationCompositor(); @@ -70,10 +73,12 @@ public: void setModelTransform(const Transform& transform) { _modelTransform = transform; } const Transform& getModelTransform() const { return _modelTransform; } - void fadeIn() { _fadeInAlpha = true; } - void fadeOut() { _fadeInAlpha = false; } - void toggle() { _fadeInAlpha = !_fadeInAlpha; } - void update(float dt); + void fadeIn(); + void fadeOut(); + void toggle(); + + float getAlpha() const { return _alpha; } + void setAlpha(float alpha) { _alpha = alpha; } static glm::vec2 directionToSpherical(const glm::vec3 & direction); static glm::vec3 sphericalToDirection(const glm::vec2 & sphericalPos); @@ -131,6 +136,8 @@ private: Transform _modelTransform; Transform _cameraBaseTransform; + + std::unique_ptr _alphaPropertyAnimation; }; #endif // hifi_ApplicationCompositor_h diff --git a/interface/src/ui/OverlayConductor.cpp b/interface/src/ui/OverlayConductor.cpp index 01f666d50b..21165b8c20 100644 --- a/interface/src/ui/OverlayConductor.cpp +++ b/interface/src/ui/OverlayConductor.cpp @@ -62,10 +62,6 @@ void OverlayConductor::update(float dt) { // do nothing break; } - - - // process alpha fade animations - qApp->getApplicationCompositor().update(dt); } void OverlayConductor::updateMode() {