Backer
A library for straight-forward UI layout.
Dependency free & framework-agnostic. Backer can be used in an index-based layout approach or with inline drawing code.
This library only implements layout & would be most useful along with a GUI library that can do GUI things (like macroquad or egui).
Features ✨
- Declarative API: The code should look like the structure it defines
- Minimal interface: No confusing overloads or magic, cascading effects
- Intuitive constraints: Backer adheres to & smoothly resolves size constraints with an advanced algorithm
- Performant: Layout can be comfortably recalculated every frame
- Easy integration & compatibility: Backer should work with just about any UI library with a bit of glue - so it isn't really fine-tuned for any specific UI solution.
This project intends to be a flexible layout tool & not much else.
Preview
Check out the demo site: a mock page showcasing layout capabilities in a realistic interface. Built with egui!
Backer relies on simple rules that can compose to create complex, flexible layouts.
// #1
row_spaced
.pad
// #2
column_spaced
.pad
// #3 & #4
column_spaced
.pad
Quick Start
1. Create a Layout struct with your layout function.
use Layout;
use Node;
let layout = new;
2. Combine nodes to define your layout
3. Implement a draw node
For reuse, you can construct your drawable in a function
4. Run your layout
// UI libraries generally will expose methods to get the available screen size
// In a real implementation this should use the real screen size!
let available_area = Area ;
let mut my_state = new;
let layout = new;
// Perform layout & draw all of your drawable nodes.
layout.draw;
Status
The crate is currently usable but is very new! Breaking changes may be relatively frequent as the crate matures.
Contributions are always welcome 🤗