Struct Flex

Source
pub struct Flex { /* private fields */ }
Expand description

a Flexbox widget

§Example

use fltk::{prelude::*, *};
fn main() {
    let a = app::App::default();
    let mut win = window::Window::default().with_size(400, 300);
    let mut col = group::Flex::default().size_of_parent();
    col.set_type(group::FlexType::Column);
    let expanding = button::Button::default().with_label("Expanding");
    let mut normal = button::Button::default().with_label("Normal");
    col.fixed(&mut normal, 30);
    col.end();
    win.end();
    win.show();
    a.run().unwrap();
}

Implementations§

Source§

impl Flex

Source

pub fn new<'a, T: Into<Option<&'a str>>>( x: i32, y: i32, width: i32, height: i32, title: T, ) -> Flex

Creates a new widget, takes an x, y coordinates, as well as a width and height, plus a title

§Arguments
  • x - The x coordinate in the screen
  • y - The y coordinate in the screen
  • width - The width of the widget
  • heigth - The height of the widget
  • title - The title or label of the widget

To use dynamic strings use with_label(self, &str) or set_label(&mut self, &str). labels support special symbols preceded by an @ sign and for the associated formatting.

Source

pub fn default_fill() -> Self

Constructs a widget with the size of its parent

Examples found in repository?
examples/flex.rs (line 6)
3fn main() {
4    let a = app::App::default().with_scheme(app::Scheme::Gtk);
5    let mut win = window::Window::default().with_size(640, 480);
6    let mut col = group::Flex::default_fill().column();
7    main_panel(&mut col);
8    col.end();
9    win.resizable(&col);
10    win.set_color(enums::Color::from_rgb(250, 250, 250));
11    win.end();
12    win.show();
13    win.size_range(600, 400, 0, 0);
14    a.run().unwrap();
15}
More examples
Hide additional examples
examples/hello_flex.rs (line 6)
3fn main() {
4    let app = app::App::default();
5    let mut wind = Window::default().with_size(400, 300);
6    let mut col = Flex::default_fill().column();
7    col.set_margins(120, 80, 120, 80);
8    let mut frame = Frame::default();
9    let mut but = Button::default().with_label("Click me!");
10    col.fixed(&but, 40);
11    col.end();
12    wind.end();
13    wind.show();
14
15    but.set_callback(move |_| frame.set_label("Hello world"));
16
17    app.run().unwrap();
18}
examples/composite_widgets.rs (line 48)
42fn main() {
43    let app = app::App::default();
44    app::set_visible_focus(false);
45    let mut win = window::Window::default().with_size(500, 400);
46    win.make_resizable(true);
47    win.set_color(enums::Color::Black);
48    let mut col = group::Flex::default_fill().column();
49    col.set_margin(20);
50    col.set_pad(10);
51
52    for i in 0..3 {
53        let label = format!("Button {}", i + 1);
54        let mut but = MyButton::new(500, 100);
55        but.set_label(&label);
56        but.set_callback(move |_| println!("{label}"));
57    }
58
59    col.end();
60    win.end();
61    win.show();
62    app.run().unwrap();
63}
examples/widget_id.rs (line 56)
49fn main() {
50    let counter = Counter { count: 0 };
51    let _state = app::GlobalState::new(counter);
52    let app = app::App::default().with_scheme(app::Scheme::Gtk);
53    let mut wind = window::Window::default()
54        .with_size(160, 200)
55        .with_label("Counter");
56    let col = group::Flex::default_fill().column();
57    button::Button::default()
58        .with_label("+")
59        .on_trigger(increment); // passed by function object
60    frame::Frame::default().with_label("0").with_id("my_frame"); // pass id here
61    button::Button::default()
62        .with_label("-")
63        .on_trigger(|_| increment_by(-1)); // called in closure
64    col.end();
65    wind.make_resizable(true);
66    wind.end();
67    wind.show();
68
69    app.run().unwrap();
70}
examples/closable_tab.rs (line 14)
11fn main() {
12    let app = app::App::default();
13    let mut win = window::Window::default().with_size(800, 600);
14    let row = group::Flex::default_fill().row();
15    let mut tabs = group::Tabs::default();
16    tabs.set_tab_align(enums::Align::Right);
17    tabs.handle_overflow(group::TabsOverflow::Compress);
18    // first tab
19    {
20        let mut col1 = group::Flex::default().with_label("\t\ttab1").column();
21        col1.set_when(When::Closed);
22        col1.set_callback(tab_close_cb);
23        // widgets
24        col1.end();
25    }
26    // end first tab
27
28    // second tab
29    {
30        let mut col2 = group::Flex::default().with_label("\t\ttab2").column();
31        col2.set_when(When::Closed);
32        col2.set_callback(tab_close_cb);
33        // widgets
34        col2.end();
35    }
36    // end second tab
37    tabs.end();
38    tabs.auto_layout();
39    row.end();
40    win.end();
41    win.show();
42    app.run().unwrap();
43}
examples/tabs.rs (line 15)
12fn draw_gallery() {
13    let mut tab = Tabs::default_fill();
14
15    let mut grp1 = Flex::default_fill().with_label("Tab1\t\t").row();
16    let mut col = Flex::default().column();
17    grp1.fixed(&col, 160);
18    col.set_pad(10);
19    col.set_margin(10);
20    let _but1 = Button::default().with_label("Button");
21    let _but2 = RoundButton::default().with_label("Round");
22    let _but3 = CheckButton::default().with_label("Check");
23    let _but4 = LightButton::default().with_label("Light");
24    let mut but5 = MenuButton::default().with_label("Menu");
25    but5.add_choice("Hello|World|From|Rust");
26    let _but6 = ReturnButton::default().with_label("Return");
27    let mut chce = Choice::default();
28    chce.add_choice("Hello");
29    let _inp = Input::default();
30    let mut out = Output::default();
31    out.set_value("output");
32    col.end();
33    grp1.end();
34
35    let grp2 = Flex::default_fill().with_label("Tab2\t\t").row();
36    grp2.end();
37    tab.end();
38    tab.auto_layout();
39}
Source§

impl Flex

Source

pub fn add<W: WidgetExt>(&mut self, widget: &W)

Add a widget to the Flex box

Source

pub fn insert<W: WidgetExt>(&mut self, widget: &W, idx: i32)

Add a widget to the Flex box

Source

pub fn fixed<W: WidgetExt>(&mut self, w: &W, size: i32)

Set the size of the widget, same as set_size, but more inline with the new FLTK Fl_Flex api

Examples found in repository?
examples/hello_flex.rs (line 10)
3fn main() {
4    let app = app::App::default();
5    let mut wind = Window::default().with_size(400, 300);
6    let mut col = Flex::default_fill().column();
7    col.set_margins(120, 80, 120, 80);
8    let mut frame = Frame::default();
9    let mut but = Button::default().with_label("Click me!");
10    col.fixed(&but, 40);
11    col.end();
12    wind.end();
13    wind.show();
14
15    but.set_callback(move |_| frame.set_label("Hello world"));
16
17    app.run().unwrap();
18}
More examples
Hide additional examples
examples/tabs.rs (line 17)
12fn draw_gallery() {
13    let mut tab = Tabs::default_fill();
14
15    let mut grp1 = Flex::default_fill().with_label("Tab1\t\t").row();
16    let mut col = Flex::default().column();
17    grp1.fixed(&col, 160);
18    col.set_pad(10);
19    col.set_margin(10);
20    let _but1 = Button::default().with_label("Button");
21    let _but2 = RoundButton::default().with_label("Round");
22    let _but3 = CheckButton::default().with_label("Check");
23    let _but4 = LightButton::default().with_label("Light");
24    let mut but5 = MenuButton::default().with_label("Menu");
25    but5.add_choice("Hello|World|From|Rust");
26    let _but6 = ReturnButton::default().with_label("Return");
27    let mut chce = Choice::default();
28    chce.add_choice("Hello");
29    let _inp = Input::default();
30    let mut out = Output::default();
31    out.set_value("output");
32    col.end();
33    grp1.end();
34
35    let grp2 = Flex::default_fill().with_label("Tab2\t\t").row();
36    grp2.end();
37    tab.end();
38    tab.auto_layout();
39}
examples/editor.rs (line 273)
246fn main() {
247    let a = app::App::default().with_scheme(app::Scheme::Oxy);
248    app::get_system_colors();
249
250    let mut buf = text::TextBuffer::default();
251    buf.set_tab_distance(4);
252
253    let state = State::new(buf.clone());
254    app::GlobalState::new(state);
255
256    let mut w = window::Window::default()
257        .with_size(WIDTH, HEIGHT)
258        .with_label("Ted");
259    w.set_xclass("ted");
260    {
261        let mut col = group::Flex::default_fill().column();
262        col.set_pad(0);
263        let mut m = menu::SysMenuBar::default();
264        init_menu(&mut m);
265        let mut ed = text::TextEditor::default().with_id("ed");
266        ed.set_buffer(buf);
267        ed.set_linenumber_width(40);
268        ed.set_text_font(Font::Courier);
269        ed.set_when(When::Changed);
270        ed.set_callback(editor_cb);
271        handle_drag_drop(&mut ed);
272        w.resizable(&col);
273        col.fixed(&m, 30);
274        col.end();
275    }
276    w.end();
277    w.show();
278    w.set_callback(win_cb);
279    a.run().unwrap();
280}
examples/temp_converter2.rs (line 52)
37    pub fn new() -> Self {
38        let a = app::App::default();
39        MyApp::init_styles();
40        let (s, r) = app::channel();
41
42        let (inp1, inp2) = {
43            let mut win = window::Window::default().with_size(150, 200);
44            let mut flex = group::Flex::default()
45                .with_size(130, 180)
46                .center_of(&win)
47                .column();
48            make_label("Celcius");
49            let mut inp1 = input::FloatInput::default().with_size(0, 40);
50            make_label("Fahrenheit");
51            let mut inp2 = input::FloatInput::default().with_size(0, 40);
52            flex.fixed(&inp1, 30);
53            flex.fixed(&inp2, 30);
54            flex.end();
55            win.end();
56            win.make_resizable(true);
57            win.show();
58
59            inp1.set_value(&format!("{}", 0.0));
60            inp2.set_value(&format!("{}", 32.0));
61
62            inp1.set_when(When::Changed);
63            inp2.set_when(When::Changed);
64
65            inp1.emit(s, Message::CelciusChanged);
66            inp2.emit(s, Message::FahrenheitChanged);
67
68            (inp1, inp2)
69        };
70        Self { a, inp1, inp2, r }
71    }
examples/flex.rs (line 28)
17fn buttons_panel(parent: &mut group::Flex) {
18    frame::Frame::default();
19    let w = frame::Frame::default().with_label("Welcome to Flex Login");
20
21    let mut urow = group::Flex::default().row();
22    {
23        frame::Frame::default()
24            .with_label("Username:")
25            .with_align(enums::Align::Inside | enums::Align::Right);
26        let username = input::Input::default();
27
28        urow.fixed(&username, 180);
29        urow.end();
30    }
31
32    let mut prow = group::Flex::default().row();
33    {
34        frame::Frame::default()
35            .with_label("Password:")
36            .with_align(enums::Align::Inside | enums::Align::Right);
37        let password = input::Input::default();
38
39        prow.fixed(&password, 180);
40        prow.end();
41    }
42
43    let pad = frame::Frame::default();
44
45    let mut brow = group::Flex::default().row();
46    {
47        frame::Frame::default();
48        let reg = create_button("Register");
49        let login = create_button("Login");
50
51        brow.fixed(&reg, 80);
52        brow.fixed(&login, 80);
53        brow.end();
54    }
55
56    let b = frame::Frame::default();
57
58    frame::Frame::default();
59
60    parent.fixed(&w, 60);
61    parent.fixed(&urow, 30);
62    parent.fixed(&prow, 30);
63    parent.fixed(&pad, 1);
64    parent.fixed(&brow, 30);
65    parent.fixed(&b, 30);
66}
67
68fn middle_panel(parent: &mut group::Flex) {
69    frame::Frame::default();
70
71    let mut frame = frame::Frame::default().with_label("Image");
72    frame.set_frame(enums::FrameType::BorderBox);
73    frame.set_color(enums::Color::from_rgb(0, 200, 0));
74    let spacer = frame::Frame::default();
75
76    let mut bp = group::Flex::default().column();
77    buttons_panel(&mut bp);
78    bp.end();
79
80    frame::Frame::default();
81
82    parent.fixed(&frame, 200);
83    parent.fixed(&spacer, 10);
84    parent.fixed(&bp, 300);
85}
86
87fn main_panel(parent: &mut group::Flex) {
88    frame::Frame::default();
89
90    let mut mp = group::Flex::default().row();
91    middle_panel(&mut mp);
92    mp.end();
93
94    frame::Frame::default();
95
96    parent.fixed(&mp, 200);
97}
examples/frames.rs (line 33)
22fn main() {
23    let app = app::App::default();
24    let mut win = window::Window::default()
25        .with_size(1000, 800)
26        .with_label("Frames");
27    win.set_center_screen();
28
29    let mut col = group::Flex::default_fill().column();
30    col.set_margin(20);
31
32    let mut row = group::Flex::default();
33    col.fixed(&row, 75);
34    for i in 0..8 {
35        let _ = MyFrame::new(i);
36    }
37    row.end();
38    row.set_pad(10);
39
40    let mut row = group::Flex::default();
41    col.fixed(&row, 75);
42    for i in 8..17 {
43        let _ = MyFrame::new(i);
44    }
45    row.end();
46    row.set_pad(10);
47
48    let mut row = group::Flex::default();
49    col.fixed(&row, 75);
50    for i in 17..26 {
51        let _ = MyFrame::new(i);
52    }
53    row.end();
54    row.set_pad(10);
55
56    let mut row = group::Flex::default();
57    col.fixed(&row, 75);
58    for i in 26..35 {
59        let _ = MyFrame::new(i);
60    }
61    row.end();
62    row.set_pad(10);
63
64    let mut row = group::Flex::default();
65    col.fixed(&row, 75);
66    for i in 35..44 {
67        let _ = MyFrame::new(i);
68    }
69    row.end();
70    row.set_pad(10);
71
72    let mut row = group::Flex::default();
73    col.fixed(&row, 75);
74    for i in 44..53 {
75        let _ = MyFrame::new(i);
76    }
77    row.end();
78    row.set_pad(10);
79
80    col.end();
81    col.set_pad(30);
82
83    win.end();
84    win.show();
85    win.set_color(enums::Color::White);
86
87    app.run().unwrap();
88}
Source

