ReactOS  0.4.15-dev-5097-g328cc41
afpic.c
Go to the documentation of this file.
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(
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;
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;
82  AFModulePIC* container = NULL;
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 */
#define FT_ALLOC(ptr, size)
Definition: ftmemory.h:303
int FT_Error
Definition: fttypes.h:300
Definition: bidi.c:86
const char * ws
Definition: skip_ws.cpp:7
FT_Memory memory
Definition: ftobjs.h:918
#define error(str)
Definition: mkdosfs.c:1605
if(dx==0 &&dy==0)
Definition: linetemp.h:174
FT_Library library
Definition: cffdrivr.c:654
return FT_Err_Ok
Definition: ftbbox.c:511
static char memory[1024 *256]
Definition: process.c:116
struct container container
#define FT_FREE(ptr)
Definition: ftmemory.h:329
static void Exit(void)
Definition: sock.c:1331
#define for
Definition: utility.h:88
typedefFT_BEGIN_HEADER struct FT_MemoryRec_ * FT_Memory
Definition: ftsystem.h:66
#define WRITING_SYSTEM(ws, WS)
Definition: afglobal.c:73
unsigned int FT_UInt
Definition: fttypes.h:231
#define NULL
Definition: types.h:112
#define ss
Definition: i386-dis.c:442
#define FT_MEM_SET(dest, byte, count)
Definition: ftmemory.h:225