Mercurial > emacs
changeset 111038:8d403fa5e77d
Fix incorrect font metrics when the same font is opened with different pixelsizes.
author | Kenichi Handa <handa@m17n.org> |
---|---|
date | Fri, 15 Oct 2010 16:49:11 +0900 |
parents | db77dacc48e1 |
children | 5e8f54361c49 fc09ebad59dd |
files | src/ChangeLog src/xftfont.c |
diffstat | 2 files changed, 30 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ChangeLog Fri Oct 15 09:43:23 2010 +0900 +++ b/src/ChangeLog Fri Oct 15 16:49:11 2010 +0900 @@ -1,3 +1,12 @@ +2010-10-15 Kenichi Handa <handa@m17n.org> + + Fix incorrect font metrics when the same font is opened with + different pixelsizes. + + * xftfont.c: Include composite.h. + (xftfont_shape): New function. + (syms_of_xftfont): Set xftfont_driver.shape. + 2010-10-13 Damyan Pepper <damyanp@gmail.com> Fix handling of font properties on Windows (bug#6303).
--- a/src/xftfont.c Fri Oct 15 09:43:23 2010 +0900 +++ b/src/xftfont.c Fri Oct 15 16:49:11 2010 +0900 @@ -32,6 +32,7 @@ #include "blockinput.h" #include "character.h" #include "charset.h" +#include "composite.h" #include "fontset.h" #include "font.h" #include "ftfont.h" @@ -702,6 +703,23 @@ return len; } +Lisp_Object +xftfont_shape (Lisp_Object lgstring) +{ + struct font *font; + struct xftfont_info *xftfont_info; + FT_Face ft_face; + Lisp_Object val; + + CHECK_FONT_GET_OBJECT (LGSTRING_FONT (lgstring), font); + xftfont_info = (struct xftfont_info *) font; + ft_face = XftLockFace (xftfont_info->xftfont); + xftfont_info->ft_size = ft_face->size; + val = ftfont_driver.shape (lgstring); + XftUnlockFace (xftfont_info->xftfont); + return val; +} + static int xftfont_end_for_frame (f) FRAME_PTR f; @@ -796,6 +814,9 @@ xftfont_driver.draw = xftfont_draw; xftfont_driver.end_for_frame = xftfont_end_for_frame; xftfont_driver.cached_font_ok = xftfont_cached_font_ok; +#if defined (HAVE_M17N_FLT) && defined (HAVE_LIBOTF) + xftfont_driver.shape = xftfont_shape; +#endif register_font_driver (&xftfont_driver, NULL); }