poll_event

This commit is contained in:
2026-05-23 10:49:32 +02:00
parent 2f8d23f6cd
commit 2d81471820
3 changed files with 23 additions and 11 deletions
+9 -6
View File
@@ -31,14 +31,11 @@ fn main() {
while !p.should_close() {
p.poll_events(None);
// drain_events() borrowt &mut self → close erst nach dem Loop setzen.
let mut close = false;
for ev in p.drain_events() {
while let Some(ev) = p.poll_event() {
if let Event::Key { key: Key::Escape, pressed: true, .. } = ev {
close = true;
p.request_close();
}
}
if close { p.request_close(); }
let (w, _h) = p.framebuffer_size();
let fb = p.framebuffer_mut();
@@ -58,8 +55,14 @@ fn main() {
Default = 800×600 Fenster, 320×240 Framebuffer, 4:3, `palette::RGB332`.
- `Platform::new(cfg)` Fenster + GPU-Pipeline aufsetzen.
- `poll_events(timeout)` winit-Events einlesen (`None` = blockierend).
- `poll_event() -> Option<Event>` ein Event aus der Queue holen. Gibt
`&mut self` nach jedem Call frei, sodass im Loop direkt auf die Platform
reagiert werden kann (`request_close`, `set_mouse_capture`, `palette_mut` …).
Empfohlen für die normale Event-Schleife.
- `drain_events()` Iterator über `Event` (`Key`, `Char`, `MouseMove`,
`MouseBtn`, `Resize`, `CloseRequested`).
`MouseBtn`, `Resize`, `CloseRequested`). Borrowt `&mut self` bis der
Iterator fertig ist — Reaktionen auf die Platform müssen dann nach dem
Loop angewandt werden. Nützlich für reines Loggen/Filtern.
- `framebuffer_mut()` `&mut [u8]` der Länge `w*h`, je Pixel ein Paletten-Index.
- `palette_mut()` / `palette()` `&mut [[u8; 3]; 256]` bzw. `&[...]`; Schreibzugriff
markiert die Palette dirty, der nächste `present()` lädt sie hoch.