From dd7a63413ceff4ddd3c6b70954988016b29d6fd7 Mon Sep 17 00:00:00 2001 From: Bruno Herbelin Date: Sat, 9 Oct 2021 23:40:18 +0200 Subject: [PATCH] Fixed keyboard arrows control --- GeometryView.cpp | 11 ++++++----- LayerView.cpp | 11 ++++++----- Mixer.cpp | 2 +- MixingView.cpp | 13 +++++++------ Source.cpp | 2 +- TextureView.cpp | 19 +++++++++++++------ TransitionView.cpp | 2 +- UserInterfaceManager.cpp | 2 +- View.cpp | 6 ++++-- View.h | 2 ++ defines.h | 2 +- 11 files changed, 43 insertions(+), 29 deletions(-) diff --git a/GeometryView.cpp b/GeometryView.cpp index f54e084..d3655e7 100644 --- a/GeometryView.cpp +++ b/GeometryView.cpp @@ -1034,8 +1034,8 @@ void GeometryView::terminate() void GeometryView::arrow (glm::vec2 movement) { - static int accumulator = 0; - accumulator++; + static float accumulator = 0.f; + accumulator += dt_; glm::vec3 gl_Position_from = Rendering::manager().unProject(glm::vec2(0.f), scene.root()->transform_); glm::vec3 gl_Position_to = Rendering::manager().unProject(movement, scene.root()->transform_); @@ -1058,18 +1058,19 @@ void GeometryView::arrow (glm::vec2 movement) // + ALT : discrete displacement if (UserInterface::manager().altModifier()) { - if (accumulator > 10) { + if (accumulator > 100.f) { dest_translation += glm::sign(gl_delta) * 0.11f; dest_translation.x = ROUND(dest_translation.x, 10.f); dest_translation.y = ROUND(dest_translation.y, 10.f); - accumulator = 0; + accumulator = 0.f; } else break; } else { // normal case: dest += delta - dest_translation += gl_delta * ARROWS_MOVEMENT_FACTOR; + dest_translation += gl_delta * ARROWS_MOVEMENT_FACTOR * dt_; + accumulator = 0.f; } // store action in history diff --git a/LayerView.cpp b/LayerView.cpp index d22c6f2..128a7aa 100644 --- a/LayerView.cpp +++ b/LayerView.cpp @@ -321,8 +321,8 @@ View::Cursor LayerView::grab (Source *s, glm::vec2 from, glm::vec2 to, std::pair void LayerView::arrow (glm::vec2 movement) { - static int accumulator = 0; - accumulator++; + static float accumulator = 0.f; + accumulator += dt_; glm::vec3 gl_Position_from = Rendering::manager().unProject(glm::vec2(0.f), scene.root()->transform_); glm::vec3 gl_Position_to = Rendering::manager().unProject(glm::vec2(movement.x-movement.y, 0.f), scene.root()->transform_); @@ -345,17 +345,18 @@ void LayerView::arrow (glm::vec2 movement) // + ALT : discrete displacement if (UserInterface::manager().altModifier()) { - if (accumulator > 10) { + if (accumulator > 100.f) { dest_translation += glm::sign(gl_delta) * 0.21f; dest_translation.x = ROUND(dest_translation.x, 10.f); - accumulator = 0; + accumulator = 0.f; } else break; } else { // normal case: dest += delta - dest_translation += gl_delta * ARROWS_MOVEMENT_FACTOR; + dest_translation += gl_delta * ARROWS_MOVEMENT_FACTOR * dt_; + accumulator = 0.f; } // store action in history diff --git a/Mixer.cpp b/Mixer.cpp index eded6ed..451088c 100644 --- a/Mixer.cpp +++ b/Mixer.cpp @@ -68,7 +68,7 @@ static void saveSession(const std::string& filename, Session *session) } Mixer::Mixer() : session_(nullptr), back_session_(nullptr), sessionSwapRequested_(false), - current_view_(nullptr), dt_(0.f), dt__(0.f) + current_view_(nullptr), dt_(16.f), dt__(16.f) { // unsused initial empty session session_ = new Session; diff --git a/MixingView.cpp b/MixingView.cpp index f13a246..f10298d 100644 --- a/MixingView.cpp +++ b/MixingView.cpp @@ -520,8 +520,8 @@ View::Cursor MixingView::over (glm::vec2 pos) void MixingView::arrow (glm::vec2 movement) { - static int accumulator = 0; - accumulator++; + static float accumulator = 0.f; + accumulator += dt_; glm::vec3 gl_Position_from = Rendering::manager().unProject(glm::vec2(0.f), scene.root()->transform_); glm::vec3 gl_Position_to = Rendering::manager().unProject(movement, scene.root()->transform_); @@ -544,18 +544,19 @@ void MixingView::arrow (glm::vec2 movement) // + ALT : discrete displacement if (UserInterface::manager().altModifier()) { - if (accumulator > 10) { - dest_translation += glm::sign(gl_delta) * 0.11f; + if (accumulator > 100.f) { + dest_translation += glm::sign(gl_delta) * 0.1f; dest_translation.x = ROUND(dest_translation.x, 10.f); dest_translation.y = ROUND(dest_translation.y, 10.f); - accumulator = 0; + accumulator = 0.f; } else break; } else { // normal case: dest += delta - dest_translation += gl_delta * ARROWS_MOVEMENT_FACTOR; + dest_translation += gl_delta * ARROWS_MOVEMENT_FACTOR * dt_; + accumulator = 0.f; } // store action in history diff --git a/Source.cpp b/Source.cpp index 96a1c93..c46d86c 100644 --- a/Source.cpp +++ b/Source.cpp @@ -97,7 +97,7 @@ SourceCore& SourceCore::operator= (SourceCore const& other) Source::Source(uint64_t id) : SourceCore(), id_(id), ready_(false), symbol_(nullptr), - active_(true), locked_(false), need_update_(true), dt_(0), workspace_(STAGE) + active_(true), locked_(false), need_update_(true), dt_(16.f), workspace_(STAGE) { // create unique id if (id_ == 0) diff --git a/TextureView.cpp b/TextureView.cpp index 1065695..ca278cb 100644 --- a/TextureView.cpp +++ b/TextureView.cpp @@ -1348,20 +1348,27 @@ void TextureView::arrow (glm::vec2 movement) { Source *s = Mixer::manager().currentSource(); if (s) { + static float accumulator = 0.f; + accumulator += dt_; glm::vec3 gl_Position_from = Rendering::manager().unProject(glm::vec2(0.f), scene.root()->transform_); glm::vec3 gl_Position_to = Rendering::manager().unProject(movement, scene.root()->transform_); glm::vec3 gl_delta = gl_Position_to - gl_Position_from; Group *sourceNode = s->group(mode_); - static glm::vec3 alt_move_ = sourceNode->translation_; - if (UserInterface::manager().altModifier()) { - alt_move_ += gl_delta * ARROWS_MOVEMENT_FACTOR; - sourceNode->translation_.x = ROUND(alt_move_.x, 10.f); - sourceNode->translation_.y = ROUND(alt_move_.y, 10.f); + glm::vec3 alt_move_ = sourceNode->translation_; + if (UserInterface::manager().altModifier()) { + if (accumulator > 100.f) + { + alt_move_ += glm::sign(gl_delta) * 0.1f; + sourceNode->translation_.x = ROUND(alt_move_.x, 10.f); + sourceNode->translation_.y = ROUND(alt_move_.y, 10.f); + accumulator = 0.f; + } } else { - sourceNode->translation_ += gl_delta * ARROWS_MOVEMENT_FACTOR; + sourceNode->translation_ += gl_delta * ARROWS_MOVEMENT_FACTOR * dt_; + accumulator = 0.f; alt_move_ = sourceNode->translation_; } diff --git a/TransitionView.cpp b/TransitionView.cpp index a6590b8..6b561c2 100644 --- a/TransitionView.cpp +++ b/TransitionView.cpp @@ -401,7 +401,7 @@ void TransitionView::arrow (glm::vec2 movement) glm::vec3 gl_Position_to = Rendering::manager().unProject(movement, scene.root()->transform_); glm::vec3 gl_delta = gl_Position_to - gl_Position_from; - float d = s->group(mode_)->translation_.x + gl_delta.x * ARROWS_MOVEMENT_FACTOR; + float d = s->group(mode_)->translation_.x + gl_delta.x * ARROWS_MOVEMENT_FACTOR * dt_; s->group(mode_)->translation_.x = CLAMP(d, -1.f, 0.f); // request update diff --git a/UserInterfaceManager.cpp b/UserInterfaceManager.cpp index 5640649..d60c843 100644 --- a/UserInterfaceManager.cpp +++ b/UserInterfaceManager.cpp @@ -393,7 +393,7 @@ void UserInterface::handleKeyboard() if (ImGui::IsKeyDown( GLFW_KEY_UP )) Mixer::manager().view()->arrow( glm::vec2(0.f, -1.f) ); else if (ImGui::IsKeyDown( GLFW_KEY_DOWN )) - Mixer::manager().view()->arrow( glm::vec2(0.f, 1.f) ); + Mixer::manager().view()->arrow( glm::vec2(0.f, +1.f) ); if (ImGui::IsKeyReleased( GLFW_KEY_LEFT ) || ImGui::IsKeyReleased( GLFW_KEY_RIGHT ) || diff --git a/View.cpp b/View.cpp index 1693277..62ba6b1 100644 --- a/View.cpp +++ b/View.cpp @@ -26,7 +26,7 @@ uint View::need_deep_update_ = 1; -View::View(Mode m) : mode_(m) +View::View(Mode m) : mode_(m), dt_(16.f) { show_context_menu_ = MENU_NONE; @@ -55,8 +55,10 @@ void View::draw() void View::update(float dt) { + dt_ = dt; + // recursive update from root of scene - scene.update( dt ); + scene.update( dt_ ); // a more complete update is requested if (View::need_deep_update_ > 0) { diff --git a/View.h b/View.h index c8da86e..4fbce43 100644 --- a/View.h +++ b/View.h @@ -120,6 +120,8 @@ protected: ContextMenu show_context_menu_; inline void openContextMenu (ContextMenu m) { show_context_menu_ = m; } void lock(Source *s, bool on); + + float dt_; }; diff --git a/defines.h b/defines.h index 96b0f52..be78859 100644 --- a/defines.h +++ b/defines.h @@ -58,7 +58,7 @@ #define TRANSITION_DEFAULT_SCALE 5.0f #define TRANSITION_MIN_DURATION 0.2f #define TRANSITION_MAX_DURATION 10.f -#define ARROWS_MOVEMENT_FACTOR 4.f +#define ARROWS_MOVEMENT_FACTOR 0.1f #define SESSION_THUMBNAIL_HEIGHT 120.f #define RECORD_MAX_TIMEOUT 1200000