summaryrefslogtreecommitdiff
path: root/src/macterm.c
diff options
context:
space:
mode:
authorAndrew Choi <akochoi@shaw.ca>2002-07-04 02:43:48 +0000
committerAndrew Choi <akochoi@shaw.ca>2002-07-04 02:43:48 +0000
commit10ba2aeceaf21aca556245ae5cdfc38e044b91e8 (patch)
tree2b7aa21d37249aee542e8cfe557af3472409a1f2 /src/macterm.c
parenta0f593ff6ad8e60f7ca544c6649456f0523d0a8e (diff)
downloademacs-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.c32
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;
}