• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /****************************************************************************
2  *
3  * ftcolor.c
4  *
5  *   FreeType's glyph color management (body).
6  *
7  * Copyright 2018 by
8  * David Turner, Robert Wilhelm, and Werner Lemberg.
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_INTERNAL_DEBUG_H
21 #include FT_INTERNAL_SFNT_H
22 #include FT_INTERNAL_TRUETYPE_TYPES_H
23 #include FT_COLOR_H
24 
25 
26 #ifdef TT_CONFIG_OPTION_COLOR_LAYERS
27 
28   static
29   const FT_Palette_Data  null_palette_data = { 0, NULL, NULL, 0, NULL };
30 
31 
32   /* documentation is in ftcolor.h */
33 
34   FT_EXPORT_DEF( FT_Error )
FT_Palette_Data_Get(FT_Face face,FT_Palette_Data * apalette_data)35   FT_Palette_Data_Get( FT_Face           face,
36                        FT_Palette_Data  *apalette_data )
37   {
38     if ( !face )
39       return FT_THROW( Invalid_Face_Handle );
40     if ( !apalette_data)
41       return FT_THROW( Invalid_Argument );
42 
43     if ( FT_IS_SFNT( face ) )
44       *apalette_data = ( (TT_Face)face )->palette_data;
45     else
46       *apalette_data = null_palette_data;
47 
48     return FT_Err_Ok;
49   }
50 
51 
52   /* documentation is in ftcolor.h */
53 
54   FT_EXPORT_DEF( FT_Error )
FT_Palette_Select(FT_Face face,FT_UShort palette_index,FT_Color ** apalette)55   FT_Palette_Select( FT_Face     face,
56                      FT_UShort   palette_index,
57                      FT_Color*  *apalette )
58   {
59     FT_Error  error;
60 
61     TT_Face       ttface;
62     SFNT_Service  sfnt;
63 
64 
65     if ( !face )
66       return FT_THROW( Invalid_Face_Handle );
67 
68     if ( !FT_IS_SFNT( face ) )
69     {
70       if ( apalette )
71         *apalette = NULL;
72 
73       return FT_Err_Ok;
74     }
75 
76     ttface = (TT_Face)face;
77     sfnt   = (SFNT_Service)ttface->sfnt;
78 
79     error = sfnt->set_palette( ttface, palette_index );
80     if ( error )
81       return error;
82 
83     ttface->palette_index = palette_index;
84 
85     if ( apalette )
86       *apalette = ttface->palette;
87 
88     return FT_Err_Ok;
89   }
90 
91 
92   /* documentation is in ftcolor.h */
93 
94   FT_EXPORT_DEF( FT_Error )
FT_Palette_Set_Foreground_Color(FT_Face face,FT_Color foreground_color)95   FT_Palette_Set_Foreground_Color( FT_Face   face,
96                                    FT_Color  foreground_color )
97   {
98     TT_Face  ttface;
99 
100 
101     if ( !face )
102       return FT_THROW( Invalid_Face_Handle );
103 
104     if ( !FT_IS_SFNT( face ) )
105       return FT_Err_Ok;
106 
107     ttface = (TT_Face)face;
108 
109     ttface->foreground_color      = foreground_color;
110     ttface->have_foreground_color = 1;
111 
112     return FT_Err_Ok;
113   }
114 
115 #else /* !TT_CONFIG_OPTION_COLOR_LAYERS */
116 
117   FT_EXPORT_DEF( FT_Error )
FT_Palette_Data_Get(FT_Face face,FT_Palette_Data * apalette_data)118   FT_Palette_Data_Get( FT_Face           face,
119                        FT_Palette_Data  *apalette_data )
120   {
121     FT_UNUSED( face );
122     FT_UNUSED( apalette_data );
123 
124 
125     return FT_THROW( Unimplemented_Feature );
126   }
127 
128 
129   FT_EXPORT_DEF( FT_Error )
FT_Palette_Select(FT_Face face,FT_UShort palette_index,FT_Color ** apalette)130   FT_Palette_Select( FT_Face     face,
131                      FT_UShort   palette_index,
132                      FT_Color*  *apalette )
133   {
134     FT_UNUSED( face );
135     FT_UNUSED( palette_index );
136     FT_UNUSED( apalette );
137 
138 
139     return FT_THROW( Unimplemented_Feature );
140   }
141 
142 
143   FT_EXPORT_DEF( FT_Error )
FT_Palette_Set_Foreground_Color(FT_Face face,FT_Color foreground_color)144   FT_Palette_Set_Foreground_Color( FT_Face   face,
145                                    FT_Color  foreground_color )
146   {
147     FT_UNUSED( face );
148     FT_UNUSED( foreground_color );
149 
150 
151     return FT_THROW( Unimplemented_Feature );
152   }
153 
154 #endif /* !TT_CONFIG_OPTION_COLOR_LAYERS */
155 
156 
157 /* END */
158