Added symbols for overlay of busy information. Added busy animation when

loading session in transition view.
This commit is contained in:
brunoherbelin
2020-07-20 00:42:44 +02:00
parent 31dcb13f5b
commit 91dd7e5cc8
7 changed files with 62 additions and 20 deletions

View File

@@ -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

View File

@@ -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::mat4>(), 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::mat4>(), glm::vec3( vec.y / vec.x, 1.f, 1.f));
symbol_->draw( ctm, projection);
}
symbol_->draw( ctm, projection);
}
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -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]);

View File

@@ -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_);
}

View File

@@ -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