From b7a85c767a2d52b6c69d2ffe867b64dfc1d2d49c Mon Sep 17 00:00:00 2001 From: hogliux Date: Tue, 5 May 2015 11:28:24 +0100 Subject: [PATCH] Add beginChangeGesture/endChangeGesture support to audio demo plug-in --- .../audio plugin demo/Source/PluginEditor.cpp | 34 ++++++++++++++++--- .../audio plugin demo/Source/PluginEditor.h | 5 +++ 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/examples/audio plugin demo/Source/PluginEditor.cpp b/examples/audio plugin demo/Source/PluginEditor.cpp index d2b7a8d68c..1d61114c47 100644 --- a/examples/audio plugin demo/Source/PluginEditor.cpp +++ b/examples/audio plugin demo/Source/PluginEditor.cpp @@ -102,16 +102,28 @@ void JuceDemoPluginAudioProcessorEditor::timerCallback() // This is our Slider::Listener callback, when the user drags a slider. void JuceDemoPluginAudioProcessorEditor::sliderValueChanged (Slider* slider) { - if (slider == &gainSlider) + if (AudioProcessorParameter* param = getParameterFromSlider (slider)) { // It's vital to use setValueNotifyingHost to change any parameters that are automatable // by the host, rather than just modifying them directly, otherwise the host won't know // that they've changed. - getProcessor().gain->setValueNotifyingHost ((float) gainSlider.getValue()); + param->setValueNotifyingHost ((float) slider->getValue()); } - else if (slider == &delaySlider) +} + +void JuceDemoPluginAudioProcessorEditor::sliderDragStarted (Slider* slider) +{ + if (AudioProcessorParameter* param = getParameterFromSlider (slider)) + { + param->beginChangeGesture(); + } +} + +void JuceDemoPluginAudioProcessorEditor::sliderDragEnded (Slider* slider) +{ + if (AudioProcessorParameter* param = getParameterFromSlider (slider)) { - getProcessor().delay->setValueNotifyingHost ((float) delaySlider.getValue()); + param->endChangeGesture(); } } @@ -153,6 +165,20 @@ static String ppqToBarsBeatsString (double ppq, double /*lastBarPPQ*/, int numer return s; } +AudioProcessorParameter* JuceDemoPluginAudioProcessorEditor::getParameterFromSlider (const Slider* slider) const +{ + if (slider == &gainSlider) + { + return getProcessor().gain; + } + else if (slider == &delaySlider) + { + return getProcessor().delay; + } + + return nullptr; +} + // Updates the text in our position label. void JuceDemoPluginAudioProcessorEditor::displayPositionInfo (const AudioPlayHead::CurrentPositionInfo& pos) { diff --git a/examples/audio plugin demo/Source/PluginEditor.h b/examples/audio plugin demo/Source/PluginEditor.h index 6ac62702ad..cf46271287 100644 --- a/examples/audio plugin demo/Source/PluginEditor.h +++ b/examples/audio plugin demo/Source/PluginEditor.h @@ -31,6 +31,8 @@ public: void paint (Graphics&) override; void resized() override; void sliderValueChanged (Slider*) override; + void sliderDragStarted (Slider*) override; + void sliderDragEnded (Slider*) override; private: MidiKeyboardComponent midiKeyboard; @@ -41,11 +43,14 @@ private: AudioPlayHead::CurrentPositionInfo lastDisplayedPosition; + //============================================================================== JuceDemoPluginAudioProcessor& getProcessor() const { return static_cast (processor); } + AudioProcessorParameter* getParameterFromSlider (const Slider*) const; + void displayPositionInfo (const AudioPlayHead::CurrentPositionInfo& pos); };