Beschreibung des Font-Protokolls, Revision 5
Eine minimale Unterstützung dieses Protokolls besteht in der Auswertung der Nachricht FONT_CHANGED. Programme, die eines der (GDOS–) Attribute Textwinkel, –breite, –kerning, –neigung oder die Angabe der Textgröße in 1/65536 Punkt unterstützen, sollten auch die Nachricht XFONT_CHANGED, die zusätzliche Informationen anbietet, unterstützen.
Über die Nachricht FONT_SELECT kann der Fontselektor auch von der Applikation aufgerufen werden. Dabei können auch die aktuell eingestellten Attribute übergeben werden.
Unterstützt die Anwendung auch das XAcc–2–Protokoll, so kann sie auch leicht die Unterstützung der Bestätigungsnachricht FONT_ACK offenlegen und ohne Environment–Variable nach Fontselektoren im Speicher suchen.
FONT_CHANGED–Nachricht:
Nachricht des Fontselektors an eine Applikation, daß der
Zeichensatz und/oder die Zeichenattribute (Größe, Farbe und Effekte)
in einem oder mehreren Fenstern der Applikation gewechselt werden
sollen. Besitzt die Zielapplikation im erweiterten XAcc–Namen
die Kennung XFontAck
, so muß diese Nachricht mit der
Nachricht FONT_ACK beantwortet werden. Ansonsten ist die
Unterstützung dieser Nachricht optional.
Negative Werte in msg[6/7] bzw. Null in msg[4/5]
stehen für keine Veränderung
msg[0] = FONT_CHANGED (0x7a18) msg[1] = apID msg[2] = 0 msg[3] = Fenster-Handle oder negativer Wert, falls Font in allen Fenstern gewechselt werden soll msg[4] = Font-ID oder Null msg[5] = Font-Größe in Punkt (>0) oder Pixel (<0) bzw. Null für keine Veränderung msg[6] = Font-Farbe msg[7] = Effekte: Bit 0: Fett Bit 1: Hell Bit 2: Kursiv Bit 3: Unterstrichen Bit 4: Umrandet Bit 5: Schattiert Bit 6: Invers Bit 12: 1=Font ist monospaced; 0=unbekannt (restliche Bits sind reserviert)
XFONT_CHANGED–Nachricht:
Erweiterte (GDOS–)Attribute übermitteln. Diese Nachricht
ist optional und wird vor der Nachricht FONT_CHANGED
verschickt, d.h. erst wenn die Nachricht FONT_CHANGED
eintrifft und den gleichen Absender (msg[1] vergleichen!) hat,
sollten diese Werte gesetzt werden! Dadurch werden doppelte Redraws
und/oder Fehler vermieden.
Die Nachricht FONT_CHANGED enthält die auf Punkt
gerundete Größe, d.h. Programme, die XFONT_CHANGED nicht
unterstützen, können diesen Wert benutzen.
Fontselektoren versenden idR diese Nachricht nur, wenn eines der
übermittelten Attribute vom Normalwert abweicht!
msg[0] = XFONT_CHANGED (0x7a1b) msg[1] = apID msg[2] = 0 msg[3/4] = Größe in 1/65536-Punkt (fix31) msg[5] = Rotationswinkel in 1/10-Grad (0-3599) msg[6] = Neigung in 1/10-Grad (-1800 - 1800) msg[7] = Breite und Kerning: Bit 15: Paar-Kerning Bit 13/14: Track-Kerningmodus (0-3) Bit 0-12: Breite in Punkt in C: typedef struct { unsigned int pair : 1; unsigned int track : 2; unsigned int width : 13; } VECTOR_INFO;
FONT_SELECT–Nachricht:
Mit dieser Nachricht kann ein im Speicher vorhandener
Fontselektor, der im erweiterten XAcc–Namen die Kennung
XFontSelect
besitzt, aufgerufen werden. Unterstützt
die Anwendung und/oder der Fontselektor kein
XAcc–2–Protokoll, so kann noch nach dem Inhalt der
(AES-)Environment–Variablen FONTSELECT
gesucht
werden. Diese Variable kann gegebenenfalls auch mehrere Namen
(getrennt durch Semikolon) enthalten, wobei die Namen optional auch
Pfad und Dateierweiterung besitzen können, so daß man den
Fontselektor unter Multitasking bei Bedarf parallel nachladen
kann.
Beispiele:
setenv FONTSELECT=FONT_PAL;FONT_SEL setenv FONTSELECT=C:\FONTSEL\FONT_SEL.APP;C:\FONTSEL\FONT_PAL.APP
msg[0] = FONT_SELECT (0x7a19) msg[1] = apID msg[2] = 0 msg[3] = Handle des Fensters, dessen Zeichensatz ein- gestellt werden soll, oder ein negativer Wert, wenn der Zeichensatz in allen Fenstern der Applikation gewechselt werden soll msg[4] = Font-ID oder Null msg[5] = Font-Größe in Punkt (>0) oder Pixel (<0) bzw. Null, falls der Parameter nicht benötigt wird (s.o.) msg[6] = Farbe msg[7] = Effekte (s.o.)
FONT_ACK–Nachricht:
Fontselektor darüber informieren, ob die
FONT_CHANGED–Nachricht ausgewertet bzw. die
Zeichensatz–Attribute eingestellt werden konnten
msg[0] = FONT_ACK (0x7a1a) msg[1] = apID msg[2] = 0 msg[3] = TRUE (1): Nachricht wurde ausgewertet FALSE (0): Nachricht wurde ignoriert msg[4-7] = 0 (reserviert)
Querverweis: xFSL-Schnittstelle Zeichensatzauswahl von MagiC