43 个不稳定版本

0.21.0 2024 年 5 月 12 日
0.20.0 2023 年 4 月 30 日
0.19.1 2022 年 12 月 23 日
0.19.0 2022 年 10 月 31 日
0.1.0 2019 年 7 月 28 日

#297GUI


用于 caldera

MIT 许可证

720KB
16K SLoC

Basalt 是一个用于构建桌面应用程序或为其他应用程序提供 UI 的窗口/UI 框架。在后台使用 vulkano,这是一个围绕 Vulkan 的安全 Rust 包装器。Basalt 提供窗口创建、高级输入处理以及 UI 本身。UI 基于Bin 的概念。Bin 可以有边框、背景和文本,是构建任何 UI 小部件/元素的基本元素。目前提供的组件/元素数量有限。

该项目仍在积极开发中,是我业余时间工作的成果。存在一些问题,但不会阻止您创建一个完整的应用程序!

use basalt::input::MouseButton;
use basalt::interface::{BinPosition, BinStyle, Color};
use basalt::render::Renderer;
use basalt::window::WindowOptions;
use basalt::{Basalt, BasaltOptions};

fn main() {
    Basalt::initialize(BasaltOptions::default(), move |basalt_res| {
        let basalt = basalt_res.unwrap();

        let window = basalt
            .window_manager_ref()
            .create(WindowOptions {
                title: String::from("app"),
                inner_size: Some([400; 2]),
                ..WindowOptions::default()
            })
            .unwrap();

        let background = window.new_bin();

        background
            .style_update(BinStyle {
                pos_from_t: Some(0.0),
                pos_from_b: Some(0.0),
                pos_from_l: Some(0.0),
                pos_from_r: Some(0.0),
                back_color: Some(Color::shex("f0f0f0")),
                ..BinStyle::default()
            })
            .expect_valid();

        let button = window.new_bin();
        background.add_child(button.clone());

        button
            .style_update(BinStyle {
                position: Some(BinPosition::Parent),
                pos_from_t: Some(75.0),
                pos_from_l: Some(75.0),
                width: Some(75.0),
                height: Some(32.0),
                back_color: Some(Color::shex("c0c0c0")),
                border_size_t: Some(1.0),
                border_size_b: Some(1.0),
                border_size_l: Some(1.0),
                border_size_r: Some(1.0),
                border_color_t: Some(Color::shex("707070")),
                border_color_b: Some(Color::shex("707070")),
                border_color_l: Some(Color::shex("707070")),
                border_color_r: Some(Color::shex("707070")),
                text: String::from("Button"),
                text_height: Some(16.0),
                pad_t: Some(7.0),
                pad_l: Some(8.0),
                text_color: Some(Color::shex("303030")),
                ..BinStyle::default()
            })
            .expect_valid();

        button.on_press(MouseButton::Left, move |_, window, local| {
            println!("{:?} {:?}", window, local);
            Default::default()
        });

        Renderer::new(window)
            .unwrap()
            .with_interface_only()
            .run()
            .unwrap();

        basalt.exit();
    });
}

依赖关系

~55–74MB
~1.5M SLoC