diff options
author | Andrew Choi <akochoi@shaw.ca> | 2002-07-04 02:43:48 +0000 |
---|---|---|
committer | Andrew Choi <akochoi@shaw.ca> | 2002-07-04 02:43:48 +0000 |
commit | 10ba2aeceaf21aca556245ae5cdfc38e044b91e8 (patch) | |
tree | 2b7aa21d37249aee542e8cfe557af3472409a1f2 /src/macterm.c | |
parent | a0f593ff6ad8e60f7ca544c6649456f0523d0a8e (diff) | |
download | emacs-10ba2aeceaf21aca556245ae5cdfc38e044b91e8.tar.gz emacs-10ba2aeceaf21aca556245ae5cdfc38e044b91e8.tar.bz2 emacs-10ba2aeceaf21aca556245ae5cdfc38e044b91e8.zip |
2002-07-03 Andrew Choi <akochoi@shaw.ca>
* macterm.c (x_list_fonts): Fix comment. Cache fonts matching
pattern. Search cache first.
Diffstat (limited to 'src/macterm.c')
-rw-r--r-- | src/macterm.c | 32 |
1 files changed, 26 insertions, 6 deletions
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; } |