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 onPropertyAnimation
(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
wherefoo
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
- Introduce the new LLR module (Low Level Representation) (53c3e6,
9f43b5,
f23b78,
5f97a3,
66d07e,
bfa344,
eb5081,
c148dd,
f843cb,
902f46,
cc8ffe,
c23d15,
128895,
700e89,
ab584d,
5ed277,
6e2f55,
7d134a,
0ea844,
1986cf,
44297b,
35446e,
31471f,
933e58,
6a8261,
ad13f2,
8b15fc,
07ea17,
9e61d4,
d1298a,
a11714,
2d31ec,
50ff83,
24b010,
c397c4,
d395e9)
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.
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++, JavaScript, and Python. Find more information at https://slint.dev/ or check out the source code at https://github.com/slint-ui/slint