AnalogTapeModel

Physical modelling signal processing for analog tape recording
Log | Files | Refs | Submodules | README | LICENSE

commit 965ecb9b6dbb58076c5442cbd2ab9c344b25e684
parent bd1a9cc42413c4f764c5b66c47ff03ab36427629
Author: jatinchowdhury18 <jatinchowdhury18@gmail.com>
Date:   Sat, 10 Apr 2021 07:47:50 -0700

Allow vertical scrolling for main gui section on small screens (#178)

* Re-organize UI files

* Allow vertical scrolling for main gui section on small screens

* {Apply clang-format}

* Better GUI layout for iOS

Co-authored-by: jatinchowdhury18 <jatinchowdhury18@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Diffstat:
MPlugin/CMakeLists.txt | 2++
MPlugin/Source/GUI/Assets/gui_ios.xml | 8++++----
MPlugin/Source/GUI/CMakeLists.txt | 12+++++++-----
DPlugin/Source/GUI/MixGroupViz.h | 46----------------------------------------------
RPlugin/Source/GUI/OnOffManager.cpp -> Plugin/Source/GUI/OnOff/OnOffManager.cpp | 0
RPlugin/Source/GUI/OnOffManager.h -> Plugin/Source/GUI/OnOff/OnOffManager.h | 0
RPlugin/Source/GUI/PowerButton.cpp -> Plugin/Source/GUI/OnOff/PowerButton.cpp | 0
RPlugin/Source/GUI/PowerButton.h -> Plugin/Source/GUI/OnOff/PowerButton.h | 0
APlugin/Source/GUI/ScrollView.h | 50++++++++++++++++++++++++++++++++++++++++++++++++++
RPlugin/Source/GUI/LightMeter.cpp -> Plugin/Source/GUI/Visualizers/LightMeter.cpp | 0
RPlugin/Source/GUI/LightMeter.h -> Plugin/Source/GUI/Visualizers/LightMeter.h | 0
RPlugin/Source/GUI/MixGroupViz.cpp -> Plugin/Source/GUI/Visualizers/MixGroupViz.cpp | 0
APlugin/Source/GUI/Visualizers/MixGroupViz.h | 46++++++++++++++++++++++++++++++++++++++++++++++
RPlugin/Source/GUI/TapeScope.cpp -> Plugin/Source/GUI/Visualizers/TapeScope.cpp | 0
RPlugin/Source/GUI/TapeScope.h -> Plugin/Source/GUI/Visualizers/TapeScope.h | 0
MPlugin/Source/Headless/Benchmarks.cpp | 4++--
MPlugin/Source/PluginProcessor.cpp | 6++++--
MPlugin/Source/PluginProcessor.h | 4++--
MPlugin/Source/Processors/Timing_Effects/WowFlutterProcessor.cpp | 2+-
19 files changed, 118 insertions(+), 62 deletions(-)

diff --git a/Plugin/CMakeLists.txt b/Plugin/CMakeLists.txt @@ -19,6 +19,8 @@ if(IOS) ProductName "CHOWTapeModel" ICON_BIG Source/GUI/Assets/logo.png MICROPHONE_PERMISSION_ENABLED TRUE + IPHONE_SCREEN_ORIENTATIONS UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight + IPAD_SCREEN_ORIENTATIONS UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight ) else() juce_add_plugin(CHOWTapeModel diff --git a/Plugin/Source/GUI/Assets/gui_ios.xml b/Plugin/Source/GUI/Assets/gui_ios.xml @@ -30,12 +30,12 @@ <View id="root" resizable="1" resize-corner="1" flex-direction="column" padding="0" width="580" height="580" background-color="FF8B3232" background-image="Background_svg" image-placement="stretch"> - <View max-height="100" padding="0" margin="0" background-color=""> + <View max-height="80" padding="0" margin="0" background-color=""> <View margin="2" padding="" background-color="00000000" flex-direction="column" flex-grow="0.75"> <View flex-grow="0.333" background-color="00000000"/> <TitleComp background-color="00000000" title="Chow Tape Model" font="28" - padding="3" flex-grow="1.0"/> + padding="1" flex-grow="1.0"/> <InfoComp background-color="00000000" text1="FFEAA92C" flex-grow="0.7" padding="0" margin="5" border=""/> <View background-color="00000000" flex-grow="0.33"/> @@ -43,7 +43,7 @@ <Plot source="scope" plot-color="FFEAA92C" padding="0" background-color="33000000" plot-decay="0.0" plot-fill-color="FFFFFFFF"/> </View> - <View padding="0" margin="" background-color="" lookAndFeel=""> + <ScrollView padding="0" margin="1" background-color="00000000" lookAndFeel="MyLNF"> <View display="tabbed" padding="0" background-color="FF31323A" lookAndFeel="MyLNF"> <View flex-direction="column" tab-color="" background-color="FF31323A" padding="0" tab-caption="Gain"> @@ -229,7 +229,7 @@ </View> </View> </View> - <View max-height="50" margin="0" padding="0" background-color="FF31323A" + <View max-height="40" min-height="20" margin="0" padding="0" background-color="FF31323A" flex-grow="0.1"> <View background-color="00000000" flex-grow="0.1"/> <ComboBox caption="Oversampling" parameter="os" class="Slider" caption-size="0" diff --git a/Plugin/Source/GUI/CMakeLists.txt b/Plugin/Source/GUI/CMakeLists.txt @@ -1,12 +1,14 @@ target_sources(CHOWTapeModel PRIVATE AutoUpdating.cpp - LightMeter.cpp - MixGroupViz.cpp MyLNF.cpp - OnOffManager.cpp - PowerButton.cpp - TapeScope.cpp TitleComp.cpp TooltipComp.cpp WowFlutterMenu.cpp + + OnOff/OnOffManager.cpp + OnOff/PowerButton.cpp + + Visualizers/LightMeter.cpp + Visualizers/MixGroupViz.cpp + Visualizers/TapeScope.cpp ) diff --git a/Plugin/Source/GUI/MixGroupViz.h b/Plugin/Source/GUI/MixGroupViz.h @@ -1,46 +0,0 @@ -#ifndef MIXGROUPVIZ_H_INCLUDED -#define MIXGROUPVIZ_H_INCLUDED - -#include "../MixGroups/MixGroupsController.h" -#include <JuceHeader.h> - -class MixGroupViz : public Component, - private AudioProcessorParameter::Listener -{ -public: - MixGroupViz (AudioProcessorParameter* mixGroupParam); - ~MixGroupViz(); - - void parameterValueChanged (int parameterIndex, float newValue) override; - void parameterGestureChanged (int, bool) override {} - void paint (Graphics& g) override; - void setMixGroupColour (int mixGroupIdx); - -private: - Colour circleColour; - AudioProcessorParameter* mixGroupParam; - - JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MixGroupViz) -}; - -class MixGroupVizItem : public foleys::GuiItem -{ -public: - FOLEYS_DECLARE_GUI_FACTORY (MixGroupVizItem) - - MixGroupVizItem (foleys::MagicGUIBuilder& builder, const ValueTree& node) : foleys::GuiItem (builder, node), - viz (builder.getMagicState().getParameter (MixGroupsConstants::mixGroupParamID)) - { - addAndMakeVisible (viz); - } - - void update() override { viz.repaint(); } - Component* getWrappedComponent() override { return &viz; } - -private: - MixGroupViz viz; - - JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MixGroupVizItem) -}; - -#endif // !MIXGROUPVIZ_H_INCLUDED diff --git a/Plugin/Source/GUI/OnOffManager.cpp b/Plugin/Source/GUI/OnOff/OnOffManager.cpp diff --git a/Plugin/Source/GUI/OnOffManager.h b/Plugin/Source/GUI/OnOff/OnOffManager.h diff --git a/Plugin/Source/GUI/PowerButton.cpp b/Plugin/Source/GUI/OnOff/PowerButton.cpp diff --git a/Plugin/Source/GUI/PowerButton.h b/Plugin/Source/GUI/OnOff/PowerButton.h diff --git a/Plugin/Source/GUI/ScrollView.h b/Plugin/Source/GUI/ScrollView.h @@ -0,0 +1,50 @@ +#pragma once + +class ScrollView : public foleys::GuiItem +{ +public: + FOLEYS_DECLARE_GUI_FACTORY (ScrollView) + + ScrollView (foleys::MagicGUIBuilder& builder, ValueTree node) + : foleys::GuiItem (builder, node), + baseView (builder, node) + { + addAndMakeVisible (viewport); + addAndMakeVisible (baseView); + viewport.setViewedComponent (&baseView, false); + + viewport.setScrollBarsShown (true, false); + viewport.getVerticalScrollBar().setColour (ScrollBar::thumbColourId, Colour (0xFFEAA92C).withAlpha (0.7f)); + viewport.setScrollBarThickness (10); + } + + void resized() override + { + viewport.setBounds (getLocalBounds()); + baseView.setSize (getWidth() - viewport.getScrollBarThickness(), jmax (420, getHeight())); + } + + void update() override + { + baseView.getConfigNode() = configNode.createCopy(); + baseView.update(); + } + + bool isContainer() const override { return true; } + + void createSubComponents() override + { + baseView.getConfigNode() = configNode.createCopy(); + baseView.createSubComponents(); + } + + Component* getWrappedComponent() override { return &viewport; } + + foleys::GuiItem* findGuiItemWithId (const String& name) override { return baseView.findGuiItemWithId (name); } + +private: + Viewport viewport; + foleys::Container baseView; + + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ScrollView) +}; diff --git a/Plugin/Source/GUI/LightMeter.cpp b/Plugin/Source/GUI/Visualizers/LightMeter.cpp diff --git a/Plugin/Source/GUI/LightMeter.h b/Plugin/Source/GUI/Visualizers/LightMeter.h diff --git a/Plugin/Source/GUI/MixGroupViz.cpp b/Plugin/Source/GUI/Visualizers/MixGroupViz.cpp diff --git a/Plugin/Source/GUI/Visualizers/MixGroupViz.h b/Plugin/Source/GUI/Visualizers/MixGroupViz.h @@ -0,0 +1,46 @@ +#ifndef MIXGROUPVIZ_H_INCLUDED +#define MIXGROUPVIZ_H_INCLUDED + +#include "../../MixGroups/MixGroupsController.h" +#include <JuceHeader.h> + +class MixGroupViz : public Component, + private AudioProcessorParameter::Listener +{ +public: + MixGroupViz (AudioProcessorParameter* mixGroupParam); + ~MixGroupViz(); + + void parameterValueChanged (int parameterIndex, float newValue) override; + void parameterGestureChanged (int, bool) override {} + void paint (Graphics& g) override; + void setMixGroupColour (int mixGroupIdx); + +private: + Colour circleColour; + AudioProcessorParameter* mixGroupParam; + + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MixGroupViz) +}; + +class MixGroupVizItem : public foleys::GuiItem +{ +public: + FOLEYS_DECLARE_GUI_FACTORY (MixGroupVizItem) + + MixGroupVizItem (foleys::MagicGUIBuilder& builder, const ValueTree& node) : foleys::GuiItem (builder, node), + viz (builder.getMagicState().getParameter (MixGroupsConstants::mixGroupParamID)) + { + addAndMakeVisible (viz); + } + + void update() override { viz.repaint(); } + Component* getWrappedComponent() override { return &viz; } + +private: + MixGroupViz viz; + + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MixGroupVizItem) +}; + +#endif // !MIXGROUPVIZ_H_INCLUDED diff --git a/Plugin/Source/GUI/TapeScope.cpp b/Plugin/Source/GUI/Visualizers/TapeScope.cpp diff --git a/Plugin/Source/GUI/TapeScope.h b/Plugin/Source/GUI/Visualizers/TapeScope.h diff --git a/Plugin/Source/Headless/Benchmarks.cpp b/Plugin/Source/Headless/Benchmarks.cpp @@ -5,7 +5,7 @@ namespace { constexpr double pluginSampleRate = 44100.0; constexpr int samplesPerBlock = 256; -constexpr int numChannels = 2; +constexpr int nChs = 2; } // namespace Benchmarks::Benchmarks() @@ -69,7 +69,7 @@ double timeAudioProcess (AudioProcessor* plugin, AudioBuffer<float>& audio, cons auto curBlockSize = jmin (totalNumSamples, blockSize); totalNumSamples -= curBlockSize; - AudioBuffer<float> curBuff (audio.getArrayOfWritePointers(), numChannels, samplePtr, curBlockSize); + AudioBuffer<float> curBuff (audio.getArrayOfWritePointers(), nChs, samplePtr, curBlockSize); plugin->processBlock (curBuff, midi); samplePtr += curBlockSize; diff --git a/Plugin/Source/PluginProcessor.cpp b/Plugin/Source/PluginProcessor.cpp @@ -9,10 +9,11 @@ */ #include "PluginProcessor.h" -#include "GUI/MixGroupViz.h" -#include "GUI/PowerButton.h" +#include "GUI/OnOff/PowerButton.h" +#include "GUI/ScrollView.h" #include "GUI/TitleComp.h" #include "GUI/TooltipComp.h" +#include "GUI/Visualizers/MixGroupViz.h" #include "GUI/WowFlutterMenu.h" namespace @@ -316,6 +317,7 @@ AudioProcessorEditor* ChowtapeModelAudioProcessor::createEditor() } #if JUCE_IOS + builder->registerFactory ("ScrollView", &ScrollView::factory); auto* editor = new foleys::MagicPluginEditor (magicState, BinaryData::gui_ios_xml, BinaryData::gui_ios_xmlSize, std::move (builder)); #else auto* editor = new foleys::MagicPluginEditor (magicState, BinaryData::gui_xml, BinaryData::gui_xmlSize, std::move (builder)); diff --git a/Plugin/Source/PluginProcessor.h b/Plugin/Source/PluginProcessor.h @@ -12,8 +12,8 @@ #include "GUI/AutoUpdating.h" #include "GUI/MyLNF.h" -#include "GUI/OnOffManager.h" -#include "GUI/TapeScope.h" +#include "GUI/OnOff/OnOffManager.h" +#include "GUI/Visualizers/TapeScope.h" #include "MixGroups/MixGroupsController.h" #include "Presets/PresetManager.h" #include "Processors/Chew/ChewProcessor.h" diff --git a/Plugin/Source/Processors/Timing_Effects/WowFlutterProcessor.cpp b/Plugin/Source/Processors/Timing_Effects/WowFlutterProcessor.cpp @@ -1,5 +1,5 @@ #include "WowFlutterProcessor.h" -#include "../../GUI/LightMeter.h" +#include "../../GUI/Visualizers/LightMeter.h" WowFlutterProcessor::WowFlutterProcessor (AudioProcessorValueTreeState& vts) {