Menu als state im Mode-System

This commit is contained in:
2026-06-13 19:24:28 +02:00
parent a41d39cc78
commit d584e418f5
4 changed files with 165 additions and 43 deletions
+13 -4
View File
@@ -280,9 +280,17 @@ impl App {
let PhysicalKey::Code(code) = key.physical_key else { return; };
let down = key.state == ElementState::Pressed;
// Escape: erst den Cursor freigeben, sonst beenden.
// Escape: erst die (Flycam-)Maus freigeben; sonst das Menü
// umschalten — über denselben exec-Trichter wie Konsole und Klick.
// Im Dialog tut Escape nichts (der Dialog endet über seine Choices).
if code == KeyCode::Escape && down {
if self.input.grabbed { self.set_grab(false); } else { event_loop.exit(); }
if self.input.grabbed {
self.set_grab(false);
} else if !matches!(self.session.mode, Mode::Dialog(_)) {
let r = self.session.exec("menu");
for out in r.output { println!("{out}"); }
if r.quit { event_loop.exit(); }
}
return;
}
@@ -327,9 +335,10 @@ impl App {
.unwrap_or([0.0, 0.0]),
grabbed: self.input.grabbed,
};
// Overlay state-driven bauen; Hover-Aktion kommt aus der Maus-Position.
// Overlay state-driven bauen (verzweigt nach session.mode); die
// Hover-Aktion kommt aus der Maus-Position.
let screen = ui::layout(
[gpu::INTERNAL_W as f32, gpu::INTERNAL_H as f32], &self.fonts, &cursor,
[gpu::INTERNAL_W as f32, gpu::INTERNAL_H as f32], &self.fonts, &self.session, &cursor,
);
// Vorgemerkten Klick auflösen: über einem Klickziel → dessen Aktion