123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392 |
- {
- 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;
- { Note that these are not all the availlable calls from the dll yet.
- This unit is used by TStringBitMaps and FTFont }
- interface
- const
- {$packrecords c}
- // Windows
- {$ifdef windows}
- freetypedll = 'freetype-6.dll'; // version 2.1.4
- {$define ft_found_platform}
- {$endif}
- // Mac OS X
- {$ifdef darwin}
- freetypedll = 'libfreetype'; // Doesn't seam to matter much.
- {$linklib freetype} // This one is the important part,
- // but you also need to pass to fpc
- // the following command:
- // -k-L/usr/X11/lib
- // or another place where it can find
- // libfreetype.dylib
- {$define ft_found_platform}
- {$endif}
- // LINUX
- {$if defined(UNIX) and not defined(darwin)}
- freetypedll = 'freetype';
- {$define ft_found_platform}
- {$endif}
- // Other platforms
- {$ifndef ft_found_platform}
- freetypedll = 'freetype';
- {$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;
- {$if defined(cpu64) and not(defined(win64) and defined(cpux86_64))}
- FT_Long = int64;
- FT_ULong = qword;
- FT_Pos = int64;
- {$ELSE}
- FT_Long = longint;
- FT_ULong = longword;
- FT_Pos = longint;
- {$ENDIF}
- FT_F2Dot14 = smallint;
- FT_F26Dot6 = longint;
- FT_Fixed = longint;
- FT_Error = longint;
- FT_Pointer = pointer;
- //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;
- PFT_Outline = ^FT_Outline;
- FT_Outline_MoveToFunc = function(const to_: PFT_Vector; user: Pointer): integer;
- FT_Outline_LineToFunc = function(const to_: PFT_Vector; user: Pointer): integer;
- FT_Outline_ConicToFunc = function(const control, to_: PFT_Vector; user: Pointer): integer;
- FT_Outline_CubicToFunc = function(const control1, control2, to_: PFT_Vector; user: Pointer): integer;
- FT_Outline_Funcs = record
- move_to: FT_Outline_MoveToFunc;
- line_to: FT_Outline_LineToFunc;
- conic_to: FT_Outline_ConicToFunc;
- cubic_to: FT_Outline_CubicToFunc;
- shift: integer;
- delta: FT_Pos;
- end;
- PFT_Outline_Funcs = ^FT_Outline_Funcs;
- 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;
- //Base Interface
- function FT_Done_Face(face: PFT_Face): integer; cdecl; external freetypedll Name 'FT_Done_Face';
- function FT_Done_FreeType(alibrary: PFT_Library): integer; cdecl; external freetypedll Name 'FT_Done_FreeType';
- function FT_Get_Char_Index(face: PFT_Face; charcode: FT_ULong): FT_UInt; cdecl; external freetypedll Name 'FT_Get_Char_Index';
- function FT_Get_Kerning(face: PFT_Face; left_glyph, right_glyph, kern_mode: FT_UInt; out akerning: FT_Vector): integer; cdecl; external freetypedll Name 'FT_Get_Kerning';
- function FT_Init_FreeType(var alibrary: PFT_Library): integer; cdecl; external freetypedll Name 'FT_Init_FreeType';
- function FT_IS_SCALABLE(face: PFT_Face): boolean;
- function FT_Load_Char(face: PFT_Face; charcode: FT_ULong; load_flags: longint): integer; cdecl; external freetypedll Name 'FT_Load_Char';
- function FT_Load_Glyph(face: PFT_Face; glyph_index: FT_UInt; load_flags: longint): integer; cdecl; external freetypedll Name 'FT_Load_Glyph';
- 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_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_Set_Pixel_Sizes(face: PFT_Face; pixel_width, pixel_height: FT_UInt): integer; cdecl; external freetypedll Name 'FT_Set_Pixel_Sizes';
- procedure FT_Set_Transform(face: PFT_Face; matrix: PFT_Matrix; delta: PFT_Vector); cdecl; external freetypedll Name 'FT_Set_Transform';
- //Outline Processing
- function FT_Outline_Decompose(outline: PFT_Outline; const func_interface: PFT_Outline_Funcs; user: Pointer): integer; cdecl; external freetypedll Name 'FT_Outline_Decompose';
- //FreeType Version
- procedure FT_Library_Version(alibrary: PFT_Library; var amajor, aminor, apatch: integer); cdecl; external freetypedll Name 'FT_Library_Version';
- //Glyph Management
- function FT_Get_Glyph(slot: PFT_GlyphSlot; out aglyph: PFT_Glyph): integer; cdecl; external freetypedll Name 'FT_Get_Glyph';
- function FT_Glyph_Copy(Source: PFT_Glyph; out target: PFT_Glyph): integer; cdecl; external freetypedll Name 'FT_Glyph_Copy';
- 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';
- function FT_Glyph_Transform(glyph: PFT_Glyph; matrix: PFT_Matrix; delta: PFT_Vector): integer; cdecl; external freetypedll Name 'FT_Glyph_Transform';
- procedure FT_Done_Glyph(glyph: PFT_Glyph); cdecl; external freetypedll Name 'FT_Done_Glyph';
- procedure FT_Glyph_Get_CBox(glyph: PFT_Glyph; bbox_mode: FT_UInt; var acbox: FT_BBox); cdecl; external freetypedll Name 'FT_Glyph_Get_CBox';
- implementation
- function FT_IS_SCALABLE(face: PFT_Face): boolean;
- begin
- Result := (face^.face_flags and FT_FACE_FLAG_SCALABLE) = 1;
- end;
- end.
|