This week in SixtyFPS

4th of October to 10th of October 2021

Posted on October 11, 2021

SixtyFPS is a toolkit to efficiently develop fluid graphical user interfaces for any display: embedded devices and desktop applications. We support multiple programming languages, such as Rust, C++, and JavaScript. Find more information at https://sixtyfps.io/ or go straight to github at https://github.com/sixtyfpsui/sixtyfps

Releases / Blog Posts

SixtyFPS UI Library

  • New Features
    • TouchArea: add the pointer-event callback ( 2716e4 )

      ... instead of pressed-changed

      This allows to see what mouse button was pressed.

      Closes #535

    • Enable support for gzipped SVG images ( 7aa654 )
    • Add AboutSixtyFPS element ( 4a26fa )
    • Allow normal elements to be in the Dialog's button row with dialog-button-role ( ae3e1b )
    • Add support for embedding data in generated C++ code ( c91a38 )

      This allows compiling with SIXTYFPS_EMBED_RESOURCES=true and images/fonts are embedded as inline variables.

  • Changes to the .60 language
    • Show an error when not calling a callback ( 80d7b2 )

      While before it was silently ignored or caused error in the generated code.

      Fixes #542

  • Fixes
    • Visit globals when finding usages of structs ( 72d556 )

      Otherwise some used struct might not be found, and they can cause compilation failure in the generated C++ or Rust code

      Fixes #549

    • Fix granularity of run-time borrows in GL backend window handling ( e987a4 )

      When processing window specific events, or generally when accessing the ALL_WINDOWS refcell, keep the time for borrow to an absolute miniumum. That way any subsequent method calls may further acquire the refcell.

      This patch re-organizes the entire deeply nested window event handling in a function with slightly less indentation.

      Fixes a panic when calling hide on a Window from within a callback handler.

      Fixes #539

    • Fix the middle mouse button with Qt ( b0c87c )
    • Fix extra '}' when doing a debug() with an enum. ( 85772d )

      The code was copy-pasted from the code that output the structs

    • Bound Text contents width ( f916ca )

      The contents of a Text would wander to the left with center and right alignment because some size calculations don't take the maximum available width into account.

    • Put filename in quote in import errors ( b99ff1 )

      So that the debug_assert! that fires when a error message ends with a period does not crash the LSP when typing an incomplete filename that ends with a '.'

    • Fix materialized property being wrongly re-initilized when used within the same Element ( cc0d5e )

      Because the bindings field is taken in order not to keep the Element borrowed.

      Fixes original report from #553

    • Fix panic in the interpreter if there are properties that are aliased to struct ( 7939d8 )
    • Fix standard button OK text ( 7102f9 )
    • Fix rendering of push buttons with QStyle on macOS ( 6dce5a )

      The button bevel was rendered upside down, which happens due to some weird double y-axis inversion, which goes away when passing the QWidget pointer to the style. When using the Qt backend, we can do that.

    • Fix embedded window icon with the Qt backend ( db10bf )

      Also add a window icon to the gallery

    • Fix sixtyfps-build always forcing a rebuild when a builtin image is include ( 106f1b )

      We can't call return-if-changed with "builtin:" URL, otherwise cargo thinks the build script always need to be re-run

      Fix the gallery example always being rebuilt because it uses AboutSixtyFPS

    • Qt style: Improve default layout spacing on macOS ( 4c6c82 )

      When the PM_LayoutHorizontalSpacing pixel metric is negative, we're supposed to call layoutSpacing() on the style. Until we have a detailed overview over the controls, a default spacing is better than -1 :-)

    • Qt style: Only show icons in standard buttons if the style permits ( d43e0a )
    • Native style: properly initialize the layout padding ( aa05e9 )
    • Fix panic with GL backend when using non-existent font families ( 30e79d )
    • Further speed up font handling in the GL backend ( 0e8efe )

      Use the new fontdb API to mmap fonts from disk and avoid making copies of embedded application fonts.

    • Fix ListView not always making the window to be redrawn when a model change ( 8150bb )

      Example: expending or collapsing the cargo-ui dependency tree after scrolling.

    • Improve error message for parse errors ( 521bf1 )

      print the literal token symbol instead of the internal token name

    • Document the current-index property of the TabWidget ( 98e1bb )
    • viewer: Prettify help output ( d79894 )
  • Examples & Demos
    • Added a bash example that shows how to display system information using sixtyfps-viewer Screenshot of sysinfo example on macos
  • Janitor work

    Changes: 94f55b, 2983ae

Applications

News about applications built with SixtyFPS

Screenshot of cargo ui

Cargo UI

  • Add button to remove or upgrade dependencies in the dependency tree ( 0e2065 )
  • Show outdated dependency in red ( 9e17ce )
  • Simplification of the worker thread loop ( 6b3758 8a2950 )

    Follow the instruction from https://rust-lang.github.io/async-book/06_multiple_futures/03_select.html#concurrent-tasks-in-a-select-loop-with-fuse-and-futuresunordered

  • When we are not in a workspace, it all should behave as if the only package was selected ( c5b0b1 )
  • Enable wayland by default ( 3c2e13 )
  • Use the rust logo as the window icon ( b6e6a4 )
  • Add an "About" tab ( b68215 )

Contributions in 3rd party projects

Contributions submitted to third-party projects.

fontdb

  • Add the ability to share font data with the application (PR #19)

    This adds a function that will convert font data to an Arc<dyn AsRef<[u8]> + Send + Sync> that's returned to the application.

    If the face is backed by a file on disk, then it will be mmapped.

    The load_font_source function allows suppling a pre-constructed `Source` to the fontdb. In combination with the new Source::Binary(Arc<dyn AsRef<[u8]> + Sync + Send>) variant this allow sharing application created font data with the fontdb.

Statistics

75 patches were committed by 5 authors.