⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ftcache.h

📁 奇趣公司比较新的qt/emd版本
💻 H
📖 第 1 页 / 共 4 页
字号:
/***************************************************************************//*                                                                         *//*  ftcache.h                                                              *//*                                                                         *//*    FreeType Cache subsystem (specification).                            *//*                                                                         *//*  Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006 by                   *//*  David Turner, Robert Wilhelm, and Werner Lemberg.                      *//*                                                                         *//*  This file is part of the FreeType project, and may only be used,       *//*  modified, and distributed under the terms of the FreeType project      *//*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     *//*  this file you indicate that you have read the license and              *//*  understand and accept it fully.                                        *//*                                                                         *//***************************************************************************/#ifndef __FTCACHE_H__#define __FTCACHE_H__#include <ft2build.h>#include FT_GLYPH_HFT_BEGIN_HEADER  /*************************************************************************   *   * <Section>   *    cache_subsystem   *   * <Title>   *    Cache Sub-System   *   * <Abstract>   *    How to cache face, size, and glyph data with FreeType 2.   *   * <Description>   *   This section describes the FreeType 2 cache sub-system, which is used   *   to limit the number of concurrently opened @FT_Face and @FT_Size   *   objects, as well as caching information like character maps and glyph   *   images while limiting their maximum memory usage.   *   *   Note that all types and functions begin with the `FTC_' prefix.   *   *   The cache is highly portable and thus doesn't know anything about the   *   fonts installed on your system, or how to access them.  This implies   *   the following scheme:   *   *   First, available or installed font faces are uniquely identified by   *   @FTC_FaceID values, provided to the cache by the client.  Note that   *   the cache only stores and compares these values, and doesn't try to   *   interpret them in any way.   *   *   Second, the cache calls, only when needed, a client-provided function   *   to convert a @FTC_FaceID into a new @FT_Face object.  The latter is   *   then completely managed by the cache, including its termination   *   through @FT_Done_Face.   *   *   Clients are free to map face IDs to anything else.  The most simple   *   usage is to associate them to a (pathname,face_index) pair that is   *   used to call @FT_New_Face.  However, more complex schemes are also   *   possible.   *   *   Note that for the cache to work correctly, the face ID values must be   *   *persistent*, which means that the contents they point to should not   *   change at runtime, or that their value should not become invalid.   *   *   If this is unavoidable (e.g., when a font is uninstalled at runtime),   *   you should call @FTC_Manager_RemoveFaceID as soon as possible, to let   *   the cache get rid of any references to the old @FTC_FaceID it may   *   keep internally.  Failure to do so will lead to incorrect behaviour   *   or even crashes.   *   *   To use the cache, start with calling @FTC_Manager_New to create a new   *   @FTC_Manager object, which models a single cache instance.  You can   *   then look up @FT_Face and @FT_Size objects with   *   @FTC_Manager_LookupFace and @FTC_Manager_LookupSize, respectively.   *   *   If you want to use the charmap caching, call @FTC_CMapCache_New, then   *   later use @FTC_CMapCache_Lookup to perform the equivalent of   *   @FT_Get_Char_Index, only much faster.   *   *   If you want to use the @FT_Glyph caching, call @FTC_ImageCache, then   *   later use @FTC_ImageCache_Lookup to retrieve the corresponding   *   @FT_Glyph objects from the cache.   *   *   If you need lots of small bitmaps, it is much more memory efficient   *   to call @FTC_SBitCache_New followed by @FTC_SBitCache_Lookup.  This   *   returns @FTC_SBitRec structures, which are used to store small   *   bitmaps directly.  (A small bitmap is one whose metrics and   *   dimensions all fit into 8-bit integers).   *   *   We hope to also provide a kerning cache in the near future.   *   *   * <Order>   *   FTC_Manager   *   FTC_FaceID   *   FTC_Face_Requester   *   *   FTC_Manager_New   *   FTC_Manager_Reset   *   FTC_Manager_Done   *   FTC_Manager_LookupFace   *   FTC_Manager_LookupSize   *   FTC_Manager_RemoveFaceID   *   *   FTC_Node   *   FTC_Node_Unref   *   *   FTC_ImageCache   *   FTC_ImageCache_New   *   FTC_ImageCache_Lookup   *   *   FTC_SBit   *   FTC_SBitCache   *   FTC_SBitCache_New   *   FTC_SBitCache_Lookup   *   *   FTC_CMapCache   *   FTC_CMapCache_New   *   FTC_CMapCache_Lookup   *   *************************************************************************/  /*************************************************************************/  /*************************************************************************/  /*************************************************************************/  /*****                                                               *****/  /*****                    BASIC TYPE DEFINITIONS                     *****/  /*****                                                               *****/  /*************************************************************************/  /*************************************************************************/  /*************************************************************************/  /*************************************************************************   *   * @type: FTC_FaceID   *   * @description:   *   An opaque pointer type that is used to identity face objects.  The   *   contents of such objects is application-dependent.   *   *   These pointers are typically used to point to a user-defined   *   structure containing a font file path, and face index.   *   * @note:   *   Never use NULL as a valid @FTC_FaceID.   *   *   Face IDs are passed by the client to the cache manager, which calls,   *   when needed, the @FTC_Face_Requester to translate them into new   *   @FT_Face objects.   *   *   If the content of a given face ID changes at runtime, or if the value   *   becomes invalid (e.g., when uninstalling a font), you should   *   immediately call @FTC_Manager_RemoveFaceID before any other cache   *   function.   *   *   Failure to do so will result in incorrect behaviour or even   *   memory leaks and crashes.   */  typedef struct FTC_FaceIDRec_*  FTC_FaceID;  /************************************************************************   *   * @functype:   *   FTC_Face_Requester   *   * @description:   *   A callback function provided by client applications.  It is used by   *   the cache manager to translate a given @FTC_FaceID into a new valid   *   @FT_Face object, on demand.   *   * <Input>   *   face_id ::   *     The face ID to resolve.   *   *   library ::   *     A handle to a FreeType library object.   *   *   req_data ::   *     Application-provided request data (see note below).   *   * <Output>   *   aface ::   *     A new @FT_Face handle.   *   * <Return>   *   FreeType error code.  0 means success.   *   * <Note>   *   The third parameter `req_data' is the same as the one passed by the   *   client when @FTC_Manager_New is called.   *   *   The face requester should not perform funny things on the returned   *   face object, like creating a new @FT_Size for it, or setting a   *   transformation through @FT_Set_Transform!   */  typedef FT_Error  (*FTC_Face_Requester)( FTC_FaceID  face_id,                         FT_Library  library,                         FT_Pointer  request_data,                         FT_Face*    aface ); /* */#define FT_POINTER_TO_ULONG( p )  ( (FT_ULong)(FT_Pointer)(p) )#define FTC_FACE_ID_HASH( i )                                \          ((FT_UInt32)(( FT_POINTER_TO_ULONG( i ) >> 3 ) ^   \                       ( FT_POINTER_TO_ULONG( i ) << 7 ) ) )  /*************************************************************************/  /*************************************************************************/  /*************************************************************************/  /*****                                                               *****/  /*****                      CACHE MANAGER OBJECT                     *****/  /*****                                                               *****/  /*************************************************************************/  /*************************************************************************/  /*************************************************************************/  /*************************************************************************/  /*                                                                       */  /* <Type>                                                                */  /*    FTC_Manager                                                        */  /*                                                                       */  /* <Description>                                                         */  /*    This object corresponds to one instance of the cache-subsystem.    */  /*    It is used to cache one or more @FT_Face objects, along with       */  /*    corresponding @FT_Size objects.                                    */  /*                                                                       */  /*    The manager intentionally limits the total number of opened        */  /*    @FT_Face and @FT_Size objects to control memory usage.  See the    */  /*    `max_faces' and `max_sizes' parameters of @FTC_Manager_New.        */  /*                                                                       */  /*    The manager is also used to cache `nodes' of various types while   */  /*    limiting their total memory usage.                                 */  /*                                                                       */  /*    All limitations are enforced by keeping lists of managed objects   */  /*    in most-recently-used order, and flushing old nodes to make room   */  /*    for new ones.                                                      */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -