Audio plugin host https://kx.studio/carla
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

574 lines
18KB

  1. /*
  2. * ZaMultiComp mono multiband compressor
  3. * Copyright (C) 2014 Damien Zammit <damien@zamaudio.com>
  4. *
  5. * This program is free software; you can redistribute it and/or
  6. * modify it under the terms of the GNU General Public License as
  7. * published by the Free Software Foundation; either version 2 of
  8. * the License, or any later version.
  9. *
  10. * This program is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. * GNU General Public License for more details.
  14. *
  15. * For a full copy of the GNU General Public License see the doc/GPL.txt file.
  16. */
  17. #include "ZaMultiCompUI.hpp"
  18. #include <stdio.h>
  19. using DGL::Point;
  20. START_NAMESPACE_DISTRHO
  21. // -----------------------------------------------------------------------
  22. ZaMultiCompUI::ZaMultiCompUI()
  23. : UI()
  24. {
  25. // background
  26. fImgBackground = Image(ZaMultiCompArtwork::zamulticompData, ZaMultiCompArtwork::zamulticompWidth, ZaMultiCompArtwork::zamulticompHeight, GL_BGR);
  27. // led images
  28. fLedRedImg = Image(ZaMultiCompArtwork::ledredData, ZaMultiCompArtwork::ledredWidth, ZaMultiCompArtwork::ledredHeight);
  29. fLedYellowImg = Image(ZaMultiCompArtwork::ledyellowData, ZaMultiCompArtwork::ledyellowWidth, ZaMultiCompArtwork::ledyellowHeight);
  30. // led values
  31. fLedRedValue1 = 0.0f;
  32. fLedRedValue2 = 0.0f;
  33. fLedRedValue3 = 0.0f;
  34. fLedYellowValue = 0.0f;
  35. // knob
  36. Image knobImage(ZaMultiCompArtwork::knobData, ZaMultiCompArtwork::knobWidth, ZaMultiCompArtwork::knobHeight);
  37. // knob
  38. fKnobAttack = new ImageKnob(this, knobImage);
  39. fKnobAttack->setPos(24, 43);
  40. fKnobAttack->setRange(0.1f, 200.0f);
  41. fKnobAttack->setStep(0.1f);
  42. //fKnobAttack->setLogScale(true);
  43. //fKnobAttack->setDefault(10.0f);
  44. fKnobAttack->setRotationAngle(240);
  45. fKnobAttack->setCallback(this);
  46. fKnobRelease = new ImageKnob(this, knobImage);
  47. fKnobRelease->setPos(108, 43);
  48. fKnobRelease->setRange(50.0f, 500.0f);
  49. fKnobRelease->setStep(1.0f);
  50. //fKnobRelease->setDefault(80.0f);
  51. fKnobRelease->setRotationAngle(240);
  52. fKnobRelease->setCallback(this);
  53. fKnobThresh = new ImageKnob(this, knobImage);
  54. fKnobThresh->setPos(191.5, 43);
  55. fKnobThresh->setRange(-60.0f, 0.0f);
  56. fKnobThresh->setStep(1.0f);
  57. //fKnobThresh->setDefault(0.0f);
  58. fKnobThresh->setRotationAngle(240);
  59. fKnobThresh->setCallback(this);
  60. fKnobRatio = new ImageKnob(this, knobImage);
  61. fKnobRatio->setPos(270, 43);
  62. fKnobRatio->setRange(1.0f, 20.0f);
  63. fKnobRatio->setStep(0.1f);
  64. //fKnobRatio->setDefault(4.0f);
  65. fKnobRatio->setRotationAngle(240);
  66. fKnobRatio->setCallback(this);
  67. fKnobKnee = new ImageKnob(this, knobImage);
  68. fKnobKnee->setPos(348.5, 43);
  69. fKnobKnee->setRange(0.0f, 8.0f);
  70. fKnobKnee->setStep(0.1f);
  71. //fKnobKnee->setDefault(0.0f);
  72. fKnobKnee->setRotationAngle(240);
  73. fKnobKnee->setCallback(this);
  74. fKnobGlobalGain = new ImageKnob(this, knobImage);
  75. fKnobGlobalGain->setPos(427.3, 43);
  76. fKnobGlobalGain->setRange(-30.0f, 30.0f);
  77. fKnobGlobalGain->setStep(1.0f);
  78. //fKnobGlobalGain->setDefault(0.0f);
  79. fKnobGlobalGain->setRotationAngle(240);
  80. fKnobGlobalGain->setCallback(this);
  81. fKnobXover2 = new ImageKnob(this, knobImage);
  82. fKnobXover2->setPos(84, 121);
  83. fKnobXover2->setRange(1400.f, 14000.f);
  84. fKnobXover2->setStep(1.0f);
  85. //fKnobXover2->setLogScale(true);
  86. //fKnobXover2->setDefault(1400.f);
  87. fKnobXover2->setRotationAngle(240);
  88. fKnobXover2->setCallback(this);
  89. fKnobXover1 = new ImageKnob(this, knobImage);
  90. fKnobXover1->setPos(84, 176);
  91. fKnobXover1->setRange(20.0f, 1400.0f);
  92. fKnobXover1->setStep(1.0f);
  93. //fKnobXover1->setLogScale(true);
  94. //fKnobXover1->setDefault(250.0f);
  95. fKnobXover1->setRotationAngle(240);
  96. fKnobXover1->setCallback(this);
  97. fKnobMakeup3 = new ImageKnob(this, knobImage);
  98. fKnobMakeup3->setPos(167.75, 99.5);
  99. fKnobMakeup3->setRange(0.0f, 30.0f);
  100. fKnobMakeup3->setStep(0.1f);
  101. //fKnobMakeup3->setDefault(0.0f);
  102. fKnobMakeup3->setRotationAngle(240);
  103. fKnobMakeup3->setCallback(this);
  104. fKnobMakeup2 = new ImageKnob(this, knobImage);
  105. fKnobMakeup2->setPos(167.75, 150.25);
  106. fKnobMakeup2->setRange(0.0f, 30.0f);
  107. fKnobMakeup2->setStep(0.1f);
  108. //fKnobMakeup2->setDefault(0.0f);
  109. fKnobMakeup2->setRotationAngle(240);
  110. fKnobMakeup2->setCallback(this);
  111. fKnobMakeup1 = new ImageKnob(this, knobImage);
  112. fKnobMakeup1->setPos(167.75, 201.4);
  113. fKnobMakeup1->setRange(0.0f, 30.0f);
  114. fKnobMakeup1->setStep(0.1f);
  115. //fKnobMakeup1->setDefault(0.0f);
  116. fKnobMakeup1->setRotationAngle(240);
  117. fKnobMakeup1->setCallback(this);
  118. Image toggleonImage(ZaMultiCompArtwork::toggleonData, ZaMultiCompArtwork::toggleonWidth, ZaMultiCompArtwork::toggleonHeight);
  119. Image toggleoffImage(ZaMultiCompArtwork::toggleoffData, ZaMultiCompArtwork::toggleoffWidth, ZaMultiCompArtwork::toggleoffHeight);
  120. Image toggleonhImage(ZaMultiCompArtwork::toggleonhorizData, ZaMultiCompArtwork::toggleonhorizWidth, ZaMultiCompArtwork::toggleonhorizHeight);
  121. Image toggleoffhImage(ZaMultiCompArtwork::toggleoffhorizData, ZaMultiCompArtwork::toggleoffhorizWidth, ZaMultiCompArtwork::toggleoffhorizHeight);
  122. Point<int> togglePosStart(247,109);
  123. fToggleBypass3 = new ImageToggle(this, toggleoffImage, toggleoffImage, toggleonImage);
  124. fToggleBypass3->setPos(togglePosStart);
  125. fToggleBypass3->setCallback(this);
  126. togglePosStart.setY(158);
  127. fToggleBypass2 = new ImageToggle(this, toggleoffImage, toggleoffImage, toggleonImage);
  128. fToggleBypass2->setPos(togglePosStart);
  129. fToggleBypass2->setCallback(this);
  130. togglePosStart.setY(209);
  131. fToggleBypass1 = new ImageToggle(this, toggleoffImage, toggleoffImage, toggleonImage);
  132. fToggleBypass1->setPos(togglePosStart);
  133. fToggleBypass1->setCallback(this);
  134. togglePosStart.setX(278);
  135. togglePosStart.setY(113);
  136. fToggleListen3 = new ImageToggle(this, toggleoffhImage, toggleoffhImage, toggleonhImage);
  137. fToggleListen3->setPos(togglePosStart);
  138. fToggleListen3->setCallback(this);
  139. togglePosStart.setY(164);
  140. fToggleListen2 = new ImageToggle(this, toggleoffhImage, toggleoffhImage, toggleonhImage);
  141. fToggleListen2->setPos(togglePosStart);
  142. fToggleListen2->setCallback(this);
  143. togglePosStart.setY(214);
  144. fToggleListen1 = new ImageToggle(this, toggleoffhImage, toggleoffhImage, toggleonhImage);
  145. fToggleListen1->setPos(togglePosStart);
  146. fToggleListen1->setCallback(this);
  147. }
  148. ZaMultiCompUI::~ZaMultiCompUI()
  149. {
  150. delete fKnobAttack;
  151. delete fKnobRelease;
  152. delete fKnobThresh;
  153. delete fKnobRatio;
  154. delete fKnobKnee;
  155. delete fKnobGlobalGain;
  156. delete fKnobMakeup1;
  157. delete fKnobMakeup2;
  158. delete fKnobMakeup3;
  159. delete fKnobXover1;
  160. delete fKnobXover2;
  161. delete fToggleBypass1;
  162. delete fToggleBypass2;
  163. delete fToggleBypass3;
  164. delete fToggleListen1;
  165. delete fToggleListen2;
  166. delete fToggleListen3;
  167. }
  168. // -----------------------------------------------------------------------
  169. // DSP Callbacks
  170. void ZaMultiCompUI::d_parameterChanged(uint32_t index, float value)
  171. {
  172. switch (index)
  173. {
  174. case ZaMultiCompPlugin::paramAttack:
  175. fKnobAttack->setValue(value);
  176. break;
  177. case ZaMultiCompPlugin::paramRelease:
  178. fKnobRelease->setValue(value);
  179. break;
  180. case ZaMultiCompPlugin::paramThresh:
  181. fKnobThresh->setValue(value);
  182. break;
  183. case ZaMultiCompPlugin::paramRatio:
  184. fKnobRatio->setValue(value);
  185. break;
  186. case ZaMultiCompPlugin::paramKnee:
  187. fKnobKnee->setValue(value);
  188. break;
  189. case ZaMultiCompPlugin::paramGlobalGain:
  190. fKnobGlobalGain->setValue(value);
  191. break;
  192. case ZaMultiCompPlugin::paramGainR1:
  193. if (fLedRedValue1 != value)
  194. {
  195. fLedRedValue1 = value;
  196. repaint();
  197. }
  198. break;
  199. case ZaMultiCompPlugin::paramGainR2:
  200. if (fLedRedValue2 != value)
  201. {
  202. fLedRedValue2 = value;
  203. repaint();
  204. }
  205. break;
  206. case ZaMultiCompPlugin::paramGainR3:
  207. if (fLedRedValue3 != value)
  208. {
  209. fLedRedValue3 = value;
  210. repaint();
  211. }
  212. break;
  213. case ZaMultiCompPlugin::paramOutputLevel:
  214. if (fLedYellowValue != value)
  215. {
  216. fLedYellowValue = value;
  217. repaint();
  218. }
  219. break;
  220. case ZaMultiCompPlugin::paramMakeup1:
  221. fKnobMakeup1->setValue(value);
  222. break;
  223. case ZaMultiCompPlugin::paramMakeup2:
  224. fKnobMakeup2->setValue(value);
  225. break;
  226. case ZaMultiCompPlugin::paramMakeup3:
  227. fKnobMakeup3->setValue(value);
  228. break;
  229. case ZaMultiCompPlugin::paramToggle1:
  230. //fToggleBypass1->setValue(value);
  231. break;
  232. case ZaMultiCompPlugin::paramToggle2:
  233. //fToggleBypass2->setValue(value);
  234. break;
  235. case ZaMultiCompPlugin::paramToggle3:
  236. //fToggleBypass3->setValue(value);
  237. break;
  238. case ZaMultiCompPlugin::paramListen1:
  239. //fToggleListen1->setValue(value);
  240. break;
  241. case ZaMultiCompPlugin::paramListen2:
  242. //fToggleListen2->setValue(value);
  243. break;
  244. case ZaMultiCompPlugin::paramListen3:
  245. //fToggleListen3->setValue(value);
  246. break;
  247. }
  248. }
  249. void ZaMultiCompUI::d_programChanged(uint32_t index)
  250. {
  251. if (index != 0)
  252. return;
  253. // Default values
  254. fKnobAttack->setValue(10.0f);
  255. fKnobRelease->setValue(80.0f);
  256. fKnobThresh->setValue(0.0f);
  257. fKnobRatio->setValue(4.0f);
  258. fKnobKnee->setValue(0.0f);
  259. fKnobGlobalGain->setValue(0.0f);
  260. fKnobMakeup1->setValue(0.0f);
  261. fKnobMakeup2->setValue(0.0f);
  262. fKnobMakeup3->setValue(0.0f);
  263. fKnobXover1->setValue(250.0f);
  264. fKnobXover2->setValue(1400.0f);
  265. fToggleBypass1->setValue(1.0f);
  266. fToggleBypass2->setValue(1.0f);
  267. fToggleBypass3->setValue(1.0f);
  268. fToggleListen1->setValue(1.0f);
  269. fToggleListen2->setValue(1.0f);
  270. fToggleListen3->setValue(1.0f);
  271. }
  272. // -----------------------------------------------------------------------
  273. // Widget Callbacks
  274. void ZaMultiCompUI::imageKnobDragStarted(ImageKnob* knob)
  275. {
  276. if (knob == fKnobAttack)
  277. d_editParameter(ZaMultiCompPlugin::paramAttack, true);
  278. else if (knob == fKnobRelease)
  279. d_editParameter(ZaMultiCompPlugin::paramRelease, true);
  280. else if (knob == fKnobThresh)
  281. d_editParameter(ZaMultiCompPlugin::paramThresh, true);
  282. else if (knob == fKnobRatio)
  283. d_editParameter(ZaMultiCompPlugin::paramRatio, true);
  284. else if (knob == fKnobKnee)
  285. d_editParameter(ZaMultiCompPlugin::paramKnee, true);
  286. else if (knob == fKnobGlobalGain)
  287. d_editParameter(ZaMultiCompPlugin::paramGlobalGain, true);
  288. else if (knob == fKnobMakeup1)
  289. d_editParameter(ZaMultiCompPlugin::paramMakeup1, true);
  290. else if (knob == fKnobMakeup2)
  291. d_editParameter(ZaMultiCompPlugin::paramMakeup2, true);
  292. else if (knob == fKnobMakeup3)
  293. d_editParameter(ZaMultiCompPlugin::paramMakeup3, true);
  294. else if (knob == fKnobXover1)
  295. d_editParameter(ZaMultiCompPlugin::paramXover1, true);
  296. else if (knob == fKnobXover2)
  297. d_editParameter(ZaMultiCompPlugin::paramXover2, true);
  298. }
  299. void ZaMultiCompUI::imageKnobDragFinished(ImageKnob* knob)
  300. {
  301. if (knob == fKnobAttack)
  302. d_editParameter(ZaMultiCompPlugin::paramAttack, false);
  303. else if (knob == fKnobRelease)
  304. d_editParameter(ZaMultiCompPlugin::paramRelease, false);
  305. else if (knob == fKnobThresh)
  306. d_editParameter(ZaMultiCompPlugin::paramThresh, false);
  307. else if (knob == fKnobRatio)
  308. d_editParameter(ZaMultiCompPlugin::paramRatio, false);
  309. else if (knob == fKnobKnee)
  310. d_editParameter(ZaMultiCompPlugin::paramKnee, false);
  311. else if (knob == fKnobGlobalGain)
  312. d_editParameter(ZaMultiCompPlugin::paramGlobalGain, false);
  313. else if (knob == fKnobMakeup1)
  314. d_editParameter(ZaMultiCompPlugin::paramMakeup1, false);
  315. else if (knob == fKnobMakeup2)
  316. d_editParameter(ZaMultiCompPlugin::paramMakeup2, false);
  317. else if (knob == fKnobMakeup3)
  318. d_editParameter(ZaMultiCompPlugin::paramMakeup3, false);
  319. else if (knob == fKnobXover1)
  320. d_editParameter(ZaMultiCompPlugin::paramXover1, false);
  321. else if (knob == fKnobXover2)
  322. d_editParameter(ZaMultiCompPlugin::paramXover2, false);
  323. }
  324. void ZaMultiCompUI::imageKnobValueChanged(ImageKnob* knob, float value)
  325. {
  326. if (knob == fKnobAttack)
  327. d_setParameterValue(ZaMultiCompPlugin::paramAttack, value);
  328. else if (knob == fKnobRelease)
  329. d_setParameterValue(ZaMultiCompPlugin::paramRelease, value);
  330. else if (knob == fKnobThresh)
  331. d_setParameterValue(ZaMultiCompPlugin::paramThresh, value);
  332. else if (knob == fKnobRatio)
  333. d_setParameterValue(ZaMultiCompPlugin::paramRatio, value);
  334. else if (knob == fKnobKnee)
  335. d_setParameterValue(ZaMultiCompPlugin::paramKnee, value);
  336. else if (knob == fKnobGlobalGain)
  337. d_setParameterValue(ZaMultiCompPlugin::paramGlobalGain, value);
  338. else if (knob == fKnobMakeup1)
  339. d_setParameterValue(ZaMultiCompPlugin::paramMakeup1, value);
  340. else if (knob == fKnobMakeup2)
  341. d_setParameterValue(ZaMultiCompPlugin::paramMakeup2, value);
  342. else if (knob == fKnobMakeup3)
  343. d_setParameterValue(ZaMultiCompPlugin::paramMakeup3, value);
  344. else if (knob == fKnobXover1)
  345. d_setParameterValue(ZaMultiCompPlugin::paramXover1, value);
  346. else if (knob == fKnobXover2)
  347. d_setParameterValue(ZaMultiCompPlugin::paramXover2, value);
  348. }
  349. void ZaMultiCompUI::imageToggleClicked(ImageToggle* toggle, int)
  350. {
  351. float v = toggle->getValue();
  352. if (toggle == fToggleBypass1)
  353. d_setParameterValue(ZaMultiCompPlugin::paramToggle1, v);
  354. else if (toggle == fToggleBypass2)
  355. d_setParameterValue(ZaMultiCompPlugin::paramToggle2, v);
  356. else if (toggle == fToggleBypass3)
  357. d_setParameterValue(ZaMultiCompPlugin::paramToggle3, v);
  358. else if (toggle == fToggleListen1)
  359. d_setParameterValue(ZaMultiCompPlugin::paramListen1, v);
  360. else if (toggle == fToggleListen2)
  361. d_setParameterValue(ZaMultiCompPlugin::paramListen2, v);
  362. else if (toggle == fToggleListen3)
  363. d_setParameterValue(ZaMultiCompPlugin::paramListen3, v);
  364. }
  365. void ZaMultiCompUI::onDisplay()
  366. {
  367. fImgBackground.draw();
  368. // draw leds
  369. static const float sLedSpacing = 15.5f;
  370. static const int sLedInitialX = 343;
  371. static const int sYellowLedStaticY = 265;
  372. static const int sRedLed1StaticY = 215;
  373. static const int sRedLed2StaticY = 164;
  374. static const int sRedLed3StaticY = 113;
  375. int numRedLeds1;
  376. int numRedLeds2;
  377. int numRedLeds3;
  378. int numYellowLeds;
  379. if (fLedRedValue1 >= 40.f)
  380. numRedLeds1 = 12;
  381. else if (fLedRedValue1 >= 30.f)
  382. numRedLeds1 = 11;
  383. else if (fLedRedValue1 >= 20.f)
  384. numRedLeds1 = 10;
  385. else if (fLedRedValue1 >= 15.f)
  386. numRedLeds1 = 9;
  387. else if (fLedRedValue1 >= 10.f)
  388. numRedLeds1 = 8;
  389. else if (fLedRedValue1 >= 8.f)
  390. numRedLeds1 = 7;
  391. else if (fLedRedValue1 >= 6.f)
  392. numRedLeds1 = 6;
  393. else if (fLedRedValue1 >= 5.f)
  394. numRedLeds1 = 5;
  395. else if (fLedRedValue1 >= 4.f)
  396. numRedLeds1 = 4;
  397. else if (fLedRedValue1 >= 3.f)
  398. numRedLeds1 = 3;
  399. else if (fLedRedValue1 >= 2.f)
  400. numRedLeds1 = 2;
  401. else if (fLedRedValue1 >= 1.f)
  402. numRedLeds1 = 1;
  403. else numRedLeds1 = 0;
  404. if (fLedRedValue2 >= 40.f)
  405. numRedLeds2 = 12;
  406. else if (fLedRedValue2 >= 30.f)
  407. numRedLeds2 = 11;
  408. else if (fLedRedValue2 >= 20.f)
  409. numRedLeds2 = 10;
  410. else if (fLedRedValue2 >= 15.f)
  411. numRedLeds2 = 9;
  412. else if (fLedRedValue2 >= 10.f)
  413. numRedLeds2 = 8;
  414. else if (fLedRedValue2 >= 8.f)
  415. numRedLeds2 = 7;
  416. else if (fLedRedValue2 >= 6.f)
  417. numRedLeds2 = 6;
  418. else if (fLedRedValue2 >= 5.f)
  419. numRedLeds2 = 5;
  420. else if (fLedRedValue2 >= 4.f)
  421. numRedLeds2 = 4;
  422. else if (fLedRedValue2 >= 3.f)
  423. numRedLeds2 = 3;
  424. else if (fLedRedValue2 >= 2.f)
  425. numRedLeds2 = 2;
  426. else if (fLedRedValue2 >= 1.f)
  427. numRedLeds2 = 1;
  428. else numRedLeds2 = 0;
  429. if (fLedRedValue3 >= 40.f)
  430. numRedLeds3 = 12;
  431. else if (fLedRedValue3 >= 30.f)
  432. numRedLeds3 = 11;
  433. else if (fLedRedValue3 >= 20.f)
  434. numRedLeds3 = 10;
  435. else if (fLedRedValue3 >= 15.f)
  436. numRedLeds3 = 9;
  437. else if (fLedRedValue3 >= 10.f)
  438. numRedLeds3 = 8;
  439. else if (fLedRedValue3 >= 8.f)
  440. numRedLeds3 = 7;
  441. else if (fLedRedValue3 >= 6.f)
  442. numRedLeds3 = 6;
  443. else if (fLedRedValue3 >= 5.f)
  444. numRedLeds3 = 5;
  445. else if (fLedRedValue3 >= 4.f)
  446. numRedLeds3 = 4;
  447. else if (fLedRedValue3 >= 3.f)
  448. numRedLeds3 = 3;
  449. else if (fLedRedValue3 >= 2.f)
  450. numRedLeds3 = 2;
  451. else if (fLedRedValue3 >= 1.f)
  452. numRedLeds3 = 1;
  453. else numRedLeds3 = 0;
  454. for (int i=numRedLeds1; i>0; --i)
  455. fLedRedImg.draw(sLedInitialX + (12 - i)*sLedSpacing, sRedLed1StaticY);
  456. for (int i=numRedLeds2; i>0; --i)
  457. fLedRedImg.draw(sLedInitialX + (12 - i)*sLedSpacing, sRedLed2StaticY);
  458. for (int i=numRedLeds3; i>0; --i)
  459. fLedRedImg.draw(sLedInitialX + (12 - i)*sLedSpacing, sRedLed3StaticY);
  460. if (fLedYellowValue >= 20.f)
  461. numYellowLeds = 19;
  462. else if (fLedYellowValue >= 10.f)
  463. numYellowLeds = 18;
  464. else if (fLedYellowValue >= 8.f)
  465. numYellowLeds = 17;
  466. else if (fLedYellowValue >= 4.f)
  467. numYellowLeds = 16;
  468. else if (fLedYellowValue >= 2.f)
  469. numYellowLeds = 15;
  470. else if (fLedYellowValue >= 1.f)
  471. numYellowLeds = 14;
  472. else if (fLedYellowValue >= 0.f)
  473. numYellowLeds = 13;
  474. else if (fLedYellowValue >= -1.f)
  475. numYellowLeds = 12;
  476. else if (fLedYellowValue >= -2.f)
  477. numYellowLeds = 11;
  478. else if (fLedYellowValue >= -3.f)
  479. numYellowLeds = 10;
  480. else if (fLedYellowValue >= -4.f)
  481. numYellowLeds = 9;
  482. else if (fLedYellowValue >= -5.f)
  483. numYellowLeds = 8;
  484. else if (fLedYellowValue >= -6.f)
  485. numYellowLeds = 7;
  486. else if (fLedYellowValue >= -8.f)
  487. numYellowLeds = 6;
  488. else if (fLedYellowValue >= -10.f)
  489. numYellowLeds = 5;
  490. else if (fLedYellowValue >= -15.f)
  491. numYellowLeds = 4;
  492. else if (fLedYellowValue >= -20.f)
  493. numYellowLeds = 3;
  494. else if (fLedYellowValue >= -30.f)
  495. numYellowLeds = 2;
  496. else if (fLedYellowValue >= -40.f)
  497. numYellowLeds = 1;
  498. else numYellowLeds = 0;
  499. if (numYellowLeds > 12) {
  500. for (int i=12; i<numYellowLeds; ++i)
  501. fLedRedImg.draw(sLedInitialX + i*sLedSpacing, sYellowLedStaticY);
  502. for (int i=0; i<12; ++i)
  503. fLedYellowImg.draw(sLedInitialX + i*sLedSpacing, sYellowLedStaticY);
  504. } else {
  505. for (int i=0; i<numYellowLeds; ++i)
  506. fLedYellowImg.draw(sLedInitialX + i*sLedSpacing, sYellowLedStaticY);
  507. }
  508. }
  509. // -----------------------------------------------------------------------
  510. UI* createUI()
  511. {
  512. return new ZaMultiCompUI();
  513. }
  514. // -----------------------------------------------------------------------
  515. END_NAMESPACE_DISTRHO