Fix busy waiting in wait_for_rom() by using a blocking event iterator
Also move the redraw code into a closure to be able to call it from two places. By the result of this waiting for ROMs no longer consumes 100% of a CPU core. Former-commit-id: bc86ade197221eb8d357af91a3b59f4eb165adc5 Former-commit-id: 521f361872964d77b88097d7baa6a4b6b713224e
This commit is contained in:
parent
8879d40262
commit
0ae9ef14c3
|
@ -1,5 +1,5 @@
|
|||
use sdl2;
|
||||
use sdl2::event::Event;
|
||||
use sdl2::event::{Event, WindowEvent};
|
||||
use sdl2::image::{InitFlag, LoadTexture};
|
||||
use sdl2::keyboard::Scancode;
|
||||
use sdl2::messagebox::*;
|
||||
|
@ -63,16 +63,8 @@ fn wait_for_rom(canvas: &mut WindowCanvas, event_pump: &mut EventPump) -> Result
|
|||
.load_texture("assets/icon_cropped_small.png")
|
||||
.expect("failed to load icon");
|
||||
let background = Color::RGB(0xDD, 0xDD, 0xDD);
|
||||
loop {
|
||||
for event in event_pump.poll_iter() {
|
||||
match event {
|
||||
Event::DropFile { filename, .. } => {
|
||||
return Ok(filename);
|
||||
}
|
||||
Event::Quit { .. } => process::exit(0),
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
|
||||
let mut redraw = || -> Result<(), String> {
|
||||
canvas.set_draw_color(background);
|
||||
canvas.clear();
|
||||
canvas.copy(
|
||||
|
@ -85,6 +77,25 @@ fn wait_for_rom(canvas: &mut WindowCanvas, event_pump: &mut EventPump) -> Result
|
|||
)),
|
||||
)?;
|
||||
canvas.present();
|
||||
Ok(())
|
||||
};
|
||||
|
||||
redraw()?;
|
||||
|
||||
loop {
|
||||
for event in event_pump.wait_iter() {
|
||||
match event {
|
||||
Event::DropFile { filename, .. } => {
|
||||
return Ok(filename);
|
||||
}
|
||||
Event::Quit { .. } => process::exit(0),
|
||||
Event::Window { win_event, .. } => match win_event {
|
||||
WindowEvent::SizeChanged(..) => redraw()?,
|
||||
_ => {}
|
||||
},
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Reference in a new issue