AnalogTapeModel

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

ModulatableSlider.h (2783B)


      1 #pragma once
      2 
      3 #include <JuceHeader.h>
      4 
      5 class ModulatableSlider : public foleys::AutoOrientationSlider,
      6                           public Timer
      7 {
      8 public:
      9     ModulatableSlider() = default;
     10 
     11     void paint (Graphics& g) override;
     12     void attachToParameter (juce::RangedAudioParameter* param);
     13     double getModulatedPosition();
     14 
     15     void mouseDown (const MouseEvent& e) override;
     16     virtual juce::PopupMenu getContextMenu();
     17 
     18     using PluginEditorCallback = std::function<juce::AudioProcessorEditor*()>;
     19     void setPluginEditorCallback (PluginEditorCallback&& newCallback);
     20 
     21 private:
     22     void timerCallback() override;
     23     void drawRotarySlider (juce::Graphics& g, int x, int y, int width, int height, float sliderPos, float modSliderPos);
     24     void drawLinearSlider (juce::Graphics& g, int x, int y, int width, int height, float sliderPos, float modSliderPos);
     25 
     26     std::unique_ptr<juce::SliderParameterAttachment> attachment;
     27     chowdsp::FloatParameter* modParameter = nullptr;
     28     PluginEditorCallback pluginEditorCallback = nullptr;
     29 
     30     double modulatedValue = 0.0;
     31 
     32     struct KnobAssets
     33     {
     34         std::unique_ptr<Drawable> knob = Drawable::createFromImageData (chowdsp_BinaryData::knob_svg, chowdsp_BinaryData::knob_svgSize);
     35         std::unique_ptr<Drawable> pointer = Drawable::createFromImageData (chowdsp_BinaryData::pointer_svg, chowdsp_BinaryData::pointer_svgSize);
     36     };
     37     SharedResourcePointer<KnobAssets> sharedAssets;
     38 
     39     JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ModulatableSlider)
     40 };
     41 
     42 //====================================================================
     43 class ModSliderItem : public foleys::GuiItem
     44 {
     45 public:
     46     FOLEYS_DECLARE_GUI_FACTORY (ModSliderItem)
     47 
     48     static const juce::Identifier pSliderType;
     49     static const juce::StringArray pSliderTypes;
     50 
     51     static const juce::Identifier pSliderTextBox;
     52     static const juce::StringArray pTextBoxPositions;
     53     static const juce::Identifier pSliderTextBoxWidth;
     54     static const juce::Identifier pSliderTextBoxHeight;
     55 
     56     static const juce::Identifier pValue;
     57     static const juce::Identifier pMinValue;
     58     static const juce::Identifier pMaxValue;
     59 
     60     ModSliderItem (foleys::MagicGUIBuilder& builder, const juce::ValueTree& node);
     61 
     62     void update() override;
     63     void resized() override;
     64 
     65     [[nodiscard]] std::vector<foleys::SettableProperty> getSettableProperties() const override;
     66     juce::String getControlledParameterID (juce::Point<int>) override;
     67     juce::Component* getWrappedComponent() override;
     68 
     69     void mouseDrag (const juce::MouseEvent& e) override;
     70 
     71 private:
     72     ModulatableSlider slider;
     73 
     74     int defaultHeight = 0;
     75     int sliderTextBoxHeight = 0;
     76     juce::Slider::TextEntryBoxPosition textBoxPosition;
     77 
     78     JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ModSliderItem)
     79 };