File: | base/ftsynth.c |
Location: | line 103, column 7 |
Description: | Value stored to 'error' is never read |
1 | /***************************************************************************/ |
2 | /* */ |
3 | /* ftsynth.c */ |
4 | /* */ |
5 | /* FreeType synthesizing code for emboldening and slanting (body). */ |
6 | /* */ |
7 | /* Copyright 2000-2001, 2002, 2003, 2004, 2005, 2006 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_SYNTHESIS_H<freetype/ftsynth.h> |
21 | #include FT_INTERNAL_DEBUG_H<freetype/internal/ftdebug.h> |
22 | #include FT_INTERNAL_OBJECTS_H<freetype/internal/ftobjs.h> |
23 | #include FT_OUTLINE_H<freetype/ftoutln.h> |
24 | #include FT_BITMAP_H<freetype/ftbitmap.h> |
25 | |
26 | |
27 | /*************************************************************************/ |
28 | /* */ |
29 | /* The macro FT_COMPONENT is used in trace mode. It is an implicit */ |
30 | /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */ |
31 | /* messages during execution. */ |
32 | /* */ |
33 | #undef FT_COMPONENTtrace_synth |
34 | #define FT_COMPONENTtrace_synth trace_synth |
35 | |
36 | /*************************************************************************/ |
37 | /*************************************************************************/ |
38 | /**** ****/ |
39 | /**** EXPERIMENTAL OBLIQUING SUPPORT ****/ |
40 | /**** ****/ |
41 | /*************************************************************************/ |
42 | /*************************************************************************/ |
43 | |
44 | /* documentation is in ftsynth.h */ |
45 | |
46 | FT_EXPORT_DEF( void )extern void |
47 | FT_GlyphSlot_Oblique( FT_GlyphSlot slot ) |
48 | { |
49 | FT_Matrix transform; |
50 | FT_Outline* outline = &slot->outline; |
51 | |
52 | |
53 | /* only oblique outline glyphs */ |
54 | if ( slot->format != FT_GLYPH_FORMAT_OUTLINE ) |
55 | return; |
56 | |
57 | /* we don't touch the advance width */ |
58 | |
59 | /* For italic, simply apply a shear transform, with an angle */ |
60 | /* of about 12 degrees. */ |
61 | |
62 | transform.xx = 0x10000L; |
63 | transform.yx = 0x00000L; |
64 | |
65 | transform.xy = 0x06000L; |
66 | transform.yy = 0x10000L; |
67 | |
68 | FT_Outline_Transform( outline, &transform ); |
69 | } |
70 | |
71 | |
72 | /*************************************************************************/ |
73 | /*************************************************************************/ |
74 | /**** ****/ |
75 | /**** EXPERIMENTAL EMBOLDENING/OUTLINING SUPPORT ****/ |
76 | /**** ****/ |
77 | /*************************************************************************/ |
78 | /*************************************************************************/ |
79 | |
80 | |
81 | /* documentation is in ftsynth.h */ |
82 | |
83 | FT_EXPORT_DEF( void )extern void |
84 | FT_GlyphSlot_Embolden( FT_GlyphSlot slot ) |
85 | { |
86 | FT_Library library = slot->library; |
87 | FT_Face face = slot->face; |
88 | FT_Error error; |
89 | FT_Pos xstr, ystr; |
90 | |
91 | |
92 | if ( slot->format != FT_GLYPH_FORMAT_OUTLINE && |
93 | slot->format != FT_GLYPH_FORMAT_BITMAP ) |
94 | return; |
95 | |
96 | /* some reasonable strength */ |
97 | xstr = FT_MulFix( face->units_per_EM,FT_MulFix_i386( face->units_per_EM, face->size->metrics .y_scale ) |
98 | face->size->metrics.y_scale )FT_MulFix_i386( face->units_per_EM, face->size->metrics .y_scale ) / 24; |
99 | ystr = xstr; |
100 | |
101 | if ( slot->format == FT_GLYPH_FORMAT_OUTLINE ) |
102 | { |
103 | error = FT_Outline_Embolden( &slot->outline, xstr ); |
Value stored to 'error' is never read | |
104 | /* ignore error */ |
105 | |
106 | /* this is more than enough for most glyphs; if you need accurate */ |
107 | /* values, you have to call FT_Outline_Get_CBox */ |
108 | xstr = xstr * 2; |
109 | ystr = xstr; |
110 | } |
111 | else if ( slot->format == FT_GLYPH_FORMAT_BITMAP ) |
112 | { |
113 | /* round to full pixels */ |
114 | xstr &= ~63; |
115 | if ( xstr == 0 ) |
116 | xstr = 1 << 6; |
117 | ystr &= ~63; |
118 | |
119 | /* |
120 | * XXX: overflow check for 16-bit system, for compatibility |
121 | * with FT_GlyphSlot_Embolden() since freetype-2.1.10. |
122 | * unfortunately, this function return no informations |
123 | * about the cause of error. |
124 | */ |
125 | if ( ( ystr >> 6 ) > FT_INT_MAX2147483647 || ( ystr >> 6 ) < FT_INT_MIN(-2147483647 -1) ) |
126 | { |
127 | FT_TRACE1(( "FT_GlyphSlot_Embolden:" ))do { } while ( 0 ); |
128 | FT_TRACE1(( "too strong embolding parameter ystr=%d\n", ystr ))do { } while ( 0 ); |
129 | return; |
130 | } |
131 | error = FT_GlyphSlot_Own_Bitmap( slot ); |
132 | if ( error ) |
133 | return; |
134 | |
135 | error = FT_Bitmap_Embolden( library, &slot->bitmap, xstr, ystr ); |
136 | if ( error ) |
137 | return; |
138 | } |
139 | |
140 | if ( slot->advance.x ) |
141 | slot->advance.x += xstr; |
142 | |
143 | if ( slot->advance.y ) |
144 | slot->advance.y += ystr; |
145 | |
146 | slot->metrics.width += xstr; |
147 | slot->metrics.height += ystr; |
148 | slot->metrics.horiBearingY += ystr; |
149 | slot->metrics.horiAdvance += xstr; |
150 | slot->metrics.vertBearingX -= xstr / 2; |
151 | slot->metrics.vertBearingY += ystr; |
152 | slot->metrics.vertAdvance += ystr; |
153 | |
154 | /* XXX: 16-bit overflow case must be excluded before here */ |
155 | if ( slot->format == FT_GLYPH_FORMAT_BITMAP ) |
156 | slot->bitmap_top += (FT_Int)( ystr >> 6 ); |
157 | } |
158 | |
159 | |
160 | /* END */ |