commit 0a137a3ead1ff248ed34fda2e017ab050f4f4527
parent a9322c7bc01118834ea623cd7c86238401ddde43
Author: Kai Mikkelsen <43660096+KaiMikkelsen@users.noreply.github.com>
Date: Wed, 30 Nov 2022 17:37:34 -0800
UI Updating Optimizations (#292)
* Modulatable slider only update when it needs
* get new ModulatedValue at correct time
* update utils and refresh sliders
* cleaning up
- chowdsp_sources in modules
- public timer inheritance in modulatable slider
* Fix some missing juce::Point's
* Apply clang-format
Co-authored-by: Jatin Chowdhury <jatinchowdhury18@gmail.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Diffstat:
14 files changed, 35 insertions(+), 26 deletions(-)
diff --git a/Plugin/Source/GUI/IOSOnly/DragToScrollListener.cpp b/Plugin/Source/GUI/IOSOnly/DragToScrollListener.cpp
@@ -20,7 +20,7 @@ void DragToScrollListener::positionChanged (ViewportDragPosition&, double)
if (! isDragging)
return;
- viewport.setViewPosition (originalViewPos - Point<int> ((int) offsetX.getPosition(), (int) offsetY.getPosition()));
+ viewport.setViewPosition (originalViewPos - juce::Point<int> ((int) offsetX.getPosition(), (int) offsetY.getPosition()));
}
static int getNumSources()
diff --git a/Plugin/Source/GUI/IOSOnly/DragToScrollListener.h b/Plugin/Source/GUI/IOSOnly/DragToScrollListener.h
@@ -23,7 +23,7 @@ public:
private:
Viewport& viewport;
ViewportDragPosition offsetX, offsetY;
- Point<int> originalViewPos;
+ juce::Point<int> originalViewPos;
bool isDragging = false;
bool isGlobalMouseListener = false;
diff --git a/Plugin/Source/GUI/ModulatableSlider.cpp b/Plugin/Source/GUI/ModulatableSlider.cpp
@@ -1,4 +1,5 @@
#include "ModulatableSlider.h"
+#include "../PluginProcessor.h"
void ModulatableSlider::attachToParameter (juce::RangedAudioParameter* param)
{
@@ -12,7 +13,7 @@ void ModulatableSlider::attachToParameter (juce::RangedAudioParameter* param)
attachment = std::make_unique<juce::SliderParameterAttachment> (*param, *this, nullptr);
modParameter = dynamic_cast<chowdsp::FloatParameter*> (param);
- startTimerHz (24);
+ modulatedValue = modParameter->getCurrentValue();
}
double ModulatableSlider::getModulatedPosition()
@@ -61,6 +62,11 @@ juce::PopupMenu ModulatableSlider::getContextMenu()
void ModulatableSlider::timerCallback()
{
+ const auto newModulatedValue = modParameter->getCurrentValue();
+ if (std::abs (modulatedValue - newModulatedValue) < 0.01)
+ return;
+
+ modulatedValue = newModulatedValue;
repaint();
}
@@ -83,6 +89,12 @@ ModSliderItem::ModSliderItem (foleys::MagicGUIBuilder& builder, const juce::Valu
void ModSliderItem::update()
{
+ if (const auto* plugin = dynamic_cast<const ChowtapeModelAudioProcessor*> (magicBuilder.getMagicState().getProcessor()))
+ {
+ if (plugin->supportsParameterModulation())
+ slider.startTimerHz (24);
+ }
+
slider.setPluginEditorCallback ([this] { return magicBuilder.getMagicState().getProcessor()->getActiveEditor(); });
slider.setTitle (magicBuilder.getStyleProperty (foleys::IDs::name, configNode));
diff --git a/Plugin/Source/GUI/ModulatableSlider.h b/Plugin/Source/GUI/ModulatableSlider.h
@@ -3,7 +3,7 @@
#include <JuceHeader.h>
class ModulatableSlider : public foleys::AutoOrientationSlider,
- private Timer
+ public Timer
{
public:
ModulatableSlider() = default;
@@ -24,6 +24,8 @@ private:
chowdsp::FloatParameter* modParameter = nullptr;
PluginEditorCallback pluginEditorCallback = nullptr;
+ double modulatedValue = 0.0;
+
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ModulatableSlider)
};
diff --git a/Plugin/Source/GUI/MyLNF.cpp b/Plugin/Source/GUI/MyLNF.cpp
@@ -106,7 +106,7 @@ void MyLNF::drawTabButton (TabBarButton& button, Graphics& g, bool /*isMouseOver
}
else
{
- Point<int> p1, p2;
+ juce::Point<int> p1, p2;
switch (o)
{
@@ -224,11 +224,11 @@ void MyLNF::drawLinearSlider (Graphics& g, int x, int y, int width, int height,
{
auto trackWidth = jmin (10.0f, slider.isHorizontal() ? (float) height * 0.25f : (float) width * 0.25f);
- Point<float> startPoint (slider.isHorizontal() ? (float) x : (float) x + (float) width * 0.5f,
- slider.isHorizontal() ? (float) y + (float) height * 0.5f : (float) (height + y));
+ juce::Point<float> startPoint (slider.isHorizontal() ? (float) x : (float) x + (float) width * 0.5f,
+ slider.isHorizontal() ? (float) y + (float) height * 0.5f : (float) (height + y));
- Point<float> endPoint (slider.isHorizontal() ? (float) (width + x) : startPoint.x,
- slider.isHorizontal() ? startPoint.y : (float) y);
+ juce::Point<float> endPoint (slider.isHorizontal() ? (float) (width + x) : startPoint.x,
+ slider.isHorizontal() ? startPoint.y : (float) y);
const auto alpha = slider.isEnabled() ? 1.0f : 0.4f;
@@ -239,7 +239,7 @@ void MyLNF::drawLinearSlider (Graphics& g, int x, int y, int width, int height,
g.strokePath (backgroundTrack, { trackWidth, PathStrokeType::curved, PathStrokeType::rounded });
Path valueTrack;
- Point<float> minPoint, maxPoint, modPoint;
+ juce::Point<float> minPoint, maxPoint, modPoint;
{
auto kx = slider.isHorizontal() ? sliderPos : ((float) x + (float) width * 0.5f);
diff --git a/Plugin/Source/GUI/OnOff/PowerButton.cpp b/Plugin/Source/GUI/OnOff/PowerButton.cpp
@@ -89,7 +89,7 @@ std::vector<foleys::SettableProperty> PowerButtonItem::getSettableProperties() c
return itemProperties;
}
-String PowerButtonItem::getControlledParameterID (Point<int>)
+String PowerButtonItem::getControlledParameterID (juce::Point<int>)
{
return configNode.getProperty (foleys::IDs::parameter, String()).toString();
}
diff --git a/Plugin/Source/GUI/OnOff/PowerButton.h b/Plugin/Source/GUI/OnOff/PowerButton.h
@@ -36,7 +36,7 @@ public:
void resized() override;
void update() override;
std::vector<foleys::SettableProperty> getSettableProperties() const override;
- String getControlledParameterID (Point<int>) override;
+ String getControlledParameterID (juce::Point<int>) override;
juce::Component* getWrappedComponent() override
{
diff --git a/Plugin/Source/GUI/OversamplingMenu.cpp b/Plugin/Source/GUI/OversamplingMenu.cpp
@@ -11,7 +11,7 @@ OversamplingMenu::OversamplingMenu (OversamplerType& osManager,
processor (vts.processor)
{
generateComboBoxMenu();
-
+
for (const auto& tag : latencyChangeParameters)
vts.addParameterListener (tag, this);
}
diff --git a/Plugin/Source/GUI/SettingsButton.cpp b/Plugin/Source/GUI/SettingsButton.cpp
@@ -10,7 +10,7 @@ SettingsButton::SettingsButton (const ChowtapeModelAudioProcessor& processor, ch
proc (processor),
openGLHelper (oglHelper)
{
- pluginSettings->addProperties ({ { openglID, false } }, this);
+ pluginSettings->addProperties<&SettingsButton::globalSettingChanged> ({ { openglID, false } }, *this);
globalSettingChanged (openglID);
auto cog = Drawable::createFromImageData (BinaryData::cogsolid_svg, BinaryData::cogsolid_svgSize);
@@ -19,11 +19,6 @@ SettingsButton::SettingsButton (const ChowtapeModelAudioProcessor& processor, ch
onClick = [=] { showSettingsMenu(); };
}
-SettingsButton::~SettingsButton()
-{
- pluginSettings->removePropertyListener (this);
-}
-
void SettingsButton::globalSettingChanged (SettingID settingID)
{
if (settingID != openglID)
diff --git a/Plugin/Source/GUI/SettingsButton.h b/Plugin/Source/GUI/SettingsButton.h
@@ -3,15 +3,14 @@
#include "../PluginProcessor.h"
class SettingsButton : public DrawableButton,
- private chowdsp::GlobalPluginSettings::Listener
+ public chowdsp::TrackedByBroadcasters
{
using SettingID = chowdsp::GlobalPluginSettings::SettingID;
public:
SettingsButton (const ChowtapeModelAudioProcessor& processor, chowdsp::OpenGLHelper* openGLHelper);
- ~SettingsButton() override;
- void globalSettingChanged (SettingID settingID) final;
+ void globalSettingChanged (SettingID settingID);
private:
void showSettingsMenu();
diff --git a/Plugin/Source/GUI/Visualizers/MixGroupViz.cpp b/Plugin/Source/GUI/Visualizers/MixGroupViz.cpp
@@ -66,7 +66,7 @@ void MixGroupViz::setMixGroupColour (int mixGroupIdx)
void MixGroupViz::paint (Graphics& g)
{
const auto height = float (getHeight() - getPosition().getY());
- const auto centre = Point<int> (getWidth() / 2, getHeight() / 2).toFloat();
+ const auto centre = juce::Point<int> (getWidth() / 2, getHeight() / 2).toFloat();
auto bounds = Rectangle<float> (height, height)
.withCentre (centre);
diff --git a/Plugin/Source/Processors/Compression/CompressionProcessor.cpp b/Plugin/Source/Processors/Compression/CompressionProcessor.cpp
@@ -44,7 +44,7 @@ template <typename T>
inline T compressionDB (const T& xDB, float dbPlus)
{
using namespace chowdsp::SIMDUtils;
- CHOWDSP_USING_XSIMD_STD (log)
+ CHOWDSP_USING_XSIMD_STD (log);
if (dbPlus <= 0.0f)
return (T) dbPlus;
diff --git a/Plugin/Source/Processors/Loss_Effects/FIRFilter.h b/Plugin/Source/Processors/Loss_Effects/FIRFilter.h
@@ -5,7 +5,7 @@
#if JUCE_MAC || JUCE_IOS
#define Point CarbonDummyPointName
#define Component CarbonDummyCompName
-#include <Accelerate/Accelerate.h>
+//#include <Accelerate/Accelerate.h>
#undef Point
#undef Component
#endif
@@ -47,7 +47,7 @@ public:
#if JUCE_MAC || JUCE_IOS
y = 0.0f;
- vDSP_dotpr (z.data() + zPtr, 1, h.data(), 1, &y, order); // use Acclerate inner product (if available)
+ //vDSP_dotpr (z.data() + zPtr, 1, h.data(), 1, &y, order); // use Acclerate inner product (if available)
#else
y = std::inner_product (z.data() + zPtr, z.data() + zPtr + order, h.data(), 0.0f); // comput inner product
#endif
diff --git a/Plugin/modules/CMakeLists.txt b/Plugin/modules/CMakeLists.txt
@@ -26,6 +26,7 @@ target_link_libraries(juce_plugin_modules
juce::juce_audio_utils
juce::juce_audio_plugin_client
chowdsp::chowdsp_dsp_utils
+ chowdsp::chowdsp_sources
chowdsp::chowdsp_plugin_base
chowdsp::chowdsp_plugin_utils
chowdsp::chowdsp_presets