#include "ui.hpp" #include "chassis.hpp" START_NAMESPACE_DISTRHO namespace Art = Artwork; DistrhoUIchassis::DistrhoUIchassis() : UI(Art::backgroundWidth, Art::backgroundHeight, true), fImgBackground(Art::backgroundData, Art::backgroundWidth, Art::backgroundHeight, kImageFormatRGB), fImgLedOn(Art::ledOnData, Art::ledWidth, Art::ledHeight, kImageFormatRGBA) { Image orangeSlider(Art::orangeData, Art::sliderWidth, Art::sliderHeight, kImageFormatRGBA); Image greenSlider(Art::greenData, Art::sliderWidth, Art::sliderHeight, kImageFormatRGBA); Image blueSlider(Art::blueData, Art::sliderWidth, Art::sliderHeight, kImageFormatRGBA); Image whiteSlider(Art::whiteData, Art::sliderWidth, Art::sliderHeight, kImageFormatRGBA); xSliderLFORate = new ImageSlider(this, orangeSlider); xSliderLFORate->setId(Chassis::pLFORate); xSliderLFORate->setStartPos(50, 72); xSliderLFORate->setEndPos(50, 151); xSliderLFORate->setRange(0, 127.0f); xSliderLFORate->setInverted(true); xSliderLFORate->setCallback(this); xSliderLFODelay = new ImageSlider(this, orangeSlider); xSliderLFODelay->setId(Chassis::pLFODelay); xSliderLFODelay->setStartPos(90, 72); xSliderLFODelay->setEndPos(90, 151); xSliderLFODelay->setRange(0, 127.0f); xSliderLFODelay->setInverted(true); xSliderLFODelay->setCallback(this); xSliderLFODepth = new ImageSlider(this, greenSlider); xSliderLFODepth->setId(Chassis::pLFODepth); xSliderLFODepth->setStartPos(292, 72); xSliderLFODepth->setEndPos(292, 151); xSliderLFODepth->setRange(0, 127.0f); xSliderLFODepth->setInverted(true); xSliderLFODepth->setCallback(this); xSliderPWMDepth = new ImageSlider(this, greenSlider); xSliderPWMDepth->setId(Chassis::pPWMDepth); xSliderPWMDepth->setStartPos(331, 72); xSliderPWMDepth->setEndPos(331, 151); xSliderPWMDepth->setRange(0, 127.0f); xSliderPWMDepth->setInverted(true); xSliderPWMDepth->setCallback(this); xSliderSubLevel = new ImageSlider(this, greenSlider); xSliderSubLevel->setId(Chassis::pSubLevel); xSliderSubLevel->setStartPos(517, 72); xSliderSubLevel->setEndPos(517, 151); xSliderSubLevel->setRange(0, 127.0f); xSliderSubLevel->setInverted(true); xSliderSubLevel->setCallback(this); xSliderNoiseLevel = new ImageSlider(this, greenSlider); xSliderNoiseLevel->setId(Chassis::pNoiseLevel); xSliderNoiseLevel->setStartPos(558, 72); xSliderNoiseLevel->setEndPos(558, 151); xSliderNoiseLevel->setRange(0, 127.0f); xSliderNoiseLevel->setInverted(true); xSliderNoiseLevel->setCallback(this); xSliderHPF = new ImageSlider(this, blueSlider); xSliderHPF->setId(Chassis::pHPF); xSliderHPF->setStartPos(618, 72); xSliderHPF->setEndPos(618, 151); xSliderHPF->setRange(0, 3.0f); xSliderHPF->setStep(1); xSliderHPF->setInverted(true); xSliderHPF->setCallback(this); xSliderCutoff = new ImageSlider(this, blueSlider); xSliderCutoff->setId(Chassis::pCutoff); xSliderCutoff->setStartPos(21, 261); xSliderCutoff->setEndPos(21, 340); xSliderCutoff->setRange(0, 127.0f); xSliderCutoff->setInverted(true); xSliderCutoff->setCallback(this); xSliderRes = new ImageSlider(this, blueSlider); xSliderRes->setId(Chassis::pRes); xSliderRes->setStartPos(60, 261); xSliderRes->setEndPos(60, 340); xSliderRes->setRange(0, 127.0f); xSliderRes->setInverted(true); xSliderRes->setCallback(this); xSliderEnv = new ImageSlider(this, blueSlider); xSliderEnv->setId(Chassis::pEnv); xSliderEnv->setStartPos(144, 261); xSliderEnv->setEndPos(144, 340); xSliderEnv->setRange(0, 127.0f); xSliderEnv->setInverted(true); xSliderEnv->setCallback(this); xSliderLfo = new ImageSlider(this, blueSlider); xSliderLfo->setId(Chassis::pLfo); xSliderLfo->setStartPos(183, 261); xSliderLfo->setEndPos(183, 340); xSliderLfo->setRange(0, 127.0f); xSliderLfo->setInverted(true); xSliderLfo->setCallback(this); xSliderKyb = new ImageSlider(this, blueSlider); xSliderKyb->setId(Chassis::pKyb); xSliderKyb->setStartPos(222, 261); xSliderKyb->setEndPos(222, 340); xSliderKyb->setRange(0, 127.0f); xSliderKyb->setInverted(true); xSliderKyb->setCallback(this); xSliderVCALevel = new ImageSlider(this, whiteSlider); xSliderVCALevel->setId(Chassis::pVCALevel); xSliderVCALevel->setStartPos(314, 261); xSliderVCALevel->setEndPos(314, 340); xSliderVCALevel->setRange(0, 127.0f); xSliderVCALevel->setInverted(true); xSliderVCALevel->setCallback(this); xSliderAtk = new ImageSlider(this, whiteSlider); xSliderAtk->setId(Chassis::pAtk); xSliderAtk->setStartPos(375, 261); xSliderAtk->setEndPos(375, 340); xSliderAtk->setRange(0, 127.0f); xSliderAtk->setInverted(true); xSliderAtk->setCallback(this); xSliderDcy = new ImageSlider(this, whiteSlider); xSliderDcy->setId(Chassis::pDcy); xSliderDcy->setStartPos(414, 261); xSliderDcy->setEndPos(414, 340); xSliderDcy->setRange(0, 127.0f); xSliderDcy->setInverted(true); xSliderDcy->setCallback(this); xSliderStn = new ImageSlider(this, whiteSlider); xSliderStn->setId(Chassis::pStn); xSliderStn->setStartPos(454, 261); xSliderStn->setEndPos(454, 340); xSliderStn->setRange(0, 127.0f); xSliderStn->setInverted(true); xSliderStn->setCallback(this); xSliderRls = new ImageSlider(this, whiteSlider); xSliderRls->setId(Chassis::pRls); xSliderRls->setStartPos(493, 261); xSliderRls->setEndPos(493, 340); xSliderRls->setRange(0, 127.0f); xSliderRls->setInverted(true); xSliderRls->setCallback(this); xBtn16ft = new ImageButton(this, Image(Art::orngBtnUp, Art::orngBtnWidth, Art::orngBtnHeight, kImageFormatRGB), Image(Art::orngBtnDn, Art::orngBtnWidth, Art::orngBtnHeight, kImageFormatRGB)); xBtn16ft->setAbsolutePos(149,103); xBtn8ft = new ImageButton(this, Image(Art::orngBtnUp, Art::orngBtnWidth, Art::orngBtnHeight, kImageFormatRGB), Image(Art::orngBtnDn, Art::orngBtnWidth, Art::orngBtnHeight, kImageFormatRGB)); xBtn8ft->setAbsolutePos(190,103); xBtn4ft = new ImageButton(this, Image(Art::orngBtnUp, Art::orngBtnWidth, Art::orngBtnHeight, kImageFormatRGB), Image(Art::orngBtnDn, Art::orngBtnWidth, Art::orngBtnHeight, kImageFormatRGB)); xBtn4ft->setAbsolutePos(231,103); programLoaded(0); } DistrhoUIchassis::~DistrhoUIchassis() { printf("Called destructor for UI\n"); } void DistrhoUIchassis::programLoaded(uint32_t index) { switch (index) { case Chassis::pLFORate: xSliderLFORate->setValue(0.5); break; case Chassis::pLFODelay: xSliderLFODelay->setValue(0.5); break; } } void DistrhoUIchassis::parameterChanged(uint32_t index, float value) { switch (index) { case Chassis::pLFORate: xSliderLFORate->setValue(value); break; case Chassis::pLFODelay: xSliderLFODelay->setValue(value); break; case Chassis::pLFODepth: xSliderLFODepth->setValue(value); break; case Chassis::pPWMDepth: xSliderPWMDepth->setValue(value); break; case Chassis::pSubLevel: xSliderSubLevel->setValue(value); break; case Chassis::pNoiseLevel: xSliderNoiseLevel->setValue(value); break; case Chassis::pHPF: xSliderHPF->setValue(value); break; case Chassis::pCutoff: xSliderCutoff->setValue(value); break; case Chassis::pRes: xSliderRes->setValue(value); break; case Chassis::pEnv: xSliderEnv->setValue(value); break; case Chassis::pLfo: xSliderLfo->setValue(value); break; case Chassis::pKyb: xSliderKyb->setValue(value); break; case Chassis::pAtk: xSliderAtk->setValue(value); break; case Chassis::pDcy: xSliderDcy->setValue(value); break; case Chassis::pStn: xSliderStn->setValue(value); break; case Chassis::pRls: xSliderRls->setValue(value); break; // now the switches case Chassis::pVCORange: sw1 &= 0xf8; // mask if (value > 2) value = 2; sw1 |= (1 << (int)value); break; case Chassis::pSqr: sw1 &= 0xf7; sw1 |= ((value >= 0.5)) << 3; break; case Chassis::pSaw: sw1 &= 0xef; sw1 |= (value > 0.5) << 4; break; case Chassis::pChorus: sw1 &= 0x9f; //60, 40, 00 switch((int)value) { case 0: sw1 |= 0x60; break; case 1: sw1 |= 0x40; break; case 2: sw1 |= 0x00; break; } } } void DistrhoUIchassis::imageSliderDragStarted(ImageSlider* slider) { editParameter(slider->getId(), true); } void DistrhoUIchassis::imageSliderDragFinished(ImageSlider* slider) { editParameter(slider->getId(), false); } void DistrhoUIchassis::imageSliderValueChanged(ImageSlider* slider, float value) { setParameterValue(slider->getId(), value); } void DistrhoUIchassis::onDisplay() { const GraphicsContext& context(getGraphicsContext()); fImgBackground.draw(context); // switch 1 LEDs if (sw1 & 0x01) fImgLedOn.drawAt(context, 160, 77); // 16' if (sw1 & 0x02) fImgLedOn.drawAt(context, 198, 77); // 8' if (sw1 & 0x04) fImgLedOn.drawAt(context, 238, 77); // 4' if (sw1 & 0x08) fImgLedOn.drawAt(context, 427, 77); // pulse if (sw1 & 0x10) fImgLedOn.drawAt(context, 465, 77); // saw if ((sw1 & 0x60) == 0x40) fImgLedOn.drawAt(context, 604, 269); // chorus 1 if ((sw1 & 0x60) == 0x00) fImgLedOn.drawAt(context, 644, 269); // chorus 2 }; UI* createUI() { return new DistrhoUIchassis(); } END_NAMESPACE_DISTRHO