aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorEli Zaretskii2019-06-01 14:49:07 +0300
committerEli Zaretskii2019-06-01 14:49:07 +0300
commita8a114af4f965d3eedc69417e73c53fe782cb7c0 (patch)
tree9d32b02286ca0e59bc5ae4a30b07b1e9ce64669b /src
parent4363777d5c60af8bc93b30d4f6c5e12dc2761160 (diff)
downloademacs-a8a114af4f965d3eedc69417e73c53fe782cb7c0.tar.gz
emacs-a8a114af4f965d3eedc69417e73c53fe782cb7c0.zip
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.
Diffstat (limited to 'src')
-rw-r--r--src/w32fns.c76
1 files changed, 72 insertions, 4 deletions
diff --git a/src/w32fns.c b/src/w32fns.c
index 25fa1ac6ea0..8ebfc119521 100644
--- a/src/w32fns.c
+++ b/src/w32fns.c
@@ -5844,11 +5844,45 @@ DEFUN ("x-create-frame", Fx_create_frame, Sx_create_frame,
5844 specbind (Qx_resource_name, name); 5844 specbind (Qx_resource_name, name);
5845 } 5845 }
5846 5846
5847 bool register_uniscribe = uniscribe_available;
5847#ifdef HAVE_HARFBUZZ 5848#ifdef HAVE_HARFBUZZ
5848 if (harfbuzz_available) 5849 /* Register Uniscribe only if HarfBuzz is not available or if
5850 explicitly requested. If Uniscribe is registered, register
5851 HarfBuzz only if explicitly requested. */
5852 bool register_harfbuzz = harfbuzz_available;
5853 if (register_harfbuzz)
5854 register_uniscribe = false;
5855 Lisp_Object dflt_backends
5856 = gui_display_get_arg (dpyinfo, parameters, Qfont_backend,
5857 "fontBackend", "FontBackend", RES_TYPE_STRING);
5858 if (!EQ (dflt_backends, Qunbound))
5859 {
5860 bool harfbuzz_requested = false, uniscribe_requested = false;
5861 if (CONSP (dflt_backends))
5862 {
5863 if (!NILP (Fmemq (Quniscribe, dflt_backends)))
5864 uniscribe_requested = true;
5865 if (!NILP (Fmemq (Qharfbuzz, dflt_backends)))
5866 harfbuzz_requested = true;
5867 }
5868 else if (STRINGP (dflt_backends))
5869 {
5870 if (strcmp (SSDATA (dflt_backends), "uniscribe") == 0)
5871 uniscribe_requested = true;
5872 else if (strcmp (SSDATA (dflt_backends), "harfbuzz") == 0)
5873 harfbuzz_requested = true;
5874 }
5875 if (uniscribe_requested)
5876 {
5877 register_uniscribe = uniscribe_available;
5878 if (!harfbuzz_requested)
5879 register_harfbuzz = false;
5880 }
5881 }
5882 if (register_harfbuzz)
5849 register_font_driver (&harfbuzz_font_driver, f); 5883 register_font_driver (&harfbuzz_font_driver, f);
5850#endif 5884#endif
5851 if (uniscribe_available) 5885 if (register_uniscribe)
5852 register_font_driver (&uniscribe_font_driver, f); 5886 register_font_driver (&uniscribe_font_driver, f);
5853 register_font_driver (&w32font_driver, f); 5887 register_font_driver (&w32font_driver, f);
5854 5888
@@ -6901,11 +6935,45 @@ w32_create_tip_frame (struct w32_display_info *dpyinfo, Lisp_Object parms)
6901 specbind (Qx_resource_name, name); 6935 specbind (Qx_resource_name, name);
6902 } 6936 }
6903 6937
6938 bool register_uniscribe = uniscribe_available;
6904#ifdef HAVE_HARFBUZZ 6939#ifdef HAVE_HARFBUZZ
6905 if (harfbuzz_available) 6940 /* Register Uniscribe only if HarfBuzz is not available or if
6941 explicitly requested. If Uniscribe is registered, register
6942 HarfBuzz only if explicitly requested. */
6943 bool register_harfbuzz = harfbuzz_available;
6944 if (register_harfbuzz)
6945 register_uniscribe = false;
6946 Lisp_Object dflt_backends
6947 = gui_display_get_arg (dpyinfo, parms, Qfont_backend,
6948 "fontBackend", "FontBackend", RES_TYPE_STRING);
6949 if (!EQ (dflt_backends, Qunbound))
6950 {
6951 bool harfbuzz_requested = false, uniscribe_requested = false;
6952 if (CONSP (dflt_backends))
6953 {
6954 if (!NILP (Fmemq (Quniscribe, dflt_backends)))
6955 uniscribe_requested = true;
6956 if (!NILP (Fmemq (Qharfbuzz, dflt_backends)))
6957 harfbuzz_requested = true;
6958 }
6959 else if (STRINGP (dflt_backends))
6960 {
6961 if (strcmp (SSDATA (dflt_backends), "uniscribe") == 0)
6962 uniscribe_requested = true;
6963 else if (strcmp (SSDATA (dflt_backends), "harfbuzz") == 0)
6964 harfbuzz_requested = true;
6965 }
6966 if (uniscribe_requested)
6967 {
6968 register_uniscribe = uniscribe_available;
6969 if (!harfbuzz_requested)
6970 register_harfbuzz = false;
6971 }
6972 }
6973 if (register_harfbuzz)
6906 register_font_driver (&harfbuzz_font_driver, f); 6974 register_font_driver (&harfbuzz_font_driver, f);
6907#endif 6975#endif
6908 if (uniscribe_available) 6976 if (register_uniscribe)
6909 register_font_driver (&uniscribe_font_driver, f); 6977 register_font_driver (&uniscribe_font_driver, f);
6910 register_font_driver (&w32font_driver, f); 6978 register_font_driver (&w32font_driver, f);
6911 6979