summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>2015-06-05 09:44:40 +0900
committerYAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>2015-06-05 09:44:40 +0900
commit7c9a2ef84579e88447e8cdf46b6f38d83d0a8cc0 (patch)
treee72d5dfd14943c4daced4aab65c19189bcbdc766
parentdcf18b5c84fc9704bb2d1cfd01519710f105d126 (diff)
downloademacs-7c9a2ef84579e88447e8cdf46b6f38d83d0a8cc0.tar.gz
emacs-7c9a2ef84579e88447e8cdf46b6f38d83d0a8cc0.tar.bz2
emacs-7c9a2ef84579e88447e8cdf46b6f38d83d0a8cc0.zip
* src/ftfont.c (ftfont_open2): Round divisions by upEM.
-rw-r--r--src/ftfont.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/ftfont.c b/src/ftfont.c
index afeaecac60c..b37b404c5ef 100644
--- a/src/ftfont.c
+++ b/src/ftfont.c
@@ -1179,7 +1179,7 @@ ftfont_open2 (struct frame *f,
bool scalable;
int spacing;
int i;
- int upEM;
+ double upEM;
val = assq_no_quit (QCfont_entity, AREF (entity, FONT_EXTRA_INDEX));
if (! CONSP (val))
@@ -1235,9 +1235,9 @@ ftfont_open2 (struct frame *f,
&& XINT (AREF (entity, FONT_AVGWIDTH_INDEX)) == 0);
if (scalable)
{
- font->ascent = ft_face->ascender * size / upEM;
- font->descent = - ft_face->descender * size / upEM;
- font->height = ft_face->height * size / upEM;
+ font->ascent = ft_face->ascender * size / upEM + 0.5;
+ font->descent = - ft_face->descender * size / upEM + 0.5;
+ font->height = ft_face->height * size / upEM + 0.5;
}
else
{
@@ -1255,7 +1255,7 @@ ftfont_open2 (struct frame *f,
#endif /* FC_DUAL */
)
font->min_width = font->average_width = font->space_width
- = (scalable ? ft_face->max_advance_width * size / upEM
+ = (scalable ? ft_face->max_advance_width * size / upEM + 0.5
: ft_face->size->metrics.max_advance >> 6);
else
{
@@ -1285,8 +1285,10 @@ ftfont_open2 (struct frame *f,
font->vertical_centering = 0;
if (scalable)
{
- font->underline_position = -ft_face->underline_position * size / upEM;
- font->underline_thickness = ft_face->underline_thickness * size / upEM;
+ font->underline_position = (-ft_face->underline_position * size / upEM
+ + 0.5);
+ font->underline_thickness = (ft_face->underline_thickness * size / upEM
+ + 0.5);
}
else
{