Im Ordner c:\lazarus\fpc\<version>\source\packages\fcl-pdf\src\ befinden sich neben PDF Dingen True Type Font Units.
Ich studiere jetzt seit Sonntag den Quelltext, habe aber noch nicht herausgefunden, wie ich damit einen geladenen True Type Font auch anzeigen kann.
Ich habe folgenden Ansatz:
Code: Alles auswählen
program fpttftest;
{mode objfpc}{$H+}
uses
fpttf,
fpttfsubsetter,
fpttfencodings,
fpfonttextmapping,
fpparsettf;
{$I fontmetrics_stpdf.inc}
type
TFontManager = class
private
FontSubs: TFontSubSetter; //Die Klasse aus der Unit fpttfsubsetter.pp
FontFile: TFontFileInfo; //Die Klasse aus der Unit fpparsettf um die Fontdatei zu laden und auszulesen
MappingL: TTextMappingList; //Um die Glyphs in eine Liste zu bringen. Glyphindex stimmt nicht mit Zeichenindex überein, deshalb muss da eine Zuordnung
public //aufgebaut werden
constructor Create(AFontFileName: String);
destructor Destroy; override;
procedure printtextxy(X,Y: Integer; Text: String; Color: longword);
end;
constructor Create(AFontFileName: String);
begin
FontFile: TFontFileInfo.Create;
FontFile.Filename := AFontFilename;
MappingL := TTextMappingList.Create;
FontSubs := TFontSubSetter.Create(FontFile, MappingL);
end;
destructor Destroy;
begin
FontSubs.Free;
inherited Destroy;
end;
procedure printtextxy(
X,Y: Integer;
Text: String; //Auszugebender Text unter Benutzung des Fonts, der Text gibt mit seinen Zeichencodes den Char Index, den ich brauche um den richtigen Glyphen
//aus der TextmappingList auszuwählen, so verstehe ich den Sinn dieser Textmappinglist.
Color: longword //Textfarbe
);
begin
//Welche Daten aus den ttf Headren muss ich wie verwenden um die Zeichen darzustellen. Zur Ausgabe soll eine PutPixel Routine dienen, aber die braucht die richtigen Daten aus
//den Headern. Freetype nutzt Glpyps, die in Bitmaps umgewandelt werden, aber wie macht fpttf das?
end;
var
FontManager: TFontManager;
procedure LoadFont(AFileName: String);
begin
FontManager := TFontManager.Create(AFilename);
end;
begin
LoadFont(Filename);
prinntextxy(50,50,'Mein TrueType Font!', colgreen);
end.
Wie also bekomme ich die richtigen Daten zur Anzeige der Fontzeichen?