1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/***************************************************************************/
2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*                                                                         */
3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*  basepic.c                                                              */
4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*                                                                         */
5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*    The FreeType position independent code services for base.            */
6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*                                                                         */
7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*  Copyright 2009, 2012 by                                                */
8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*  Oran Agra and Mickey Gabel.                                            */
9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*                                                                         */
10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*  This file is part of the FreeType project, and may only be used,       */
11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*  modified, and distributed under the terms of the FreeType project      */
12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*  this file you indicate that you have read the license and              */
14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*  understand and accept it fully.                                        */
15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*                                                                         */
16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/***************************************************************************/
17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/ft2build.h"
20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/freetype/freetype.h"
21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/freetype/internal/ftobjs.h"
22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "basepic.h"
23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef FT_CONFIG_OPTION_PIC
26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  /* forward declaration of PIC init functions from ftglyph.c */
28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  void
29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  FT_Init_Class_ft_outline_glyph_class( FT_Glyph_Class*  clazz );
30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  void
32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  FT_Init_Class_ft_bitmap_glyph_class( FT_Glyph_Class*  clazz );
33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef FT_CONFIG_OPTION_MAC_FONTS
35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  /* forward declaration of PIC init function from ftrfork.c */
36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  /* (not modularized)                                       */
37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  void
38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  FT_Init_Table_raccess_guess_table( ft_raccess_guess_rec*  record );
39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  /* forward declaration of PIC init functions from ftinit.c */
42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  FT_Error
43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  ft_create_default_module_classes( FT_Library  library );
44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  void
46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  ft_destroy_default_module_classes( FT_Library  library );
47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  void
50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  ft_base_pic_free( FT_Library  library )
51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  {
52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FT_PIC_Container*  pic_container = &library->pic_container;
53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FT_Memory          memory        = library->memory;
54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if ( pic_container->base )
57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      /* destroy default module classes            */
59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      /* (in case FT_Add_Default_Modules was used) */
60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      ft_destroy_default_module_classes( library );
61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      FT_FREE( pic_container->base );
63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      pic_container->base = NULL;
64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  }
66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  FT_Error
69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  ft_base_pic_init( FT_Library  library )
70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  {
71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FT_PIC_Container*  pic_container = &library->pic_container;
72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FT_Error           error         = FT_Err_Ok;
73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    BasePIC*           container     = NULL;
74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FT_Memory          memory        = library->memory;
75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    /* allocate pointer, clear and set global container pointer */
78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if ( FT_ALLOC( container, sizeof ( *container ) ) )
79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      return error;
80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FT_MEM_SET( container, 0, sizeof ( *container ) );
81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    pic_container->base = container;
82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    /* initialize default modules list and pointers */
84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    error = ft_create_default_module_classes( library );
85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if ( error )
86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      goto Exit;
87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    /* initialize pointer table -                       */
89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    /* this is how the module usually expects this data */
90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FT_Init_Class_ft_outline_glyph_class(
91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      &container->ft_outline_glyph_class );
92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FT_Init_Class_ft_bitmap_glyph_class(
93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      &container->ft_bitmap_glyph_class );
94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef FT_CONFIG_OPTION_MAC_FONTS
95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FT_Init_Table_raccess_guess_table(
96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      (ft_raccess_guess_rec*)&container->ft_raccess_guess_table );
97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  Exit:
100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if ( error )
101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      ft_base_pic_free( library );
102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return error;
103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  }
104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* FT_CONFIG_OPTION_PIC */
106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* END */
109