diff options
| author | tslil clingman <> | 2020-10-15 22:52:04 -0400 |
|---|---|---|
| committer | tslil clingman <> | 2020-10-15 22:52:04 -0400 |
| commit | 721479482bf83a1774808516b4d4cc4556b06994 (patch) | |
| tree | 2488056ff0bd5a54841ab6b7ff7c5cb4fdfe898b /src/gui.rs | |
| parent | 2494c42d2fbd2900bdfeebfda39b0b706a45f9fe (diff) | |
Starting to understand FLTK/Rust Box<dyn FnMut()> story
Diffstat (limited to 'src/gui.rs')
| -rw-r--r-- | src/gui.rs | 85 |
1 files changed, 50 insertions, 35 deletions
@@ -1,50 +1,65 @@ -use fltk::{app, button::*, enums::*, frame::*, text::*, window::*}; +use fltk::{app::*, button::*, frame::*, text::*, window::*}; // enums::*, -#[derive(Debug, Clone, Copy)] -enum Message { - Increment, - Decrement, +#[derive(Clone, Copy)] +enum GUIMessage {} + +pub struct GUI { + app: App, + window: Window, + log: TextDisplay, + sender: Sender<GUIMessage>, + receiver: Receiver<GUIMessage>, } -pub fn gui_test() -> Result<(), Box<dyn std::error::Error>> { - let app = app::App::default(); +impl GUI { + pub fn new() -> GUI { + let app = App::default(); - let mut wind = SingleWindow::default() - .with_size(800, 600) - .center_screen() - .with_label("Test"); - wind.make_resizable(true); + // 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 ptn = TextDisplay::default() - .with_size(20 * 16, 30 * 16) - .with_pos(800 - 20 * 16 - 10, 0); - ptn.set_buffer(Some(TextBuffer::default())); + let mut window = Window::new(0, 0, 800, 600, "Takwrap").center_screen(); + window.make_resizable(true); - let mut but_inc = Button::new(30, 40, 100, 40, "@+"); - let mut but_dec = Button::new(30, 120, 100, 40, "@square"); - wind.end(); - wind.show(); + 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"); - let (s, r) = app::channel::<Message>(); + window.draw(Box::new(move || { + fltk::draw::set_draw_color(Color::White); + fltk::draw::draw_rectf(20, 20, 30, 30); + })); - but_inc.emit(s, Message::Increment); - but_dec.emit(s, Message::Decrement); + window.end(); - let mut state = 0; + let (sender, receiver) = channel::<GUIMessage>(); + // button.emit(sender, GUIMessage::Foo); - while app.wait()? { - match r.recv() { - Some(Message::Increment) => { - state += 1; - ptn.insert(&format!("Increment {}\n", state)); - } + GUI { + app, + window, + log, + sender, + receiver, + } + } + + pub fn run(&mut self) -> Result<(), fltk::prelude::FltkError> { + self.window.show(); - Some(Message::Decrement) => { - state -= 1; - ptn.insert(&format!("Decrement {}\n", state)); + while self.app.wait()? { + match self.receiver.recv() { + _ => (), } - None => (), } + Ok(()) } - Ok(()) } |
