DISTRHO Mini-Series
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.

226 lines
7.6KB

  1. /*
  2. * DISTRHO 3BandSplitter Plugin, based on 3BandSplitter by Michael Gruhn
  3. * Copyright (C) 2012-2014 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 LICENSE file.
  15. */
  16. #include "DistrhoPlugin3BandSplitter.hpp"
  17. #include "DistrhoUI3BandSplitter.hpp"
  18. using DGL::Point;
  19. START_NAMESPACE_DISTRHO
  20. // -----------------------------------------------------------------------
  21. DistrhoUI3BandSplitter::DistrhoUI3BandSplitter()
  22. : UI(),
  23. fAboutWindow(this)
  24. {
  25. // background
  26. fImgBackground = Image(DistrhoArtwork3BandSplitter::backgroundData, DistrhoArtwork3BandSplitter::backgroundWidth, DistrhoArtwork3BandSplitter::backgroundHeight, GL_BGR);
  27. // about
  28. Image aboutImage(DistrhoArtwork3BandSplitter::aboutData, DistrhoArtwork3BandSplitter::aboutWidth, DistrhoArtwork3BandSplitter::aboutHeight, GL_BGR);
  29. fAboutWindow.setImage(aboutImage);
  30. // sliders
  31. Image sliderImage(DistrhoArtwork3BandSplitter::sliderData, DistrhoArtwork3BandSplitter::sliderWidth, DistrhoArtwork3BandSplitter::sliderHeight);
  32. Point<int> sliderPosStart(57, 43);
  33. Point<int> sliderPosEnd(57, 43 + 160);
  34. // slider Low
  35. fSliderLow = new ImageSlider(this, sliderImage);
  36. fSliderLow->setStartPos(sliderPosStart);
  37. fSliderLow->setEndPos(sliderPosEnd);
  38. fSliderLow->setRange(-24.0f, 24.0f);
  39. fSliderLow->setCallback(this);
  40. // slider Mid
  41. sliderPosStart.setX(120);
  42. sliderPosEnd.setX(120);
  43. fSliderMid = new ImageSlider(*fSliderLow);
  44. fSliderMid->setStartPos(sliderPosStart);
  45. fSliderMid->setEndPos(sliderPosEnd);
  46. // slider High
  47. sliderPosStart.setX(183);
  48. sliderPosEnd.setX(183);
  49. fSliderHigh = new ImageSlider(*fSliderLow);
  50. fSliderHigh->setStartPos(sliderPosStart);
  51. fSliderHigh->setEndPos(sliderPosEnd);
  52. // slider Master
  53. sliderPosStart.setX(287);
  54. sliderPosEnd.setX(287);
  55. fSliderMaster = new ImageSlider(*fSliderLow);
  56. fSliderMaster->setStartPos(sliderPosStart);
  57. fSliderMaster->setEndPos(sliderPosEnd);
  58. // knobs
  59. Image knobImage(DistrhoArtwork3BandSplitter::knobData, DistrhoArtwork3BandSplitter::knobWidth, DistrhoArtwork3BandSplitter::knobHeight);
  60. // knob Low-Mid
  61. fKnobLowMid = new ImageKnob(this, knobImage);
  62. fKnobLowMid->setPos(65, 269);
  63. fKnobLowMid->setRange(0.0f, 1000.0f);
  64. fKnobLowMid->setRotationAngle(270);
  65. fKnobLowMid->setCallback(this);
  66. // knob Mid-High
  67. fKnobMidHigh = new ImageKnob(this, knobImage);
  68. fKnobMidHigh->setPos(159, 269);
  69. fKnobMidHigh->setRange(1000.0f, 20000.0f);
  70. fKnobMidHigh->setRotationAngle(270);
  71. fKnobMidHigh->setCallback(this);
  72. // about button
  73. Image aboutImageNormal(DistrhoArtwork3BandSplitter::aboutButtonNormalData, DistrhoArtwork3BandSplitter::aboutButtonNormalWidth, DistrhoArtwork3BandSplitter::aboutButtonNormalHeight);
  74. Image aboutImageHover(DistrhoArtwork3BandSplitter::aboutButtonHoverData, DistrhoArtwork3BandSplitter::aboutButtonHoverWidth, DistrhoArtwork3BandSplitter::aboutButtonHoverHeight);
  75. fButtonAbout = new ImageButton(this, aboutImageNormal, aboutImageHover, aboutImageHover);
  76. fButtonAbout->setPos(264, 300);
  77. fButtonAbout->setCallback(this);
  78. // set default values
  79. d_programChanged(0);
  80. }
  81. // -----------------------------------------------------------------------
  82. // DSP Callbacks
  83. void DistrhoUI3BandSplitter::d_parameterChanged(uint32_t index, float value)
  84. {
  85. switch (index)
  86. {
  87. case DistrhoPlugin3BandSplitter::paramLow:
  88. fSliderLow->setValue(value);
  89. break;
  90. case DistrhoPlugin3BandSplitter::paramMid:
  91. fSliderMid->setValue(value);
  92. break;
  93. case DistrhoPlugin3BandSplitter::paramHigh:
  94. fSliderHigh->setValue(value);
  95. break;
  96. case DistrhoPlugin3BandSplitter::paramMaster:
  97. fSliderMaster->setValue(value);
  98. break;
  99. case DistrhoPlugin3BandSplitter::paramLowMidFreq:
  100. fKnobLowMid->setValue(value);
  101. break;
  102. case DistrhoPlugin3BandSplitter::paramMidHighFreq:
  103. fKnobMidHigh->setValue(value);
  104. break;
  105. }
  106. }
  107. void DistrhoUI3BandSplitter::d_programChanged(uint32_t index)
  108. {
  109. if (index != 0)
  110. return;
  111. // Default values
  112. fSliderLow->setValue(0.0f);
  113. fSliderMid->setValue(0.0f);
  114. fSliderHigh->setValue(0.0f);
  115. fSliderMaster->setValue(0.0f);
  116. fKnobLowMid->setValue(220.0f);
  117. fKnobMidHigh->setValue(2000.0f);
  118. }
  119. // -----------------------------------------------------------------------
  120. // Widget Callbacks
  121. void DistrhoUI3BandSplitter::imageButtonClicked(ImageButton* button, int)
  122. {
  123. if (button != fButtonAbout)
  124. return;
  125. fAboutWindow.exec();
  126. }
  127. void DistrhoUI3BandSplitter::imageKnobDragStarted(ImageKnob* knob)
  128. {
  129. if (knob == fKnobLowMid)
  130. d_editParameter(DistrhoPlugin3BandSplitter::paramLowMidFreq, true);
  131. else if (knob == fKnobMidHigh)
  132. d_editParameter(DistrhoPlugin3BandSplitter::paramMidHighFreq, true);
  133. }
  134. void DistrhoUI3BandSplitter::imageKnobDragFinished(ImageKnob* knob)
  135. {
  136. if (knob == fKnobLowMid)
  137. d_editParameter(DistrhoPlugin3BandSplitter::paramLowMidFreq, false);
  138. else if (knob == fKnobMidHigh)
  139. d_editParameter(DistrhoPlugin3BandSplitter::paramMidHighFreq, false);
  140. }
  141. void DistrhoUI3BandSplitter::imageKnobValueChanged(ImageKnob* knob, float value)
  142. {
  143. if (knob == fKnobLowMid)
  144. d_setParameterValue(DistrhoPlugin3BandSplitter::paramLowMidFreq, value);
  145. else if (knob == fKnobMidHigh)
  146. d_setParameterValue(DistrhoPlugin3BandSplitter::paramMidHighFreq, value);
  147. }
  148. void DistrhoUI3BandSplitter::imageSliderDragStarted(ImageSlider* slider)
  149. {
  150. if (slider == fSliderLow)
  151. d_editParameter(DistrhoPlugin3BandSplitter::paramLow, true);
  152. else if (slider == fSliderMid)
  153. d_editParameter(DistrhoPlugin3BandSplitter::paramMid, true);
  154. else if (slider == fSliderHigh)
  155. d_editParameter(DistrhoPlugin3BandSplitter::paramHigh, true);
  156. else if (slider == fSliderMaster)
  157. d_editParameter(DistrhoPlugin3BandSplitter::paramMaster, true);
  158. }
  159. void DistrhoUI3BandSplitter::imageSliderDragFinished(ImageSlider* slider)
  160. {
  161. if (slider == fSliderLow)
  162. d_editParameter(DistrhoPlugin3BandSplitter::paramLow, false);
  163. else if (slider == fSliderMid)
  164. d_editParameter(DistrhoPlugin3BandSplitter::paramMid, false);
  165. else if (slider == fSliderHigh)
  166. d_editParameter(DistrhoPlugin3BandSplitter::paramHigh, false);
  167. else if (slider == fSliderMaster)
  168. d_editParameter(DistrhoPlugin3BandSplitter::paramMaster, false);
  169. }
  170. void DistrhoUI3BandSplitter::imageSliderValueChanged(ImageSlider* slider, float value)
  171. {
  172. if (slider == fSliderLow)
  173. d_setParameterValue(DistrhoPlugin3BandSplitter::paramLow, value);
  174. else if (slider == fSliderMid)
  175. d_setParameterValue(DistrhoPlugin3BandSplitter::paramMid, value);
  176. else if (slider == fSliderHigh)
  177. d_setParameterValue(DistrhoPlugin3BandSplitter::paramHigh, value);
  178. else if (slider == fSliderMaster)
  179. d_setParameterValue(DistrhoPlugin3BandSplitter::paramMaster, value);
  180. }
  181. void DistrhoUI3BandSplitter::onDisplay()
  182. {
  183. fImgBackground.draw();
  184. }
  185. // -----------------------------------------------------------------------
  186. UI* createUI()
  187. {
  188. return new DistrhoUI3BandSplitter();
  189. }
  190. // -----------------------------------------------------------------------
  191. END_NAMESPACE_DISTRHO