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.

174 lines
4.4KB

  1. /*
  2. * DISTRHO Plugin Framework (DPF)
  3. * Copyright (C) 2012-2014 Filipe Coelho <falktx@falktx.com>
  4. *
  5. * Permission to use, copy, modify, and/or distribute this software for any purpose with
  6. * or without fee is hereby granted, provided that the above copyright notice and this
  7. * permission notice appear in all copies.
  8. *
  9. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
  10. * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN
  11. * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
  12. * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
  13. * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
  14. * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  15. */
  16. #include "../ImageButton.hpp"
  17. START_NAMESPACE_DGL
  18. // -----------------------------------------------------------------------
  19. ImageButton::ImageButton(Window& parent, const Image& image) noexcept
  20. : Widget(parent),
  21. fImageNormal(image),
  22. fImageHover(image),
  23. fImageDown(image),
  24. fCurImage(&fImageNormal),
  25. fCurButton(-1),
  26. fCallback(nullptr)
  27. {
  28. }
  29. ImageButton::ImageButton(Window& parent, const Image& imageNormal, const Image& imageHover, const Image& imageDown) noexcept
  30. : Widget(parent),
  31. fImageNormal(imageNormal),
  32. fImageHover(imageHover),
  33. fImageDown(imageDown),
  34. fCurImage(&fImageNormal),
  35. fCurButton(-1),
  36. fCallback(nullptr)
  37. {
  38. DISTRHO_SAFE_ASSERT(fImageNormal.getSize() == fImageHover.getSize() && fImageHover.getSize() == fImageDown.getSize());
  39. setSize(fCurImage->getSize());
  40. }
  41. ImageButton::ImageButton(Widget* widget, const Image& image) noexcept
  42. : Widget(widget->getParentWindow()),
  43. fImageNormal(image),
  44. fImageHover(image),
  45. fImageDown(image),
  46. fCurImage(&fImageNormal),
  47. fCurButton(-1),
  48. fCallback(nullptr)
  49. {
  50. }
  51. ImageButton::ImageButton(Widget* widget, const Image& imageNormal, const Image& imageHover, const Image& imageDown) noexcept
  52. : Widget(widget->getParentWindow()),
  53. fImageNormal(imageNormal),
  54. fImageHover(imageHover),
  55. fImageDown(imageDown),
  56. fCurImage(&fImageNormal),
  57. fCurButton(-1),
  58. fCallback(nullptr)
  59. {
  60. DISTRHO_SAFE_ASSERT(fImageNormal.getSize() == fImageHover.getSize() && fImageHover.getSize() == fImageDown.getSize());
  61. setSize(fCurImage->getSize());
  62. }
  63. ImageButton::ImageButton(const ImageButton& imageButton) noexcept
  64. : Widget(imageButton.getParentWindow()),
  65. fImageNormal(imageButton.fImageNormal),
  66. fImageHover(imageButton.fImageHover),
  67. fImageDown(imageButton.fImageDown),
  68. fCurImage(&fImageNormal),
  69. fCurButton(-1),
  70. fCallback(imageButton.fCallback)
  71. {
  72. DISTRHO_SAFE_ASSERT(fImageNormal.getSize() == fImageHover.getSize() && fImageHover.getSize() == fImageDown.getSize());
  73. setSize(fCurImage->getSize());
  74. }
  75. void ImageButton::setCallback(Callback* callback) noexcept
  76. {
  77. fCallback = callback;
  78. }
  79. void ImageButton::onDisplay()
  80. {
  81. fCurImage->draw();
  82. }
  83. bool ImageButton::onMouse(const MouseEvent& ev)
  84. {
  85. if (fCurButton != -1 && ! ev.press)
  86. {
  87. if (fCurImage != &fImageNormal)
  88. {
  89. fCurImage = &fImageNormal;
  90. repaint();
  91. }
  92. if (! contains(ev.pos))
  93. {
  94. fCurButton = -1;
  95. return false;
  96. }
  97. if (fCallback != nullptr)
  98. fCallback->imageButtonClicked(this, fCurButton);
  99. #if 0
  100. if (contains(ev.pos))
  101. {
  102. fCurImage = &fImageHover;
  103. repaint();
  104. }
  105. #endif
  106. fCurButton = -1;
  107. return true;
  108. }
  109. if (ev.press && contains(ev.pos))
  110. {
  111. if (fCurImage != &fImageDown)
  112. {
  113. fCurImage = &fImageDown;
  114. repaint();
  115. }
  116. fCurButton = ev.button;
  117. return true;
  118. }
  119. return false;
  120. }
  121. bool ImageButton::onMotion(const MotionEvent& ev)
  122. {
  123. if (fCurButton != -1)
  124. return true;
  125. if (contains(ev.pos))
  126. {
  127. if (fCurImage != &fImageHover)
  128. {
  129. fCurImage = &fImageHover;
  130. repaint();
  131. }
  132. return true;
  133. }
  134. else
  135. {
  136. if (fCurImage != &fImageNormal)
  137. {
  138. fCurImage = &fImageNormal;
  139. repaint();
  140. }
  141. return false;
  142. }
  143. }
  144. // -----------------------------------------------------------------------
  145. END_NAMESPACE_DGL