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.
Implement a property
delayon animations that will wait for the duration provided before the actual animation is triggered.
- Add insert to C++
Changes to the
- Parser: allow
.to access member after any expression (b078ff)
Before we would only allow
foowas an identifier. Now we also allow more complex expression such as
(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 puzzleexample for an example of the new syntax.
- Support for writing into the model with the
- 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;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.
- 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)
- Introduce the new LLR module (Low Level Representation) (53c3e6,
The main thing here is that the Component are in a different data structure depending on whether they are sub-component global component or repeated component
Then the properties are at the right place and there will be no more lookup in the base. The PropertyReference knows how to access which property via which element and such.
The idea is that it will be easier to lower from this representation than what we currently do in each language backend.
Move from structopt to clap 3 ( c02da1)
79 patches were committed by 4 authors.
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.