counter/
counter.rs

1use fltk::{
2    app,
3    button::Button,
4    enums::{Color, FrameType},
5    frame::Frame,
6    group::Flex,
7    prelude::*,
8    window::Window,
9};
10use std::{cell::RefCell, rc::Rc};
11
12fn main() {
13    let app = app::App::default().with_scheme(app::Scheme::Gtk);
14    app::background(0x62, 0x00, 0xee);
15    app::set_visible_focus(false);
16
17    let count = Rc::new(RefCell::new(0));
18
19    let mut wind = Window::default().with_size(160, 200).with_label("Counter");
20    let mut flex = Flex::default_fill().column();
21    flex.set_margins(30, 40, 30, 40);
22    flex.set_pad(10);
23    let mut but_inc = Button::default().with_label("+");
24    let mut frame = Frame::default().with_label(&count.borrow().to_string());
25    let mut but_dec = Button::default().with_label("-");
26    flex.end();
27    // wind.make_resizable(true);
28    wind.end();
29    wind.show();
30
31    but_inc.set_callback({
32        let count = count.clone();
33        let mut frame = frame.clone();
34        move |_| {
35            *count.borrow_mut() += 1;
36            frame.set_label(&count.borrow().to_string());
37        }
38    });
39
40    but_dec.set_callback(move |_| {
41        *count.borrow_mut() -= 1;
42        frame.set_label(&count.borrow().to_string());
43    });
44
45    // Theming
46    wind.set_color(Color::White);
47    but_inc.set_color(Color::from_u32(0x304FFE));
48    but_inc.set_selection_color(Color::Green);
49    but_inc.set_label_size(20);
50    but_inc.set_frame(FrameType::FlatBox);
51    but_inc.set_label_color(Color::White);
52    but_dec.set_color(Color::from_u32(0x2962FF));
53    but_dec.set_selection_color(Color::Red);
54    but_dec.set_frame(FrameType::FlatBox);
55    but_dec.set_label_size(20);
56    but_dec.set_label_color(Color::White);
57    // End theming
58
59    app.run().unwrap();
60}