use fltk::{app::*, button::*, frame::*, text::*, window::*}; // enums::*, #[derive(Clone, Copy)] enum GUIMessage {} pub struct GUI { app: App, window: Window, log: TextDisplay, sender: Sender, receiver: Receiver, } impl GUI { pub fn new() -> GUI { let app = App::default(); // TODO: Why is this not the same as /* let mut window = Window::default() .with_size(800, 600) .with_label("Takwrap") .center_screen(); */ // Windows made that way are not resizable? let mut window = Window::new(0, 0, 800, 600, "Takwrap").center_screen(); window.make_resizable(true); let mut log = TextDisplay::default() .with_size(10 * 16, 600 - 10 - 10) .with_pos(800 - 10 * 16 - 10, 10); log.set_buffer(Some(TextBuffer::default())); log.insert("test"); window.draw(Box::new(move || { fltk::draw::set_draw_color(Color::White); fltk::draw::draw_rectf(20, 20, 30, 30); })); window.end(); let (sender, receiver) = channel::(); // button.emit(sender, GUIMessage::Foo); GUI { app, window, log, sender, receiver, } } pub fn run(&mut self) -> Result<(), fltk::prelude::FltkError> { self.window.show(); while self.app.wait()? { match self.receiver.recv() { _ => (), } } Ok(()) } }