2.8 tile (Muster)
Grafiken, Bilder und Muster, die innerhalb des IDM verwendet werden, müssen als Ressource deklariert werden. Das Schlüsselwort hierzu ist tile, gefolgt von einem Bezeichner und der Musterdefinition. Die Musterdefinition ist dabei entweder direkt Bestandteil der IDM-Datei oder in einer separaten Grafikdatei enthalten.
Definition
{ export | reexport } tile <Bezeichner> <tileSpec> | <variantDef> <scaleMode>tileSpec ::= <tileBitmap> | "<Dateipfad>" | "<Grafikressource>" { scale | noscale | numscale | propscale | dpiscale } { smooth }
tileBitmap ::= <x>, <y>, "<Musterzeile>" [ , "<Musterzeile>" ]
variantDef ::= { 0 : <tileSpec> [ <Nummer> : <tileSpec> ] }
Bei der Definition von Varianten wird empfohlen, immer eine Variante mit der Nummer 0 zu definieren, da diese als Standardvariante dient, wenn keine, eine nicht vorhandene oder eine ungültige Variante gesetzt wird. Die weiteren Nummern können beliebige natürliche Zahlen sein.
Die zu verwendende tile-Variante kann beim Start der Anwendung mit der Startoption -IDMtile gesetzt werden. Zur Laufzeit der Anwendung kann sie mit dem Attribut .tile des setup-Objekts abgefragt und gesetzt werden.
2.8.1
Internes Muster (Bitmap)
<x> und <y> stehen jeweils für die Anzahl der Pixel in horizontaler bzw. vertikaler Richtung. Breite (<x>) und Höhe (<y>) können beliebig gewählt werden.
<Musterzeile> bezeichnet eine Zeichenkette mit <x> Zeichen, in der jedes Zeichen ein Pixel des Musters repräsentiert. Es sind nur rechteckige Muster möglich, deshalb müssen genau <y> Musterzeilen mit jeweils <x> Zeichen definiert werden.
Die Musterzeilen bestehen aus den Zeichen Punkt (.
) Leerzeichen (
) und Doppelkreuz (#
), die folgende Bedeutung haben:
.
(Leerzeichen)(blank)
Übernimmt die Hintergrundfarbe, d.h. an dieser Stelle ist das Muster transparent.
Wenn die tile-Ressource im .picture- bzw. .picture[enum]-Attribut eines image-Objekts verwendet wird und dessen Attribut .imagebgc gesetzt ist, erscheint an dieser Stelle ein Pixel in der Farbe .imagebgc.
#
An dieser Stelle erscheint ein Pixel in der Vordergrundfarbe.
Bei Verwendung der tile-Ressource im .picture- bzw. .picture[enum]-Attribut eines image-Objekts ist das die Farbe, die im Attribut .imagefgc des image-Objekts gesetzt ist.
Beispiel für die Definition eines internen Musters
tile TiGray 16, 16, "# # # # # # # # ", " # # # # # # # #", "# # # # # # # # ", " # # # # # # # #", "# # # # # # # # ", " # # # # # # # #", "# # # # # # # # ", " # # # # # # # #", "# # # # # # # # ", " # # # # # # # #", "# # # # # # # # ", "# # # # # # # # ", " # # # # # # # #", "# # # # # # # # ";
Hinweis zu Qt:
Bei der Nutzung von internen Mustern als Menü- oder Notepage-Bilder ist zu beachten, dass der scalestyle_none nicht zu einer realen 1:1 Pixeldarstellung führt wie bei einer Bilddatei üblich.
Wir raten von der Verwendung interner Muster als Fenstericon ab, da es hier zu einem fehlerhaften Zusammenspiel bei der parallelen Verwendung mit anderen Objektklassen, wie z.B. bei Menues, kommen kann.
2.8.2
Externes Muster
Bei der Definition über einen Dateinamen (inklusive Pfad) geht der IDM davon aus, dass die Definition des Musters in einer separaten Grafikdatei erfolgt. Der IDM lädt die entsprechende Datei und stellt ihren Inhalt mit den Systemfunktionen des jeweiligen Toolkits dar. Deshalb ist es plattformabhängig, welche Grafikformate angezeigt werden können.
Die folgende Tabelle zeigt, welche Grafikformate auf den einzelnen Plattformen unterstützt werden:
Tabelle 24-4: Von der tile-Ressource unterstützte Grafikformate
|
Grafikformat |
Dateiendung |
Microsoft Windows |
Motif |
Qt |
|---|---|---|---|---|
|
Graphics Interchange Format |
.gif |
ja |
ja |
ja |
|
Device Independent Bitmap |
.bmp |
ja |
nein |
ja |
|
X PixMap |
.xpm |
nein |
|
nein |
|
JPEG File Interchange Format |
.jpg |
ja |
|
ja |
|
Portable Network Graphics |
.png |
ja |
|
ja |
|
Enhanced Metafile |
.emf |
ja |
nein |
nein |
|
Aldus Placeable Metafile |
.apm |
ja |
nein |
nein |
|
Windows Icon Resource File |
.ico |
ja |
nein |
nein |
|
Windows Icon Resource |
– |
ja |
nein |
nein |
| Scalable Vector Graphics | .svg | ja | nein |
ja |
Die Definition über eine Grafikressource wird nur vom IDM für Windows unterstützt. Hier können die Bezeichner IDM_AppIcon
und IDM_DefIcon
der in den IDM-Bibliotheken definierten Ressourcen verwendet werden (siehe auch Attribut .icon in der „Attributreferenz“).
Unter Microsoft Windows können außerdem folgende Bezeichner für vordefinierte Bitmap-Ressourcen des Systems angegeben werden:
|
BTNCORNERS |
BTSIZE |
CHECK |
CHECKBOXES |
CLOSE |
|
COMBO |
DNARROW |
DNARROWD |
DNARROWI |
LFARROW |
|
LFARROWD |
LFARROWI |
MNARROW |
OLD_CLOSE |
OLD_DNARROW |
|
OLD_LFARROW |
OLD_REDUCE |
OLD_RESTORE |
OLD_RGARROW |
OLD_UPARROW |
|
OLD_ZOOM |
REDUCE |
REDUCED |
RESTORE |
RESTORED |
|
RGARROW |
RGARROWD |
RGARROWI |
SIZE |
UPARROW |
|
UPARROWD |
UPARROWI |
ZOOM |
ZOOMD |
|
Hinweis
Die Bilder der tile Ressource werden nun automatisch entsprechend des eingestellten Vergrößerungsfaktor vergrößert. Es wird hierbei davon ausgegangen, dass die Bilder für einen DPI-Wert von 96 entworfen wurden. Sind die Bilder der Anwendung für eine höhere Auflösung entworfen worden, dann kann dies am setup Objekt mit dem Attribut .tiledpi eingestellt werden.
Bei der Spezifikation einer externen Datei wird empfohlen, den Pfad nicht absolut, sondern mit Hilfe einer Umgebungsvariablen zu definieren, z.B. "IDM_IMAGEPATH:Check.gif".
Weitere Grafikformate können mithilfe eines selbst implementierten Grafik-Handlers (GFX-Handler) verarbeitet werden (siehe Funktion DM_PictureHandler im Handbuch „C-Schnittstelle - Funktionen“).
2.8.3
Skalierung
Durch die Angabe eines scalestyle bei der Musterdefinition wird die Größe des Musters oder Bildes nach bestimmten Kriterien an den verfügbaren Platz angepasst.
Das Attribut .scalestyle bestimmt die Art der Skalierung des Musters oder Bildes.
|
|
|
Bedeutung |
|---|---|---|
| noscale | scalestyle_none |
Das Muster bzw. Bild wird nicht skaliert., .tiledpi hat keine Auswirkungen. |
| scale | scalestyle_any |
Höhe und Breite des Musters bzw. Bildes werden voll auf die verfügbare Fläche vergrößert. |
| propscale | scalestyle_prop |
Höhe und Breite des Musters bzw. Bildes werden auf die verfügbare Fläche vergrößert, wobei Höhen- und Breitenproportionen des Musters bzw. Bildes auf jeden Fall erhalten bleiben. D.h. es können oben und unten bzw. links und rechts Freiflächen entstehen. |
| numscale | scalestyle_num |
Die Skalierung des Musters bzw. Bildes wird durch einen numerischen Skalierungsteiler vorgenommen. Dabei wird die Skalierung in Viertel-Schritten vorgenommen, also 1.25-fach, 1.5-fach, 1.75-fach, 2-fach, 2.25-fach, 2.5-fach, usw. |
| dpiscale | scalestyle_dpi |
Das Muster bzw. Bild wird immer entsprechend der eingestellten Bildschirmskalierung skaliert. |
|
Keine Angabe |
scalestyle_auto |
Das Muster bzw. Bild wird entsprechend der eingestellten Bildschirmskalierung skaliert. Eine zur Vorgängerversion kompatible Skalierung findet statt. Defaultwert |
Siehe auch
Attribut .scalestyle im Handbuch„Attributreferenz“
Best Practice: Muster sollten wenn möglich bereits in der richtigen bzw. verwendeten Größe vorliegen, da jede Skalierung mit Verlusten an Schärfe oder Detailreichtum verbunden ist.
2.8.4 Smooth Scaling
Das Skalieren von Pixel-Bilder ist meist nötig um Bilder in gewünschter Größe auf der Benutzeroberfläche darzustellen oder um Bilder für die aktuelle Skalierungsstufe des Desktops aufzubereiten.
Standardmäßig benutzt der IDM für diese Skalierungs bzw. Bildtransformation den schnellsten Skalierungalgorithmus „Nächster Nachtbar“. Dieser dupliziert schon vorhandene Pixelwerte (beim Vergrößern) oder lässt Pixel weg (beim Verkleinern).
Durch die Nutzung des smooth Schlüsselwort an der tile-Ressource kann explizit für dieses Muster auf einen interpolierenden Skalierungsalgorithmus gewechselt werden. Dieser berechnet fehlende Pixel aus den Nachbarpixeln oder „verrechnet“ mehrere Pixel beim Verkleinern.
Beide Skalierungsalgorithmen haben ihren Vor- und Nachteil und sollten nach dem Bildinhalt wie auch den möglichen Skalierungsgrößen gewählt werden.
Beispiel
|
Original |
Nächster Nachbar / Fast Scaling |
Interpoliert / Smooth Scaling |
|---|---|---|
|
Vergrößerung auf 200% und 125% |
|
|
|
Verkleinerung auf 75% und 50% |
|
|
|
Vorteile |
Kontrast bleibt erhalten Bei minimalem Verkleinern/Vergrößern bleibt Bildeindruck erhalten |
Interpolation verringert Treppchenbildung Beim Verkleinern bleibt Bildinhalt erkennbar |
|
Nachteile |
Beim Vergrößern wirken sie "pixelig" oder es bilden sich "Treppen" Informationsverlust beim Verkleinern |
Kontrastreiche Bilder wirken unscharf, selbst beim minimalen Verkleinern/Vergrößern |
Für einen optimalen Bildeindruck empfiehlt es sich Bilder in mehrere Größen bzw. Skalierungsstufen bereitzustellen. Dies kann als Ressource-Variante, als HiDPI-Bildvariante über @nx-Zusatzbilder (n = 2...9) oder unter Windows als Icon-Ressource mit mehreren Bildvarianten geschehen. Alternativ empfehlen sich auch Vektorbildern im SVG-Format.
2.8.5
Dynamisch änderbare Attribute
Die änderbaren Attribute können der nachfolgenden Tabelle entnommen werden. Dabei ist zu beachten, dass sich .name einerseits sowie .width, .height und .pattern andererseits gegenseitig ausschließen, sodass get
zu einer Fehlermeldung can't get value führt.
Bei varianten tile-Ressourcen wird auf die Attribute der aktuellen tile-Variante zugegriffen, die mit dem Attribut .tile des setup-Objekts abgefragt und gesetzt werden kann.
Tabelle 24-5: Änderbare Attribute der tile-Ressource
|
Attribut |
Datentyp |
Indexbereich |
Beschreibung |
|---|---|---|---|
|
.name |
string |
– |
Dateipfad einer Grafikdatei. |
|
.width |
integer |
– |
Breite des Musters in Pixeln. |
|
.height |
integer |
– |
Höhe des Musters in Pixeln. |
|
.pattern |
string |
– |
Vollständiges Muster als String. |
|
.pattern[integer] |
string |
1 … .height |
Einzelne Zeilen des Musters. Die Länge jedes Strings muss gleich .width sein. |
|
.scale |
boolean |
– |
Größenanpassung an den verfügbaren Platz. Standardwert false (keine Größenanpassung). |
|
.scalestyle |
enum |
– |
Steuert die Darstellung und Skalierung eines Tiles. Standardwert scalestyle_auto |
|
.smooth_rescale |
boolean |
– |
Aktiviert die interpolierende Skalierung Standardwert false |
2.8.6 SVG-Support
Unter Windows und Qt unterstützt die Tile-Ressource nun auch Vektor-Bilder im Scalable Vector Graphics-Format (.svg).
2.8.6.1 Hinweise für Qt
Die Dateiendung .svg wird als SVG-Bildformat erkannt und bei der Darstellung in den diversen Objekten ein vektorbasiertes Zeichnen angewandt. Dadurch wird bei Anwendungen, die auf HiDPI-Bildschirmen dargestellt werden, eine möglichst optimale Abbildungen von Vektorbildern erzielt.
Aus Gründen der Performanz wird beim Zeichnen von Hintergrundmuster von Gruppierungsobjekten im Stil tilestyle_tiled, das pixelbasierte Stellvertreterbild verwendet.
Installationshinweis: Das Qt-Paket qt5-qtsvg muss bereits installiert sein um die entsprechende SVG-Unterstützungs-Bibliothek verfügbar zu machen und die Startfähigkeit einer IDM-Anwendung zu gewährleisten.
2.8.6.2 Hinweise für Windows
Zur Darstellung von Bildern im "Scalable Vector Graphics" (SVG) Format wird Microsoft Direct2D verwendet. Die SVG-Unterstützung von Microsoft Direct2D ist abhängig von der Microsoft Windows Version. Ab dem Windows 10 Creators Update ist die Unterstützung in eingeschränkter Form gegeben.
Es wird empfohlen, in einer Icondateien oder Iconressourcen nur Icondefinitionen mit derselben Farbtiefe zu verwenden, da nicht sichergestellt werden kann, dass bei gleicher Bildgröße das Bild mit der höheren Farbtiefe verwendet wird. Sind unterschiedliche Farbtiefen nötig, dann sollte eine 2. Icondatei oder Iconressource verwendet werden und auf den Variantenmechanismus des IDM zurückgegriffen werden.
Da Direct2D andere Skalierungsmethoden als das Windows GDI verwendet, können Muster (Bilder), die zur Anzeige skaliert werden müssen, anders aussehen als in den Vorgängerversionen des IDM. Das gilt insbesondere für Muster die als Fenstericon oder als Bilder in den Objekten treeview und notepage verwendet werden, da hier Microsoft Windows den Icondatentyp voraussetzt. Es wird empfohlen, für Fenstericon und Bilder der Objekte treeview und notepage eine Icondatei oder Icon-Ressource als Muster zu verwenden.
Die SVG-Unterstützung von Microsoft Direct2D
Die Unterstützung hängt von der Microsoft Windows-Version ab. Ab dem Windows 10 Creators Update werden die folgenden SVG-Elemente und -Attribute unterstützt:
| Element |
Unterstützte Attribute |
| circle |
id, style, transform, cx, cy, r |
| clipPath |
id, style, transform, clipPathUnits |
| defs |
id, style, transform |
| desc |
id |
| ellipse |
id, style, transform, cx, cy, rx, ry |
| g |
id, style, transform |
| image |
id, style, transform, x, y, width, height, preserveAspectRatio, xlink:href |
| line |
id, style, transform, x1, y1, x2, y2 |
| linearGradient |
id, style, x1, y1, x2, y2, gradientUnits, gradientTransform, spreadMethod, xlink:href |
| path |
id, style, transform, d |
| polygon |
id, style, transform, points |
| polyline |
id, style, transform, points |
| radialGradient |
id, style, cx, cy, r, fx, fy, gradientUnits, gradientTransform, spreadMethod, xlink:href |
| rect |
id, style, transform, x, y, width, height, rx, ry |
| stop |
id, style, offset |
| svg |
id, style, x, y, width, height, viewBox, preserveAspectRatio |
| title |
id |
| use |
id, style, transform, x, y, width, height, xlink:href |
SVG-Darstellungsattribute
- clip-path
- clip-rule
- color
- display
- fill
- fill-opacity
- fill-rule
- opacity
- overflow
- stop-color
- stop-opacity
- stroke
- stroke-dasharray
- stroke-dashoffset
- stroke-linecap
- stroke-linejoin
- stroke-miterlimit
- stroke-opacity
- stroke-width
- visibility
Unterstützte Längeneinheiten
Die Längenwerte und prozentualen Längenwerte des Benutzerbereichs sowie die absoluten Einheitenbezeichner: px, pt, pc, cm, mm und in.
Bildquellen
Das Imageelement wird nur unterstützt, wenn sein xlink:href-Attribut auf ein base64-codiertes Image festgelegt ist.
Siehe auch A.06.03.a