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.

190 lines
6.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 "WobbleJuicePlugin.hpp"
  18. #include "WobbleJuiceUI.hpp"
  19. START_NAMESPACE_DISTRHO
  20. // -----------------------------------------------------------------------
  21. WobbleJuiceUI::WobbleJuiceUI()
  22. : UI(WobbleJuiceArtwork::backgroundWidth, WobbleJuiceArtwork::backgroundHeight, true),
  23. fAboutWindow(this)
  24. {
  25. // background
  26. fImgBackground = Image(WobbleJuiceArtwork::backgroundData, WobbleJuiceArtwork::backgroundWidth, WobbleJuiceArtwork::backgroundHeight, kImageFormatBGR);
  27. // about
  28. Image aboutImage(WobbleJuiceArtwork::aboutData, WobbleJuiceArtwork::aboutWidth, WobbleJuiceArtwork::aboutHeight, kImageFormatBGR);
  29. fAboutWindow.setImage(aboutImage);
  30. // knobs
  31. Image knobImage(WobbleJuiceArtwork::knobData, WobbleJuiceArtwork::knobWidth, WobbleJuiceArtwork::knobHeight, kImageFormatBGRA);
  32. // knob Division
  33. fKnobDivision = new ImageKnob(this, knobImage, ImageKnob::Vertical);
  34. fKnobDivision->setId(WobbleJuicePlugin::paramDivision);
  35. fKnobDivision->setAbsolutePos(222, 74);
  36. fKnobDivision->setRotationAngle(270);
  37. fKnobDivision->setRange(1.0f, 16.0f);
  38. fKnobDivision->setDefault(4.0f);
  39. fKnobDivision->setStep(1.0f);
  40. fKnobDivision->setCallback(this);
  41. // knob Resonance
  42. fKnobResonance = new ImageKnob(this, knobImage, ImageKnob::Vertical);
  43. fKnobResonance->setId(WobbleJuicePlugin::paramReso);
  44. fKnobResonance->setAbsolutePos(222, 199);
  45. fKnobResonance->setRotationAngle(270);
  46. fKnobResonance->setRange(0.0f, 0.2f);
  47. fKnobResonance->setDefault(0.1f);
  48. fKnobResonance->setCallback(this);
  49. // knob Range
  50. fKnobRange = new ImageKnob(this, knobImage, ImageKnob::Vertical);
  51. fKnobRange->setId(WobbleJuicePlugin::paramRange);
  52. fKnobRange->setAbsolutePos(77, 199);
  53. fKnobRange->setRotationAngle(270);
  54. fKnobRange->setRange(500.0f, 16000.0f);
  55. fKnobRange->setDefault(16000.0f);
  56. fKnobRange->setCallback(this);
  57. // knob Phase
  58. fKnobPhase = new ImageKnob(this, knobImage, ImageKnob::Vertical);
  59. fKnobPhase->setId(WobbleJuicePlugin::paramPhase);
  60. fKnobPhase->setAbsolutePos(362, 74);
  61. fKnobPhase->setRotationAngle(270);
  62. fKnobPhase->setRange(-1.0f, 1.0f);
  63. fKnobPhase->setDefault(0.0f);
  64. fKnobPhase->setCallback(this);
  65. // knob Wave
  66. fKnobWave = new ImageKnob(this, knobImage, ImageKnob::Vertical);
  67. fKnobWave->setId(WobbleJuicePlugin::paramWave);
  68. fKnobWave->setAbsolutePos(77, 74);
  69. fKnobWave->setRotationAngle(270);
  70. fKnobWave->setRange(1.0f, 4.0f);
  71. fKnobWave->setDefault(2.0f);
  72. fKnobWave->setCallback(this);
  73. // knob Drive
  74. fKnobDrive = new ImageKnob(this, knobImage, ImageKnob::Vertical);
  75. fKnobDrive->setId(WobbleJuicePlugin::paramDrive);
  76. fKnobDrive->setAbsolutePos(362, 199);
  77. fKnobDrive->setRotationAngle(270);
  78. fKnobDrive->setRange(0.0f, 1.0f);
  79. fKnobDrive->setDefault(0.5f);
  80. fKnobDrive->setCallback(this);
  81. // about button
  82. Image aboutImageNormal(WobbleJuiceArtwork::aboutButtonNormalData, WobbleJuiceArtwork::aboutButtonNormalWidth, WobbleJuiceArtwork::aboutButtonNormalHeight, kImageFormatBGRA);
  83. Image aboutImageHover(WobbleJuiceArtwork::aboutButtonHoverData, WobbleJuiceArtwork::aboutButtonHoverWidth, WobbleJuiceArtwork::aboutButtonHoverHeight, kImageFormatBGRA);
  84. fButtonAbout = new ImageButton(this, aboutImageNormal, aboutImageHover, aboutImageHover);
  85. fButtonAbout->setAbsolutePos(390, 20);
  86. fButtonAbout->setCallback(this);
  87. // set default values
  88. programLoaded(0);
  89. }
  90. // -----------------------------------------------------------------------
  91. // DSP Callbacks
  92. void WobbleJuiceUI::parameterChanged(uint32_t index, float value)
  93. {
  94. switch (index)
  95. {
  96. case WobbleJuicePlugin::paramDivision:
  97. fKnobDivision->setValue(value);
  98. break;
  99. case WobbleJuicePlugin::paramReso:
  100. fKnobResonance->setValue(value);
  101. break;
  102. case WobbleJuicePlugin::paramRange:
  103. fKnobRange->setValue(value);
  104. break;
  105. case WobbleJuicePlugin::paramPhase:
  106. fKnobPhase->setValue(value);
  107. break;
  108. case WobbleJuicePlugin::paramWave:
  109. fKnobWave->setValue(value);
  110. break;
  111. case WobbleJuicePlugin::paramDrive:
  112. fKnobDrive->setValue(value);
  113. break;
  114. }
  115. }
  116. void WobbleJuiceUI::programLoaded(uint32_t index)
  117. {
  118. if (index != 0)
  119. return;
  120. // Default values
  121. fKnobDivision->setValue(4.0f);
  122. fKnobResonance->setValue(0.1f);
  123. fKnobRange->setValue(16000.0f);
  124. fKnobPhase->setValue(0.0f);
  125. fKnobWave->setValue(2.0f);
  126. fKnobDrive->setValue(0.5f);
  127. }
  128. // -----------------------------------------------------------------------
  129. // Widget Callbacks
  130. void WobbleJuiceUI::imageButtonClicked(ImageButton* button, int)
  131. {
  132. if (button != fButtonAbout)
  133. return;
  134. fAboutWindow.runAsModal();
  135. }
  136. void WobbleJuiceUI::imageKnobDragStarted(ImageKnob* knob)
  137. {
  138. editParameter(knob->getId(), true);
  139. }
  140. void WobbleJuiceUI::imageKnobDragFinished(ImageKnob* knob)
  141. {
  142. editParameter(knob->getId(), false);
  143. }
  144. void WobbleJuiceUI::imageKnobValueChanged(ImageKnob* knob, float value)
  145. {
  146. setParameterValue(knob->getId(), value);
  147. }
  148. void WobbleJuiceUI::onDisplay()
  149. {
  150. const GraphicsContext& context(getGraphicsContext());
  151. fImgBackground.draw(context);
  152. }
  153. // -----------------------------------------------------------------------
  154. UI* createUI()
  155. {
  156. return new WobbleJuiceUI();
  157. }
  158. // -----------------------------------------------------------------------
  159. END_NAMESPACE_DISTRHO