diff options
| author | YAMAMOTO Mitsuharu | 2019-05-14 10:17:16 +0900 |
|---|---|---|
| committer | YAMAMOTO Mitsuharu | 2019-05-14 10:17:16 +0900 |
| commit | 9b28a5083edecacfac3c7e16308bd8af3f4773a2 (patch) | |
| tree | c01c23b892c62d944d89e1f281cbeb7b307d3562 /src/ftfont.c | |
| parent | 2f7e97ef482ddacd0ed21ccd25ca777beb60ab35 (diff) | |
| download | emacs-9b28a5083edecacfac3c7e16308bd8af3f4773a2.tar.gz emacs-9b28a5083edecacfac3c7e16308bd8af3f4773a2.zip | |
Avoid artifacts in ftx and ftcr font backend drivers
* src/ftcrfont.c (ftcrfont_open):
* src/ftfont.c (ftfont_open2): Make font->height equal to sum of font->ascent
and font->descent. Respect :minspace property.
(ftfont_open2): Remove redundant assignment.
(syms_of_ftfont) <QCminspace>: New DEFSYM.
Diffstat (limited to 'src/ftfont.c')
| -rw-r--r-- | src/ftfont.c | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/src/ftfont.c b/src/ftfont.c index d0078a37701..4770c3c40b3 100644 --- a/src/ftfont.c +++ b/src/ftfont.c | |||
| @@ -1108,7 +1108,6 @@ ftfont_open2 (struct frame *f, | |||
| 1108 | return Qnil; | 1108 | return Qnil; |
| 1109 | filename = XCAR (val); | 1109 | filename = XCAR (val); |
| 1110 | idx = XCDR (val); | 1110 | idx = XCDR (val); |
| 1111 | val = XCDR (cache); | ||
| 1112 | cache_data = xmint_pointer (XCDR (cache)); | 1111 | cache_data = xmint_pointer (XCDR (cache)); |
| 1113 | ft_face = cache_data->ft_face; | 1112 | ft_face = cache_data->ft_face; |
| 1114 | if (cache_data->face_refcount > 0) | 1113 | if (cache_data->face_refcount > 0) |
| @@ -1172,20 +1171,38 @@ ftfont_open2 (struct frame *f, | |||
| 1172 | font->driver = &ftfont_driver; | 1171 | font->driver = &ftfont_driver; |
| 1173 | font->encoding_charset = font->repertory_charset = -1; | 1172 | font->encoding_charset = font->repertory_charset = -1; |
| 1174 | 1173 | ||
| 1174 | val = assq_no_quit (QCminspace, AREF (entity, FONT_EXTRA_INDEX)); | ||
| 1175 | bool no_leading_p = !(CONSP (val) && NILP (XCDR (val))); | ||
| 1175 | upEM = ft_face->units_per_EM; | 1176 | upEM = ft_face->units_per_EM; |
| 1176 | scalable = (FIXNUMP (AREF (entity, FONT_AVGWIDTH_INDEX)) | 1177 | scalable = (FIXNUMP (AREF (entity, FONT_AVGWIDTH_INDEX)) |
| 1177 | && XFIXNUM (AREF (entity, FONT_AVGWIDTH_INDEX)) == 0); | 1178 | && XFIXNUM (AREF (entity, FONT_AVGWIDTH_INDEX)) == 0); |
| 1178 | if (scalable) | 1179 | if (scalable) |
| 1179 | { | 1180 | { |
| 1180 | font->ascent = ft_face->ascender * size / upEM + 0.5; | 1181 | font->ascent = ft_face->ascender * size / upEM + 0.5; |
| 1181 | font->descent = - ft_face->descender * size / upEM + 0.5; | 1182 | if (no_leading_p) |
| 1182 | font->height = ft_face->height * size / upEM + 0.5; | 1183 | { |
| 1184 | font->descent = - ft_face->descender * size / upEM + 0.5; | ||
| 1185 | font->height = font->ascent + font->descent; | ||
| 1186 | } | ||
| 1187 | else | ||
| 1188 | { | ||
| 1189 | font->height = ft_face->height * size / upEM + 0.5; | ||
| 1190 | font->descent = font->height - font->ascent; | ||
| 1191 | } | ||
| 1183 | } | 1192 | } |
| 1184 | else | 1193 | else |
| 1185 | { | 1194 | { |
| 1186 | font->ascent = ft_face->size->metrics.ascender >> 6; | 1195 | font->ascent = ft_face->size->metrics.ascender >> 6; |
| 1187 | font->descent = - ft_face->size->metrics.descender >> 6; | 1196 | if (no_leading_p) |
| 1188 | font->height = ft_face->size->metrics.height >> 6; | 1197 | { |
| 1198 | font->descent = - ft_face->size->metrics.descender >> 6; | ||
| 1199 | font->height = font->ascent + font->descent; | ||
| 1200 | } | ||
| 1201 | else | ||
| 1202 | { | ||
| 1203 | font->height = ft_face->size->metrics.height >> 6; | ||
| 1204 | font->descent = font->height - font->ascent; | ||
| 1205 | } | ||
| 1189 | } | 1206 | } |
| 1190 | if (FIXNUMP (AREF (entity, FONT_SPACING_INDEX))) | 1207 | if (FIXNUMP (AREF (entity, FONT_SPACING_INDEX))) |
| 1191 | spacing = XFIXNUM (AREF (entity, FONT_SPACING_INDEX)); | 1208 | spacing = XFIXNUM (AREF (entity, FONT_SPACING_INDEX)); |
| @@ -2769,6 +2786,9 @@ syms_of_ftfont (void) | |||
| 2769 | DEFSYM (Qsans, "sans"); | 2786 | DEFSYM (Qsans, "sans"); |
| 2770 | DEFSYM (Qsans__serif, "sans serif"); | 2787 | DEFSYM (Qsans__serif, "sans serif"); |
| 2771 | 2788 | ||
| 2789 | /* The boolean-valued font property key specifying the use of leading. */ | ||
| 2790 | DEFSYM (QCminspace, ":minspace"); | ||
| 2791 | |||
| 2772 | staticpro (&freetype_font_cache); | 2792 | staticpro (&freetype_font_cache); |
| 2773 | freetype_font_cache = list1 (Qt); | 2793 | freetype_font_cache = list1 (Qt); |
| 2774 | 2794 | ||