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