#vulkan #graphics #gui #framework #interface

nightly basalt

A window/ui framework built upon vulkan

28 releases

Uses old Rust 2015

0.10.0 May 29, 2021
0.9.0 Feb 1, 2021
0.8.1 Jun 19, 2020
0.6.1 Nov 30, 2019
0.1.0 Jul 28, 2019

#80 in GUI

Download history 4/week @ 2021-02-24 5/week @ 2021-03-03 2/week @ 2021-03-10 1/week @ 2021-03-17 78/week @ 2021-03-24 29/week @ 2021-03-31 29/week @ 2021-04-07 44/week @ 2021-04-14 42/week @ 2021-04-21 6/week @ 2021-04-28 2/week @ 2021-05-05 29/week @ 2021-05-12 3/week @ 2021-05-19 17/week @ 2021-05-26 6/week @ 2021-06-02 33/week @ 2021-06-09

90 downloads per month
Used in caldera

MIT license

320KB
11K 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

~52MB
~1M SLoC