Index: src/autofit/afpic.c |
diff --git a/src/autofit/afpic.c b/src/autofit/afpic.c |
index 87074afcfe2446963e58a65965f8144b11b8f1a4..45e1448c089f0fad26ea104b8e4defd546420ae7 100644 |
--- a/src/autofit/afpic.c |
+++ b/src/autofit/afpic.c |
@@ -4,7 +4,7 @@ |
/* */ |
/* The FreeType position independent code services for autofit module. */ |
/* */ |
-/* Copyright 2009, 2010, 2011 by */ |
+/* Copyright 2009-2013 by */ |
/* Oran Agra and Mickey Gabel. */ |
/* */ |
/* This file is part of the FreeType project, and may only be used, */ |
@@ -22,12 +22,25 @@ |
#include "afpic.h" |
#include "aferrors.h" |
+ |
#ifdef FT_CONFIG_OPTION_PIC |
/* forward declaration of PIC init functions from afmodule.c */ |
- void FT_Init_Class_af_autofitter_service( |
- FT_Library library, |
- FT_AutoHinter_ServiceRec* clazz ); |
+ FT_Error |
+ FT_Create_Class_af_services( FT_Library library, |
+ FT_ServiceDescRec** output_class ); |
+ |
+ void |
+ FT_Destroy_Class_af_services( FT_Library library, |
+ FT_ServiceDescRec* clazz ); |
+ |
+ void |
+ FT_Init_Class_af_service_properties( FT_Service_PropertiesRec* clazz ); |
+ |
+ void FT_Init_Class_af_autofitter_interface( |
+ FT_Library library, |
+ FT_AutoHinter_InterfaceRec* clazz ); |
+ |
/* forward declaration of PIC init functions from script classes */ |
#include "aflatin.h" |
@@ -38,6 +51,7 @@ |
#include "afdummy.h" |
#include "afindic.h" |
+ |
void |
autofit_module_class_pic_free( FT_Library library ) |
{ |
@@ -47,7 +61,15 @@ |
if ( pic_container->autofit ) |
{ |
- FT_FREE( pic_container->autofit ); |
+ AFModulePIC* container = (AFModulePIC*)pic_container->autofit; |
+ |
+ |
+ if ( container->af_services ) |
+ FT_Destroy_Class_af_services( library, |
+ container->af_services ); |
+ container->af_services = NULL; |
+ |
+ FT_FREE( container ); |
pic_container->autofit = NULL; |
} |
} |
@@ -58,8 +80,8 @@ |
{ |
FT_PIC_Container* pic_container = &library->pic_container; |
FT_UInt ss; |
- FT_Error error = AF_Err_Ok; |
- AFModulePIC* container; |
+ FT_Error error = FT_Err_Ok; |
+ AFModulePIC* container = NULL; |
FT_Memory memory = library->memory; |
@@ -71,6 +93,13 @@ |
/* initialize pointer table - */ |
/* this is how the module usually expects this data */ |
+ error = FT_Create_Class_af_services( library, |
+ &container->af_services ); |
+ if ( error ) |
+ goto Exit; |
+ |
+ FT_Init_Class_af_service_properties( &container->af_service_properties ); |
+ |
for ( ss = 0 ; ss < AF_SCRIPT_CLASSES_REC_COUNT ; ss++ ) |
{ |
container->af_script_classes[ss] = |
@@ -93,17 +122,15 @@ |
FT_Init_Class_af_indic_script_class( |
&container->af_script_classes_rec[ss++] ); |
- FT_Init_Class_af_autofitter_service( |
- library, &container->af_autofitter_service ); |
- |
-/* Exit: */ |
+ FT_Init_Class_af_autofitter_interface( |
+ library, &container->af_autofitter_interface ); |
+ Exit: |
if ( error ) |
autofit_module_class_pic_free( library ); |
return error; |
} |
- |
#endif /* FT_CONFIG_OPTION_PIC */ |