KDE Plasma

Neuer Ansatz für das KDE-Styling

Ein Essay von Arjen Hiemstra erläutert bestehende Probleme beim Styling von KDE Plasma und KDE Apps und stellt mit Union eine mögliche Lösung vor.

Das Problem, wie Arjen es beschreibt, sind vier unterschiedliche Ansätze, das Breeze-Design umzusetzen, was nicht nur für die Plasma Next Initiative ein Problem darstellt, sondern selbst kleine Änderungen schwierig macht.

Gewachsene Ansätze

Ursprünglich gab es nur Qt-Widgets und ein System, um diese zu gestalten. Dann kam Plasma mit SVG-basiertem Styling, gefolgt von QtQuick mit einem weiteren Styling-System. In einem Vortrag vom vergangenen Jahr von der KDE-Konferenz Akademy erklärt Arjen das Problem im Detail. Besonders Designer ohne Programmierkenntnisse tun sich schwer mit den verschiedenen Ansätzen.

Das Problem wurde bereits vor Jahren erkannt, ist aber nicht leicht zu lösen. Die zu unterschiedlichen Zeiten entwickelten Ansätze existieren nebeneinander und verwenden Techniken aus der jeweiligen Entstehungszeit. Das Hauptproblem dabei sind die daraus resultierenden vollkommen unterschiedlichen Rendering-Stacks.

Render-Problem

Rendering-Stacks sind die Abfolge von Prozessen, Technologien oder Softwarekomponenten, die zusammenarbeiten, um Inhalte visuell darzustellen. Um das Problem der unterschiedlichen Rendering-Stacks zu lösen, musste eine Kompatibilitätsschicht entwickelt werden, die es erlaubt, den gleichen Render-Code über alle verwendeten Design-Ansätze hinweg verwenden zu können.

Union solls richten

Hier kommt Arjens Projekt Union ins Spiel. Dabei handelt es sich um ein Styling-System, das all die unterschiedlichen Ansätze in einer einzigen einheitlichen Styling-Engine vereinen soll, die alle unterschiedlichen Technologien unterstützt, die zum Stylen von KDE-Anwendungen verwendet werden.

Drei Ebenen

Union besteht aus drei Teilen: einer Eingabeebene, einer Zwischenebene und einer Ausgabeebene. Die Eingabeebene besteht aus Plug-ins, die ein Eingabedateiformat mit einer Stilbeschreibung lesen und interpretieren und es in eine abstraktere Beschreibung dessen umwandeln können, was gerendert werden soll. Wie das geht, wird durch die mittlere Zwischenebene definiert, eine Bibliothek mit der Beschreibung des Datenmodells und einer Methode zum Definieren, auf welche Elemente Dinge angewendet werden sollen. Zu guter Letzt besteht die Ausgabeebene wiederum aus Plug-ins, die die Daten aus der Zwischenebene verwenden und sie in tatsächliche Rendering-Befehle umwandeln, je nach Bedarf für einen bestimmten Rendering-Stack.

Flexibel, aber restriktiv genug

Das klingt nach viel Arbeit und ist es wohl auch. Die Zwischenschicht muss einerseits flexibel genug sein, um verschiedene Anwendungsfälle zu bewältigen, andererseits aber auch starr genug, damit es schwer wird, – ob absichtlich oder unabsichtlich – Abhängigkeiten zwischen der Eingabe- und Ausgabeschicht zu schaffen. Abgesehen davon ist das Ersetzen des gesamten Styling-Stacks eine Menge an Arbeit.

Aufgeteilt

Zunächst wurde das Problem in besser handhabbare Teile zerlegt. Zunächst konzentrierte man sich auf die Zwischenschicht und verwendete dort Plasmas SVG-Themen als Eingabeformat und einen QtQuick-Stil als Ausgabe. Das Ergebnis ist, dass Union zwar noch keinen vollständigen QtQuick-Stil implementiert, aber die meisten grundlegenden Steuerelemente, damit etwas wie Discover ausgeführt werden kann, ohne völlig fremdartig auszusehen, funktionieren.

Die Community ist gefragt

