May 13, 2024 by Slint Team

Slint 1.6 Released with Design Mode Improvements, Python Packages, and Enhanced Accessibility

We're pleased to announce the release of Slint 1.6, featuring improvements to interactive design mode, new Python packages, and enhanced accessibility.


🌟 Celebrating 15k GitHub Stars 🎉 🎊

We recently crossed the milestone of 15k GitHub Stars. In less than a year, the number of star gazers of the Slint GitHub repo have doubled!
THANK YOU for your continued support and help us build the Slint community.

Design Mode

We continue to improve the Design Mode in Live-Preview. Use drag and drop to create new layouts without code. The green drop zones are displayed to assist you with exact placement, for new and existing widgets.

Slint for Python Alpha Packages

Add Slint to your Python project without compilation, by installing our binary packages for Windows, macOS, and Linux:

pip install slint

Thanks to feedback from the community, we've also improved our API to load .slint files. The new IDE friendly loader object replaces the previous magic import:

import slint

# slint.loader will look in `sys.path` for `appwindow.slint`.
class App(slint.loader.appwindow.AppWindow):
    def __init__(self):
        super().__init__()
        self.some_string_property = "Hello World"

    # Subclasses can decorate methods to automatically associate them with Slint callbacks
    @slint.callback
    def request_increase_value(self):
        self.counter = self.counter + 1

app = App()
app.run()

We invite you to experiment with Slint for Python; we'd love to get your feedback to make it as pythonic and elegant as possible. For details how to try it out, check out our README.

This work is being funded by NLNet. We're very grateful for their support.

Fancy Text

Thanks to contributions from Noah Sweilem, the Text element now supports stroke properties to create fancy effects:

Text with a gradient-filled stroke
Text {
    text: "Hello";
    font-size: 64px;
    horizontal-alignment: center;
    stroke:
      @linear-gradient(45deg, red 0%, green 100%);
    stroke-width: 8px;
}

Accessibility Actions

We'd like Slint-based UI controls to support assistive technologies such as screen readers, so that users with different needs can use your applications. In this release, we added the ability for accessibility frameworks to trigger custom actions, such as incrementing the value of a spinbox or setting the value of a text input field. Use the new callbacks to react when users trigger these actions:

  • accessibilty-action-default
  • accessibilty-action-set-value
  • accessibility-action-increment
  • accessibilty-action-decrement
component MyCustomButton {

    accessible-role: button;
    // Behave as if the user clicked
    accessible-action-default => { root.handle-clicked(); }

    TouchArea { clicked => { root.handle-clicked(); }}

    // ...
}

Of course, Slint-provided widgets such as Button, SpinBox, and others, have pre-installed handlers for these callbacks.

We'd like to thank Arnold Loubriat and Laurent Montel for their contributions towards accessibility properties to more widgets.

Android Text Input

For Slint on Android, we've added out-of-the-box support for text selection handles as well as the edit context menu in text input fields.

Text selection handles with Slint on Android

Bug Fixes and Enhancements

This release includes several bug fixes and new APIs, some of which were contributed by our valued community:

  • Use hsv() and to-hsv() to convert colors to and from the HSV color space. (Thanks to Luke Jones)
  • Palette.color-scheme is a new read-write property to set dark/light model in the widget style.
  • In Rust, enable the raw-window-handle-06 feature to obtain the windowing system specific window and display handles via window_handle().
  • Use clear-focus() on focusable elements to remove keyboard focus.
  • Fixed color animations with transparency. (#5063, thanks to Mikhail Shabunin)
  • Android: Fixed support for Android 10 to 12 and Java 1.8, and added backend-android-activity-06 feature.
  • When the Skia renderer is enabled at compile time, it's now picked as the default at run-time.
  • Fixed insertion point of @children when it is not the last child. (#4935)
  • C++: Fixed the MapModel::reset function. ((#4968)
  • C++: Added include guards to the generated header file.
  • LSP: Fixed formatting of function declarations.
  • slint-viewer now properly reloads files saved with neovim. (#3641, thanks to Nathan Collins)

For a complete list of changes, check out the ChangeLog.

Upgrading to Slint v1.6

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 the GIT_TAG entry in CMakeLists.txt to v1.6.0 or release/1.6 for automatic tracking of 1.6.x releases.
  • Node.js developers: Run npm update slint-ui to bring your package.json up-to-date.
  • ESP-IDF developers: Run idf.py update-dependencies to bring your idf_component.yml up-to-date.

Conclusion

A shoutout to everyone who contributed, especially the contributors from the community. Slint 1.6 continues our series of incremental updates that add new features while maintaining backwards compatibility. We're excited to see the live-preview improvements, look forward to many Slint for Python downloads, and can't wait for the first Slint based Android apps.

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.

Comments


Slint is a declarative GUI toolkit to build native user interfaces for desktop and embedded applications written in Rust, C++, JavaScript, and Python. Find more information at https://slint.dev/ or check out the source code at https://github.com/slint-ui/slint