]> git.eshelyaron.com Git - emacs.git/commitdiff
Enable support for color fonts in recent releases of Xft
authorPo Lu <luangruo@yahoo.com>
Tue, 11 Jun 2024 08:59:15 +0000 (16:59 +0800)
committerEshel Yaron <me@eshelyaron.com>
Wed, 12 Jun 2024 09:28:10 +0000 (11:28 +0200)
* etc/PROBLEMS (Some fonts are detected..): Document that Xft
2.3.6 should have resolved this issue.

* src/ftfont.c (ftfont_spec_pattern, ftfont_list): Disable
inhibition of color fonts on Xft 2.3.6 and subsequent versions.

(cherry picked from commit cc30758eed9488aed4149adbf7a285622c3ec446)

etc/PROBLEMS
src/ftfont.c

index 6c143d22de4366b79d98abf4c6083a67e41ca1c7..9cbcee51fe8ea060cc9097fc8948103762ac0c86 100644 (file)
@@ -977,6 +977,8 @@ to take advantage of.
 
 ** Some fonts are detected but not usable under Xft.
 
+We understand that these issues were resolved in Xft release 2.3.6.
+
 Some fonts might not be usable under Emacs even though they show up in
 the font family list when Emacs is built with Xft.  This is because
 Emacs prevents fonts that have color glyphs (such as color Emoji) from
index 214d7532d6fee15c6dded6a70cebf6069f40fd5a..c89feea1d463ff157dbcaba08ce62aa059e16d3c 100644 (file)
@@ -658,6 +658,11 @@ ftfont_get_open_type_spec (Lisp_Object otf_spec)
 }
 
 #if defined HAVE_XFT && defined FC_COLOR
+#if (XFT_MAJOR < 2                                             \
+    || (XFT_MAJOR == 2 && (XFT_MINOR < 3                       \
+                          || (XFT_MINOR == 3                   \
+                              && XFT_REVISION < 6))))
+
 static bool
 xft_color_font_whitelisted_p (const char *family)
 {
@@ -675,7 +680,9 @@ xft_color_font_whitelisted_p (const char *family)
 
   return false;
 }
-#endif
+
+#endif /* Xft < 2.3.6 */
+#endif /* HAVE_XFT && FC_COLOR */
 
 static FcPattern *
 ftfont_spec_pattern (Lisp_Object spec, char *otlayout,
@@ -815,14 +822,19 @@ ftfont_spec_pattern (Lisp_Object spec, char *otlayout,
       && ! FcPatternAddBool (pattern, FC_SCALABLE, scalable ? FcTrue : FcFalse))
     goto err;
 #if defined HAVE_XFT && defined FC_COLOR
-  /* We really don't like color fonts, they cause Xft crashes.  See
-     Bug#30874.  */
+#if (XFT_MAJOR < 2                                             \
+     || (XFT_MAJOR == 2 && (XFT_MINOR < 3                      \
+                           || (XFT_MINOR == 3                  \
+                               && XFT_REVISION < 6))))
+  /* We really don't like color fonts, they cause Xft crashes with
+     releases older than 2.3.6.  See Bug#30874.  */
   if (xft_ignore_color_fonts
       && (NILP (AREF (spec, FONT_FAMILY_INDEX))
          || NILP (Vxft_color_font_whitelist))
       && ! FcPatternAddBool (pattern, FC_COLOR, FcFalse))
     goto err;
-#endif
+#endif /* Xft < 2.3.6 */
+#endif /* HAVE_XFT && FC_COLOR */
 
   goto finish;
 
@@ -959,6 +971,10 @@ ftfont_list (struct frame *f, Lisp_Object spec)
     {
       Lisp_Object entity;
 #if defined HAVE_XFT && defined FC_COLOR
+#if (XFT_MAJOR < 2                                             \
+     || (XFT_MAJOR == 2 && (XFT_MINOR < 3                      \
+                           || (XFT_MINOR == 3                  \
+                               && XFT_REVISION < 6))))
       {
         /* Some fonts, notably NotoColorEmoji, have an FC_COLOR value
            that's neither FcTrue nor FcFalse, which means FcFontList
@@ -975,7 +991,8 @@ ftfont_list (struct frame *f, Lisp_Object spec)
             == FcResultMatch && b != FcFalse)
             continue;
       }
-#endif
+#endif /* Xft < 2.3.6 */
+#endif /* HAVE_XFT && FC_COLOR */
       if (spacing >= 0)
        {
          int this;