diff --git a/Cargo.lock b/Cargo.lock index 6c24e3e..eea177e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -72,14 +72,22 @@ dependencies = [ name = "board-builder" version = "1.0.0" dependencies = [ - "fltk", "image", "serde", "serde_json", - "state", "zip", ] +[[package]] +name = "board-builder-impl-fltk" +version = "0.1.0" +dependencies = [ + "board-builder", + "fltk", + "image", + "state", +] + [[package]] name = "bumpalo" version = "3.9.1" diff --git a/Cargo.toml b/Cargo.toml index c285a1b..f89b24d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,11 +3,14 @@ name = "board-builder" version = "1.0.0" edition = "2021" -[dependencies] +[lib] +crate-type = ["rlib", "cdylib"] -fltk = "1.3.6" -state = "0.5.3" +[dependencies] serde = { version = "1.0.136", features = ["derive"] } serde_json = "1.0.79" zip = "0.6.2" -image = "0.24.2" \ No newline at end of file +image = "0.24.2" + +[workspace] +members = ["board-builder-impl-fltk"] \ No newline at end of file diff --git a/board-builder-impl-fltk/Cargo.toml b/board-builder-impl-fltk/Cargo.toml new file mode 100644 index 0000000..0476e0b --- /dev/null +++ b/board-builder-impl-fltk/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "board-builder-impl-fltk" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +board-builder = { path = "../" } +fltk = "1.3.6" +state = "0.5.3" +image = "0.24.2" \ No newline at end of file diff --git a/src/main.rs b/board-builder-impl-fltk/src/main.rs similarity index 94% rename from src/main.rs rename to board-builder-impl-fltk/src/main.rs index 9b51d45..f7be611 100644 --- a/src/main.rs +++ b/board-builder-impl-fltk/src/main.rs @@ -11,9 +11,8 @@ use state::Storage; use std::sync::Mutex; -mod board; -use board::Board; -use board::{ encode_png, write_board_to_file, read_board_from_file, CoordTransformer }; +use board_builder::Board; +use board_builder::{ encode_png, write_board_to_file, read_board_from_file, CoordTransformer }; //////////////////// Global State //////////////////// // Don't @ me... @@ -133,9 +132,11 @@ mod dispatch { } } -impl CoordTransformer for frame::Frame { - fn origin(&self) -> (i32, i32) { (self.x(), self.y()) } - fn extremes(&self) -> (i32, i32) { (self.x()+self.w(), self.y()+self.h()) } +struct FrameView<'a>(&'a frame::Frame); + +impl<'a> CoordTransformer for FrameView<'a> { + fn origin(&self) -> (i32, i32) { (self.0.x(), self.0.y()) } + fn extremes(&self) -> (i32, i32) { (self.0.x()+self.0.w(), self.0.y()+self.0.h()) } } //////////////////// App State //////////////////// @@ -249,6 +250,7 @@ fn main() { } // Nodes let board = &state.board; + let f = FrameView(f); for (&id, node) in &board.nodes { // Draw the node let (x, y) = f.from_coords(node.x, node.y); @@ -270,6 +272,7 @@ fn main() { frame.handle(move |f, e| { match e { Event::Push => { + let f = FrameView(f); let edit_mode = STATE.get().lock().unwrap().edit_mode; let coords = f.to_coords(app::event_x(), app::event_y()); diff --git a/src/board.rs b/src/lib.rs similarity index 100% rename from src/board.rs rename to src/lib.rs