OLD | NEW |
| (Empty) |
1 /***************************************************************************/ | |
2 /* */ | |
3 /* ftspic.c */ | |
4 /* */ | |
5 /* The FreeType position independent code services for smooth 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 "ftspic.h" | |
23 #include "ftsmerrs.h" | |
24 | |
25 | |
26 #ifdef FT_CONFIG_OPTION_PIC | |
27 | |
28 /* forward declaration of PIC init functions from ftgrays.c */ | |
29 void | |
30 FT_Init_Class_ft_grays_raster( FT_Raster_Funcs* funcs ); | |
31 | |
32 | |
33 void | |
34 ft_smooth_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->smooth ) | |
41 { | |
42 SmoothPIC* container = (SmoothPIC*)pic_container->smooth; | |
43 | |
44 | |
45 if ( --container->ref_count ) | |
46 return; | |
47 | |
48 FT_FREE( container ); | |
49 pic_container->smooth = NULL; | |
50 } | |
51 } | |
52 | |
53 | |
54 FT_Error | |
55 ft_smooth_renderer_class_pic_init( FT_Library library ) | |
56 { | |
57 FT_PIC_Container* pic_container = &library->pic_container; | |
58 FT_Error error = FT_Err_Ok; | |
59 SmoothPIC* container = NULL; | |
60 FT_Memory memory = library->memory; | |
61 | |
62 | |
63 /* since this function also serve smooth_lcd and smooth_lcdv renderers, | |
64 it implements reference counting */ | |
65 if ( pic_container->smooth ) | |
66 { | |
67 ((SmoothPIC*)pic_container->smooth)->ref_count++; | |
68 return error; | |
69 } | |
70 | |
71 /* allocate pointer, clear and set global container pointer */ | |
72 if ( FT_ALLOC( container, sizeof ( *container ) ) ) | |
73 return error; | |
74 FT_MEM_SET( container, 0, sizeof ( *container ) ); | |
75 pic_container->smooth = container; | |
76 | |
77 container->ref_count = 1; | |
78 | |
79 /* initialize pointer table - */ | |
80 /* this is how the module usually expects this data */ | |
81 FT_Init_Class_ft_grays_raster( &container->ft_grays_raster ); | |
82 | |
83 return error; | |
84 } | |
85 | |
86 | |
87 /* re-route these init and free functions to the above functions */ | |
88 FT_Error | |
89 ft_smooth_lcd_renderer_class_pic_init( FT_Library library ) | |
90 { | |
91 return ft_smooth_renderer_class_pic_init( library ); | |
92 } | |
93 | |
94 | |
95 void | |
96 ft_smooth_lcd_renderer_class_pic_free( FT_Library library ) | |
97 { | |
98 ft_smooth_renderer_class_pic_free( library ); | |
99 } | |
100 | |
101 | |
102 FT_Error | |
103 ft_smooth_lcdv_renderer_class_pic_init( FT_Library library ) | |
104 { | |
105 return ft_smooth_renderer_class_pic_init( library ); | |
106 } | |
107 | |
108 | |
109 void | |
110 ft_smooth_lcdv_renderer_class_pic_free( FT_Library library ) | |
111 { | |
112 ft_smooth_renderer_class_pic_free( library ); | |
113 } | |
114 | |
115 #endif /* FT_CONFIG_OPTION_PIC */ | |
116 | |
117 | |
118 /* END */ | |
OLD | NEW |