parent
8728f294bc
commit
3b2c50eb3b
10 changed files with 1141 additions and 115 deletions
@ -0,0 +1,451 @@ |
||||
/***************************************************************************/ |
||||
/* */ |
||||
/* ftcache.h */ |
||||
/* */ |
||||
/* FreeType Cache subsystem */ |
||||
/* */ |
||||
/* Copyright 1996-2000 by */ |
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */ |
||||
/* */ |
||||
/* This file is part of the FreeType project, and may only be used, */ |
||||
/* modified, and distributed under the terms of the FreeType project */ |
||||
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ |
||||
/* this file you indicate that you have read the license and */ |
||||
/* understand and accept it fully. */ |
||||
/* */ |
||||
/***************************************************************************/ |
||||
|
||||
#ifndef FTCACHE_H |
||||
#define FTCACHE_H |
||||
|
||||
#include <freetype/ftglyph.h> |
||||
|
||||
|
||||
|
||||
/**************************************************************************/ |
||||
/**************************************************************************/ |
||||
/**************************************************************************/ |
||||
/***** *****/ |
||||
/***** BASIC TYPE DEFINITIONS *****/ |
||||
/***** *****/ |
||||
/**************************************************************************/ |
||||
/**************************************************************************/ |
||||
/**************************************************************************/ |
||||
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* |
||||
* <Type> |
||||
* FTC_FaceID |
||||
* |
||||
* <Description> |
||||
* a generic pointer type that is used to identity face objects. |
||||
* the content of such objects is application-dependent |
||||
* |
||||
**************************************************************************/ |
||||
|
||||
typedef FT_Pointer FTC_FaceID; |
||||
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* |
||||
* <FuncType> |
||||
* FTC_Face_Requester |
||||
* |
||||
* <Description> |
||||
* a callback function provided by client applications. It is used |
||||
* to translate a given FTC_FaceID into a new valid FT_Face object |
||||
* |
||||
* <Input> |
||||
* face_id :: the face id to resolve |
||||
* library :: handle to a FreeType library object |
||||
* data :: application-provided request data |
||||
* |
||||
* <Output> |
||||
* aface :: a new FT_Face handle |
||||
* |
||||
* <Return> |
||||
* Error code. 0 means success |
||||
* |
||||
**************************************************************************/ |
||||
|
||||
typedef FT_Error (*FTC_Face_Requester)( FTC_FaceID face_id, |
||||
FT_Library library, |
||||
FT_Pointer request_data,
|
||||
FT_Face* aface ); |
||||
|
||||
|
||||
/**************************************************************************
|
||||
* |
||||
* <Struct> |
||||
* FTC_SizeRec |
||||
* |
||||
* <Description> |
||||
* A simple structure used to describe a given "font size" to the |
||||
* cache manager |
||||
* |
||||
* <Fields> |
||||
* face_id :: id of face to use |
||||
* pix_width :: character width in integer pixels |
||||
* pix_height :: character height in integer pixels |
||||
* |
||||
**************************************************************************/ |
||||
|
||||
typedef struct FTC_SizeRec_ |
||||
{ |
||||
FTC_FaceID face_id; |
||||
FT_UShort pix_width; |
||||
FT_UShort pix_height; |
||||
|
||||
} FTC_SizeRec; |
||||
|
||||
|
||||
/**************************************************************************
|
||||
* |
||||
* <Type> |
||||
* FTC_SizeID |
||||
* |
||||
* <Description> |
||||
* A simple handle to a FTC_SizeRec structure |
||||
* |
||||
**************************************************************************/ |
||||
|
||||
typedef FTC_SizeRec* FTC_SizeID; |
||||
|
||||
|
||||
|
||||
/**************************************************************************/ |
||||
/**************************************************************************/ |
||||
/**************************************************************************/ |
||||
/***** *****/ |
||||
/***** CACHE MANAGER OBJECT *****/ |
||||
/***** *****/ |
||||
/**************************************************************************/ |
||||
/**************************************************************************/ |
||||
/**************************************************************************/ |
||||
|
||||
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* |
||||
* <Type> |
||||
* FTC_Manager |
||||
* |
||||
* <Description> |
||||
* This object is used to cache one or more FT_Face object, along with |
||||
* corresponding FT_Size objects. |
||||
*
|
||||
**************************************************************************/ |
||||
|
||||
typedef struct FTC_ManagerRec_* FTC_Manager; |
||||
|
||||
|
||||
/**************************************************************************
|
||||
* |
||||
* <Function> |
||||
* FTC_Manager_New |
||||
* |
||||
* <Description> |
||||
* Create a new cache manager. |
||||
* |
||||
* <Input> |
||||
* library :: the parent FreeType library handle to use |
||||
* |
||||
* requester :: an application-provided callback used to translate |
||||
* face IDs into real FT_Face objects |
||||
* |
||||
* req_data :: a generic pointer that is passed to the requester |
||||
* each time it is called (see FTC_Face_Requester) |
||||
* |
||||
* <Output> |
||||
* amanager :: handle to new manager object. 0 in case of failure |
||||
* |
||||
* <Return> |
||||
* Error code. 0 means success |
||||
* |
||||
**************************************************************************/ |
||||
|
||||
FT_EXPORT_DEF( FT_Error ) FTC_Manager_New( FT_Library library, |
||||
FTC_Face_Requester requester, |
||||
FT_Pointer req_data, |
||||
FTC_Manager* amanager ); |
||||
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* |
||||
* <Function> |
||||
* FTC_Manager_Reset |
||||
* |
||||
* <Description> |
||||
* Empty a given cache manager. This simply gets rid of all the |
||||
* currently cached FT_Face & FT_Size objects within the manager |
||||
* |
||||
* <Input> |
||||
* manager :: handle to manager |
||||
* |
||||
**************************************************************************/ |
||||
|
||||
FT_EXPORT_DEF( void ) FTC_Manager_Reset( FTC_Manager manager ); |
||||
|
||||
|
||||
/**************************************************************************
|
||||
* |
||||
* <Function> |
||||
* FTC_Manager_Done |
||||
* |
||||
* <Description> |
||||
* destroys a given manager after emptying it.. |
||||
* |
||||
* <Input> |
||||
* manager :: handle to target cache manager object |
||||
* |
||||
**************************************************************************/ |
||||
|
||||
FT_EXPORT_DEF( void ) FTC_Manager_Done( FTC_Manager manager ); |
||||
|
||||
|
||||
/**************************************************************************
|
||||
* |
||||
* <Function> |
||||
* FTC_Manager_Lookup_Face |
||||
* |
||||
* <Description> |
||||
* retrieves the FT_Face that corresponds to a given face ID through |
||||
* a cache manager. |
||||
* |
||||
* <Input> |
||||
* manager :: handle to cache manager |
||||
* face_id :: ID of face object |
||||
* |
||||
* <Output> |
||||
* aface :: handle to face object |
||||
* |
||||
* <Return> |
||||
* Error code. 0 means success |
||||
* |
||||
* <Note> |
||||
* The returned FT_Face object is always owned by the manager, you |
||||
* should never try to discard it yourself.. |
||||
* |
||||
* The FT_Face object doesn't necessarily have a current size object |
||||
* (i.e. face->size can be 0). If you need a specific "font size", |
||||
* use FTC_Manager_Lookup_Size instead.. |
||||
* |
||||
* Never change the face's transform (i.e. NEVER CALL FT_Set_Transform) |
||||
* on a returned face. If you need to transform glyphs, do it yourself |
||||
* after glyph loading.. |
||||
* |
||||
**************************************************************************/ |
||||
|
||||
FT_EXPORT_DEF( FT_Error ) FTC_Manager_Lookup_Face( FTC_Manager manager, |
||||
FTC_FaceID face_id, |
||||
FT_Face* aface ); |
||||
|
||||
|
||||
/**************************************************************************
|
||||
* |
||||
* <Function> |
||||
* FTC_Manager_Lookup_Size |
||||
* |
||||
* <Description> |
||||
* retrieves the FT_Face & FT_Size that correspond to a given |
||||
* FTC_SizeID |
||||
* |
||||
* <Input> |
||||
* manager :: handle to cache manager. |
||||
* size_id :: ID of the "font size" to use |
||||
* |
||||
* <InOut> |
||||
* aface :: ptr to handle to face object. Set to 0 if you don't need it |
||||
* asize :: ptr to handle to size object. Set to 0 if you don't need it |
||||
* |
||||
* <Return> |
||||
* Error code. 0 means success |
||||
* |
||||
* <Note> |
||||
* The returned FT_Face object is always owned by the manager, you |
||||
* should never try to discard it yourself.. |
||||
* |
||||
* Never change the face's transform (i.e. NEVER CALL FT_Set_Transform) |
||||
* on a returned face. If you need to transform glyphs, do it yourself |
||||
* after glyph loading.. |
||||
* |
||||
* The returned FT_Size object is always owned by the manager, you |
||||
* should never try to discard it, NEVER CHANGE ITS SETTINGS THROUGH |
||||
* FT_Set_Pixel_Sizes OR FT_Set_Char_Size !! |
||||
* |
||||
* The returned size object is the face's current size, which means |
||||
* that you can call FT_Load_Glyph with the face if you need to.. |
||||
* |
||||
**************************************************************************/ |
||||
|
||||
FT_EXPORT_DEF( FT_Error ) FTC_Manager_Lookup_Size( FTC_Manager manager, |
||||
FTC_SizeID size_id, |
||||
FT_Face* aface, |
||||
FT_Size* asize ); |
||||
|
||||
|
||||
/**************************************************************************/ |
||||
/**************************************************************************/ |
||||
/**************************************************************************/ |
||||
/***** *****/ |
||||
/***** IMAGE CACHE OBJECT *****/ |
||||
/***** *****/ |
||||
/**************************************************************************/ |
||||
/**************************************************************************/ |
||||
/**************************************************************************/ |
||||
|
||||
|
||||
/**************************************************************************
|
||||
* |
||||
* <Enum> |
||||
* FTC_Image_Type |
||||
* |
||||
* <Description> |
||||
* An enumeration used to list the types of glyph images found in a |
||||
* glyph image cache. |
||||
* |
||||
* <Fields> |
||||
* ftc_image_mono :: monochrome bitmap glyphs |
||||
* ftc_image_grays :: anti-aliased bitmap glyphs |
||||
* ftc_image_outline :: scaled (and hinted) outline glyphs |
||||
* ftc_master_outline :: unscaled original outline glyphs |
||||
* |
||||
* <Note> |
||||
* other types may be defined in the future |
||||
* |
||||
**************************************************************************/ |
||||
|
||||
typedef enum FTC_Image_Type_ |
||||
{ |
||||
ftc_image_mono = 0, /* monochrome bitmap */ |
||||
ftc_image_grays, /* anti-aliased bitmap */ |
||||
ftc_image_outline, /* scaled outline */ |
||||
ftc_image_master_outline /* original outline */ |
||||
|
||||
} FTC_Image_Type; |
||||
|
||||
|
||||
/**************************************************************************
|
||||
* |
||||
* <Struct> |
||||
* FTC_Image_Desc |
||||
* |
||||
* <Description> |
||||
* A simple structure used to describe a given glyph image category |
||||
* |
||||
* <Fields> |
||||
* size :: a FTC_SizeRec used to describe the glyph's face & size |
||||
* image_type :: the glyph image's type |
||||
* |
||||
**************************************************************************/ |
||||
|
||||
typedef struct FTC_Image_Desc_ |
||||
{ |
||||
FTC_SizeRec size; |
||||
FT_UInt image_type; |
||||
|
||||
} FTC_Image_Desc; |
||||
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* |
||||
* <Type> |
||||
* FTC_Image_Cache |
||||
* |
||||
* <Description> |
||||
* A handle to an glyph image cache object.. They are designed to |
||||
* hold many distinct glyph images, while not exceeding a certain |
||||
* memory threshold.. |
||||
* |
||||
**************************************************************************/ |
||||
|
||||
typedef struct FTC_Image_CacheRec_* FTC_Image_Cache;
|
||||
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* |
||||
* <Function> |
||||
* FTC_Image_Cache_New |
||||
* |
||||
* <Description> |
||||
* Create a new glyph image cache. |
||||
* |
||||
* <Input> |
||||
* manager :: parent manager for the image cache |
||||
* |
||||
* max_bytes :: the maximum amount of memory that will be used to |
||||
* store glyph images |
||||
* |
||||
* <Output> |
||||
* acache :: handle to new glyph image cache object |
||||
* |
||||
* <Return> |
||||
* Error code. 0 means success |
||||
* |
||||
**************************************************************************/ |
||||
|
||||
FT_EXPORT_DEF( FT_Error ) FTC_Image_Cache_New( FTC_Manager manager, |
||||
FT_ULong max_bytes, |
||||
FTC_Image_Cache* acache ); |
||||
|
||||
/**************************************************************************
|
||||
* |
||||
* <Function> |
||||
* FTC_Image_Cache_Done |
||||
* |
||||
* <Description> |
||||
* Destroys a given glyph image cache (and all glyphs within it). |
||||
* |
||||
* <Input> |
||||
* manager :: parent manager for the image cache |
||||
* |
||||
**************************************************************************/ |
||||
|
||||
FT_EXPORT_DEF( void ) FTC_Image_Cache_Done( FTC_Image_Cache cache ); |
||||
|
||||
|
||||
/**************************************************************************
|
||||
* |
||||
* <Function> |
||||
* FTC_Image_Cache_Lookup |
||||
* |
||||
* <Description> |
||||
* Retrieve a given glyph image from a glyph image cache. |
||||
* |
||||
* <Input> |
||||
* cache :: handle to source glyph image cache |
||||
* desc :: pointer to a glyph image descriptor |
||||
* gindex :: index of glyph to retrieve |
||||
* |
||||
* <Output> |
||||
* aglyph :: the corresponding FT_Glyph object. 0 in case of failure |
||||
* |
||||
* <Return> |
||||
* Error code. 0 means success |
||||
* |
||||
* <Note> |
||||
* the returned glyph is owned and manager by the glyph image cache, |
||||
* never try to transform or discard it manually. You can however |
||||
* create a copy with FT_Glyph_Copy and modify the new one at will. |
||||
* |
||||
* Because the glyph image cache limits the total amount of memory |
||||
* taken by the glyphs it holds, the returned glyph might disappear |
||||
* on a later invocation of this function !! It's a cache after all ;-) |
||||
* |
||||
**************************************************************************/ |
||||
|
||||
FT_EXPORT_DEF( FT_Error ) FTC_Image_Cache_Lookup( |
||||
FTC_Image_Cache cache, |
||||
FTC_Image_Desc* desc, |
||||
FT_UInt gindex, |
||||
FT_Glyph* aglyph ); |
||||
|
||||
|
||||
#endif /* FTCACHE_H */ |
@ -0,0 +1,36 @@ |
||||
/***************************************************************************/ |
||||
/* */ |
||||
/* ftcache.c */ |
||||
/* */ |
||||
/* The FreeType Caching sub-system */ |
||||
/* */ |
||||
/* Copyright 1996-2000 by */ |
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */ |
||||
/* */ |
||||
/* This file is part of the FreeType project, and may only be used, */ |
||||
/* modified, and distributed under the terms of the FreeType project */ |
||||
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ |
||||
/* this file you indicate that you have read the license and */ |
||||
/* understand and accept it fully. */ |
||||
/* */ |
||||
/***************************************************************************/ |
||||
|
||||
|
||||
#define FT_MAKE_OPTION_SINGLE_OBJECT |
||||
|
||||
#ifdef FT_FLAT_COMPILE |
||||
|
||||
#include "ftlru.c" |
||||
#include "ftcmanag.c" |
||||
#include "ftcimage.c" |
||||
|
||||
#else |
||||
|
||||
#include <cache/ftlru.c> |
||||
#include <cache/ftcmanag.c> |
||||
#include <cache/ftcimage.c> |
||||
|
||||
#endif |
||||
|
||||
|
||||
/* END */ |
@ -0,0 +1,70 @@ |
||||
#
|
||||
# FreeType 2 Cache configuration rules
|
||||
#
|
||||
|
||||
|
||||
# Copyright 1996-2000 by
|
||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
#
|
||||
# This file is part of the FreeType project, and may only be used, modified,
|
||||
# and distributed under the terms of the FreeType project license,
|
||||
# LICENSE.TXT. By continuing to use, modify, or distribute this file you
|
||||
# indicate that you have read the license and understand and accept it
|
||||
# fully.
|
||||
|
||||
|
||||
# Cache driver directory
|
||||
#
|
||||
Cache_DIR := $(SRC_)cache
|
||||
Cache_DIR_ := $(Cache_DIR)$(SEP)
|
||||
|
||||
|
||||
# compilation flags for the driver
|
||||
#
|
||||
Cache_COMPILE := $(FT_COMPILE)
|
||||
|
||||
|
||||
# Cache driver sources (i.e., C files)
|
||||
#
|
||||
Cache_DRV_SRC := $(Cache_DIR_)ftlru.c \
|
||||
$(Cache_DIR_)ftcmanag.c \
|
||||
$(Cache_DIR_)ftcimage.c
|
||||
|
||||
# Cache driver headers
|
||||
#
|
||||
Cache_DRV_H := $(Cache_DRV_SRC:%c=%h)
|
||||
|
||||
|
||||
# Cache driver object(s)
|
||||
#
|
||||
# Cache_DRV_OBJ_M is used during `multi' builds.
|
||||
# Cache_DRV_OBJ_S is used during `single' builds.
|
||||
#
|
||||
Cache_DRV_OBJ_M := $(Cache_DRV_SRC:$(Cache_DIR_)%.c=$(OBJ_)%.$O)
|
||||
Cache_DRV_OBJ_S := $(OBJ_)ftcache.$O
|
||||
|
||||
# Cache driver source file for single build
|
||||
#
|
||||
Cache_DRV_SRC_S := $(Cache_DIR_)ftcache.c
|
||||
|
||||
|
||||
# Cache driver - single object
|
||||
#
|
||||
$(Cache_DRV_OBJ_S): $(Cache_DRV_SRC_S) $(Cache_DRV_SRC) \
|
||||
$(FREETYPE_H) $(Cache_DRV_H)
|
||||
$(Cache_COMPILE) $T$@ $(Cache_DRV_SRC_S)
|
||||
|
||||
|
||||
# Cache driver - multiple objects
|
||||
#
|
||||
$(OBJ_)%.$O: $(Cache_DIR_)%.c $(FREETYPE_H) $(Cache_DRV_H) |
||||
$(Cache_COMPILE) $T$@ $<
|
||||
|
||||
|
||||
# update main driver object lists
|
||||
#
|
||||
DRV_OBJS_S += $(Cache_DRV_OBJ_S)
|
||||
DRV_OBJS_M += $(Cache_DRV_OBJ_M)
|
||||
|
||||
|
||||
# EOF
|
Loading…
Reference in new issue