ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

ftincrem.h
Go to the documentation of this file.
00001 /***************************************************************************/
00002 /*                                                                         */
00003 /*  ftincrem.h                                                             */
00004 /*                                                                         */
00005 /*    FreeType incremental loading (specification).                        */
00006 /*                                                                         */
00007 /*  Copyright 2002, 2003, 2006, 2007, 2008, 2010 by                        */
00008 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
00009 /*                                                                         */
00010 /*  This file is part of the FreeType project, and may only be used,       */
00011 /*  modified, and distributed under the terms of the FreeType project      */
00012 /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
00013 /*  this file you indicate that you have read the license and              */
00014 /*  understand and accept it fully.                                        */
00015 /*                                                                         */
00016 /***************************************************************************/
00017 
00018 
00019 #ifndef __FTINCREM_H__
00020 #define __FTINCREM_H__
00021 
00022 #include <ft2build.h>
00023 #include FT_FREETYPE_H
00024 
00025 #ifdef FREETYPE_H
00026 #error "freetype.h of FreeType 1 has been loaded!"
00027 #error "Please fix the directory search order for header files"
00028 #error "so that freetype.h of FreeType 2 is found first."
00029 #endif
00030 
00031 
00032 FT_BEGIN_HEADER
00033 
00034   /***************************************************************************
00035    *
00036    * @section:
00037    *    incremental
00038    *
00039    * @title:
00040    *    Incremental Loading
00041    *
00042    * @abstract:
00043    *    Custom Glyph Loading.
00044    *
00045    * @description:
00046    *   This section contains various functions used to perform so-called
00047    *   `incremental' glyph loading.  This is a mode where all glyphs loaded
00048    *   from a given @FT_Face are provided by the client application,
00049    *
00050    *   Apart from that, all other tables are loaded normally from the font
00051    *   file.  This mode is useful when FreeType is used within another
00052    *   engine, e.g., a PostScript Imaging Processor.
00053    *
00054    *   To enable this mode, you must use @FT_Open_Face, passing an
00055    *   @FT_Parameter with the @FT_PARAM_TAG_INCREMENTAL tag and an
00056    *   @FT_Incremental_Interface value.  See the comments for
00057    *   @FT_Incremental_InterfaceRec for an example.
00058    *
00059    */
00060 
00061 
00062   /***************************************************************************
00063    *
00064    * @type:
00065    *   FT_Incremental
00066    *
00067    * @description:
00068    *   An opaque type describing a user-provided object used to implement
00069    *   `incremental' glyph loading within FreeType.  This is used to support
00070    *   embedded fonts in certain environments (e.g., PostScript interpreters),
00071    *   where the glyph data isn't in the font file, or must be overridden by
00072    *   different values.
00073    *
00074    * @note:
00075    *   It is up to client applications to create and implement @FT_Incremental
00076    *   objects, as long as they provide implementations for the methods
00077    *   @FT_Incremental_GetGlyphDataFunc, @FT_Incremental_FreeGlyphDataFunc
00078    *   and @FT_Incremental_GetGlyphMetricsFunc.
00079    *
00080    *   See the description of @FT_Incremental_InterfaceRec to understand how
00081    *   to use incremental objects with FreeType.
00082    *
00083    */
00084   typedef struct FT_IncrementalRec_*  FT_Incremental;
00085 
00086 
00087   /***************************************************************************
00088    *
00089    * @struct:
00090    *   FT_Incremental_MetricsRec
00091    *
00092    * @description:
00093    *   A small structure used to contain the basic glyph metrics returned
00094    *   by the @FT_Incremental_GetGlyphMetricsFunc method.
00095    *
00096    * @fields:
00097    *   bearing_x ::
00098    *     Left bearing, in font units.
00099    *
00100    *   bearing_y ::
00101    *     Top bearing, in font units.
00102    *
00103    *   advance ::
00104    *     Horizontal component of glyph advance, in font units.
00105    *
00106    *   advance_v ::
00107    *     Vertical component of glyph advance, in font units.
00108    *
00109    * @note:
00110    *   These correspond to horizontal or vertical metrics depending on the
00111    *   value of the `vertical' argument to the function
00112    *   @FT_Incremental_GetGlyphMetricsFunc.
00113    *
00114    */
00115   typedef struct  FT_Incremental_MetricsRec_
00116   {
00117     FT_Long  bearing_x;
00118     FT_Long  bearing_y;
00119     FT_Long  advance;
00120     FT_Long  advance_v;     /* since 2.3.12 */
00121 
00122   } FT_Incremental_MetricsRec;
00123 
00124 
00125   /***************************************************************************
00126    *
00127    * @struct:
00128    *   FT_Incremental_Metrics
00129    *
00130    * @description:
00131    *   A handle to an @FT_Incremental_MetricsRec structure.
00132    *
00133    */
00134    typedef struct FT_Incremental_MetricsRec_*  FT_Incremental_Metrics;
00135 
00136 
00137   /***************************************************************************
00138    *
00139    * @type:
00140    *   FT_Incremental_GetGlyphDataFunc
00141    *
00142    * @description:
00143    *   A function called by FreeType to access a given glyph's data bytes
00144    *   during @FT_Load_Glyph or @FT_Load_Char if incremental loading is
00145    *   enabled.
00146    *
00147    *   Note that the format of the glyph's data bytes depends on the font
00148    *   file format.  For TrueType, it must correspond to the raw bytes within
00149    *   the `glyf' table.  For PostScript formats, it must correspond to the
00150    *   *unencrypted* charstring bytes, without any `lenIV' header.  It is
00151    *   undefined for any other format.
00152    *
00153    * @input:
00154    *   incremental ::
00155    *     Handle to an opaque @FT_Incremental handle provided by the client
00156    *     application.
00157    *
00158    *   glyph_index ::
00159    *     Index of relevant glyph.
00160    *
00161    * @output:
00162    *   adata ::
00163    *     A structure describing the returned glyph data bytes (which will be
00164    *     accessed as a read-only byte block).
00165    *
00166    * @return:
00167    *   FreeType error code.  0~means success.
00168    *
00169    * @note:
00170    *   If this function returns successfully the method
00171    *   @FT_Incremental_FreeGlyphDataFunc will be called later to release
00172    *   the data bytes.
00173    *
00174    *   Nested calls to @FT_Incremental_GetGlyphDataFunc can happen for
00175    *   compound glyphs.
00176    *
00177    */
00178   typedef FT_Error
00179   (*FT_Incremental_GetGlyphDataFunc)( FT_Incremental  incremental,
00180                                       FT_UInt         glyph_index,
00181                                       FT_Data*        adata );
00182 
00183 
00184   /***************************************************************************
00185    *
00186    * @type:
00187    *   FT_Incremental_FreeGlyphDataFunc
00188    *
00189    * @description:
00190    *   A function used to release the glyph data bytes returned by a
00191    *   successful call to @FT_Incremental_GetGlyphDataFunc.
00192    *
00193    * @input:
00194    *   incremental ::
00195    *     A handle to an opaque @FT_Incremental handle provided by the client
00196    *     application.
00197    *
00198    *   data ::
00199    *     A structure describing the glyph data bytes (which will be accessed
00200    *     as a read-only byte block).
00201    *
00202    */
00203   typedef void
00204   (*FT_Incremental_FreeGlyphDataFunc)( FT_Incremental  incremental,
00205                                        FT_Data*        data );
00206 
00207 
00208   /***************************************************************************
00209    *
00210    * @type:
00211    *   FT_Incremental_GetGlyphMetricsFunc
00212    *
00213    * @description:
00214    *   A function used to retrieve the basic metrics of a given glyph index
00215    *   before accessing its data.  This is necessary because, in certain
00216    *   formats like TrueType, the metrics are stored in a different place from
00217    *   the glyph images proper.
00218    *
00219    * @input:
00220    *   incremental ::
00221    *     A handle to an opaque @FT_Incremental handle provided by the client
00222    *     application.
00223    *
00224    *   glyph_index ::
00225    *     Index of relevant glyph.
00226    *
00227    *   vertical ::
00228    *     If true, return vertical metrics.
00229    *
00230    *   ametrics ::
00231    *     This parameter is used for both input and output.
00232    *     The original glyph metrics, if any, in font units.  If metrics are
00233    *     not available all the values must be set to zero.
00234    *
00235    * @output:
00236    *   ametrics ::
00237    *     The replacement glyph metrics in font units.
00238    *
00239    */
00240   typedef FT_Error
00241   (*FT_Incremental_GetGlyphMetricsFunc)
00242                       ( FT_Incremental              incremental,
00243                         FT_UInt                     glyph_index,
00244                         FT_Bool                     vertical,
00245                         FT_Incremental_MetricsRec  *ametrics );
00246 
00247 
00248   /**************************************************************************
00249    *
00250    * @struct:
00251    *   FT_Incremental_FuncsRec
00252    *
00253    * @description:
00254    *   A table of functions for accessing fonts that load data
00255    *   incrementally.  Used in @FT_Incremental_InterfaceRec.
00256    *
00257    * @fields:
00258    *   get_glyph_data ::
00259    *     The function to get glyph data.  Must not be null.
00260    *
00261    *   free_glyph_data ::
00262    *     The function to release glyph data.  Must not be null.
00263    *
00264    *   get_glyph_metrics ::
00265    *     The function to get glyph metrics.  May be null if the font does
00266    *     not provide overriding glyph metrics.
00267    *
00268    */
00269   typedef struct  FT_Incremental_FuncsRec_
00270   {
00271     FT_Incremental_GetGlyphDataFunc     get_glyph_data;
00272     FT_Incremental_FreeGlyphDataFunc    free_glyph_data;
00273     FT_Incremental_GetGlyphMetricsFunc  get_glyph_metrics;
00274 
00275   } FT_Incremental_FuncsRec;
00276 
00277 
00278   /***************************************************************************
00279    *
00280    * @struct:
00281    *   FT_Incremental_InterfaceRec
00282    *
00283    * @description:
00284    *   A structure to be used with @FT_Open_Face to indicate that the user
00285    *   wants to support incremental glyph loading.  You should use it with
00286    *   @FT_PARAM_TAG_INCREMENTAL as in the following example:
00287    *
00288    *     {
00289    *       FT_Incremental_InterfaceRec  inc_int;
00290    *       FT_Parameter                 parameter;
00291    *       FT_Open_Args                 open_args;
00292    *
00293    *
00294    *       // set up incremental descriptor
00295    *       inc_int.funcs  = my_funcs;
00296    *       inc_int.object = my_object;
00297    *
00298    *       // set up optional parameter
00299    *       parameter.tag  = FT_PARAM_TAG_INCREMENTAL;
00300    *       parameter.data = &inc_int;
00301    *
00302    *       // set up FT_Open_Args structure
00303    *       open_args.flags      = FT_OPEN_PATHNAME | FT_OPEN_PARAMS;
00304    *       open_args.pathname   = my_font_pathname;
00305    *       open_args.num_params = 1;
00306    *       open_args.params     = &parameter; // we use one optional argument
00307    *
00308    *       // open the font
00309    *       error = FT_Open_Face( library, &open_args, index, &face );
00310    *       ...
00311    *     }
00312    *
00313    */
00314   typedef struct  FT_Incremental_InterfaceRec_
00315   {
00316     const FT_Incremental_FuncsRec*  funcs;
00317     FT_Incremental                  object;
00318 
00319   } FT_Incremental_InterfaceRec;
00320 
00321 
00322   /***************************************************************************
00323    *
00324    * @type:
00325    *   FT_Incremental_Interface
00326    *
00327    * @description:
00328    *   A pointer to an @FT_Incremental_InterfaceRec structure.
00329    *
00330    */
00331   typedef FT_Incremental_InterfaceRec*   FT_Incremental_Interface;
00332 
00333 
00334   /***************************************************************************
00335    *
00336    * @constant:
00337    *   FT_PARAM_TAG_INCREMENTAL
00338    *
00339    * @description:
00340    *   A constant used as the tag of @FT_Parameter structures to indicate
00341    *   an incremental loading object to be used by FreeType.
00342    *
00343    */
00344 #define FT_PARAM_TAG_INCREMENTAL  FT_MAKE_TAG( 'i', 'n', 'c', 'r' )
00345 
00346   /* */
00347 
00348 FT_END_HEADER
00349 
00350 #endif /* __FTINCREM_H__ */
00351 
00352 
00353 /* END */

Generated on Sat May 26 2012 04:32:26 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.