OLD | NEW |
| (Empty) |
1 /***************************************************************************/ | |
2 /* */ | |
3 /* rastpic.c */ | |
4 /* */ | |
5 /* The FreeType position independent code services for raster module. */ | |
6 /* */ | |
7 /* Copyright 2009, 2010, 2012, 2013 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 "../../include/ft2build.h" | |
20 #include "../../include/freetype/freetype.h" | |
21 #include "../../include/freetype/internal/ftobjs.h" | |
22 #include "rastpic.h" | |
23 #include "rasterrs.h" | |
24 | |
25 | |
26 #ifdef FT_CONFIG_OPTION_PIC | |
27 | |
28 /* forward declaration of PIC init functions from ftraster.c */ | |
29 void | |
30 FT_Init_Class_ft_standard_raster( FT_Raster_Funcs* funcs ); | |
31 | |
32 | |
33 void | |
34 ft_raster1_renderer_class_pic_free( FT_Library library ) | |
35 { | |
36 FT_PIC_Container* pic_container = &library->pic_container; | |
37 FT_Memory memory = library->memory; | |
38 | |
39 | |
40 if ( pic_container->raster ) | |
41 { | |
42 RasterPIC* container = (RasterPIC*)pic_container->raster; | |
43 | |
44 | |
45 if ( --container->ref_count ) | |
46 return; | |
47 FT_FREE( container ); | |
48 pic_container->raster = NULL; | |
49 } | |
50 } | |
51 | |
52 | |
53 FT_Error | |
54 ft_raster1_renderer_class_pic_init( FT_Library library ) | |
55 { | |
56 FT_PIC_Container* pic_container = &library->pic_container; | |
57 FT_Error error = FT_Err_Ok; | |
58 RasterPIC* container = NULL; | |
59 FT_Memory memory = library->memory; | |
60 | |
61 | |
62 /* since this function also serves raster5 renderer, */ | |
63 /* it implements reference counting */ | |
64 if ( pic_container->raster ) | |
65 { | |
66 ((RasterPIC*)pic_container->raster)->ref_count++; | |
67 return error; | |
68 } | |
69 | |
70 /* allocate pointer, clear and set global container pointer */ | |
71 if ( FT_ALLOC( container, sizeof ( *container ) ) ) | |
72 return error; | |
73 FT_MEM_SET( container, 0, sizeof ( *container ) ); | |
74 pic_container->raster = container; | |
75 | |
76 container->ref_count = 1; | |
77 | |
78 /* initialize pointer table - */ | |
79 /* this is how the module usually expects this data */ | |
80 FT_Init_Class_ft_standard_raster( &container->ft_standard_raster ); | |
81 | |
82 return error; | |
83 } | |
84 | |
85 | |
86 /* re-route these init and free functions to the above functions */ | |
87 FT_Error | |
88 ft_raster5_renderer_class_pic_init( FT_Library library ) | |
89 { | |
90 return ft_raster1_renderer_class_pic_init( library ); | |
91 } | |
92 | |
93 | |
94 void | |
95 ft_raster5_renderer_class_pic_free( FT_Library library ) | |
96 { | |
97 ft_raster1_renderer_class_pic_free( library ); | |
98 } | |
99 | |
100 #endif /* FT_CONFIG_OPTION_PIC */ | |
101 | |
102 | |
103 /* END */ | |
OLD | NEW |