commit 69589426ca52b62e186640fa793b87e88c740f9d
parent d0d5a389413eb1be0229e5181bef7bac211e0aaf
Author: Oli Larkin <olilarkin@googlemail.com>
Date: Tue, 2 May 2023 06:01:21 +0200
Clean up UI for new design (#227)
* Remove the need for inactive spec/lambdas
Using OnParamChangeUI & IControl::SetDisabled()
* Remove unused Tolex resources
* Replace doubled-up knobs with NamKnobControl
Also fix some AttachControl() bugs
* Update iPlug2 submodule
* Add NamSwitchControl and tweak layout
Sliding bitmap switch
* Adjust GREYED_ALPHA for disabled controls
* Disable normalization control when .nam doesn't have loudness
Removed bad control tag, ITextControl for Normalization label and non-thread-safe UI access
Diffstat:
13 files changed, 133 insertions(+), 177 deletions(-)
diff --git a/NeuralAmpModeler/NeuralAmpModeler.cpp b/NeuralAmpModeler/NeuralAmpModeler.cpp
@@ -63,8 +63,66 @@ public:
void OnMsgFromDelegate(int msgTag, int dataSize, const void* pData) { SetStr(reinterpret_cast<const char*>(pData)); }
};
+class NamKnobControl : public IVKnobControl
+ , public IBitmapBase
+{
+public:
+ NamKnobControl(const IRECT& bounds, int paramIdx, const char* label, const IVStyle& style, IBitmap bitmap)
+ : IVKnobControl(bounds, paramIdx, label, style)
+ , IBitmapBase(bitmap)
+ {
+ }
+
+ void DrawWidget(IGraphics& g) override
+ {
+ float widgetRadius = GetRadius();
+ const float cx = mWidgetBounds.MW(), cy = mWidgetBounds.MH();
+ IRECT knobHandleBounds = mWidgetBounds.GetCentredInside((widgetRadius - mTrackToHandleDistance) * 2.f );
+ const float angle = mAngle1 + (static_cast<float>(GetValue()) * (mAngle2 - mAngle1));
+ g.FillEllipse(GetColor(mMouseIsOver ? kX3 : kX1), knobHandleBounds, &mBlend);
+ DrawIndicatorTrack(g, angle, cx, cy, widgetRadius);
+ g.DrawRotatedBitmap(mBitmap, mRECT.MW(), mRECT.MH(), angle);
+ }
+};
+
+class NamSwitchControl : public IVSlideSwitchControl
+ , public IBitmapBase
+{
+public:
+ NamSwitchControl(const IRECT& bounds, int paramIdx, const char* label, const IVStyle& style, IBitmap bitmap, IBitmap handleBitmap)
+ : IVSlideSwitchControl({bounds.L, bounds.T, bitmap}, paramIdx, label, style.WithRoundness(5.f).WithShowLabel(false).WithShowValue(false))
+ , IBitmapBase(bitmap)
+ , mHandleBitmap(handleBitmap)
+ {
+ }
+
+ void DrawWidget(IGraphics& g) override
+ {
+ // OL: arg, pixels :-(
+ if (GetValue() > 0.5f)
+ g.FillRoundRect(GetColor(kFG), mRECT.GetPadded(-2.7f).GetTranslated(0.0, 1.f), 9.f, &mBlend);
+ else
+ g.FillRoundRect(COLOR_BLACK, mRECT.GetPadded(-2.7f).GetTranslated(0.0, 1.f), 9.f, &mBlend);
+
+ DrawTrack(g, mWidgetBounds);
+ DrawHandle(g, mHandleBounds);
+ }
+
+ void DrawTrack(IGraphics& g, const IRECT& filledArea) override
+ {
+ g.DrawBitmap(mBitmap, mRECT, 0, &mBlend);
+ }
+
+ void DrawHandle(IGraphics& g, const IRECT& filledArea) override
+ {
+ g.DrawBitmap(mHandleBitmap, filledArea.GetTranslated(2.0, 3.0), 0, &mBlend);
+ }
+private:
+ IBitmap mHandleBitmap;
+};
+
// Styles
-const IVColorSpec activeColorSpec{
+const IVColorSpec colorSpec{
DEFAULT_BGCOLOR, // Background
PluginColors::NAM_THEMECOLOR, // Foreground
PluginColors::NAM_THEMECOLOR.WithOpacity(0.3f), // Pressed
@@ -73,23 +131,13 @@ const IVColorSpec activeColorSpec{
DEFAULT_SHCOLOR, // Shadow
PluginColors::NAM_THEMECOLOR, // Extra 1
COLOR_RED, // Extra 2 --> color for clipping in meters
- DEFAULT_X3COLOR // Extra 3
-};
-const IVColorSpec inactiveColorSpec{
- DEFAULT_BGCOLOR, // Background
- PluginColors::NAM_THEMEFONTCOLOR.WithOpacity(0.3f), // Foreground
- PluginColors::NAM_THEMECOLOR.WithOpacity(0.3f), // Pressed
- PluginColors::NAM_0, // Frame
- PluginColors::NAM_0, // Highlight
- DEFAULT_SHCOLOR.WithOpacity(0.5f), // Shadow
- PluginColors::NAM_THEMECOLOR.WithOpacity(0.5f), // Extra 1
- COLOR_RED.WithOpacity(0.5f), // Extra 2
- DEFAULT_X3COLOR.WithOpacity(0.5f) // Extra 3
+ PluginColors::NAM_THEMECOLOR.WithContrast(0.1f), // Extra 3
};
+
const IVStyle style =
IVStyle{true, // Show label
true, // Show value
- activeColorSpec,
+ colorSpec,
{DEFAULT_TEXT_SIZE + 3.f, EVAlign::Middle, PluginColors::NAM_THEMEFONTCOLOR}, // Knob label text5
{DEFAULT_TEXT_SIZE + 3.f, EVAlign::Bottom, PluginColors::NAM_THEMEFONTCOLOR}, // Knob value text
DEFAULT_HIDE_CURSOR,
@@ -101,7 +149,6 @@ const IVStyle style =
DEFAULT_SHADOW_OFFSET,
DEFAULT_WIDGET_FRAC,
DEFAULT_WIDGET_ANGLE};
-const IVStyle styleInactive = style.WithColors(inactiveColorSpec);
NeuralAmpModeler::NeuralAmpModeler(const InstanceInfo& info)
: Plugin(info, MakeConfig(kNumParams, kNumPresets))
@@ -114,8 +161,6 @@ NeuralAmpModeler::NeuralAmpModeler(const InstanceInfo& info)
, mStagedIR(nullptr)
, mFlagRemoveNAM(false)
, mFlagRemoveIR(false)
-, mFlagSetDisableNormalization(false)
-, mSetDisableNormalization(false)
, mDefaultNAMString("Select model...")
, mDefaultIRString("Select IR...")
, mToneBass()
@@ -159,7 +204,8 @@ 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 switchBitmap = pGraphics->LoadBitmap((TOGGLE_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);
pGraphics->LoadFont("Roboto-Regular", ROBOTO_FN);
const IRECT b = pGraphics->GetBounds();
@@ -193,21 +239,19 @@ NeuralAmpModeler::NeuralAmpModeler(const InstanceInfo& info)
const float ngAreaHeight = toggleHeight;
const float ngAreaHalfWidth = 0.5f * noiseGateArea.W();
const IRECT ngToggleArea = noiseGateArea.GetFromBottom(ngAreaHeight)
- .GetTranslated(0.0f, ngAreaHeight + singleKnobPad - 14.f)
- .GetMidHPadded(ngAreaHalfWidth);
-
+ .GetTranslated(-10.f, ngAreaHeight + singleKnobPad - 14.f);
// Area for EQ toggle
const float eqAreaHeight = toggleHeight;
const float eqAreaHalfWidth = 0.5f * middleKnobArea.W();
const IRECT eqToggleArea = middleKnobArea.GetFromBottom(eqAreaHeight)
- .GetTranslated(0.0f, eqAreaHeight + singleKnobPad - 14.f)
+ .GetTranslated(-10.f, eqAreaHeight + singleKnobPad - 14.f)
.GetMidHPadded(eqAreaHalfWidth);
// Area for output normalization toggle
const float outNormAreaHeight = toggleHeight;
const float outNormAreaHalfWidth = 0.5f * outputKnobArea.W();
const IRECT outNormToggleArea = outputKnobArea.GetFromBottom(outNormAreaHeight)
- .GetTranslated(0.0f, outNormAreaHeight + singleKnobPad)
+ .GetTranslated(-10.f, outNormAreaHeight + singleKnobPad - 14.f)
.GetMidHPadded(outNormAreaHalfWidth);
// Areas for model and IR
@@ -229,17 +273,6 @@ NeuralAmpModeler::NeuralAmpModeler(const InstanceInfo& info)
.GetMidVPadded(meterHalfHeight)
.GetTranslated(allKnobsPad + 18.f, 0.0f);
- // auto tolexPNG = pGraphics->LoadBitmap(TOLEX_FN);
- // pGraphics->AttachControl(new IBitmapControl(pGraphics->GetBounds(),
- // tolexPNG, kNoParameter))->SetBlend(IBlend(EBlend::Default, 0.5));
- // The background inside the outermost border
- // pGraphics->AttachControl(
- // new IVPanelControl(mainArea, "", style.WithColor(kFG, PluginColors::NAM_1))); // .WithContrast(-0.75)
- // pGraphics->AttachControl(
- // new IVLabelControl(titleLabel, "Neural Amp Modeler",
- // style.WithDrawFrame(false).WithValueText({30, EAlign::Center,
- // PluginColors::NAM_THEMEFONTCOLOR})));
-
auto themeBG = pGraphics->LoadBitmap(EH_SKIN_FN);
pGraphics->AttachControl(new IBitmapControl(pGraphics->GetBounds(), themeBG, kNoParameter))
->SetBlend(IBlend(EBlend::Default, 1.0));
@@ -349,94 +382,17 @@ NeuralAmpModeler::NeuralAmpModeler(const InstanceInfo& info)
style.WithDrawFrame(false).WithValueText(style.valueText.WithSize(16.f).WithVAlign(EVAlign::Middle))),
kCtrlTagIRName);
- // NG toggle
- // underlaying background in theme color for ON state
- pGraphics->AttachControl(
- new IVPanelControl(ngToggleArea.GetPadded(-12.f).GetTranslated(2.f, 10.0f), "",
- style.WithDrawFrame(false).WithColor(kFG, PluginColors::NAM_THEMECOLOR.WithOpacity(0.9f))));
- IBSwitchControl* noiseGateSlider =
- new IBSwitchControl(ngToggleArea.GetFromTop(60.f).GetPadded(-20.f), switchBitmap, kNoiseGateActive);
- pGraphics->AttachControl(noiseGateSlider);
- // Tone stack toggle
- pGraphics->AttachControl(
- new IVPanelControl(eqToggleArea.GetPadded(-12.f).GetTranslated(2.f, 10.0f), "",
- style.WithDrawFrame(false).WithColor(kFG, PluginColors::NAM_THEMECOLOR.WithOpacity(0.9f))));
- IBSwitchControl* toneStackSlider =
- new IBSwitchControl(eqToggleArea.GetFromTop(60.f).GetPadded(-20.f), switchBitmap, kEQActive);
- pGraphics->AttachControl(toneStackSlider);
-
- // Normalisation toggle
- pGraphics->AttachControl(
- new IVPanelControl(outNormToggleArea.GetPadded(-12.f).GetTranslated(2.0f, -4.0f), "", style.WithDrawFrame(false)),
- kOutNormPanel);
- IBSwitchControl* outputNormSlider =
- new IBSwitchControl(outNormToggleArea.GetFromTop(32.f).GetPadded(-20.f), switchBitmap, kOutNorm);
- pGraphics->AttachControl(outputNormSlider, kOutNorm);
- pGraphics->AttachControl(new ITextControl(outNormToggleArea.GetFromTop(70.f), "Normalize", style.labelText));
+ pGraphics->AttachControl(new NamSwitchControl(ngToggleArea.GetFromTop(60.f).GetPadded(-20.f), kNoiseGateActive, "", style, switchBitmap, switchHandleBitmap));
+ pGraphics->AttachControl(new NamSwitchControl(eqToggleArea.GetFromTop(60.f).GetPadded(-20.f), kEQActive, "", style, switchBitmap, switchHandleBitmap));
+ pGraphics->AttachControl(new NamSwitchControl(outNormToggleArea.GetFromTop(32.f).GetPadded(-20.f), kOutNorm, "", style, switchBitmap, switchHandleBitmap), kCtrlTagOutNorm);
// The knobs
- // Input
- pGraphics->AttachControl(new IVKnobControl(inputKnobArea, kInputLevel, "", style));
- pGraphics->AttachControl(
- new IBKnobRotaterControl(inputKnobArea, knobRotateBitmap, kInputLevel), kNoTag, "kInputLevel");
- // Noise gate
- const bool noiseGateIsActive = this->GetParam(kNoiseGateActive)->Value();
- const IVStyle noiseGateInitialStyle = noiseGateIsActive ? style : styleInactive;
- IVKnobControl* noiseGateControl = new IVKnobControl(noiseGateArea, kNoiseGateThreshold, "", noiseGateInitialStyle);
- pGraphics->AttachControl(noiseGateControl);
- pGraphics->AttachControl(
- new IBKnobRotaterControl(noiseGateArea, knobRotateBitmap, kNoiseGateThreshold), kNoTag, "kNoiseGateThreshold");
- // Tone stack
- const bool toneStackIsActive = this->GetParam(kEQActive)->Value();
- const IVStyle toneStackInitialStyle = toneStackIsActive ? style : styleInactive;
- IVKnobControl* bassControl = new IVKnobControl(bassKnobArea, kToneBass, "", toneStackInitialStyle);
- IVKnobControl* middleControl = new IVKnobControl(middleKnobArea, kToneMid, "", toneStackInitialStyle);
- IVKnobControl* trebleControl = new IVKnobControl(trebleKnobArea, kToneTreble, "", toneStackInitialStyle);
- pGraphics->AttachControl(bassControl);
- pGraphics->AttachControl(middleControl);
- pGraphics->AttachControl(trebleControl);
- pGraphics->AttachControl(new IBKnobRotaterControl(bassKnobArea, knobRotateBitmap, kToneBass), kNoTag, "kToneBass");
- pGraphics->AttachControl(new IBKnobRotaterControl(middleKnobArea, knobRotateBitmap, kToneMid), kNoTag, "kToneMid");
- pGraphics->AttachControl(
- new IBKnobRotaterControl(trebleKnobArea, knobRotateBitmap, kToneTreble), kNoTag, "kToneTreble");
- // Output
- pGraphics->AttachControl(new IVKnobControl(outputKnobArea, kOutputLevel, "", style));
- pGraphics->AttachControl(
- new IBKnobRotaterControl(outputKnobArea, knobRotateBitmap, kOutputLevel), kNoTag, "kOutputLevel");
-
- // Extend the noise gate action function to set the style of its knob
- auto setNoiseGateKnobStyles = [&, pGraphics, noiseGateControl](IControl* pCaller) {
- const bool noiseGateActive = pCaller->GetValue() > 0;
- const IVStyle noiseGateStyle = noiseGateActive ? style : styleInactive;
- noiseGateControl->SetStyle(noiseGateStyle);
- noiseGateControl->SetDirty(false);
- };
- auto defaultNoiseGateSliderAction = noiseGateSlider->GetActionFunction();
- // hacky attempt to fix IBSwitchControl action function
- auto noiseGateAction = [/* defaultNoiseGateSliderAction, */ setNoiseGateKnobStyles](IControl* pCaller) {
- // defaultNoiseGateSliderAction(pCaller);
- setNoiseGateKnobStyles(pCaller);
- };
- noiseGateSlider->SetActionFunction(noiseGateAction);
- // Extend the slider action function to set the style of its knobs
- auto setToneStackKnobStyles = [&, pGraphics, bassControl, middleControl, trebleControl](IControl* pCaller) {
- const bool toneStackActive = pCaller->GetValue() > 0;
- const IVStyle toneStackStyle = toneStackActive ? style : styleInactive;
- bassControl->SetStyle(toneStackStyle);
- middleControl->SetStyle(toneStackStyle);
- trebleControl->SetStyle(toneStackStyle);
-
- bassControl->SetDirty(false);
- middleControl->SetDirty(false);
- trebleControl->SetDirty(false);
- };
- auto defaultToneStackSliderAction = toneStackSlider->GetActionFunction();
- // hacky attempt to fix IBSwitchControl action function
- auto toneStackAction = [/* defaultToneStackSliderAction, */ setToneStackKnobStyles](IControl* pCaller) {
- // defaultToneStackSliderAction(pCaller);
- setToneStackKnobStyles(pCaller);
- };
- toneStackSlider->SetActionFunction(toneStackAction);
+ 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(outputKnobArea, kOutputLevel, "", style, knobRotateBitmap));
// The meters
const float meterMin = -90.0f;
@@ -626,6 +582,27 @@ void NeuralAmpModeler::ProcessBlock(iplug::sample** inputs, iplug::sample** outp
this->_UpdateMeters(this->mInputPointers, outputs, numFrames, numChannelsInternal, numChannelsExternalOut);
}
+void NeuralAmpModeler::OnReset()
+{
+ const auto sampleRate = this->GetSampleRate();
+ this->mInputSender.Reset(sampleRate);
+ this->mOutputSender.Reset(sampleRate);
+}
+
+void NeuralAmpModeler::OnIdle()
+{
+ this->mInputSender.TransmitData(*this);
+ this->mOutputSender.TransmitData(*this);
+
+ if (this->mNewNAMLoadedInDSP)
+ {
+ if (GetUI())
+ this->GetUI()->GetControlWithTag(kCtrlTagOutNorm)->SetDisabled(!this->mNAM->HasLoudness());
+
+ this->mNewNAMLoadedInDSP = false;
+ }
+}
+
bool NeuralAmpModeler::SerializeState(IByteChunk& chunk) const
{
// Model directory (don't serialize the model itself; we'll just load it again
@@ -658,7 +635,29 @@ void NeuralAmpModeler::OnUIOpen()
if (this->mIRPath.GetLength())
this->_SetIRMsg(this->mIRPath);
if (this->mNAM != nullptr)
- this->_SetOutputNormalizationDisableState(!this->mNAM->HasLoudness());
+ this->GetUI()->GetControlWithTag(kCtrlTagOutNorm)->SetDisabled(!this->mNAM->HasLoudness());
+}
+
+void NeuralAmpModeler::OnParamChangeUI(int paramIdx, EParamSource source)
+{
+ if (auto pGraphics = GetUI())
+ {
+ bool active = GetParam(paramIdx)->Bool();
+
+ switch (paramIdx)
+ {
+ 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);
+ break;
+ default:
+ break;
+ }
+ }
}
// Private methods ============================================================
@@ -685,8 +684,7 @@ void NeuralAmpModeler::_ApplyDSPStaging()
// Move from staged to active DSP
this->mNAM = std::move(this->mStagedNAM);
this->mStagedNAM = nullptr;
- this->mFlagSetDisableNormalization = true;
- this->mSetDisableNormalization = !mNAM->HasLoudness();
+ this->mNewNAMLoadedInDSP = true;
}
if (this->mStagedIR != nullptr)
{
@@ -708,11 +706,6 @@ void NeuralAmpModeler::_ApplyDSPStaging()
this->_UnsetIRMsg();
this->mFlagRemoveIR = false;
}
- if (this->mFlagSetDisableNormalization)
- {
- if (this->_SetOutputNormalizationDisableState(this->mSetDisableNormalization))
- this->mFlagSetDisableNormalization = false;
- }
}
void NeuralAmpModeler::_DeallocateIOPointers()
@@ -923,30 +916,6 @@ void NeuralAmpModeler::_SetIRMsg(const WDL_String& irPath)
SendControlMsgFromDelegate(kCtrlTagIRName, 0, int(strlen(ss.str().c_str())), ss.str().c_str());
}
-bool NeuralAmpModeler::_SetOutputNormalizationDisableState(const bool disable)
-{
- bool success = false;
- auto ui = this->GetUI();
- if (ui != nullptr)
- {
- auto c = ui->GetControlWithTag(kOutNorm);
- if (c != nullptr)
- {
- c->SetDisabled(disable);
- success = c->IsDisabled() == disable;
- }
- // also hide the themecolored panel behind the toggle for the ON-stae
- auto p = ui->GetControlWithTag(kOutNormPanel);
- if (p != nullptr)
- {
- const IVStyle normtoggleStyle =
- c->IsDisabled() ? style.WithColor(kFG, PluginColors::NAM_0).WithColor(kFR, PluginColors::NAM_0) : style;
- p->As<IVectorBase>()->SetStyle(normtoggleStyle);
- }
- }
- return success;
-}
-
void NeuralAmpModeler::_UnsetModelMsg()
{
this->_UnsetMsg(kCtrlTagModelName, this->mDefaultNAMString);
diff --git a/NeuralAmpModeler/NeuralAmpModeler.h b/NeuralAmpModeler/NeuralAmpModeler.h
@@ -26,7 +26,6 @@ enum EParams
kNoiseGateActive,
kEQActive,
kOutNorm,
- kOutNormPanel,
kNumParams
};
@@ -39,6 +38,7 @@ enum ECtrlTags
kCtrlTagInputMeter,
kCtrlTagOutputMeter,
kCtrlTagAboutBox,
+ kCtrlTagOutNorm,
kNumCtrlTags
};
@@ -49,23 +49,15 @@ public:
~NeuralAmpModeler();
void ProcessBlock(iplug::sample** inputs, iplug::sample** outputs, int nFrames) override;
- void OnReset() override
- {
- const auto sampleRate = this->GetSampleRate();
- this->mInputSender.Reset(sampleRate);
- this->mOutputSender.Reset(sampleRate);
- }
- void OnIdle() override
- {
- this->mInputSender.TransmitData(*this);
- this->mOutputSender.TransmitData(*this);
- }
+ void OnReset() override;
+ void OnIdle() override;
bool SerializeState(iplug::IByteChunk& chunk) const override;
int UnserializeState(const iplug::IByteChunk& chunk, int startPos) override;
void OnUIOpen() override;
bool OnHostRequestingSupportedViewConfiguration(int width, int height) override { return true; }
+ void OnParamChangeUI(int paramIdx, iplug::EParamSource source) override;
private:
// Allocates mInputPointers and mOutputPointers
void _AllocateIOPointers(const size_t nChans);
@@ -109,8 +101,6 @@ private:
// Disable Normalization toggle when no loudness data in model metadata
// Sometimes the UI isn't initialized, so we have to try again later.
//
- // Returns whether it was successful
- bool _SetOutputNormalizationDisableState(const bool disable);
void _UnsetModelMsg();
void _UnsetIRMsg();
void _UnsetMsg(const int tag, const WDL_String& msg);
@@ -148,10 +138,7 @@ private:
bool mFlagRemoveIR;
const WDL_String mDefaultNAMString;
const WDL_String mDefaultIRString;
-
- // Try to set the diable state of output normalization
- bool mFlagSetDisableNormalization;
- bool mSetDisableNormalization; // True = Disable
+ std::atomic<bool> mNewNAMLoadedInDSP = false;
// Tone stack modules
recursive_linear_filter::LowShelf mToneBass;
diff --git a/NeuralAmpModeler/config.h b/NeuralAmpModeler/config.h
@@ -57,8 +57,6 @@
#define FILE_FN "SkinEHeritage_File.svg"
#define FOLDER_FN "folder.svg"
#define CLOSE_BUTTON_FN "SkinEHeritage_Close-button.svg"
-#define TOLEX_FN "tolex.jpeg"
-#define TOLEX2X_FN "tolex@2x.jpeg"
#define LEFT_ARROW_FN "SkinEHeritage_ArrowLeft.svg"
#define RIGHT_ARROW_FN "SkinEHeritage_ArrowRight.svg"
#define EH_SKIN_FN "SkinEHeritage_BG.jpeg"
@@ -67,3 +65,5 @@
#define KNOB2X_FN "SkinEHeritage_Knob@2x.png"
#define TOGGLE_FN "SkinEHeritage_Toggle.png"
#define TOGGLE2X_FN "SkinEHeritage_Toggle@2x.png"
+#define TOGGLE_HANDLE_FN "SkinEHeritage_ToggleHandle.png"
+#define TOGGLE_HANDLE2X_FN "SkinEHeritage_ToggleHandle@2x.png"
diff --git a/NeuralAmpModeler/config/NeuralAmpModeler-ios.xcconfig b/NeuralAmpModeler/config/NeuralAmpModeler-ios.xcconfig
@@ -22,7 +22,7 @@ EXTRA_LNK_FLAGS = -framework Metal -framework MetalKit -framework Accelerate//$(
//------------------------------
// PREPROCESSOR MACROS
-EXTRA_ALL_DEFS = OBJC_PREFIX=vNeuralAmpModeler IGRAPHICS_NANOVG IGRAPHICS_METAL SAMPLE_TYPE_FLOAT
+EXTRA_ALL_DEFS = OBJC_PREFIX=vNeuralAmpModeler IGRAPHICS_NANOVG IGRAPHICS_METAL SAMPLE_TYPE_FLOAT GRAYED_ALPHA=0.5f
//EXTRA_DEBUG_DEFS =
//EXTRA_RELEASE_DEFS =
//EXTRA_TRACER_DEFS =
diff --git a/NeuralAmpModeler/config/NeuralAmpModeler-mac.xcconfig b/NeuralAmpModeler/config/NeuralAmpModeler-mac.xcconfig
@@ -24,7 +24,7 @@ EXTRA_LNK_FLAGS = -framework Accelerate -framework Metal -framework MetalKit //
//------------------------------
// PREPROCESSOR MACROS
-EXTRA_ALL_DEFS = OBJC_PREFIX=vNeuralAmpModeler SWELL_APP_PREFIX=Swell_vNeuralAmpModeler IGRAPHICS_NANOVG IGRAPHICS_METAL
+EXTRA_ALL_DEFS = OBJC_PREFIX=vNeuralAmpModeler SWELL_APP_PREFIX=Swell_vNeuralAmpModeler IGRAPHICS_NANOVG IGRAPHICS_METAL GRAYED_ALPHA=0.5f
//EXTRA_DEBUG_DEFS =
//EXTRA_RELEASE_DEFS =
//EXTRA_TRACER_DEFS =
diff --git a/NeuralAmpModeler/config/NeuralAmpModeler-win.props b/NeuralAmpModeler/config/NeuralAmpModeler-win.props
@@ -3,7 +3,7 @@
<PropertyGroup Label="UserMacros">
<IPLUG2_ROOT>$(ProjectDir)..\..\iPlug2</IPLUG2_ROOT>
<BINARY_NAME>NeuralAmpModeler</BINARY_NAME>
- <EXTRA_ALL_DEFS>IGRAPHICS_NANOVG;IGRAPHICS_GL2</EXTRA_ALL_DEFS>
+ <EXTRA_ALL_DEFS>IGRAPHICS_NANOVG;IGRAPHICS_GL2;GRAYED_ALPHA=0.5f</EXTRA_ALL_DEFS>
<EXTRA_DEBUG_DEFS />
<EXTRA_RELEASE_DEFS />
<EXTRA_TRACER_DEFS />
diff --git a/NeuralAmpModeler/resources/img/SkinEHeritage_Toggle.png b/NeuralAmpModeler/resources/img/SkinEHeritage_Toggle.png
Binary files differ.
diff --git a/NeuralAmpModeler/resources/img/SkinEHeritage_Toggle@2x.png b/NeuralAmpModeler/resources/img/SkinEHeritage_Toggle@2x.png
Binary files differ.
diff --git a/NeuralAmpModeler/resources/img/SkinEHeritage_ToggleHandle.png b/NeuralAmpModeler/resources/img/SkinEHeritage_ToggleHandle.png
Binary files differ.
diff --git a/NeuralAmpModeler/resources/img/SkinEHeritage_ToggleHandle@2x.png b/NeuralAmpModeler/resources/img/SkinEHeritage_ToggleHandle@2x.png
Binary files differ.
diff --git a/NeuralAmpModeler/resources/img/tolex.jpeg b/NeuralAmpModeler/resources/img/tolex.jpeg
Binary files differ.
diff --git a/NeuralAmpModeler/resources/img/tolex@2x.jpeg b/NeuralAmpModeler/resources/img/tolex@2x.jpeg
Binary files differ.
diff --git a/NeuralAmpModeler/resources/main.rc b/NeuralAmpModeler/resources/main.rc
@@ -230,8 +230,6 @@ END
//
#include "..\config.h"
ROBOTO_FN TTF ROBOTO_FN
-TOLEX_FN JPEG TOLEX_FN
-TOLEX2X_FN JPEG TOLEX2X_FN
FILE_FN SVG FILE_FN
FOLDER_FN SVG FOLDER_FN
CLOSE_BUTTON_FN SVG CLOSE_BUTTON_FN
@@ -244,6 +242,8 @@ KNOB_FN PNG KNOB_FN
KNOB2X_FN PNG KNOB2X_FN
TOGGLE_FN PNG TOGGLE_FN
TOGGLE2X_FN PNG TOGGLE2X_FN
+TOGGLE_HANDLE_FN PNG TOGGLE_HANDLE_FN
+TOGGLE_HANDLE2X_FN PNG TOGGLE_HANDLE2X_FN
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED