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.

223 lines
7.1KB

  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, true),
  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. }
  86. // -----------------------------------------------------------------------
  87. // DSP Callbacks
  88. void TriggerJuiceUI::parameterChanged(uint32_t index, float value)
  89. {
  90. switch (index)
  91. {
  92. case TriggerJuicePlugin::paramAttack:
  93. fKnobAttack->setValue(value);
  94. break;
  95. case TriggerJuicePlugin::paramRelease:
  96. fKnobRelease->setValue(value);
  97. break;
  98. case TriggerJuicePlugin::paramRev:
  99. fSliderRev->setValue(value);
  100. break;
  101. case TriggerJuicePlugin::paramSplit:
  102. fSliderSplit->setValue(value);
  103. break;
  104. case TriggerJuicePlugin::paramMS:
  105. fSliderMS->setValue(value);
  106. break;
  107. }
  108. }
  109. void TriggerJuiceUI::programLoaded(uint32_t index)
  110. {
  111. if (index != 0)
  112. return;
  113. // Default values
  114. fKnobAttack->setValue(0.0f);
  115. fKnobRelease->setValue(0.0f);
  116. fSliderRev->setValue(0.0f);
  117. fSliderSplit->setValue(0.0f);
  118. fSliderMS->setValue(0.0f);
  119. }
  120. // -----------------------------------------------------------------------
  121. // Widget Callbacks
  122. void TriggerJuiceUI::imageButtonClicked(ImageButton* button, int)
  123. {
  124. if (button != fButtonAbout)
  125. return;
  126. fAboutWindow.runAsModal();
  127. }
  128. void TriggerJuiceUI::imageKnobDragStarted(ImageKnob* knob)
  129. {
  130. if (knob == fKnobAttack)
  131. editParameter(TriggerJuicePlugin::paramAttack, true);
  132. else if (knob == fKnobRelease)
  133. editParameter(TriggerJuicePlugin::paramRelease, true);
  134. }
  135. void TriggerJuiceUI::imageKnobDragFinished(ImageKnob* knob)
  136. {
  137. if (knob == fKnobAttack)
  138. editParameter(TriggerJuicePlugin::paramAttack, false);
  139. else if (knob == fKnobRelease)
  140. editParameter(TriggerJuicePlugin::paramRelease, false);
  141. }
  142. void TriggerJuiceUI::imageKnobValueChanged(ImageKnob* knob, float value)
  143. {
  144. if (knob == fKnobAttack)
  145. setParameterValue(TriggerJuicePlugin::paramAttack, value);
  146. else if (knob == fKnobRelease)
  147. setParameterValue(TriggerJuicePlugin::paramRelease, value);
  148. }
  149. void TriggerJuiceUI::imageSliderDragStarted(ImageSlider* slider)
  150. {
  151. if (slider == fSliderRev)
  152. editParameter(TriggerJuicePlugin::paramRev, true);
  153. else if (slider == fSliderSplit)
  154. editParameter(TriggerJuicePlugin::paramSplit, true);
  155. else if (slider == fSliderMS)
  156. editParameter(TriggerJuicePlugin::paramMS, true);
  157. }
  158. void TriggerJuiceUI::imageSliderDragFinished(ImageSlider* slider)
  159. {
  160. if (slider == fSliderRev)
  161. editParameter(TriggerJuicePlugin::paramRev, false);
  162. else if (slider == fSliderSplit)
  163. editParameter(TriggerJuicePlugin::paramSplit, false);
  164. else if (slider == fSliderMS)
  165. editParameter(TriggerJuicePlugin::paramMS, false);
  166. }
  167. void TriggerJuiceUI::imageSliderValueChanged(ImageSlider* slider, float value)
  168. {
  169. if (slider == fSliderRev)
  170. setParameterValue(TriggerJuicePlugin::paramRev, value);
  171. else if (slider == fSliderSplit)
  172. setParameterValue(TriggerJuicePlugin::paramSplit, value);
  173. else if (slider == fSliderMS)
  174. setParameterValue(TriggerJuicePlugin::paramMS, value);
  175. }
  176. void TriggerJuiceUI::onDisplay()
  177. {
  178. const GraphicsContext& context(getGraphicsContext());
  179. fImgBackground.draw(context);
  180. }
  181. // -----------------------------------------------------------------------
  182. UI* createUI()
  183. {
  184. return new TriggerJuiceUI();
  185. }
  186. // -----------------------------------------------------------------------
  187. END_NAMESPACE_DISTRHO