boing

crates.io docs MPL 2.0 licensed

A safe, lightweight wrapper over libui-ng-sys.

Background

libui is a C library that provides a neutral interface to native GUI technologies (e.g., windows, widgets) on major OSes. libui-ng is the "next generation" of libui, developed and maintained separately. libui-ng-sys provides Rust bindings to libui-ng, and boing is a safe yet fairly unopinionated layer on top of libui-ng-sys.

Currently, boing only links with libui-ng—not the original libui. However, libui-ng-sys may be updated in the future to support a libui feature flag, in which case it should be trivial to update boing as well.

Features

Lightweight

boing allocates UI control data in a set of typed bump allocators—each a single heap allocation, reallocated as necessary and freed at the end of Ui::run. This reduces the number of allocations performed, saving time in the process.

Pitfalls

Design

See DESIGN.md for an explanation of how boing was designed.

Project Progress

| Feature | Docs? | Impl? | | ------------- | ----- | ----- | | Area | ☐ | ☐ | | UniBox | ☐ | ☑ | | BiBox | ☐ | ☐ | | Button | ☑ | ☑ | | Checkbox | ☑ | ☑ | | Combobox | ☐ | ☐ | | Grid | ☐ | ☐ | | Group | ☐ | ☑ | | Image | ☐ | ☑ | | Label | ☐ | ☑ | | Menu | ☐ | ☑ | | MenuItem | ☐ | ☐ | | ProgressBar | ☐ | ☐ | | Slider | ☐ | ☐ | | Spinbox | ☐ | ☐ | | Tab | ☐ | ☑ | | Table | ☐ | ☐ | | Window | ☐ | ☑ |