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.

55 lines
1.3KB

  1. #pragma once
  2. #include "widget/Widget.hpp"
  3. namespace rack {
  4. namespace widget {
  5. /** A Widget that stops propagation of all recursive PositionEvents but gives a chance for children to consume first.
  6. Also consumes Hover and Button for left-clicks.
  7. Remember to call these methods in your subclass if you wish to preserve default OpaqueWidget behavior.
  8. */
  9. struct OpaqueWidget : Widget {
  10. void onHover(const event::Hover &e) override {
  11. Widget::onHover(e);
  12. e.stopPropagating();
  13. // Consume if not consumed by child
  14. if (!e.isConsumed())
  15. e.consume(this);
  16. }
  17. void onButton(const event::Button &e) override {
  18. Widget::onButton(e);
  19. e.stopPropagating();
  20. if (e.button == GLFW_MOUSE_BUTTON_LEFT) {
  21. // Consume if not consumed by child
  22. if (!e.isConsumed())
  23. e.consume(this);
  24. }
  25. }
  26. void onHoverKey(const event::HoverKey &e) override {
  27. Widget::onHoverKey(e);
  28. e.stopPropagating();
  29. }
  30. void onHoverText(const event::HoverText &e) override {
  31. Widget::onHoverText(e);
  32. e.stopPropagating();
  33. }
  34. void onHoverScroll(const event::HoverScroll &e) override {
  35. Widget::onHoverScroll(e);
  36. e.stopPropagating();
  37. }
  38. void onDragHover(const event::DragHover &e) override {
  39. Widget::onDragHover(e);
  40. e.stopPropagating();
  41. }
  42. void onPathDrop(const event::PathDrop &e) override {
  43. Widget::onPathDrop(e);
  44. e.stopPropagating();
  45. }
  46. };
  47. } // namespace widget
  48. } // namespace rack