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.

224 lines
7.0KB

  1. /*
  2. * Wobble Juice Plugin
  3. * Copyright (C) 2014 Andre Sklenar <andre.sklenar@gmail.com>, www.juicelab.cz
  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 "WobbleJuiceUI.hpp"
  18. using DGL::Point;
  19. START_NAMESPACE_DISTRHO
  20. // -----------------------------------------------------------------------
  21. WobbleJuiceUI::WobbleJuiceUI()
  22. : UI(),
  23. fAboutWindow(this)
  24. {
  25. // background
  26. fImgBackground = Image(WobbleJuiceArtwork::backgroundData, WobbleJuiceArtwork::backgroundWidth, WobbleJuiceArtwork::backgroundHeight, GL_BGR);
  27. // about
  28. Image imageAbout(WobbleJuiceArtwork::aboutData, WobbleJuiceArtwork::aboutWidth, WobbleJuiceArtwork::aboutHeight, GL_BGR);
  29. fAboutWindow.setImage(imageAbout);
  30. // knobs
  31. Image knobImage(WobbleJuiceArtwork::knobData, WobbleJuiceArtwork::knobWidth, WobbleJuiceArtwork::knobHeight);
  32. // knob Division
  33. fKnobDivision = new ImageKnob(this, knobImage);
  34. fKnobDivision->setPos(222, 74);
  35. fKnobDivision->setRange(1.0f, 16.0f);
  36. fKnobDivision->setStep(1.0f);
  37. fKnobDivision->setValue(4.0f);
  38. fKnobDivision->setRotationAngle(270);
  39. fKnobDivision->setCallback(this);
  40. // knob Resonance
  41. fKnobResonance = new ImageKnob(this, knobImage);
  42. fKnobResonance->setPos(222, 199);
  43. fKnobResonance->setRange(0.0f, 0.2f);
  44. fKnobResonance->setValue(0.1f);
  45. fKnobResonance->setRotationAngle(270);
  46. fKnobResonance->setCallback(this);
  47. // knob Range
  48. fKnobRange = new ImageKnob(this, knobImage);
  49. fKnobRange->setPos(77, 199);
  50. fKnobRange->setRange(500.0f, 16000.0f);
  51. fKnobRange->setValue(16000.0f);
  52. fKnobRange->setRotationAngle(270);
  53. fKnobRange->setCallback(this);
  54. // knob Wave
  55. fKnobWave = new ImageKnob(this, knobImage);
  56. fKnobWave->setPos(77, 74);
  57. fKnobWave->setRange(1.0f, 4.0f);
  58. fKnobWave->setValue(2.0f);
  59. fKnobWave->setRotationAngle(270);
  60. fKnobWave->setCallback(this);
  61. // knob Drive
  62. fKnobDrive = new ImageKnob(this, knobImage);
  63. fKnobDrive->setPos(362, 199);
  64. fKnobDrive->setRange(0.0f, 1.0f);
  65. fKnobDrive->setValue(0.5f);
  66. fKnobDrive->setRotationAngle(270);
  67. fKnobDrive->setCallback(this);
  68. // knob Phase
  69. fKnobPhase = new ImageKnob(this, knobImage);
  70. fKnobPhase->setPos(362, 74);
  71. fKnobPhase->setRange(-1.0f, 1.0f);
  72. fKnobPhase->setValue(0.0f);
  73. fKnobPhase->setRotationAngle(270);
  74. fKnobPhase->setCallback(this);
  75. // about button
  76. Image aboutImageNormal(WobbleJuiceArtwork::aboutButtonNormalData, WobbleJuiceArtwork::aboutButtonNormalWidth, WobbleJuiceArtwork::aboutButtonNormalHeight);
  77. Image aboutImageHover(WobbleJuiceArtwork::aboutButtonHoverData, WobbleJuiceArtwork::aboutButtonHoverWidth, WobbleJuiceArtwork::aboutButtonHoverHeight);
  78. fButtonAbout = new ImageButton(this, aboutImageNormal, aboutImageHover, aboutImageHover);
  79. fButtonAbout->setPos(390, 20);
  80. fButtonAbout->setCallback(this);
  81. }
  82. WobbleJuiceUI::~WobbleJuiceUI()
  83. {
  84. delete fKnobDivision;
  85. delete fKnobResonance;
  86. delete fKnobRange;
  87. delete fKnobWave;
  88. delete fKnobDrive;
  89. delete fKnobPhase;
  90. delete fButtonAbout;
  91. }
  92. // -----------------------------------------------------------------------
  93. // DSP Callbacks
  94. void WobbleJuiceUI::d_parameterChanged(uint32_t index, float value)
  95. {
  96. switch (index)
  97. {
  98. case WobbleJuicePlugin::paramDivision:
  99. fKnobDivision->setValue(value);
  100. break;
  101. case WobbleJuicePlugin::paramReso:
  102. fKnobResonance->setValue(value);
  103. break;
  104. case WobbleJuicePlugin::paramRange:
  105. fKnobRange->setValue(value);
  106. break;
  107. case WobbleJuicePlugin::paramPhase:
  108. fKnobPhase->setValue(value);
  109. break;
  110. case WobbleJuicePlugin::paramWave:
  111. fKnobWave->setValue(value);
  112. break;
  113. case WobbleJuicePlugin::paramDrive:
  114. fKnobDrive->setValue(value);
  115. break;
  116. }
  117. }
  118. void WobbleJuiceUI::d_programChanged(uint32_t index)
  119. {
  120. if (index != 0)
  121. return;
  122. // Default values
  123. fKnobDivision->setValue(4.0f);
  124. fKnobResonance->setValue(0.1f);
  125. fKnobRange->setValue(16000.0f);
  126. fKnobPhase->setValue(.0f);
  127. fKnobWave->setValue(2.0f);
  128. fKnobDrive->setValue(0.5f);
  129. }
  130. // -----------------------------------------------------------------------
  131. // Widget Callbacks
  132. void WobbleJuiceUI::imageButtonClicked(ImageButton* button, int)
  133. {
  134. if (button != fButtonAbout)
  135. return;
  136. fAboutWindow.exec();
  137. }
  138. void WobbleJuiceUI::imageKnobDragStarted(ImageKnob* knob)
  139. {
  140. if (knob == fKnobDivision)
  141. d_editParameter(WobbleJuicePlugin::paramDivision, true);
  142. else if (knob == fKnobResonance)
  143. d_editParameter(WobbleJuicePlugin::paramReso, true);
  144. else if (knob == fKnobRange)
  145. d_editParameter(WobbleJuicePlugin::paramRange, true);
  146. else if (knob == fKnobPhase)
  147. d_editParameter(WobbleJuicePlugin::paramPhase, true);
  148. else if (knob == fKnobWave)
  149. d_editParameter(WobbleJuicePlugin::paramWave, true);
  150. else if (knob == fKnobDrive)
  151. d_editParameter(WobbleJuicePlugin::paramDrive, true);
  152. }
  153. void WobbleJuiceUI::imageKnobDragFinished(ImageKnob* knob)
  154. {
  155. if (knob == fKnobDivision)
  156. d_editParameter(WobbleJuicePlugin::paramDivision, false);
  157. else if (knob == fKnobResonance)
  158. d_editParameter(WobbleJuicePlugin::paramReso, false);
  159. else if (knob == fKnobRange)
  160. d_editParameter(WobbleJuicePlugin::paramRange, false);
  161. else if (knob == fKnobPhase)
  162. d_editParameter(WobbleJuicePlugin::paramPhase, false);
  163. else if (knob == fKnobWave)
  164. d_editParameter(WobbleJuicePlugin::paramWave, false);
  165. else if (knob == fKnobDrive)
  166. d_editParameter(WobbleJuicePlugin::paramDrive, false);
  167. }
  168. void WobbleJuiceUI::imageKnobValueChanged(ImageKnob* knob, float value)
  169. {
  170. if (knob == fKnobDivision)
  171. d_setParameterValue(WobbleJuicePlugin::paramDivision, value);
  172. else if (knob == fKnobResonance)
  173. d_setParameterValue(WobbleJuicePlugin::paramReso, value);
  174. else if (knob == fKnobRange)
  175. d_setParameterValue(WobbleJuicePlugin::paramRange, value);
  176. else if (knob == fKnobPhase)
  177. d_setParameterValue(WobbleJuicePlugin::paramPhase, value);
  178. else if (knob == fKnobWave)
  179. d_setParameterValue(WobbleJuicePlugin::paramWave, value);
  180. else if (knob == fKnobDrive)
  181. d_setParameterValue(WobbleJuicePlugin::paramDrive, value);
  182. }
  183. void WobbleJuiceUI::onDisplay()
  184. {
  185. fImgBackground.draw();
  186. }
  187. // -----------------------------------------------------------------------
  188. UI* createUI()
  189. {
  190. return new WobbleJuiceUI();
  191. }
  192. // -----------------------------------------------------------------------
  193. END_NAMESPACE_DISTRHO