An open API service indexing awesome lists of open source software.

https://github.com/zabackary/vexide-slint


https://github.com/zabackary/vexide-slint

Last synced: over 1 year ago
JSON representation

Awesome Lists containing this project

README

          

# Slint for vexide

> [!WARNING]
>
> This repo has been moved to the `vexide` org.

This crate exists to allow for the use of Slint-based UIs in [vexide]. It
provides an implementation of the Slint `Platform` trait that uses the V5 brain
to render the UI.

[vexide]: https://vexide.dev

## Usage

To use this crate, add it to your `Cargo.toml`:

```toml
[dependencies]
slint-vexide = "0.1.0"
```

Then, you must call `slint_vexide::initialize_slint_platform()` before creating
and running your Slint widget. This will set up Slint for software-rendering
your UI on the brain's display.

# Example

```rust
// Include the modules generated by Slint for your UI files.
// You will need to configure your `build.rs` to do this; see below.
slint::include_modules!();

#[vexide::main]
async fn main(peripherals: vexide::prelude::Peripherals) {
let robot = Robot {
// ...
};

// Since running the Slint UI is a blocking operation, we need to spawn the
// competition task as a separate task that will run concurrently.
// The Slint runtime internally polls all spawned futures.
vexide::task::spawn(robot.compete()).detach();

// Initialize the Slint platform with the V5 display-backed implementation.
vexide_slint::initialize_slint_platform(peripherals.display);
// Create and run the application. For more information on this, see the
// Slint documentation.
MyApplication::new()
.expect("Failed to create application")
.run()
.expect("Failed to run application");
// Since MyApplication::run() could return if the application is closed
// programmatically, we need to convince the compiler that the return type
// is `!` (never).
vexide::program::exit();
}
```

You'll need to compile your UI code separately from your main application code
using a custom build script. Add the `slint-build` crate to your `Cargo.toml`:

```toml
[build-dependencies]
slint-build = "0.1.0"
```

Then, create a `build.rs` file in your project root with the following content:

```rust
fn main() {
// Compile the Slint UI file with the appropriate configuration.
slint_build::compile_with_config(
"ui/YourFile.slint", // Path to your Slint UI file.
slint_build::CompilerConfiguration::new()
// Make sure to enable this configuration flag.
.embed_resources(slint_build::EmbedResourcesKind::EmbedForSoftwareRenderer)
// Optionally, you can specify a style to use for the UI.
// Check the Slint documentation for more information.
.with_style("style-name".into()),
)
.expect("Slint build failed");
}
```