Plattformübergreifende und intuitive GUI-Entwicklung

Die flüssigen Animationen sind im Bild leider nicht darstellbar: Slint rendert hier mit Hilfe des Skia Backends auf einem i.MX8Mplus von Phytec.
Die flüssigen Animationen sind im Bild leider nicht darstellbar: Slint rendert hier mit Hilfe des Skia Backends auf einem i.MX8Mplus von Phytec.

Zunächst unterstützt Slint einen Framebuffer für Single-/Double-Buffering in Farbtiefen bis zu 24 Bit, wobei die volle (oder doppelte) Framebuffer-Bereitstellung bevorzugt wird, solange genügend RAM vorhanden ist. Ist der RAM knapp, ermöglicht ein Line Buffer das partiale Rendering, was das System entlastet, indem es Bildinhalte Zeile für Zeile verarbeitet. Im Bereich der Hardwarebeschleunigung bietet Slint auf MCUs derzeit keine native Unterstützung für GPU-Beschleunigung, was eine potenzielle Einschränkung für bestimmte Anwendungen darstellt. Es gibt allerdings einen Prototypen für STs DMA2D, der die Fertigstellung oder Integration anderer GPUs als Dienstleistung erlaubt.

Aktuell unterstützt Slint nur eine begrenzte Anzahl von MCU-Plattformen, für die ein entsprechendes Rust-Crate existiert. Die wichtigsten sind immerhin vorhanden und vereinfachen die Integration erheblich, da große Teile des BSPs und die Anbindung an Slint bereits vorgegeben sind. Für nicht explizit unterstützte MCUs oder Boards müssen Entwicklungsteams die Anbindung jedoch selbst vornehmen, einschließlich der Initialisierung von Pins, Peripheriegeräten und Treibern. Der Hersteller bietet entsprechende Anpassungen auch als Dienstleistung an.

Für leistungsstärkere Systeme ermöglicht Slint das Interpretieren von .slint-Dateien zur Laufzeit. MCU-Systeme, die für no_std kompiliert werden, stehen jedoch vor Herausforderungen, da ihnen eine Schnittstelle zum dynamischen Laden von externen Ressourcen fehlt. Dies zwingt zur Vorkompilierung und direkten Integration von .slint-Dateien in das Binary, ein Vorgang, der auf MCU-Systemen aufgrund potenzieller Leistungseinbußen ohnehin häufige Standardpraxis ist.

Einige Einschränkungen gibt es hinsichtlich Schriftarten und Bildern. Zwar können sie über den Slint-Compiler automatisch in Bitmap-basierte Formate umgewandelt und in das Binary eingebettet werden; diese Integration kann jedoch schnell den verfügbaren internen Flash-Speicher überfordern, insbesondere wenn die Bilder bzw. Fonts zuvor in einem Vektor Format vorlagen und in unterschiedlichen Größen angezeigt werden sollen. Pfadkomponenten für SVGs oder Vektorgrafiken zu verwenden wäre platzsparend, allerdings wird diese Funktion für MCUs noch nicht unterstützt. Auch dies ist nicht in jedem Fall ein Nachteil, da aus Performance-Gründen auf MCUs gerne auf Pixel-basierte Formate zurückgegriffen wird und die Konsistenz der Toolchain die komfortable Verwendung derselben Ressourcen-Dateien etwa in einem plattform-übergreifenden Projekt erlaubt. Auf leistungsfähigen MCUs ist Grafik-Beschleunigung durch eine eingebaute GPU heute aber keine Seltenheit mehr. Auf solchen Systemen wäre es komfortabel, Vektor-Formate direkt verwenden zu können.

Auch das dynamische Laden von Übersetzungsdateien in Umgebungen, auf welchen std nicht zur Verfügung steht, unterstützt Slint noch nicht. Pläne, Übersetzungen zur Compile-Zeit zu integrieren, sind für größere Anwendungen, die mehrere Sprachen unterstützen müssen, nicht praktikabel. Schließlich wird, obwohl dafür Pläne bestehen, die Umschaltung der Sprache zur Laufzeit derzeit nicht nativ unterstützt. Als Zwischenlösung lassen sich globale Variablen verwenden, die zur Laufzeit verschiedene Werte annehmen können.

Animierte Diagramme mit Echtzeitdaten

Es ist davon auszugehen, dass es sich bei den vorgenannten Einschränkungen lediglich um derzeit noch fehlende Funktionalitäten handelt, die in weiteren Ausbaustufen nachgerüstet werden – der Preis für die Verwendung eines neuen Werkzeugs. Wesentlich sind die Pluspunkte von Slint, zuvorderst die flüssigen Animationen. Eigenschaften wie Größe, Position, Opazität oder Farbe lassen sich dynamisch animieren und kubische Bezier-Kurven ermöglichen gleitende Übergänge. Auch bei vollflächigen Überblendungen und Bewegungen sind Animationen stets flüssig. So lassen sich animierte Diagramme mit Echtzeitdaten umsetzen.

Werkzeuge für Entwickler

Zur Erstellung von Desktop-Builds für Windows/macOS/Linux stehen mehrere Backend-Optionen (d.h. Windows-System-Anbindung) zur Verfügung. Dies ist überaus hilfreich, da kein großer Aufwand für eine Desktop-Simulation anfällt. Für das Prototyping gibt es eine Integration für Visual Studio Code Editor mit Syntax-Highlighting, Code-Completion und Live-Preview (vgl. mit SlintPad). Außerdem stellt Slint einen Code-Generator für Figma-Designwerkzeuge bereit.

Wer CSS und Typescript kennt, wird die simple Syntax während der Entwicklung zu schätzen wissen. Für das unterstützte Board war Slint einfach in Betrieb zu nehmen. Es braucht nur zwei Kommandozeilen Befehle: einmal zum Bauen, einmal zum Aufspielen auf das Gerät. Ansonsten ist abgesehen von Rust nichts einzurichten. Auch die Dokumentation überzeugt.

Fazit

Den Einschränkungen zum Trotz: Ihr Ziel, immer flüssige Animationen erreichen zu wollen, haben die Macherinnen und Macher von Slint ausdrücklich erreicht. Dies wird üblicherweise mit einer Bildwiederholrate von 60 Bildern pro Sekunde assoziiert, daher auch der ursprüngliche Name von Firma und Plattform: SixtyFPS. So darf das heutige Slint mit Fug und Recht als neuer Stern am Himmel der HMI-Werkzeuge gezeichnet werden, von dem man noch viel hören wird.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert