From 22d7c759701784976b029b0bb0d7108392b1f1b3 Mon Sep 17 00:00:00 2001 From: Paul Date: Sat, 4 May 2024 09:40:09 -0400 Subject: [PATCH] Fix jog-hold misfire in jog effect selectors (#64) A simple bool on our timer meant if a jog hold fired while the subsequent mouse was down you would get a double bump. A simple 'jogging or not' is not enough but a click counter does the trick, so move to that. Closes #62 --- src-juce/AWConsolidatedEditor.cpp | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src-juce/AWConsolidatedEditor.cpp b/src-juce/AWConsolidatedEditor.cpp index 03476be..4906be4 100644 --- a/src-juce/AWConsolidatedEditor.cpp +++ b/src-juce/AWConsolidatedEditor.cpp @@ -416,28 +416,29 @@ struct Picker : public juce::Component, public juce::TextEditor::Listener } } - bool isJogHeld{false}; + uint64_t jogHoldCounter{0}; void startJogHold(int dir) { - isJogHeld = true; - juce::Timer::callAfterDelay(800, [dir, w = juce::Component::SafePointer(this)]() { + juce::Timer::callAfterDelay(800, [hc = jogHoldCounter, dir, w = juce::Component::SafePointer(this)]() { if (w) { - w->doJogHold(dir); + w->doJogHold(dir, hc); } }); } - void stopJogHold() { isJogHeld = false; } - void doJogHold(int dir) + void stopJogHold() { jogHoldCounter ++; } + void doJogHold(int dir, uint64_t hc) { - if (!isJogHeld) + if (hc != jogHoldCounter) + { return; + } editor->jog(dir); - juce::Timer::callAfterDelay(200, [dir, w = juce::Component::SafePointer(this)]() { + juce::Timer::callAfterDelay(200, [hc, dir, w = juce::Component::SafePointer(this)]() { if (w) { - w->doJogHold(dir); + w->doJogHold(dir, hc); } }); }