6th of June 2022 to 12th of June 2022

Slint UI Library

We're busy preparing for Embedded World 2022 in Nuremberg from 21st to 23rd of June. Stop by at booth 4-302 if you happen to be there!

We still landed the initial accessibility work we have been working on and got a contribution improving the TextInput and TextLabels and got our Live Preview working in the browser running VSCode and GitHub webIDE.

New Features

  • Live Preview in VSCode WebExtension(#1330)
    Live Preview in VSCode for the web

    Start working on a preview for the web extension in a tab

  • Add read-only property to TextInput, LineEdit, and TextEdit. Propagate horizontal-alignment property from TextInput to TextEdit and LineEdit (#1321)

    Also cursor is hidden in read only mode but focus is still enabled like Qt QLineEdit and QTextEdit

    Thank you to pubg-hacks for this pull request!

  • Basic accessibility support for Slint UIs (#1294)

    This PR adds support for tools like screen readers to Slint UIs. It rebases the slint-ui/accessibility branch on top of the master branch.

    *This should get us started, but accessibility support is an additional way to interact with UIs that is very different from the "graphical way" most users will interact with the UI. No single PR will "make a toolkit accessibility", this needs to be an ongoing effort!*

    This is what it does at this time (turn on sound to hear the screen reader;-):

    Screen reader in Slint (needs sound)

    The big picture for this PR is this:

    First some new accessible properties) are added to the Slint compiler so that UIs can provide the extra information needed.

    Then some of the pre-defined widgets get annotated with these accessible properties.

    Finally the information is provided to the OS accessibility support layer via Qt's accessibility code. Qt has the charm of handling the major desktop platforms. Other backend implementations can be added as needed.

    What does work?

    • Support for all desktop OSes via the Qt accessibility backend. Other targets are currently not supported.
    • Making elements accessible by assigning the accessible-role property to them. Note that you do not want to have all elements accessible as many are internal implementation details of individual widgets (== trees of elements). All widgets should be accessible of course.
    • Add accessible-label and accessible-description to elements to describe them to the accessibility layer. These are added to our widgets where sane default values can be set.
    • Add more accessible properties where those make sense * Implement support for reporting of values (incl. ranges) to the accessibility layer.
    • Report locations of all accessible widgets to the accessibility layer
    • Signalling of changes to the accessibility framework.
    • Works on Rust/C++ and interpreter.

    What is missing?

    • Accessible actions are not yet implemented, so right now this is limited to normal keyboard focus/shortcut actions.
    • Not all widgets we have are covered yet. Most notable is the text edit. There is no support for the edit actions, so this seemed of somewhat limited use at this time.
    • Relations between objects are not generated yet.
    • We do not report the full state of widgets yet.

    What should be done next?

    • Improve the widgets to be more keyboard friendly and to add accessible properties where that makes sense.
    • Implement different back-ends so that we do not have to rely on the presence of Qt.

    The most critical missing piece is of course that testing by real users is missing! This will most likely have some glaring problems I did not notice while testing as a seeing person.

    As usual: Feedback is very welcome in all possible forms.

Fixes

  • Fix panic about multiple mutable borrows with the software renderer (#1329)

    When using repeaters - like in the slide puzzle - and during renderer a component gets deleted, we call free_graphics_resources and try to free the dirty rectangle list in the partial renderer cache. At that point the cache is already mutably borrowed, which causes a panic.

    As remedy, apply the mutable borrow more fine grained and not right when calling render().

Janitor work

PRs: #1335

Statistics

83 patches were committed in 5 pull requests by 4 authors.

← Next : 13th of June 2022 to 19th of June 2022 | Previous : 30th of May 2022 to 5th of June 2022


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