DISTRHO Juice Plugins
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.

218 lines
6.8KB

  1. /*
  2. * Trigger 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 "TriggerJuiceUI.hpp"
  18. using DGL::Point;
  19. START_NAMESPACE_DISTRHO
  20. // -----------------------------------------------------------------------
  21. TriggerJuiceUI::TriggerJuiceUI()
  22. : UI(),
  23. fAboutWindow(this)
  24. {
  25. // background
  26. fImgBackground = Image(TriggerJuiceArtwork::backgroundData, TriggerJuiceArtwork::backgroundWidth, TriggerJuiceArtwork::backgroundHeight, GL_BGRA);
  27. // about
  28. Image imageAbout(TriggerJuiceArtwork::aboutData, TriggerJuiceArtwork::aboutWidth, TriggerJuiceArtwork::aboutHeight, GL_BGRA);
  29. fAboutWindow.setImage(imageAbout);
  30. // about button
  31. Image aboutImageNormal(TriggerJuiceArtwork::aboutButtonNormalData, TriggerJuiceArtwork::aboutButtonNormalWidth, TriggerJuiceArtwork::aboutButtonNormalHeight);
  32. Image aboutImageHover(TriggerJuiceArtwork::aboutButtonHoverData, TriggerJuiceArtwork::aboutButtonHoverWidth, TriggerJuiceArtwork::aboutButtonHoverHeight);
  33. fButtonAbout = new ImageButton(this, aboutImageNormal, aboutImageHover, aboutImageHover);
  34. fButtonAbout->setAbsolutePos(358, 17);
  35. fButtonAbout->setCallback(this);
  36. // knobs
  37. Image knobImage(TriggerJuiceArtwork::knobData, TriggerJuiceArtwork::knobWidth, TriggerJuiceArtwork::knobHeight);
  38. // knob KnobAttack
  39. fKnobAttack = new ImageKnob(this, knobImage);
  40. fKnobAttack->setAbsolutePos(42, 77);
  41. fKnobAttack->setRange(0.0f, 1.0f);
  42. fKnobAttack->setValue(0.0f);
  43. fKnobAttack->setRotationAngle(270);
  44. fKnobAttack->setCallback(this);
  45. // knob KnobRelease
  46. fKnobRelease = new ImageKnob(this, knobImage);
  47. fKnobRelease->setAbsolutePos(139, 77);
  48. fKnobRelease->setRange(0.0f, 1.0f);
  49. fKnobRelease->setValue(0.0f);
  50. fKnobRelease->setRotationAngle(270);
  51. fKnobRelease->setCallback(this);
  52. // sliders
  53. Image sliderImage(TriggerJuiceArtwork::sliderData, TriggerJuiceArtwork::sliderWidth, TriggerJuiceArtwork::sliderHeight);
  54. Point<int> sliderPosStart(293, 74);
  55. Point<int> sliderPosEnd(293+11, 74);
  56. // slider Rev
  57. fSliderRev = new ImageSlider(this, sliderImage);
  58. fSliderRev->setStartPos(sliderPosStart);
  59. fSliderRev->setEndPos(sliderPosEnd);
  60. fSliderRev->setRange(0.0f, 1.0f);
  61. fSliderRev->setValue(0.0f);
  62. fSliderRev->setCallback(this);
  63. // slider Split
  64. sliderPosStart.setY(104);
  65. sliderPosEnd.setY(104);
  66. fSliderSplit = new ImageSlider(this, sliderImage);
  67. fSliderSplit->setStartPos(sliderPosStart);
  68. fSliderSplit->setEndPos(sliderPosEnd);
  69. fSliderSplit->setRange(0.0f, 1.0f);
  70. fSliderSplit->setValue(0.0f);
  71. fSliderSplit->setCallback(this);
  72. // slider MS
  73. sliderPosStart.setY(134);
  74. sliderPosEnd.setY(134);
  75. fSliderMS = new ImageSlider(this, sliderImage);
  76. fSliderMS->setStartPos(sliderPosStart);
  77. fSliderMS->setEndPos(sliderPosEnd);
  78. fSliderMS->setRange(0.0f, 1.0f);
  79. fSliderMS->setValue(0.0f);
  80. fSliderMS->setCallback(this);
  81. // set default values
  82. d_programChanged(0);
  83. }
  84. // -----------------------------------------------------------------------
  85. // DSP Callbacks
  86. void TriggerJuiceUI::d_parameterChanged(uint32_t index, float value)
  87. {
  88. switch (index)
  89. {
  90. case TriggerJuicePlugin::paramAttack:
  91. fKnobAttack->setValue(value);
  92. break;
  93. case TriggerJuicePlugin::paramRelease:
  94. fKnobRelease->setValue(value);
  95. break;
  96. case TriggerJuicePlugin::paramRev:
  97. fSliderRev->setValue(value);
  98. break;
  99. case TriggerJuicePlugin::paramSplit:
  100. fSliderSplit->setValue(value);
  101. break;
  102. case TriggerJuicePlugin::paramMS:
  103. fSliderMS->setValue(value);
  104. break;
  105. }
  106. }
  107. void TriggerJuiceUI::d_programChanged(uint32_t index)
  108. {
  109. if (index != 0)
  110. return;
  111. // Default values
  112. fKnobAttack->setValue(0.0f);
  113. fKnobRelease->setValue(0.0f);
  114. fSliderRev->setValue(0.0f);
  115. fSliderSplit->setValue(0.0f);
  116. fSliderMS->setValue(0.0f);
  117. }
  118. // -----------------------------------------------------------------------
  119. // Widget Callbacks
  120. void TriggerJuiceUI::imageButtonClicked(ImageButton* button, int)
  121. {
  122. if (button != fButtonAbout)
  123. return;
  124. fAboutWindow.exec();
  125. }
  126. void TriggerJuiceUI::imageKnobDragStarted(ImageKnob* knob)
  127. {
  128. if (knob == fKnobAttack)
  129. d_editParameter(TriggerJuicePlugin::paramAttack, true);
  130. else if (knob == fKnobRelease)
  131. d_editParameter(TriggerJuicePlugin::paramRelease, true);
  132. }
  133. void TriggerJuiceUI::imageKnobDragFinished(ImageKnob* knob)
  134. {
  135. if (knob == fKnobAttack)
  136. d_editParameter(TriggerJuicePlugin::paramAttack, false);
  137. else if (knob == fKnobRelease)
  138. d_editParameter(TriggerJuicePlugin::paramRelease, false);
  139. }
  140. void TriggerJuiceUI::imageKnobValueChanged(ImageKnob* knob, float value)
  141. {
  142. if (knob == fKnobAttack)
  143. d_setParameterValue(TriggerJuicePlugin::paramAttack, value);
  144. else if (knob == fKnobRelease)
  145. d_setParameterValue(TriggerJuicePlugin::paramRelease, value);
  146. }
  147. void TriggerJuiceUI::imageSliderDragStarted(ImageSlider* slider)
  148. {
  149. if (slider == fSliderRev)
  150. d_editParameter(TriggerJuicePlugin::paramRev, true);
  151. else if (slider == fSliderSplit)
  152. d_editParameter(TriggerJuicePlugin::paramSplit, true);
  153. else if (slider == fSliderMS)
  154. d_editParameter(TriggerJuicePlugin::paramMS, true);
  155. }
  156. void TriggerJuiceUI::imageSliderDragFinished(ImageSlider* slider)
  157. {
  158. if (slider == fSliderRev)
  159. d_editParameter(TriggerJuicePlugin::paramRev, false);
  160. else if (slider == fSliderSplit)
  161. d_editParameter(TriggerJuicePlugin::paramSplit, false);
  162. else if (slider == fSliderMS)
  163. d_editParameter(TriggerJuicePlugin::paramMS, false);
  164. }
  165. void TriggerJuiceUI::imageSliderValueChanged(ImageSlider* slider, float value)
  166. {
  167. if (slider == fSliderRev)
  168. d_setParameterValue(TriggerJuicePlugin::paramRev, value);
  169. else if (slider == fSliderSplit)
  170. d_setParameterValue(TriggerJuicePlugin::paramSplit, value);
  171. else if (slider == fSliderMS)
  172. d_setParameterValue(TriggerJuicePlugin::paramMS, value);
  173. }
  174. void TriggerJuiceUI::onDisplay()
  175. {
  176. fImgBackground.draw();
  177. }
  178. // -----------------------------------------------------------------------
  179. UI* createUI()
  180. {
  181. return new TriggerJuiceUI();
  182. }
  183. // -----------------------------------------------------------------------
  184. END_NAMESPACE_DISTRHO