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.

148 lines
3.9KB

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