diff --git a/Cargo.lock b/Cargo.lock index 592351b..7a1c8b9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1136,81 +1136,6 @@ dependencies = [ "jni-sys", ] -[[package]] -name = "num" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" -dependencies = [ - "num-bigint", - "num-complex", - "num-integer", - "num-iter", - "num-rational", - "num-traits", -] - -[[package]] -name = "num-bigint" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c165a9ab64cf766f73521c0dd2cfdff64f488b8f0b3e621face3462d3db536d7" -dependencies = [ - "num-integer", - "num-traits", -] - -[[package]] -name = "num-complex" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-derive" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "num-integer" -version = "0.1.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-iter" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" -dependencies = [ - "num-bigint", - "num-integer", - "num-traits", -] - [[package]] name = "num-traits" version = "0.2.19" @@ -1707,17 +1632,14 @@ dependencies = [ [[package]] name = "servicepoint2" -version = "0.1.3" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff3f24a6ee5fa2b73d57b78d8d35efefb9397d0ea012978fe52b396f601e8948" +checksum = "8d434890b6d1a4c886f384639bf79ba7f127221cad7bff45acabf99d2fccee5f" dependencies = [ "bzip2", "flate2", "log", "lz4", - "num", - "num-derive", - "num-traits", "zstd", ] diff --git a/Cargo.toml b/Cargo.toml index 50e6e4e..44b638a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,7 +7,7 @@ license = "GPL-3.0-or-later" [dependencies] # packet parsing -servicepoint2 = "0.1.3" +servicepoint2 = "0.2.0" # gui winit = { version = "0.30", features = ["rwh_05"] } # for creating a window diff --git a/src/font.rs b/src/font.rs index 856b72b..953bce5 100644 --- a/src/font.rs +++ b/src/font.rs @@ -36,7 +36,7 @@ impl BitmapFont { HintingOptions::None, RasterizationOptions::GrayscaleAa, ) - .unwrap(); + .unwrap(); assert_eq!(canvas.pixels.len(), 64); assert_eq!(canvas.stride, 8); diff --git a/src/gui.rs b/src/gui.rs index b75b261..be76beb 100644 --- a/src/gui.rs +++ b/src/gui.rs @@ -2,10 +2,10 @@ use std::sync::mpsc::Sender; use std::sync::RwLock; use log::{info, warn}; -use pixels::wgpu::TextureFormat; use pixels::{Pixels, PixelsBuilder, SurfaceTexture}; +use pixels::wgpu::TextureFormat; use servicepoint2::{ - ByteGrid, PixelGrid, PIXEL_HEIGHT, PIXEL_WIDTH, TILE_SIZE, + ByteGrid, PIXEL_HEIGHT, PIXEL_WIDTH, PixelGrid, TILE_SIZE, }; use winit::application::ApplicationHandler; use winit::dpi::{LogicalSize, Size}; @@ -19,8 +19,11 @@ pub struct App<'t> { window: Option, pixels: Option, stop_udp_tx: Sender<()>, + spacers: bool, } +const SPACER_HEIGHT: u16 = 4; + #[derive(Debug)] pub enum AppEvents { UdpPacketHandled, @@ -32,6 +35,7 @@ impl<'t> App<'t> { display: &'t RwLock, luma: &'t RwLock, stop_udp_tx: Sender<()>, + spacers: bool, ) -> Self { App { display, @@ -39,42 +43,44 @@ impl<'t> App<'t> { stop_udp_tx, pixels: None, window: None, + spacers, } } } impl ApplicationHandler for App<'_> { fn resumed(&mut self, event_loop: &ActiveEventLoop) { - let size = Size::from(LogicalSize::new( - PIXEL_WIDTH as f64, - PIXEL_HEIGHT as f64, - )); + let height = if self.spacers { + let num_spacers = (PIXEL_HEIGHT / TILE_SIZE) - 1; + PIXEL_HEIGHT + num_spacers * SPACER_HEIGHT + } else { + PIXEL_HEIGHT + } as f64; + + let size = Size::from(LogicalSize::new(PIXEL_WIDTH as f64, height)); let attributes = Window::default_attributes() - .with_title("pixel-receiver-rs") + .with_title("servicepoint-simulator") .with_inner_size(size); let window = event_loop.create_window(attributes).unwrap(); self.window = Some(window); let window = self.window.as_ref().unwrap(); - self.pixels = { + self.pixels = Some({ let window_size = window.inner_size(); - let surface_texture = SurfaceTexture::new( + PixelsBuilder::new( window_size.width, window_size.height, - &window, - ); - Some( - PixelsBuilder::new( - PIXEL_WIDTH as u32, - PIXEL_HEIGHT as u32, - surface_texture, - ) + SurfaceTexture::new( + window_size.width, + window_size.height, + &window, + ), + ) .render_texture_format(TextureFormat::Bgra8UnormSrgb) .build() - .expect("could not create pixels"), - ) - }; + .expect("could not create pixels") + }); } fn user_event(&mut self, event_loop: &ActiveEventLoop, event: AppEvents) { @@ -116,6 +122,13 @@ impl ApplicationHandler for App<'_> { let luma = self.luma.read().unwrap(); for y in 0..PIXEL_HEIGHT as usize { + if self.spacers && y != 0 && y % TILE_SIZE as usize == 0 { + // cannot just frame.skip(PIXEL_WIDTH as usize * SPACER_HEIGHT as usize) because of typing + for _ in 0..PIXEL_WIDTH as usize * SPACER_HEIGHT as usize { + frame.next().unwrap(); + } + } + for x in 0..PIXEL_WIDTH as usize { let is_set = display.get(x, y); let brightness = diff --git a/src/main.rs b/src/main.rs index 767579a..274d60f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,8 +8,8 @@ use std::time::Duration; use clap::Parser; use log::{debug, error, info, warn}; use servicepoint2::{ - ByteGrid, Command, Origin, Packet, PixelGrid, PIXEL_COUNT, PIXEL_HEIGHT, - PIXEL_WIDTH, TILE_HEIGHT, TILE_SIZE, TILE_WIDTH, + ByteGrid, Command, Origin, Packet, PIXEL_COUNT, PIXEL_HEIGHT, PIXEL_WIDTH, + PixelGrid, TILE_HEIGHT, TILE_SIZE, TILE_WIDTH, }; use winit::event_loop::{ControlFlow, EventLoop}; @@ -21,8 +21,10 @@ mod gui; #[derive(Parser, Debug)] struct Cli { - #[arg(long, default_value = "0.0.0.0:2342")] + #[arg(short, long, default_value = "0.0.0.0:2342")] bind: String, + #[arg(short, long, default_value_t = false)] + spacers: bool, } fn main() { @@ -51,7 +53,7 @@ fn main() { let (stop_udp_tx, stop_udp_rx) = mpsc::channel(); - let mut app = App::new(display_ref, luma_ref, stop_udp_tx); + let mut app = App::new(display_ref, luma_ref, stop_udp_tx, cli.spacers); let event_loop = EventLoop::with_user_event() .build() @@ -237,12 +239,15 @@ fn print_cp437_data( display: &mut RwLockWriteGuard, ) { let Origin(x, y) = origin; + let x = x as usize; + let y = y as usize; + for char_y in 0usize..grid.height { for char_x in 0usize..grid.width { let char_code = grid.get(char_x, char_y); - let tile_x = char_x + x as usize; - let tile_y = char_y + y as usize; + let tile_x = char_x + x; + let tile_y = char_y + y; let bitmap = font.get_bitmap(char_code); print_pixel_grid(