mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-05-31 13:42:59 +02:00
337 lines
9.8 KiB
ObjectPascal
337 lines
9.8 KiB
ObjectPascal
{
|
|
$Id$
|
|
This file is part of the Free Pascal run time library.
|
|
Copyright (c) 2003 by the Free Pascal development team
|
|
|
|
Basic canvas definitions.
|
|
|
|
See the file COPYING.FPC, included in this distribution,
|
|
for details about the copyright.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
**********************************************************************}
|
|
{$mode objfpc}
|
|
unit freetypeh;
|
|
|
|
{ These are not all the availlable calls from the dll, but only those
|
|
I needed for the TStringBimaps }
|
|
|
|
interface
|
|
|
|
const
|
|
{$ifdef win32}
|
|
freetypedll = 'freetype-6.dll'; // version 2.1.4
|
|
{$packrecords c}
|
|
{$else}
|
|
// I don't know what it will be ??
|
|
freetypedll = 'freetype-6.dll';
|
|
{$endif}
|
|
|
|
type
|
|
FT_Encoding = array[0..3] of char;
|
|
|
|
const
|
|
FT_FACE_FLAG_SCALABLE = 1 shl 0;
|
|
FT_FACE_FLAG_FIXED_SIZES = 1 shl 1;
|
|
FT_FACE_FLAG_FIXED_WIDTH = 1 shl 2;
|
|
FT_FACE_FLAG_SFNT = 1 shl 3;
|
|
FT_FACE_FLAG_HORIZONTAL = 1 shl 4;
|
|
FT_FACE_FLAG_VERTICAL = 1 shl 5;
|
|
FT_FACE_FLAG_KERNING = 1 shl 6;
|
|
FT_FACE_FLAG_FAST_GLYPHS = 1 shl 7;
|
|
FT_FACE_FLAG_MULTIPLE_MASTERS = 1 shl 8;
|
|
FT_FACE_FLAG_GLYPH_NAMES = 1 shl 9;
|
|
FT_FACE_FLAG_EXTERNAL_STREAM = 1 shl 10;
|
|
|
|
FT_STYLE_FLAG_ITALIC = 1 shl 0;
|
|
FT_STYLE_FLAG_BOLD = 1 shl 1;
|
|
|
|
FT_LOAD_DEFAULT = $0000;
|
|
FT_LOAD_NO_SCALE = $0001;
|
|
FT_LOAD_NO_HINTING = $0002;
|
|
FT_LOAD_RENDER = $0004;
|
|
FT_LOAD_NO_BITMAP = $0008;
|
|
FT_LOAD_VERTICAL_LAYOUT = $0010;
|
|
FT_LOAD_FORCE_AUTOHINT = $0020;
|
|
FT_LOAD_CROP_BITMAP = $0040;
|
|
FT_LOAD_PEDANTIC = $0080;
|
|
FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH = $0200;
|
|
FT_LOAD_NO_RECURSE = $0400;
|
|
FT_LOAD_IGNORE_TRANSFORM = $0800;
|
|
FT_LOAD_MONOCHROME = $1000;
|
|
FT_LOAD_LINEAR_DESIGN = $2000;
|
|
|
|
ft_glyph_format_none = $00000000;
|
|
ft_glyph_format_composite = $636F6D70; //comp 099 111 109 112
|
|
ft_glyph_format_bitmap = $62697473; //bits 098 105 116 115
|
|
ft_glyph_format_outline = $6F75746C; //outl 111 117 116 108
|
|
ft_glyph_format_plotter = $706C6F74; //plot 112 108 111 116
|
|
|
|
FT_ENCODING_MS_SYMBOL : FT_Encoding = 'symb';
|
|
FT_ENCODING_UNICODE : FT_Encoding = 'unic';
|
|
FT_ENCODING_MS_SJIS : FT_Encoding = 'sjis';
|
|
FT_ENCODING_MS_GB2312 : FT_Encoding = 'gb ';
|
|
FT_ENCODING_MS_BIG5 : FT_Encoding = 'big5';
|
|
FT_ENCODING_MS_WANSUNG : FT_Encoding = 'wans';
|
|
FT_ENCODING_MS_JOHAB : FT_Encoding = 'joha';
|
|
FT_ENCODING_ADOBE_STANDARD : FT_Encoding = 'ADOB';
|
|
FT_ENCODING_ADOBE_EXPERT : FT_Encoding = 'ADBE';
|
|
FT_ENCODING_ADOBE_CUSTOM : FT_Encoding = 'ADBC';
|
|
FT_ENCODING_ADOBE_LATIN_1 : FT_Encoding = 'lat1';
|
|
FT_ENCODING_OLD_LATIN_2 : FT_Encoding = 'lat2';
|
|
FT_ENCODING_APPLE_ROMAN : FT_Encoding = 'armn';
|
|
|
|
ft_glyph_bbox_unscaled = 0; //* return unscaled font units */
|
|
ft_glyph_bbox_subpixels = 0; //* return unfitted 26.6 coordinates */
|
|
ft_glyph_bbox_gridfit = 1; //* return grid-fitted 26.6 coordinates */
|
|
ft_glyph_bbox_truncate = 2; //* return coordinates in integer pixels */
|
|
ft_glyph_bbox_pixels = 3; //* return grid-fitted pixel coordinates */
|
|
|
|
FT_KERNING_DEFAULT = 0;
|
|
FT_KERNING_UNFITTED = 1;
|
|
FT_KERNING_UNSCALED = 2;
|
|
|
|
|
|
type
|
|
|
|
FT_Bool = boolean;
|
|
FT_FWord = smallint;
|
|
FT_UFWord = word;
|
|
FT_Char = char;
|
|
FT_Byte = byte;
|
|
FT_String = char;
|
|
FT_Short = smallint;
|
|
FT_UShort = word;
|
|
FT_Int = longint;
|
|
FT_UInt = longword;
|
|
FT_Long = longint;
|
|
FT_ULong = longword;
|
|
FT_F2Dot14 = smallint;
|
|
FT_F26Dot6 = longint;
|
|
FT_Fixed = longint;
|
|
FT_Error = longint;
|
|
FT_Pointer = pointer;
|
|
FT_Pos = longint;
|
|
//FT_Offset = size_t;
|
|
//FT_PtrDist = size_t;
|
|
|
|
FT_Render_Mode = (FT_RENDER_MODE_NORMAL, FT_RENDER_MODE_LIGHT,
|
|
FT_RENDER_MODE_MONO, FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V,
|
|
FT_RENDER_MODE_MAX);
|
|
|
|
FT_UnitVector_ = record
|
|
x : FT_F2Dot14;
|
|
y : FT_F2Dot14;
|
|
end;
|
|
FT_UnitVector = FT_UnitVector_;
|
|
|
|
FT_Matrix = record
|
|
xx : FT_Fixed;
|
|
xy : FT_Fixed;
|
|
yx : FT_Fixed;
|
|
yy : FT_Fixed;
|
|
end;
|
|
PFT_Matrix = ^FT_Matrix;
|
|
|
|
FT_Data = record
|
|
pointer : ^FT_Byte;
|
|
length : FT_Int;
|
|
end;
|
|
|
|
FT_Generic_Finalizer = procedure (AnObject:pointer);cdecl;
|
|
|
|
FT_Generic = record
|
|
data : pointer;
|
|
finalizer : FT_Generic_Finalizer;
|
|
end;
|
|
|
|
FT_Glyph_Metrics = record
|
|
width : FT_Pos;
|
|
height : FT_Pos;
|
|
horiBearingX : FT_Pos;
|
|
horiBearingY : FT_Pos;
|
|
horiAdvance : FT_Pos;
|
|
vertBearingX : FT_Pos;
|
|
vertBearingY : FT_Pos;
|
|
vertAdvance : FT_Pos;
|
|
end;
|
|
|
|
FT_Bitmap_Size = record
|
|
height : FT_Short;
|
|
width : FT_Short;
|
|
end;
|
|
AFT_Bitmap_Size = array [0..1023] of FT_Bitmap_Size;
|
|
PFT_Bitmap_Size = ^AFT_Bitmap_Size;
|
|
|
|
FT_Vector = record
|
|
x : FT_Pos;
|
|
y : FT_Pos;
|
|
end;
|
|
PFT_Vector = ^FT_Vector;
|
|
|
|
FT_BBox = record
|
|
xMin, yMin : FT_Pos;
|
|
xMax, yMax : FT_Pos;
|
|
end;
|
|
PFT_BBox = ^FT_BBox;
|
|
|
|
FT_Bitmap = record
|
|
rows : integer;
|
|
width : integer;
|
|
pitch : integer;
|
|
buffer : pointer;
|
|
num_grays : shortint;
|
|
pixel_mode : char;
|
|
palette_mode : char;
|
|
palette : pointer;
|
|
end;
|
|
|
|
FT_Outline = record
|
|
n_contours,
|
|
n_points : smallint;
|
|
points : PFT_Vector;
|
|
tags : pchar;
|
|
contours : ^smallint;
|
|
flags : integer;
|
|
end;
|
|
|
|
FT_Size_Metrics = record
|
|
x_ppem : FT_UShort;
|
|
y_ppem : FT_UShort;
|
|
x_scale : FT_Fixed;
|
|
y_scale : FT_Fixed;
|
|
ascender : FT_Pos;
|
|
descender : FT_Pos;
|
|
height : FT_Pos;
|
|
max_advance : FT_Pos;
|
|
end;
|
|
|
|
|
|
PFT_Library = ^TFT_Library;
|
|
//PPFT_Library = ^PFT_Library;
|
|
PFT_Face = ^TFT_Face;
|
|
//PPFT_Face = ^PFT_Face;
|
|
PFT_Charmap = ^TFT_Charmap;
|
|
PPFT_Charmap = ^PFT_Charmap;
|
|
PFT_GlyphSlot = ^TFT_GlyphSlot;
|
|
PFT_Subglyph = ^TFT_Subglyph;
|
|
PFT_Size = ^TFT_Size;
|
|
|
|
PFT_Glyph = ^TFT_Glyph;
|
|
//PPFT_Glyph = ^PFT_Glyph;
|
|
PFT_BitmapGlyph = ^TFT_BitmapGlyph;
|
|
PFT_OutlineGlyph = ^TFT_OutlineGlyph;
|
|
|
|
|
|
TFT_Library = record
|
|
end;
|
|
|
|
TFT_Charmap = record
|
|
face : PFT_Face;
|
|
encoding : FT_Encoding;
|
|
platform_id, encoding_id : FT_UShort;
|
|
end;
|
|
|
|
TFT_Size = record
|
|
face : PFT_Face;
|
|
generic : FT_Generic;
|
|
metrics : FT_Size_Metrics;
|
|
//internal : FT_Size_Internal;
|
|
end;
|
|
|
|
TFT_Subglyph = record // TODO
|
|
end;
|
|
|
|
TFT_GlyphSlot = record
|
|
alibrary : PFT_Library;
|
|
face : PFT_Face;
|
|
next : PFT_GlyphSlot;
|
|
flags : FT_UInt;
|
|
generic : FT_Generic;
|
|
metrics : FT_Glyph_Metrics;
|
|
linearHoriAdvance : FT_Fixed;
|
|
linearVertAdvance : FT_Fixed;
|
|
advance : FT_Vector;
|
|
format : longword;
|
|
bitmap : FT_Bitmap;
|
|
bitmap_left : FT_Int;
|
|
bitmap_top : FT_Int;
|
|
outline : FT_Outline;
|
|
num_subglyphs : FT_UInt;
|
|
subglyphs : PFT_SubGlyph;
|
|
control_data : pointer;
|
|
control_len : longint;
|
|
other : pointer;
|
|
end;
|
|
|
|
TFT_Face = record
|
|
num_faces : FT_Long;
|
|
face_index : FT_Long;
|
|
face_flags : FT_Long;
|
|
style_flags : FT_Long;
|
|
num_glyphs : FT_Long;
|
|
family_name : pchar;
|
|
style_name : pchar;
|
|
num_fixed_sizes : FT_Int;
|
|
available_sizes : PFT_Bitmap_Size; // is array
|
|
num_charmaps : FT_Int;
|
|
charmaps : PPFT_CharMap; // is array
|
|
generic : FT_Generic;
|
|
bbox : FT_BBox;
|
|
units_per_EM : FT_UShort;
|
|
ascender : FT_Short;
|
|
descender : FT_Short;
|
|
height : FT_Short;
|
|
max_advance_width : FT_Short;
|
|
max_advance_height : FT_Short;
|
|
underline_position : FT_Short;
|
|
underline_thickness : FT_Short;
|
|
glyph : PFT_GlyphSlot;
|
|
size : PFT_Size;
|
|
charmap : PFT_CharMap;
|
|
end;
|
|
|
|
TFT_Glyph = record
|
|
FTlibrary : PFT_Library;
|
|
clazz : pointer;
|
|
aFormat : longword;
|
|
advance : FT_Vector;
|
|
end;
|
|
|
|
TFT_BitmapGlyph = record
|
|
root : TFT_Glyph;
|
|
left, top : FT_Int;
|
|
bitmap : FT_Bitmap;
|
|
end;
|
|
|
|
TFT_OutlineGlyph = record
|
|
root : TFT_Glyph;
|
|
outline : FT_Outline;
|
|
end;
|
|
|
|
|
|
function FT_Init_FreeType(var alibrary:PFT_Library) : integer; cdecl; external freetypedll name 'FT_Init_FreeType';
|
|
function FT_Done_FreeType(alibrary:PFT_Library) : integer; cdecl; external freetypedll name 'FT_Done_FreeType';
|
|
procedure FT_Library_Version(alibrary:PFT_Library; var amajor,aminor,apatch:integer); cdecl; external freetypedll name 'FT_Library_Version';
|
|
|
|
function FT_New_Face(alibrary:PFT_Library; filepathname:pchar; face_index:integer; var aface:PFT_Face):integer; cdecl; external freetypedll name 'FT_New_Face';
|
|
function FT_Set_Pixel_Sizes(face:PFT_Face; pixel_width,pixel_height:FT_UInt) : integer; cdecl; external freetypedll name 'FT_Set_Pixel_Sizes';
|
|
function FT_Set_Char_Size(face:PFT_Face; char_width,char_height:FT_F26dot6;horz_res, vert_res:FT_UInt) : integer; cdecl; external freetypedll name 'FT_Set_Char_Size';
|
|
function FT_Get_Char_Index(face:PFT_Face; charcode:FT_ULong):FT_UInt; cdecl; external freetypedll name 'FT_Get_Char_Index';
|
|
function FT_Load_Glyph(face:PFT_Face; glyph_index:FT_UInt ;load_flags:longint):integer; cdecl; external freetypedll name 'FT_Load_Glyph';
|
|
function FT_Get_Kerning(face:PFT_Face; left_glyph, right_glyph, kern_mode:FT_UInt; var akerning:FT_Vector) : integer; cdecl; external freetypedll name 'FT_Get_Kerning';
|
|
|
|
function FT_Get_Glyph(slot:PFT_GlyphSlot; var aglyph:PFT_Glyph) : integer; cdecl; external freetypedll name 'FT_Get_Glyph';
|
|
function FT_Glyph_Transform(glyph:PFT_Glyph; matrix:PFT_Matrix; delta:PFT_Vector) : integer; cdecl; external freetypedll name 'FT_Glyph_Transform';
|
|
function FT_Glyph_Copy(source:PFT_Glyph; var target:PFT_Glyph): integer; cdecl; external freetypedll name 'FT_Glyph_Copy';
|
|
procedure FT_Glyph_Get_CBox(glyph:PFT_Glyph;bbox_mode:FT_UInt;var acbox:FT_BBox); cdecl; external freetypedll name 'FT_Glyph_Get_CBox';
|
|
function FT_Glyph_To_Bitmap(var the_glyph:PFT_Glyph;render_mode:FT_Render_Mode;origin:PFT_Vector; destroy:FT_Bool):integer; cdecl; external freetypedll name 'FT_Glyph_To_Bitmap';
|
|
procedure FT_Done_Glyph (glyph:PFT_Glyph); cdecl; external freetypedll name 'FT_Done_Glyph';
|
|
|
|
implementation
|
|
|
|
end.
|