July 18, 2024 by Slint Team
Slint 1.7 Released with New Widgets, Multi-Window Support, and Live-Preview Redesign
Slint is a modern UI toolkit with its own domain-specific language (DSL) designed for creating responsive and intuitive user interfaces.
Date & Time Picker Popup Widgets
Use the new DatePickerPopup
and TimePickerPopup
widgets to let your users enter dates and times. These widgets adhere to the Material Design and are available cross-platform.
This work is being funded by NLNet. We're very grateful for their support.
Multi-Window Support
Now you can declare multiple components for export
to your application code, for use with multi-window applications:
import { StandardButton, Button } from "std-widgets.slint";
export component SettingsDialog inherits Dialog {
title: "Settings";
// ...
StandardButton { kind: ok; }
StandardButton { kind: cancel; }
}
export component MainWindow inherits Window {
callback show-settings();
// ...
Button {
text: "Show Settings";
clicked => { root.show-settings(); }
}
}
slint::include_modules!();
fn main() -> Result<(), slint::PlatformError> {
let main_window = MainWindow::new()?;
main_window.on_show_settings(|| {
let dialog = SettingsDialog::new().unwrap();
dialog.show().unwrap();
});
main_window.show();
slint::run_event_loop();
}
Live-Preview Redesign
Live-Preview has undergone an overhaul: We've realigned the toolbar, redesigned the component library, and added a brand new property editor. Take it for spin and let us know what you think.
Bug Fixes and Enhancements
This release includes several bug fixes and new APIs, some of which were contributed by valued community members:
- Fixed hiding windows on Wayland (#4225)
- LinuxKMS: Added support for software rendering and legacy framebuffers.
- Software renderer: Added
set_rendering_rotation()
to rotate the buffer by multiple of 90 degrees. - Skia renderer: Fixed dithering on gradients. (#5482, thanks to wkb)
- Added
resize-border-width
to Window. (Thanks to Luc Fauvel) - Added
char-wrap
variant to theTextWrap
enum. (#5381, thanks to Daniel Stuart) - Support for rotating text via
rotation-*
properties (only with FemtoVG, Skia, and Qt) - Fixed
ComboBox
'scurrent-value
not updating when changing model or current index. - C++: Added
LIBRARY_PATHS
option toslint_target_sources()
CMake function. - Rust: Added
Image::to_rgb8()/to_rgba8()/to_rgba8_premultiplied()
to obtain pixels for aslint::Image
- Rust: Added
Window::take_snapshot()
. - Rust: Various improvements to compilation times of generated code.
- Node.js: Added support for invoking functions declared in Slint.
- Updated to Winit 0.30, AccessKit 0.16.
For a complete list of changes, check out the ChangeLog.
Upgrading to Slint v1.7
To use the latest version, follow the instructions below for the programming language of your choice:
- Rust developers: Run
cargo update
to bring your application up-to-date. - C++ developers: If you're using
FetchContent
with CMake, update theGIT_TAG
entry inCMakeLists.txt
tov1.7.0
orrelease/1.7
for automatic tracking of 1.7.x releases. - Node.js developers: Run
npm update slint-ui
to bring yourpackage.json
up-to-date. - ESP-IDF developers: Run
idf.py update-dependencies
to bring youridf_component.yml
up-to-date.
Conclusion
A shoutout to everyone who contributed, especially the contributors from the community. Slint 1.7 continues our series of incremental updates that add new features while maintaining backwards compatibility.
If you're new to Slint, check out our Get Started section.
As always, we welcome your feedback, bug reports, and questions on our bug tracker, forum, and chat. Your input drives our continual improvement and innovation.
Slint is a Rust-based toolkit for creating reactive and fluent user interfaces across a range of targets, from embedded devices with limited resources to powerful mobile devices and desktop machines. Supporting Android, Windows, Mac, Linux, and bare-metal systems, Slint features an easy-to-learn domain-specific language (DSL) that compiles into native code, optimizing for the target device's capabilities. It facilitates collaboration between designers and developers on shared projects and supports business logic development in Rust, C++, JavaScript, or Python.