29th of August 2022 to 4th of September 2022

Slint UI Library

Preparing a release

We intend to make the 0.2.6 release soon. The release adds quite a lot of new API and we need help with the review. See issue #1502. In particular this add the whole slint::platform module use for the MCU support.

Feel free to comment on the issue or on our Mattermost chat. We will also hold an API review meeting on the 6st of September at 10:00 CEST (Berlin time) on Mattermost. (Anyone welcome)

New features

  • Move the built-in defmt debug logging to the platform trait (#1583)

    This way we don't have to add defmt, esp32-println and others as features to corelib and the slint API crate (which would also expose them as public dependencies), but instead this can be delegated to the Platform trait.

  • Polish of the rotation feature (#1561)

    - Add a check that this applies to Image element without children only - Default the origin to the center of the Image - Add docs and test

    cc: #1481

  • Implement std::fmt::Write for SharedString and add a format! macro (#1556)

Micro controller support

  • Improve MCU documentation (#1585)
  • Allow to run the software backend without the femtovg backend (#1581)
  • Support for the esp32-s2-kaluga-1 board (#1579) Slint on Kaluga board

    As you can see in the picture, there seems to be some problem to position images, for some reason. I have a suspicion that it is because of some bad floating point computation somewhere, with that architecture..

  • API cleanups (#1554, #1551, #1553, #1555, #1573, #1577, #1566, #1560)
    • Replace PlatformWindow with WindowAdapter.
    • Replace create_window with create_window_adapter.
    • Replace remaining Platform Abstraction to plain Platform.
    • Rename set_platform_abstraction to set_platform and PlatformAbstraction to Platform.
    • swrenderer: Move the DirtyTracking enum into a const generic
    • Rename set_event_loop_quit_on_last_window_closed to remove EventLoopQuitBehavior

      For the winit backend, also make the function work after a call to run()

    • Introduce MinimalSoftwareWindow

      This simplifies the implementation of the pico and STM, as they both have the same PlatformWindow implementation, and is likely to be the same for every MCU

    • Remove quit behavior parameter from run_event_loop
    • API cleanup: Rename PointerEvent to WindowEvent

      Also rename members and related functions as specified in #1543.

    • Rgb565Pixel: remove color accessor, add conversion to Rgb8Pixel (#1576)
    • Remove the use of euclid from the Window API

Tooling

  • Language server improvements (#1571)
    • Improve initialization responses ()

      Make the LS respond with this data:

      { capabilities = { ... server_capabilities ... }, offsetEncoding = "utf-8", serverInfo = { name = "slint-lsp", version = "0.2.6" } }

      This forces characters in the protocol to be byte-offsets into utf-8 encoded strings and provides some information about this server that's nice to have.

    • Add some basic tests (#1570)
  • online_editor: Support custom "slint/load_file" in LSP (#1530)

    The LSP running in the web worker needs to access (virtual) files in the editor. So it sends a request to the editor for files.

    Handle such requests. Also make sure to provide the editor with the correct URLs of open files so that the base URL to request additional data with is correct.

    Also do not error out when LSP and interpreter request the same file concurrently.

  • Fix preview not updating in the online editor (#1564)

    We get a panic that we can run the event loop only once. Attempt to fix this by doing the same as in the documentation and run one event loop, using show() instead of run() on the window

Fixes

  • API: seal the WindowAdaptor trait (#1568)

    And hide most of its functions in the sealed trait.

    Closes #1535

  • Software renderer: keep a Weak of the Window (#1549)

    Closes #1545

    Not that SoftwareRenderer::new() takes the Weak by value instead of by reference, because coercing a reference to a Weak to a &Weak<dyn> isn't possible, while converting a Weak to a Weak<dyn> just works.

  • Fix some documentation links (#1575)

    And add a test in the CI that checks for warnings in the internal crates

    (Also changed --exclude in the test to match the one from build, since c++ test are run separately)

  • Remove erroneous mention of SLINT_FEATURE_EVENTLOOP_WINIT_ALL (#1572)

    We used to have SLINT_FEATURE_BACKEND_GL_ALL, but when we introduced the renderer and event loop distinction in the features, we removed the "all" suffix from the event loop that includes x11 and wayland support.

  • Box shadow rendering fixes (#1569)

    Fix a regression in the appearance of box shadows with the FemtoVG backend and fix the appearance of box shadows with blur with the Skia backend to match FemtoVG.

  • Fix element rotation when the element is translated (#1557)

    For example

    Image { x: 150px; y: 50px; rotation-angle: 45deg; }

    will end up rendering as if x and y are zero. This is because during the injection we "move" x and y to the Rotate element as bindings, but due to the lack of built-in x/y properties, dummy properties are materialized and they are not applied for the regular per-item translation.

    Add x/y to the Rotate element and then it works.

  • winit with swrenderer: don't call window.draw_contents twice. (#1552)

    The render function of the swrenderer already call that.

Janitor work

PRs: #1565, #1550, #1567

Statistics

56 patches committed in 30 pull requests by 3 authors.

← Next : 5th of September 2022 to 11th of September 2022 | Previous : 22nd of August 2022 to 28th 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