comparison src/ftfont.c @ 96568:ff2262b8b0f2

(ftfont_text_extents): Fix initial setting of metrics.
author Kenichi Handa <handa@m17n.org>
date Wed, 09 Jul 2008 07:36:33 +0000
parents d7b47f09b693
children 0ef6933bf3bd
comparison
equal deleted inserted replaced
96567:dea344114c62 96568:ff2262b8b0f2
1169 struct font_metrics *metrics; 1169 struct font_metrics *metrics;
1170 { 1170 {
1171 struct ftfont_info *ftfont_info = (struct ftfont_info *) font; 1171 struct ftfont_info *ftfont_info = (struct ftfont_info *) font;
1172 FT_Face ft_face = ftfont_info->ft_size->face; 1172 FT_Face ft_face = ftfont_info->ft_size->face;
1173 int width = 0; 1173 int width = 0;
1174 int i; 1174 int i, first;
1175 1175
1176 if (ftfont_info->ft_size != ft_face->size) 1176 if (ftfont_info->ft_size != ft_face->size)
1177 FT_Activate_Size (ftfont_info->ft_size); 1177 FT_Activate_Size (ftfont_info->ft_size);
1178 if (metrics) 1178 if (metrics)
1179 bzero (metrics, sizeof (struct font_metrics)); 1179 bzero (metrics, sizeof (struct font_metrics));
1180 for (i = 0; i < nglyphs; i++) 1180 for (i = 0, first = 1; i < nglyphs; i++)
1181 { 1181 {
1182 if (FT_Load_Glyph (ft_face, code[i], FT_LOAD_DEFAULT) == 0) 1182 if (FT_Load_Glyph (ft_face, code[i], FT_LOAD_DEFAULT) == 0)
1183 { 1183 {
1184 FT_Glyph_Metrics *m = &ft_face->glyph->metrics; 1184 FT_Glyph_Metrics *m = &ft_face->glyph->metrics;
1185 1185
1186 if (first)
1187 {
1188 if (metrics)
1189 {
1190 metrics->lbearing = m->horiBearingX >> 6;
1191 metrics->rbearing = (m->horiBearingX + m->width) >> 6;
1192 metrics->ascent = m->horiBearingY >> 6;
1193 metrics->descent = (m->horiBearingY + m->height) >> 6;
1194 }
1195 first = 0;
1196 }
1186 if (metrics) 1197 if (metrics)
1187 { 1198 {
1188 if (metrics->lbearing > width + (m->horiBearingX >> 6)) 1199 if (metrics->lbearing > width + (m->horiBearingX >> 6))
1189 metrics->lbearing = width + (m->horiBearingX >> 6); 1200 metrics->lbearing = width + (m->horiBearingX >> 6);
1190 if (metrics->rbearing 1201 if (metrics->rbearing