From 91dd7e5cc830923848b88502aec6f61b9e7b9714 Mon Sep 17 00:00:00 2001 From: brunoherbelin Date: Mon, 20 Jul 2020 00:42:44 +0200 Subject: [PATCH] Added symbols for overlay of busy information. Added busy animation when loading session in transition view. --- CMakeLists.txt | 2 ++ Decorations.cpp | 31 +++++++++++++++---------------- Decorations.h | 4 ++-- SessionSource.cpp | 11 ++++++++++- Source.cpp | 2 +- UpdateCallback.cpp | 20 ++++++++++++++++++++ UpdateCallback.h | 12 ++++++++++++ 7 files changed, 62 insertions(+), 20 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7be47d9..827400b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -292,6 +292,8 @@ set(VMIX_RSC_FILES ./rsc/mesh/icon_render.ply ./rsc/mesh/icon_clone.ply ./rsc/mesh/icon_vimix.ply + ./rsc/mesh/icon_circles.ply + ./rsc/mesh/icon_dots.ply ./rsc/mesh/icon_empty.ply ./rsc/mesh/h_line.ply ./rsc/mesh/h_mark.ply diff --git a/Decorations.cpp b/Decorations.cpp index ec7d126..a36821b 100644 --- a/Decorations.cpp +++ b/Decorations.cpp @@ -221,7 +221,7 @@ void Handles::draw(glm::mat4 modelview, glm::mat4 projection) glm::vec3 rot(0.f); glm::vec4 vec = modelview * glm::vec4(1.f, 0.f, 0.f, 0.f); rot.z = glm::orientedAngle( glm::vec3(1.f, 0.f, 0.f), glm::normalize(glm::vec3(vec)), glm::vec3(0.f, 0.f, 1.f) ); - vec = modelview * glm::vec4(0.f, 1.f, 0.f, 1.f); +// vec = modelview * glm::vec4(0.f, 1.f, 0.f, 1.f); // glm::vec3 scale( vec.x > 0.f ? 1.f : -1.f, vec.y > 0.f ? 1.f : -1.f, 1.f); // glm::vec3 scale(1.f, 1.f, 1.f); @@ -301,23 +301,24 @@ void Handles::accept(Visitor& v) } -Symbol::Symbol(Type style, glm::vec3 pos) : Node() +Symbol::Symbol(Type t, glm::vec3 pos) : Node(), type_(t) { - static Mesh *icons[7] = {nullptr}; + static Mesh *icons[9] = {nullptr}; if (icons[0] == nullptr) { + icons[POINT] = new Mesh("mesh/point.ply"); icons[IMAGE] = new Mesh("mesh/icon_image.ply"); icons[VIDEO] = new Mesh("mesh/icon_video.ply"); icons[SESSION] = new Mesh("mesh/icon_vimix.ply"); icons[CLONE] = new Mesh("mesh/icon_clone.ply"); icons[RENDER] = new Mesh("mesh/icon_render.ply"); + icons[DOTS] = new Mesh("mesh/icon_dots.ply"); + icons[CIRCLES] = new Mesh("mesh/icon_circles.ply"); icons[EMPTY] = new Mesh("mesh/icon_empty.ply"); - icons[GENERIC] = new Mesh("mesh/point.ply"); } - symbol_ = icons[style]; + symbol_ = icons[type_]; translation_ = pos; color = glm::vec4( 1.f, 1.f, 1.f, 1.f); - } Symbol::~Symbol() @@ -333,19 +334,17 @@ void Symbol::draw(glm::mat4 modelview, glm::mat4 projection) init(); } - if ( visible_ ) { + if ( visible_ && symbol_) { - if(symbol_) { - // set color - symbol_->shader()->color = color; + // set color + symbol_->shader()->color = color; - glm::mat4 ctm = modelview * transform_; - // correct for aspect ratio - glm::vec4 vec = ctm * glm::vec4(1.f, 1.0f, 0.f, 0.f); - ctm *= glm::scale(glm::identity(), glm::vec3( vec.y / vec.x, 1.f, 1.f)); + glm::mat4 ctm = modelview * transform_; + // correct for aspect ratio + glm::vec4 vec = ctm * glm::vec4(1.f, 1.0f, 0.f, 0.f); + ctm *= glm::scale(glm::identity(), glm::vec3( vec.y / vec.x, 1.f, 1.f)); - symbol_->draw( ctm, projection); - } + symbol_->draw( ctm, projection); } } diff --git a/Decorations.h b/Decorations.h index 0979990..8acbeb2 100644 --- a/Decorations.h +++ b/Decorations.h @@ -57,8 +57,8 @@ protected: class Symbol : public Node { public: - typedef enum { GENERIC = 0, IMAGE, VIDEO, SESSION, CLONE, RENDER, EMPTY } Type; - Symbol(Type type = GENERIC, glm::vec3 pos = glm::vec3(0.f)); + typedef enum { POINT = 0, IMAGE, VIDEO, SESSION, CLONE, RENDER, DOTS, CIRCLES, EMPTY } Type; + Symbol(Type t = POINT, glm::vec3 pos = glm::vec3(0.f)); ~Symbol(); void draw (glm::mat4 modelview, glm::mat4 projection) override; diff --git a/SessionSource.cpp b/SessionSource.cpp index 11e7452..533a0c9 100644 --- a/SessionSource.cpp +++ b/SessionSource.cpp @@ -60,7 +60,12 @@ SessionSource::SessionSource() : Source(), path_("") overlays_[View::TRANSITION] = new Group; overlays_[View::TRANSITION]->translation_.z = 0.1; overlays_[View::TRANSITION]->visible_ = false; - Symbol *center = new Symbol(Symbol::GENERIC, glm::vec3(0.f, -1.05f, 0.1f)); + + Symbol *loader = new Symbol(Symbol::DOTS); + loader->scale_ = glm::vec3(2.f, 2.f, 1.f); + loader->update_callbacks_.push_back(new InfiniteGlowCallback); + overlays_[View::TRANSITION]->attach(loader); + Symbol *center = new Symbol(Symbol::POINT, glm::vec3(0.f, -1.05f, 0.1f)); overlays_[View::TRANSITION]->attach(center); groups_[View::TRANSITION]->attach(overlays_[View::TRANSITION]); @@ -149,6 +154,10 @@ void SessionSource::init() } // if all sources are ready, done with initialization! if (ready) { + // remove the loading icon + Node *loader = overlays_[View::TRANSITION]->back(); + overlays_[View::TRANSITION]->detatch(loader); + delete loader; // done init wait_for_sources_ = false; initialized_ = true; diff --git a/Source.cpp b/Source.cpp index 17404b5..d0e6648 100644 --- a/Source.cpp +++ b/Source.cpp @@ -49,7 +49,7 @@ Source::Source() : initialized_(false), active_(true), need_update_(true) overlays_[View::MIXING] = new Group; overlays_[View::MIXING]->translation_.z = 0.1; overlays_[View::MIXING]->visible_ = false; - Symbol *center = new Symbol(Symbol::GENERIC, glm::vec3(0.f, 0.f, 0.1f)); + Symbol *center = new Symbol(Symbol::POINT, glm::vec3(0.f, 0.f, 0.1f)); overlays_[View::MIXING]->attach(center); groups_[View::MIXING]->attach(overlays_[View::MIXING]); diff --git a/UpdateCallback.cpp b/UpdateCallback.cpp index cdeb164..b10a62f 100644 --- a/UpdateCallback.cpp +++ b/UpdateCallback.cpp @@ -65,3 +65,23 @@ void BounceScaleCallback::update(Node *n, float dt) finished_ = true; } } +InfiniteGlowCallback::InfiniteGlowCallback(float amplitude) : UpdateCallback(), + amplitude_(amplitude), time_(0.f), initialized_(false) +{ + +} + +void InfiniteGlowCallback::update(Node *n, float dt) +{ + // set start scale on first run + if (!initialized_){ + initial_scale_ = n->scale_; + initialized_ = true; + } + + time_ += dt / 1000.f; + + n->scale_.x = initial_scale_.x + amplitude_ * sin(M_PI * time_); + n->scale_.y = initial_scale_.y + amplitude_ * sin(M_PI * time_); + +} diff --git a/UpdateCallback.h b/UpdateCallback.h index a058739..0a6e893 100644 --- a/UpdateCallback.h +++ b/UpdateCallback.h @@ -49,4 +49,16 @@ public: void update(Node *n, float dt); }; +class InfiniteGlowCallback : public UpdateCallback +{ + float amplitude_; + float time_; + bool initialized_; + glm::vec3 initial_scale_; + +public: + InfiniteGlowCallback(float amplitude = 0.5f); + void update(Node *n, float dt); +}; + #endif // UPDATECALLBACK_H