diff options
| author | Eli Zaretskii | 2019-06-01 14:49:07 +0300 |
|---|---|---|
| committer | Eli Zaretskii | 2019-06-01 14:49:07 +0300 |
| commit | a8a114af4f965d3eedc69417e73c53fe782cb7c0 (patch) | |
| tree | 9d32b02286ca0e59bc5ae4a30b07b1e9ce64669b /src | |
| parent | 4363777d5c60af8bc93b30d4f6c5e12dc2761160 (diff) | |
| download | emacs-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.c | 76 |
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 | ||