Skip to content
This repository has been archived by the owner on Mar 2, 2025. It is now read-only.

zabackary/vexide-slint

Repository files navigation

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.

Usage

To use this crate, add it to your Cargo.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

// 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:

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

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

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");
}

Releases

No releases published

Packages

No packages published

Languages