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.

182 lines
5.7KB

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