This week in SixtyFPS

1st of August to 8th of August 2021

Posted on August 9, 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

SixtyFPS UI Library

  • New Features
  • Changes to the .60 language
    • Allow parent element to contain constraints and still be able to set the height or width ( d2e2ee )
    • For embedded data, store the extension in the binary ( 1dab4c )

      This is useful for the detection of SVG

  • Documentation
    • A tutorial video was created and referenced in the documentation

      Olivier made a video explaining how to get started with the .60 language and how to embed the UI into C++ and Rust projects.

    • Link to the tutorial and license information in more places

      Changes: 8b4e41, 045356, 511bd6, 8f4caa

    • Building the doc no longer need nightly rust ( 603c5d )

      Rust 1.54 has the feature that allow us to include markdown files in the docs

  • Online editor now lets you pick the widget style ( 23e3c6 )
  • Rust client API
    • Provide sixtyfps::Window by reference in the Rust API ( 29f585 )

      This also removes Clone from the Window again, to avoid having to face the question: Does cloning a window duplicate it on the screen?

  • C++ language bindings
    • Make the new window() accessor in generated C++ code const ( b55931 )
    • Fix const-ness in generated C++ API ( e97ece )

      run(), show() and hide() should not be const, as well as the window() accessor.

    • Provide sixtyfps::Window by reference in the C++ interpreter API ( 9e4b06, 341387 )
  • Fixes
    • Fix regression of two-way binding on default geometry related properties causing binding loop ( 38cf15 )

      Commit 064c39 introduced the regression that if a two-way binding was set on a property that we'd also set a default geometry on, we'd end up applying that on the two-way binding, causing a binding loop.

      set_binding_if_not_set needs to only set the binding if... there's really none yet.

      Fixes #385

    • GL backend: Avoid run-time opengl errors with clipped zero width or height rectangles ( 25fac2 )

      If a Rectangle has a border-radius and clipping, we use an FBO to render the children and then use femtovg's stencil clipping. If the Rectangle has a zero width or height, we would end up trying to create a texture with such dimensions, which produces run-time opengl errors.

      We can detect this situation and avoid it early on. The same might happen for shadows.

      Fixes #377

    • Fix disappearing elements with implicit width/height ( 064c39 )

      When an element gets its width and height from the parent through an implicit 100% binding, those bindings were missing when an animation was pre-defined.

      The provided new-type wrapper offers a function to deal with replacing just binding expression, instead of the expression *and* the animation.

      Fixes #376

    • Fix cursor rendering with the Qt backend for non-ascii text ( 35541c )

      We calculate the cursor position as byte offset in the utf-8 encoded string, while Qt expects an index in the utf-16 encoded QString. When those differ, the cursor is rendered at the wrong location.

      Fixes #363

    • Fix the qt backend always rebuilding ( 58af76 )

      (because of one of the previous changes which renamed the file)

    • Fix panic when one of the two branch of a condition is Type::Void ( fa770e )

      Throw a proper compilation error. Note that there may be a bit too many error now when the two branch of a condition are not the same, but it's better than a panic

  • Janitor work

    Changes: 61af35, ff76aa, 9c1242, 4c7ecc, 04738a, 0d7391, 2606d6, 46edbd, ce976a, c74565, 24a202, 22c657, 60ef09, ce4727, 5cf23f, 3c9451, 04a2df, 57ed13, 89a93d, 601e93

Statistics

80 patches were committed by 4 authors.