emacs-diffs
[Top][All Lists]
Advanced

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

feature/android 1727777a46c 1/4: Match font registry after font is opene


From: Po Lu
Subject: feature/android 1727777a46c 1/4: Match font registry after font is opened
Date: Sun, 19 Feb 2023 22:41:44 -0500 (EST)

branch: feature/android
commit 1727777a46cb28711720faed2f66d195e5973368
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>

    Match font registry after font is opened
    
    * src/fontset.c (fontset_find_font): Work around TrueType
    performance problem.
---
 src/fontset.c | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/src/fontset.c b/src/fontset.c
index f196dee8259..8182d639299 100644
--- a/src/fontset.c
+++ b/src/fontset.c
@@ -667,8 +667,29 @@ fontset_find_font (Lisp_Object fontset, int c, struct face 
*face,
            }
          font_object = font_open_for_lface (f, font_entity, face->lface,
                                             FONT_DEF_SPEC (font_def));
+
+         /* If the font registry is not the same as explicitly
+            specified in the font spec, do not cache the font.
+            TrueType fonts have contrived character map selection
+            semantics which makes determining the repertory at font
+            spec matching time unduly expensive.  */
+
+         {
+           Lisp_Object spec;
+
+           spec = FONT_DEF_SPEC (font_def);
+
+           if (!NILP (font_object)
+               && !NILP (AREF (spec, FONT_REGISTRY_INDEX))
+               && !NILP (AREF (font_object, FONT_REGISTRY_INDEX))
+               && !EQ (AREF (spec, FONT_REGISTRY_INDEX),
+                       AREF (font_object, FONT_REGISTRY_INDEX)))
+             goto strangeness;
+         }
+
          if (NILP (font_object))
            {
+           strangeness:
              /* Something strange happened, perhaps because of a
                 Font-backend problem.  To avoid crashing, record
                 that this spec is unusable.  It may be better to find



reply via email to

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