/* * ZamTube triode WDF distortion model * Copyright (C) 2014 Damien Zammit * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #include "ZamTubePlugin.hpp" // conflict macros in wdf #undef max #undef min #include "ZamTubeUI.hpp" using DGL::Point; START_NAMESPACE_DISTRHO // ----------------------------------------------------------------------- ZamTubeUI::ZamTubeUI() : UI() { // background fImgBackground = Image(ZamTubeArtwork::zamtubeData, ZamTubeArtwork::zamtubeWidth, ZamTubeArtwork::zamtubeHeight, GL_BGR); // knob Image knobImage(ZamTubeArtwork::knobData, ZamTubeArtwork::knobWidth, ZamTubeArtwork::knobHeight); // notch slider Image notchImage(ZamTubeArtwork::notchData, ZamTubeArtwork::notchWidth, ZamTubeArtwork::notchHeight); // knobs fKnobTube = new ImageKnob(this, knobImage); fKnobTube->setAbsolutePos(177, 76); fKnobTube->setRange(0.f, 30.0f); fKnobTube->setStep(0.1f); fKnobTube->setDefault(0.0f); fKnobTube->setRotationAngle(240); fKnobTube->setCallback(this); fKnobBass = new ImageKnob(this, knobImage); fKnobBass->setAbsolutePos(63, 140.5); fKnobBass->setRange(0.f, 1.0f); fKnobBass->setStep(0.01f); fKnobBass->setDefault(0.5f); fKnobBass->setRotationAngle(240); fKnobBass->setCallback(this); fKnobMids = new ImageKnob(this, knobImage); fKnobMids->setAbsolutePos(63, 87); fKnobMids->setRange(0.f, 1.0f); fKnobMids->setStep(0.01f); fKnobMids->setDefault(0.5f); fKnobMids->setRotationAngle(240); fKnobMids->setCallback(this); fKnobTreb = new ImageKnob(this, knobImage); fKnobTreb->setAbsolutePos(63, 33); fKnobTreb->setRange(0.f, 1.0f); fKnobTreb->setStep(0.01f); fKnobTreb->setDefault(0.0f); fKnobTreb->setRotationAngle(240); fKnobTreb->setCallback(this); fKnobGain = new ImageKnob(this, knobImage); fKnobGain->setAbsolutePos(63, 231); fKnobGain->setRange(-30.f, 30.0f); fKnobGain->setStep(1.f); fKnobGain->setDefault(0.0f); fKnobGain->setRotationAngle(240); fKnobGain->setCallback(this); Point notchPosStart(289,5); Point notchPosEnd(289,5+280); fSliderNotch = new ImageSlider(this, notchImage); fSliderNotch->setStartPos(notchPosStart); fSliderNotch->setEndPos(notchPosEnd); fSliderNotch->setRange(0.f, 24.f); fSliderNotch->setStep(1.f); fSliderNotch->setValue(0.f); fSliderNotch->setCallback(this); // set default values d_programChanged(0); } // ----------------------------------------------------------------------- // DSP Callbacks void ZamTubeUI::d_parameterChanged(uint32_t index, float value) { switch (index) { case ZamTubePlugin::paramTubedrive: fKnobTube->setValue(value); break; case ZamTubePlugin::paramBass: fKnobBass->setValue(value); break; case ZamTubePlugin::paramMiddle: fKnobMids->setValue(value); break; case ZamTubePlugin::paramTreble: fKnobTreb->setValue(value); break; case ZamTubePlugin::paramGain: fKnobGain->setValue(value); break; } } void ZamTubeUI::d_programChanged(uint32_t index) { if (index != 0) return; // Default values fKnobTube->setValue(0.0f); fKnobBass->setValue(0.5f); fKnobMids->setValue(0.5f); fKnobTreb->setValue(0.0f); fKnobGain->setValue(0.0f); fSliderNotch->setValue(0.0f); } // ----------------------------------------------------------------------- // Widget Callbacks void ZamTubeUI::imageKnobDragStarted(ImageKnob* knob) { if (knob == fKnobTube) d_editParameter(ZamTubePlugin::paramTubedrive, true); else if (knob == fKnobBass) d_editParameter(ZamTubePlugin::paramBass, true); else if (knob == fKnobMids) d_editParameter(ZamTubePlugin::paramMiddle, true); else if (knob == fKnobTreb) d_editParameter(ZamTubePlugin::paramTreble, true); else if (knob == fKnobGain) d_editParameter(ZamTubePlugin::paramGain, true); } void ZamTubeUI::imageKnobDragFinished(ImageKnob* knob) { if (knob == fKnobTube) d_editParameter(ZamTubePlugin::paramTubedrive, false); else if (knob == fKnobBass) d_editParameter(ZamTubePlugin::paramBass, false); else if (knob == fKnobMids) d_editParameter(ZamTubePlugin::paramMiddle, false); else if (knob == fKnobTreb) d_editParameter(ZamTubePlugin::paramTreble, false); else if (knob == fKnobGain) d_editParameter(ZamTubePlugin::paramGain, false); } void ZamTubeUI::imageKnobValueChanged(ImageKnob* knob, float value) { if (knob == fKnobTube) d_setParameterValue(ZamTubePlugin::paramTubedrive, value); else if (knob == fKnobBass) d_setParameterValue(ZamTubePlugin::paramBass, value); else if (knob == fKnobMids) d_setParameterValue(ZamTubePlugin::paramMiddle, value); else if (knob == fKnobTreb) d_setParameterValue(ZamTubePlugin::paramTreble, value); else if (knob == fKnobGain) d_setParameterValue(ZamTubePlugin::paramGain, value); } void ZamTubeUI::imageSliderDragStarted(ImageSlider*) { d_editParameter(ZamTubePlugin::paramToneStack, true); } void ZamTubeUI::imageSliderDragFinished(ImageSlider*) { d_editParameter(ZamTubePlugin::paramToneStack, false); } void ZamTubeUI::imageSliderValueChanged(ImageSlider*, float value) { d_setParameterValue(ZamTubePlugin::paramToneStack, value); } void ZamTubeUI::onDisplay() { fImgBackground.draw(); } // ----------------------------------------------------------------------- UI* createUI() { return new ZamTubeUI(); } // ----------------------------------------------------------------------- END_NAMESPACE_DISTRHO