#include namespace rack { namespace ui { MenuOverlay::MenuOverlay() { bgColor = nvgRGBA(0, 0, 0, 0); } void MenuOverlay::draw(const DrawArgs& args) { if (bgColor.a > 0.f) { nvgBeginPath(args.vg); nvgRect(args.vg, 0, 0, VEC_ARGS(box.size)); nvgFillColor(args.vg, bgColor); nvgFill(args.vg); } OpaqueWidget::draw(args); } void MenuOverlay::step() { // Adopt parent's size box = parent->box.zeroPos(); Widget::step(); } void MenuOverlay::onButton(const ButtonEvent& e) { OpaqueWidget::onButton(e); if (e.isConsumed() && e.getTarget() != this) return; if (e.action == GLFW_PRESS) { ActionEvent eAction; onAction(eAction); } // Consume all buttons. e.consume(this); } void MenuOverlay::onHoverKey(const HoverKeyEvent& e) { OpaqueWidget::onHoverKey(e); if (e.isConsumed()) return; if (e.action == GLFW_PRESS && e.key == GLFW_KEY_ESCAPE) { ActionEvent eAction; onAction(eAction); } // Consume all keys. // Unfortunately this prevents MIDI computer keyboard from playing while a menu is open, but that might be a good thing for safety. e.consume(this); } void MenuOverlay::onAction(const ActionEvent& e) { requestDelete(); } } // namespace ui } // namespace rack