all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
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);



  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.