pub fn debug(flag: bool)

Debug the flex layout

Source

pub fn column(self) -> Self

Set the type to be a column

Examples found in repository?
examples/flex.rs (line 6)
3fn main() {
4    let a = app::App::default().with_scheme(app::Scheme::Gtk);
5    let mut win = window::Window::default().with_size(640, 480);
6    let mut col = group::Flex::default_fill().column();
7    main_panel(&mut col);
8    col.end();
9    win.resizable(&col);
10    win.set_color(enums::Color::from_rgb(250, 250, 250));
11    win.end();
12    win.show();
13    win.size_range(600, 400, 0, 0);
14    a.run().unwrap();
15}
16
17fn buttons_panel(parent: &mut group::Flex) {
18    frame::Frame::default();
19    let w = frame::Frame::default().with_label("Welcome to Flex Login");
20
21    let mut urow = group::Flex::default().row();
22    {
23        frame::Frame::default()
24            .with_label("Username:")
25            .with_align(enums::Align::Inside | enums::Align::Right);
26        let username = input::Input::default();
27
28        urow.fixed(&username, 180);
29        urow.end();
30    }
31
32    let mut prow = group::Flex::default().row();
33    {
34        frame::Frame::default()
35            .with_label("Password:")
36            .with_align(enums::Align::Inside | enums::Align::Right);
37        let password = input::Input::default();
38
39        prow.fixed(&password, 180);
40        prow.end();
41    }
42
43    let pad = frame::Frame::default();
44
45    let mut brow = group::Flex::default().row();
46    {
47        frame::Frame::default();
48        let reg = create_button("Register");
49        let login = create_button("Login");
50
51        brow.fixed(&reg, 80);
52        brow.fixed(&login, 80);
53        brow.end();
54    }
55
56    let b = frame::Frame::default();
57
58    frame::Frame::default();
59
60    parent.fixed(&w, 60);
61    parent.fixed(&urow, 30);
62    parent.fixed(&prow, 30);
63    parent.fixed(&pad, 1);
64    parent.fixed(&brow, 30);
65    parent.fixed(&b, 30);
66}
67
68fn middle_panel(parent: &mut group::Flex) {
69    frame::Frame::default();
70
71    let mut frame = frame::Frame::default().with_label("Image");
72    frame.set_frame(enums::FrameType::BorderBox);
73    frame.set_color(enums::Color::from_rgb(0, 200, 0));
74    let spacer = frame::Frame::default();
75
76    let mut bp = group::Flex::default().column();
77    buttons_panel(&mut bp);
78    bp.end();
79
80    frame::Frame::default();
81
82    parent.fixed(&frame, 200);
83    parent.fixed(&spacer, 10);
84    parent.fixed(&bp, 300);
85}
More examples
Hide additional examples
examples/hello_flex.rs (line 6)
3fn main() {
4    let app = app::App::default();
5    let mut wind = Window::default().with_size(400, 300);
6    let mut col = Flex::default_fill().column();
7    col.set_margins(120, 80, 120, 80);
8    let mut frame = Frame::default();
9    let mut but = Button::default().with_label("Click me!");
10    col.fixed(&but, 40);
11    col.end();
12    wind.end();
13    wind.show();
14
15    but.set_callback(move |_| frame.set_label("Hello world"));
16
17    app.run().unwrap();
18}
examples/composite_widgets.rs (line 48)
42fn main() {
43    let app = app::App::default();
44    app::set_visible_focus(false);
45    let mut win = window::Window::default().with_size(500, 400);
46    win.make_resizable(true);
47    win.set_color(enums::Color::Black);
48    let mut col = group::Flex::default_fill().column();
49    col.set_margin(20);
50    col.set_pad(10);
51
52    for i in 0..3 {
53        let label = format!("Button {}", i + 1);
54        let mut but = MyButton::new(500, 100);
55        but.set_label(&label);
56        but.set_callback(move |_| println!("{label}"));
57    }
58
59    col.end();
60    win.end();
61    win.show();
62    app.run().unwrap();
63}
examples/widget_id.rs (line 56)
49fn main() {
50    let counter = Counter { count: 0 };
51    let _state = app::GlobalState::new(counter);
52    let app = app::App::default().with_scheme(app::Scheme::Gtk);
53    let mut wind = window::Window::default()
54        .with_size(160, 200)
55        .with_label("Counter");
56    let col = group::Flex::default_fill().column();
57    button::Button::default()
58        .with_label("+")
59        .on_trigger(increment); // passed by function object
60    frame::Frame::default().with_label("0").with_id("my_frame"); // pass id here
61    button::Button::default()
62        .with_label("-")
63        .on_trigger(|_| increment_by(-1)); // called in closure
64    col.end();
65    wind.make_resizable(true);
66    wind.end();
67    wind.show();
68
69    app.run().unwrap();
70}
examples/closable_tab.rs (line 20)
11fn main() {
12    let app = app::App::default();
13    let mut win = window::Window::default().with_size(800, 600);
14    let row = group::Flex::default_fill().row();
15    let mut tabs = group::Tabs::default();
16    tabs.set_tab_align(enums::Align::Right);
17    tabs.handle_overflow(group::TabsOverflow::Compress);
18    // first tab
19    {
20        let mut col1 = group::Flex::default().with_label("\t\ttab1").column();
21        col1.set_when(When::Closed);
22        col1.set_callback(tab_close_cb);
23        // widgets
24        col1.end();
25    }
26    // end first tab
27
28    // second tab
29    {
30        let mut col2 = group::Flex::default().with_label("\t\ttab2").column();
31        col2.set_when(When::Closed);
32        col2.set_callback(tab_close_cb);
33        // widgets
34        col2.end();
35    }
36    // end second tab
37    tabs.end();
38    tabs.auto_layout();
39    row.end();
40    win.end();
41    win.show();
42    app.run().unwrap();
43}
examples/tabs.rs (line 16)
12fn draw_gallery() {
13    let mut tab = Tabs::default_fill();
14
15    let mut grp1 = Flex::default_fill().with_label("Tab1\t\t").row();
16    let mut col = Flex::default().column();
17    grp1.fixed(&col, 160);
18    col.set_pad(10);
19    col.set_margin(10);
20    let _but1 = Button::default().with_label("Button");
21    let _but2 = RoundButton::default().with_label("Round");
22    let _but3 = CheckButton::default().with_label("Check");
23    let _but4 = LightButton::default().with_label("Light");
24    let mut but5 = MenuButton::default().with_label("Menu");
25    but5.add_choice("Hello|World|From|Rust");
26    let _but6 = ReturnButton::default().with_label("Return");
27    let mut chce = Choice::default();
28    chce.add_choice("Hello");
29    let _inp = Input::default();
30    let mut out = Output::default();
31    out.set_value("output");
32    col.end();
33    grp1.end();
34
35    let grp2 = Flex::default_fill().with_label("Tab2\t\t").row();
36    grp2.end();
37    tab.end();
38    tab.auto_layout();
39}
Source

pub fn row(self) -> Self

Set the type to a row

Examples found in repository?
examples/rounded_images.rs (line 56)
46fn main() {
47    let app = app::App::default().with_scheme(app::Scheme::Gleam);
48    app::background(0, 0, 0);
49    let image = image::SharedImage::load("screenshots/calc2.jpg")
50        .unwrap()
51        .as_rgb_image()
52        .unwrap();
53
54    let mut wind = window::Window::new(100, 100, 800, 400, "Hello from rust");
55    let row = group::Flex::default()
56        .row()
57        .with_size(800, 200)
58        .center_of_parent();
59    for i in 1..=4 {
60        let color_depth = enums::ColorDepth::from_u8(i).unwrap();
61        let image = image.convert(color_depth).unwrap();
62        RoundImageBox::new(100, image);
63    }
64    row.end();
65    wind.end();
66    wind.show();
67
68    app.run().unwrap();
69}
More examples
Hide additional examples
examples/closable_tab.rs (line 14)
11fn main() {
12    let app = app::App::default();
13    let mut win = window::Window::default().with_size(800, 600);
14    let row = group::Flex::default_fill().row();
15    let mut tabs = group::Tabs::default();
16    tabs.set_tab_align(enums::Align::Right);
17    tabs.handle_overflow(group::TabsOverflow::Compress);
18    // first tab
19    {
20        let mut col1 = group::Flex::default().with_label("\t\ttab1").column();
21        col1.set_when(When::Closed);
22        col1.set_callback(tab_close_cb);
23        // widgets
24        col1.end();
25    }
26    // end first tab
27
28    // second tab
29    {
30        let mut col2 = group::Flex::default().with_label("\t\ttab2").column();
31        col2.set_when(When::Closed);
32        col2.set_callback(tab_close_cb);
33        // widgets
34        col2.end();
35    }
36    // end second tab
37    tabs.end();
38    tabs.auto_layout();
39    row.end();
40    win.end();
41    win.show();
42    app.run().unwrap();
43}
examples/tabs.rs (line 15)
12fn draw_gallery() {
13    let mut tab = Tabs::default_fill();
14
15    let mut grp1 = Flex::default_fill().with_label("Tab1\t\t").row();
16    let mut col = Flex::default().column();
17    grp1.fixed(&col, 160);
18    col.set_pad(10);
19    col.set_margin(10);
20    let _but1 = Button::default().with_label("Button");
21    let _but2 = RoundButton::default().with_label("Round");
22    let _but3 = CheckButton::default().with_label("Check");
23    let _but4 = LightButton::default().with_label("Light");
24    let mut but5 = MenuButton::default().with_label("Menu");
25    but5.add_choice("Hello|World|From|Rust");
26    let _but6 = ReturnButton::default().with_label("Return");
27    let mut chce = Choice::default();
28    chce.add_choice("Hello");
29    let _inp = Input::default();
30    let mut out = Output::default();
31    out.set_value("output");
32    col.end();
33    grp1.end();
34
35    let grp2 = Flex::default_fill().with_label("Tab2\t\t").row();
36    grp2.end();
37    tab.end();
38    tab.auto_layout();
39}
examples/flex.rs (line 21)
17fn buttons_panel(parent: &mut group::Flex) {
18    frame::Frame::default();
19    let w = frame::Frame::default().with_label("Welcome to Flex Login");
20
21    let mut urow = group::Flex::default().row();
22    {
23        frame::Frame::default()
24            .with_label("Username:")
25            .with_align(enums::Align::Inside | enums::Align::Right);
26        let username = input::Input::default();
27
28        urow.fixed(&username, 180);
29        urow.end();
30    }
31
32    let mut prow = group::Flex::default().row();
33    {
34        frame::Frame::default()
35            .with_label("Password:")
36            .with_align(enums::Align::Inside | enums::Align::Right);
37        let password = input::Input::default();
38
39        prow.fixed(&password, 180);
40        prow.end();
41    }
42
43    let pad = frame::Frame::default();
44
45    let mut brow = group::Flex::default().row();
46    {
47        frame::Frame::default();
48        let reg = create_button("Register");
49        let login = create_button("Login");
50
51        brow.fixed(&reg, 80);
52        brow.fixed(&login, 80);
53        brow.end();
54    }
55
56    let b = frame::Frame::default();
57
58    frame::Frame::default();
59
60    parent.fixed(&w, 60);
61    parent.fixed(&urow, 30);
62    parent.fixed(&prow, 30);
63    parent.fixed(&pad, 1);
64    parent.fixed(&brow, 30);
65    parent.fixed(&b, 30);
66}
67
68fn middle_panel(parent: &mut group::Flex) {
69    frame::Frame::default();
70
71    let mut frame = frame::Frame::default().with_label("Image");
72    frame.set_frame(enums::FrameType::BorderBox);
73    frame.set_color(enums::Color::from_rgb(0, 200, 0));
74    let spacer = frame::Frame::default();
75
76    let mut bp = group::Flex::default().column();
77    buttons_panel(&mut bp);
78    bp.end();
79
80    frame::Frame::default();
81
82    parent.fixed(&frame, 200);
83    parent.fixed(&spacer, 10);
84    parent.fixed(&bp, 300);
85}
86
87fn main_panel(parent: &mut group::Flex) {
88    frame::Frame::default();
89
90    let mut mp = group::Flex::default().row();
91    middle_panel(&mut mp);
92    mp.end();
93
94    frame::Frame::default();
95
96    parent.fixed(&mp, 200);
97}
Source

pub fn recalc(&self)

Recalculate children’s coords and sizes

Source

pub fn layout(&self)

Recalculate children’s coords and sizes

Source

pub fn set_margin(&mut self, m: i32)

Set the margin

Examples found in repository?
examples/composite_widgets.rs (line 49)
42fn main() {
43    let app = app::App::default();
44    app::set_visible_focus(false);
45    let mut win = window::Window::default().with_size(500, 400);
46    win.make_resizable(true);
47    win.set_color(enums::Color::Black);
48    let mut col = group::Flex::default_fill().column();
49    col.set_margin(20);
50    col.set_pad(10);
51
52    for i in 0..3 {
53        let label = format!("Button {}", i + 1);
54        let mut but = MyButton::new(500, 100);
55        but.set_label(&label);
56        but.set_callback(move |_| println!("{label}"));
57    }
58
59    col.end();
60    win.end();
61    win.show();
62    app.run().unwrap();
63}
More examples
Hide additional examples
examples/tabs.rs (line 19)
12fn draw_gallery() {
13    let mut tab = Tabs::default_fill();
14
15    let mut grp1 = Flex::default_fill().with_label("Tab1\t\t").row();
16    let mut col = Flex::default().column();
17    grp1.fixed(&col, 160);
18    col.set_pad(10);
19    col.set_margin(10);
20    let _but1 = Button::default().with_label("Button");
21    let _but2 = RoundButton::default().with_label("Round");
22    let _but3 = CheckButton::default().with_label("Check");
23    let _but4 = LightButton::default().with_label("Light");
24    let mut but5 = MenuButton::default().with_label("Menu");
25    but5.add_choice("Hello|World|From|Rust");
26    let _but6 = ReturnButton::default().with_label("Return");
27    let mut chce = Choice::default();
28    chce.add_choice("Hello");
29    let _inp = Input::default();
30    let mut out = Output::default();
31    out.set_value("output");
32    col.end();
33    grp1.end();
34
35    let grp2 = Flex::default_fill().with_label("Tab2\t\t").row();
36    grp2.end();
37    tab.end();
38    tab.auto_layout();
39}
examples/frames.rs (line 30)
22fn main() {
23    let app = app::App::default();
24    let mut win = window::Window::default()
25        .with_size(1000, 800)
26        .with_label("Frames");
27    win.set_center_screen();
28
29    let mut col = group::Flex::default_fill().column();
30    col.set_margin(20);
31
32    let mut row = group::Flex::default();
33    col.fixed(&row, 75);
34    for i in 0..8 {
35        let _ = MyFrame::new(i);
36    }
37    row.end();
38    row.set_pad(10);
39
40    let mut row = group::Flex::default();
41    col.fixed(&row, 75);
42    for i in 8..17 {
43        let _ = MyFrame::new(i);
44    }
45    row.end();
46    row.set_pad(10);
47
48    let mut row = group::Flex::default();
49    col.fixed(&row, 75);
50    for i in 17..26 {
51        let _ = MyFrame::new(i);
52    }
53    row.end();
54    row.set_pad(10);
55
56    let mut row = group::Flex::default();
57    col.fixed(&row, 75);
58    for i in 26..35 {
59        let _ = MyFrame::new(i);
60    }
61    row.end();
62    row.set_pad(10);
63
64    let mut row = group::Flex::default();
65    col.fixed(&row, 75);
66    for i in 35..44 {
67        let _ = MyFrame::new(i);
68    }
69    row.end();
70    row.set_pad(10);
71
72    let mut row = group::Flex::default();
73    col.fixed(&row, 75);
74    for i in 44..53 {
75        let _ = MyFrame::new(i);
76    }
77    row.end();
78    row.set_pad(10);
79
80    col.end();
81    col.set_pad(30);
82
83    win.end();
84    win.show();
85    win.set_color(enums::Color::White);
86
87    app.run().unwrap();
88}
Source

