31st of January 2022 to 6th of February 2022
SixtyFPS UI Library
We had another busy week at SixtyFPS: We're going to make a new release release soon, so we did a lot of testing, polishing, documentation fixes and CI/CD improvements. This time we have more release work than usual: First off we will do a minor version number bump, so we also had to get some API incompatible changes merged that were not an option in the 0.1 series. Finally we plan to release the next version under a new name, so we were also very busy renaming crates, symbols, changing logos and such fun activities!
Of course we also need the website to also reflect the new name, so there was a lot of activity on that front, too.
We hope to be able to show all this work to the world this week!
Olivier wrote a nice little crate that parses your projects
Cargo.toml
file and generates nice documentation for all the
features from that. This was published to crates.io and then used in some
of our won crates. Go and check out
document-features!
Simon kept himself busy with rendering OpenGL scenes below the UI rendered by SixtyFPS. This is done using the new rendering synchronization API in the upcoming release.
New Features
-
Add rendering callbacks to
sixtyfps::Window
(8959ea)This API allows specifying a callback that will be invoked when setting up graphics (great for compiling shaders), before rendering a frame (but after the clearing of the surface background), after rendering a frame (before swapbuffers) and when releasing graphics resources.
-
Add compatibility feature to our public crates (38d7ac)
We want to be able to put existing functionality behind a feature flag while keeping the semver compatibility. This is only possible if that new feature flag is enabled by default, but this is not working if the users have done
default-features = false
in their Cargo.toml. So we add newcompat-x-y-z
feature that is mandatory to have and which is enforced with acompile_error!
Now, users that whishes to not have the default features must enable it explicitly. Say we want only x11 but not qt and wayland, the user will do:
sixtyfps = { version = "0.2", default-features = false, features = ["x11", "compat-0-2-0"] }
Now, imagine that in the version 0.2.3, we put the SVG support behind a feature flag. we will do this in out Cargo.toml:
[features] default = ["compat-0-2-0", "x11", "wayland"] compat-0-2-0 = ["compat-0-2-3", "svg"] compat-0-2-3 = [] svg = [...] ...
That way, the svg feature will be enabled by default for all the users who used previous version of SixtyFPS, and people that want to disable "svg" can just change from
compat-0-2-0
tocompat-0-2-3
in their Cargo.toml
Changes to the .60
language
-
PropertyAnimation: Make
iteration-count: n
run animations n times (b348d1)Side-effect: The code handles invalid inputs to duration/delay better.
Note that this replaces the undocumented
loop-count
property that actually ran animation n + 1 times.
Fixes
-
Make sure the README of cpp still contains a branch and tag that match
(ff3ef5)
The folder was renamed in master, but not in the release tag
Fixes #910
-
llr: Fix accessing members of ArrayIndex expressions (e4a41a)
We were not computing the type of a ArrayIndex expression correctly: It should be the element type of array, not the array itself
-
Rust generator: Fix compilation returning from void callbacks (0dba66)
If a callback returning voids ends in a statement that returns something, we would have an error in the rust generated code as we end our function with an expression that is not
()
-
Fix LSP semantic coloration bailing out sometimes (c5ef36)
Step to reproduce:
Xx := Window { TouchArea { clicked => { if (true) {} // note: because there is no else, the // semantic colouring is bailing out now } } // This is not highlighted TouchArea { clicked => {} } }
This is caused by a bug in
rowan::SyntaxToken::next_token
that doesn't visit the next token if it has an empty nodeUnfortunately, the LSP has no tests, so I couldn't add one easily
-
C++ interpreter: first crash when invoking native callback (f9c3e7)
This was a regression following the move to the edition 2021. The CallbackUserData was not capture in the lambda, its member were moved. So the destructor was called right after it was set. We must make sure we capture the whole CallbackUserData, so put the callback inside of it. This also reduce a bit of code duplication at the same time.
Test the callback invocation with stateful lambda
Demos and Examples
Janitor work
- Bump image and femtovg dependencies (378483)
-
Use
document-features
from crates.io (8273a3) -
Move
sixtyfps::ComponentHandle
andsixtyfps::Weak
intocorelib::api
(3eb3ff)This allows re-use of these types from node and the interpreter without depending on the public Rust API crate, which is a heavy dependency.
-
internal cleanup: move the public Rust Window API (3aa758)
Move it from
corelib::window::api to corelib::api
, where we're going to collect more types in the future that are meant to be re-exported as public API in the sixtyfps-rs and the interpreter crate.
More janitorial changes: 5bc1e7, ba8525, e5bf6e, 0d3582, cc568a, d22c8b
Statistics
56 patches were committed by 3 authors.
← Next : 7th of February 2022 to 20th of February 2022 | Previous : 24th of January 2022 to 30th 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