#vulkan #graphics #gui #framework #interface

basalt

A window/ui framework built upon vulkan

35 releases (15 breaking)

Uses new Rust 2021

0.15.0 Mar 22, 2022
0.13.0 Dec 7, 2021
0.12.0 Oct 4, 2021
0.11.2 Jul 20, 2021
0.1.0 Jul 28, 2019

#87 in GUI

Download history 106/week @ 2022-03-14 128/week @ 2022-03-21 13/week @ 2022-03-28 12/week @ 2022-04-04 5/week @ 2022-04-11 4/week @ 2022-04-18 78/week @ 2022-04-25 251/week @ 2022-05-02 43/week @ 2022-05-09 600/week @ 2022-05-16 177/week @ 2022-05-23 260/week @ 2022-05-30 143/week @ 2022-06-06 3/week @ 2022-06-13 6/week @ 2022-06-20 7/week @ 2022-06-27

231 downloads per month
Used in caldera

MIT license

380KB
13K SLoC

Basalt is a window/ui framework for building desktop applications or providing a ui a top other applications. In the backend vulkano which is a safe rust wrapper around vulkan. Basalt provides window creation, advance input handling, and along with the ui itself. The UI is based on the idea of a Bin. A Bin can have borders, backgrounds, and text and is the the fundamental element for building any ui widget/element. Currently the amount of provided widgets/elements is limited.

The project is very much a work in progress and is what I work on the side. Some issues exists, but nothing preventing you from creating a full-fledged app!

extern crate basalt;

use basalt::{
	input::MouseButton,
	interface::bin::{self, BinPosition, BinStyle},
	Basalt,
};
use std::sync::Arc;

fn main() {
	Basalt::initialize(
		basalt::Options::default()
			.ignore_dpi(true)
			.window_size(300, 300)
			.title("Basalt")
			.app_loop(),
		Box::new(move |basalt_res| {
			let basalt = basalt_res.unwrap();

			let background = basalt.interface_ref().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(bin::Color::srgb_hex("f0f0f0")),
				..BinStyle::default()
			});

			let button = basalt.interface_ref().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(30.0),
				back_color: Some(bin::Color::srgb_hex("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(bin::Color::srgb_hex("707070")),
				border_color_b: Some(bin::Color::srgb_hex("707070")),
				border_color_l: Some(bin::Color::srgb_hex("707070")),
				border_color_r: Some(bin::Color::srgb_hex("707070")),
				text: String::from("Button"),
				text_height: Some(14.0),
				pad_t: Some(10.0),
				pad_l: Some(10.0),
				text_color: Some(bin::Color::srgb_hex("303030")),
				..BinStyle::default()
			});

			button.on_mouse_press(
				MouseButton::Left,
				Arc::new(move |_button, event_data| {
					println!("{:?}", event_data);
				}),
			);

			basalt.wait_for_exit().unwrap();
		}),
	);
}

Dependencies

~67MB
~1.5M SLoC