src/java.desktop/share/native/libfreetype/src/autofit/afpic.c
changeset 54876 da3834261f0c
parent 54875 bcfedddcf4ce
child 54877 dde07ac16610
equal deleted inserted replaced
54875:bcfedddcf4ce 54876:da3834261f0c
     1 /***************************************************************************/
       
     2 /*                                                                         */
       
     3 /*  afpic.c                                                                */
       
     4 /*                                                                         */
       
     5 /*    The FreeType position independent code services for autofit module.  */
       
     6 /*                                                                         */
       
     7 /*  Copyright 2009-2018 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 "afpic.h"
       
    23 #include "afglobal.h"
       
    24 #include "aferrors.h"
       
    25 
       
    26 
       
    27 #ifdef FT_CONFIG_OPTION_PIC
       
    28 
       
    29   /* forward declaration of PIC init functions from afmodule.c */
       
    30   FT_Error
       
    31   FT_Create_Class_af_services( FT_Library           library,
       
    32                                FT_ServiceDescRec**  output_class );
       
    33 
       
    34   void
       
    35   FT_Destroy_Class_af_services( FT_Library          library,
       
    36                                 FT_ServiceDescRec*  clazz );
       
    37 
       
    38   void
       
    39   FT_Init_Class_af_service_properties( FT_Service_PropertiesRec*  clazz );
       
    40 
       
    41   void FT_Init_Class_af_autofitter_interface(
       
    42     FT_Library                   library,
       
    43     FT_AutoHinter_InterfaceRec*  clazz );
       
    44 
       
    45 
       
    46   /* forward declaration of PIC init functions from writing system classes */
       
    47 #undef  WRITING_SYSTEM
       
    48 #define WRITING_SYSTEM( ws, WS )  /* empty */
       
    49 
       
    50 #include "afwrtsys.h"
       
    51 
       
    52 
       
    53   void
       
    54   autofit_module_class_pic_free( FT_Library  library )
       
    55   {
       
    56     FT_PIC_Container*  pic_container = &library->pic_container;
       
    57     FT_Memory          memory        = library->memory;
       
    58 
       
    59 
       
    60     if ( pic_container->autofit )
       
    61     {
       
    62       AFModulePIC*  container = (AFModulePIC*)pic_container->autofit;
       
    63 
       
    64 
       
    65       if ( container->af_services )
       
    66         FT_Destroy_Class_af_services( library,
       
    67                                       container->af_services );
       
    68       container->af_services = NULL;
       
    69 
       
    70       FT_FREE( container );
       
    71       pic_container->autofit = NULL;
       
    72     }
       
    73   }
       
    74 
       
    75 
       
    76   FT_Error
       
    77   autofit_module_class_pic_init( FT_Library  library )
       
    78   {
       
    79     FT_PIC_Container*  pic_container = &library->pic_container;
       
    80     FT_UInt            ss;
       
    81     FT_Error           error         = FT_Err_Ok;
       
    82     AFModulePIC*       container     = NULL;
       
    83     FT_Memory          memory        = library->memory;
       
    84 
       
    85 
       
    86     /* allocate pointer, clear and set global container pointer */
       
    87     if ( FT_ALLOC ( container, sizeof ( *container ) ) )
       
    88       return error;
       
    89     FT_MEM_SET( container, 0, sizeof ( *container ) );
       
    90     pic_container->autofit = container;
       
    91 
       
    92     /* initialize pointer table -                       */
       
    93     /* this is how the module usually expects this data */
       
    94     error = FT_Create_Class_af_services( library,
       
    95                                          &container->af_services );
       
    96     if ( error )
       
    97       goto Exit;
       
    98 
       
    99     FT_Init_Class_af_service_properties( &container->af_service_properties );
       
   100 
       
   101     for ( ss = 0; ss < AF_WRITING_SYSTEM_MAX; ss++ )
       
   102       container->af_writing_system_classes[ss] =
       
   103         &container->af_writing_system_classes_rec[ss];
       
   104     container->af_writing_system_classes[AF_WRITING_SYSTEM_MAX] = NULL;
       
   105 
       
   106     for ( ss = 0; ss < AF_SCRIPT_MAX; ss++ )
       
   107       container->af_script_classes[ss] =
       
   108         &container->af_script_classes_rec[ss];
       
   109     container->af_script_classes[AF_SCRIPT_MAX] = NULL;
       
   110 
       
   111     for ( ss = 0; ss < AF_STYLE_MAX; ss++ )
       
   112       container->af_style_classes[ss] =
       
   113         &container->af_style_classes_rec[ss];
       
   114     container->af_style_classes[AF_STYLE_MAX] = NULL;
       
   115 
       
   116 #undef  WRITING_SYSTEM
       
   117 #define WRITING_SYSTEM( ws, WS )                             \
       
   118         FT_Init_Class_af_ ## ws ## _writing_system_class(    \
       
   119           &container->af_writing_system_classes_rec[ss++] );
       
   120 
       
   121     ss = 0;
       
   122 #include "afwrtsys.h"
       
   123 
       
   124 #undef  SCRIPT
       
   125 #define SCRIPT( s, S, d, h, H, sss )                 \
       
   126         FT_Init_Class_af_ ## s ## _script_class(     \
       
   127           &container->af_script_classes_rec[ss++] );
       
   128 
       
   129     ss = 0;
       
   130 #include "afscript.h"
       
   131 
       
   132 #undef  STYLE
       
   133 #define STYLE( s, S, d, ws, sc, bss, c )            \
       
   134         FT_Init_Class_af_ ## s ## _style_class(     \
       
   135           &container->af_style_classes_rec[ss++] );
       
   136 
       
   137     ss = 0;
       
   138 #include "afstyles.h"
       
   139 
       
   140     FT_Init_Class_af_autofitter_interface(
       
   141       library, &container->af_autofitter_interface );
       
   142 
       
   143   Exit:
       
   144     if ( error )
       
   145       autofit_module_class_pic_free( library );
       
   146     return error;
       
   147   }
       
   148 
       
   149 #endif /* FT_CONFIG_OPTION_PIC */
       
   150 
       
   151 
       
   152 /* END */