diff options
Diffstat (limited to 'kernel/kls_ttf/ftcommon.h')
-rw-r--r-- | kernel/kls_ttf/ftcommon.h | 307 |
1 files changed, 307 insertions, 0 deletions
diff --git a/kernel/kls_ttf/ftcommon.h b/kernel/kls_ttf/ftcommon.h new file mode 100644 index 0000000..304527f --- /dev/null +++ b/kernel/kls_ttf/ftcommon.h @@ -0,0 +1,307 @@ +/****************************************************************************/ +/* */ +/* The FreeType project -- a free and portable quality TrueType renderer. */ +/* */ +/* Copyright 2005, 2006 by */ +/* D. Turner, R.Wilhelm, and W. Lemberg */ +/* */ +/* */ +/* ftcommon.h - common routines for the FreeType demo programs. */ +/* */ +/****************************************************************************/ + +#ifndef _FT_COMMON_H_ +#define _FT_COMMON_H_ + + +#include <ft2build.h> +#include FT_FREETYPE_H + +#include FT_CACHE_H +#include FT_CACHE_MANAGER_H + +#include FT_GLYPH_H +#include FT_BITMAP_H + +#include <stdlib.h> +#include <stdarg.h> + + extern FT_Error error; + + /* forward declarations */ + extern void PanicZ( const char* message ); + +#undef NODEBUG + +#define LOG( x ) /* */ + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** DISPLAY-SPECIFIC DEFINITIONS *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + +#include "graph.h" +#include "grobjs.h" +#include "grfont.h" + + typedef struct + { + grSurface* surface; + grBitmap* bitmap; + grColor fore_color; + grColor back_color; + + } FTDemo_Display; + + grBitmap* + FTDemo_Display_New(void); + + + void + FTDemo_Display_Done(grBitmap *); + + + /* fill the bitmap with background color */ + void + FTDemo_Display_Clear(grBitmap *); + + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** FREETYPE-SPECIFIC DEFINITIONS *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + +#define MAX_GLYPHS 512 /* at most 512 glyphs in the string */ +#define MAX_GLYPH_BYTES 150000 /* 150kB for the glyph image cache */ + + + typedef struct TGlyph_ + { + FT_UInt glyph_index; + FT_Glyph image; /* the glyph image */ + + FT_Pos delta; /* delta caused by hinting */ + FT_Vector vvector; /* vert. origin => hori. origin */ + FT_Vector vadvance; /* vertical advance */ + + } TGlyph, *PGlyph; + + /* this simple record is used to model a given `installed' face */ + typedef struct TFont_ + { + const char* filepathname; + int face_index; + int cmap_index; + int num_indices; + void* file_address; /* for preloaded files */ + size_t file_size; + + } TFont, *PFont; + + enum { + LCD_MODE_AA = 0, + LCD_MODE_LIGHT, + LCD_MODE_RGB, + LCD_MODE_BGR, + LCD_MODE_VRGB, + LCD_MODE_VBGR, + N_LCD_MODES + }; + + enum { + KERNING_DEGREE_NONE = 0, + KERNING_DEGREE_LIGHT, + KERNING_DEGREE_MEDIUM, + KERNING_DEGREE_TIGHT, + N_KERNING_DEGREES, + }; + + enum { + KERNING_MODE_NONE = 0, /* 0: no kerning; */ + KERNING_MODE_NORMAL, /* 1: `kern' values */ + KERNING_MODE_SMART, /* 2: `kern' + side bearing errors */ + N_KERNING_MODES + }; + + typedef struct + { + int kerning_mode; + int kerning_degree; + FT_Fixed center; /* 0..1 */ + int vertical; /* displayed vertically? */ + FT_Matrix* matrix; /* string transformation */ + FT_Byte* gamma_ramp; /* an array of size 256 */ + + } FTDemo_String_Context; + + typedef struct + { + FT_Library library; /* the FreeType library */ + FTC_Manager cache_manager; /* the cache manager */ + FTC_ImageCache image_cache; /* the glyph image cache */ + FTC_SBitCache sbits_cache; /* the glyph small bitmaps cache */ + FTC_CMapCache cmap_cache; /* the charmap cache.. */ + + PFont* fonts; /* installed fonts */ + int num_fonts; + int max_fonts; + + int use_sbits_cache; /* toggle sbits cache */ + + /* use FTDemo_Set_Current_XXX to set the following two fields */ + PFont current_font; /* selected font */ + FTC_ImageTypeRec image_type; + + /* call FTDemo_Update_Current_Flags after setting any of the following fields */ + int hinted; /* is glyph hinting active? */ + int antialias; /* is anti-aliasing active? */ + int use_sbits; /* do we use embedded bitmaps? */ + int low_prec; /* force low precision */ + int autohint; /* force auto-hinting */ + int lcd_mode; + int preload; /* force font file preloading */ + + /* don't touch the following fields! */ + + /* used for string rendering */ + TGlyph string[MAX_GLYPHS]; + int string_length; + int string_reload; + + FT_Encoding encoding; + FT_Bitmap bitmap; /* used as bitmap conversion buffer */ + + } FTDemo_Handle; + + + FTDemo_Handle* + FTDemo_New( FT_Encoding encoding ); + + + void + FTDemo_Done( FTDemo_Handle* handle ); + + + /* install a font */ + FT_Error + FTDemo_Install_Font( FTDemo_Handle* handle, + const char* filepath ); + + + void + FTDemo_Set_Preload( FTDemo_Handle* handle, + int preload ); + + void + FTDemo_Set_Current_Font( FTDemo_Handle* handle, + PFont font ); + + void + FTDemo_Set_Current_Size( FTDemo_Handle* handle, + int pixel_size ); + + void + FTDemo_Set_Current_Pointsize( FTDemo_Handle* handle, + int point_size, + int res ); + + void + FTDemo_Update_Current_Flags( FTDemo_Handle* handle ); + + + /* charcode => glyph index of current font */ + FT_UInt + FTDemo_Get_Index( FTDemo_Handle* handle, + FT_UInt32 charcode ); + + + /* get FT_Size of current font */ + FT_Error + FTDemo_Get_Size( FTDemo_Handle* handle, + FT_Size* asize ); + + + /* convert a FT_Glyph to a grBitmap (don't free target->buffer) */ + /* if aglyf != NULL, you should FT_Glyph_Done the aglyf */ + FT_Error + FTDemo_Glyph_To_Bitmap( FTDemo_Handle* handle, + FT_Glyph glyf, + grBitmap* target, + int* left, + int* top, + int* x_advance, + int* y_advance, + FT_Glyph* aglyf ); + + /* get a grBitmap from glyph index (don't free target->buffer) */ + /* if aglyf != NULL, you should FT_Glyph_Done the aglyf */ + FT_Error + FTDemo_Index_To_Bitmap( FTDemo_Handle* handle, + FT_ULong Index, + grBitmap* target, + int* left, + int* top, + int* x_advance, + int* y_advance, + FT_Glyph* aglyf ); + + + /* given glyph index, draw a glyph on the display */ + FT_Error + FTDemo_Draw_Index( FTDemo_Handle* handle, + grBitmap* display, + int gindex, + int* pen_x, + int* pen_y); + + + /* given FT_Glyph, draw a glyph on the display */ + FT_Error + FTDemo_Draw_Glyph( FTDemo_Handle* handle, + FTDemo_Display* display, + FT_Glyph glyph, + int* pen_x, + int* pen_y); + + + /* given FT_GlyphSlot, draw a glyph on the display */ + FT_Error + FTDemo_Draw_Slot( FTDemo_Handle* handle, + FTDemo_Display* display, + FT_GlyphSlot slot, + int* pen_x, + int* pen_y); + + + /* set the string to be drawn */ + void + FTDemo_String_Set( FTDemo_Handle* handle, + const unsigned char* string ); + + + /* draw a string centered at (center_x, center_y) -- */ + /* note that handle->use_sbits_cache is not supported */ + FT_Error + FTDemo_String_Draw( FTDemo_Handle* handle, + FTDemo_Display* display, + FTDemo_String_Context* sc, + int center_x, + int center_y ); + + + /* make a FT_Encoding tag from a string */ + FT_Encoding + FTDemo_Make_Encoding_Tag( const char* s ); + + +#endif /* _FTCOMMON_H_ */ + +/* End */ |