From df3403a7538f6be86e65aa5d00a7510986baf164 Mon Sep 17 00:00:00 2001 From: Graeme Geldenhuys Date: Tue, 13 Mar 2012 11:04:46 +0200 Subject: agg: merged some more freetype header definitions into the Agg freetype file. This unit is now much closer to the one found in FPC's fcl-image package. It is confirmed!!!!! Text rendering now finally works under 64-bit linux!! :-D --- .../render/software/agg_font_freetype_lib.pas | 141 ++++++++++++++------- 1 file changed, 93 insertions(+), 48 deletions(-) (limited to 'src/corelib') diff --git a/src/corelib/render/software/agg_font_freetype_lib.pas b/src/corelib/render/software/agg_font_freetype_lib.pas index c174c64d..cd6d05bd 100644 --- a/src/corelib/render/software/agg_font_freetype_lib.pas +++ b/src/corelib/render/software/agg_font_freetype_lib.pas @@ -36,61 +36,104 @@ INTERFACE uses agg_basics ; -{ GLOBAL VARIABLES & CONSTANTS } type - FT_Encoding = array[0..3 ] of char; + FT_Encoding = array[0..3] of char; const -{$IFDEF AGG_WINDOWS } - ft_lib = 'freetype.dll'; - +{$IFDEF WINDOWS } + ft_lib = 'freetype.dll'; {$ENDIF } -{$IFDEF AGG_LINUX } - ft_lib = 'freetype.so'; - +// Linux, FreeBSD etc. +{$if defined(UNIX) and not defined(darwin)} + ft_lib = 'freetype'; {$ENDIF } -{$IFDEF AGG_MACOSX } - ft_lib = 'libfreetype'; - +// Mac OS X +{$ifdef darwin} + ft_lib = 'libfreetype'; {$ENDIF } FT_CURVE_TAG_ON = 1; FT_CURVE_TAG_CONIC = 0; FT_CURVE_TAG_CUBIC = 2; - FT_FACE_FLAG_SCALABLE = 1 shl 0; - FT_FACE_FLAG_KERNING = 1 shl 6; - - FT_ENCODING_NONE : FT_Encoding = (#0 ,#0 ,#0 ,#0 ); - - FT_LOAD_DEFAULT = $0000; - FT_LOAD_NO_HINTING = $0002; - FT_LOAD_FORCE_AUTOHINT = $0020; + 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_NONE : FT_Encoding = (#0 ,#0 ,#0 ,#0 ); + 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; - FT_RENDER_MODE_NORMAL = 0; - FT_RENDER_MODE_LIGHT = FT_RENDER_MODE_NORMAL + 1; - FT_RENDER_MODE_MONO = FT_RENDER_MODE_LIGHT + 1; - FT_RENDER_MODE_LCD = FT_RENDER_MODE_MONO + 1; - FT_RENDER_MODE_LCD_V = FT_RENDER_MODE_LCD + 1; - FT_RENDER_MODE_MAX = FT_RENDER_MODE_LCD_V + 1; - - FT_KERNING_DEFAULT = 0; - FT_KERNING_UNFITTED = 1; - FT_KERNING_UNSCALED = 2; - - FT_STYLE_FLAG_ITALIC = 1 shl 0; - FT_STYLE_FLAG_BOLD = 1 shl 1; { TYPES DEFINITION } type - FT_Byte = byte; - FT_Short = smallint; - FT_UShort = word; - FT_Int = longint; - FT_UInt = longword; - FT_Int32 = longint; + + 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_Int32 = longint; {$if defined(cpu64) and not(defined(win64) and defined(cpux86_64))} FT_Long = int64; FT_ULong = qword; @@ -100,14 +143,18 @@ type FT_ULong = longword; FT_Pos = longint; {$ENDIF} - FT_Error = longint; - FT_F26Dot6 = longint; + FT_F2Dot14 = smallint; + FT_F26Dot6 = longint; FT_Fixed = FT_Long; + FT_Error = longint; + FT_Pointer = pointer; - FT_Byte_ptr = ^FT_Byte; - FT_Short_ptr = ^FT_Short; + FT_Byte_ptr = ^FT_Byte; + FT_Short_ptr = ^FT_Short; - FT_Render_Mode = FT_Int; + 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_Library_ptr_ptr = ^FT_Library_ptr; FT_Library_ptr = ^FT_Library; @@ -362,16 +409,14 @@ end; { FT_IS_SCALABLE } function FT_IS_SCALABLE(face : FT_Face_ptr ) : boolean; begin - result:=boolean(face.face_flags and FT_FACE_FLAG_SCALABLE ); - + Result := (face.face_flags and FT_FACE_FLAG_SCALABLE) = 1; end; { FT_HAS_KERNING } function FT_HAS_KERNING(face : FT_Face_ptr ) : boolean; begin - result:=boolean(face.face_flags and FT_FACE_FLAG_KERNING ); - + Result := (face.face_flags and FT_FACE_FLAG_KERNING) = 1; end; -END. +end. -- cgit v1.2.3-70-g09d2