pub fn margin(&self) -> i32

Get the margin

Source

pub fn set_pad(&mut self, p: i32)

Set the padding

Examples found in repository?
examples/composite_widgets.rs (line 50)
42fn main() {
43    let app = app::App::default();
44    app::set_visible_focus(false);
45    let mut win = window::Window::default().with_size(500, 400);
46    win.make_resizable(true);
47    win.set_color(enums::Color::Black);
48    let mut col = group::Flex::default_fill().column();
49    col.set_margin(20);
50    col.set_pad(10);
51
52    for i in 0..3 {
53        let label = format!("Button {}", i + 1);
54        let mut but = MyButton::new(500, 100);
55        but.set_label(&label);
56        but.set_callback(move |_| println!("{label}"));
57    }
58
59    col.end();
60    win.end();
61    win.show();
62    app.run().unwrap();
63}
More examples
Hide additional examples
examples/tabs.rs (line 18)
12fn draw_gallery() {
13    let mut tab = Tabs::default_fill();
14
15    let mut grp1 = Flex::default_fill().with_label("Tab1\t\t").row();
16    let mut col = Flex::default().column();
17    grp1.fixed(&col, 160);
18    col.set_pad(10);
19    col.set_margin(10);
20    let _but1 = Button::default().with_label("Button");
21    let _but2 = RoundButton::default().with_label("Round");
22    let _but3 = CheckButton::default().with_label("Check");
23    let _but4 = LightButton::default().with_label("Light");
24    let mut but5 = MenuButton::default().with_label("Menu");
25    but5.add_choice("Hello|World|From|Rust");
26    let _but6 = ReturnButton::default().with_label("Return");
27    let mut chce = Choice::default();
28    chce.add_choice("Hello");
29    let _inp = Input::default();
30    let mut out = Output::default();
31    out.set_value("output");
32    col.end();
33    grp1.end();
34
35    let grp2 = Flex::default_fill().with_label("Tab2\t\t").row();
36    grp2.end();
37    tab.end();
38    tab.auto_layout();
39}
examples/counter2.rs (line 14)
9fn main() -> Result<(), Box<dyn std::error::Error>> {
10    let app = app::App::default();
11    let mut wind = Window::default().with_size(160, 200).with_label("Counter");
12    let mut flex = Flex::default_fill().column();
13    flex.set_margins(30, 40, 30, 40);
14    flex.set_pad(10);
15    let mut but_inc = Button::default().with_label("+");
16    let mut frame = Frame::default().with_label("0");
17    let mut but_dec = Button::default().with_label("-");
18    flex.end();
19    wind.end();
20    wind.show();
21
22    let (s, r) = app::channel::<Message>();
23
24    but_inc.emit(s, Message::Increment);
25    but_dec.emit(s, Message::Decrement);
26
27    while app.wait() {
28        let label: i32 = frame.label().unwrap().parse()?;
29
30        if let Some(msg) = r.recv() {
31            match msg {
32                Message::Increment => frame.set_label(&(label + 1).to_string()),
33                Message::Decrement => frame.set_label(&(label - 1).to_string()),
34            }
35        }
36    }
37    Ok(())
38}
examples/editor.rs (line 262)
246fn main() {
247    let a = app::App::default().with_scheme(app::Scheme::Oxy);
248    app::get_system_colors();
249
250    let mut buf = text::TextBuffer::default();
251    buf.set_tab_distance(4);
252
253    let state = State::new(buf.clone());
254    app::GlobalState::new(state);
255
256    let mut w = window::Window::default()
257        .with_size(WIDTH, HEIGHT)
258        .with_label("Ted");
259    w.set_xclass("ted");
260    {
261        let mut col = group::Flex::default_fill().column();
262        col.set_pad(0);
263        let mut m = menu::SysMenuBar::default();
264        init_menu(&mut m);
265        let mut ed = text::TextEditor::default().with_id("ed");
266        ed.set_buffer(buf);
267        ed.set_linenumber_width(40);
268        ed.set_text_font(Font::Courier);
269        ed.set_when(When::Changed);
270        ed.set_callback(editor_cb);
271        handle_drag_drop(&mut ed);
272        w.resizable(&col);
273        col.fixed(&m, 30);
274        col.end();
275    }
276    w.end();
277    w.show();
278    w.set_callback(win_cb);
279    a.run().unwrap();
280}
examples/counter4.rs (line 46)
40fn main() -> Result<(), Box<dyn std::error::Error>> {
41    let app = app::App::default();
42    let counter = Counter::new(0);
43    let mut wind = Window::default().with_size(160, 200).with_label("Counter");
44    let mut flex = Flex::default_fill().column();
45    flex.set_margins(30, 40, 30, 40);
46    flex.set_pad(10);
47    let mut but_inc = Button::default().with_label("+");
48    let mut frame = Frame::default().with_label(&counter.value().to_string());
49    let mut but_dec = Button::default().with_label("-");
50    flex.end();
51    wind.end();
52    wind.show();
53
54    but_inc.set_callback({
55        let mut c = counter.clone();
56        move |_| c.increment()
57    });
58
59    but_dec.set_callback({
60        let mut c = counter.clone();
61        move |_| c.decrement()
62    });
63
64    frame.handle(move |f, ev| {
65        if ev == MyEvent::CHANGED.into() {
66            f.set_label(&counter.clone().value().to_string());
67            true
68        } else {
69            false
70        }
71    });
72
73    Ok(app.run()?)
74}
examples/defaults.rs (line 21)
3fn main() {
4    let app = app::App::default();
5    // global theming
6    app::background(55, 55, 55); // background color.
7    // For input/output and text widgets, use app::background2
8    app::background2(0, 0, 0);
9    app::foreground(255, 255, 255); // labels
10    app::set_font_size(16);
11    app::set_frame_type(FrameType::UpBox, FrameType::RFlatBox);
12    app::set_frame_type(FrameType::DownBox, FrameType::RFlatBox);
13    app::set_frame_border_radius_max(15); // set the roundness of the RFlatBox
14    app::set_font(Font::Helvetica, Font::Times);
15    app::set_visible_focus(false);
16
17    // regular widget code
18    let mut win = window::Window::default().with_size(400, 300);
19    let mut flex = group::Flex::default_fill().column();
20    flex.set_margins(100, 60, 100, 60);
21    flex.set_pad(10);
22    let mut btn1 = button::Button::default().with_label("Increment");
23    btn1.set_color(Color::Red.darker());
24    btn1.set_selection_color(Color::Red.darker().darker());
25    let mut out = frame::Frame::default().with_label("0");
26    out.set_color(Color::Green.darker());
27    let mut btn2 = button::Button::default().with_label("Decrement");
28    btn2.set_color(Color::Red.darker());
29    btn2.set_selection_color(Color::Red.darker().darker());
30    flex.end();
31    win.end();
32    win.show();
33
34    app.run().unwrap();
35}
Source

pub fn pad(&self) -> i32

Get the padding

Source

pub fn set_spacing(&mut self, p: i32)

Set the padding

Examples found in repository?
examples/threads_windows.rs (line 24)
17fn main() -> Result<(), Box<dyn std::error::Error>> {
18    let app = app::App::default();
19    let mut wind = Window::default().with_size(160, 200).with_label("Counter");
20    let mut col = Flex::default()
21        .with_size(120, 140)
22        .center_of(&wind)
23        .column();
24    col.set_spacing(10);
25    let mut but_inc = Button::default().with_label("+");
26    let mut frame = Frame::default().with_label("0");
27    let mut but_dec = Button::default().with_label("-");
28    col.end();
29    wind.end();
30    wind.show();
31
32    let mut msg_wind = Window::default().with_size(120, 100).with_label("Message");
33    let mut msgview = HelpView::default().with_size(120, 100);
34    msgview.set_align(Align::Center);
35    msg_wind.end();
36
37    let (s, r) = app::channel::<Message>();
38
39    but_inc.set_callback({
40        move |_| {
41            s.send(Message::Deactivate);
42            thread::spawn(move || {
43                thread::sleep(Duration::from_secs(1));
44                s.send(Message::Increment);
45                s.send(Message::Message("Incremented"));
46                s.send(Message::Activate);
47            });
48        }
49    });
50    but_dec.set_callback({
51        move |_| {
52            s.send(Message::Deactivate);
53            thread::spawn(move || {
54                thread::sleep(Duration::from_secs(1));
55                s.send(Message::Decrement);
56                s.send(Message::Message("Decremented"));
57                s.send(Message::Activate);
58            });
59        }
60    });
61
62    while app.wait() {
63        if let Some(msg) = r.recv() {
64            let label: i32 = frame.label().unwrap().parse()?;
65            match msg {
66                Message::Increment => frame.set_label(&(label + 1).to_string()),
67                Message::Decrement => frame.set_label(&(label - 1).to_string()),
68                Message::Activate => {
69                    but_inc.activate();
70                    but_dec.activate();
71                }
72                Message::Deactivate => {
73                    but_inc.deactivate();
74                    but_dec.deactivate();
75                }
76                Message::Message(s) => {
77                    msgview.set_value(s);
78                    msg_wind.show();
79                }
80            }
81        }
82    }
83    Ok(())
84}
Source

pub fn spacing(&self) -> i32

Get the padding

Source

pub fn set_margins(&mut self, left: i32, top: i32, right: i32, bottom: i32)

Set the margins

Examples found in repository?
examples/hello_flex.rs (line 7)
3fn main() {
4    let app = app::App::default();
5    let mut wind = Window::default().with_size(400, 300);
6    let mut col = Flex::default_fill().column();
7    col.set_margins(120, 80, 120, 80);
8    let mut frame = Frame::default();
9    let mut but = Button::default().with_label("Click me!");
10    col.fixed(&but, 40);
11    col.end();
12    wind.end();
13    wind.show();
14
15    but.set_callback(move |_| frame.set_label("Hello world"));
16
17    app.run().unwrap();
18}
More examples
Hide additional examples
examples/counter2.rs (line 13)
9fn main() -> Result<(), Box<dyn std::error::Error>> {
10    let app = app::App::default();
11    let mut wind = Window::default().with_size(160, 200).with_label("Counter");
12    let mut flex = Flex::default_fill().column();
13    flex.set_margins(30, 40, 30, 40);
14    flex.set_pad(10);
15    let mut but_inc = Button::default().with_label("+");
16    let mut frame = Frame::default().with_label("0");
17    let mut but_dec = Button::default().with_label("-");
18    flex.end();
19    wind.end();
20    wind.show();
21
22    let (s, r) = app::channel::<Message>();
23
24    but_inc.emit(s, Message::Increment);
25    but_dec.emit(s, Message::Decrement);
26
27    while app.wait() {
28        let label: i32 = frame.label().unwrap().parse()?;
29
30        if let Some(msg) = r.recv() {
31            match msg {
32                Message::Increment => frame.set_label(&(label + 1).to_string()),
33                Message::Decrement => frame.set_label(&(label - 1).to_string()),
34            }
35        }
36    }
37    Ok(())
38}
examples/counter4.rs (line 45)
40fn main() -> Result<(), Box<dyn std::error::Error>> {
41    let app = app::App::default();
42    let counter = Counter::new(0);
43    let mut wind = Window::default().with_size(160, 200).with_label("Counter");
44    let mut flex = Flex::default_fill().column();
45    flex.set_margins(30, 40, 30, 40);
46    flex.set_pad(10);
47    let mut but_inc = Button::default().with_label("+");
48    let mut frame = Frame::default().with_label(&counter.value().to_string());
49    let mut but_dec = Button::default().with_label("-");
50    flex.end();
51    wind.end();
52    wind.show();
53
54    but_inc.set_callback({
55        let mut c = counter.clone();
56        move |_| c.increment()
57    });
58
59    but_dec.set_callback({
60        let mut c = counter.clone();
61        move |_| c.decrement()
62    });
63
64    frame.handle(move |f, ev| {
65        if ev == MyEvent::CHANGED.into() {
66            f.set_label(&counter.clone().value().to_string());
67            true
68        } else {
69            false
70        }
71    });
72
73    Ok(app.run()?)
74}
examples/defaults.rs (line 20)
3fn main() {
4    let app = app::App::default();
5    // global theming
6    app::background(55, 55, 55); // background color.
7    // For input/output and text widgets, use app::background2
8    app::background2(0, 0, 0);
9    app::foreground(255, 255, 255); // labels
10    app::set_font_size(16);
11    app::set_frame_type(FrameType::UpBox, FrameType::RFlatBox);
12    app::set_frame_type(FrameType::DownBox, FrameType::RFlatBox);
13    app::set_frame_border_radius_max(15); // set the roundness of the RFlatBox
14    app::set_font(Font::Helvetica, Font::Times);
15    app::set_visible_focus(false);
16
17    // regular widget code
18    let mut win = window::Window::default().with_size(400, 300);
19    let mut flex = group::Flex::default_fill().column();
20    flex.set_margins(100, 60, 100, 60);
21    flex.set_pad(10);
22    let mut btn1 = button::Button::default().with_label("Increment");
23    btn1.set_color(Color::Red.darker());
24    btn1.set_selection_color(Color::Red.darker().darker());
25    let mut out = frame::Frame::default().with_label("0");
26    out.set_color(Color::Green.darker());
27    let mut btn2 = button::Button::default().with_label("Decrement");
28    btn2.set_color(Color::Red.darker());
29    btn2.set_selection_color(Color::Red.darker().darker());
30    flex.end();
31    win.end();
32    win.show();
33
34    app.run().unwrap();
35}
examples/counter.rs (line 21)
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}
Source

pub fn margins(&self) -> (i32, i32, i32, i32)

Get the margins -> returns (left, top, right, bottom)

Trait Implementations§

Source§

impl Clone for Flex

Source§

fn clone(&self) -> Flex

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Flex

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Flex

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl GroupExt for Flex

Source§

fn begin(&self)

Begins a group, used for widgets implementing the group trait
Source§

fn end(&self)

Ends a group, used for widgets implementing the group trait
Source§

fn clear(&mut self)

Clear a group from all widgets
Source§

fn children(&self) -> i32

Return the number of children in a group
Source§

fn child(&self, idx: i32) -> Option<Widget>

Return child widget by index
Source§

fn find<W: WidgetExt>(&self, widget: &W) -> i32

Find a widget within a group and return its index
Source§

fn add<W: WidgetExt>(&mut self, widget: &W)

Add a widget to a group
Source§

fn insert<W: WidgetExt>(&mut self, widget: &W, index: i32)

Insert a widget to a group at a certain index
Source§

fn remove<W: WidgetExt>(&mut self, widget: &W)

Remove a widget from a group, but does not delete it
Source§

fn remove_by_index(&mut self, idx: i32)

Remove a child widget by its index
Source§

fn resizable<W: WidgetExt>(&self, widget: &W)

The resizable widget defines both the resizing frame and the resizing behavior of the group and its children.
Source§

fn make_resizable(&mut self, val: bool)

Make the group itself resizable, should be called before the widget is shown
Source§

fn add_resizable<W: WidgetExt>(&mut self, widget: &W)

Adds a widget to the group and makes it the resizable widget
Source§

fn set_clip_children(&mut self, flag: bool)

Clips children outside the group boundaries
Source§

fn clip_children(&self) -> bool

Get whether clip_children is set
Source§

fn draw_child<W: WidgetExt>(&self, w: &mut W)

Draw a child widget, the call should be in a WidgetBase::draw method
Source§

fn update_child<W: WidgetExt>(&self, w: &mut W)

Update a child widget, the call should be in a WidgetBase::draw method
Source§

fn draw_outside_label<W: WidgetExt>(&self, w: &mut W)

Draw the outside label, the call should be in a WidgetBase::draw method
Source§

fn draw_children(&mut self)

Draw children, the call should be in a WidgetBase::draw method
Source§

fn init_sizes(&mut self)

Resets the internal array of widget sizes and positions
Source§

fn bounds(&self) -> Vec<(i32, i32, i32, i32)>

Get the bounds of all children widgets (left, upper, right, bottom)
Source§

unsafe fn as_group(&self) -> Group

Converts a widget implementing GroupExt into a Group widget Read more
Source§

impl IntoIterator for Flex

Source§

type Item = Widget

The type of the elements being iterated over.
Source§

type IntoIter = IntoIter<<Flex as IntoIterator>::Item>

Which kind of iterator are we turning this into?
Source§

fn into_iter(self) -> Self::IntoIter

Creates an iterator from a value. Read more
Source§

impl PartialEq for Flex

Source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl WidgetBase for Flex

Source§

fn delete(wid: Self)

Deletes widgets and their children.
Source§

unsafe fn from_widget_ptr(ptr: *mut Fl_Widget) -> Self

transforms a widget pointer to a Widget, for internal use Read more
Source§

unsafe fn from_widget<W: WidgetExt>(w: W) -> Self

Get a widget from base widget Read more
Source§

fn handle<F: FnMut(&mut Self, Event) -> bool + 'static>(&mut self, cb: F)

Set a custom handler, where events are managed manually, akin to Fl_Widget::handle(int). Handled or ignored events should return true, unhandled events should return false. takes the widget as a closure argument. The ability to handle an event might depend on handling other events, as explained here
Source§

fn draw<F: FnMut(&mut Self) + 'static>(&mut self, cb: F)

Set a custom draw method. takes the widget as a closure argument. macOS requires that WidgetBase::draw actually calls drawing functions
Source§

fn resize_callback<F: FnMut(&mut Self, i32, i32, i32, i32) + 'static>( &mut self, cb: F, )

Perform a callback on resize. Avoid resizing the parent or the same widget to avoid infinite recursion
Source§

unsafe fn assume_derived(&mut self)

Makes the widget derived Read more
Source§

fn from_dyn_widget<W: WidgetExt>(w: &W) -> Option<Self>

Cast a type-erased widget back to its original widget
Source§

fn from_dyn_widget_ptr(w: *mut Fl_Widget) -> Option<Self>

Cast a type-erased widget pointer back to its original widget
Source§

impl WidgetExt for Flex

Source§

fn set_label(&mut self, title: &str)

Sets the widget’s label. labels support special symbols preceded by an @ sign. and for the associated formatting.
Source§

fn unset_label(&mut self)

Unset a widget’s label
Source§

fn redraw(&mut self)

Redraws a widget, necessary for resizing and changing positions
Source§

fn show(&mut self)

Shows the widget
Source§

fn hide(&mut self)

Hides the widget
Source§

fn x(&self) -> i32

Returns the x coordinate of the widget
Source§

fn y(&self) -> i32

Returns the y coordinate of the widget
Source§

fn w(&self) -> i32

Returns the width of the widget
Source§

fn h(&self) -> i32

Returns the height of the widget
Source§

fn label(&self) -> Option<String>

Returns the label of the widget
Source§

fn measure_label(&self) -> (i32, i32)

Measures the label’s width and height
Source§

fn as_widget_ptr(&self) -> *mut Fl_Widget

transforms a widget to a base Fl_Widget, for internal use
Source§

fn activate(&mut self)

Activates the widget
Source§

fn deactivate(&mut self)

Deactivates the widget
Source§

fn redraw_label(&mut self)

Redraws the label of the widget
Source§

fn resize(&mut self, x: i32, y: i32, width: i32, height: i32)

Resizes and/or moves the widget, takes x, y, width and height
Source§

fn widget_resize(&mut self, x: i32, y: i32, width: i32, height: i32)

Does a simple resize ignoring class-specific resize functionality
Source§

fn tooltip(&self) -> Option<String>

Returns the tooltip text
Source§

fn set_tooltip(&mut self, txt: &str)

Sets the tooltip text
Source§

fn color(&self) -> Color

Returns the widget color
Source§

fn set_color(&mut self, color: Color)

Sets the widget’s color
Source§

fn label_color(&self) -> Color

Returns the widget label’s color
Source§

fn set_label_color(&mut self, color: Color)

Sets the widget label’s color
Source§

fn label_font(&self) -> Font

Returns the widget label’s font
Source§

fn set_label_font(&mut self, font: Font)

Sets the widget label’s font
Source§

fn label_size(&self) -> i32

Returns the widget label’s size
Source§

fn set_label_size(&mut self, sz: i32)

Sets the widget label’s size
Source§

fn label_type(&self) -> LabelType

Returns the widget label’s type
Source§

fn set_label_type(&mut self, typ: LabelType)

Sets the widget label’s type
Source§

fn frame(&self) -> FrameType

Returns the widget’s frame type
Source§

fn set_frame(&mut self, typ: FrameType)

Sets the widget’s frame type
Source§

fn changed(&self) -> bool

Returns whether the widget was changed
Source§

fn set_changed(&mut self)

Mark the widget as changed
Source§

fn clear_changed(&mut self)

Clears the changed status of the widget
Source§

fn align(&self) -> Align

Returns the alignment of the widget
Source§

fn set_align(&mut self, align: Align)

Sets the alignment of the widget
Source§

fn set_when(&mut self, trigger: When)

Sets the default callback trigger for a widget, equivalent to when()
Source§

fn when(&self) -> When

Return the callback trigger, equivalent to when()
Source§

fn parent(&self) -> Option<Group>

Returns the parent of the widget
Source§

fn selection_color(&self) -> Color

Gets the selection color of the widget
Source§

fn set_selection_color(&mut self, color: Color)

Sets the selection color of the widget
Source§

fn do_callback(&mut self)

Runs the already registered callback
Source§

fn window(&self) -> Option<Box<dyn WindowExt>>

Returns the direct window holding the widget
Source§

fn top_window(&self) -> Option<Box<dyn WindowExt>>

Returns the topmost window holding the widget
Source§

fn takes_events(&self) -> bool

Checks whether a widget is capable of taking events
Source§

fn take_focus(&mut self) -> Result<(), FltkError>

Make the widget take focus Read more
Source§

fn set_visible_focus(&mut self)

Set the widget to have visible focus
Source§

fn clear_visible_focus(&mut self)

Clear visible focus
Source§

fn visible_focus(&mut self, v: bool)

Set the visible focus using a flag
Source§

fn has_visible_focus(&self) -> bool

Return whether the widget has visible focus
Source§

fn has_focus(&self) -> bool

Return whether the widget has focus
Source§

fn was_deleted(&self) -> bool

Check if a widget was deleted
Source§

fn damage(&self) -> bool

Return whether the widget was damaged
Source§

fn set_damage(&mut self, flag: bool)

Signal the widget as damaged and it should be redrawn in the next event loop cycle
Source§

fn damage_type(&self) -> Damage

Return the damage mask
Source§

fn set_damage_type(&mut self, mask: Damage)

Signal the type of damage a widget received
Source§

fn set_damage_area(&mut self, mask: Damage, x: i32, y: i32, w: i32, h: i32)

Signal damage for an area inside the widget
Source§

fn clear_damage(&mut self)

Clear the damaged flag
Source§

fn as_window(&self) -> Option<Box<dyn WindowExt>>

Return the widget as a window if it’s a window
Source§

fn as_group(&self) -> Option<Group>

Return the widget as a group widget if it’s a group widget
Source§

fn inside<W: WidgetExt>(&self, wid: &W) -> bool

Checks whether the self widget is inside another widget
Source§

fn get_type<T: WidgetType>(&self) -> T

Returns the widget type when applicable
Source§

fn set_type<T: WidgetType>(&mut self, typ: T)

Sets the widget type
Source§

fn set_image<I: ImageExt>(&mut self, image: Option<I>)

Sets the image of the widget
Source§

fn set_image_scaled<I: ImageExt>(&mut self, image: Option<I>)

Sets the image of the widget scaled to the widget’s size
Source§

fn image(&self) -> Option<Box<dyn ImageExt>>

Gets the image associated with the widget
Source§

fn set_deimage<I: ImageExt>(&mut self, image: Option<I>)

Sets the deactivated image of the widget
Source§

fn set_deimage_scaled<I: ImageExt>(&mut self, image: Option<I>)

Sets the deactivated image of the widget scaled to the widget’s size
Source§

fn deimage(&self) -> Option<Box<dyn ImageExt>>

Gets the deactivated image associated with the widget
Source§

fn set_callback<F: FnMut(&mut Self) + 'static>(&mut self, cb: F)

Sets the callback when the widget is triggered (clicks for example) takes the widget as a closure argument
Source§

fn emit<T: 'static + Clone + Send + Sync>(&mut self, sender: Sender<T>, msg: T)

Emits a message on callback using a sender
Source§

unsafe fn as_widget<W: WidgetBase>(&self) -> W

Upcast a WidgetExt to some widget type Read more
Source§

fn visible(&self) -> bool

Returns whether a widget is visible
Source§

fn visible_r(&self) -> bool

Returns whether a widget or any of its parents are visible (recursively)
Source§

fn is_same<W: WidgetExt>(&self, other: &W) -> bool

Return whether two widgets object point to the same widget
Source§

fn active(&self) -> bool

Returns whether a widget is active
Source§

fn active_r(&self) -> bool

Returns whether a widget or any of its parents are active (recursively)
Source§

fn handle_event(&mut self, event: Event) -> bool

Handle a specific event
Source§

fn is_derived(&self) -> bool

Check whether a widget is derived
Source§

fn as_base_widget(&self) -> Widget
where Self: Sized,

Upcast a WidgetExt to a Widget
Source§

impl WidgetProps for Flex

Source§

fn with_pos(self, x: i32, y: i32) -> Self

Initialize to position x, y

Source§

fn with_size(self, width: i32, height: i32) -> Self

Initialize to size width, height

Source§

fn with_label(self, title: &str) -> Self

Initialize with a label

Source§

fn with_align(self, align: Align) -> Self

Initialize with alignment

Source§

fn with_type<T: WidgetType>(self, typ: T) -> Self

Initialize with type

Source§

fn below_of<W: WidgetExt>(self, wid: &W, padding: i32) -> Self

Initialize at bottom of another widget

Source§

fn above_of<W: WidgetExt>(self, wid: &W, padding: i32) -> Self

Initialize above of another widget

Source§

fn right_of<W: WidgetExt>(self, wid: &W, padding: i32) -> Self

Initialize right of another widget

Source§

fn left_of<W: WidgetExt>(self, wid: &W, padding: i32) -> Self

Initialize left of another widget

Source§

fn center_of<W: WidgetExt>(self, w: &W) -> Self

Initialize center of another widget

Source§

fn center_x<W: WidgetExt>(self, w: &W) -> Self

Initialize center of another widget on the x axis

Source§

fn center_y<W: WidgetExt>(self, w: &W) -> Self

Initialize center of another widget on the y axis

Source§

fn center_of_parent(self) -> Self

Initialize center of parent

Source§

fn size_of<W: WidgetExt>(self, w: &W) -> Self

Initialize to the size of another widget

Source§

fn size_of_parent(self) -> Self

Initialize to the size of the parent

Source§

impl Eq for Flex

Source§

impl Send for Flex

Available on non-crate feature single-threaded only.
Source§

impl Sync for Flex

Available on non-crate feature single-threaded only.

Auto Trait Implementations§

§

impl Freeze for Flex

§

impl RefUnwindSafe for Flex

§

impl Unpin for Flex

§

impl UnwindSafe for Flex

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<W> WidgetId<W> for W
where W: WidgetExt + Clone + Send + Sync + 'static,

Source§

fn set_id(&mut self, id: &str)

Set the widget’s Id
Source§

fn with_id(self, id: &str) -> W

Construct a widget with an Id