10th of January 2022 to 16th of January 2022

SixtyFPS UI Library

The biggest chunk of work this week was internal to the compiler: The LLR (low level representation) branch has landed. By combining a set of steps that used to be done in binding-specific code for Rust and C++ separately into one common code base, we were able to clean up our implementation, speed up property look-ups and simplify the language specific code a lot. This helps us to maintain the SixtyFPS compiler and should also reduce the amount of work necessary to add new features going forward.

New Features

  • Implement delay property on PropertyAnimation (e6f971)

    Implement a property delay on animations that will wait for the duration provided before the actual animation is triggered.

  • Add insert to C++ VecModel (43830c)

Changes to the .60 language

  • Parser: allow . to access member after any expression (b078ff)

    Before we would only allow foo.bar where foo was an identifier. Now we also allow more complex expression such as "foo".bar or (123 + foo).bar (in the parser) In particular, this will allow to get the member of objects returned by functions or, in the future, part of arrays

  • Add support for array index expressions (7ad1ba)

    This is a squash of the changes in https://github.com/sixtyfpsui/sixtyfps/pull/605

    Check out the updated slide puzzle example for an example of the new syntax.

  • Support for writing into the model with the [] syntax (d3a943)

Fixes

  • Fluent style: Fix LineEdit layout (1ba3e7)

    The LineEditInner has good default, no need to overwrite them

    This fixes the placeholder text in the todo demo going over the the button

  • Add row data tracking to Rust sixtyfps::Model (480c7c)

    Any row additional/removal marks the tracked row data as dirty. This catches someprop: some_mode[42]; being marked as dirty when a row before 42 is inserted/removed (which makes sense). It'll also mark it as dirty when a row after that is added/removed, but that keeps the code simple for now.

  • Re-evaluate bindings when data in models accessed via index expressions change (360a3c)

    Call the new track_row_data_changes function in the model before retrieving the data.

  • Fix wasm build when fontdb has file system features enabled (c14c28)

    That adds visibility to additional fontdb::Source variants, which however are not reachable for us.

    cc #826

Documentation

  • Link to the sixtyfps interpreter crate from the Rust API crate (6acfa5)

    Our web site and READMEs direct to our Rust API crate, which makes sense as it provides fundamental traits and types. However as pointed out in #811we should advertise the existence of the interpreter API.

    Ideally we'd link to the crate documentation that

    (1) perfect matches the version number (2) uses sixtyfps.io for our built docs and docs.rs for the published crates

    I could not find a way to do this (not without making the crate a dependency and adding features), so this patch is a compromise that I've seen used in other crates.

  • Small grammar fixes in the docs (eee506)

Internals

Janitor work

Move from structopt to clap 3 ( c02da1)

Small cleanups und such were done in changes: 7bba5c, d130f4

Statistics

79 patches were committed by 4 authors.

Outlook

This week we will work towards having a 0.1.6 release. Afterwards it will get exciting as we will rename the library - and take the opportunity to do a 0.2.0 release at the same time with some few incompatible changes.

← Next : 17th of January 2022 to 23rd of January 2022 | Previous : 3rd of January 2022 to 9th of January 2022


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