OrbTk

Build and test MIT licensed crates.io docs.rs

The Orbital Widget Toolkit is a multi platform (G)UI toolkit for building scalable user interfaces with the programming language Rust. It's based on the Entity Component System Pattern and provides a functional-reactive like API.

The main goals of OrbTk are speed, ease of use, and being cross platform.

Calculator

Features:

Platforms

Planned features

Usage

To include OrbTk in your project, just add the dependency line to your Cargo.toml file:

text orbtk = "0.3.1-alpha1"

To use the latest development version of OrbTk, just add the dependency line to your Cargo.toml file:

text orbtk = { git = "https://github.com/redox-os/orbtk.git", branch = "develop" } You could also check out the OrbTk template project to start a new project: https://github.com/redox-os/orbtk-template.

Minimal Example

```rust use orbtk::prelude::*;

fn main() { Application::new() .window(|ctx| { Window::create() .title("OrbTk - minimal example") .position((100.0, 100.0)) .size(420.0, 730.0) .child(TextBlock::create().text("OrbTk").build(ctx)) .build(ctx) }) .run(); } ```

Base concepts

Widget

Widgets are the building blocks of user interfaces created with OrbTk like Buttons, TextBoxes, ListViews, Views (Screens) and Grid(Layout)s. Each widget does implement the Widget trait and is generated by the widget! macro. A widget consists of a name like Button and a list of its properties like text: String16, background: Brush or count: u32. After the build method of a widget is called, the widget exists as Entity (index) and its properties as Components in the Entity Component System. The struct of a widget serves itself as builder.

Base usage of the widget! macro:

rust widget!( MyWidget { background: Brush, count: u32, text: String16, ... } );

Widget Templates

Each widget has to implement the Template trait. A template is used to define the default property values of a widget and to define its structure. A Button e.g. consists of a Container widget, a StackPanel widget and a TextBlock widget.

Base usage of the Template trait:

rust impl Template for MyWidget { fn template(self, id: Entity, ctx: &mut BuildContext) -> Self { self.name("MyWidget") .background("#000000") .count(0) .text("Initial text") .child( Container::create() // Container references the same background as MyWidget .background(id) .child( TextBlock::create() // TextBlock references the same text as MyWidget .text(id) .build(ctx) ) .build(ctx) ) } }

Widget State

The state of a widget is used to update its inner state. Each state has to implement the State trait. The inner state of a widget is represented by the current values of its properties.

Base usage of the state trait:

```rust

[derive(Default, AsAny)]

struct MyWidgetState { ... }

impl State for MyWidgetState { fn update(&mut self, : &mut Registry, ctx: &mut Context<'>) { // update the widget ... } }

widget!( // Add MyState as state of MyWidget MyWidget { ... } ); ```

The Context parameter of the update method give you access the states widget (entity) and its properties (components). It also provides functions to access the children of the widget and functions to manipulate the widget tree.

Run Examples

You can find examples in the examples/ directory.

You can start the widgets example by executing the following command:

text cargo run --example widgets --release

OrbTk has also an integrated debug tools. If you want to show the bounds of all widgets (also non visual widgets) and want to see a debug print of the whole widget tree you could run the examples as follows:

text cargo run --example widgets --release --features debug

Run Examples with cargo-node

To run the examples on as browser, electron or cordova app you have to install

text cargo install -f cargo-node

Before you could use cargo node you have to install npm version 6.9.0. It is included in the Node.js version 10.16.3. You could download it from https://nodejs.org/dist/v10.16.3/.

Rust's cargo is presumed. All other dependencies of cargo node will be installed automatic.

Start examples

You can start the widgets example by executing the following command:

text cargo node run --target browser --example widgets

text cargo node run --target electron --example widgets

text cargo node run --target android --example widgets

Build and run documentation

You can build and run the latest documentation by executing the following command:

text cargo doc --no-deps --open

Sub Crates

Inspirations

Showcases

Contribution

If you want to help bring OrbTk further or you have feedback check our issues https://github.com/redox-os/orbtk/issues. You could also discuss with us about OrbTk on the Redox chat https://redox-os.org/community/ (join the OrbTk channel).

License

Licensed under MIT license (LICENSE).