bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#43148: 27.1; Widget text seems to disappear when building with Cairo


From: YAMAMOTO Mitsuharu
Subject: bug#43148: 27.1; Widget text seems to disappear when building with Cairo and Xaw
Date: Sat, 05 Dec 2020 15:51:30 +0900
User-agent: Wanderlust/2.15.9 (Almost Unreal) SEMI-EPG/1.14.7 (Harue) FLIM/1.14.9 (Gojō) APEL/10.8 EasyPG/1.0.0 Emacs/26.3 (x86_64-pc-linux-gnu) MULE/6.0 (HANACHIRUSATO)

On Fri, 04 Dec 2020 18:28:24 +0900,
tastytea wrote:
> 
> [1  <text/plain; UTF-8 (quoted-printable)>]
> On 2020-12-04 17:41+0900 YAMAMOTO Mitsuharu
> <mituharu@math.s.chiba-u.ac.jp> wrote:
> 
> > On Thu, 03 Dec 2020 17:18:15 +0900,
> > tastytea wrote:
> > > 
> > > On 2020-12-03 11:13+0900 YAMAMOTO Mitsuharu
> > > <mituharu@math.s.chiba-u.ac.jp> wrote:
> > >   
> > > > On Tue, 01 Dec 2020 22:10:32 +0900,
> > > > tastytea wrote:  
> > > > > 
> > > > > On 2020-11-28 17:22+0900 YAMAMOTO Mitsuharu
> > > > > <mituharu@math.s.chiba-u.ac.jp> wrote:
> > > > >     
> > > > > > On Wed, 25 Nov 2020 11:30:07 +0900,
> > > > > > Basil L. Contovounesios wrote:    
> > > > > > > 
> > > > > > > Robert Pluim <rpluim@gmail.com> writes:
> > > > > > >       
> > > > > > > >>>>>> On Tue, 01 Sep 2020 17:09:18 +0300, Eli Zaretskii
> > > > > > > >>>>>> <eliz@gnu.org> said:      
> > > > > > > >      
> > > > > > > >     >> From: Pouar Dragon <pouar@pouar.net>
> > > > > > > >     >> Date: Mon, 31 Aug 2020 21:34:46 -0500
> > > > > > > >     >> 
> > > > > > > >     >> widgets when building with Xaw and Cairo seem to
> > > > > > > >     >> have missing text, looking like this
> > > > > > > >     >> 
> > > > > > > >     >> problem seems to go away when
> > > > > > > >     >> 5f4e8e2e088de9fb76cb631077c6eddd3219f594 is
> > > > > > > >     >> reverted 
> > > > > > > >      
> > > > > > > >     Eli> Thanks.  I hope Yamamoto-san will be able to
> > > > > > > >     Eli> take a look at this.      
> > > > > > > >
> > > > > > > > Putting on my 'let's simplify' hat, is this really a
> > > > > > > > combination we want to spend time on? Lucid + Xaw + Cairo
> > > > > > > > is decidedly non-mainstream (Iʼm surprised it even
> > > > > > > > builds).      
> > > > > > > 
> > > > > > > FWIW, I've been happily using Lucid + Xaw3D for several
> > > > > > > years, and Cairo ever since it became stable in Emacs 27
> > > > > > > and the default configuration in Emacs 28.
> > > > > > > 
> > > > > > > I usually have menu-bar-mode off, but like other reports in
> > > > > > > this thread, the menus look fine when I do open them, e.g.
> > > > > > > after 'emacs -Q'.
> > > > > > > 
> > > > > > > Could the issue depend on e.g. the version of Cairo?  (I
> > > > > > > seem to have an older version than the OP.)      
> > > > > > 
> > > > > > Possibly.  The OP seems to use cairo 1.17.3, which is not a
> > > > > > release version (the latest is 1.16.0) and even not the
> > > > > > snapshot one (the latest is 1.17.2 according to
> > > > > > https://cairographics.org).    
> > > > > 
> > > > > I experience the same issue as the OP with lucid and cairo
> > > > > 1.16.0, with and without xaw3d, on Gentoo Linux. The problem
> > > > > goes away if I disable cairo.
> > > > > The same happens with 28.0.50, commit
> > > > > 1a3aa6043a51e5bb4007889dd7dcabb55dc44132.    
> > > > 
> > > > So, only digits are shown with "$ emacs -Q" ?  
> > > 
> > > Yes, exactly like the screenshot in the first message.
> > >   
> > > > Could you show us the output of "$ fc-match -s sans" ?
> > > > 
> > > > I tried the latest snapshot cairo 1.17.4 on XQuartz/macOS, and I
> > > > don't see any problems.  On my side, "$ fc-match -s sans" reports
> > > > Arial Unicode.ttf at the first line.  
> > > 
> > > The list is huge, are the first 10 lines enough?
> > > 
> > > SourceSansPro-Regular.otf: "Source Sans Pro" "Regular"
> > > NotoColorEmoji.ttf: "Noto Color Emoji" "Regular"
> > > LiberationSans-Regular.ttf: "Liberation Sans" "Regular"
> > > DejaVuSans.ttf: "DejaVu Sans" "Book"
> > > DejaVuSans-Bold.ttf: "DejaVu Sans" "Bold"
> > > DejaVuSans-Oblique.ttf: "DejaVu Sans" "Oblique"
> > > DejaVuSans-BoldOblique.ttf: "DejaVu Sans" "Bold Oblique"
> > > luxisr.ttf: "Luxi Sans" "Regular"
> > > l048013t.pfa: "Luxi Sans" "Regular"
> > > n019003l.pfb: "Nimbus Sans L" "Regular"  
> > 
> > Thanks.  I conjectured Noto Color Emoji, which contains digit glyphs
> > but not for letter ones, would come first.  But that is not the case.
> > I don't know why Source Sans Pro is not used then (libotf is for
> > handling OTF features and not necessary just for displaying).
> > 
> > Anyway, could you try if the following patch works?
> 
> With the patch I get rectangles instead of letters.
> 
> I removed Noto Color Emoji from my font configuration in
> ~/.config/fontconfig/fonts.conf and that did the trick. The menus are
> showing text now with and without the patch. But I have no idea why,
> all other programs work fine with that configuration:

I could reproduce the problem with your configuration.
Could you try the patch below?

                             YAMAMOTO Mitsuharu
                        mituharu@math.s.chiba-u.ac.jp

diff --git a/lwlib/lwlib-utils.c b/lwlib/lwlib-utils.c
index f15cb603a8..2b3aa55c3e 100644
--- a/lwlib/lwlib-utils.c
+++ b/lwlib/lwlib-utils.c
@@ -148,6 +148,7 @@ XtWidgetBeingDestroyedP (Widget widget)
 crxft_font_open_name (Display *dpy, int screen, const char *name)
 {
   XftFont *pub = NULL;
+  FcPattern *match = NULL;
   FcPattern *pattern = FcNameParse ((FcChar8 *) name);
   if (pattern)
     {
@@ -162,12 +163,18 @@ crxft_font_open_name (Display *dpy, int screen, const 
char *name)
          FcPatternAddDouble (pattern, FC_DPI, dpi);
        }
       FcDefaultSubstitute (pattern);
+      FcResult result;
+      match = FcFontMatch (NULL, pattern, &result);
+      FcPatternDestroy (pattern);
+    }
+  if (match)
+    {
       cairo_font_face_t *font_face
-       = cairo_ft_font_face_create_for_pattern (pattern);
+       = cairo_ft_font_face_create_for_pattern (match);
       if (font_face)
        {
          double pixel_size;
-         if ((FcPatternGetDouble (pattern, FC_PIXEL_SIZE, 0, &pixel_size)
+         if ((FcPatternGetDouble (match, FC_PIXEL_SIZE, 0, &pixel_size)
               != FcResultMatch)
              || pixel_size < 1)
            pixel_size = 10;
@@ -177,7 +184,7 @@ crxft_font_open_name (Display *dpy, int screen, const char 
*name)
          cairo_matrix_init_scale (&font_matrix, pixel_size, pixel_size);
          cairo_matrix_init_identity (&ctm);
          cairo_font_options_t *options = cairo_font_options_create ();
-         cairo_ft_font_options_substitute (options, pattern);
+         cairo_ft_font_options_substitute (options, match);
          pub->scaled_font = cairo_scaled_font_create (font_face, &font_matrix,
                                                       &ctm, options);
          cairo_font_face_destroy (font_face);
@@ -190,7 +197,7 @@ crxft_font_open_name (Display *dpy, int screen, const char 
*name)
          pub->height = lround (extents.height);
          pub->max_advance_width = lround (extents.max_x_advance);
        }
-      FcPatternDestroy (pattern);
+      FcPatternDestroy (match);
     }
   if (pub && pub->height <= 0)
     {





reply via email to

[Prev in Thread] Current Thread [Next in Thread]