#builder-pattern #widgets #builder #ui #graphics

fltk-builder

为构建 FLTK UI 时启用构建模式提供扩展

1 个不稳定版本

0.1.0 2022年4月20日

#449 in GUI

MIT 许可证

39KB
870

fltk-builder

一个 crate,它允许使用 fltk-rs 以构建模式在 Rust 中构建 FLTK UI。

这包括

  • 带有前缀 with_ 的设置函数的构建模式友好版本
  • 一个全局映射,用于根据 ID 存储任何小部件,可以使用 with_id 函数分配,并使用 fltk_builder::get_widget_by_id 函数检索

用法

只需将以下内容添加到您的项目 Cargo.toml 文件中

[dependencies]
fltk = "1"
fltk-builder = "^0.1"

如果您不感兴趣于 ID 映射功能,可以通过禁用默认功能来关闭它

[dependencies]
fltk = "1"
fltk-builder = { version = "^0.1", default-features = false }

基于 fltk-rs 中的 hello_button 示例的应用程序示例

use fltk::{app, button::Button, frame::Frame, prelude::*, window::Window};
use fltk_builder::prelude::*;

fn main() {
    let mut app = fltk_builder::FltkBuilder::new(app::App::default()).window(
        Window::default()
            .with_size(400, 300)
            .widget(
                Frame::default()
                    .with_size(200, 100)
                    .center_of_parent()
                    .with_id("frame"),
            )
            .widget(Button::new(160, 210, 80, 40, "Click me").with_callback({
                // Retrieve the frame once and not every click for better performance
                let mut frame: Frame = fltk_builder::get_widget_by_id("frame").unwrap();
                move |_| frame.set_label("Hello World")
            })),
    );
    app.show();
    app.app()
        .run()
        .unwrap();
}

如果您不想使用 FLTKBuilder 结构,您仍然可以正常创建应用程序和窗口,只需使用构建模式函数即可。

use fltk::{app, button::Button, frame::Frame, prelude::*, window::Window};
use fltk_builder::prelude::*;

fn main() {
    let app = app::App::default();
    let mut wind = Window::default()
        .with_size(400, 300)
        .widget(
            Frame::default()
                .with_size(200, 100)
                .center_of_parent()
                .with_id("frame"),
        )
        .widget(Button::new(160, 210, 80, 40, "Click me").with_callback({
            // Retrieve the frame once and not every click for better performance
            let mut frame: Frame = fltk_builder::get_widget_by_id("frame").unwrap();
            move |_| frame.set_label("Hello World")
        }));
    wind.end();
    wind.show();
    app.run()
        .unwrap();
}

依赖项

~14MB
~305K SLoC