From eece1b1dae4821def1e6e58fa0bca7566a799aa9 Mon Sep 17 00:00:00 2001 From: James Ball Date: Sun, 10 Sep 2023 11:14:10 +0100 Subject: [PATCH] Allow visualiser to be paused by clicking --- Source/components/VisualiserComponent.cpp | 34 ++++++++++++++++++++--- Source/components/VisualiserComponent.h | 5 +++- 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/Source/components/VisualiserComponent.cpp b/Source/components/VisualiserComponent.cpp index add9a15..586ee35 100644 --- a/Source/components/VisualiserComponent.cpp +++ b/Source/components/VisualiserComponent.cpp @@ -32,10 +32,23 @@ void VisualiserComponent::paint(juce::Graphics& g) { auto r = getLocalBounds().toFloat(); auto minDim = juce::jmin(r.getWidth(), r.getHeight()); - juce::CriticalSection::ScopedLockType scope(lock); - if (buffer.size() > 0) { - g.setColour(waveformColour); - paintXY(g, r.withSizeKeepingCentre(minDim, minDim)); + { + juce::CriticalSection::ScopedLockType scope(lock); + if (buffer.size() > 0) { + g.setColour(waveformColour); + paintXY(g, r.withSizeKeepingCentre(minDim, minDim)); + } + } + + if (!active) { + // add translucent layer + g.setColour(juce::Colours::black.withAlpha(0.5f)); + g.fillRect(getLocalBounds()); + + // add text + g.setColour(juce::Colours::white); + g.setFont(14.0f); + g.drawFittedText("Paused", getLocalBounds(), juce::Justification::centred, 1); } } @@ -51,6 +64,19 @@ void VisualiserComponent::run() { } } +void VisualiserComponent::mouseDown(const juce::MouseEvent& event) { + active = !active; + if (active) { + startTimerHz(60); + startThread(); + } else { + audioProcessor.consumerStop(consumer); + stopTimer(); + stopThread(1000); + } + repaint(); +} + void VisualiserComponent::paintChannel(juce::Graphics& g, juce::Rectangle area, int channel) { juce::Path path; diff --git a/Source/components/VisualiserComponent.h b/Source/components/VisualiserComponent.h index 1493b8f..62bc63b 100644 --- a/Source/components/VisualiserComponent.h +++ b/Source/components/VisualiserComponent.h @@ -4,7 +4,7 @@ #include "../concurrency/BufferConsumer.h" #include "../PluginProcessor.h" -class VisualiserComponent : public juce::Component, public juce::Timer, public juce::Thread { +class VisualiserComponent : public juce::Component, public juce::Timer, public juce::Thread, public juce::MouseListener { public: VisualiserComponent(int numChannels, OscirenderAudioProcessor& p); ~VisualiserComponent() override; @@ -16,6 +16,7 @@ public: void paint(juce::Graphics&) override; void timerCallback() override; void run() override; + void mouseDown(const juce::MouseEvent& event) override; private: juce::CriticalSection lock; @@ -25,6 +26,8 @@ private: OscirenderAudioProcessor& audioProcessor; std::vector tempBuffer = std::vector(2 * 4096); int precision = 4; + + std::atomic active = true; std::shared_ptr consumer;