15th of August 2022 to 21st of August 2022

Slint UI Library

We've begun working on the low-level public API for a platform abstraction, to make it possible to embed Slint into MCU environments. These tend to be very customized to boards and use-cases, so we want to make it easy to drive your own super loop and with a few function calls delegate your UI to Slint.

Fixes

  • Add missing shortcuts for delete word forward and backwards (#1483)

    Fixes #1467

  • Workaround for issue #1461 (#1490)

    Some binding can't be express with the current data structures because they reference properties within inner elements within a component.

    The fix is a bit involved and the best is to have an error instead of a panic, for now.

Changes

  • Fix the image cache with rust generated code and debug builds (#1492)

    We use const for the embedded data, which doesn't guarantee a fixed location in memory.

    For the image cache when embedding (encoded) image data, we rely on a fixed address.

    I observed that in debug builds of the slide puzzle, the embedded data is not always reported to be at the same address, presumably due to inlining. This makes the theme switching a bit slower and the cache less efficient.

    This patch fixes that by using static instead of const, to guarantee a fixed location in memory.

    (This was not observed in release builds, but in theory it could happen there as well?)

  • swrenderer: Remove the DirtyRegion from the API (#1501)

    Instead, put the dirty buffer handling from the previous frame directly in the SoftwareRenderer

  • Skia: Cache the Skia image in the core image cache (#1487)

    Because re-generating the Skia image is slow and there is no point storing both the image buffer and the SkiaImage in the cache as it's basically the same information.

    This speeds up the switching to the berlin theme in the slide_puzzle CC #1445

  • separate text deletion code with move_mod (#1486)

    alternative to 49ea24

  • Make the property to element lowering a little less magic (#1484)

    Instead of automatically mapping property bindings if the initial property has a - infix, supply the list of all properties as a parameter.

  • Some API cleanups in SoftwareRenderer::render_by_line (#1505)
  • Invert and simplify Window and PlatformWindow ownership (#1500)

    This inverts the ownership model between the internal Window (sometimes dubbed runtime window) and the PlatformWindow impl.

    The objective is to reduce complexity, remove an intermediate Rc and make it easier to implement PlatformWindows.

    The old model was:

        Component -> Rc<WindowInner> -> Rc<dyn PlatformWindow>

    and the PlatformWindow impl has a Weak to itself and back.

    With the new model:

        Component -> Rc<dyn PlatformWindow> -> has slint::Window, which wraps WindowInner
  • Window: refactor the way the backend sets the size (#1498)
  • Add Window::dispatch_pointer_event and slint::PointerEvent to the public API (#1497)

    Also do some renaming in the MouseEvent.

  • Minor cleanups in the pico code (#1496)
  • MCU: port the PICO code to use the Backend trait directly (#1495)

    Backend will end up in the public API, and having a port to the current trait helps to see what the public API looks like.

    Note that what is lost in this port is the perf counter. It would be nice to find a way to have the perf counter in core, somehow.

  • Format C++ code, and enforce it in the CI (#1491)
  • Online editor: Cleanup TS setup (#1482)

    Reformat the code and config files, set up linting, update typescript version, set up TS to find all the modules, enable strict mode in TS, fix all issues reported by tsc in strict mode, have a npm script to run tsc --noemit as recommended by vite.

Statistics

59 patches committed in 17 pull requests by 4 authors.

← Next : 22nd of August 2022 to 28th of August 2022 | Previous : 8th of August 2022 to 14th of August 2022


Slint is a declarative GUI toolkit to build native user interfaces for desktop and embedded applications written in Rust, C++, or JavaScript. Find more information at https://slint.dev/ or check out the source code at https://github.com/slint-ui/slint