Mercurial > emacs
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 |