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.

231 lines
7.3KB

  1. /*
  2. * DISTRHO 3BandEQ Plugin, based on 3BandEQ by Michael Gruhn
  3. * Copyright (C) 2012-2013 Filipe Coelho <falktx@falktx.com>
  4. *
  5. * This program is free software; you can redistribute it and/or
  6. * modify it under the terms of the GNU Lesser General Public
  7. * License as published by the Free Software Foundation.
  8. *
  9. * This program is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. * GNU Lesser General Public License for more details.
  13. *
  14. * For a full copy of the license see the LGPL.txt file
  15. */
  16. #include "DistrhoUI3BandEQ.hpp"
  17. START_NAMESPACE_DISTRHO
  18. // -------------------------------------------------
  19. DistrhoUI3BandEQ::DistrhoUI3BandEQ()
  20. : OpenGLUI()
  21. {
  22. Window* win = getParent();
  23. // background
  24. fImgBackground = Image(DistrhoArtwork3BandEQ::backgroundData, DistrhoArtwork3BandEQ::backgroundWidth, DistrhoArtwork3BandEQ::backgroundHeight, GL_BGR);
  25. // sliders
  26. Image sliderImage(DistrhoArtwork3BandEQ::sliderData, DistrhoArtwork3BandEQ::sliderWidth, DistrhoArtwork3BandEQ::sliderHeight);
  27. Point<int> sliderPosStart(57, 43);
  28. Point<int> sliderPosEnd(57, 43 + 160);
  29. // slider Low
  30. fSliderLow = new ImageSlider(win, sliderImage);
  31. fSliderLow->setStartPos(sliderPosStart);
  32. fSliderLow->setEndPos(sliderPosEnd);
  33. fSliderLow->setRange(-24.0f, 24.0f);
  34. fSliderLow->setValue(0.0f);
  35. fSliderLow->setCallback(this);
  36. // slider Mid
  37. sliderPosStart.setX(120);
  38. sliderPosEnd.setX(120);
  39. fSliderMid = new ImageSlider(*fSliderLow);
  40. fSliderMid->setStartPos(sliderPosStart);
  41. fSliderMid->setEndPos(sliderPosEnd);
  42. // slider High
  43. sliderPosStart.setX(183);
  44. sliderPosEnd.setX(183);
  45. fSliderHigh = new ImageSlider(*fSliderLow);
  46. fSliderHigh->setStartPos(sliderPosStart);
  47. fSliderHigh->setEndPos(sliderPosEnd);
  48. // slider Master
  49. sliderPosStart.setX(287);
  50. sliderPosEnd.setX(287);
  51. fSliderMaster = new ImageSlider(*fSliderLow);
  52. fSliderMaster->setStartPos(sliderPosStart);
  53. fSliderMaster->setEndPos(sliderPosEnd);
  54. // knobs
  55. Image knobImage(DistrhoArtwork3BandEQ::knobData, DistrhoArtwork3BandEQ::knobWidth, DistrhoArtwork3BandEQ::knobHeight);
  56. // knob Low-Mid
  57. fKnobLowMid = new ImageKnob(win, knobImage);
  58. fKnobLowMid->setPos(66, 270);
  59. fKnobLowMid->setRange(0.0f, 1000.0f);
  60. fKnobLowMid->setValue(220.0f);
  61. fKnobLowMid->setCallback(this);
  62. // knob Mid-High
  63. fKnobMidHigh = new ImageKnob(win, knobImage);
  64. fKnobMidHigh->setPos(160, 270);
  65. fKnobMidHigh->setRange(1000.0f, 20000.0f);
  66. fKnobMidHigh->setValue(2000.0f);
  67. fKnobMidHigh->setCallback(this);
  68. // about button
  69. Image aboutImageNormal(DistrhoArtwork3BandEQ::aboutButtonNormalData, DistrhoArtwork3BandEQ::aboutButtonNormalWidth, DistrhoArtwork3BandEQ::aboutButtonNormalHeight);
  70. Image aboutImageHover(DistrhoArtwork3BandEQ::aboutButtonHoverData, DistrhoArtwork3BandEQ::aboutButtonHoverWidth, DistrhoArtwork3BandEQ::aboutButtonHoverHeight);
  71. fButtonAbout = new ImageButton(win, aboutImageNormal, aboutImageHover, aboutImageHover);
  72. fButtonAbout->setPos(264, 300);
  73. fButtonAbout->setCallback(this);
  74. }
  75. DistrhoUI3BandEQ::~DistrhoUI3BandEQ()
  76. {
  77. delete fSliderLow;
  78. delete fSliderMid;
  79. delete fSliderHigh;
  80. delete fSliderMaster;
  81. delete fKnobLowMid;
  82. delete fKnobMidHigh;
  83. delete fButtonAbout;
  84. }
  85. // -------------------------------------------------
  86. // DSP Callbacks
  87. void DistrhoUI3BandEQ::d_parameterChanged(uint32_t index, float value)
  88. {
  89. switch (index)
  90. {
  91. case DistrhoPlugin3BandEQ::paramLow:
  92. fSliderLow->setValue(value);
  93. break;
  94. case DistrhoPlugin3BandEQ::paramMid:
  95. fSliderMid->setValue(value);
  96. break;
  97. case DistrhoPlugin3BandEQ::paramHigh:
  98. fSliderHigh->setValue(value);
  99. break;
  100. case DistrhoPlugin3BandEQ::paramMaster:
  101. fSliderMaster->setValue(value);
  102. break;
  103. case DistrhoPlugin3BandEQ::paramLowMidFreq:
  104. fKnobLowMid->setValue(value);
  105. break;
  106. case DistrhoPlugin3BandEQ::paramMidHighFreq:
  107. fKnobMidHigh->setValue(value);
  108. break;
  109. }
  110. }
  111. void DistrhoUI3BandEQ::d_programChanged(uint32_t index)
  112. {
  113. if (index != 0)
  114. return;
  115. // Default values
  116. fSliderLow->setValue(0.0f);
  117. fSliderMid->setValue(0.0f);
  118. fSliderHigh->setValue(0.0f);
  119. fSliderMaster->setValue(0.0f);
  120. fKnobLowMid->setValue(220.0f);
  121. fKnobMidHigh->setValue(2000.0f);
  122. }
  123. // -------------------------------------------------
  124. // Extended Callbacks
  125. void DistrhoUI3BandEQ::imageButtonClicked(ImageButton* button, int)
  126. {
  127. if (button != fButtonAbout)
  128. return;
  129. Image imageAbout(DistrhoArtwork3BandEQ::aboutData, DistrhoArtwork3BandEQ::aboutWidth, DistrhoArtwork3BandEQ::aboutHeight, GL_BGRA);
  130. ImageAboutWindow aboutWindow(getApp(), getParent(), imageAbout);
  131. aboutWindow.exec();
  132. }
  133. void DistrhoUI3BandEQ::imageKnobDragStarted(ImageKnob* knob)
  134. {
  135. if (knob == fKnobLowMid)
  136. d_editParameter(DistrhoPlugin3BandEQ::paramLowMidFreq, true);
  137. else if (knob == fKnobMidHigh)
  138. d_editParameter(DistrhoPlugin3BandEQ::paramMidHighFreq, true);
  139. }
  140. void DistrhoUI3BandEQ::imageKnobDragFinished(ImageKnob* knob)
  141. {
  142. if (knob == fKnobLowMid)
  143. d_editParameter(DistrhoPlugin3BandEQ::paramLowMidFreq, false);
  144. else if (knob == fKnobMidHigh)
  145. d_editParameter(DistrhoPlugin3BandEQ::paramMidHighFreq, false);
  146. }
  147. void DistrhoUI3BandEQ::imageKnobValueChanged(ImageKnob* knob, float value)
  148. {
  149. if (knob == fKnobLowMid)
  150. d_setParameterValue(DistrhoPlugin3BandEQ::paramLowMidFreq, value);
  151. else if (knob == fKnobMidHigh)
  152. d_setParameterValue(DistrhoPlugin3BandEQ::paramMidHighFreq, value);
  153. }
  154. void DistrhoUI3BandEQ::imageSliderDragStarted(ImageSlider* slider)
  155. {
  156. if (slider == fSliderLow)
  157. d_editParameter(DistrhoPlugin3BandEQ::paramLow, true);
  158. else if (slider == fSliderMid)
  159. d_editParameter(DistrhoPlugin3BandEQ::paramMid, true);
  160. else if (slider == fSliderHigh)
  161. d_editParameter(DistrhoPlugin3BandEQ::paramHigh, true);
  162. else if (slider == fSliderMaster)
  163. d_editParameter(DistrhoPlugin3BandEQ::paramMaster, true);
  164. }
  165. void DistrhoUI3BandEQ::imageSliderDragFinished(ImageSlider* slider)
  166. {
  167. if (slider == fSliderLow)
  168. d_editParameter(DistrhoPlugin3BandEQ::paramLow, false);
  169. else if (slider == fSliderMid)
  170. d_editParameter(DistrhoPlugin3BandEQ::paramMid, false);
  171. else if (slider == fSliderHigh)
  172. d_editParameter(DistrhoPlugin3BandEQ::paramHigh, false);
  173. else if (slider == fSliderMaster)
  174. d_editParameter(DistrhoPlugin3BandEQ::paramMaster, false);
  175. }
  176. void DistrhoUI3BandEQ::imageSliderValueChanged(ImageSlider* slider, float value)
  177. {
  178. if (slider == fSliderLow)
  179. d_setParameterValue(DistrhoPlugin3BandEQ::paramLow, value);
  180. else if (slider == fSliderMid)
  181. d_setParameterValue(DistrhoPlugin3BandEQ::paramMid, value);
  182. else if (slider == fSliderHigh)
  183. d_setParameterValue(DistrhoPlugin3BandEQ::paramHigh, value);
  184. else if (slider == fSliderMaster)
  185. d_setParameterValue(DistrhoPlugin3BandEQ::paramMaster, value);
  186. }
  187. void DistrhoUI3BandEQ::onDisplay()
  188. {
  189. fImgBackground.draw();
  190. }
  191. // -------------------------------------------------
  192. UI* createUI()
  193. {
  194. return new DistrhoUI3BandEQ();
  195. }
  196. // -------------------------------------------------
  197. END_NAMESPACE_DISTRHO