NeuralAmpModelerPlugin

Plugin for Neural Amp Modeler
Log | Files | Refs | Submodules | README | LICENSE

commit 7f15c11027d1f13ee4db91cc154ed8c06e8f3ad5
parent d3ea05bd471d6bd57b01d9514193034228377ad1
Author: Oli Larkin <olilarkin@googlemail.com>
Date:   Sun,  7 May 2023 22:33:29 +0200

Cleanup IR bypass code, removing overlay control and using groups (#235)

* Implement the IR Toggle in a cleaner way using an IControl group

* Add an IControl group for EQ_KNOBS and disable them in a one-liner

* Allow controls to receive mouse events when disabled
Diffstat:
MNeuralAmpModeler/NeuralAmpModeler.cpp | 54+++++++++++++++++++++---------------------------------
1 file changed, 21 insertions(+), 33 deletions(-)

diff --git a/NeuralAmpModeler/NeuralAmpModeler.cpp b/NeuralAmpModeler/NeuralAmpModeler.cpp @@ -208,7 +208,7 @@ NeuralAmpModeler::NeuralAmpModeler(const InstanceInfo& info) auto closeButtonSVG = pGraphics->LoadSVG(CLOSE_BUTTON_FN); auto rightArrowSVG = pGraphics->LoadSVG(RIGHT_ARROW_FN); auto leftArrowSVG = pGraphics->LoadSVG(LEFT_ARROW_FN); - const IBitmap irSwitch = pGraphics->LoadBitmap((TOGGLEIR_FN), 2, true); + const IBitmap irSwitchBitmap = pGraphics->LoadBitmap((TOGGLEIR_FN), 2, true); const IBitmap switchBitmap = pGraphics->LoadBitmap((TOGGLE_FN), true); const IBitmap switchHandleBitmap = pGraphics->LoadBitmap((TOGGLE_HANDLE_FN), true); const IBitmap knobRotateBitmap = pGraphics->LoadBitmap(KNOB_FN); @@ -262,7 +262,7 @@ NeuralAmpModeler::NeuralAmpModeler(const InstanceInfo& info) // Area for IR bypass toggle const float irBypassToggleX = 46.f; const float irBypassToggleY = 343.f; - const IRECT irBypassToggleArea = IRECT(irBypassToggleX, irBypassToggleY, irSwitch); + const IRECT irBypassToggleArea = IRECT(irBypassToggleX, irBypassToggleY, irSwitchBitmap); // Area for IR bypass toggle const float dimPanelOpacity = 0.75f; @@ -372,8 +372,6 @@ NeuralAmpModeler::NeuralAmpModeler(const InstanceInfo& info) // Graphics objects for what NAM is loaded const float iconWidth = fileHeight; // Square icon - pGraphics->AttachControl( - new IVPanelControl(modelArea, "", style.WithDrawFrame(false).WithColor(kFG, PluginColors::NAM_0))); pGraphics->AttachControl(new IRolloverSVGButtonControl( modelArea.GetFromLeft(iconWidth).GetPadded(-6.f).GetTranslated(-1.f, 1.f), loadNAM, fileSVG)); pGraphics->AttachControl( @@ -384,17 +382,15 @@ NeuralAmpModeler::NeuralAmpModeler(const InstanceInfo& info) style.WithDrawFrame(false).WithValueText(style.valueText.WithSize(16.f).WithVAlign(EVAlign::Middle))), kCtrlTagModelName); // IR - pGraphics->AttachControl( - new IVPanelControl(irArea, "", style.WithDrawFrame(false).WithColor(kFG, PluginColors::NAM_0))); pGraphics->AttachControl(new IRolloverSVGButtonControl( - irArea.GetFromLeft(iconWidth).GetPadded(-6.f).GetTranslated(-1.f, 1.f), loadIR, fileSVG)); + irArea.GetFromLeft(iconWidth).GetPadded(-6.f).GetTranslated(-1.f, 1.f), loadIR, fileSVG), -1, "IR_CONTROLS"); pGraphics->AttachControl( - new IRolloverSVGButtonControl(irArea.GetFromRight(iconWidth).GetPadded(-8.f), ClearIR, closeButtonSVG)); + new IRolloverSVGButtonControl(irArea.GetFromRight(iconWidth).GetPadded(-8.f), ClearIR, closeButtonSVG), -1, "IR_CONTROLS"); pGraphics->AttachControl( new IVUpdateableLabelControl( irArea.GetReducedFromLeft(iconWidth).GetReducedFromRight(iconWidth), this->mDefaultIRString.Get(), style.WithDrawFrame(false).WithValueText(style.valueText.WithSize(16.f).WithVAlign(EVAlign::Middle))), - kCtrlTagIRName); + kCtrlTagIRName, "IR_CONTROLS"); // TODO all these magic numbers pGraphics->AttachControl(new NamSwitchControl( @@ -417,30 +413,13 @@ NeuralAmpModeler::NeuralAmpModeler(const InstanceInfo& info) // The knobs pGraphics->AttachControl(new NamKnobControl(inputKnobArea, kInputLevel, "", style, knobRotateBitmap)); pGraphics->AttachControl(new NamKnobControl(noiseGateArea, kNoiseGateThreshold, "", style, knobRotateBitmap)); - pGraphics->AttachControl(new NamKnobControl(bassKnobArea, kToneBass, "", style, knobRotateBitmap)); - pGraphics->AttachControl(new NamKnobControl(middleKnobArea, kToneMid, "", style, knobRotateBitmap)); - pGraphics->AttachControl(new NamKnobControl(trebleKnobArea, kToneTreble, "", style, knobRotateBitmap)); + pGraphics->AttachControl(new NamKnobControl(bassKnobArea, kToneBass, "", style, knobRotateBitmap), -1, "EQ_KNOBS"); + pGraphics->AttachControl(new NamKnobControl(middleKnobArea, kToneMid, "", style, knobRotateBitmap), -1, "EQ_KNOBS"); + pGraphics->AttachControl(new NamKnobControl(trebleKnobArea, kToneTreble, "", style, knobRotateBitmap), -1, "EQ_KNOBS"); pGraphics->AttachControl(new NamKnobControl(outputKnobArea, kOutputLevel, "", style, knobRotateBitmap)); // toggle IR on / off - IBSwitchControl* toggleIRactive = new IBSwitchControl(irBypassToggleArea, irSwitch, kIRToggle); - pGraphics->AttachControl(toggleIRactive, kIRToggle); - // dim IR dispaly - pGraphics - ->AttachControl( - new IVPanelControl( - irBypassDimPanel, "", style.WithDrawFrame(false).WithColor(kFG, COLOR_BLACK.WithOpacity(dimPanelOpacity))), - kNoTag, "NAM_OVERLAY") - ->Hide(this->GetParam(kIRToggle)->Value()); - - // Extend the ir toggle action function to set dim panel visible or not - auto setIRdimPanelVisibility = [&, pGraphics, irBypassDimPanel](IControl* pCaller) { - const bool irActive = pCaller->GetValue() > 0; - pGraphics->ForControlInGroup( - "NAM_OVERLAY", [&](IControl* pControl) { irActive ? pControl->Hide(true) : pControl->Hide(false); }); - }; - auto toggleIRactiveAction = [setIRdimPanelVisibility](IControl* pCaller) { setIRdimPanelVisibility(pCaller); }; - toggleIRactive->SetActionFunction(toggleIRactiveAction); + pGraphics->AttachControl(new IBSwitchControl(irBypassToggleArea, irSwitchBitmap, kIRToggle)); // The meters const float meterMin = -90.0f; @@ -519,6 +498,11 @@ NeuralAmpModeler::NeuralAmpModeler(const InstanceInfo& info) 0), kCtrlTagAboutBox) ->Hide(true); + + pGraphics->ForAllControlsFunc([](IControl* pControl){ + pControl->SetMouseEventsWhenDisabled(true); + pControl->SetMouseOverWhenDisabled(true); + }); }; } @@ -696,10 +680,14 @@ void NeuralAmpModeler::OnParamChangeUI(int paramIdx, EParamSource source) { case kNoiseGateActive: pGraphics->GetControlWithParamIdx(kNoiseGateThreshold)->SetDisabled(!active); break; case kEQActive: - pGraphics->GetControlWithParamIdx(kToneBass)->SetDisabled(!active); - pGraphics->GetControlWithParamIdx(kToneMid)->SetDisabled(!active); - pGraphics->GetControlWithParamIdx(kToneTreble)->SetDisabled(!active); + pGraphics->ForControlInGroup("EQ_KNOBS", [active](IControl* pControl){ + pControl->SetDisabled(!active); + }); break; + case kIRToggle: + pGraphics->ForControlInGroup("IR_CONTROLS", [active](IControl* pControl){ + pControl->SetDisabled(!active); + }); default: break; } }