From: YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
To: Stephen Berman <stephen.berman@gmx.net>
Cc: emacs-devel@gnu.org
Subject: Re: Cairo font selection for Ethiopic
Date: Fri, 21 Jun 2019 10:54:03 +0900 [thread overview]
Message-ID: <wllfxvya84.wl-mituharu@math.s.chiba-u.ac.jp> (raw)
In-Reply-To: <87pnn8cawu.fsf@rub.de>
On Fri, 21 Jun 2019 04:30:09 +0900,
Stephen Berman wrote:
>
> I don't know if this is a bug or just the way Cairo works. On two
> different GNU/Linux systems I have built Emacs both --with-cairo and
> without. The non-Cairo builds use Xft as the font backend. On those
> builds the Ethiopic scripts (Amharic and Tigrinya) in HELLO are
> displayed with the Goha-Tibeb Zemen font. In the Cairo builds this font
> is not used for these scripts; instead, on one system they are displayed
> with a mix of GNU Unifont and mutt-clearlyu, and on the other system,
> which lacks these fonts, only hex boxes are displayed. Is there
> something about Goha-Tibeb Zemen that is incompatible with Cairo?
Goha-Tibeb Zemen does not have glyphs for ASCII printables that the
ftcr font backend relies on computing minimum/average/space width when
opening the font. The patch below should simulate the Xft behavior.
YAMAMOTO Mitsuharu
mituharu@math.s.chiba-u.ac.jp
diff --git a/src/ftcrfont.c b/src/ftcrfont.c
index a019fe8294a..0cc40b4c944 100644
--- a/src/ftcrfont.c
+++ b/src/ftcrfont.c
@@ -187,7 +187,6 @@ ftcrfont_open (struct frame *f, Lisp_Object entity, int pixel_size)
block_input ();
cairo_glyph_t stack_glyph;
- int n = 0;
font->min_width = font->average_width = font->space_width = 0;
for (char c = 32; c < 127; c++)
{
@@ -198,28 +197,25 @@ ftcrfont_open (struct frame *f, Lisp_Object entity, int pixel_size)
0, 0, &c, 1, &glyphs, &num_glyphs,
NULL, NULL, NULL);
- if (status == CAIRO_STATUS_SUCCESS)
+ /* In order to simulate the Xft behavior, we use metrics of
+ glyph ID 0 if there is no glyph for an ASCII printable. */
+ if (status != CAIRO_STATUS_SUCCESS)
+ stack_glyph.index = 0;
+ else if (glyphs != &stack_glyph)
{
- if (glyphs != &stack_glyph)
- cairo_glyph_free (glyphs);
- else if (stack_glyph.index)
- {
- int this_width = ftcrfont_glyph_extents (font, stack_glyph.index,
- NULL);
-
- if (this_width > 0
- && (! font->min_width
- || font->min_width > this_width))
- font->min_width = this_width;
- if (c == 32)
- font->space_width = this_width;
- font->average_width += this_width;
- n++;
- }
+ cairo_glyph_free (glyphs);
+ stack_glyph.index = 0;
}
+ int this_width = ftcrfont_glyph_extents (font, stack_glyph.index, NULL);
+ if (this_width > 0
+ && (! font->min_width
+ || font->min_width > this_width))
+ font->min_width = this_width;
+ if (c == 32)
+ font->space_width = this_width;
+ font->average_width += this_width;
}
- if (n > 0)
- font->average_width /= n;
+ font->average_width /= 95;
cairo_scaled_font_extents (ftcrfont_info->cr_scaled_font, &extents);
font->ascent = lround (extents.ascent);
next prev parent reply other threads:[~2019-06-21 1:54 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-20 19:30 Cairo font selection for Ethiopic Stephen Berman
2019-06-21 1:54 ` YAMAMOTO Mitsuharu [this message]
2019-06-21 8:05 ` Stephen Berman
2019-06-21 10:52 ` mituharu
2019-06-21 11:28 ` Stephen Berman
2019-06-22 3:08 ` YAMAMOTO Mitsuharu
2019-06-22 9:06 ` Stephen Berman
2019-06-22 9:32 ` mituharu
2019-06-22 9:48 ` Stephen Berman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=wllfxvya84.wl-mituharu@math.s.chiba-u.ac.jp \
--to=mituharu@math.s.chiba-u.ac.jp \
--cc=emacs-devel@gnu.org \
--cc=stephen.berman@gmx.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.