1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/***************************************************************************/ 2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ftcache.h */ 4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* FreeType Cache subsystem (specification). */ 6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* Copyright 1996-2008, 2010, 2013 by */ 8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* David Turner, Robert Wilhelm, and Werner Lemberg. */ 9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* This file is part of the FreeType project, and may only be used, */ 11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* modified, and distributed under the terms of the FreeType project */ 12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* this file you indicate that you have read the license and */ 14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* understand and accept it fully. */ 15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/***************************************************************************/ 17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef __FTCACHE_H__ 20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define __FTCACHE_H__ 21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../ft2build.h" 24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "ftglyph.h" 25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 27ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFT_BEGIN_HEADER 28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /************************************************************************* 31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * <Section> 33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * cache_subsystem 34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * <Title> 36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Cache Sub-System 37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * <Abstract> 39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * How to cache face, size, and glyph data with FreeType~2. 40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * <Description> 42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * This section describes the FreeType~2 cache sub-system, which is used 43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * to limit the number of concurrently opened @FT_Face and @FT_Size 44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * objects, as well as caching information like character maps and glyph 45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * images while limiting their maximum memory usage. 46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Note that all types and functions begin with the `FTC_' prefix. 48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * The cache is highly portable and thus doesn't know anything about the 50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * fonts installed on your system, or how to access them. This implies 51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * the following scheme: 52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * First, available or installed font faces are uniquely identified by 54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @FTC_FaceID values, provided to the cache by the client. Note that 55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * the cache only stores and compares these values, and doesn't try to 56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * interpret them in any way. 57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Second, the cache calls, only when needed, a client-provided function 59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * to convert an @FTC_FaceID into a new @FT_Face object. The latter is 60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * then completely managed by the cache, including its termination 61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * through @FT_Done_Face. To monitor termination of face objects, the 62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * finalizer callback in the `generic' field of the @FT_Face object can 63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * be used, which might also be used to store the @FTC_FaceID of the 64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * face. 65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Clients are free to map face IDs to anything else. The most simple 67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * usage is to associate them to a (pathname,face_index) pair that is 68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * used to call @FT_New_Face. However, more complex schemes are also 69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * possible. 70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Note that for the cache to work correctly, the face ID values must be 72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * *persistent*, which means that the contents they point to should not 73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * change at runtime, or that their value should not become invalid. 74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * If this is unavoidable (e.g., when a font is uninstalled at runtime), 76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * you should call @FTC_Manager_RemoveFaceID as soon as possible, to let 77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * the cache get rid of any references to the old @FTC_FaceID it may 78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * keep internally. Failure to do so will lead to incorrect behaviour 79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * or even crashes. 80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * To use the cache, start with calling @FTC_Manager_New to create a new 82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @FTC_Manager object, which models a single cache instance. You can 83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * then look up @FT_Face and @FT_Size objects with 84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @FTC_Manager_LookupFace and @FTC_Manager_LookupSize, respectively. 85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * If you want to use the charmap caching, call @FTC_CMapCache_New, then 87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * later use @FTC_CMapCache_Lookup to perform the equivalent of 88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @FT_Get_Char_Index, only much faster. 89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * If you want to use the @FT_Glyph caching, call @FTC_ImageCache, then 91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * later use @FTC_ImageCache_Lookup to retrieve the corresponding 92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @FT_Glyph objects from the cache. 93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * If you need lots of small bitmaps, it is much more memory efficient 95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * to call @FTC_SBitCache_New followed by @FTC_SBitCache_Lookup. This 96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * returns @FTC_SBitRec structures, which are used to store small 97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * bitmaps directly. (A small bitmap is one whose metrics and 98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * dimensions all fit into 8-bit integers). 99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * We hope to also provide a kerning cache in the near future. 101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * <Order> 104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * FTC_Manager 105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * FTC_FaceID 106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * FTC_Face_Requester 107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * FTC_Manager_New 109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * FTC_Manager_Reset 110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * FTC_Manager_Done 111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * FTC_Manager_LookupFace 112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * FTC_Manager_LookupSize 113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * FTC_Manager_RemoveFaceID 114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * FTC_Node 116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * FTC_Node_Unref 117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * FTC_ImageCache 119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * FTC_ImageCache_New 120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * FTC_ImageCache_Lookup 121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * FTC_SBit 123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * FTC_SBitCache 124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * FTC_SBitCache_New 125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * FTC_SBitCache_Lookup 126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * FTC_CMapCache 128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * FTC_CMapCache_New 129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * FTC_CMapCache_Lookup 130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *************************************************************************/ 132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /***** *****/ 138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /***** BASIC TYPE DEFINITIONS *****/ 139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /***** *****/ 140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /************************************************************************* 146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @type: FTC_FaceID 148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @description: 150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * An opaque pointer type that is used to identity face objects. The 151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * contents of such objects is application-dependent. 152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * These pointers are typically used to point to a user-defined 154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * structure containing a font file path, and face index. 155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @note: 157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Never use NULL as a valid @FTC_FaceID. 158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Face IDs are passed by the client to the cache manager, which calls, 160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * when needed, the @FTC_Face_Requester to translate them into new 161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @FT_Face objects. 162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * If the content of a given face ID changes at runtime, or if the value 164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * becomes invalid (e.g., when uninstalling a font), you should 165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * immediately call @FTC_Manager_RemoveFaceID before any other cache 166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * function. 167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Failure to do so will result in incorrect behaviour or even 169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * memory leaks and crashes. 170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */ 171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef FT_Pointer FTC_FaceID; 172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /************************************************************************ 175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @functype: 177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * FTC_Face_Requester 178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @description: 180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * A callback function provided by client applications. It is used by 181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * the cache manager to translate a given @FTC_FaceID into a new valid 182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @FT_Face object, on demand. 183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * <Input> 185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * face_id :: 186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * The face ID to resolve. 187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * library :: 189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * A handle to a FreeType library object. 190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * req_data :: 192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Application-provided request data (see note below). 193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * <Output> 195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * aface :: 196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * A new @FT_Face handle. 197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * <Return> 199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * FreeType error code. 0~means success. 200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * <Note> 202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * The third parameter `req_data' is the same as the one passed by the 203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * client when @FTC_Manager_New is called. 204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * The face requester should not perform funny things on the returned 206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * face object, like creating a new @FT_Size for it, or setting a 207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * transformation through @FT_Set_Transform! 208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */ 209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef FT_Error 210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (*FTC_Face_Requester)( FTC_FaceID face_id, 211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Library library, 212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Pointer request_data, 213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Face* aface ); 214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /***** *****/ 222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /***** CACHE MANAGER OBJECT *****/ 223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /***** *****/ 224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Type> */ 232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FTC_Manager */ 233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* This object corresponds to one instance of the cache-subsystem. */ 236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* It is used to cache one or more @FT_Face objects, along with */ 237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* corresponding @FT_Size objects. */ 238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* The manager intentionally limits the total number of opened */ 240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* @FT_Face and @FT_Size objects to control memory usage. See the */ 241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* `max_faces' and `max_sizes' parameters of @FTC_Manager_New. */ 242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* The manager is also used to cache `nodes' of various types while */ 244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* limiting their total memory usage. */ 245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* All limitations are enforced by keeping lists of managed objects */ 247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* in most-recently-used order, and flushing old nodes to make room */ 248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* for new ones. */ 249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct FTC_ManagerRec_* FTC_Manager; 251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Type> */ 256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FTC_Node */ 257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* An opaque handle to a cache node object. Each cache node is */ 260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* reference-counted. A node with a count of~0 might be flushed */ 261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* out of a full cache whenever a lookup request is performed. */ 262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* If you look up nodes, you have the ability to `acquire' them, */ 264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* i.e., to increment their reference count. This will prevent the */ 265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* node from being flushed out of the cache until you explicitly */ 266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* `release' it (see @FTC_Node_Unref). */ 267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* See also @FTC_SBitCache_Lookup and @FTC_ImageCache_Lookup. */ 269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct FTC_NodeRec_* FTC_Node; 271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Function> */ 276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FTC_Manager_New */ 277ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Create a new cache manager. */ 280ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 281ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Input> */ 282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* library :: The parent FreeType library handle to use. */ 283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 284ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* max_faces :: Maximum number of opened @FT_Face objects managed by */ 285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* this cache instance. Use~0 for defaults. */ 286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* max_sizes :: Maximum number of opened @FT_Size objects managed by */ 288ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* this cache instance. Use~0 for defaults. */ 289ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* max_bytes :: Maximum number of bytes to use for cached data nodes. */ 291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Use~0 for defaults. Note that this value does not */ 292ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* account for managed @FT_Face and @FT_Size objects. */ 293ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 294ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* requester :: An application-provided callback used to translate */ 295ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* face IDs into real @FT_Face objects. */ 296ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 297ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* req_data :: A generic pointer that is passed to the requester */ 298ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* each time it is called (see @FTC_Face_Requester). */ 299ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 300ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Output> */ 301ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* amanager :: A handle to a new manager object. 0~in case of */ 302ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* failure. */ 303ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 304ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Return> */ 305ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FreeType error code. 0~means success. */ 306ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 307ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_EXPORT( FT_Error ) 308ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FTC_Manager_New( FT_Library library, 309ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt max_faces, 310ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt max_sizes, 311ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong max_bytes, 312ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FTC_Face_Requester requester, 313ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Pointer req_data, 314ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FTC_Manager *amanager ); 315ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 316ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 317ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 318ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 319ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Function> */ 320ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FTC_Manager_Reset */ 321ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 322ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 323ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Empty a given cache manager. This simply gets rid of all the */ 324ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* currently cached @FT_Face and @FT_Size objects within the manager. */ 325ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 326ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <InOut> */ 327ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* manager :: A handle to the manager. */ 328ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 329ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_EXPORT( void ) 330ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FTC_Manager_Reset( FTC_Manager manager ); 331ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 332ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 333ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 334ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 335ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Function> */ 336ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FTC_Manager_Done */ 337ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 338ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 339ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Destroy a given manager after emptying it. */ 340ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 341ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Input> */ 342ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* manager :: A handle to the target cache manager object. */ 343ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 344ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_EXPORT( void ) 345ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FTC_Manager_Done( FTC_Manager manager ); 346ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 347ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 348ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 349ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 350ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Function> */ 351ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FTC_Manager_LookupFace */ 352ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 353ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 354ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Retrieve the @FT_Face object that corresponds to a given face ID */ 355ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* through a cache manager. */ 356ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 357ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Input> */ 358ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* manager :: A handle to the cache manager. */ 359ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 360ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* face_id :: The ID of the face object. */ 361ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 362ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Output> */ 363ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* aface :: A handle to the face object. */ 364ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 365ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Return> */ 366ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FreeType error code. 0~means success. */ 367ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 368ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Note> */ 369ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* The returned @FT_Face object is always owned by the manager. You */ 370ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* should never try to discard it yourself. */ 371ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 372ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* The @FT_Face object doesn't necessarily have a current size object */ 373ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* (i.e., face->size can be~0). If you need a specific `font size', */ 374ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* use @FTC_Manager_LookupSize instead. */ 375ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 376ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Never change the face's transformation matrix (i.e., never call */ 377ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* the @FT_Set_Transform function) on a returned face! If you need */ 378ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* to transform glyphs, do it yourself after glyph loading. */ 379ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 380ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* When you perform a lookup, out-of-memory errors are detected */ 381ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* _within_ the lookup and force incremental flushes of the cache */ 382ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* until enough memory is released for the lookup to succeed. */ 383ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 384ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* If a lookup fails with `FT_Err_Out_Of_Memory' the cache has */ 385ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* already been completely flushed, and still no memory was available */ 386ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* for the operation. */ 387ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 388ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_EXPORT( FT_Error ) 389ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FTC_Manager_LookupFace( FTC_Manager manager, 390ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FTC_FaceID face_id, 391ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Face *aface ); 392ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 393ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 394ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 395ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 396ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Struct> */ 397ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FTC_ScalerRec */ 398ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 399ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 400ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* A structure used to describe a given character size in either */ 401ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* pixels or points to the cache manager. See */ 402ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* @FTC_Manager_LookupSize. */ 403ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 404ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Fields> */ 405ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* face_id :: The source face ID. */ 406ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 407ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* width :: The character width. */ 408ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 409ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* height :: The character height. */ 410ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 411ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* pixel :: A Boolean. If 1, the `width' and `height' fields are */ 412ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* interpreted as integer pixel character sizes. */ 413ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Otherwise, they are expressed as 1/64th of points. */ 414ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 415ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* x_res :: Only used when `pixel' is value~0 to indicate the */ 416ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* horizontal resolution in dpi. */ 417ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 418ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* y_res :: Only used when `pixel' is value~0 to indicate the */ 419ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* vertical resolution in dpi. */ 420ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 421ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Note> */ 422ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* This type is mainly used to retrieve @FT_Size objects through the */ 423ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* cache manager. */ 424ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 425ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct FTC_ScalerRec_ 426ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 427ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FTC_FaceID face_id; 428ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt width; 429ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt height; 430ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Int pixel; 431ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt x_res; 432ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt y_res; 433ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 434ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } FTC_ScalerRec; 435ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 436ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 437ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 438ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 439ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Struct> */ 440ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FTC_Scaler */ 441ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 442ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 443ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* A handle to an @FTC_ScalerRec structure. */ 444ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 445ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct FTC_ScalerRec_* FTC_Scaler; 446ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 447ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 448ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 449ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 450ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Function> */ 451ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FTC_Manager_LookupSize */ 452ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 453ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 454ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Retrieve the @FT_Size object that corresponds to a given */ 455ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* @FTC_ScalerRec pointer through a cache manager. */ 456ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 457ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Input> */ 458ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* manager :: A handle to the cache manager. */ 459ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 460ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* scaler :: A scaler handle. */ 461ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 462ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Output> */ 463ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* asize :: A handle to the size object. */ 464ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 465ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Return> */ 466ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FreeType error code. 0~means success. */ 467ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 468ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Note> */ 469ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* The returned @FT_Size object is always owned by the manager. You */ 470ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* should never try to discard it by yourself. */ 471ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 472ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* You can access the parent @FT_Face object simply as `size->face' */ 473ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* if you need it. Note that this object is also owned by the */ 474ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* manager. */ 475ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 476ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Note> */ 477ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* When you perform a lookup, out-of-memory errors are detected */ 478ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* _within_ the lookup and force incremental flushes of the cache */ 479ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* until enough memory is released for the lookup to succeed. */ 480ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 481ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* If a lookup fails with `FT_Err_Out_Of_Memory' the cache has */ 482ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* already been completely flushed, and still no memory is available */ 483ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* for the operation. */ 484ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 485ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_EXPORT( FT_Error ) 486ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FTC_Manager_LookupSize( FTC_Manager manager, 487ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FTC_Scaler scaler, 488ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Size *asize ); 489ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 490ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 491ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 492ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 493ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Function> */ 494ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FTC_Node_Unref */ 495ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 496ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 497ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Decrement a cache node's internal reference count. When the count */ 498ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* reaches 0, it is not destroyed but becomes eligible for subsequent */ 499ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* cache flushes. */ 500ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 501ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Input> */ 502ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* node :: The cache node handle. */ 503ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 504ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* manager :: The cache manager handle. */ 505ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 506ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_EXPORT( void ) 507ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FTC_Node_Unref( FTC_Node node, 508ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FTC_Manager manager ); 509ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 510ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 511ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /************************************************************************* 512ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 513ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @function: 514ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * FTC_Manager_RemoveFaceID 515ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 516ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @description: 517ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * A special function used to indicate to the cache manager that 518ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * a given @FTC_FaceID is no longer valid, either because its 519ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * content changed, or because it was deallocated or uninstalled. 520ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 521ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @input: 522ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * manager :: 523ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * The cache manager handle. 524ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 525ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * face_id :: 526ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * The @FTC_FaceID to be removed. 527ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 528ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @note: 529ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * This function flushes all nodes from the cache corresponding to this 530ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * `face_id', with the exception of nodes with a non-null reference 531ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * count. 532ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 533ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Such nodes are however modified internally so as to never appear 534ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * in later lookups with the same `face_id' value, and to be immediately 535ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * destroyed when released by all their users. 536ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 537ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */ 538ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_EXPORT( void ) 539ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FTC_Manager_RemoveFaceID( FTC_Manager manager, 540ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FTC_FaceID face_id ); 541ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 542ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 543ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 544ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 545ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Section> */ 546ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* cache_subsystem */ 547ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 548ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 549ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 550ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /************************************************************************* 551ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 552ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @type: 553ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * FTC_CMapCache 554ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 555ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @description: 556ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * An opaque handle used to model a charmap cache. This cache is to 557ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * hold character codes -> glyph indices mappings. 558ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 559ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */ 560ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct FTC_CMapCacheRec_* FTC_CMapCache; 561ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 562ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 563ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /************************************************************************* 564ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 565ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @function: 566ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * FTC_CMapCache_New 567ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 568ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @description: 569ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Create a new charmap cache. 570ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 571ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @input: 572ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * manager :: 573ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * A handle to the cache manager. 574ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 575ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @output: 576ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * acache :: 577ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * A new cache handle. NULL in case of error. 578ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 579ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @return: 580ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * FreeType error code. 0~means success. 581ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 582ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @note: 583ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Like all other caches, this one will be destroyed with the cache 584ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * manager. 585ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 586ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */ 587ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_EXPORT( FT_Error ) 588ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FTC_CMapCache_New( FTC_Manager manager, 589ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FTC_CMapCache *acache ); 590ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 591ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 592ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /************************************************************************ 593ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 594ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @function: 595ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * FTC_CMapCache_Lookup 596ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 597ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @description: 598ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Translate a character code into a glyph index, using the charmap 599ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * cache. 600ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 601ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @input: 602ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * cache :: 603ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * A charmap cache handle. 604ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 605ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * face_id :: 606ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * The source face ID. 607ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 608ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * cmap_index :: 609ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * The index of the charmap in the source face. Any negative value 610ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * means to use the cache @FT_Face's default charmap. 611ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 612ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * char_code :: 613ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * The character code (in the corresponding charmap). 614ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 615ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @return: 616ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Glyph index. 0~means `no glyph'. 617ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 618ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */ 619ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_EXPORT( FT_UInt ) 620ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FTC_CMapCache_Lookup( FTC_CMapCache cache, 621ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FTC_FaceID face_id, 622ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Int cmap_index, 623ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt32 char_code ); 624ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 625ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 626ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 627ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 628ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Section> */ 629ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* cache_subsystem */ 630ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 631ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 632ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 633ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 634ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 635ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 636ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 637ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /***** *****/ 638ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /***** IMAGE CACHE OBJECT *****/ 639ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /***** *****/ 640ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 641ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 642ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 643ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 644ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 645ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /************************************************************************* 646ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 647ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @struct: 648ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * FTC_ImageTypeRec 649ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 650ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @description: 651ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * A structure used to model the type of images in a glyph cache. 652ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 653ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @fields: 654ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * face_id :: 655ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * The face ID. 656ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 657ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * width :: 658ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * The width in pixels. 659ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 660ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * height :: 661ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * The height in pixels. 662ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 663ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * flags :: 664ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * The load flags, as in @FT_Load_Glyph. 665ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 666ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */ 667ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct FTC_ImageTypeRec_ 668ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 669ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FTC_FaceID face_id; 670ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Int width; 671ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Int height; 672ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Int32 flags; 673ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 674ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } FTC_ImageTypeRec; 675ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 676ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 677ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /************************************************************************* 678ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 679ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @type: 680ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * FTC_ImageType 681ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 682ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @description: 683ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * A handle to an @FTC_ImageTypeRec structure. 684ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 685ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */ 686ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct FTC_ImageTypeRec_* FTC_ImageType; 687ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 688ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 689ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 690ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 691ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 692ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FTC_IMAGE_TYPE_COMPARE( d1, d2 ) \ 693ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ( (d1)->face_id == (d2)->face_id && \ 694ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (d1)->width == (d2)->width && \ 695ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (d1)->flags == (d2)->flags ) 696ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 697ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 698ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 699ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 700ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Type> */ 701ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FTC_ImageCache */ 702ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 703ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 704ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* A handle to a glyph image cache object. They are designed to */ 705ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* hold many distinct glyph images while not exceeding a certain */ 706ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* memory threshold. */ 707ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 708ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct FTC_ImageCacheRec_* FTC_ImageCache; 709ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 710ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 711ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 712ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 713ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Function> */ 714ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FTC_ImageCache_New */ 715ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 716ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 717ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Create a new glyph image cache. */ 718ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 719ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Input> */ 720ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* manager :: The parent manager for the image cache. */ 721ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 722ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Output> */ 723ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* acache :: A handle to the new glyph image cache object. */ 724ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 725ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Return> */ 726ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FreeType error code. 0~means success. */ 727ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 728ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_EXPORT( FT_Error ) 729ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FTC_ImageCache_New( FTC_Manager manager, 730ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FTC_ImageCache *acache ); 731ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 732ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 733ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 734ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 735ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Function> */ 736ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FTC_ImageCache_Lookup */ 737ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 738ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 739ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Retrieve a given glyph image from a glyph image cache. */ 740ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 741ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Input> */ 742ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* cache :: A handle to the source glyph image cache. */ 743ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 744ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* type :: A pointer to a glyph image type descriptor. */ 745ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 746ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* gindex :: The glyph index to retrieve. */ 747ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 748ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Output> */ 749ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* aglyph :: The corresponding @FT_Glyph object. 0~in case of */ 750ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* failure. */ 751ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 752ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* anode :: Used to return the address of of the corresponding cache */ 753ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* node after incrementing its reference count (see note */ 754ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* below). */ 755ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 756ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Return> */ 757ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FreeType error code. 0~means success. */ 758ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 759ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Note> */ 760ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* The returned glyph is owned and managed by the glyph image cache. */ 761ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Never try to transform or discard it manually! You can however */ 762ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* create a copy with @FT_Glyph_Copy and modify the new one. */ 763ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 764ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* If `anode' is _not_ NULL, it receives the address of the cache */ 765ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* node containing the glyph image, after increasing its reference */ 766ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* count. This ensures that the node (as well as the @FT_Glyph) will */ 767ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* always be kept in the cache until you call @FTC_Node_Unref to */ 768ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* `release' it. */ 769ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 770ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* If `anode' is NULL, the cache node is left unchanged, which means */ 771ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* that the @FT_Glyph could be flushed out of the cache on the next */ 772ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* call to one of the caching sub-system APIs. Don't assume that it */ 773ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* is persistent! */ 774ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 775ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_EXPORT( FT_Error ) 776ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FTC_ImageCache_Lookup( FTC_ImageCache cache, 777ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FTC_ImageType type, 778ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt gindex, 779ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Glyph *aglyph, 780ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FTC_Node *anode ); 781ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 782ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 783ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 784ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 785ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Function> */ 786ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FTC_ImageCache_LookupScaler */ 787ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 788ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 789ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* A variant of @FTC_ImageCache_Lookup that uses an @FTC_ScalerRec */ 790ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* to specify the face ID and its size. */ 791ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 792ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Input> */ 793ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* cache :: A handle to the source glyph image cache. */ 794ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 795ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* scaler :: A pointer to a scaler descriptor. */ 796ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 797ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* load_flags :: The corresponding load flags. */ 798ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 799ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* gindex :: The glyph index to retrieve. */ 800ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 801ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Output> */ 802ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* aglyph :: The corresponding @FT_Glyph object. 0~in case of */ 803ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* failure. */ 804ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 805ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* anode :: Used to return the address of of the corresponding */ 806ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* cache node after incrementing its reference count */ 807ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* (see note below). */ 808ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 809ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Return> */ 810ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FreeType error code. 0~means success. */ 811ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 812ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Note> */ 813ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* The returned glyph is owned and managed by the glyph image cache. */ 814ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Never try to transform or discard it manually! You can however */ 815ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* create a copy with @FT_Glyph_Copy and modify the new one. */ 816ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 817ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* If `anode' is _not_ NULL, it receives the address of the cache */ 818ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* node containing the glyph image, after increasing its reference */ 819ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* count. This ensures that the node (as well as the @FT_Glyph) will */ 820ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* always be kept in the cache until you call @FTC_Node_Unref to */ 821ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* `release' it. */ 822ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 823ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* If `anode' is NULL, the cache node is left unchanged, which means */ 824ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* that the @FT_Glyph could be flushed out of the cache on the next */ 825ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* call to one of the caching sub-system APIs. Don't assume that it */ 826ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* is persistent! */ 827ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 828ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Calls to @FT_Set_Char_Size and friends have no effect on cached */ 829ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* glyphs; you should always use the FreeType cache API instead. */ 830ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 831ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_EXPORT( FT_Error ) 832ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FTC_ImageCache_LookupScaler( FTC_ImageCache cache, 833ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FTC_Scaler scaler, 834ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong load_flags, 835ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt gindex, 836ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Glyph *aglyph, 837ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FTC_Node *anode ); 838ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 839ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 840ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 841ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 842ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Type> */ 843ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FTC_SBit */ 844ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 845ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 846ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* A handle to a small bitmap descriptor. See the @FTC_SBitRec */ 847ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* structure for details. */ 848ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 849ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct FTC_SBitRec_* FTC_SBit; 850ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 851ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 852ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 853ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 854ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Struct> */ 855ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FTC_SBitRec */ 856ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 857ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 858ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* A very compact structure used to describe a small glyph bitmap. */ 859ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 860ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Fields> */ 861ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* width :: The bitmap width in pixels. */ 862ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 863ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* height :: The bitmap height in pixels. */ 864ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 865ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* left :: The horizontal distance from the pen position to the */ 866ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* left bitmap border (a.k.a. `left side bearing', or */ 867ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* `lsb'). */ 868ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 869ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* top :: The vertical distance from the pen position (on the */ 870ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* baseline) to the upper bitmap border (a.k.a. `top */ 871ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* side bearing'). The distance is positive for upwards */ 872ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* y~coordinates. */ 873ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 874ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* format :: The format of the glyph bitmap (monochrome or gray). */ 875ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 876ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* max_grays :: Maximum gray level value (in the range 1 to~255). */ 877ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 878ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* pitch :: The number of bytes per bitmap line. May be positive */ 879ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* or negative. */ 880ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 881ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* xadvance :: The horizontal advance width in pixels. */ 882ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 883ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* yadvance :: The vertical advance height in pixels. */ 884ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 885ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* buffer :: A pointer to the bitmap pixels. */ 886ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 887ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct FTC_SBitRec_ 888ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 889ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte width; 890ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte height; 891ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Char left; 892ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Char top; 893ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 894ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte format; 895ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte max_grays; 896ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Short pitch; 897ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Char xadvance; 898ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Char yadvance; 899ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 900ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte* buffer; 901ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 902ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } FTC_SBitRec; 903ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 904ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 905ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 906ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 907ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Type> */ 908ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FTC_SBitCache */ 909ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 910ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 911ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* A handle to a small bitmap cache. These are special cache objects */ 912ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* used to store small glyph bitmaps (and anti-aliased pixmaps) in a */ 913ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* much more efficient way than the traditional glyph image cache */ 914ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* implemented by @FTC_ImageCache. */ 915ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 916ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct FTC_SBitCacheRec_* FTC_SBitCache; 917ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 918ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 919ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 920ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 921ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Function> */ 922ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FTC_SBitCache_New */ 923ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 924ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 925ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Create a new cache to store small glyph bitmaps. */ 926ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 927ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Input> */ 928ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* manager :: A handle to the source cache manager. */ 929ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 930ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Output> */ 931ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* acache :: A handle to the new sbit cache. NULL in case of error. */ 932ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 933ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Return> */ 934ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FreeType error code. 0~means success. */ 935ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 936ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_EXPORT( FT_Error ) 937ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FTC_SBitCache_New( FTC_Manager manager, 938ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FTC_SBitCache *acache ); 939ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 940ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 941ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 942ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 943ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Function> */ 944ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FTC_SBitCache_Lookup */ 945ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 946ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 947ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Look up a given small glyph bitmap in a given sbit cache and */ 948ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* `lock' it to prevent its flushing from the cache until needed. */ 949ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 950ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Input> */ 951ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* cache :: A handle to the source sbit cache. */ 952ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 953ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* type :: A pointer to the glyph image type descriptor. */ 954ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 955ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* gindex :: The glyph index. */ 956ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 957ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Output> */ 958ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* sbit :: A handle to a small bitmap descriptor. */ 959ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 960ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* anode :: Used to return the address of of the corresponding cache */ 961ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* node after incrementing its reference count (see note */ 962ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* below). */ 963ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 964ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Return> */ 965ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FreeType error code. 0~means success. */ 966ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 967ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Note> */ 968ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* The small bitmap descriptor and its bit buffer are owned by the */ 969ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* cache and should never be freed by the application. They might */ 970ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* as well disappear from memory on the next cache lookup, so don't */ 971ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* treat them as persistent data. */ 972ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 973ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* The descriptor's `buffer' field is set to~0 to indicate a missing */ 974ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* glyph bitmap. */ 975ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 976ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* If `anode' is _not_ NULL, it receives the address of the cache */ 977ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* node containing the bitmap, after increasing its reference count. */ 978ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* This ensures that the node (as well as the image) will always be */ 979ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* kept in the cache until you call @FTC_Node_Unref to `release' it. */ 980ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 981ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* If `anode' is NULL, the cache node is left unchanged, which means */ 982ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* that the bitmap could be flushed out of the cache on the next */ 983ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* call to one of the caching sub-system APIs. Don't assume that it */ 984ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* is persistent! */ 985ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 986ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_EXPORT( FT_Error ) 987ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FTC_SBitCache_Lookup( FTC_SBitCache cache, 988ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FTC_ImageType type, 989ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt gindex, 990ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FTC_SBit *sbit, 991ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FTC_Node *anode ); 992ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 993ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 994ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 995ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 996ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Function> */ 997ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FTC_SBitCache_LookupScaler */ 998ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 999ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 1000ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* A variant of @FTC_SBitCache_Lookup that uses an @FTC_ScalerRec */ 1001ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* to specify the face ID and its size. */ 1002ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1003ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Input> */ 1004ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* cache :: A handle to the source sbit cache. */ 1005ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1006ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* scaler :: A pointer to the scaler descriptor. */ 1007ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1008ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* load_flags :: The corresponding load flags. */ 1009ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1010ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* gindex :: The glyph index. */ 1011ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1012ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Output> */ 1013ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* sbit :: A handle to a small bitmap descriptor. */ 1014ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1015ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* anode :: Used to return the address of of the corresponding */ 1016ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* cache node after incrementing its reference count */ 1017ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* (see note below). */ 1018ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1019ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Return> */ 1020ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FreeType error code. 0~means success. */ 1021ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1022ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Note> */ 1023ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* The small bitmap descriptor and its bit buffer are owned by the */ 1024ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* cache and should never be freed by the application. They might */ 1025ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* as well disappear from memory on the next cache lookup, so don't */ 1026ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* treat them as persistent data. */ 1027ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1028ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* The descriptor's `buffer' field is set to~0 to indicate a missing */ 1029ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* glyph bitmap. */ 1030ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1031ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* If `anode' is _not_ NULL, it receives the address of the cache */ 1032ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* node containing the bitmap, after increasing its reference count. */ 1033ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* This ensures that the node (as well as the image) will always be */ 1034ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* kept in the cache until you call @FTC_Node_Unref to `release' it. */ 1035ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1036ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* If `anode' is NULL, the cache node is left unchanged, which means */ 1037ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* that the bitmap could be flushed out of the cache on the next */ 1038ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* call to one of the caching sub-system APIs. Don't assume that it */ 1039ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* is persistent! */ 1040ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1041ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_EXPORT( FT_Error ) 1042ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FTC_SBitCache_LookupScaler( FTC_SBitCache cache, 1043ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FTC_Scaler scaler, 1044ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong load_flags, 1045ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt gindex, 1046ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FTC_SBit *sbit, 1047ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FTC_Node *anode ); 1048ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1049ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1050ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1051ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1052ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFT_END_HEADER 1053ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1054ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* __FTCACHE_H__ */ 1055ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1056ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1057ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* END */ 1058