Allow visualiser to be paused by clicking

pull/170/head
James Ball 2023-09-10 11:14:10 +01:00
rodzic 298b2eeb77
commit eece1b1dae
2 zmienionych plików z 34 dodań i 5 usunięć

Wyświetl plik

@ -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<float> area, int channel) {
juce::Path path;

Wyświetl plik

@ -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<float> tempBuffer = std::vector<float>(2 * 4096);
int precision = 4;
std::atomic<bool> active = true;
std::shared_ptr<BufferConsumer> consumer;