aboutsummaryrefslogtreecommitdiff
path: root/src/desktop/window.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/desktop/window.rs')
-rw-r--r--src/desktop/window.rs117
1 files changed, 63 insertions, 54 deletions
diff --git a/src/desktop/window.rs b/src/desktop/window.rs
index 93c5aba..0d5bd8c 100644
--- a/src/desktop/window.rs
+++ b/src/desktop/window.rs
@@ -1,6 +1,6 @@
use std::collections::HashSet;
-use std::sync::{Arc, Mutex};
use std::sync::mpsc::{channel, Receiver, Sender};
+use std::sync::{Arc, Mutex};
use std::thread;
use crate::io::{Window, WindowSignal};
@@ -12,7 +12,7 @@ use winit::event::{Event, WindowEvent};
use winit::event_loop::EventLoopBuilder;
use winit::keyboard::{KeyCode, PhysicalKey};
use winit::platform::wayland::EventLoopBuilderExtWayland;
-use winit::window::{WindowBuilder};
+use winit::window::WindowBuilder;
use winit_input_helper::WinitInputHelper;
const WIDTH: u32 = 160;
@@ -37,7 +37,10 @@ impl DesktopWindow {
let key_eventloop = keys.clone();
thread::spawn(move || {
let keys = key_eventloop;
- let event_loop = EventLoopBuilder::new().with_any_thread(true).build().unwrap();
+ let event_loop = EventLoopBuilder::new()
+ .with_any_thread(true)
+ .build()
+ .unwrap();
let mut input = WinitInputHelper::new();
let window = Arc::new({
let size = LogicalSize::new((WIDTH * 4) as f64, (HEIGHT * 4) as f64);
@@ -57,68 +60,71 @@ impl DesktopWindow {
};
let mut fb = Box::new([0; 160 * 144]);
event_loop
- .run(|event, elwt| {
- if let Event::WindowEvent {
- event: WindowEvent::RedrawRequested,
- ..
- } = event
- {
- loop {
- if let Ok(new_fb) = fb_recv.try_recv() {
- fb = new_fb;
- } else {
- break;
- }
- }
- draw(pixels.frame_mut(), &fb);
- if let Err(err) = pixels.render() {
- elog(LogLevel::Error, format!("Error during render: {}", err));
- return;
- }
- }
-
- if let Event::WindowEvent {
- window_id: _,
- event:
- WindowEvent::KeyboardInput {
- device_id: _,
- event: ref keyboard_event,
- is_synthetic: _,
- },
- } = event
- {
- if let Ok(mut keys) = keys.lock() {
- if let PhysicalKey::Code(keycode) = keyboard_event.physical_key {
- if keyboard_event.state.is_pressed() {
- (*keys).insert(keycode);
+ .run(|event, elwt| {
+ if let Event::WindowEvent {
+ event: WindowEvent::RedrawRequested,
+ ..
+ } = event
+ {
+ loop {
+ if let Ok(new_fb) = fb_recv.try_recv() {
+ fb = new_fb;
} else {
- (*keys).remove(&keycode);
+ break;
}
}
+ draw(pixels.frame_mut(), &fb);
+ if let Err(err) = pixels.render() {
+ elog(LogLevel::Error, format!("Error during render: {}", err));
+ return;
+ }
}
- }
- if input.update(&event) {
- if input.close_requested() {
- elwt.exit();
- if let Err(err) = signal_send.send(WindowSignal::Exit) {
- elog(LogLevel::Error, format!("window signal send failed with error {}", err));
+ if let Event::WindowEvent {
+ window_id: _,
+ event:
+ WindowEvent::KeyboardInput {
+ device_id: _,
+ event: ref keyboard_event,
+ is_synthetic: _,
+ },
+ } = event
+ {
+ if let Ok(mut keys) = keys.lock() {
+ if let PhysicalKey::Code(keycode) = keyboard_event.physical_key {
+ if keyboard_event.state.is_pressed() {
+ (*keys).insert(keycode);
+ } else {
+ (*keys).remove(&keycode);
+ }
+ }
}
- return;
}
- if let Some(size) = input.window_resized() {
- if let Err(err) = pixels.resize_surface(size.width, size.height) {
- elog(LogLevel::Error, format!("Error during resize: {}", err));
+ if input.update(&event) {
+ if input.close_requested() {
+ elwt.exit();
+ if let Err(err) = signal_send.send(WindowSignal::Exit) {
+ elog(
+ LogLevel::Error,
+ format!("window signal send failed with error {}", err),
+ );
+ }
return;
}
- }
- window.request_redraw();
- }
- }).unwrap();
- });
+ if let Some(size) = input.window_resized() {
+ if let Err(err) = pixels.resize_surface(size.width, size.height) {
+ elog(LogLevel::Error, format!("Error during resize: {}", err));
+ return;
+ }
+ }
+ window.request_redraw();
+ }
+ })
+ .unwrap();
+ });
Ok(Self {
fb_send,
@@ -131,7 +137,10 @@ impl DesktopWindow {
impl Window for DesktopWindow {
fn update(&mut self, fb: Box<[u32; 160 * 144]>) -> Option<WindowSignal> {
if let Err(err) = self.fb_send.send(fb) {
- elog(LogLevel::Error, format!("Framebuffer channel send failed with error: {}", err));
+ elog(
+ LogLevel::Error,
+ format!("Framebuffer channel send failed with error: {}", err),
+ );
}
if let Ok(signal) = self.signal_recv.try_recv() {