Phantastische Icons ...
« | 02 Oct 2022 | »… und wo sie zu finden sind.
Während es heute ein Volkssport ist, dass jede noch so unnötige App ihre eigenen Grafiken designed um möglichst viel Individualität vorzuheucheln, gab es früher mal die Idee, dass Benutzer sich leicht zurecht finden sollen.
Grafische Elemente sollte das Betriebssystem “zeichnen” und das UI dadurch einheitlich gestalten.
Die Frage ist nur … wo findet man das heute noch?
Um Dateien zu erstellen, öffnen, speichern und kopieren zu können, haben sich
Symbole etabliert, die jeder “im Augenblick” mit der richtigen Funktion
assoziieren und darauf klicken kann.
Dass bis heute eine Disketten Bild
als “Speichern” interpretiert wird, ist teilweise kurios,
aber dennoch schlüssig.
Dumm ist nur, wenn heute Designer versuchen, solche Symbole selbst zu zeichnen und so werden lustige “Platten-Kreise” sogar zu “Bleistifte” in “Corporate-Colors” hingepixelt, und ich sitze dann vor einem UI und versuche mühsam zu erraten, was das Gebilde jetzt auslösen wird, wenn ich es anklicke.
Stock-Icons und -Bitmaps
Windows hatte von Anfang an (also zumindest ab Win95/NT4) Grafiken für “übliche” Symbole in seinen Innereien integriert und die großen X11-Toolkits unter Linux taten das gleiche.
Wer also Menüfunktionen für “Neu”, “Öffnen”, “Speichern”, “Drucken” integrieren wollte, konnte dafür eben diese “Standardsymbole” laden und seinen UI Elementen hinzufügen, anstatt auf nachgezeichnete Eigenfabrikate zu setzen.
Dadurch wird die “EXE” kleiner und das Programm erhält auch noch stets die neuesten Grafiken mit jedem neuen OS oder Toolkit Release.
WinAPI
Microsoft hat es aber leider auch hier wieder geschafft eine gute Idee möglichst schlecht umzusetzen.
Globale Bitmaps
Einige wenige Icons und Bitmaps kann man aus einem globalen Pool laden
und dann als HICON
und HBITMAP
völlig frei benutzen. Man nutzt einfach
den HINSTANCE
Parameter mit NULL
und dann eine Resource-ID aus den
WinAPI Headern.
Doch diese helfen einem wenig, weil es nur Pfeile oder Warnung- und
Stoppsymbole sind.
Spezialfall Toolbar
Das Toolbar Control aus den Common-Controls hingegen arbeitet mit einer internen “ImageList” und diese kann man veranlassen, dass sie ein Set von Standard-Image lädt. Danach kann man mit vordefinierten Grafik-Indices übliche Symbole also Toolbar-Buttons anzeigen lassen.
Beim Hinzufügen von Toolbar-Buttons kann man dann Index-Konstanten wie
IDM_NEW
, IDM_OPEN
, IDM_SAVE
nutzen, um Icons für “Neu”, “Öffnen”
und “Speichern” anzuzeigen. Die vollständige Liste ist natürlich
in der Dokumentation;
und ein
Beispiel für die Erstellung von Toolbar Buttons
ist auch im Netz.
Shell32.dll als ICON-Resource
Ich nutze im GATE Framework unter anderem auch Icons aus der shell32.dll
.
Es gibt zwar keinen dokumentierten Standard dazu, doch Microsoft hat seit
NT4 in dieser DLL immer nur neue Symbole hinzugefügt, aber bestehende Indices
immer mit den gleichen Grafiken versorgt.
ExtractIconEx() heißt die Funktion, die aus einer EXE oder DLL Icons herausziehen kann, und mit den Zahlen für die wichtigsten Symbole, kann man auch so die “aktuellen” Grafiken erhalten.
GTK
GTK definiert in seinen Headern bzw. in der Doku eine Reihe von Strings, die
zu Grafiken eines Themes verweisen.
Mit der Funktion gtk_icon_theme_lookup_icon()
lassen sich dann Icon-namen wie document-save
, edit-copy
oder
folder-open
laden und in Controls anzeigen.
Das ist eigentlich eine sehr elegante Lösung … wenn sie nicht instabil wäre. Denn wenn das Theme eine entsprechende Grafikdatei nicht beinhaltet, kann es zum Crash kommen. Offenbar fehlt hier die Fehlerbehandlung.
Mir ist das unter Linux am Raspberry PI leider untergekommen, wo nach der GTK-3 Installation das Thema nicht korrekt installiert war.
Silk Icons
Und weil man sich eben weder unter Windows noch unter Linux wirklich darauf verlassen kann, dass alle notwendigen Icons wirklich da sind, habe ich mich dazu entschieden, einige PNGs der Silk Icons in Pixmaps umzuwandeln und als C-Header dem GATE Projekt beigelegt.
Denn diese Icons können dann auf jeder Plattform in das eigene Binary integriert und zur Laufzeit geladen werden.
Diese unter der Creative Commons stehende Bildersammlung benötigt nur eine
Erwähnung des Authors und ist ansonsten kostenfrei für alle Zwecke
nutzbar.
Empfohlen wurde sie mir vor vielen Jahren mal von einem Open-Source-Officer,
der sie als “sicher” qualifiziert hatte, gegenüber anderen Bildchen aus
dem Netz.
Und wer schon mehrere Softwarepakete ausprobiert hat, wird feststellen, dass die Silk Icons in zahlreichen freien Desktop-Projekten integriert sind.
Fazit
Eigentlich wünsche ich mir, dass Icons großteils vom Betriebssystem und dessen aktuellem Theme kommen. Und deshalb bedauere ich sehr, dass der kleinste gemeinsame Nenner an “bedeutungsgleichen” Icons zwischen Windows und Linux leider ein sehr kleiner ist, und dass man auf Non-standards angewiesen ist, diese Icons dann zu laden.
Zwar habe ich im GATE Framework einen solche Stock-Icon-Teilmenge definiert, doch wegen der Crashes unter Linux, habe ich am Ende dann doch wieder die Silk-Icons eingesetzt.
Aber auch ein noch so kleines Set an “eindeutigen” Icons ist immer noch besser, als der klägliche Versuch mancher Herstelle, ihre eigenen Icons zu designen.