From e9138a9d312772f795a4b402d3fdfc3e1dc30e91 Mon Sep 17 00:00:00 2001 From: Dane Johnson Date: Thu, 28 Apr 2022 13:38:30 -0500 Subject: [PATCH] Load board files --- src/main.rs | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/src/main.rs b/src/main.rs index 3cfafa3..40f9d30 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,7 +3,7 @@ use serde::{ Serialize, Deserialize }; use fltk::*; use fltk::prelude::*; use fltk::enums::*; -use fltk::image::{ SharedImage, PngImage }; +use fltk::image::PngImage; extern crate image; use image::io::Reader as ImageReader; @@ -13,7 +13,7 @@ use std::cell::RefCell; use std::rc::Rc; use std::collections::HashMap; -use std::io::{ Write, Cursor, BufWriter }; +use std::io::{ Write, Read, Cursor }; use std::fs::File; type Id = usize; @@ -52,7 +52,7 @@ impl AppState { } } -fn menu_cb(m: &mut impl MenuExt) { +fn menu_cb(_m: &mut impl MenuExt) { todo!(); } @@ -62,6 +62,13 @@ fn encode_png(image: &DynamicImage) -> Vec { cursor.into_inner() } +fn decode_png(buf: &[u8]) -> DynamicImage { + let cursor = Cursor::new(buf); + let mut reader = ImageReader::new(cursor); + reader.set_format(image::ImageFormat::Png); + reader.decode().unwrap() +} + fn main() { let app = app::App::default() .with_scheme(app::Scheme::Gtk); @@ -86,16 +93,23 @@ fn main() { menubar.add("File/Open..." , Shortcut::None, menu::MenuFlag::Normal, move |_| { let mut fc = dialog::NativeFileChooser::new(dialog::NativeFileChooserType::BrowseFile); fc.show(); - + let file = File::open(fc.filename()).unwrap(); let mut ar = zip::ZipArchive::new(file).unwrap(); + let mut state = AppState::new(); + let json_file = ar.by_name("graph.json").unwrap(); - let mut state = state_clone.borrow_mut(); state.board = serde_json::from_reader(json_file).unwrap(); - if let Some(image_file) = ar.by_name("image").ok() { - todo!(); + if let Ok(mut image_file) = ar.by_name("image.png") { + let mut buf = Vec::new(); + image_file.read_to_end(&mut buf).ok(); + + let image = decode_png(&buf); + state.image = Some(PngImage::from_data(&buf).unwrap()); + state.image_raw = Some(image); + app::redraw(); } - app::redraw(); + state_clone.replace(state); }); let state_clone = Rc::clone(&state); menubar.add("File/Open Image..." , Shortcut::None, menu::MenuFlag::Normal, move |_| { @@ -136,14 +150,14 @@ fn main() { }); menubar.add("Edit/Edit Nodes" , Shortcut::None, menu::MenuFlag::Normal, menu_cb); menubar.add("Edit/Edit Edges" , Shortcut::None, menu::MenuFlag::Normal, menu_cb); - flex.set_size(&mut menubar, 40); + flex.set_size(&menubar, 40); // Canvas let mut frame = frame::Frame::default(); let state_clone = Rc::clone(&state); frame.draw(move |f| { let mut state = state_clone.borrow_mut(); - let mut image = &mut state.image; + let image = &mut state.image; if let Some(image) = image.as_mut() { image.scale(f.w(), f.h(), true, true); image.draw(f.x(), f.y(), f.w(), f.h());