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.

61 lines
943B

  1. #pragma once
  2. #include "widgets.hpp"
  3. namespace rack {
  4. /** Deletes itself from parent when clicked */
  5. struct MenuOverlay : OpaqueWidget {
  6. void step() override {
  7. Widget::step();
  8. // Fit all children in the box
  9. for (Widget *child : children) {
  10. child->box = child->box.nudge(box.zeroPos());
  11. }
  12. }
  13. void on(event::Button &e) override;
  14. void on(event::HoverKey &e) override;
  15. };
  16. } // namespace rack
  17. #include "ui/Scene.hpp"
  18. namespace rack {
  19. inline void MenuOverlay::on(event::Button &e) {
  20. EventWidget::on(e);
  21. if (!e.target) {
  22. // deletes `this`
  23. gScene->setOverlay(NULL);
  24. e.target = this;
  25. }
  26. }
  27. inline void MenuOverlay::on(event::HoverKey &e) {
  28. switch (e.key) {
  29. case GLFW_KEY_ESCAPE: {
  30. gScene->setOverlay(NULL);
  31. // e.consumed = true;
  32. return;
  33. } break;
  34. }
  35. // if (!e.consumed) {
  36. // // Recurse children but consume the event
  37. // Widget::onHoverKey(e);
  38. // e.consumed = true;
  39. // }
  40. }
  41. } // namespace rack