PageRenderTime 25ms CodeModel.GetById 1ms app.highlight 19ms RepoModel.GetById 1ms app.codeStats 0ms

/src/freetype/src/sfnt/sfntpic.c

https://bitbucket.org/cabalistic/ogredeps/
C | 146 lines | 95 code | 30 blank | 21 comment | 7 complexity | 4c7380c6e0f687fa3915f42fce6c2063 MD5 | raw file
  1/***************************************************************************/
  2/*                                                                         */
  3/*  sfntpic.c                                                              */
  4/*                                                                         */
  5/*    The FreeType position independent code services for sfnt module.     */
  6/*                                                                         */
  7/*  Copyright 2009, 2010 by                                                */
  8/*  Oran Agra and Mickey Gabel.                                            */
  9/*                                                                         */
 10/*  This file is part of the FreeType project, and may only be used,       */
 11/*  modified, and distributed under the terms of the FreeType project      */
 12/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
 13/*  this file you indicate that you have read the license and              */
 14/*  understand and accept it fully.                                        */
 15/*                                                                         */
 16/***************************************************************************/
 17
 18
 19#include <ft2build.h>
 20#include FT_FREETYPE_H
 21#include FT_INTERNAL_OBJECTS_H
 22#include "sfntpic.h"
 23#include "sferrors.h"
 24
 25#ifdef FT_CONFIG_OPTION_PIC
 26
 27  /* forward declaration of PIC init functions from sfdriver.c */
 28  FT_Error
 29  FT_Create_Class_sfnt_services( FT_Library           library,
 30                                 FT_ServiceDescRec**  ouput_class );
 31
 32  void
 33  FT_Destroy_Class_sfnt_services( FT_Library          library,
 34                                  FT_ServiceDescRec*  clazz );
 35
 36  void
 37  FT_Init_Class_sfnt_service_bdf( FT_Service_BDFRec*  clazz );
 38
 39  void
 40  FT_Init_Class_sfnt_interface( FT_Library       library,
 41                                SFNT_Interface*  clazz );
 42
 43  void
 44  FT_Init_Class_sfnt_service_glyph_dict(
 45    FT_Library                library,
 46    FT_Service_GlyphDictRec*  clazz );
 47
 48  void
 49  FT_Init_Class_sfnt_service_ps_name(
 50    FT_Library                 library,
 51    FT_Service_PsFontNameRec*  clazz );
 52
 53  void
 54  FT_Init_Class_tt_service_get_cmap_info(
 55    FT_Library              library,
 56    FT_Service_TTCMapsRec*  clazz );
 57
 58  void
 59  FT_Init_Class_sfnt_service_sfnt_table(
 60    FT_Service_SFNT_TableRec*  clazz );
 61
 62  /* forward declaration of PIC init functions from ttcmap.c */
 63  FT_Error
 64  FT_Create_Class_tt_cmap_classes( FT_Library       library,
 65                                   TT_CMap_Class**  output_class );
 66
 67  void
 68  FT_Destroy_Class_tt_cmap_classes( FT_Library      library,
 69                                    TT_CMap_Class*  clazz );
 70
 71  void
 72  sfnt_module_class_pic_free( FT_Library  library )
 73  {
 74    FT_PIC_Container*  pic_container = &library->pic_container;
 75    FT_Memory  memory = library->memory;
 76
 77
 78    if ( pic_container->sfnt )
 79    {
 80      sfntModulePIC*  container = (sfntModulePIC*)pic_container->sfnt;
 81
 82
 83      if ( container->sfnt_services )
 84        FT_Destroy_Class_sfnt_services( library,
 85                                        container->sfnt_services );
 86      container->sfnt_services = NULL;
 87      if ( container->tt_cmap_classes )
 88        FT_Destroy_Class_tt_cmap_classes( library,
 89                                          container->tt_cmap_classes );
 90      container->tt_cmap_classes = NULL;
 91      FT_FREE( container );
 92      pic_container->sfnt = NULL;
 93    }
 94  }
 95
 96
 97  FT_Error
 98  sfnt_module_class_pic_init(  FT_Library library )
 99  {
100    FT_PIC_Container*  pic_container = &library->pic_container;
101    FT_Error           error = SFNT_Err_Ok;
102    sfntModulePIC*     container;
103    FT_Memory          memory = library->memory;
104
105
106    /* allocate pointer, clear and set global container pointer */
107    if ( FT_ALLOC ( container, sizeof ( *container ) ) )
108      return error;
109    FT_MEM_SET( container, 0, sizeof ( *container ) );
110    pic_container->sfnt = container;
111
112    /* initialize pointer table - this is how the module usually expects this data */
113    error = FT_Create_Class_sfnt_services( library,
114                                           &container->sfnt_services );
115    if ( error )
116      goto Exit;
117    error = FT_Create_Class_tt_cmap_classes( library,
118                                             &container->tt_cmap_classes );
119    if ( error )
120      goto Exit;
121
122    FT_Init_Class_sfnt_service_glyph_dict(
123      library, &container->sfnt_service_glyph_dict );
124    FT_Init_Class_sfnt_service_ps_name(
125      library, &container->sfnt_service_ps_name );
126    FT_Init_Class_tt_service_get_cmap_info(
127      library, &container->tt_service_get_cmap_info );
128    FT_Init_Class_sfnt_service_sfnt_table(
129      &container->sfnt_service_sfnt_table );
130#ifdef TT_CONFIG_OPTION_BDF
131    FT_Init_Class_sfnt_service_bdf( &container->sfnt_service_bdf );
132#endif
133    FT_Init_Class_sfnt_interface( library, &container->sfnt_interface );
134
135Exit:
136    if ( error )
137      sfnt_module_class_pic_free( library );
138    return error;
139  }
140
141
142
143#endif /* FT_CONFIG_OPTION_PIC */
144
145
146/* END */