Die Installation
Vor der Nutzung muss noch die TTF-Font-Engine installiert werden. Die Archive
hierzu sind im AmiNet zu finden (s. Kasten »Bezugsquellen«). Das
Lha-Archiv ist noch selber zu entpacken, den Rest erledigt dann das Installations-Programm.
Dieses und der ttfmanager liegen bisher nur in englischer Sprache vor, sollte
aber trotzdem keinem Schwierigkeiten bereiten.
Bevor TrueType-Fonts am Amiga benutzt werden können, müssen sie installiert
werden (was auch unter anderen Betriebssystemen notwendig ist). Hierzu wird der
ttfmanager mitgeliefert. Nach der Installation des ttfArchives ist dieser im Sys-
tem-Verzeichnis zu finden. Seine Aufgabe besteht darin, die für den Amiga
notwendigen .font- und .otag-Dateien zu erzeugen. Achtung: die Orginal-ttf-Schrift-Datei
wird dabei nicht kopiert. Sie muss also zuerst (von Hand oder per Directory-Tools)
an die gewünschte Stelle auf der Festplatte kopiert werden. Analog zu den
Agfa-Fonts ist es empfehlenswert, ein Unterverzeichnis ttf in der Fonts-Schublade
anzulegen. Dort hinein sollten dann alle .ttf-Schriftdateien kopiert werden. Gehen
Sie nach folgendem Muster zu Installtion der ttf-Engine vor:
TTF-Programmierung
In diesem Kurs-Teil sollen aber auch die Programmierer voll auf ihre Kosten
kommen. Hierzu soll das Beispielprogramm »myViewFont« dienen, dass
alle Arten von skalierbaren Schriften anzeigen kann. Voraussetzung: Die entsprechende
Font-Engine ist im System vorhand oder wird installiert.
Die Möglichkeiten:
freie Fontauswahl
per ASL-FileRequester.
Zeichenauswahl
(unter dem Vorschaufeld).
Größenauswahl
(5 bis 150 Pixel).
Drehwinkel (0
bis 359 Grad).
frei skalierbare
und lokalisierte Reaction-Oberfläche für AmigaOS 3.5.
In der Datei »myViewFont.c« ist die komplette Oberfläche (über
Reaction) und das MessageHandling zu finden. Das Programm ist auch gleich mehrsprachig
ausgelegt. Die internen Texte sind in der Datei »VF_locale.c« zu
finden. Interessant ist jedoch die Datei »VF_engine.c«, die die
komplette Fontbehandlung beinhaltet. Alle Dateien sollten mit ausreichend Kommentaren
versehen sein, damit Sie Änderungen und Erweiterungen nach eigenem Geschmack
vornehmen kann. Trotzdem soll hier eine kurze Übersichtsbeschreibung erfolgen.
Nach dem Programmstart (wahlweise Shell oder Workbench) erfolgt die Auswertung
der übergebenen Argumente. Danach wird überprüft, ob mindestens
AmigaOS 3.5 vorliegt. Ist eine ältere OS-Version installiert, gibt das
Programm eine Fehlermeldung aus und wird beendet. Dann werden die benötigten
Libraries (runprogramm()) und Gadget-Klassen OpenClasses() geöffnet und
die Reaction-Gadgets erzeugt CreateAllObjects()). Zusätzlich wird noch
eine Bitmap allokiert, in die später die gerenderten Zeichen umkopiert
werden. Danach verbringt das Programm die meiste Zeit in MsgLoop() und wartet
auf Benutzeraktionen.
Die Vorschau des Zeichens erfolgt über ein space.gadget. Obwohl der Name eher auf seine Bedeutung als (dynamischer) Platzhalter hinweist, erlaubt dieses Gadget eine eigene Render-Funktion einzuhängen. Das heißt, jedesmal wenn ein Neuzeichnen des Inhaltes notwendig ist, wird statt dessen die Render-Funktion aufgerufen (als RenderHookFunc() benannt). Da diese Funktion im Kontext des input.devices läuft, sind nur eingeschränkte Möglichkeiten vorhanden und die Funktion muss schnellstmöglich abgearbeitet werden. Die Render-Funktion liest zuerst die aktuelle Größe aus und löscht diesen kompletten Bereich. Danach wird nur noch die pivate Bitmap in das Fenster umkopiert (dies erfolgt zentriert, wenn möglich).
|
Nach der Auswahl einer .font-Datei wird die Funktion OpenFontEngine() aktiv. Diese prüft zuerst, ob die Datei vorhanden ist und vom Typ Outline-Font. Danach wird versucht, die .otag-Datei einzulesen AllocOTag() übernimmt die Aufgabe. Anhand dieser Tagliste ermittelt OpenScalingLibrary(), um welche Font-Engine es sich handelt und versucht, die entsprechende Library zu öffnen. Danach initialisiert GetGlyphEngine() nur noch die geöffnete Font-Engine. Umgekehrt wird dann über die Anweisungen
ReleaseGlyphEngine(), CloseScalingEngine() und FreeOtag() die allocierten Resourcen
wieder freigegeben. Dazwischen kann aber mit Hilfe von RenderGlyph() ein beliebiges
Zeichen durch die Font-Engine gerendet werden. Vorzugeben sind dabei mit SetInfo()
vor allem die gewünschte Schrifthöhe, der Charactercode und ein evtl.
Drehwinkel. Danach gibtt das Programm über ObtainInfo() die Bitmap mit
dem gerenderten Zeichen aus. Diese wird zur weiteren Verwendung in eine private
Bitmap umkopiert. Die Bitmap der Font-Engine kann daher über ReleaseInfo()
sofort wieder freigegeben werden. Wer Fragen zum Programm oder dessen Funktionsweise
hat, kann sich gern an den Autor per E-Mail wenden: michael@meicky-soft.de.
Bis zum nächsten Teil, in dem es um die PostScript-Fonts geht, wünschen
wir Ihnen viel Spaß beim Spielen mit dem Font-Viewer. Das Archiv mit den
Dateien finden Sie auf der Heft-CD zum aktuellen Heft (Verzeichnis Amiga-Magazin/
Font-Kurs) bzw. nach Erscheinen des Hefts auf der Internetseite des Amiga Magazin.
lb
Kommentare, Fragen, Korrekturen und Kritik bitte an Webmaster
AMIGA schicken.
Zuletzt aktualisiert am 12. Februar 2003, Michael Christoph.