aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortslil clingman <>2020-10-15 22:52:04 -0400
committertslil clingman <>2020-10-15 22:52:04 -0400
commit721479482bf83a1774808516b4d4cc4556b06994 (patch)
tree2488056ff0bd5a54841ab6b7ff7c5cb4fdfe898b /src
parent2494c42d2fbd2900bdfeebfda39b0b706a45f9fe (diff)
Starting to understand FLTK/Rust Box<dyn FnMut()> story
Diffstat (limited to 'src')
-rw-r--r--src/gui.rs85
-rw-r--r--src/main.rs3
2 files changed, 52 insertions, 36 deletions
diff --git a/src/gui.rs b/src/gui.rs
index 32929ae..f539e8b 100644
--- a/src/gui.rs
+++ b/src/gui.rs
@@ -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(())
}
diff --git a/src/main.rs b/src/main.rs
index c7cc30a..88ce6fa 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -192,6 +192,7 @@ This program comes with ABSOLUTELY NO WARRANTY; and is made available under the
endwin();
} else {
- gui_test();
+ let mut gui = GUI::new();
+ gui.run();
}
}