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. #include <cassert>
  18. START_NAMESPACE_DGL
  19. // -----------------------------------------------------------------------
  20. ImageButton::ImageButton(Window& parent, const Image& image)
  21. : Widget(parent),
  22. fImageNormal(image),
  23. fImageHover(image),
  24. fImageDown(image),
  25. fCurImage(&fImageNormal),
  26. fCurButton(-1),
  27. fCallback(nullptr)
  28. {
  29. }
  30. ImageButton::ImageButton(Widget* widget, const Image& image)
  31. : Widget(widget->getParentWindow()),
  32. fImageNormal(image),
  33. fImageHover(image),
  34. fImageDown(image),
  35. fCurImage(&fImageNormal),
  36. fCurButton(-1),
  37. fCallback(nullptr)
  38. {
  39. }
  40. ImageButton::ImageButton(Window& parent, const Image& imageNormal, const Image& imageHover, const Image& imageDown)
  41. : Widget(parent),
  42. fImageNormal(imageNormal),
  43. fImageHover(imageHover),
  44. fImageDown(imageDown),
  45. fCurImage(&fImageNormal),
  46. fCurButton(-1),
  47. fCallback(nullptr)
  48. {
  49. assert(fImageNormal.getSize() == fImageHover.getSize() && fImageHover.getSize() == fImageDown.getSize());
  50. setSize(fCurImage->getSize());
  51. }
  52. ImageButton::ImageButton(Widget* widget, const Image& imageNormal, const Image& imageHover, const Image& imageDown)
  53. : Widget(widget->getParentWindow()),
  54. fImageNormal(imageNormal),
  55. fImageHover(imageHover),
  56. fImageDown(imageDown),
  57. fCurImage(&fImageNormal),
  58. fCurButton(-1),
  59. fCallback(nullptr)
  60. {
  61. assert(fImageNormal.getSize() == fImageHover.getSize() && fImageHover.getSize() == fImageDown.getSize());
  62. setSize(fCurImage->getSize());
  63. }
  64. ImageButton::ImageButton(const ImageButton& imageButton)
  65. : Widget(imageButton.getParentWindow()),
  66. fImageNormal(imageButton.fImageNormal),
  67. fImageHover(imageButton.fImageHover),
  68. fImageDown(imageButton.fImageDown),
  69. fCurImage(&fImageNormal),
  70. fCurButton(-1),
  71. fCallback(imageButton.fCallback)
  72. {
  73. assert(fImageNormal.getSize() == fImageHover.getSize() && fImageHover.getSize() == fImageDown.getSize());
  74. setSize(fCurImage->getSize());
  75. }
  76. void ImageButton::setCallback(Callback* callback)
  77. {
  78. fCallback = callback;
  79. }
  80. void ImageButton::onDisplay()
  81. {
  82. fCurImage->draw(getPos());
  83. }
  84. bool ImageButton::onMouse(int button, bool press, int x, int y)
  85. {
  86. if (fCurButton != -1 && ! press)
  87. {
  88. if (fCurImage != &fImageNormal)
  89. {
  90. fCurImage = &fImageNormal;
  91. repaint();
  92. }
  93. if (! getArea().contains(x, y))
  94. {
  95. fCurButton = -1;
  96. return false;
  97. }
  98. if (fCallback != nullptr)
  99. fCallback->imageButtonClicked(this, fCurButton);
  100. //if (getArea().contains(x, y))
  101. //{
  102. // fCurImage = &fImageHover;
  103. // repaint();
  104. //}
  105. fCurButton = -1;
  106. return true;
  107. }
  108. if (press && getArea().contains(x, y))
  109. {
  110. if (fCurImage != &fImageDown)
  111. {
  112. fCurImage = &fImageDown;
  113. repaint();
  114. }
  115. fCurButton = button;
  116. return true;
  117. }
  118. return false;
  119. }
  120. bool ImageButton::onMotion(int x, int y)
  121. {
  122. if (fCurButton != -1)
  123. return true;
  124. if (getArea().contains(x, y))
  125. {
  126. if (fCurImage != &fImageHover)
  127. {
  128. fCurImage = &fImageHover;
  129. repaint();
  130. }
  131. return true;
  132. }
  133. else
  134. {
  135. if (fCurImage != &fImageNormal)
  136. {
  137. fCurImage = &fImageNormal;
  138. repaint();
  139. }
  140. return false;
  141. }
  142. }
  143. // -----------------------------------------------------------------------
  144. END_NAMESPACE_DGL