| 
							- /*
 -  * ZamCompX2 Stereo compressor
 -  * Copyright (C) 2014  Damien Zammit <damien@zamaudio.com>
 -  *
 -  * 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 "ZamCompX2Plugin.hpp"
 - #include "ZamCompX2UI.hpp"
 - 
 - using DGL::Point;
 - 
 - START_NAMESPACE_DISTRHO
 - 
 - // -----------------------------------------------------------------------
 - 
 - ZamCompX2UI::ZamCompX2UI()
 -     : UI()
 - {
 -     // background
 -     fImgBackground = Image(ZamCompX2Artwork::zamcompx2Data, ZamCompX2Artwork::zamcompx2Width, ZamCompX2Artwork::zamcompx2Height, GL_BGR);
 - 
 -     // led images
 -     fLedRedImg = Image(ZamCompX2Artwork::ledredData, ZamCompX2Artwork::ledredWidth, ZamCompX2Artwork::ledredHeight);
 -     fLedYellowImg = Image(ZamCompX2Artwork::ledyellowData, ZamCompX2Artwork::ledyellowWidth, ZamCompX2Artwork::ledyellowHeight);
 - 
 -     // led values
 -     fLedRedValue = 0.0f;
 -     fLedYellowValue = 0.0f;
 - 
 -     // knob
 -     Image knobImage(ZamCompX2Artwork::knobData, ZamCompX2Artwork::knobWidth, ZamCompX2Artwork::knobHeight);
 - 
 -     // knob
 -     fKnobAttack = new ImageKnob(this, knobImage);
 -     fKnobAttack->setAbsolutePos(24, 45);
 -     fKnobAttack->setId(ZamCompX2Plugin::paramAttack);
 -     fKnobAttack->setRange(0.1f, 200.0f);
 -     fKnobAttack->setStep(0.1f);
 -     fKnobAttack->setUsingLogScale(true);
 -     fKnobAttack->setDefault(10.0f);
 -     fKnobAttack->setRotationAngle(240);
 -     fKnobAttack->setCallback(this);
 - 
 -     fKnobRelease = new ImageKnob(this, knobImage);
 -     fKnobRelease->setAbsolutePos(108, 45);
 -     fKnobRelease->setId(ZamCompX2Plugin::paramRelease);
 -     fKnobRelease->setRange(50.0f, 500.0f);
 -     fKnobRelease->setStep(1.0f);
 -     fKnobRelease->setDefault(80.0f);
 -     fKnobRelease->setRotationAngle(240);
 -     fKnobRelease->setCallback(this);
 - 
 -     fKnobThresh = new ImageKnob(this, knobImage);
 -     fKnobThresh->setAbsolutePos(191.5, 45);
 -     fKnobThresh->setId(ZamCompX2Plugin::paramThresh);
 -     fKnobThresh->setRange(-60.0f, 0.0f);
 -     fKnobThresh->setStep(1.0f);
 -     fKnobThresh->setDefault(0.0f);
 -     fKnobThresh->setRotationAngle(240);
 -     fKnobThresh->setCallback(this);
 - 
 -     fKnobRatio = new ImageKnob(this, knobImage);
 -     fKnobRatio->setAbsolutePos(270, 45);
 -     fKnobRatio->setId(ZamCompX2Plugin::paramRatio);
 -     fKnobRatio->setRange(1.0f, 20.0f);
 -     fKnobRatio->setStep(0.1f);
 -     fKnobRatio->setDefault(4.0f);
 -     fKnobRatio->setRotationAngle(240);
 -     fKnobRatio->setCallback(this);
 - 
 -     fKnobKnee = new ImageKnob(this, knobImage);
 -     fKnobKnee->setAbsolutePos(348.5, 45);
 -     fKnobKnee->setId(ZamCompX2Plugin::paramKnee);
 -     fKnobKnee->setRange(0.0f, 8.0f);
 -     fKnobKnee->setStep(0.1f);
 -     fKnobKnee->setDefault(0.0f);
 -     fKnobKnee->setRotationAngle(240);
 -     fKnobKnee->setCallback(this);
 - 
 -     fKnobMakeup = new ImageKnob(this, knobImage);
 -     fKnobMakeup->setAbsolutePos(427.3, 45);
 -     fKnobMakeup->setId(ZamCompX2Plugin::paramMakeup);
 -     fKnobMakeup->setRange(-30.0f, 30.0f);
 -     fKnobMakeup->setStep(1.0f);
 -     fKnobMakeup->setDefault(0.0f);
 -     fKnobMakeup->setRotationAngle(240);
 -     fKnobMakeup->setCallback(this);
 - 
 -     Image toggleonImage(ZamCompX2Artwork::toggleonData, ZamCompX2Artwork::toggleonWidth, ZamCompX2Artwork::toggleonHeight);
 -     Image toggleoffImage(ZamCompX2Artwork::toggleoffData, ZamCompX2Artwork::toggleoffWidth, ZamCompX2Artwork::toggleoffHeight);
 - 
 -     fToggleStereo = new ImageToggle(this, toggleoffImage, toggleonImage);
 -     fToggleStereo->setAbsolutePos(652, 72);
 -     fToggleStereo->setId(ZamCompX2Plugin::paramStereo);
 -     fToggleStereo->setCallback(this);
 - 
 -     // set default values
 -     d_programChanged(0);
 - }
 - 
 - // -----------------------------------------------------------------------
 - // DSP Callbacks
 - 
 - void ZamCompX2UI::d_parameterChanged(uint32_t index, float value)
 - {
 -     switch (index)
 -     {
 -     case ZamCompX2Plugin::paramAttack:
 -         fKnobAttack->setValue(value);
 -         break;
 -     case ZamCompX2Plugin::paramRelease:
 -         fKnobRelease->setValue(value);
 -         break;
 -     case ZamCompX2Plugin::paramThresh:
 -         fKnobThresh->setValue(value);
 -         break;
 -     case ZamCompX2Plugin::paramRatio:
 -         fKnobRatio->setValue(value);
 -         break;
 -     case ZamCompX2Plugin::paramKnee:
 -         fKnobKnee->setValue(value);
 -         break;
 -     case ZamCompX2Plugin::paramMakeup:
 -         fKnobMakeup->setValue(value);
 -         break;
 -     case ZamCompX2Plugin::paramGainRed:
 -         if (fLedRedValue != value)
 -         {
 -             fLedRedValue = value;
 -             repaint();
 -         }
 -         break;
 -     case ZamCompX2Plugin::paramOutputLevel:
 -         if (fLedYellowValue != value)
 -         {
 -             fLedYellowValue = value;
 -             repaint();
 -         }
 -         break;
 -     case ZamCompX2Plugin::paramStereo:
 -         fToggleStereo->setValue((int)value);
 -         break;
 -     }
 - }
 - 
 - void ZamCompX2UI::d_programChanged(uint32_t index)
 - {
 -     if (index != 0)
 -         return;
 - 
 -     // Default values
 -     fKnobAttack->setValue(10.0f);
 -     fKnobRelease->setValue(80.0f);
 -     fKnobThresh->setValue(0.0f);
 -     fKnobRatio->setValue(4.0f);
 -     fKnobKnee->setValue(0.0f);
 -     fKnobMakeup->setValue(0.0f);
 -     fToggleStereo->setValue(1.0f);
 - }
 - 
 - // -----------------------------------------------------------------------
 - // Widget Callbacks
 - 
 - void ZamCompX2UI::imageKnobDragStarted(ImageKnob* knob)
 - {
 -     d_editParameter(knob->getId(), true);
 - }
 - 
 - void ZamCompX2UI::imageKnobDragFinished(ImageKnob* knob)
 - {
 -     d_editParameter(knob->getId(), false);
 - }
 - 
 - void ZamCompX2UI::imageKnobValueChanged(ImageKnob* knob, float value)
 - {
 -     d_setParameterValue(knob->getId(), value);
 - }
 - 
 - void ZamCompX2UI::imageToggleClicked(ImageToggle* imageToggle, int)
 - {
 -     int flip = !imageToggle->getValue();
 -     if (imageToggle == fToggleStereo)
 -         d_setParameterValue(ZamCompX2Plugin::paramStereo, flip);
 - }
 - 
 - void ZamCompX2UI::onDisplay()
 - {
 -     fImgBackground.draw();
 - 
 -     // draw leds
 -     static const float sLedSpacing  = 15.5f;
 -     static const int   sLedInitialX = 498;
 - 
 -     static const int sYellowLedStaticY = 16;
 -     static const int sRedLedStaticY    = 45;
 - 
 -     int numRedLeds;
 -     int numYellowLeds;
 - 
 - 	if (fLedRedValue >= 40.f)
 - 		numRedLeds = 12;
 - 	else if (fLedRedValue >= 30.f)
 - 		numRedLeds = 11;
 - 	else if (fLedRedValue >= 20.f)
 - 		numRedLeds = 10;
 - 	else if (fLedRedValue >= 15.f)
 - 		numRedLeds = 9;
 - 	else if (fLedRedValue >= 10.f)
 - 		numRedLeds = 8;
 - 	else if (fLedRedValue >= 8.f)
 - 		numRedLeds = 7;
 - 	else if (fLedRedValue >= 6.f)
 - 		numRedLeds = 6;
 - 	else if (fLedRedValue >= 5.f)
 - 		numRedLeds = 5;
 - 	else if (fLedRedValue >= 4.f)
 - 		numRedLeds = 4;
 - 	else if (fLedRedValue >= 3.f)
 - 		numRedLeds = 3;
 - 	else if (fLedRedValue >= 2.f)
 - 		numRedLeds = 2;
 - 	else if (fLedRedValue >= 1.f)
 - 		numRedLeds = 1;
 - 	else numRedLeds = 0;
 - 
 -     for (int i=numRedLeds; i>0; --i)
 -         fLedRedImg.drawAt(sLedInitialX + (12 - i)*sLedSpacing, sRedLedStaticY);
 - 
 - 	if (fLedYellowValue >= 20.f)
 - 		numYellowLeds = 19;
 - 	else if (fLedYellowValue >= 10.f)
 - 		numYellowLeds = 18;
 - 	else if (fLedYellowValue >= 8.f)
 - 		numYellowLeds = 17;
 - 	else if (fLedYellowValue >= 4.f)
 - 		numYellowLeds = 16;
 - 	else if (fLedYellowValue >= 2.f)
 - 		numYellowLeds = 15;
 - 	else if (fLedYellowValue >= 1.f)
 - 		numYellowLeds = 14;
 - 	else if (fLedYellowValue >= 0.f)
 - 		numYellowLeds = 13;
 - 	else if (fLedYellowValue >= -1.f)
 - 		numYellowLeds = 12;
 - 	else if (fLedYellowValue >= -2.f)
 - 		numYellowLeds = 11;
 - 	else if (fLedYellowValue >= -3.f)
 - 		numYellowLeds = 10;
 - 	else if (fLedYellowValue >= -4.f)
 - 		numYellowLeds = 9;
 - 	else if (fLedYellowValue >= -5.f)
 - 		numYellowLeds = 8;
 - 	else if (fLedYellowValue >= -6.f)
 - 		numYellowLeds = 7;
 - 	else if (fLedYellowValue >= -8.f)
 - 		numYellowLeds = 6;
 - 	else if (fLedYellowValue >= -10.f)
 - 		numYellowLeds = 5;
 - 	else if (fLedYellowValue >= -15.f)
 - 		numYellowLeds = 4;
 - 	else if (fLedYellowValue >= -20.f)
 - 		numYellowLeds = 3;
 - 	else if (fLedYellowValue >= -30.f)
 - 		numYellowLeds = 2;
 - 	else if (fLedYellowValue >= -40.f)
 - 		numYellowLeds = 1;
 - 	else numYellowLeds = 0;
 - 
 - 	if (numYellowLeds > 12) {
 - 		for (int i=12; i<numYellowLeds; ++i)
 - 			fLedRedImg.drawAt(sLedInitialX + i*sLedSpacing, sYellowLedStaticY);
 - 		for (int i=0; i<12; ++i)
 - 			fLedYellowImg.drawAt(sLedInitialX + i*sLedSpacing, sYellowLedStaticY);
 - 	} else {
 - 		for (int i=0; i<numYellowLeds; ++i)
 - 			fLedYellowImg.drawAt(sLedInitialX + i*sLedSpacing, sYellowLedStaticY);
 - 	}
 - }
 - 
 - // -----------------------------------------------------------------------
 - 
 - UI* createUI()
 - {
 -     return new ZamCompX2UI();
 - }
 - 
 - // -----------------------------------------------------------------------
 - 
 - END_NAMESPACE_DISTRHO
 
 
  |