From 10ba2aeceaf21aca556245ae5cdfc38e044b91e8 Mon Sep 17 00:00:00 2001 From: Andrew Choi Date: Thu, 4 Jul 2002 02:43:48 +0000 Subject: [PATCH] 2002-07-03 Andrew Choi * macterm.c (x_list_fonts): Fix comment. Cache fonts matching pattern. Search cache first. --- src/ChangeLog | 6 ++++-- src/macterm.c | 32 ++++++++++++++++++++++++++------ 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 23e7681b2f5..91186f660ee 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,7 +1,9 @@ 2002-07-03 Andrew Choi - * macterm.c (init_font_name_table): Also add entry for - jisx0201.1976-0 coding for Japanese font. + * macterm.c (x_list_fonts): Fix comment. Cache fonts matching + pattern. Search cache first. + (init_font_name_table): Also add entry for jisx0201.1976-0 coding + for Japanese font. (XLoadQueryFont): Use it. 2002-07-02 Richard M. Stallman diff --git a/src/macterm.c b/src/macterm.c index 728f7337f2a..7885f6c4a30 100644 --- a/src/macterm.c +++ b/src/macterm.c @@ -10860,11 +10860,9 @@ init_font_name_table () /* Return a list of at most MAXNAMES font specs matching the one in - PATTERN. Note that each '*' in the PATTERN matches exactly one - field of the font spec, unlike X in which an '*' in a font spec can - match a number of fields. The result is in the Mac implementation - all fonts must be specified by a font spec with all 13 fields - (although many of these can be "*'s"). */ + PATTERN. Cache matching fonts for patterns in + dpyinfo->name_list_element to avoid looking them up again by + calling mac_font_pattern_match (slow). */ Lisp_Object x_list_fonts (struct frame *f, @@ -10873,14 +10871,28 @@ x_list_fonts (struct frame *f, int maxnames) { char *ptnstr; - Lisp_Object newlist = Qnil; + Lisp_Object newlist = Qnil, tem, key; int n_fonts = 0; int i; struct gcpro gcpro1, gcpro2; + struct mac_display_info *dpyinfo = f ? FRAME_MAC_DISPLAY_INFO (f) : NULL; if (font_name_table == NULL) /* Initialize when first used. */ init_font_name_table (); + if (dpyinfo) + { + tem = XCDR (dpyinfo->name_list_element); + key = Fcons (pattern, make_number (maxnames)); + + newlist = Fassoc (key, tem); + if (!NILP (newlist)) + { + newlist = Fcdr_safe (newlist); + goto label_cached; + } + } + ptnstr = XSTRING (pattern)->data; GCPRO2 (pattern, newlist); @@ -10902,6 +10914,14 @@ x_list_fonts (struct frame *f, UNGCPRO; + if (dpyinfo) + { + XSETCDR (dpyinfo->name_list_element, + Fcons (Fcons (key, newlist), + XCDR (dpyinfo->name_list_element))); + } + label_cached: + return newlist; } -- 2.39.5