diff --git a/plugin/DistrhoPluginInfo.h b/plugin/DistrhoPluginInfo.h index 3495f42..4ccf80e 100644 --- a/plugin/DistrhoPluginInfo.h +++ b/plugin/DistrhoPluginInfo.h @@ -31,25 +31,25 @@ #define DISTRHO_PLUGIN_HAS_UI 1 enum Parameters { - pLFORate, - pLFODelay, + pLfoRate, + pLfoDelay, - pVCORange, - pLFODepth, - pPWMDepth, + pVcoRange, + pLfoDepth, + pPwmDepth, pSqr, pSaw, pSubLevel, pNoiseLevel, - pHPF, + pHpf, pCutoff, pRes, pEnv, pLfo, pKyb, - pVCALevel, + pVcaLevel, pAtk, pDcy, diff --git a/plugin/parameters.cpp b/plugin/parameters.cpp index dc6770f..60aaad2 100644 --- a/plugin/parameters.cpp +++ b/plugin/parameters.cpp @@ -25,20 +25,20 @@ void Chassis::initParameter(uint32_t index, Parameter& parameter) { parameter.ranges.def = 0.0f; switch (index) { - case pLFORate: + case pLfoRate: parameter.name = "LFO Rate"; parameter.symbol = "ch_lforate"; parameter.midiCC = 3; break; - case pLFODelay: + case pLfoDelay: parameter.hints = kParameterIsAutomatable; parameter.name = "LFO Delay"; parameter.symbol = "ch_lfodelay"; parameter.midiCC = 9; break; - case pVCORange: + case pVcoRange: parameter.hints = kParameterIsAutomatable | kParameterIsInteger; parameter.name = "Range"; parameter.symbol = "ch_vcorange"; @@ -58,14 +58,14 @@ void Chassis::initParameter(uint32_t index, Parameter& parameter) { } break; - case pLFODepth: + case pLfoDepth: parameter.hints = kParameterIsAutomatable; parameter.name = "LFO"; parameter.symbol = "ch_lfo"; parameter.midiCC = 13; break; - case pPWMDepth: + case pPwmDepth: parameter.hints = kParameterIsAutomatable; parameter.name = "PWM"; parameter.symbol = "ch_pwm"; @@ -122,7 +122,7 @@ void Chassis::initParameter(uint32_t index, Parameter& parameter) { parameter.midiCC = 19; break; - case pHPF: + case pHpf: parameter.hints = kParameterIsAutomatable | kParameterIsInteger; parameter.name = "HPF"; parameter.symbol = "ch_hpf"; @@ -230,7 +230,7 @@ void Chassis::initParameter(uint32_t index, Parameter& parameter) { } break; */ - case pVCALevel: + case pVcaLevel: parameter.hints = kParameterIsAutomatable; parameter.name = "VCA Level"; parameter.symbol = "ch_vcalevel"; @@ -277,17 +277,17 @@ void Chassis::setParameterValue(uint32_t index, float value) { if (value > 127.0f) value = 127.0f; switch (index) { - case pLFORate: + case pLfoRate: patchRam.lfoRate = value; break; - case pLFODelay: + case pLfoDelay: patchRam.lfoDelay = value; break; - case pLFODepth: + case pLfoDepth: patchRam.vcoLfo = value; break; - case pPWMDepth: + case pPwmDepth: patchRam.pwmLfo = value / 1.27; break; case pSubLevel: @@ -313,7 +313,7 @@ void Chassis::setParameterValue(uint32_t index, float value) { patchRam.vcfKey = value; break; - case pVCALevel: + case pVcaLevel: patchRam.vca = value; break; @@ -331,7 +331,7 @@ void Chassis::setParameterValue(uint32_t index, float value) { break; // switch 1 params - case pVCORange: // bits 0-2 of switch 1 + case pVcoRange: // bits 0-2 of switch 1 // doesn't look great in Carla because of odd behaviour with small integer knobs patchRam.switch1 &= 0xf8; patchRam.switch1 |= (1 << (int)(value - 1)); @@ -380,7 +380,7 @@ void Chassis::setParameterValue(uint32_t index, float value) { patchRam.switch2 |= (value >= 0.5) << 2; break; */ - case pHPF: // bits 3-4 of switch 2 + case pHpf: // bits 3-4 of switch 2 // doesn't look great in Carla because of odd behaviour with small integer knobs if (value > 3) value = 3; patchRam.switch2 &= 0xe7; @@ -396,14 +396,14 @@ void Chassis::setParameterValue(uint32_t index, float value) { float Chassis::getParameterValue(uint32_t index) const { switch (index) { - case pLFORate: + case pLfoRate: return patchRam.lfoRate; break; - case pLFODelay: + case pLfoDelay: return patchRam.lfoDelay; break; - case pVCORange: + case pVcoRange: // FIXME this needs to be better generally switch (patchRam.switch1 & 0x07) { case 1: @@ -417,10 +417,10 @@ float Chassis::getParameterValue(uint32_t index) const { } break; - case pLFODepth: + case pLfoDepth: return patchRam.vcoLfo; break; - case pPWMDepth: + case pPwmDepth: return patchRam.pwmLfo * 1.27f; break; /* @@ -440,7 +440,7 @@ float Chassis::getParameterValue(uint32_t index) const { case pNoiseLevel: return patchRam.noise; break; - case pHPF: + case pHpf: return 3 - ((patchRam.switch2 & 0x18) >> 3); break; case pCutoff: @@ -479,7 +479,7 @@ float Chassis::getParameterValue(uint32_t index) const { case paramEnvGate: return (patchRam.switch2 & 0x04) != 0; */ - case pVCALevel: + case pVcaLevel: return patchRam.vca; break; diff --git a/plugin/ui.cpp b/plugin/ui.cpp index b435a45..c2008e8 100644 --- a/plugin/ui.cpp +++ b/plugin/ui.cpp @@ -7,7 +7,9 @@ START_NAMESPACE_DISTRHO namespace Art = Artwork; -void prepSlider(ImageSlider* s, uint id, int x, int y) { +//void prepSlider(ImageSlider* s, uint id, int x, int y) { +void DistrhoUIchassis::prepSlider( uint id, int x, int y) { + ImageSlider* s = slider[id]; s->setId(id); s->setStartPos(x, y); s->setEndPos(x, y + 79); // 80px high @@ -25,74 +27,77 @@ DistrhoUIchassis::DistrhoUIchassis() : UI(Art::backgroundWidth, Art::backgroundH Image blueSlider(Art::blueData, Art::sliderWidth, Art::sliderHeight, kImageFormatRGBA); Image whiteSlider(Art::whiteData, Art::sliderWidth, Art::sliderHeight, kImageFormatRGBA); - xSliderLFORate = new ImageSlider(this, orangeSlider); - prepSlider(xSliderLFORate, pLFORate, 50, 72); - xSliderLFORate->setCallback(this); + slider[sLfoRate] = new ImageSlider(this, orangeSlider); + prepSlider(sLfoRate, 50, 72); + slider[sLfoRate]->setCallback(this); - xSliderLFODelay = new ImageSlider(this, orangeSlider); - prepSlider(xSliderLFODelay, pLFODelay, 90, 72); - xSliderLFODelay->setCallback(this); + slider[sLfoDelay] = new ImageSlider(this, orangeSlider); + prepSlider(sLfoDelay, 90, 72); + slider[sLfoDelay]->setCallback(this); - xSliderLFODepth = new ImageSlider(this, greenSlider); - prepSlider(xSliderLFODepth, pLFODepth, 292, 72); - xSliderLFODepth->setCallback(this); + slider[sLfoDepth] = new ImageSlider(this, greenSlider); + prepSlider(sLfoDepth, 292, 72); + slider[sLfoDepth]->setCallback(this); - xSliderPWMDepth = new ImageSlider(this, greenSlider); - prepSlider(xSliderPWMDepth, pPWMDepth, 331, 72); - xSliderPWMDepth->setCallback(this); + slider[sPwmDepth] = new ImageSlider(this, greenSlider); + prepSlider(sPwmDepth, 331, 72); + slider[sPwmDepth]->setCallback(this); - xSliderSubLevel = new ImageSlider(this, greenSlider); - prepSlider(xSliderSubLevel, pSubLevel, 517, 72); - xSliderSubLevel->setCallback(this); + slider[sSubLevel] = new ImageSlider(this, greenSlider); + prepSlider(sSubLevel, 517, 72); + slider[sSubLevel]->setCallback(this); - xSliderNoiseLevel = new ImageSlider(this, greenSlider); - prepSlider(xSliderNoiseLevel, pNoiseLevel, 558, 72); - xSliderNoiseLevel->setCallback(this); + slider[sNoiseLevel] = new ImageSlider(this, greenSlider); + prepSlider(sNoiseLevel, 558, 72); + slider[sNoiseLevel]->setCallback(this); - // FIXME - put the stops back in - xSliderHPF = new ImageSlider(this, blueSlider); - prepSlider(xSliderHPF, pHPF, 618, 72); - xSliderHPF->setCallback(this); + // HPF slider is treated specially as it is part of the switches + slider[sHpf] = new ImageSlider(this, blueSlider); + prepSlider(sHpf, 618, 72); + slider[sHpf]->setRange(0, 3); + slider[sHpf]->setStep(1); + slider[sHpf]->setCallback(this); - xSliderCutoff = new ImageSlider(this, blueSlider); - prepSlider(xSliderCutoff, pCutoff, 21, 261); - xSliderCutoff->setCallback(this); + slider[sCutoff] = new ImageSlider(this, blueSlider); + prepSlider(sCutoff, 21, 261); + slider[sCutoff]->setCallback(this); - xSliderRes = new ImageSlider(this, blueSlider); - prepSlider(xSliderRes, pRes, 60, 261); - xSliderRes->setCallback(this); + slider[sRes] = new ImageSlider(this, blueSlider); + prepSlider(sRes, 60, 261); + slider[sRes]->setCallback(this); - xSliderEnv = new ImageSlider(this, blueSlider); - prepSlider(xSliderEnv, pEnv, 144, 261); - xSliderEnv->setCallback(this); + slider[sEnv] = new ImageSlider(this, blueSlider); + prepSlider(sEnv, 144, 261); + slider[sEnv]->setCallback(this); - xSliderLfo = new ImageSlider(this, blueSlider); - prepSlider(xSliderLfo, pLfo, 183, 261); - xSliderLfo->setCallback(this); + slider[sLfo] = new ImageSlider(this, blueSlider); + prepSlider(sLfo, 183, 261); + slider[sLfo]->setCallback(this); - xSliderKyb = new ImageSlider(this, blueSlider); - prepSlider(xSliderKyb, pKyb, 222, 261); - xSliderKyb->setCallback(this); + slider[sKyb] = new ImageSlider(this, blueSlider); + prepSlider(sKyb, 222, 261); + slider[sKyb]->setCallback(this); - xSliderVCALevel = new ImageSlider(this, whiteSlider); - prepSlider(xSliderVCALevel, pVCALevel, 314, 261); - xSliderVCALevel->setCallback(this); + slider[sVcaLevel] = new ImageSlider(this, whiteSlider); + prepSlider(sVcaLevel, 314, 261); + slider[sVcaLevel]->setCallback(this); - xSliderAtk = new ImageSlider(this, whiteSlider); - prepSlider(xSliderAtk, pVCALevel, 375, 261); - xSliderAtk->setCallback(this); + slider[sAtk] = new ImageSlider(this, whiteSlider); + prepSlider(sAtk, 375, 261); + slider[sAtk]->setCallback(this); - xSliderDcy = new ImageSlider(this, whiteSlider); - prepSlider(xSliderDcy, pDcy, 414, 261); - xSliderDcy->setCallback(this); - xSliderStn = new ImageSlider(this, whiteSlider); - prepSlider(xSliderStn, pStn, 454, 261); - xSliderStn->setCallback(this); + slider[sDcy] = new ImageSlider(this, whiteSlider); + prepSlider(sDcy, 414, 261); + slider[sDcy]->setCallback(this); - xSliderRls = new ImageSlider(this, whiteSlider); - prepSlider(xSliderRls, pRls, 493, 261); - xSliderRls->setCallback(this); + slider[sStn] = new ImageSlider(this, whiteSlider); + prepSlider(sStn, 454, 261); + slider[sStn]->setCallback(this); + + slider[sRls] = new ImageSlider(this, whiteSlider); + prepSlider(sRls, 493, 261); + slider[sRls]->setCallback(this); xBtn16ft = new ImageButton(this, Image(Art::orngBtnUp, Art::orngBtnWidth, Art::orngBtnHeight, kImageFormatRGB), Image(Art::orngBtnDn, Art::orngBtnWidth, Art::orngBtnHeight, kImageFormatRGB)); @@ -118,63 +123,64 @@ DistrhoUIchassis::~DistrhoUIchassis() { void DistrhoUIchassis::programLoaded(uint32_t index) { switch (index) { - case pLFORate: - xSliderLFORate->setValue(0.5); + case sLfoRate: + // slider[pLFORate->setValue(0.5); break; - case pLFODelay: - xSliderLFODelay->setValue(0.5); + case sLfoDelay: + // slider[pLFODelay->setValue(0.5); break; } } void DistrhoUIchassis::parameterChanged(uint32_t index, float value) { +#if 0 switch (index) { - case pLFORate: - xSliderLFORate->setValue(value); + case sLfoRate: + slider[pLFORate->setValue(value); break; - case pLFODelay: - xSliderLFODelay->setValue(value); + case sLfoDelay: + slider[pLFODelay->setValue(value); break; - case pLFODepth: - xSliderLFODepth->setValue(value); + case sLfoDepth: + slider[pLFODepth->setValue(value); break; case pPWMDepth: - xSliderPWMDepth->setValue(value); + slider[pPWMDepth->setValue(value); break; - case pSubLevel: - xSliderSubLevel->setValue(value); + case sSubLevel: + slider[sSubLevel->setValue(value); break; - case pNoiseLevel: - xSliderNoiseLevel->setValue(value); + case sNoiseLevel: + slider[sNoiseLevel->setValue(value); break; - case pHPF: - xSliderHPF->setValue(value); + case sHpf: + slider[sHpf->setValue(value); break; - case pCutoff: - xSliderCutoff->setValue(value); + case sCutoff: + slider[sCutoff->setValue(value); break; - case pRes: - xSliderRes->setValue(value); + case sRes: + slider[sRes->setValue(value); break; - case pEnv: - xSliderEnv->setValue(value); + case sEnv: + slider[sEnv->setValue(value); break; - case pLfo: - xSliderLfo->setValue(value); + case sLfo: + slider[sLfo->setValue(value); break; - case pKyb: - xSliderKyb->setValue(value); + case sKyb: + slider[sKyb->setValue(value); break; - case pAtk: - xSliderAtk->setValue(value); + case sAtk: + slider[sAtk->setValue(value); break; - case pDcy: - xSliderDcy->setValue(value); + case sDcy: + slider[sDcy->setValue(value); break; - case pStn: - xSliderStn->setValue(value); + case sStn: + slider[sStn->setValue(value); break; case pRls: - xSliderRls->setValue(value); + slider[pRls->setValue(value); break; // now the switches case pVCORange: @@ -206,6 +212,7 @@ void DistrhoUIchassis::parameterChanged(uint32_t index, float value) { break; } } + #endif } void DistrhoUIchassis::imageSliderDragStarted(ImageSlider* slider) { @@ -218,6 +225,7 @@ void DistrhoUIchassis::imageSliderDragFinished(ImageSlider* slider) { void DistrhoUIchassis::imageSliderValueChanged(ImageSlider* slider, float value) { setParameterValue(slider->getId(), value); + printf("slider %d changed to %f\n",slider->getId(), value); } void DistrhoUIchassis::imageButtonClicked(ImageButton* imgBtn, int) { diff --git a/plugin/ui.hpp b/plugin/ui.hpp index 3ae5f66..3449dde 100644 --- a/plugin/ui.hpp +++ b/plugin/ui.hpp @@ -23,16 +23,42 @@ class DistrhoUIchassis : public UI, void imageSliderDragFinished(ImageSlider* slider) override; void imageSliderValueChanged(ImageSlider* slider, float value) override; - void imageButtonClicked(ImageButton *imageButton, int button) override; + void imageButtonClicked(ImageButton *imageButton, int button) override; - private: +void prepSlider( uint id, int x, int y); +enum { + sLfoRate, + sLfoDelay, + + sLfoDepth, + sPwmDepth, + sSubLevel, + sNoiseLevel, + + sCutoff, + sRes, + sEnv, + sLfo, + sKyb, + + sVcaLevel, + + sAtk, + sDcy, + sStn, + sRls, + sHpf +}; + private: Image fImgBackground; Image fImgLedOn; - ScopedPointer + ScopedPointer slider[17]; + /* xSliderLFORate, xSliderLFODelay, xSliderLFODepth, xSliderPWMDepth, xSliderSubLevel, xSliderNoiseLevel, xSliderHPF, xSliderCutoff, xSliderRes, xSliderEnv, xSliderLfo, xSliderKyb, xSliderVCALevel, xSliderAtk, xSliderDcy, xSliderStn, xSliderRls; +*/ ScopedPointer xBtn16ft, xBtn8ft, xBtn4ft; uint8_t sw1 = 0, sw2 = 0; @@ -42,4 +68,4 @@ class DistrhoUIchassis : public UI, END_NAMESPACE_DISTRHO -#endif \ No newline at end of file +#endif