Add BOOST, 3D depth, and gradient-angle knobs

- BOOST: global display level multiplier (0.75 - 2.5, 1.0 default)
- 3D: pseudo-3D bevel/shading on bars, LEDs, peaks and curve (0 = flat)
- G-ANG: 3D gradient angle (-180 - 180, 0 = top-lit)
- Apply CURVING rounded corners to bars and peaks in BAR mode
This commit is contained in:
Armin 2026-08-14 03:38:09 +02:00
commit aeb4b83281
7 changed files with 142 additions and 18 deletions

View file

@ -41,6 +41,9 @@ BeamgridAudioProcessorEditor::BeamgridAudioProcessorEditor (BeamgridAudioProcess
setupKnob (gridfadeSlider, "");
setupKnob (curvingSlider, "");
setupKnob (tiltSlider, "");
setupKnob (boostSlider, "");
setupKnob (depth3dSlider, "");
setupKnob (gradangleSlider, "");
barsSlider.setNumDecimalPlacesToDisplay (0);
modeSlider.setNumDecimalPlacesToDisplay (0);
ledsSlider.setNumDecimalPlacesToDisplay (0);
@ -110,6 +113,21 @@ BeamgridAudioProcessorEditor::BeamgridAudioProcessorEditor (BeamgridAudioProcess
tiltLabel.setColour (juce::Label::textColourId, juce::Colours::lightgrey);
addAndMakeVisible (tiltLabel);
boostLabel.setText ("BOOST", juce::dontSendNotification);
boostLabel.setJustificationType (juce::Justification::centred);
boostLabel.setColour (juce::Label::textColourId, juce::Colours::lightgrey);
addAndMakeVisible (boostLabel);
depth3dLabel.setText ("3D", juce::dontSendNotification);
depth3dLabel.setJustificationType (juce::Justification::centred);
depth3dLabel.setColour (juce::Label::textColourId, juce::Colours::lightgrey);
addAndMakeVisible (depth3dLabel);
gradangleLabel.setText ("G-ANG", juce::dontSendNotification);
gradangleLabel.setJustificationType (juce::Justification::centred);
gradangleLabel.setColour (juce::Label::textColourId, juce::Colours::lightgrey);
addAndMakeVisible (gradangleLabel);
scaleBox.addItemList (juce::StringArray ("75%", "100%", "150%", "200%", "250%", "300%"), 1);
scaleBox.setSelectedItemIndex (1); // 100%
scaleBox.setColour (juce::ComboBox::backgroundColourId, juce::Colours::black.brighter (0.15f));
@ -167,6 +185,12 @@ BeamgridAudioProcessorEditor::BeamgridAudioProcessorEditor (BeamgridAudioProcess
processorRef.getParametersState(), "curving", curvingSlider);
tiltAttachment = std::make_unique<juce::AudioProcessorValueTreeState::SliderAttachment>(
processorRef.getParametersState(), "tilt", tiltSlider);
boostAttachment = std::make_unique<juce::AudioProcessorValueTreeState::SliderAttachment>(
processorRef.getParametersState(), "boost", boostSlider);
depth3dAttachment = std::make_unique<juce::AudioProcessorValueTreeState::SliderAttachment>(
processorRef.getParametersState(), "depth3d", depth3dSlider);
gradangleAttachment = std::make_unique<juce::AudioProcessorValueTreeState::SliderAttachment>(
processorRef.getParametersState(), "gradangle", gradangleSlider);
// Set these AFTER the attachments: SliderAttachment installs its own
// textFromValueFunction, so assigning afterwards makes ours take effect.
@ -259,7 +283,7 @@ void BeamgridAudioProcessorEditor::resized()
const int margin = 24;
const int gap = 14;
const int count = 13;
const int count = 16;
const int titleW = 180;
// Available width for the knob row (leave room on the right for the title).
@ -289,6 +313,9 @@ void BeamgridAudioProcessorEditor::resized()
{ gridfadeSlider, gridfadeLabel },
{ curvingSlider, curvingLabel },
{ tiltSlider, tiltLabel },
{ boostSlider, boostLabel },
{ depth3dSlider, depth3dLabel },
{ gradangleSlider, gradangleLabel },
};
const juce::Font labelFont (juce::FontOptions (11.0f));