emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] harfbuzz a8a114a: Prefer HarfBuzz to Uniscribe on MS-Windo


From: Eli Zaretskii
Subject: [Emacs-diffs] harfbuzz a8a114a: Prefer HarfBuzz to Uniscribe on MS-Windows
Date: Sat, 1 Jun 2019 07:50:31 -0400 (EDT)

branch: harfbuzz
commit a8a114af4f965d3eedc69417e73c53fe782cb7c0
Author: Eli Zaretskii <address@hidden>
Commit: Eli Zaretskii <address@hidden>

    Prefer HarfBuzz to Uniscribe on MS-Windows
    
    * src/w32fns.c (Fx_create_frame, w32_create_tip_frame):
    Register the Uniscribe font backend only if HarfBuzz is not
    available, or if explicitly requested via frame parameters
    or resources.
---
 src/w32fns.c | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 72 insertions(+), 4 deletions(-)

diff --git a/src/w32fns.c b/src/w32fns.c
index 25fa1ac..8ebfc11 100644
--- a/src/w32fns.c
+++ b/src/w32fns.c
@@ -5844,11 +5844,45 @@ DEFUN ("x-create-frame", Fx_create_frame, 
Sx_create_frame,
       specbind (Qx_resource_name, name);
     }
 
+  bool register_uniscribe = uniscribe_available;
 #ifdef HAVE_HARFBUZZ
-  if (harfbuzz_available)
+  /* Register Uniscribe only if HarfBuzz is not available or if
+     explicitly requested.  If Uniscribe is registered, register
+     HarfBuzz only if explicitly requested.  */
+  bool register_harfbuzz = harfbuzz_available;
+  if (register_harfbuzz)
+    register_uniscribe = false;
+  Lisp_Object dflt_backends
+    = gui_display_get_arg (dpyinfo, parameters, Qfont_backend,
+                          "fontBackend", "FontBackend", RES_TYPE_STRING);
+  if (!EQ (dflt_backends, Qunbound))
+    {
+      bool harfbuzz_requested = false, uniscribe_requested = false;
+      if (CONSP (dflt_backends))
+       {
+         if (!NILP (Fmemq (Quniscribe, dflt_backends)))
+           uniscribe_requested = true;
+         if (!NILP (Fmemq (Qharfbuzz, dflt_backends)))
+           harfbuzz_requested = true;
+       }
+      else if (STRINGP (dflt_backends))
+       {
+         if (strcmp (SSDATA (dflt_backends), "uniscribe") == 0)
+           uniscribe_requested = true;
+         else if (strcmp (SSDATA (dflt_backends), "harfbuzz") == 0)
+           harfbuzz_requested = true;
+       }
+      if (uniscribe_requested)
+       {
+         register_uniscribe = uniscribe_available;
+         if (!harfbuzz_requested)
+           register_harfbuzz = false;
+       }
+    }
+  if (register_harfbuzz)
     register_font_driver (&harfbuzz_font_driver, f);
 #endif
-  if (uniscribe_available)
+  if (register_uniscribe)
     register_font_driver (&uniscribe_font_driver, f);
   register_font_driver (&w32font_driver, f);
 
@@ -6901,11 +6935,45 @@ w32_create_tip_frame (struct w32_display_info *dpyinfo, 
Lisp_Object parms)
       specbind (Qx_resource_name, name);
     }
 
+  bool register_uniscribe = uniscribe_available;
 #ifdef HAVE_HARFBUZZ
-  if (harfbuzz_available)
+  /* Register Uniscribe only if HarfBuzz is not available or if
+     explicitly requested.  If Uniscribe is registered, register
+     HarfBuzz only if explicitly requested.  */
+  bool register_harfbuzz = harfbuzz_available;
+  if (register_harfbuzz)
+    register_uniscribe = false;
+  Lisp_Object dflt_backends
+    = gui_display_get_arg (dpyinfo, parms, Qfont_backend,
+                          "fontBackend", "FontBackend", RES_TYPE_STRING);
+  if (!EQ (dflt_backends, Qunbound))
+    {
+      bool harfbuzz_requested = false, uniscribe_requested = false;
+      if (CONSP (dflt_backends))
+       {
+         if (!NILP (Fmemq (Quniscribe, dflt_backends)))
+           uniscribe_requested = true;
+         if (!NILP (Fmemq (Qharfbuzz, dflt_backends)))
+           harfbuzz_requested = true;
+       }
+      else if (STRINGP (dflt_backends))
+       {
+         if (strcmp (SSDATA (dflt_backends), "uniscribe") == 0)
+           uniscribe_requested = true;
+         else if (strcmp (SSDATA (dflt_backends), "harfbuzz") == 0)
+           harfbuzz_requested = true;
+       }
+      if (uniscribe_requested)
+       {
+         register_uniscribe = uniscribe_available;
+         if (!harfbuzz_requested)
+           register_harfbuzz = false;
+       }
+    }
+  if (register_harfbuzz)
     register_font_driver (&harfbuzz_font_driver, f);
 #endif
-  if (uniscribe_available)
+  if (register_uniscribe)
     register_font_driver (&uniscribe_font_driver, f);
   register_font_driver (&w32font_driver, f);
 



reply via email to

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