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

ftcimage.c
Go to the documentation of this file.
00001 /***************************************************************************/
00002 /*                                                                         */
00003 /*  ftcimage.c                                                             */
00004 /*                                                                         */
00005 /*    FreeType Image cache (body).                                         */
00006 /*                                                                         */
00007 /*  Copyright 2000-2001, 2003, 2004, 2006, 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 #include <ft2build.h>
00020 #include FT_CACHE_H
00021 #include "ftcimage.h"
00022 #include FT_INTERNAL_MEMORY_H
00023 
00024 #include "ftccback.h"
00025 #include "ftcerror.h"
00026 
00027 
00028   /* finalize a given glyph image node */
00029   FT_LOCAL_DEF( void )
00030   ftc_inode_free( FTC_Node   ftcinode,
00031                   FTC_Cache  cache )
00032   {
00033     FTC_INode  inode = (FTC_INode)ftcinode;
00034     FT_Memory  memory = cache->memory;
00035 
00036 
00037     if ( inode->glyph )
00038     {
00039       FT_Done_Glyph( inode->glyph );
00040       inode->glyph = NULL;
00041     }
00042 
00043     FTC_GNode_Done( FTC_GNODE( inode ), cache );
00044     FT_FREE( inode );
00045   }
00046 
00047 
00048   FT_LOCAL_DEF( void )
00049   FTC_INode_Free( FTC_INode  inode,
00050                   FTC_Cache  cache )
00051   {
00052     ftc_inode_free( FTC_NODE( inode ), cache );
00053   }
00054 
00055 
00056   /* initialize a new glyph image node */
00057   FT_LOCAL_DEF( FT_Error )
00058   FTC_INode_New( FTC_INode   *pinode,
00059                  FTC_GQuery   gquery,
00060                  FTC_Cache    cache )
00061   {
00062     FT_Memory  memory = cache->memory;
00063     FT_Error   error;
00064     FTC_INode  inode  = NULL;
00065 
00066 
00067     if ( !FT_NEW( inode ) )
00068     {
00069       FTC_GNode         gnode  = FTC_GNODE( inode );
00070       FTC_Family        family = gquery->family;
00071       FT_UInt           gindex = gquery->gindex;
00072       FTC_IFamilyClass  clazz  = FTC_CACHE__IFAMILY_CLASS( cache );
00073 
00074 
00075       /* initialize its inner fields */
00076       FTC_GNode_Init( gnode, gindex, family );
00077 
00078       /* we will now load the glyph image */
00079       error = clazz->family_load_glyph( family, gindex, cache,
00080                                         &inode->glyph );
00081       if ( error )
00082       {
00083         FTC_INode_Free( inode, cache );
00084         inode = NULL;
00085       }
00086     }
00087 
00088     *pinode = inode;
00089     return error;
00090   }
00091 
00092 
00093   FT_LOCAL_DEF( FT_Error )
00094   ftc_inode_new( FTC_Node   *ftcpinode,
00095                  FT_Pointer  ftcgquery,
00096                  FTC_Cache   cache )
00097   {
00098     FTC_INode  *pinode = (FTC_INode*)ftcpinode;
00099     FTC_GQuery  gquery = (FTC_GQuery)ftcgquery;
00100 
00101 
00102     return FTC_INode_New( pinode, gquery, cache );
00103   }
00104 
00105 
00106   FT_LOCAL_DEF( FT_Offset )
00107   ftc_inode_weight( FTC_Node   ftcinode,
00108                     FTC_Cache  ftccache )
00109   {
00110     FTC_INode  inode = (FTC_INode)ftcinode;
00111     FT_Offset  size  = 0;
00112     FT_Glyph   glyph = inode->glyph;
00113 
00114     FT_UNUSED( ftccache );
00115 
00116 
00117     switch ( glyph->format )
00118     {
00119     case FT_GLYPH_FORMAT_BITMAP:
00120       {
00121         FT_BitmapGlyph  bitg;
00122 
00123 
00124         bitg = (FT_BitmapGlyph)glyph;
00125         size = bitg->bitmap.rows * ft_labs( bitg->bitmap.pitch ) +
00126                sizeof ( *bitg );
00127       }
00128       break;
00129 
00130     case FT_GLYPH_FORMAT_OUTLINE:
00131       {
00132         FT_OutlineGlyph  outg;
00133 
00134 
00135         outg = (FT_OutlineGlyph)glyph;
00136         size = outg->outline.n_points *
00137                  ( sizeof ( FT_Vector ) + sizeof ( FT_Byte ) ) +
00138                outg->outline.n_contours * sizeof ( FT_Short ) +
00139                sizeof ( *outg );
00140       }
00141       break;
00142 
00143     default:
00144       ;
00145     }
00146 
00147     size += sizeof ( *inode );
00148     return size;
00149   }
00150 
00151 
00152 #if 0
00153 
00154   FT_LOCAL_DEF( FT_Offset )
00155   FTC_INode_Weight( FTC_INode  inode )
00156   {
00157     return ftc_inode_weight( FTC_NODE( inode ), NULL );
00158   }
00159 
00160 #endif /* 0 */
00161 
00162 
00163 /* END */

Generated on Sun May 27 2012 04:33:48 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.