mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-30 09:00:31 -08:00
For Xft and X font backends, set omitted max_width font fields.
* src/xfont.c (xfont_open): * src/xftfont.c (xftfont_open): Set the font's max_width field. * src/font.h (struct font): Update comments.
This commit is contained in:
parent
1c308380b6
commit
032a42c88d
4 changed files with 31 additions and 14 deletions
|
|
@ -1,6 +1,19 @@
|
|||
2012-08-16 Chong Yidong <cyd@gnu.org>
|
||||
|
||||
* xfont.c (xfont_open):
|
||||
* xftfont.c (xftfont_open): Set the font's max_width field.
|
||||
|
||||
* nsfont.m (nsfont_open): Similar to the Xft backend, set
|
||||
min_width to space_width and average_width to the average over
|
||||
printable ASCII characters.
|
||||
(ns_char_width): Code cleanup.
|
||||
(ns_ascii_average_width): New utility function.
|
||||
|
||||
* font.h (struct font): Update comments.
|
||||
|
||||
2012-08-16 Dmitry Antipov <dmantipov@yandex.ru>
|
||||
|
||||
Simple interface to set Lisp_Object fields of chararcter tables.
|
||||
Simple interface to set Lisp_Object fields of character tables.
|
||||
* lisp.h (CSET): New macro.
|
||||
(char_table_set_extras, char_table_set_contents)
|
||||
(sub_char_table_set_contents): New function.
|
||||
|
|
|
|||
12
src/font.h
12
src/font.h
|
|
@ -284,8 +284,11 @@ struct font
|
|||
|
||||
/* Beyond here, there should be no more Lisp_Object components. */
|
||||
|
||||
/* Maximum bound width over all existing characters of the font. On
|
||||
X window, this is same as (font->max_bounds.width). */
|
||||
/* Minimum and maximum glyph widths, in pixels. Some font backends,
|
||||
such as xft, lack the information to easily compute minimum and
|
||||
maximum widths over all characters; in that case, these values
|
||||
are approximate. */
|
||||
int min_width;
|
||||
int max_width;
|
||||
|
||||
/* By which pixel size the font is opened. */
|
||||
|
|
@ -301,13 +304,10 @@ struct font
|
|||
|
||||
/* Average width of glyphs in the font. If the font itself doesn't
|
||||
have that information but has glyphs of ASCII characters, the
|
||||
value is the average with of those glyphs. Otherwise, the value
|
||||
value is the average width of those glyphs. Otherwise, the value
|
||||
is 0. */
|
||||
int average_width;
|
||||
|
||||
/* Minimum glyph width (in pixels). */
|
||||
int min_width;
|
||||
|
||||
/* Ascent and descent of the font (in pixels). */
|
||||
int ascent, descent;
|
||||
|
||||
|
|
|
|||
|
|
@ -823,6 +823,7 @@ xfont_open (FRAME_PTR f, Lisp_Object entity, int pixel_size)
|
|||
font->descent = xfont->descent;
|
||||
font->height = font->ascent + font->descent;
|
||||
font->min_width = xfont->min_bounds.width;
|
||||
font->max_width = xfont->max_bounds.width;
|
||||
if (xfont->min_bounds.width == xfont->max_bounds.width)
|
||||
{
|
||||
/* Fixed width font. */
|
||||
|
|
|
|||
|
|
@ -414,20 +414,25 @@ xftfont_open (FRAME_PTR f, Lisp_Object entity, int pixel_size)
|
|||
ascii_printable[ch] = ' ' + ch;
|
||||
}
|
||||
BLOCK_INPUT;
|
||||
|
||||
/* Unfortunately Xft doesn't provide a way to get minimum char
|
||||
width. So, we set min_width to space_width. */
|
||||
|
||||
if (spacing != FC_PROPORTIONAL
|
||||
#ifdef FC_DUAL
|
||||
&& spacing != FC_DUAL
|
||||
#endif /* FC_DUAL */
|
||||
)
|
||||
{
|
||||
font->min_width = font->average_width = font->space_width
|
||||
= xftfont->max_advance_width;
|
||||
font->min_width = font->max_width = font->average_width
|
||||
= font->space_width = xftfont->max_advance_width;
|
||||
XftTextExtents8 (display, xftfont, ascii_printable + 1, 94, &extents);
|
||||
}
|
||||
else
|
||||
{
|
||||
XftTextExtents8 (display, xftfont, ascii_printable, 1, &extents);
|
||||
font->space_width = extents.xOff;
|
||||
font->min_width = font->max_width = font->space_width
|
||||
= extents.xOff;
|
||||
if (font->space_width <= 0)
|
||||
/* dirty workaround */
|
||||
font->space_width = pixel_size;
|
||||
|
|
@ -470,10 +475,6 @@ xftfont_open (FRAME_PTR f, Lisp_Object entity, int pixel_size)
|
|||
#endif /* HAVE_LIBOTF */
|
||||
xftfont_info->ft_size = ft_face->size;
|
||||
|
||||
/* Unfortunately Xft doesn't provide a way to get minimum char
|
||||
width. So, we use space_width instead. */
|
||||
font->min_width = font->space_width;
|
||||
|
||||
font->baseline_offset = 0;
|
||||
font->relative_compose = 0;
|
||||
font->default_ascent = 0;
|
||||
|
|
@ -764,6 +765,8 @@ syms_of_xftfont (void)
|
|||
DEFSYM (QCembolden, ":embolden");
|
||||
DEFSYM (QClcdfilter, ":lcdfilter");
|
||||
|
||||
ascii_printable[0] = 0;
|
||||
|
||||
xftfont_driver = ftfont_driver;
|
||||
xftfont_driver.type = Qxft;
|
||||
xftfont_driver.get_cache = xfont_driver.get_cache;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue