From 6ac25c01c8357fad509297b848dc81aded00fba4 Mon Sep 17 00:00:00 2001 From: brunoherbelin Date: Tue, 19 May 2020 18:38:16 +0200 Subject: [PATCH] Automatic depth increment when placing a source. --- Mixer.cpp | 1 + Scene.cpp | 15 +++++++++++++++ Scene.h | 2 ++ View.cpp | 14 +++++++++++++- View.h | 2 +- 5 files changed, 32 insertions(+), 2 deletions(-) diff --git a/Mixer.cpp b/Mixer.cpp index 89e7980..530db8d 100644 --- a/Mixer.cpp +++ b/Mixer.cpp @@ -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() diff --git a/Scene.cpp b/Scene.cpp index 4a1e749..9356822 100644 --- a/Scene.cpp +++ b/Scene.cpp @@ -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(); diff --git a/Scene.h b/Scene.h index cb75ade..f67d307 100644 --- a/Scene.h +++ b/Scene.h @@ -171,6 +171,8 @@ public: NodeSet::iterator begin(); NodeSet::iterator end(); + Node *front(); + Node *back(); uint numChildren() const; protected: diff --git a/View.cpp b/View.cpp index 8a52c7b..5ccf2df 100644 --- a/View.cpp +++ b/View.cpp @@ -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 diff --git a/View.h b/View.h index e86d6fc..f180989 100644 --- a/View.h +++ b/View.h @@ -89,7 +89,7 @@ public: void zoom (float factor) override; void grab (glm::vec2 from, glm::vec2 to, Source *s, std::pair pick) override; - void setDepth (Source *, float d); + void setDepth (Source *, float d = -1.f); private: float aspect_ratio;