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 };