Automatic depth increment when placing a source.

This commit is contained in:
brunoherbelin
2020-05-19 18:38:16 +02:00
parent 1ea1937fd7
commit 6ac25c01c8
5 changed files with 32 additions and 2 deletions

View File

@@ -201,6 +201,7 @@ void Mixer::insertSource(Source *s)
geometry_.scene.fg()->attach(s->group(View::GEOMETRY));
layer_.scene.fg()->attach(s->group(View::LAYER));
layer_.setDepth(s);
}
void Mixer::deleteCurrentSource()

View File

@@ -272,6 +272,21 @@ NodeSet::iterator Group::end()
return children_.end();
}
Node *Group::front()
{
if (!children_.empty())
return *children_.rbegin();
return nullptr;
}
Node *Group::back()
{
if (!children_.empty())
return *children_.begin();
return nullptr;
}
uint Group::numChildren() const
{
return children_.size();

View File

@@ -171,6 +171,8 @@ public:
NodeSet::iterator begin();
NodeSet::iterator end();
Node *front();
Node *back();
uint numChildren() const;
protected:

View File

@@ -400,10 +400,22 @@ void LayerView::setDepth (Source *s, float d)
if (!s)
return;
float depth = d;
// negative depth given; find the front most depth
if ( depth < 0.f ) {
Node *front = scene.fg()->front();
if (front)
depth = front->translation_.z + 0.5f;
else
depth = 0.5f;
}
// move the layer node of the source
Group *sourceNode = s->group(mode_);
// diagonal movement only
sourceNode->translation_.x = CLAMP( -d, SCENE_DEPTH + 2.f, 0.f);
sourceNode->translation_.x = CLAMP( -depth, SCENE_DEPTH + 2.f, 0.f);
sourceNode->translation_.y = sourceNode->translation_.x / aspect_ratio;
// change depth

2
View.h
View File

@@ -89,7 +89,7 @@ public:
void zoom (float factor) override;
void grab (glm::vec2 from, glm::vec2 to, Source *s, std::pair<Node *, glm::vec2> pick) override;
void setDepth (Source *, float d);
void setDepth (Source *, float d = -1.f);
private:
float aspect_ratio;