Dennoch bleibt noch viel zu tun. Zunächst einmal wird für ein wirklich einheitliches Styling-System für KDE eine QtWidgets-Implementierung benötigt. Die Arbeit daran hat bereits begonnen, stellt sich aber als schwieriger heraus als die QtQuick-Implementierung. Arjen würde Plasmas SVG-Styling gerne durch CSS als Eingabeformat ersetzen, allerdings scheint es keine gute CSS-Parser-Bibliothek zu geben.

An diesem Punkt ist die Community gefragt, um mehr Input zu erhalten. Der Code zum Testen von Union ist auf invent.kde.org/plasma/union zu finden, für Diskussionen wurde ein Matrix-Kanal eingerichtet.

Teilt den Beitrag, falls ihr mögt

21 Kommentare

  1. Also mich überzeugt das auch nicht! Das Beste wäre sicherlich die Mammutaufgabe: alle Anwendungen einheitlich an *ein* System anpassen.Da laufen ja schon verschiedene Systeme, die das Styling übersetzen. Jetzt ein neues System drüber zu stülpen, das diese Systeme wieder vereinheitlichen soll wäre für mich die *letzte* Option!
    Dann kommt vllt irgendwann noch jemand anderes um die Ecke, der ein anderes, besseres System entwickelt, daß die selbe Aufgabe erledigt – und schon braucht man noch eine Zwischenschicht, die dann diese Zwischenschichten miteinander vereint. Usw usf…
    Auch beim Stichwort CSS ging bei mir die Augenbraue hoch. Das hat sich ja in der Webentwicklung gezeigt, daß das nicht der Weisheit letzter Schluß war. Als (eine) Folge dessen werden heute viele Websites nur noch per JavaScript erzeugt. Absolut gruselig! Wer das “NoScript”-Plugin im Browser installiert hat, weiß was ich meine!

    1
    1. > Auch beim Stichwort CSS ging bei mir die Augenbraue hoch. Das hat sich ja in der Webentwicklung gezeigt, daß das nicht der Weisheit letzter Schluß war. Als (eine) Folge dessen werden heute viele Websites nur noch per JavaScript erzeugt.

      Da liegt ein Missverständnis vor. CSS sind essentiell wichtig und eine gute und sinnvolle Technologie. Das JavaScript heute in vielen Fällen für die reine Ansicht einer Website notwendig ist, ist eine beschämende Entwicklung, hat aber mit CSS weder was zu tun, noch ist es eine Folge (da eine unzureichend Technologie) dessen.

      Schönen Tag noch.

      2
      1. Jain!

        Stimmt schon, daß CSS eine sinnvolle Technologie ist. Allerdings ist es auch immer wieder ein echter Overkill, besonders bei einfachen Websites im Prinzip an 4 Stellen rumdoktorn zu müssen, um alle Aspekte des Webdesigns abzudecken. HTML, PHP, CSS und JS. Alles wichtige Technologien, aber in vielen Fällen, wenn nicht sogar den meisten Fällen, leider etwas unübersichtlich. Was dann dazu führen kann, daß man alles aus JS heraus konzipiert, da man dann nur noch in einem Bereich rum krebsen muß.

        Also ich selbst bin auch überzeugter Basics-Mensch (KISS Prinzip). Wenn einfaches HTML mit CSS nicht ausreicht, dann kommt halt noch PHP dazu. Und alles was sich damit nicht abbilden läßt, muß dann über JS ergänzt werden. Aber JS ist für mich der letzte Strohhalm, wovon ich so wenig wie möglich im Projekt drin haben will. Liegt vllt auch daran, daß ich JS nicht so richtig leiden kann. Ich finds etwas hakelig und klobig. Ist aber nur meine persönliche Meinung.

        Jruß

        0
        1. > KISS Prinzip

          Bin ich auch ein Fan.

          Es sind wohl Faktoren wie Zeitdruck (Kosten), Bequemlichkeit oder auch mangelnde Kenntnisse die dazu führen, dass z. B. Bootstrap (CSS) in voller Gänze eingebunden wird, obwohl man doch nur den “Button” bräuchte, dass JavaScript-Bibliotheken wie lodash in voller Stärke eingebunden wird, obwohl man doch nur ein simples “Number.isOdd()” braucht, dass die kompletten Font-Datei für Icons eingebunden wird, obwohl man doch nur zwei Icons davon benutzt, etc. pp.

          Aus meiner Sicht beschämend für die die Zunft (und Selbstachtung) der Webentwickler.

          1
            1. Bei Distributionen ist das ja nochmal ein ganz anderer Schuh! Da fällt es mir eher schwer, zu verstehen, was bzw. wo genau das KISS Prinzip greift. In den Sourcecodes wohl kaum. Also ich bezweifele schwer, daß ArchLinux sämtliche Software nach KISS umschreibt. Da geht’s vermutlich eher um das Konfigurieren usw. Wobei das eigentlich bei den meisten Linux Distris schon sehr ähnlich ist. Vom Klickibunti mal abgesehen, kann man das System komplett in /etc/ konfigurieren. Da unterscheidet sich beispielsweise ArchLinux auch nicht so sehr von den anderen Distris…

              0
          1. Das ist gerade alles im Wandel. Der Github Copilot der ja auch in Visual Studio funktioniert ist eine echte Sensation. Generell wird sich einiges ändern. Satische WordPress Seiten, WordPress-Onepager werden aussterben.

            0
  2. Hmm … das mag wohl eine doofe Frage sein und man könnte da wohl über mich lachen, aber: Wäre es nicht einfacher einen der 4 bestehenden Ansätze als Standard auszuwählen anstatt jetzt mit so einem … Verarbeitungsmechanismus um die Ecke zu kommen, der da irgendwie alles unter einen Hut bringen soll?

    [Nur um das klarzustellen: Die Frage ist nicht abschätzig gemeint.]

    15
  3. Also mich überzeugt das nicht.🤨

    Wenn ich schon lese Plug-ins für Eingabe und Ausgabe des Design.
    Da muss IMO ein klares System für die Eingabe her, Gern CSS oder noch besser SVG Dateien wo mit zusätzlich Tags im Code dem System mitgeteilt wird wie diese im Design genutzt werden!.

    Also so nach der Methode:
    Dies ist die rechte obere Ecke mit feste Höhe und Breite.
    Dies ist die Titelbar mit Fester Breite und flexibeler Breite von Pixel a bis Pixel B.

    Und so weiter 🙄😉

    Ich habe mit eigene Themes für KDE erstellt, und ja das ist echte Fummelei 🙄, die man auch nach einer neuen Version auch immer wieder mal korrigieren muss.
    (Zuletzt bei dem Wechsel von KDE 5 auf 6)

    Da wäre ein einheitliches konsequentes System schon eine echte Erleichterung.

    Da ist ein “ich muss schauen ob alle Plug-ins installiert und aktuell sind!” meiner Meinung nach nicht der richtige Ansatz.🤨

    6
        1. Die Maximalforderung.

          Vielleicht passiert das ja im Laufe der Zeit und anschließend kann man das – bis dahin möglicherweise überkomplex angewachsene – Werkzeug auch wieder löschen.

          Das wäre das optimistische Szenario, in einem anderen Szenario bräuchte man dann in so ca. fünf Jahren ein neues Werkzeug, das alsdann noch eine Gestaltungstechnologie mehr überein bringen muss. 🙂

          2
    1. Also, wenn man sich GNOME ansieht, haben die eher alles richtig gemacht. Sämtliche Anwendungen einheitlich gestylt, bei der Gelegenheit gleich mal ordentlich ausgemistet und alle Funktionen, die nicht essentiell erschienen einfach raus geschmissen. Mit dem Ansatz, daß man das Entfernte über Erweiterungen wieder zurück holen kann. Wäre für KDE sicherlich auch eine Möglichkeit.
      Das heißt ja nicht automatisch, daß man gleich derartig minimieren muß, wie bei GNOME geschehen. Aber ich bin mir sicher, daß sich die GNOME Entwickler einen großen Gefallen getan haben mit der Aufräumaktion! Besser lesbarer Code, alte Zöpfe abgeschnitten und alles überflüssige raus. Mach ich bei meinen Projekten auch immer wieder. Tut mental gut und erhöht die Wartbarkeit enorm! Und wenn man schon mal drin ist im Code, kann man gleich noch ein bißchen refactoring betreiben. Hilft.

      1

Kommentar hinterlassen