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.

226 lines
7.2KB

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