add examples; do not hard-shutdown when screen is closed - destructors did not run!

This commit is contained in:
2020-10-10 22:25:26 +02:00
parent c28fee88fe
commit 9254635fd7
4 changed files with 124 additions and 9 deletions
+11 -9
View File
@@ -97,9 +97,9 @@ impl OpTrait for ScreenOp {
let backend: &mut Backend = state.ext_mut();
if force != 0 {
blit(backend)
blit(backend)?;
} else {
blit_maybe(backend)
blit_maybe(backend)?;
}
}
@@ -143,7 +143,7 @@ impl OpTrait for ScreenOp {
backend.buffer[index as usize] = color as u32;
if backend.opts.auto_blit {
blit_maybe(backend);
blit_maybe(backend)?;
}
}
}
@@ -274,29 +274,31 @@ fn init(state: &mut RunState, width: Value, height: Value) -> Result<(), Fault>
backend.window = Some(window);
blit_maybe(backend);
blit_maybe(backend)?;
Ok(())
}
fn blit_maybe(backend: &mut Backend) {
fn blit_maybe(backend: &mut Backend) -> Result<(), Fault> {
if backend.last_render.elapsed() >= backend.opts.frame_rate {
blit(backend);
blit(backend)
} else {
Ok(())
}
}
fn blit(backend: &mut Backend) {
fn blit(backend: &mut Backend) -> Result<(), Fault> {
let w = backend.window.as_mut().unwrap();
if !w.is_open() {
// TODO...
std::process::exit(0);
return Err(Fault::Halt);
}
w.update_with_buffer(&backend.buffer, backend.width, backend.height)
.expect("Update screen"); // TODO fault
backend.last_render = Instant::now();
Ok(())
}
fn num2key(num: Value) -> Option<Key> {