annotate src/faces.c @ 5649:d026b665014f

Actually obey POSIX rules in #'posix-string-match, don't ignore them. src/ChangeLog addition: 2012-04-25 Aidan Kehoe <kehoea@parhasard.net> * search.c (string_match_1): Actually use the POSIX argument here, pass it to compile_pattern(). Thank you for the bug report, Ilya Shlyakhter! tests/ChangeLog addition: 2012-04-25 Aidan Kehoe <kehoea@parhasard.net> * automated/regexp-tests.el: Check that #'posix-string-match actually returns the longest match; thank you Ilya Shlyakhter in jn1j8t$ujq$1@dough.gmane.org !
author Aidan Kehoe <kehoea@parhasard.net>
date Wed, 25 Apr 2012 20:25:33 +0100
parents 07256dcc0c8b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 /* "Face" primitives
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2 Copyright (C) 1994 Free Software Foundation, Inc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3 Copyright (C) 1995 Board of Trustees, University of Illinois.
5015
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
4 Copyright (C) 1995, 1996, 2001, 2002, 2005, 2010 Ben Wing.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5 Copyright (C) 1995 Sun Microsystems, Inc.
5080
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
6 Copyright (C) 2010 Didier Verna
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8 This file is part of XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 5222
diff changeset
10 XEmacs is free software: you can redistribute it and/or modify it
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11 under the terms of the GNU General Public License as published by the
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 5222
diff changeset
12 Free Software Foundation, either version 3 of the License, or (at your
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 5222
diff changeset
13 option) any later version.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15 XEmacs is distributed in the hope that it will be useful, but WITHOUT
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18 for more details.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20 You should have received a copy of the GNU General Public License
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 5222
diff changeset
21 along with XEmacs. If not, see <http://www.gnu.org/licenses/>. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
23 /* Synched up with: Not in FSF. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
25 /* Written by Chuck Thompson and Ben Wing,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26 based loosely on old face code by Jamie Zawinski. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28 #include <config.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29 #include "lisp.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31 #include "buffer.h"
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 826
diff changeset
32 #include "device-impl.h"
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33 #include "elhash.h"
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 826
diff changeset
34 #include "extents-impl.h" /* for extent_face */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35 #include "faces.h"
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 826
diff changeset
36 #include "frame-impl.h"
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37 #include "glyphs.h"
5176
8b2f75cecb89 rename objects* (.c, .h and .el files) to fontcolor*
Ben Wing <ben@xemacs.org>
parents: 5047
diff changeset
38 #include "fontcolor-impl.h"
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39 #include "specifier.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40 #include "window.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42 Lisp_Object Qfacep;
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
43 Lisp_Object Qforeground, Qforeback, Qbackground, Qdisplay_table;
5080
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
44 Lisp_Object Qbackground_pixmap, Qbackground_placement, Qunderline, Qdim;
5619
75ad4969a16d Replace the 'flush face property with the opposite 'shrink one.
Didier Verna <didier@xemacs.org>
parents: 5617
diff changeset
45 Lisp_Object Qblinking, Qstrikethru, Qshrink, Q_name;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 Lisp_Object Qinit_face_from_resources;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48 Lisp_Object Qinit_frame_faces;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49 Lisp_Object Qinit_device_faces;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50 Lisp_Object Qinit_global_faces;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52 /* These faces are used directly internally. We use these variables
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53 to be able to reference them directly and save the overhead of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 calling Ffind_face. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55 Lisp_Object Vdefault_face, Vmodeline_face, Vgui_element_face;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 Lisp_Object Vleft_margin_face, Vright_margin_face, Vtext_cursor_face;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 Lisp_Object Vpointer_face, Vvertical_divider_face, Vtoolbar_face, Vwidget_face;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
59 /* Qdefault, Qhighlight, Qleft_margin, Qright_margin defined in general.c */
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
60 Lisp_Object Qmodeline, Qgui_element, Qtext_cursor, Qvertical_divider;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61
2867
abbd4c295aa2 [xemacs-hg @ 2005-07-20 07:36:33 by didierv]
didierv
parents: 2865
diff changeset
62 Lisp_Object Qface_alias, Qcyclic_face_alias;
2865
8baa2f03d853 [xemacs-hg @ 2005-07-19 09:45:00 by didierv]
didierv
parents: 2720
diff changeset
63
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64 /* In the old implementation Vface_list was a list of the face names,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65 not the faces themselves. We now distinguish between permanent and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66 temporary faces. Permanent faces are kept in a regular hash table,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67 temporary faces in a weak hash table. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68 Lisp_Object Vpermanent_faces_cache;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69 Lisp_Object Vtemporary_faces_cache;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71 Lisp_Object Vbuilt_in_face_specifiers;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
74 #ifdef DEBUG_XEMACS
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
75 Fixnum debug_x_faces;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
76 #endif
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
77
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
78 #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901)
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
79
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
80 #ifdef DEBUG_XEMACS
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
81 # define DEBUG_FACES(FORMAT, ...) \
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
82 do { if (debug_x_faces) stderr_out(FORMAT, __VA_ARGS__); } while (0)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
83 #else /* DEBUG_XEMACS */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
84 # define DEBUG_FACES(format, ...)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
85 #endif /* DEBUG_XEMACS */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
86
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
87 #elif defined(__GNUC__)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
88
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
89 #ifdef DEBUG_XEMACS
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
90 # define DEBUG_FACES(format, args...) \
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
91 do { if (debug_x_faces) stderr_out(format, args ); } while (0)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
92 #else /* DEBUG_XEMACS */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
93 # define DEBUG_FACES(format, args...)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
94 #endif /* DEBUG_XEMACS */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
95
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
96 #else /* defined(__STDC_VERSION__) [...] */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
97 # define DEBUG_FACES (void)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
98 #endif
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100 static Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101 mark_face (Lisp_Object obj)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
102 {
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
103 Lisp_Face *face = XFACE (obj);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
105 mark_object (face->name);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
106 mark_object (face->doc_string);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
108 mark_object (face->foreground);
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
109 mark_object (face->foreback);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
110 mark_object (face->background);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111 mark_object (face->font);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112 mark_object (face->display_table);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
113 mark_object (face->background_pixmap);
5080
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
114 mark_object (face->background_placement);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
115 mark_object (face->underline);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
116 mark_object (face->strikethru);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
117 mark_object (face->highlight);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
118 mark_object (face->dim);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
119 mark_object (face->blinking);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
120 mark_object (face->reverse);
5619
75ad4969a16d Replace the 'flush face property with the opposite 'shrink one.
Didier Verna <didier@xemacs.org>
parents: 5617
diff changeset
121 mark_object (face->shrink);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
122
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
123 mark_object (face->charsets_warned_about);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
124
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
125 return face->plist;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
126 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
127
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
128 static void
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1552
diff changeset
129 print_face (Lisp_Object obj, Lisp_Object printcharfun, int UNUSED (escapeflag))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
130 {
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
131 Lisp_Face *face = XFACE (obj);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
132
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
133 if (print_readably)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
134 {
5222
18c0b5909d16 Use keywords in structure syntax; new #define, NEED_TO_HANDLE_21_4_CODE 1
Aidan Kehoe <kehoea@parhasard.net>
parents: 5191
diff changeset
135 write_fmt_string_lisp (printcharfun, "#s(face :name %S)", 1, face->name);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
136 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
137 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
138 {
800
a5954632b187 [xemacs-hg @ 2002-03-31 08:27:14 by ben]
ben
parents: 793
diff changeset
139 write_fmt_string_lisp (printcharfun, "#<face %S", 1, face->name);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
140 if (!NILP (face->doc_string))
800
a5954632b187 [xemacs-hg @ 2002-03-31 08:27:14 by ben]
ben
parents: 793
diff changeset
141 write_fmt_string_lisp (printcharfun, " %S", 1, face->doc_string);
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4862
diff changeset
142 write_ascstring (printcharfun, ">");
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
143 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
144 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
145
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
146 /* Faces are equal if all of their display attributes are equal. We
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
147 don't compare names or doc-strings, because that would make equal
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
148 be eq.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
149
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
150 This isn't concerned with "unspecified" attributes, that's what
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
151 #'face-differs-from-default-p is for. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
152 static int
4906
6ef8256a020a implement equalp in C, fix case-folding, add equal() method for keymaps
Ben Wing <ben@xemacs.org>
parents: 4862
diff changeset
153 face_equal (Lisp_Object obj1, Lisp_Object obj2, int depth,
6ef8256a020a implement equalp in C, fix case-folding, add equal() method for keymaps
Ben Wing <ben@xemacs.org>
parents: 4862
diff changeset
154 int UNUSED (foldcase))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
155 {
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
156 Lisp_Face *f1 = XFACE (obj1);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
157 Lisp_Face *f2 = XFACE (obj2);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
158
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
159 depth++;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
161 return
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162 (internal_equal (f1->foreground, f2->foreground, depth) &&
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
163 internal_equal (f1->foreback, f2->foreback, depth) &&
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
164 internal_equal (f1->background, f2->background, depth) &&
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165 internal_equal (f1->font, f2->font, depth) &&
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
166 internal_equal (f1->display_table, f2->display_table, depth) &&
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
167 internal_equal (f1->background_pixmap, f2->background_pixmap, depth) &&
5080
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
168 internal_equal (f1->background_placement,
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
169 f2->background_placement,
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
170 depth) &&
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171 internal_equal (f1->underline, f2->underline, depth) &&
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
172 internal_equal (f1->strikethru, f2->strikethru, depth) &&
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
173 internal_equal (f1->highlight, f2->highlight, depth) &&
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174 internal_equal (f1->dim, f2->dim, depth) &&
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
175 internal_equal (f1->blinking, f2->blinking, depth) &&
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
176 internal_equal (f1->reverse, f2->reverse, depth) &&
5619
75ad4969a16d Replace the 'flush face property with the opposite 'shrink one.
Didier Verna <didier@xemacs.org>
parents: 5617
diff changeset
177 internal_equal (f1->shrink, f2->shrink, depth) &&
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
178
4906
6ef8256a020a implement equalp in C, fix case-folding, add equal() method for keymaps
Ben Wing <ben@xemacs.org>
parents: 4862
diff changeset
179 ! plists_differ (f1->plist, f2->plist, 0, 0, depth + 1, 0));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
182 static Hashcode
5191
71ee43b8a74d Add #'equalp as a hash test by default; add #'define-hash-table-test, GNU API
Aidan Kehoe <kehoea@parhasard.net>
parents: 5178
diff changeset
183 face_hash (Lisp_Object obj, int depth, Boolint UNUSED (equalp))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184 {
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
185 Lisp_Face *f = XFACE (obj);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
186
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
187 depth++;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189 /* No need to hash all of the elements; that would take too long.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 Just hash the most common ones. */
5191
71ee43b8a74d Add #'equalp as a hash test by default; add #'define-hash-table-test, GNU API
Aidan Kehoe <kehoea@parhasard.net>
parents: 5178
diff changeset
191 return HASH3 (internal_hash (f->foreground, depth, 0),
71ee43b8a74d Add #'equalp as a hash test by default; add #'define-hash-table-test, GNU API
Aidan Kehoe <kehoea@parhasard.net>
parents: 5178
diff changeset
192 internal_hash (f->background, depth, 0),
71ee43b8a74d Add #'equalp as a hash test by default; add #'define-hash-table-test, GNU API
Aidan Kehoe <kehoea@parhasard.net>
parents: 5178
diff changeset
193 internal_hash (f->font, depth, 0));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196 static Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197 face_getprop (Lisp_Object obj, Lisp_Object prop)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
198 {
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
199 Lisp_Face *f = XFACE (obj);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
200
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
201 return
5080
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
202 (EQ (prop, Qforeground) ? f->foreground :
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
203 EQ (prop, Qforeback) ? f->foreback :
5080
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
204 EQ (prop, Qbackground) ? f->background :
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
205 EQ (prop, Qfont) ? f->font :
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
206 EQ (prop, Qdisplay_table) ? f->display_table :
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
207 EQ (prop, Qbackground_pixmap) ? f->background_pixmap :
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
208 EQ (prop, Qbackground_placement) ? f->background_placement :
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
209 EQ (prop, Qunderline) ? f->underline :
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
210 EQ (prop, Qstrikethru) ? f->strikethru :
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
211 EQ (prop, Qhighlight) ? f->highlight :
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
212 EQ (prop, Qdim) ? f->dim :
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
213 EQ (prop, Qblinking) ? f->blinking :
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
214 EQ (prop, Qreverse) ? f->reverse :
5619
75ad4969a16d Replace the 'flush face property with the opposite 'shrink one.
Didier Verna <didier@xemacs.org>
parents: 5617
diff changeset
215 EQ (prop, Qshrink) ? f->shrink :
5080
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
216 EQ (prop, Qdoc_string) ? f->doc_string :
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
217 external_plist_get (&f->plist, prop, 0, ERROR_ME));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
218 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220 static int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
221 face_putprop (Lisp_Object obj, Lisp_Object prop, Lisp_Object value)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
222 {
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
223 Lisp_Face *f = XFACE (obj);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224
5080
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
225 if (EQ (prop, Qforeground) ||
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
226 EQ (prop, Qforeback) ||
5080
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
227 EQ (prop, Qbackground) ||
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
228 EQ (prop, Qfont) ||
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
229 EQ (prop, Qdisplay_table) ||
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
230 EQ (prop, Qbackground_pixmap) ||
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
231 EQ (prop, Qbackground_placement) ||
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
232 EQ (prop, Qunderline) ||
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
233 EQ (prop, Qstrikethru) ||
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
234 EQ (prop, Qhighlight) ||
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
235 EQ (prop, Qdim) ||
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
236 EQ (prop, Qblinking) ||
5617
b0d712bbc2a6 The "flush" face property.
Didier Verna <didier@xemacs.org>
parents: 5475
diff changeset
237 EQ (prop, Qreverse) ||
5619
75ad4969a16d Replace the 'flush face property with the opposite 'shrink one.
Didier Verna <didier@xemacs.org>
parents: 5617
diff changeset
238 EQ (prop, Qshrink))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
239 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
240
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
241 if (EQ (prop, Qdoc_string))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
242 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
243 if (!NILP (value))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
244 CHECK_STRING (value);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
245 f->doc_string = value;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
246 return 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
247 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
248
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
249 external_plist_put (&f->plist, prop, value, 0, ERROR_ME);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
250 return 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
251 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
252
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
253 static int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
254 face_remprop (Lisp_Object obj, Lisp_Object prop)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
255 {
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
256 Lisp_Face *f = XFACE (obj);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
257
5080
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
258 if (EQ (prop, Qforeground) ||
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
259 EQ (prop, Qforeback) ||
5080
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
260 EQ (prop, Qbackground) ||
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
261 EQ (prop, Qfont) ||
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
262 EQ (prop, Qdisplay_table) ||
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
263 EQ (prop, Qbackground_pixmap) ||
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
264 EQ (prop, Qbackground_placement) ||
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
265 EQ (prop, Qunderline) ||
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
266 EQ (prop, Qstrikethru) ||
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
267 EQ (prop, Qhighlight) ||
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
268 EQ (prop, Qdim) ||
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
269 EQ (prop, Qblinking) ||
5617
b0d712bbc2a6 The "flush" face property.
Didier Verna <didier@xemacs.org>
parents: 5475
diff changeset
270 EQ (prop, Qreverse) ||
5619
75ad4969a16d Replace the 'flush face property with the opposite 'shrink one.
Didier Verna <didier@xemacs.org>
parents: 5617
diff changeset
271 EQ (prop, Qshrink))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
272 return -1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
273
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
274 if (EQ (prop, Qdoc_string))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
275 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
276 f->doc_string = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
277 return 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
278 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
279
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
280 return external_remprop (&f->plist, prop, 0, ERROR_ME);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
281 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
282
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
283 static Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
284 face_plist (Lisp_Object obj)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
285 {
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
286 Lisp_Face *face = XFACE (obj);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
287 Lisp_Object result = face->plist;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
288
5619
75ad4969a16d Replace the 'flush face property with the opposite 'shrink one.
Didier Verna <didier@xemacs.org>
parents: 5617
diff changeset
289 result = cons3 (Qshrink, face->shrink, result);
5080
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
290 result = cons3 (Qreverse, face->reverse, result);
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
291 result = cons3 (Qblinking, face->blinking, result);
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
292 result = cons3 (Qdim, face->dim, result);
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
293 result = cons3 (Qhighlight, face->highlight, result);
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
294 result = cons3 (Qstrikethru, face->strikethru, result);
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
295 result = cons3 (Qunderline, face->underline, result);
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
296 result = cons3 (Qbackground_placement, face->background_placement, result);
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
297 result = cons3 (Qbackground_pixmap, face->background_pixmap, result);
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
298 result = cons3 (Qdisplay_table, face->display_table, result);
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
299 result = cons3 (Qfont, face->font, result);
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
300 result = cons3 (Qbackground, face->background, result);
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
301 result = cons3 (Qforeback, face->foreback, result);
5080
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
302 result = cons3 (Qforeground, face->foreground, result);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
303
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
304 return result;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
305 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
306
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 934
diff changeset
307 static const struct memory_description face_description[] = {
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
308 { XD_LISP_OBJECT, offsetof (Lisp_Face, name) },
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
309 { XD_LISP_OBJECT, offsetof (Lisp_Face, doc_string) },
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
310 { XD_LISP_OBJECT, offsetof (Lisp_Face, foreground) },
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
311 { XD_LISP_OBJECT, offsetof (Lisp_Face, foreback) },
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
312 { XD_LISP_OBJECT, offsetof (Lisp_Face, background) },
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
313 { XD_LISP_OBJECT, offsetof (Lisp_Face, font) },
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
314 { XD_LISP_OBJECT, offsetof (Lisp_Face, display_table) },
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
315 { XD_LISP_OBJECT, offsetof (Lisp_Face, background_pixmap) },
5080
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
316 { XD_LISP_OBJECT, offsetof (Lisp_Face, background_placement) },
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
317 { XD_LISP_OBJECT, offsetof (Lisp_Face, underline) },
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
318 { XD_LISP_OBJECT, offsetof (Lisp_Face, strikethru) },
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
319 { XD_LISP_OBJECT, offsetof (Lisp_Face, highlight) },
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
320 { XD_LISP_OBJECT, offsetof (Lisp_Face, dim) },
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
321 { XD_LISP_OBJECT, offsetof (Lisp_Face, blinking) },
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
322 { XD_LISP_OBJECT, offsetof (Lisp_Face, reverse) },
5619
75ad4969a16d Replace the 'flush face property with the opposite 'shrink one.
Didier Verna <didier@xemacs.org>
parents: 5617
diff changeset
323 { XD_LISP_OBJECT, offsetof (Lisp_Face, shrink) },
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
324 { XD_LISP_OBJECT, offsetof (Lisp_Face, plist) },
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
325 { XD_LISP_OBJECT, offsetof (Lisp_Face, charsets_warned_about) },
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
326 { XD_END }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
327 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
328
5157
1fae11d56ad2 redo memory-usage mechanism, add way of dynamically initializing Lisp objects
Ben Wing <ben@xemacs.org>
parents: 5128
diff changeset
329 DEFINE_DUMPABLE_LISP_OBJECT ("face", face,
1fae11d56ad2 redo memory-usage mechanism, add way of dynamically initializing Lisp objects
Ben Wing <ben@xemacs.org>
parents: 5128
diff changeset
330 mark_face, print_face, 0, face_equal,
1fae11d56ad2 redo memory-usage mechanism, add way of dynamically initializing Lisp objects
Ben Wing <ben@xemacs.org>
parents: 5128
diff changeset
331 face_hash, face_description,
1fae11d56ad2 redo memory-usage mechanism, add way of dynamically initializing Lisp objects
Ben Wing <ben@xemacs.org>
parents: 5128
diff changeset
332 Lisp_Face);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
333
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
334 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
335 /* face read syntax */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
336 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
337
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
338 static int
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1552
diff changeset
339 face_name_validate (Lisp_Object UNUSED (keyword), Lisp_Object value,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 563
diff changeset
340 Error_Behavior errb)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
341 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
342 if (ERRB_EQ (errb, ERROR_ME))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
343 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
344 CHECK_SYMBOL (value);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
345 return 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
346 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
347
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
348 return SYMBOLP (value);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
349 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
350
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
351 static int
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 563
diff changeset
352 face_validate (Lisp_Object data, Error_Behavior errb)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
353 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
354 int name_seen = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
355 Lisp_Object valw = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
356
5222
18c0b5909d16 Use keywords in structure syntax; new #define, NEED_TO_HANDLE_21_4_CODE 1
Aidan Kehoe <kehoea@parhasard.net>
parents: 5191
diff changeset
357 /* #### This syntax is very limited, given all the face properties that
18c0b5909d16 Use keywords in structure syntax; new #define, NEED_TO_HANDLE_21_4_CODE 1
Aidan Kehoe <kehoea@parhasard.net>
parents: 5191
diff changeset
358 actually exist. At least implement those in reset_face()! */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
359 data = Fcdr (data); /* skip over Qface */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
360 while (!NILP (data))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
361 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
362 Lisp_Object keyw = Fcar (data);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
363
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
364 data = Fcdr (data);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
365 valw = Fcar (data);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
366 data = Fcdr (data);
5222
18c0b5909d16 Use keywords in structure syntax; new #define, NEED_TO_HANDLE_21_4_CODE 1
Aidan Kehoe <kehoea@parhasard.net>
parents: 5191
diff changeset
367 if (EQ (keyw, Qname) || EQ (keyw, Q_name))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
368 name_seen = 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
369 else
2500
3d8143fc88e1 [xemacs-hg @ 2005-01-24 23:33:30 by ben]
ben
parents: 2367
diff changeset
370 ABORT ();
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
371 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
372
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
373 if (!name_seen)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
374 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
375 maybe_sferror ("No face name given", Qunbound, Qface, errb);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
376 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
377 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
378
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
379 if (NILP (Ffind_face (valw)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
380 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
381 maybe_invalid_argument ("No such face", valw, Qface, errb);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
382 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
383 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
384
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
385 return 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
386 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
387
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
388 static Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
389 face_instantiate (Lisp_Object data)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
390 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
391 return Fget_face (Fcar (Fcdr (data)));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
392 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
393
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
394
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
395 /****************************************************************************
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
396 * utility functions *
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
397 ****************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
398
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
399 static void
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
400 reset_face (Lisp_Face *f)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
401 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
402 f->name = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
403 f->doc_string = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
404 f->dirty = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
405 f->foreground = Qnil;
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
406 f->foreback = Qnil;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
407 f->background = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
408 f->font = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
409 f->display_table = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
410 f->background_pixmap = Qnil;
5080
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
411 f->background_placement = Qnil;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
412 f->underline = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
413 f->strikethru = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
414 f->highlight = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
415 f->dim = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
416 f->blinking = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
417 f->reverse = Qnil;
5619
75ad4969a16d Replace the 'flush face property with the opposite 'shrink one.
Didier Verna <didier@xemacs.org>
parents: 5617
diff changeset
418 f->shrink = Qnil;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
419 f->plist = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
420 f->charsets_warned_about = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
421 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
422
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
423 static Lisp_Face *
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
424 allocate_face (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
425 {
5127
a9c41067dd88 more cleanups, terminology clarification, lots of doc work
Ben Wing <ben@xemacs.org>
parents: 5126
diff changeset
426 Lisp_Object obj = ALLOC_NORMAL_LISP_OBJECT (face);
5117
3742ea8250b5 Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents: 3017
diff changeset
427 Lisp_Face *result = XFACE (obj);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
429 reset_face (result);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
430 return result;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
431 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
432
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
433
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
434 /* We store the faces in hash tables with the names as the key and the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
435 actual face object as the value. Occasionally we need to use them
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
436 in a list format. These routines provide us with that. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
437 struct face_list_closure
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
438 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
439 Lisp_Object *face_list;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
440 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
441
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
442 static int
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1552
diff changeset
443 add_face_to_list_mapper (Lisp_Object UNUSED (key), Lisp_Object value,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
444 void *face_list_closure)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
445 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
446 /* This function can GC */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
447 struct face_list_closure *fcl =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
448 (struct face_list_closure *) face_list_closure;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
449
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
450 *(fcl->face_list) = Fcons (XFACE (value)->name, (*fcl->face_list));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
451 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
452 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
453
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
454 static Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
455 faces_list_internal (Lisp_Object list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
456 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
457 Lisp_Object face_list = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
458 struct gcpro gcpro1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
459 struct face_list_closure face_list_closure;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
460
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
461 GCPRO1 (face_list);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
462 face_list_closure.face_list = &face_list;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
463 elisp_maphash (add_face_to_list_mapper, list, &face_list_closure);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
464 UNGCPRO;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
465
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
466 return face_list;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
467 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
468
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
469 static Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
470 permanent_faces_list (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
471 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
472 return faces_list_internal (Vpermanent_faces_cache);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
473 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
474
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
475 static Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
476 temporary_faces_list (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
477 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
478 return faces_list_internal (Vtemporary_faces_cache);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
479 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
480
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
481
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
482 static int
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1552
diff changeset
483 mark_face_as_clean_mapper (Lisp_Object UNUSED (key), Lisp_Object value,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
484 void *flag_closure)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
485 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
486 /* This function can GC */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
487 int *flag = (int *) flag_closure;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
488 XFACE (value)->dirty = *flag;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
489 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
490 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
491
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
492 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
493 mark_all_faces_internal (int flag)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
494 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
495 elisp_maphash (mark_face_as_clean_mapper, Vpermanent_faces_cache, &flag);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
496 elisp_maphash (mark_face_as_clean_mapper, Vtemporary_faces_cache, &flag);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
497 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
498
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
499 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
500 mark_all_faces_as_clean (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
501 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
502 mark_all_faces_internal (0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
503 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
504
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
505 /* Currently unused (see the comment in face_property_was_changed()). */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
506 #if 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
507 /* #### OBSOLETE ME, PLEASE. Maybe. Maybe this is just as good as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
508 any other solution. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
509 struct face_inheritance_closure
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
510 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
511 Lisp_Object face;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
512 Lisp_Object property;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
513 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
514
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
515 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
516 update_inheritance_mapper_internal (Lisp_Object cur_face,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
517 Lisp_Object inh_face,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
518 Lisp_Object property)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
519 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
520 /* #### fix this function */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
521 Lisp_Object elt = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
522 struct gcpro gcpro1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
523
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
524 GCPRO1 (elt);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
525
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
526 for (elt = FACE_PROPERTY_SPEC_LIST (cur_face, property, Qall);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
527 !NILP (elt);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
528 elt = XCDR (elt))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
529 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
530 Lisp_Object values = XCDR (XCAR (elt));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
531
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
532 for (; !NILP (values); values = XCDR (values))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
533 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
534 Lisp_Object value = XCDR (XCAR (values));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
535 if (VECTORP (value) && XVECTOR_LENGTH (value))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
536 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
537 if (EQ (Ffind_face (XVECTOR_DATA (value)[0]), inh_face))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
538 Fset_specifier_dirty_flag
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
539 (FACE_PROPERTY_SPECIFIER (inh_face, property));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
540 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
541 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
542 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
543
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
544 UNGCPRO;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
545 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
546
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
547 static int
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
548 update_face_inheritance_mapper (const void *hash_key, void *hash_contents,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
549 void *face_inheritance_closure)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
550 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
551 Lisp_Object key, contents;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
552 struct face_inheritance_closure *fcl =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
553 (struct face_inheritance_closure *) face_inheritance_closure;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
554
5013
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 4969
diff changeset
555 key = GET_LISP_FROM_VOID (hash_key);
ae48681c47fa changes to VOID_TO_LISP et al.
Ben Wing <ben@xemacs.org>
parents: 4969
diff changeset
556 contents = GET_LISP_FROM_VOID (hash_contents);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
557
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
558 if (EQ (fcl->property, Qfont))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
559 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
560 update_inheritance_mapper_internal (contents, fcl->face, Qfont);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
561 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
562 else if (EQ (fcl->property, Qforeground) ||
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
563 EQ (fcl->property, Qforeback) ||
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
564 EQ (fcl->property, Qbackground))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
565 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
566 update_inheritance_mapper_internal (contents, fcl->face, Qforeground);
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
567 update_inheritance_mapper_internal (contents, fcl->face, Qforeback);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
568 update_inheritance_mapper_internal (contents, fcl->face, Qbackground);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
569 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
570 else if (EQ (fcl->property, Qunderline) ||
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
571 EQ (fcl->property, Qstrikethru) ||
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
572 EQ (fcl->property, Qhighlight) ||
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
573 EQ (fcl->property, Qdim) ||
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
574 EQ (fcl->property, Qblinking) ||
5617
b0d712bbc2a6 The "flush" face property.
Didier Verna <didier@xemacs.org>
parents: 5475
diff changeset
575 EQ (fcl->property, Qreverse) ||
5619
75ad4969a16d Replace the 'flush face property with the opposite 'shrink one.
Didier Verna <didier@xemacs.org>
parents: 5617
diff changeset
576 EQ (fcl->property, Qshrink))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
577 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
578 update_inheritance_mapper_internal (contents, fcl->face, Qunderline);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
579 update_inheritance_mapper_internal (contents, fcl->face, Qstrikethru);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
580 update_inheritance_mapper_internal (contents, fcl->face, Qhighlight);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
581 update_inheritance_mapper_internal (contents, fcl->face, Qdim);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
582 update_inheritance_mapper_internal (contents, fcl->face, Qblinking);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
583 update_inheritance_mapper_internal (contents, fcl->face, Qreverse);
5619
75ad4969a16d Replace the 'flush face property with the opposite 'shrink one.
Didier Verna <didier@xemacs.org>
parents: 5617
diff changeset
584 update_inheritance_mapper_internal (contents, fcl->face, Qshrink);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
585 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
586 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
587 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
588
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
589 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
590 update_faces_inheritance (Lisp_Object face, Lisp_Object property)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
591 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
592 struct face_inheritance_closure face_inheritance_closure;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
593 struct gcpro gcpro1, gcpro2;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
594
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
595 GCPRO2 (face, property);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
596 face_inheritance_closure.face = face;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
597 face_inheritance_closure.property = property;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
598
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
599 elisp_maphash (update_face_inheritance_mapper, Vpermanent_faces_cache,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
600 &face_inheritance_closure);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
601 elisp_maphash (update_face_inheritance_mapper, Vtemporary_faces_cache,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
602 &face_inheritance_closure);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
603
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
604 UNGCPRO;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
605 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
606 #endif /* 0 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
607
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
608 Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
609 face_property_matching_instance (Lisp_Object face, Lisp_Object property,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
610 Lisp_Object charset, Lisp_Object domain,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 563
diff changeset
611 Error_Behavior errb, int no_fallback,
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
612 Lisp_Object depth,
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
613 enum font_specifier_matchspec_stages stage)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
614 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
615 Lisp_Object retval;
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 826
diff changeset
616 Lisp_Object matchspec = Qunbound;
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 826
diff changeset
617 struct gcpro gcpro1;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
618
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 826
diff changeset
619 if (!NILP (charset))
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
620 matchspec = noseeum_cons (charset,
5015
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
621 stage == STAGE_INITIAL ? Qinitial : Qfinal);
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
622
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 826
diff changeset
623 GCPRO1 (matchspec);
5015
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
624 /* This call to specifier_instance_no_quit(), will end up calling
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
625 font_instantiate() if the property in a question is a font (currently,
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
626 this means EQ (property, Qfont), because only the face property named
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
627 `font' contains a font object). See the comments there. */
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 826
diff changeset
628 retval = specifier_instance_no_quit (Fget (face, property, Qnil), matchspec,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
629 domain, errb, no_fallback, depth);
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 826
diff changeset
630 UNGCPRO;
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 826
diff changeset
631 if (CONSP (matchspec))
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 826
diff changeset
632 free_cons (matchspec);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
633
5015
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
634 if (UNBOUNDP (retval) && !no_fallback && STAGE_FINAL == stage)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
635 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
636 if (EQ (property, Qfont))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
637 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
638 if (NILP (memq_no_quit (charset,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
639 XFACE (face)->charsets_warned_about)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
640 {
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
641 if (!UNBOUNDP (charset))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
642 warn_when_safe
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
643 (Qfont, Qnotice,
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
644 "Unable to instantiate font for charset %s, face %s",
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
645 XSTRING_DATA (symbol_name
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
646 (XSYMBOL (XCHARSET_NAME (charset)))),
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
647 XSTRING_DATA (symbol_name
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
648 (XSYMBOL (XFACE (face)->name))));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
649 XFACE (face)->charsets_warned_about =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
650 Fcons (charset, XFACE (face)->charsets_warned_about);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
651 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
652 retval = Vthe_null_font_instance;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
653 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
654 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
655
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
656 return retval;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
657 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
658
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
659
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
660 DEFUN ("facep", Ffacep, 1, 1, 0, /*
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
661 Return t if OBJECT is a face.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
662 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
663 (object))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
664 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
665 return FACEP (object) ? Qt : Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
666 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
667
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
668 DEFUN ("find-face", Ffind_face, 1, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
669 Retrieve the face of the given name.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
670 If FACE-OR-NAME is a face object, it is simply returned.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
671 Otherwise, FACE-OR-NAME should be a symbol. If there is no such face,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
672 nil is returned. Otherwise the associated face object is returned.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
673 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
674 (face_or_name))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
675 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
676 Lisp_Object retval;
2865
8baa2f03d853 [xemacs-hg @ 2005-07-19 09:45:00 by didierv]
didierv
parents: 2720
diff changeset
677 Lisp_Object face_name;
8baa2f03d853 [xemacs-hg @ 2005-07-19 09:45:00 by didierv]
didierv
parents: 2720
diff changeset
678 Lisp_Object face_alias;
8baa2f03d853 [xemacs-hg @ 2005-07-19 09:45:00 by didierv]
didierv
parents: 2720
diff changeset
679 int i;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
680
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
681 if (FACEP (face_or_name))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
682 return face_or_name;
2865
8baa2f03d853 [xemacs-hg @ 2005-07-19 09:45:00 by didierv]
didierv
parents: 2720
diff changeset
683
8baa2f03d853 [xemacs-hg @ 2005-07-19 09:45:00 by didierv]
didierv
parents: 2720
diff changeset
684 face_name = face_or_name;
8baa2f03d853 [xemacs-hg @ 2005-07-19 09:45:00 by didierv]
didierv
parents: 2720
diff changeset
685 CHECK_SYMBOL (face_name);
8baa2f03d853 [xemacs-hg @ 2005-07-19 09:45:00 by didierv]
didierv
parents: 2720
diff changeset
686
2867
abbd4c295aa2 [xemacs-hg @ 2005-07-20 07:36:33 by didierv]
didierv
parents: 2865
diff changeset
687 # define FACE_ALIAS_MAX_DEPTH 32
2865
8baa2f03d853 [xemacs-hg @ 2005-07-19 09:45:00 by didierv]
didierv
parents: 2720
diff changeset
688
8baa2f03d853 [xemacs-hg @ 2005-07-19 09:45:00 by didierv]
didierv
parents: 2720
diff changeset
689 i = 0;
8baa2f03d853 [xemacs-hg @ 2005-07-19 09:45:00 by didierv]
didierv
parents: 2720
diff changeset
690 while (! NILP ((face_alias = Fget (face_name, Qface_alias, Qnil)))
2867
abbd4c295aa2 [xemacs-hg @ 2005-07-20 07:36:33 by didierv]
didierv
parents: 2865
diff changeset
691 && i < FACE_ALIAS_MAX_DEPTH)
2865
8baa2f03d853 [xemacs-hg @ 2005-07-19 09:45:00 by didierv]
didierv
parents: 2720
diff changeset
692 {
8baa2f03d853 [xemacs-hg @ 2005-07-19 09:45:00 by didierv]
didierv
parents: 2720
diff changeset
693 face_name = face_alias;
8baa2f03d853 [xemacs-hg @ 2005-07-19 09:45:00 by didierv]
didierv
parents: 2720
diff changeset
694 CHECK_SYMBOL (face_alias);
8baa2f03d853 [xemacs-hg @ 2005-07-19 09:45:00 by didierv]
didierv
parents: 2720
diff changeset
695 i += 1;
8baa2f03d853 [xemacs-hg @ 2005-07-19 09:45:00 by didierv]
didierv
parents: 2720
diff changeset
696 }
8baa2f03d853 [xemacs-hg @ 2005-07-19 09:45:00 by didierv]
didierv
parents: 2720
diff changeset
697
8baa2f03d853 [xemacs-hg @ 2005-07-19 09:45:00 by didierv]
didierv
parents: 2720
diff changeset
698 /* #### This test actually makes the aliasing max depth to 30, which is more
8baa2f03d853 [xemacs-hg @ 2005-07-19 09:45:00 by didierv]
didierv
parents: 2720
diff changeset
699 #### than enough IMO. -- dvl */
2867
abbd4c295aa2 [xemacs-hg @ 2005-07-20 07:36:33 by didierv]
didierv
parents: 2865
diff changeset
700 if (i == FACE_ALIAS_MAX_DEPTH)
abbd4c295aa2 [xemacs-hg @ 2005-07-20 07:36:33 by didierv]
didierv
parents: 2865
diff changeset
701 signal_error (Qcyclic_face_alias,
2865
8baa2f03d853 [xemacs-hg @ 2005-07-19 09:45:00 by didierv]
didierv
parents: 2720
diff changeset
702 "Max face aliasing depth reached",
8baa2f03d853 [xemacs-hg @ 2005-07-19 09:45:00 by didierv]
didierv
parents: 2720
diff changeset
703 face_name);
8baa2f03d853 [xemacs-hg @ 2005-07-19 09:45:00 by didierv]
didierv
parents: 2720
diff changeset
704
2867
abbd4c295aa2 [xemacs-hg @ 2005-07-20 07:36:33 by didierv]
didierv
parents: 2865
diff changeset
705 # undef FACE_ALIAS_MAX_DEPTH
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
706
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
707 /* Check if the name represents a permanent face. */
2865
8baa2f03d853 [xemacs-hg @ 2005-07-19 09:45:00 by didierv]
didierv
parents: 2720
diff changeset
708 retval = Fgethash (face_name, Vpermanent_faces_cache, Qnil);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
709 if (!NILP (retval))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
710 return retval;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
711
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
712 /* Check if the name represents a temporary face. */
2865
8baa2f03d853 [xemacs-hg @ 2005-07-19 09:45:00 by didierv]
didierv
parents: 2720
diff changeset
713 return Fgethash (face_name, Vtemporary_faces_cache, Qnil);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
714 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
715
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
716 DEFUN ("get-face", Fget_face, 1, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
717 Retrieve the face of the given name.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
718 Same as `find-face' except an error is signalled if there is no such
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
719 face instead of returning nil.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
720 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
721 (name))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
722 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
723 Lisp_Object face = Ffind_face (name);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
724
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
725 if (NILP (face))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
726 invalid_argument ("No such face", name);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
727 return face;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
728 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
729
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
730 DEFUN ("face-name", Fface_name, 1, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
731 Return the name of the given face.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
732 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
733 (face))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
734 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
735 return XFACE (Fget_face (face))->name;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
736 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
737
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
738 DEFUN ("built-in-face-specifiers", Fbuilt_in_face_specifiers, 0, 0, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
739 Return a list of all built-in face specifier properties.
4534
f32c7f843961 #'built-in-face-specifiers; document that we're returning a copy.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4532
diff changeset
740
f32c7f843961 #'built-in-face-specifiers; document that we're returning a copy.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4532
diff changeset
741 This is a copy; there is no way to modify XEmacs' idea of the built-in face
f32c7f843961 #'built-in-face-specifiers; document that we're returning a copy.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4532
diff changeset
742 specifier properties from Lisp.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
743 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
744 ())
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
745 {
4532
16906fefc8df Return a list copy in #'built-in-face-specifiers, pre-empting modification.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4210
diff changeset
746 return Fcopy_list(Vbuilt_in_face_specifiers);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
747 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
748
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
749 /* These values are retrieved so often that we make a special
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
750 function.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
751 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
752
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
753 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
754 default_face_font_info (Lisp_Object domain, int *ascent, int *descent,
5047
07dcc7000bbf put width before height consistently, fix a real bug found in the process
Ben Wing <ben@xemacs.org>
parents: 5043
diff changeset
755 int *width, int *height, int *proportional_p)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
756 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
757 Lisp_Object font_instance;
3707
f6f6fc9eb269 [xemacs-hg @ 2006-11-28 21:20:22 by aidan]
aidan
parents: 3676
diff changeset
758 struct face_cachel *cachel;
f6f6fc9eb269 [xemacs-hg @ 2006-11-28 21:20:22 by aidan]
aidan
parents: 3676
diff changeset
759 struct window *w = NULL;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
760
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
761 if (noninteractive)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
762 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
763 if (ascent)
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
764 *ascent = 1;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
765 if (descent)
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
766 *descent = 0;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
767 if (height)
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
768 *height = 1;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
769 if (width)
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
770 *width = 1;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
771 if (proportional_p)
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
772 *proportional_p = 0;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
773 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
774 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
775
3707
f6f6fc9eb269 [xemacs-hg @ 2006-11-28 21:20:22 by aidan]
aidan
parents: 3676
diff changeset
776 /* We use ASCII here. This is reasonable because the people calling this
f6f6fc9eb269 [xemacs-hg @ 2006-11-28 21:20:22 by aidan]
aidan
parents: 3676
diff changeset
777 function are using the resulting values to come up with overall sizes
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
778 for windows and frames.
3707
f6f6fc9eb269 [xemacs-hg @ 2006-11-28 21:20:22 by aidan]
aidan
parents: 3676
diff changeset
779
f6f6fc9eb269 [xemacs-hg @ 2006-11-28 21:20:22 by aidan]
aidan
parents: 3676
diff changeset
780 It's possible for this function to get called when the face cachels
f6f6fc9eb269 [xemacs-hg @ 2006-11-28 21:20:22 by aidan]
aidan
parents: 3676
diff changeset
781 have not been initialized--put a call to debug-print in
f6f6fc9eb269 [xemacs-hg @ 2006-11-28 21:20:22 by aidan]
aidan
parents: 3676
diff changeset
782 init-locale-at-early-startup to see it happen. */
f6f6fc9eb269 [xemacs-hg @ 2006-11-28 21:20:22 by aidan]
aidan
parents: 3676
diff changeset
783
f6f6fc9eb269 [xemacs-hg @ 2006-11-28 21:20:22 by aidan]
aidan
parents: 3676
diff changeset
784 if (WINDOWP (domain) && (w = XWINDOW (domain)) && w->face_cachels)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
785 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
786 if (!Dynarr_length (w->face_cachels))
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
787 reset_face_cachels (w);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
788 cachel = WINDOW_FACE_CACHEL (w, DEFAULT_INDEX);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
789 font_instance = FACE_CACHEL_FONT (cachel, Vcharset_ascii);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
790 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
791 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
792 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
793 font_instance = FACE_FONT (Vdefault_face, domain, Vcharset_ascii);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
794 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
795
3707
f6f6fc9eb269 [xemacs-hg @ 2006-11-28 21:20:22 by aidan]
aidan
parents: 3676
diff changeset
796 if (UNBOUNDP (font_instance))
f6f6fc9eb269 [xemacs-hg @ 2006-11-28 21:20:22 by aidan]
aidan
parents: 3676
diff changeset
797 {
f6f6fc9eb269 [xemacs-hg @ 2006-11-28 21:20:22 by aidan]
aidan
parents: 3676
diff changeset
798 return;
f6f6fc9eb269 [xemacs-hg @ 2006-11-28 21:20:22 by aidan]
aidan
parents: 3676
diff changeset
799 }
f6f6fc9eb269 [xemacs-hg @ 2006-11-28 21:20:22 by aidan]
aidan
parents: 3676
diff changeset
800
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
801 if (height)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
802 *height = XFONT_INSTANCE (font_instance)->height;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
803 if (width)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
804 *width = XFONT_INSTANCE (font_instance)->width;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
805 if (ascent)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
806 *ascent = XFONT_INSTANCE (font_instance)->ascent;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
807 if (descent)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
808 *descent = XFONT_INSTANCE (font_instance)->descent;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
809 if (proportional_p)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
810 *proportional_p = XFONT_INSTANCE (font_instance)->proportional_p;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
811 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
812
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
813 void
5047
07dcc7000bbf put width before height consistently, fix a real bug found in the process
Ben Wing <ben@xemacs.org>
parents: 5043
diff changeset
814 default_face_width_and_height (Lisp_Object domain, int *width, int *height)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
815 {
5047
07dcc7000bbf put width before height consistently, fix a real bug found in the process
Ben Wing <ben@xemacs.org>
parents: 5043
diff changeset
816 default_face_font_info (domain, 0, 0, width, height, 0);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
817 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
818
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
819 DEFUN ("face-list", Fface_list, 0, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
820 Return a list of the names of all defined faces.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
821 If TEMPORARY is nil, only the permanent faces are included.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
822 If it is t, only the temporary faces are included. If it is any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
823 other non-nil value both permanent and temporary are included.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
824 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
825 (temporary))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
826 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
827 Lisp_Object face_list = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
828
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
829 /* Added the permanent faces, if requested. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
830 if (NILP (temporary) || !EQ (Qt, temporary))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
831 face_list = permanent_faces_list ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
832
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
833 if (!NILP (temporary))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
834 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
835 struct gcpro gcpro1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
836 GCPRO1 (face_list);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
837 face_list = nconc2 (face_list, temporary_faces_list ());
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
838 UNGCPRO;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
839 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
840
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
841 return face_list;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
842 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
843
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
844 DEFUN ("make-face", Fmake_face, 1, 3, 0, /*
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
845 Define a new face with name NAME (a symbol), described by DOC-STRING.
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
846 You can modify the font, color, etc. of a face with the set-face-* functions.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
847 If the face already exists, it is unmodified.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
848 If TEMPORARY is non-nil, this face will cease to exist if not in use.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
849 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
850 (name, doc_string, temporary))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
851 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
852 /* This function can GC if initialized is non-zero */
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
853 Lisp_Face *f;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
854 Lisp_Object face;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
855
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
856 CHECK_SYMBOL (name);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
857 if (!NILP (doc_string))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
858 CHECK_STRING (doc_string);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
859
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
860 face = Ffind_face (name);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
861 if (!NILP (face))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
862 return face;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
863
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
864 f = allocate_face ();
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
865 face = wrap_face (f);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
866
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
867 f->name = name;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
868 f->doc_string = doc_string;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
869 f->foreground = Fmake_specifier (Qcolor);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
870 set_color_attached_to (f->foreground, face, Qforeground);
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
871 f->foreback = Fmake_specifier (Qcolor);
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
872 set_color_attached_to (f->foreback, face, Qforeback);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
873 f->background = Fmake_specifier (Qcolor);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
874 set_color_attached_to (f->background, face, Qbackground);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
875 f->font = Fmake_specifier (Qfont);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
876 set_font_attached_to (f->font, face, Qfont);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
877 f->background_pixmap = Fmake_specifier (Qimage);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
878 set_image_attached_to (f->background_pixmap, face, Qbackground_pixmap);
5080
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
879 f->background_placement = Fmake_specifier (Qface_background_placement);
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
880 set_face_background_placement_attached_to (f->background_placement, face);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
881 f->display_table = Fmake_specifier (Qdisplay_table);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
882 f->underline = Fmake_specifier (Qface_boolean);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
883 set_face_boolean_attached_to (f->underline, face, Qunderline);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
884 f->strikethru = Fmake_specifier (Qface_boolean);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
885 set_face_boolean_attached_to (f->strikethru, face, Qstrikethru);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
886 f->highlight = Fmake_specifier (Qface_boolean);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
887 set_face_boolean_attached_to (f->highlight, face, Qhighlight);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
888 f->dim = Fmake_specifier (Qface_boolean);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
889 set_face_boolean_attached_to (f->dim, face, Qdim);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
890 f->blinking = Fmake_specifier (Qface_boolean);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
891 set_face_boolean_attached_to (f->blinking, face, Qblinking);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
892 f->reverse = Fmake_specifier (Qface_boolean);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
893 set_face_boolean_attached_to (f->reverse, face, Qreverse);
5619
75ad4969a16d Replace the 'flush face property with the opposite 'shrink one.
Didier Verna <didier@xemacs.org>
parents: 5617
diff changeset
894 f->shrink = Fmake_specifier (Qface_boolean);
75ad4969a16d Replace the 'flush face property with the opposite 'shrink one.
Didier Verna <didier@xemacs.org>
parents: 5617
diff changeset
895 set_face_boolean_attached_to (f->shrink, face, Qshrink);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
896 if (!NILP (Vdefault_face))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
897 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
898 /* If the default face has already been created, set it as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
899 the default fallback specifier for all the specifiers we
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
900 just created. This implements the standard "all faces
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
901 inherit from default" behavior. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
902 set_specifier_fallback (f->foreground,
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
903 Fget (Vdefault_face, Qforeground, Qunbound));
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
904 set_specifier_fallback (f->foreback,
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
905 Fget (Vdefault_face, Qforeback, Qunbound));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
906 set_specifier_fallback (f->background,
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
907 Fget (Vdefault_face, Qbackground, Qunbound));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
908 set_specifier_fallback (f->font,
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
909 Fget (Vdefault_face, Qfont, Qunbound));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
910 set_specifier_fallback (f->background_pixmap,
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
911 Fget (Vdefault_face, Qbackground_pixmap,
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
912 Qunbound));
5080
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
913 set_specifier_fallback (f->background_placement,
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
914 Fget (Vdefault_face, Qbackground_placement,
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
915 Qunbound));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
916 set_specifier_fallback (f->display_table,
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
917 Fget (Vdefault_face, Qdisplay_table, Qunbound));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
918 set_specifier_fallback (f->underline,
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
919 Fget (Vdefault_face, Qunderline, Qunbound));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
920 set_specifier_fallback (f->strikethru,
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
921 Fget (Vdefault_face, Qstrikethru, Qunbound));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
922 set_specifier_fallback (f->highlight,
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
923 Fget (Vdefault_face, Qhighlight, Qunbound));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
924 set_specifier_fallback (f->dim,
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
925 Fget (Vdefault_face, Qdim, Qunbound));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
926 set_specifier_fallback (f->blinking,
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
927 Fget (Vdefault_face, Qblinking, Qunbound));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
928 set_specifier_fallback (f->reverse,
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
929 Fget (Vdefault_face, Qreverse, Qunbound));
5619
75ad4969a16d Replace the 'flush face property with the opposite 'shrink one.
Didier Verna <didier@xemacs.org>
parents: 5617
diff changeset
930 set_specifier_fallback (f->shrink,
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
931 Fget (Vdefault_face, Qshrink, Qunbound));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
932 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
933
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
934 /* Add the face to the appropriate list. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
935 if (NILP (temporary))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
936 Fputhash (name, face, Vpermanent_faces_cache);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
937 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
938 Fputhash (name, face, Vtemporary_faces_cache);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
939
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
940 /* Note that it's OK if we dump faces.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
941 When we start up again when we're not noninteractive,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
942 `init-global-faces' is called and it resources all
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
943 existing faces. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
944 if (initialized && !noninteractive)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
945 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
946 struct gcpro gcpro1, gcpro2;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
947
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
948 GCPRO2 (name, face);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
949 call1 (Qinit_face_from_resources, name);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
950 UNGCPRO;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
951 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
952
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
953 return face;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
954 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
955
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
956
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
957 /*****************************************************************************
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
958 initialization code
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
959 ****************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
960
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
961 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
962 init_global_faces (struct device *d)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
963 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
964 /* When making the initial terminal device, there is no Lisp code
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
965 loaded, so we can't do this. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
966 if (initialized && !noninteractive)
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 826
diff changeset
967 call_critical_lisp_code (d, Qinit_global_faces, wrap_device (d));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
968 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
969
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
970 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
971 init_device_faces (struct device *d)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
972 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
973 /* This function can call lisp */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
974
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
975 /* When making the initial terminal device, there is no Lisp code
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
976 loaded, so we can't do this. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
977 if (initialized)
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 826
diff changeset
978 call_critical_lisp_code (d, Qinit_device_faces, wrap_device (d));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
979 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
980
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
981 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
982 init_frame_faces (struct frame *frm)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
983 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
984 /* When making the initial terminal device, there is no Lisp code
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
985 loaded, so we can't do this. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
986 if (initialized)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
987 {
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
988 Lisp_Object tframe = wrap_frame (frm);
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
989
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
990
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
991 /* DO NOT change the selected frame here. If the debugger goes off
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
992 it will try and display on the frame being created, but it is not
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
993 ready for that yet and a horrible death will occur. Any random
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
994 code depending on the selected-frame as an implicit arg should be
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
995 tracked down and shot. For the benefit of the one known,
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
996 xpm-color-symbols, make-frame sets the variable
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
997 Vframe_being_created to the frame it is making and sets it to nil
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
998 when done. Internal functions that this could trigger which are
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
999 currently depending on selected-frame should use this instead. It
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
1000 is not currently visible at the lisp level. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1001 call_critical_lisp_code (XDEVICE (FRAME_DEVICE (frm)),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1002 Qinit_frame_faces, tframe);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1003 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1004 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1005
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1006
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1007 /****************************************************************************
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1008 * face cache element functions *
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1009 ****************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1010
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1011 /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1012
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1013 #### Here is a description of how the face cache elements ought
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1014 to be redone. It is *NOT* how they work currently:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1015
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1016 However, when I started to go about implementing this, I realized
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1017 that there are all sorts of subtle problems with cache coherency
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1018 that are coming up. As it turns out, these problems don't
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1019 manifest themselves now due to the brute-force "kill 'em all"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1020 approach to cache invalidation when faces change; but if this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1021 is ever made smarter, these problems are going to come up, and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1022 some of them are very non-obvious.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1023
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1024 I'm thinking of redoing the cache code a bit to avoid these
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1025 coherency problems. The bulk of the problems will arise because
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1026 the current display structures have simple indices into the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1027 face cache, but the cache can be changed at various times,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1028 which could make the current display structures incorrect.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1029 I guess the dirty and updated flags are an attempt to fix
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1030 this, but this approach doesn't really work.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1031
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1032 Here's an approach that should keep things clean and unconfused:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1033
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1034 1) Imagine a "virtual face cache" that can grow arbitrarily
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1035 big and for which the only thing allowed is to add new
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1036 elements. Existing elements cannot be removed or changed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1037 This way, any pointers in the existing redisplay structure
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1038 into the cache never get screwed up. (This is important
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1039 because even if a cache element is out of date, if there's
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1040 a pointer to it then its contents still accurately describe
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1041 the way the text currently looks on the screen.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1042 2) Each element in the virtual cache either describes exactly
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1043 one face, or describes the merger of a number of faces
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1044 by some process. In order to simplify things, for mergers
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1045 we do not record which faces or ordering was used, but
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1046 simply that this cache element is the result of merging.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1047 Unlike the current implementation, it's important that a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1048 single cache element not be used to both describe a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1049 single face and describe a merger, even if all the property
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1050 values are the same.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1051 3) Each cache element can be clean or dirty. "Dirty" means
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1052 that the face that the element points to has been changed;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1053 this gets set at the time the face is changed. This
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1054 way, when looking up a value in the cache, you can determine
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1055 whether it's out of date or not. For merged faces it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1056 does not matter -- we don't record the faces or priority
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1057 used to create the merger, so it's impossible to look up
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1058 one of these faces. We have to recompute it each time.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1059 Luckily, this is fine -- doing the merge is much
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1060 less expensive than recomputing the properties of a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1061 single face.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1062 4) For each cache element, we keep a hash value. (In order
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1063 to hash the boolean properties, we convert each of them
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1064 into a different large prime number so that the hashing works
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1065 well.) This allows us, when comparing runes, to properly
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1066 determine whether the face for that rune has changed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1067 This will be especially important for TTY's, where there
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1068 aren't that many faces and minimizing redraw is very
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1069 important.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1070 5) We can't actually keep an infinite cache, but that doesn't
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1071 really matter that much. The only elements we care about
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1072 are those that are used by either the current or desired
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1073 display structs. Therefore, we keep a per-window
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1074 redisplay iteration number, and mark each element with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1075 that number as we use it. Just after outputting the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1076 window and synching the redisplay structs, we go through
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1077 the cache and invalidate all elements that are not clean
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1078 elements referring to a particular face and that do not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1079 have an iteration number equal to the current one. We
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1080 keep them in a chain, and use them to allocate new
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1081 elements when possible instead of increasing the Dynarr.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1082
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 826
diff changeset
1083 --ben (?? At least I think I wrote this!)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1084 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1085
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1086 /* mark for GC a dynarr of face cachels. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1087
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1088 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1089 mark_face_cachels (face_cachel_dynarr *elements)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1090 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1091 int elt;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1092
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1093 if (!elements)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1094 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1095
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1096 for (elt = 0; elt < Dynarr_length (elements); elt++)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1097 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1098 struct face_cachel *cachel = Dynarr_atp (elements, elt);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1099
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1100 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1101 int i;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1102
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1103 for (i = 0; i < NUM_LEADING_BYTES; i++)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1104 if (!NILP (cachel->font[i]) && !UNBOUNDP (cachel->font[i]))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1105 mark_object (cachel->font[i]);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1106 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1107 mark_object (cachel->face);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1108 mark_object (cachel->foreground);
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
1109 mark_object (cachel->foreback);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1110 mark_object (cachel->background);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1111 mark_object (cachel->display_table);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1112 mark_object (cachel->background_pixmap);
5080
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
1113 mark_object (cachel->background_placement);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1114 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1115 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1116
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1117 /* ensure that the given cachel contains an updated font value for
3094
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
1118 the given charset. Return the updated font value (which can be
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
1119 Qunbound, so this value must not be passed unchecked to Lisp).
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
1120
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
1121 #### Xft: This function will need to be updated for new font model. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1122
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1123 Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1124 ensure_face_cachel_contains_charset (struct face_cachel *cachel,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1125 Lisp_Object domain, Lisp_Object charset)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1126 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1127 Lisp_Object new_val;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1128 Lisp_Object face = cachel->face;
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1129 int bound = 1, final_stage = 0;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1130 int offs = XCHARSET_LEADING_BYTE (charset) - MIN_LEADING_BYTE;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1131
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
1132 if (!UNBOUNDP (cachel->font[offs]) &&
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1133 bit_vector_bit(FACE_CACHEL_FONT_UPDATED (cachel), offs))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1134 return cachel->font[offs];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1135
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1136 if (UNBOUNDP (face))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1137 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1138 /* a merged face. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1139 int i;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1140 struct window *w = XWINDOW (domain);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1141
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1142 new_val = Qunbound;
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1143 set_bit_vector_bit(FACE_CACHEL_FONT_SPECIFIED(cachel), offs, 0);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1144
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1145 for (i = 0; i < cachel->nfaces; i++)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1146 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1147 struct face_cachel *oth;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1148
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1149 oth = Dynarr_atp (w->face_cachels,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1150 FACE_CACHEL_FINDEX_UNSAFE (cachel, i));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1151 /* Tout le monde aime la recursion */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1152 ensure_face_cachel_contains_charset (oth, domain, charset);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1153
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1154 if (bit_vector_bit(FACE_CACHEL_FONT_SPECIFIED(oth), offs))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1155 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1156 new_val = oth->font[offs];
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1157 set_bit_vector_bit(FACE_CACHEL_FONT_SPECIFIED(cachel), offs, 1);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1158 set_bit_vector_bit
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
1159 (FACE_CACHEL_FONT_FINAL_STAGE(cachel), offs,
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1160 bit_vector_bit(FACE_CACHEL_FONT_FINAL_STAGE(oth), offs));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1161 break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1162 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1163 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1164
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1165 if (!bit_vector_bit(FACE_CACHEL_FONT_SPECIFIED(cachel), offs))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1166 /* need to do the default face. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1167 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1168 struct face_cachel *oth =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1169 Dynarr_atp (w->face_cachels, DEFAULT_INDEX);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1170 ensure_face_cachel_contains_charset (oth, domain, charset);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1171
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1172 new_val = oth->font[offs];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1173 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1174
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
1175 if (!UNBOUNDP (cachel->font[offs]) &&
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1176 !EQ (cachel->font[offs], new_val))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1177 cachel->dirty = 1;
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1178 set_bit_vector_bit(FACE_CACHEL_FONT_UPDATED(cachel), offs, 1);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1179 cachel->font[offs] = new_val;
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1180 DEBUG_FACES("just recursed on the unbound face, returning "
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1181 "something %s\n", UNBOUNDP(new_val) ? "not bound"
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1182 : "bound");
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1183 return new_val;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1184 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1185
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1186 do {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1187
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1188 /* Lookup the face, specifying the initial stage and that fallbacks
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1189 shouldn't happen. */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1190 new_val = face_property_matching_instance (face, Qfont, charset, domain,
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1191 /* ERROR_ME_DEBUG_WARN is
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1192 fine here. */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1193 ERROR_ME_DEBUG_WARN, 1, Qzero,
5015
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
1194 STAGE_INITIAL);
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1195 DEBUG_FACES("just called f_p_m_i on face %s, charset %s, initial, "
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
1196 "result was something %s\n",
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
1197 XSTRING_DATA(XSYMBOL_NAME(XFACE(cachel->face)->name)),
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1198 XSTRING_DATA(XSYMBOL_NAME(XCHARSET_NAME(charset))),
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1199 UNBOUNDP(new_val) ? "not bound" : "bound");
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1200
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1201 if (!UNBOUNDP (new_val)) break;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1202
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1203 bound = 0;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1204 /* Lookup the face again, this time allowing the fallback. If this
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1205 succeeds, it'll give a font intended for the script in question,
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1206 which is preferable to translating to ISO10646-1 and using the
4667
cbe5d2169270 Fix typos in face.c.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4534
diff changeset
1207 fixed-width fallback.
cbe5d2169270 Fix typos in face.c.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4534
diff changeset
1208
cbe5d2169270 Fix typos in face.c.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4534
diff changeset
1209 #### This is questionable. The problem is that unusual scripts
cbe5d2169270 Fix typos in face.c.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4534
diff changeset
1210 will typically fallback to the hard-coded values as the user is
cbe5d2169270 Fix typos in face.c.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4534
diff changeset
1211 unlikely to have specified them herself, a common complaint. */
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1212 new_val = face_property_matching_instance (face, Qfont,
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1213 charset, domain,
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1214 ERROR_ME_DEBUG_WARN, 0,
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
1215 Qzero,
5015
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
1216 STAGE_INITIAL);
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1217
5015
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
1218 DEBUG_FACES ("just called f_p_m_i on face %s, charset %s, initial, "
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
1219 "allow fallback, result was something %s\n",
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
1220 XSTRING_DATA (XSYMBOL_NAME (XFACE (cachel->face)->name)),
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
1221 XSTRING_DATA (XSYMBOL_NAME (XCHARSET_NAME (charset))),
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
1222 UNBOUNDP (new_val) ? "not bound" : "bound");
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1223
5015
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
1224 if (!UNBOUNDP (new_val))
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1225 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1226 break;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1227 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1228
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1229 bound = 1;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1230 /* Try the face itself with the final-stage specifiers. */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1231 new_val = face_property_matching_instance (face, Qfont,
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1232 charset, domain,
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1233 ERROR_ME_DEBUG_WARN, 1,
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
1234 Qzero,
5015
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
1235 STAGE_FINAL);
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1236
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1237 DEBUG_FACES("just called f_p_m_i on face %s, charset %s, final, "
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
1238 "result was something %s\n",
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
1239 XSTRING_DATA(XSYMBOL_NAME(XFACE(cachel->face)->name)),
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1240 XSTRING_DATA(XSYMBOL_NAME(XCHARSET_NAME(charset))),
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1241 UNBOUNDP(new_val) ? "not bound" : "bound");
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1242 /* Tell X11 redisplay that it should translate to iso10646-1. */
5015
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
1243 if (!UNBOUNDP (new_val))
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1244 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1245 final_stage = 1;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1246 break;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1247 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1248
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1249 bound = 0;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1250
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1251 /* Lookup the face again, this time both allowing the fallback and
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1252 allowing its final stage to be used. */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1253 new_val = face_property_matching_instance (face, Qfont,
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1254 charset, domain,
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1255 ERROR_ME_DEBUG_WARN, 0,
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
1256 Qzero,
5015
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
1257 STAGE_FINAL);
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1258
5015
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
1259 DEBUG_FACES ("just called f_p_m_i on face %s, charset %s, initial, "
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
1260 "allow fallback, result was something %s\n",
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
1261 XSTRING_DATA (XSYMBOL_NAME (XFACE (cachel->face)->name)),
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
1262 XSTRING_DATA (XSYMBOL_NAME (XCHARSET_NAME (charset))),
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
1263 UNBOUNDP (new_val) ? "not bound" : "bound");
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1264 if (!UNBOUNDP(new_val))
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1265 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1266 /* Tell X11 redisplay that it should translate to iso10646-1. */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1267 final_stage = 1;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1268 break;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1269 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1270 } while (0);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1271
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1272 if (!UNBOUNDP (cachel->font[offs]) && !EQ (new_val, cachel->font[offs]))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1273 cachel->dirty = 1;
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1274
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1275 set_bit_vector_bit(FACE_CACHEL_FONT_UPDATED(cachel), offs, 1);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1276 set_bit_vector_bit(FACE_CACHEL_FONT_FINAL_STAGE(cachel), offs,
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1277 final_stage);
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
1278 set_bit_vector_bit(FACE_CACHEL_FONT_SPECIFIED(cachel), offs,
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1279 (bound || EQ (face, Vdefault_face)));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1280 cachel->font[offs] = new_val;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1281 return new_val;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1282 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1283
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1284 /* Ensure that the given cachel contains updated fonts for all
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1285 the charsets specified. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1286
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1287 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1288 ensure_face_cachel_complete (struct face_cachel *cachel,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1289 Lisp_Object domain, unsigned char *charsets)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1290 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1291 int i;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1292
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1293 for (i = 0; i < NUM_LEADING_BYTES; i++)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1294 if (charsets[i])
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1295 {
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 800
diff changeset
1296 Lisp_Object charset = charset_by_leading_byte (i + MIN_LEADING_BYTE);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1297 assert (CHARSETP (charset));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1298 ensure_face_cachel_contains_charset (cachel, domain, charset);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1299 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1300 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1301
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1302 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1303 face_cachel_charset_font_metric_info (struct face_cachel *cachel,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1304 unsigned char *charsets,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1305 struct font_metric_info *fm)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1306 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1307 int i;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1308
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1309 fm->width = 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1310 fm->height = fm->ascent = 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1311 fm->descent = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1312 fm->proportional_p = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1313
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1314 for (i = 0; i < NUM_LEADING_BYTES; i++)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1315 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1316 if (charsets[i])
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1317 {
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 800
diff changeset
1318 Lisp_Object charset = charset_by_leading_byte (i + MIN_LEADING_BYTE);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1319 Lisp_Object font_instance = FACE_CACHEL_FONT (cachel, charset);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1320 Lisp_Font_Instance *fi = XFONT_INSTANCE (font_instance);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1321
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1322 assert (CHARSETP (charset));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1323 assert (FONT_INSTANCEP (font_instance));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1324
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1325 if (fm->ascent < (int) fi->ascent) fm->ascent = (int) fi->ascent;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1326 if (fm->descent < (int) fi->descent) fm->descent = (int) fi->descent;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1327 fm->height = fm->ascent + fm->descent;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1328 if (fi->proportional_p)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1329 fm->proportional_p = 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1330 if (EQ (charset, Vcharset_ascii))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1331 fm->width = fi->width;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1332 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1333 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1334 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1335
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1336 #define FROB(field) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1337 do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1338 Lisp_Object new_val = \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1339 FACE_PROPERTY_INSTANCE (face, Q##field, domain, 1, Qzero); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1340 int bound = 1; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1341 if (UNBOUNDP (new_val)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1342 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1343 bound = 0; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1344 new_val = FACE_PROPERTY_INSTANCE (face, Q##field, domain, 0, Qzero); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1345 } \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1346 if (!EQ (new_val, cachel->field)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1347 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1348 cachel->field = new_val; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1349 cachel->dirty = 1; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1350 } \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1351 cachel->field##_specified = (bound || default_face); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1352 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1353
5625
6fa0c5fb6154 One comment.
Didier Verna <didier@xemacs.org>
parents: 5624
diff changeset
1354
6fa0c5fb6154 One comment.
Didier Verna <didier@xemacs.org>
parents: 5624
diff changeset
1355 /* #### FIXME:
6fa0c5fb6154 One comment.
Didier Verna <didier@xemacs.org>
parents: 5624
diff changeset
1356
6fa0c5fb6154 One comment.
Didier Verna <didier@xemacs.org>
parents: 5624
diff changeset
1357 This is shaky and might not even be what's desired from time to time. Why
6fa0c5fb6154 One comment.
Didier Verna <didier@xemacs.org>
parents: 5624
diff changeset
1358 restrict to the default face? Somebody could want to specify the background
6fa0c5fb6154 One comment.
Didier Verna <didier@xemacs.org>
parents: 5624
diff changeset
1359 color of *any* face, and make it have precedence over inherited pixmaps.
6fa0c5fb6154 One comment.
Didier Verna <didier@xemacs.org>
parents: 5624
diff changeset
1360
6fa0c5fb6154 One comment.
Didier Verna <didier@xemacs.org>
parents: 5624
diff changeset
1361 What's really needed is a more general background property:
6fa0c5fb6154 One comment.
Didier Verna <didier@xemacs.org>
parents: 5624
diff changeset
1362 - type: color or pixmap
6fa0c5fb6154 One comment.
Didier Verna <didier@xemacs.org>
parents: 5624
diff changeset
1363 - color (for the color type)
6fa0c5fb6154 One comment.
Didier Verna <didier@xemacs.org>
parents: 5624
diff changeset
1364 - pixmap + fg color / bg color (in case of bitmap) for the pixmap type.
6fa0c5fb6154 One comment.
Didier Verna <didier@xemacs.org>
parents: 5624
diff changeset
1365
6fa0c5fb6154 One comment.
Didier Verna <didier@xemacs.org>
parents: 5624
diff changeset
1366 And, BTW, the foreground property could also behave like this.
6fa0c5fb6154 One comment.
Didier Verna <didier@xemacs.org>
parents: 5624
diff changeset
1367
6fa0c5fb6154 One comment.
Didier Verna <didier@xemacs.org>
parents: 5624
diff changeset
1368 -- dvl
6fa0c5fb6154 One comment.
Didier Verna <didier@xemacs.org>
parents: 5624
diff changeset
1369
6fa0c5fb6154 One comment.
Didier Verna <didier@xemacs.org>
parents: 5624
diff changeset
1370 A face's background pixmap will override the face's background color. But
6fa0c5fb6154 One comment.
Didier Verna <didier@xemacs.org>
parents: 5624
diff changeset
1371 the background pixmap of the default face should not override the
6fa0c5fb6154 One comment.
Didier Verna <didier@xemacs.org>
parents: 5624
diff changeset
1372 background color of a face if the background color has been specified or
6fa0c5fb6154 One comment.
Didier Verna <didier@xemacs.org>
parents: 5624
diff changeset
1373 inherited.
6fa0c5fb6154 One comment.
Didier Verna <didier@xemacs.org>
parents: 5624
diff changeset
1374
6fa0c5fb6154 One comment.
Didier Verna <didier@xemacs.org>
parents: 5624
diff changeset
1375 To accomplish this we remove the background pixmap of the cachel and mark
6fa0c5fb6154 One comment.
Didier Verna <didier@xemacs.org>
parents: 5624
diff changeset
1376 it as having been specified so that cachel merging won't override it later.
446
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1377 */
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1378 #define MAYBE_UNFROB_BACKGROUND_PIXMAP \
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1379 do \
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1380 { \
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1381 if (! default_face \
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1382 && cachel->background_specified \
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1383 && ! cachel->background_pixmap_specified) \
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1384 { \
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1385 cachel->background_pixmap = Qunbound; \
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1386 cachel->background_pixmap_specified = 1; \
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1387 } \
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1388 } while (0)
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1389
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1390
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1391 /* Add a cachel for the given face to the given window's cache. */
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1392
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1393 static void
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1394 add_face_cachel (struct window *w, Lisp_Object face)
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1395 {
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1396 int must_finish_frobbing = ! WINDOW_FACE_CACHEL (w, DEFAULT_INDEX);
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1397 struct face_cachel new_cachel;
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1398 Lisp_Object domain;
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1399
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1400 reset_face_cachel (&new_cachel);
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
1401 domain = wrap_window (w);
446
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1402 update_face_cachel_data (&new_cachel, domain, face);
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1403 Dynarr_add (w->face_cachels, new_cachel);
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1404
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1405 /* The face's background pixmap have not yet been frobbed (see comment
4667
cbe5d2169270 Fix typos in face.c.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4534
diff changeset
1406 in update_face_cachel_data), so we have to do it now */
446
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1407 if (must_finish_frobbing)
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1408 {
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1409 int default_face = EQ (face, Vdefault_face);
4844
91b3d00e717f Various cleanups for Dynarr code, from Unicode-internal ws
Ben Wing <ben@xemacs.org>
parents: 4827
diff changeset
1410 struct face_cachel *cachel = Dynarr_lastp (w->face_cachels);
446
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1411
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1412 FROB (background_pixmap);
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1413 MAYBE_UNFROB_BACKGROUND_PIXMAP;
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1414 }
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1415 }
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1416
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1417 /* Called when the updated flag has been cleared on a cachel.
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1418 This function returns 1 if the caller must finish the update (see comment
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1419 below), 0 otherwise.
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1420 */
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1421
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1422 void
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1423 update_face_cachel_data (struct face_cachel *cachel,
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1424 Lisp_Object domain,
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1425 Lisp_Object face)
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1426 {
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1427 if (XFACE (face)->dirty || UNBOUNDP (cachel->face))
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1428 {
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1429 int default_face = EQ (face, Vdefault_face);
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1430 cachel->face = face;
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1431
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1432 /* We normally only set the _specified flags if the value was
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
1433 actually bound. The exception is for the default face where
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
1434 we always set it since it is the ultimate fallback. */
446
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1435
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1436 FROB (foreground);
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
1437 FROB (foreback);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1438 FROB (background);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1439 FROB (display_table);
446
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1440
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1441 /* #### WARNING: the background pixmap property of faces is currently
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1442 the only one dealing with images. The problem we have here is that
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1443 frobbing the background pixmap might lead to image instantiation
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1444 which in turn might require that the cache we're building be up to
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1445 date, hence a crash. Here's a typical scenario of this:
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1446
4667
cbe5d2169270 Fix typos in face.c.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4534
diff changeset
1447 - a new window is created and its face cache elements are
446
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1448 initialized through a call to reset_face_cachels[1]. At that point,
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1449 the cache for the default and modeline faces (normaly taken care of
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1450 by redisplay itself) are null.
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1451 - the default face has a background pixmap which needs to be
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1452 instantiated right here, as a consequence of cache initialization.
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1453 - the background pixmap image happens to be instantiated as a string
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1454 (this happens on tty's for instance).
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1455 - In order to do this, we need to compute the string geometry.
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1456 - In order to do this, we might have to access the window's default
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1457 face cache. But this is the cache we're building right now, it is
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1458 null.
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1459 - BARF !!!!!
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1460
446
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1461 To sum up, this means that it is in general unsafe to instantiate
5384
3889ef128488 Fix misspelled words, and some grammar, across the entire source tree.
Jerry James <james@xemacs.org>
parents: 5354
diff changeset
1462 images before face cache updating is complete (apart from image
446
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1463 related face attributes). The solution we use below is to actually
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1464 detect whether we're building the window's face_cachels for the first
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1465 time, and simply NOT frob the background pixmap in that case. If
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1466 other image-related face attributes are ever implemented, they should
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1467 be protected the same way right here.
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1468
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1469 One note:
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1470 * See comment in `default_face_font_info' in face.c. Who wrote it ?
5384
3889ef128488 Fix misspelled words, and some grammar, across the entire source tree.
Jerry James <james@xemacs.org>
parents: 5354
diff changeset
1471 Maybe we have the beginning of an answer here ?
446
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1472
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1473 Footnotes:
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1474 [1] See comment at the top of `allocate_window' in window.c.
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1475
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1476 -- didier
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1477 */
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1478 if (! WINDOWP (domain)
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1479 || WINDOW_FACE_CACHEL (DOMAIN_XWINDOW (domain), DEFAULT_INDEX))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1480 {
446
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1481 FROB (background_pixmap);
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1482 MAYBE_UNFROB_BACKGROUND_PIXMAP;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1483 }
5080
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
1484
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
1485 FROB (background_placement);
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
1486
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1487 #undef FROB
446
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
1488 #undef MAYBE_UNFROB_BACKGROUND_PIXMAP
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1489
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1490 ensure_face_cachel_contains_charset (cachel, domain, Vcharset_ascii);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1491
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1492 #define FROB(field) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1493 do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1494 Lisp_Object new_val = \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1495 FACE_PROPERTY_INSTANCE (face, Q##field, domain, 1, Qzero); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1496 int bound = 1; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1497 unsigned int new_val_int; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1498 if (UNBOUNDP (new_val)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1499 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1500 bound = 0; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1501 new_val = FACE_PROPERTY_INSTANCE (face, Q##field, domain, 0, Qzero); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1502 } \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1503 new_val_int = EQ (new_val, Qt); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1504 if (cachel->field != new_val_int) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1505 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1506 cachel->field = new_val_int; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1507 cachel->dirty = 1; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1508 } \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1509 cachel->field##_specified = bound; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1510 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1511
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1512 FROB (underline);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1513 FROB (strikethru);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1514 FROB (highlight);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1515 FROB (dim);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1516 FROB (reverse);
5619
75ad4969a16d Replace the 'flush face property with the opposite 'shrink one.
Didier Verna <didier@xemacs.org>
parents: 5617
diff changeset
1517 FROB (shrink);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1518 FROB (blinking);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1519 #undef FROB
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1520 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1521
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1522 cachel->updated = 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1523 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1524
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1525 /* Merge the cachel identified by FINDEX in window W into the given
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1526 cachel. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1527
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1528 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1529 merge_face_cachel_data (struct window *w, face_index findex,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1530 struct face_cachel *cachel)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1531 {
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1532 int offs;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1533
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1534 #define FINDEX_FIELD(field) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1535 Dynarr_atp (w->face_cachels, findex)->field
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1536
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1537 #define FROB(field) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1538 do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1539 if (!cachel->field##_specified && FINDEX_FIELD (field##_specified)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1540 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1541 cachel->field = FINDEX_FIELD (field); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1542 cachel->field##_specified = 1; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1543 cachel->dirty = 1; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1544 } \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1545 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1546
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1547 FROB (foreground);
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
1548 FROB (foreback);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1549 FROB (background);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1550 FROB (display_table);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1551 FROB (background_pixmap);
5080
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
1552 FROB (background_placement);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1553 FROB (underline);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1554 FROB (strikethru);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1555 FROB (highlight);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1556 FROB (dim);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1557 FROB (reverse);
5619
75ad4969a16d Replace the 'flush face property with the opposite 'shrink one.
Didier Verna <didier@xemacs.org>
parents: 5617
diff changeset
1558 FROB (shrink);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1559 FROB (blinking);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1560
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1561 for (offs = 0; offs < NUM_LEADING_BYTES; ++offs)
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1562 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1563 if (!(bit_vector_bit(FACE_CACHEL_FONT_SPECIFIED(cachel), offs))
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1564 && bit_vector_bit(FACE_CACHEL_FONT_SPECIFIED
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1565 (Dynarr_atp(w->face_cachels, findex)), offs))
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1566 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1567 cachel->font[offs] = FINDEX_FIELD (font[offs]);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1568 set_bit_vector_bit(FACE_CACHEL_FONT_SPECIFIED(cachel), offs, 1);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1569 /* Also propagate whether we're translating to Unicode for the
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1570 given face. */
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
1571 set_bit_vector_bit(FACE_CACHEL_FONT_FINAL_STAGE(cachel), offs,
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1572 bit_vector_bit(FACE_CACHEL_FONT_FINAL_STAGE
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1573 (Dynarr_atp(w->face_cachels,
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1574 findex)), offs));
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1575 cachel->dirty = 1;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1576 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1577 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1578 #undef FROB
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1579 #undef FINDEX_FIELD
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1580
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1581 cachel->updated = 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1582 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1583
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1584 /* Initialize a cachel. */
3094
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
1585 /* #### Xft: this function will need to be changed for new font model. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1586
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1587 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1588 reset_face_cachel (struct face_cachel *cachel)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1589 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1590 xzero (*cachel);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1591 cachel->face = Qunbound;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1592 cachel->nfaces = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1593 cachel->merged_faces = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1594 cachel->foreground = Qunbound;
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
1595 cachel->foreback = Qunbound;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1596 cachel->background = Qunbound;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1597 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1598 int i;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1599
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1600 for (i = 0; i < NUM_LEADING_BYTES; i++)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1601 cachel->font[i] = Qunbound;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1602 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1603 cachel->display_table = Qunbound;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1604 cachel->background_pixmap = Qunbound;
5080
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
1605 cachel->background_placement = Qunbound;
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1606 FACE_CACHEL_FONT_SPECIFIED (cachel)->size = sizeof(cachel->font_specified);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1607 FACE_CACHEL_FONT_UPDATED (cachel)->size = sizeof(cachel->font_updated);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1608 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1609
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1610 /* Retrieve the index to a cachel for window W that corresponds to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1611 the specified face. If necessary, add a new element to the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1612 cache. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1613
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1614 face_index
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1615 get_builtin_face_cache_index (struct window *w, Lisp_Object face)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1616 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1617 int elt;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1618
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1619 if (noninteractive)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1620 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1621
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1622 for (elt = 0; elt < Dynarr_length (w->face_cachels); elt++)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1623 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1624 struct face_cachel *cachel = WINDOW_FACE_CACHEL (w, elt);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1625
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1626 if (EQ (cachel->face, face))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1627 {
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
1628 Lisp_Object window = wrap_window (w);
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
1629
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1630 if (!cachel->updated)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1631 update_face_cachel_data (cachel, window, face);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1632 return elt;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1633 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1634 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1635
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1636 /* If we didn't find the face, add it and then return its index. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1637 add_face_cachel (w, face);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1638 return elt;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1639 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1640
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1641 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1642 reset_face_cachels (struct window *w)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1643 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1644 /* #### Not initialized in batch mode for the stream device. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1645 if (w->face_cachels)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1646 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1647 int i;
4208
e820df1cb11a [xemacs-hg @ 2007-10-03 13:28:19 by didierv]
didierv
parents: 4187
diff changeset
1648 face_index fi;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1649
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1650 for (i = 0; i < Dynarr_length (w->face_cachels); i++)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1651 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1652 struct face_cachel *cachel = Dynarr_atp (w->face_cachels, i);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1653 if (cachel->merged_faces)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1654 Dynarr_free (cachel->merged_faces);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1655 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1656 Dynarr_reset (w->face_cachels);
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
1657 /* #### NOTE: be careful with the order !
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
1658 The cpp macros DEFAULT_INDEX and MODELINE_INDEX defined in
4208
e820df1cb11a [xemacs-hg @ 2007-10-03 13:28:19 by didierv]
didierv
parents: 4187
diff changeset
1659 redisplay.h depend on the code below. Please make sure to assert the
e820df1cb11a [xemacs-hg @ 2007-10-03 13:28:19 by didierv]
didierv
parents: 4187
diff changeset
1660 correct values if you ever add new built-in faces here.
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
1661 -- dvl */
4208
e820df1cb11a [xemacs-hg @ 2007-10-03 13:28:19 by didierv]
didierv
parents: 4187
diff changeset
1662 fi = get_builtin_face_cache_index (w, Vdefault_face);
4210
65c3847d432c [xemacs-hg @ 2007-10-03 21:31:10 by didierv]
didierv
parents: 4208
diff changeset
1663 assert (noninteractive || fi == DEFAULT_INDEX);
4208
e820df1cb11a [xemacs-hg @ 2007-10-03 13:28:19 by didierv]
didierv
parents: 4187
diff changeset
1664 fi = get_builtin_face_cache_index (w, Vmodeline_face);
4210
65c3847d432c [xemacs-hg @ 2007-10-03 21:31:10 by didierv]
didierv
parents: 4208
diff changeset
1665 assert (noninteractive || fi == MODELINE_INDEX);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1666 XFRAME (w->frame)->window_face_cache_reset = 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1667 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1668 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1669
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1670 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1671 mark_face_cachels_as_clean (struct window *w)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1672 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1673 int elt;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1674
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1675 for (elt = 0; elt < Dynarr_length (w->face_cachels); elt++)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1676 Dynarr_atp (w->face_cachels, elt)->dirty = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1677 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1678
3094
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
1679 /* #### Xft: this function will need to be changed for new font model. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1680 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1681 mark_face_cachels_as_not_updated (struct window *w)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1682 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1683 int elt;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1684
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1685 for (elt = 0; elt < Dynarr_length (w->face_cachels); elt++)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1686 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1687 struct face_cachel *cachel = Dynarr_atp (w->face_cachels, elt);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1688
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1689 cachel->updated = 0;
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
1690 memset(FACE_CACHEL_FONT_UPDATED(cachel)->bits, 0,
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
1691 BIT_VECTOR_LONG_STORAGE (NUM_LEADING_BYTES));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1692 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1693 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1694
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1695 #ifdef MEMORY_USAGE_STATS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1696
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1697 int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1698 compute_face_cachel_usage (face_cachel_dynarr *face_cachels,
5157
1fae11d56ad2 redo memory-usage mechanism, add way of dynamically initializing Lisp objects
Ben Wing <ben@xemacs.org>
parents: 5128
diff changeset
1699 struct usage_stats *ustats)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1700 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1701 int total = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1702
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1703 if (face_cachels)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1704 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1705 int i;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1706
5157
1fae11d56ad2 redo memory-usage mechanism, add way of dynamically initializing Lisp objects
Ben Wing <ben@xemacs.org>
parents: 5128
diff changeset
1707 total += Dynarr_memory_usage (face_cachels, ustats);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1708 for (i = 0; i < Dynarr_length (face_cachels); i++)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1709 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1710 int_dynarr *merged = Dynarr_at (face_cachels, i).merged_faces;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1711 if (merged)
5157
1fae11d56ad2 redo memory-usage mechanism, add way of dynamically initializing Lisp objects
Ben Wing <ben@xemacs.org>
parents: 5128
diff changeset
1712 total += Dynarr_memory_usage (merged, ustats);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1713 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1714 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1715
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1716 return total;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1717 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1718
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1719 #endif /* MEMORY_USAGE_STATS */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1720
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1721
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1722 /*****************************************************************************
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1723 * merged face functions *
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1724 *****************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1725
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1726 /* Compare two merged face cachels to determine whether we have to add
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1727 a new entry to the face cache.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1728
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1729 Note that we do not compare the attributes, but just the faces the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1730 cachels are based on. If they are the same, then the cachels certainly
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1731 ought to have the same attributes, except in the case where fonts
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1732 for different charsets have been determined in the two -- and in that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1733 case this difference is fine. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1734
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1735 static int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1736 compare_merged_face_cachels (struct face_cachel *cachel1,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1737 struct face_cachel *cachel2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1738 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1739 int i;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1740
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1741 if (!EQ (cachel1->face, cachel2->face)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1742 || cachel1->nfaces != cachel2->nfaces)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1743 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1744
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1745 for (i = 0; i < cachel1->nfaces; i++)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1746 if (FACE_CACHEL_FINDEX_UNSAFE (cachel1, i)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1747 != FACE_CACHEL_FINDEX_UNSAFE (cachel2, i))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1748 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1749
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1750 return 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1751 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1752
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1753 /* Retrieve the index to a cachel for window W that corresponds to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1754 the specified cachel. If necessary, add a new element to the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1755 cache. This is similar to get_builtin_face_cache_index() but
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1756 is intended for merged cachels rather than for cachels representing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1757 just a face.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1758
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1759 Note that a merged cachel for just one face is not the same as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1760 the simple cachel for that face, because it is also merged with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1761 the default face. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1762
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1763 static face_index
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1764 get_merged_face_cache_index (struct window *w,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1765 struct face_cachel *merged_cachel)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1766 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1767 int elt;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1768 int cache_size = Dynarr_length (w->face_cachels);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1769
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1770 for (elt = 0; elt < cache_size; elt++)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1771 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1772 struct face_cachel *cachel =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1773 Dynarr_atp (w->face_cachels, elt);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1774
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1775 if (compare_merged_face_cachels (cachel, merged_cachel))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1776 return elt;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1777 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1778
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1779 /* We didn't find it so add this instance to the cache. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1780 merged_cachel->updated = 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1781 merged_cachel->dirty = 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1782 Dynarr_add (w->face_cachels, *merged_cachel);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1783 return cache_size;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1784 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1785
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1786 face_index
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1787 get_extent_fragment_face_cache_index (struct window *w,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1788 struct extent_fragment *ef)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1789 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1790 struct face_cachel cachel;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1791 int len = Dynarr_length (ef->extents);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1792 face_index findex = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1793
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1794 /* Optimize the default case. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1795 if (len == 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1796 return DEFAULT_INDEX;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1797 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1798 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1799 int i;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1800
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1801 /* Merge the faces of the extents together in order. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1802
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1803 reset_face_cachel (&cachel);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1804
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1805 for (i = len - 1; i >= 0; i--)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1806 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1807 EXTENT current = Dynarr_at (ef->extents, i);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1808 int has_findex = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1809 Lisp_Object face = extent_face (current);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1810
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1811 if (FACEP (face))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1812 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1813 findex = get_builtin_face_cache_index (w, face);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1814 has_findex = 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1815 merge_face_cachel_data (w, findex, &cachel);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1816 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1817 /* remember, we're called from within redisplay
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1818 so we can't error. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1819 else while (CONSP (face))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1820 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1821 Lisp_Object one_face = XCAR (face);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1822 if (FACEP (one_face))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1823 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1824 findex = get_builtin_face_cache_index (w, one_face);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1825 merge_face_cachel_data (w, findex, &cachel);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1826
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1827 /* code duplication here but there's no clean
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1828 way to avoid it. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1829 if (cachel.nfaces >= NUM_STATIC_CACHEL_FACES)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1830 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1831 if (!cachel.merged_faces)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1832 cachel.merged_faces = Dynarr_new (int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1833 Dynarr_add (cachel.merged_faces, findex);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1834 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1835 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1836 cachel.merged_faces_static[cachel.nfaces] = findex;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1837 cachel.nfaces++;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1838 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1839 face = XCDR (face);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1840 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1841
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1842 if (has_findex)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1843 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1844 if (cachel.nfaces >= NUM_STATIC_CACHEL_FACES)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1845 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1846 if (!cachel.merged_faces)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1847 cachel.merged_faces = Dynarr_new (int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1848 Dynarr_add (cachel.merged_faces, findex);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1849 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1850 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1851 cachel.merged_faces_static[cachel.nfaces] = findex;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1852 cachel.nfaces++;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1853 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1854 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1855
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1856 /* Now finally merge in the default face. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1857 findex = get_builtin_face_cache_index (w, Vdefault_face);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1858 merge_face_cachel_data (w, findex, &cachel);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1859
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1860 findex = get_merged_face_cache_index (w, &cachel);
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1861 if (cachel.merged_faces &&
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1862 /* merged_faces did not get stored and available via return value */
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1863 Dynarr_at (w->face_cachels, findex).merged_faces !=
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1864 cachel.merged_faces)
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1865 {
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1866 Dynarr_free (cachel.merged_faces);
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1867 cachel.merged_faces = 0;
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1868 }
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1869 return findex;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1870 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1871 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1872
3094
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
1873 /* Return a cache index for window W from merging the faces in FACE_LIST.
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
1874 COUNT is the number of faces in the list.
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
1875
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
1876 The default face should not be included in the list, as it is always
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
1877 implicitly merged into the cachel.
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
1878
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
1879 WARNING: this interface may change. */
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
1880
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
1881 face_index
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
1882 merge_face_list_to_cache_index (struct window *w,
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
1883 Lisp_Object *face_list, int count)
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
1884 {
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
1885 int i;
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
1886 face_index findex = 0;
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
1887 struct face_cachel cachel;
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
1888
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
1889 reset_face_cachel (&cachel);
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
1890
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
1891 for (i = 0; i < count; i++)
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
1892 {
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
1893 Lisp_Object face = face_list[i];
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
1894
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
1895 if (!NILP (face))
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
1896 {
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
1897 CHECK_FACE(face); /* #### presumably unnecessary */
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
1898 findex = get_builtin_face_cache_index (w, face);
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
1899 merge_face_cachel_data (w, findex, &cachel);
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
1900 }
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
1901 }
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
1902
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
1903 /* Now finally merge in the default face. */
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
1904 findex = get_builtin_face_cache_index (w, Vdefault_face);
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
1905 merge_face_cachel_data (w, findex, &cachel);
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
1906
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
1907 return get_merged_face_cache_index (w, &cachel);
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
1908 }
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
1909
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1910
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1911 /*****************************************************************************
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1912 interface functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1913 ****************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1914
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1915 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1916 update_EmacsFrame (Lisp_Object frame, Lisp_Object name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1917 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1918 struct frame *frm = XFRAME (frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1919
3676
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
1920 if (!FRAME_LIVE_P(frm))
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
1921 return;
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
1922
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1923 if (EQ (name, Qfont))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1924 MARK_FRAME_SIZE_SLIPPED (frm);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1925
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1926 MAYBE_FRAMEMETH (frm, update_frame_external_traits, (frm, name));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1927 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1928
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1929 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1930 update_EmacsFrames (Lisp_Object locale, Lisp_Object name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1931 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1932 if (FRAMEP (locale))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1933 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1934 update_EmacsFrame (locale, name);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1935 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1936 else if (DEVICEP (locale))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1937 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1938 Lisp_Object frmcons;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1939
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1940 DEVICE_FRAME_LOOP (frmcons, XDEVICE (locale))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1941 update_EmacsFrame (XCAR (frmcons), name);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1942 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1943 else if (EQ (locale, Qglobal) || EQ (locale, Qfallback))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1944 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1945 Lisp_Object frmcons, devcons, concons;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1946
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1947 FRAME_LOOP_NO_BREAK (frmcons, devcons, concons)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1948 update_EmacsFrame (XCAR (frmcons), name);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1949 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1950 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1951
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1952 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1953 update_frame_face_values (struct frame *f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1954 {
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
1955 Lisp_Object frm = wrap_frame (f);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1956
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1957 update_EmacsFrame (frm, Qforeground);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1958 update_EmacsFrame (frm, Qbackground);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1959 update_EmacsFrame (frm, Qfont);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1960 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1961
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1962 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1963 face_property_was_changed (Lisp_Object face, Lisp_Object property,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1964 Lisp_Object locale)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1965 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1966 int default_face = EQ (face, Vdefault_face);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1967
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1968 /* If the locale could affect the frame value, then call
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1969 update_EmacsFrames just in case. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1970 if (default_face &&
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
1971 (EQ (property, Qforeground) ||
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
1972 EQ (property, Qbackground) ||
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1973 EQ (property, Qfont)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1974 update_EmacsFrames (locale, property);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1975
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1976 if (WINDOWP (locale))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1977 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1978 MARK_FRAME_FACES_CHANGED (XFRAME (XWINDOW (locale)->frame));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1979 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1980 else if (FRAMEP (locale))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1981 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1982 MARK_FRAME_FACES_CHANGED (XFRAME (locale));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1983 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1984 else if (DEVICEP (locale))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1985 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1986 MARK_DEVICE_FRAMES_FACES_CHANGED (XDEVICE (locale));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1987 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1988 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1989 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1990 Lisp_Object devcons, concons;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1991 DEVICE_LOOP_NO_BREAK (devcons, concons)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1992 MARK_DEVICE_FRAMES_FACES_CHANGED (XDEVICE (XCAR (devcons)));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1993 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1994
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1995 /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1996 * This call to update_faces_inheritance isn't needed and makes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1997 * creating and modifying faces _very_ slow. The point of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1998 * update_face_inheritances is to find all faces that inherit
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1999 * directly from this face property and set the specifier "dirty"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2000 * flag on the corresponding specifier. This forces recaching of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2001 * cached specifier values in frame and window struct slots. But
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2002 * currently no face properties are cached in frame and window
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2003 * struct slots, so calling this function does nothing useful!
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2004 *
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2005 * Further, since update_faces_inheritance maps over the whole
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2006 * face table every time it is called, it gets terribly slow when
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2007 * there are many faces. Creating 500 faces on a 50Mhz 486 took
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2008 * 433 seconds when update_faces_inheritance was called. With the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2009 * call commented out, creating those same 500 faces took 0.72
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2010 * seconds.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2011 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2012 /* update_faces_inheritance (face, property);*/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2013 XFACE (face)->dirty = 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2014 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2015
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2016 DEFUN ("copy-face", Fcopy_face, 2, 6, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2017 Define and return a new face which is a copy of an existing one,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2018 or makes an already-existing face be exactly like another.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2019 LOCALE, TAG-SET, EXACT-P, and HOW-TO-ADD are as in `copy-specifier'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2020 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2021 (old_face, new_name, locale, tag_set, exact_p, how_to_add))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2022 {
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
2023 Lisp_Face *fold, *fnew;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2024 Lisp_Object new_face = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2025 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2026
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2027 old_face = Fget_face (old_face);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2028
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2029 /* We GCPRO old_face because it might be temporary, and GCing could
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2030 occur in various places below. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2031 GCPRO4 (tag_set, locale, old_face, new_face);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2032 /* check validity of how_to_add now. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2033 decode_how_to_add_specification (how_to_add);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2034 /* and of tag_set. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2035 tag_set = decode_specifier_tag_set (tag_set);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2036 /* and of locale. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2037 locale = decode_locale_list (locale);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2038
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2039 new_face = Ffind_face (new_name);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2040 if (NILP (new_face))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2041 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2042 Lisp_Object temp;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2043
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2044 CHECK_SYMBOL (new_name);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2045
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2046 /* Create the new face with the same status as the old face. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2047 temp = (NILP (Fgethash (old_face, Vtemporary_faces_cache, Qnil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2048 ? Qnil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2049 : Qt);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2050
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2051 new_face = Fmake_face (new_name, Qnil, temp);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2052 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2053
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2054 fold = XFACE (old_face);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2055 fnew = XFACE (new_face);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2056
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2057 #define COPY_PROPERTY(property) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2058 Fcopy_specifier (fold->property, fnew->property, \
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2059 locale, tag_set, exact_p, how_to_add);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2060
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2061 COPY_PROPERTY (foreground);
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
2062 COPY_PROPERTY (foreback);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2063 COPY_PROPERTY (background);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2064 COPY_PROPERTY (font);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2065 COPY_PROPERTY (display_table);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2066 COPY_PROPERTY (background_pixmap);
5080
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
2067 COPY_PROPERTY (background_placement);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2068 COPY_PROPERTY (underline);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2069 COPY_PROPERTY (strikethru);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2070 COPY_PROPERTY (highlight);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2071 COPY_PROPERTY (dim);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2072 COPY_PROPERTY (blinking);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2073 COPY_PROPERTY (reverse);
5619
75ad4969a16d Replace the 'flush face property with the opposite 'shrink one.
Didier Verna <didier@xemacs.org>
parents: 5617
diff changeset
2074 COPY_PROPERTY (shrink);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2075 #undef COPY_PROPERTY
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2076 /* #### should it copy the individual specifiers, if they exist? */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2077 fnew->plist = Fcopy_sequence (fold->plist);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2078
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2079 UNGCPRO;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2080
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2081 return new_name;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2082 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2083
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2084 #ifdef MULE
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2085
3918
049dc907c17a [xemacs-hg @ 2007-04-22 19:58:27 by aidan]
aidan
parents: 3802
diff changeset
2086 Lisp_Object Qone_dimensional, Qtwo_dimensional, Qx_coverage_instantiator;
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2087
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2088 DEFUN ("specifier-tag-one-dimensional-p",
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2089 Fspecifier_tag_one_dimensional_p,
5015
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
2090 1, 1, 0, /*
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2091 Return non-nil if (charset-dimension CHARSET) is 1.
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2092
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2093 Used by the X11 platform font code; see `define-specifier-tag'. You
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2094 shouldn't ever need to call this yourself.
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2095 */
5015
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
2096 (charset))
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2097 {
5015
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
2098 CHECK_CHARSET (charset);
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
2099 return (1 == XCHARSET_DIMENSION (charset)) ? Qt : Qnil;
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2100 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2101
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2102 DEFUN ("specifier-tag-two-dimensional-p",
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2103 Fspecifier_tag_two_dimensional_p,
5015
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
2104 1, 1, 0, /*
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2105 Return non-nil if (charset-dimension CHARSET) is 2.
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2106
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2107 Used by the X11 platform font code; see `define-specifier-tag'. You
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2108 shouldn't ever need to call this yourself.
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2109 */
5015
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
2110 (charset))
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2111 {
5015
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
2112 CHECK_CHARSET (charset);
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
2113 return (2 == XCHARSET_DIMENSION (charset)) ? Qt : Qnil;
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2114 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2115
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2116 DEFUN ("specifier-tag-final-stage-p",
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2117 Fspecifier_tag_final_stage_p,
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2118 2, 2, 0, /*
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2119 Return non-nil if STAGE is 'final.
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2120
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2121 Used by the X11 platform font code for giving fallbacks; see
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2122 `define-specifier-tag'. You shouldn't ever need to call this.
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2123 */
5015
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
2124 (UNUSED (charset), stage))
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2125 {
5015
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 5013
diff changeset
2126 return EQ (stage, Qfinal) ? Qt : Qnil;
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2127 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2128
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2129 DEFUN ("specifier-tag-initial-stage-p",
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2130 Fspecifier_tag_initial_stage_p,
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2131 2, 2, 0, /*
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2132 Return non-nil if STAGE is 'initial.
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2133
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2134 Used by the X11 platform font code for giving fallbacks; see
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2135 `define-specifier-tag'. You shouldn't ever need to call this.
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2136 */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2137 (UNUSED(charset), stage))
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2138 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2139 return EQ(stage, Qinitial) ? Qt : Qnil;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2140 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2141
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2142 DEFUN ("specifier-tag-encode-as-utf-8-p",
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2143 Fspecifier_tag_encode_as_utf_8_p,
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2144 2, 2, 0, /*
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2145 Return t if and only if (charset-property CHARSET 'encode-as-utf-8)).
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2146
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2147 Used by the X11 platform font code; see `define-specifier-tag'. You
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2148 shouldn't ever need to call this.
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2149 */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2150 (charset, UNUSED(stage)))
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2151 {
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2152 /* Used to check that the stage was initial too. */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2153 CHECK_CHARSET(charset);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2154 return XCHARSET_ENCODE_AS_UTF_8(charset) ? Qt : Qnil;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2155 }
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2156
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2157 #endif /* MULE */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2158
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2159
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2160 void
5157
1fae11d56ad2 redo memory-usage mechanism, add way of dynamically initializing Lisp objects
Ben Wing <ben@xemacs.org>
parents: 5128
diff changeset
2161 face_objects_create (void)
1fae11d56ad2 redo memory-usage mechanism, add way of dynamically initializing Lisp objects
Ben Wing <ben@xemacs.org>
parents: 5128
diff changeset
2162 {
1fae11d56ad2 redo memory-usage mechanism, add way of dynamically initializing Lisp objects
Ben Wing <ben@xemacs.org>
parents: 5128
diff changeset
2163 OBJECT_HAS_METHOD (face, getprop);
1fae11d56ad2 redo memory-usage mechanism, add way of dynamically initializing Lisp objects
Ben Wing <ben@xemacs.org>
parents: 5128
diff changeset
2164 OBJECT_HAS_METHOD (face, putprop);
1fae11d56ad2 redo memory-usage mechanism, add way of dynamically initializing Lisp objects
Ben Wing <ben@xemacs.org>
parents: 5128
diff changeset
2165 OBJECT_HAS_METHOD (face, remprop);
1fae11d56ad2 redo memory-usage mechanism, add way of dynamically initializing Lisp objects
Ben Wing <ben@xemacs.org>
parents: 5128
diff changeset
2166 OBJECT_HAS_METHOD (face, plist);
1fae11d56ad2 redo memory-usage mechanism, add way of dynamically initializing Lisp objects
Ben Wing <ben@xemacs.org>
parents: 5128
diff changeset
2167 }
1fae11d56ad2 redo memory-usage mechanism, add way of dynamically initializing Lisp objects
Ben Wing <ben@xemacs.org>
parents: 5128
diff changeset
2168
1fae11d56ad2 redo memory-usage mechanism, add way of dynamically initializing Lisp objects
Ben Wing <ben@xemacs.org>
parents: 5128
diff changeset
2169 void
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2170 syms_of_faces (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2171 {
5117
3742ea8250b5 Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents: 3017
diff changeset
2172 INIT_LISP_OBJECT (face);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2173
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
2174 /* Qdefault, Qwidget, Qleft_margin, Qright_margin defined in general.c */
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
2175 DEFSYMBOL (Qmodeline);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
2176 DEFSYMBOL (Qgui_element);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
2177 DEFSYMBOL (Qtext_cursor);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
2178 DEFSYMBOL (Qvertical_divider);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2179
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2180 DEFSUBR (Ffacep);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2181 DEFSUBR (Ffind_face);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2182 DEFSUBR (Fget_face);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2183 DEFSUBR (Fface_name);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2184 DEFSUBR (Fbuilt_in_face_specifiers);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2185 DEFSUBR (Fface_list);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2186 DEFSUBR (Fmake_face);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2187 DEFSUBR (Fcopy_face);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2188
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2189 #ifdef MULE
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2190 DEFSYMBOL (Qone_dimensional);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2191 DEFSYMBOL (Qtwo_dimensional);
3918
049dc907c17a [xemacs-hg @ 2007-04-22 19:58:27 by aidan]
aidan
parents: 3802
diff changeset
2192 DEFSYMBOL (Qx_coverage_instantiator);
049dc907c17a [xemacs-hg @ 2007-04-22 19:58:27 by aidan]
aidan
parents: 3802
diff changeset
2193
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2194 /* I would much prefer these were in Lisp. */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2195 DEFSUBR (Fspecifier_tag_one_dimensional_p);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2196 DEFSUBR (Fspecifier_tag_two_dimensional_p);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2197 DEFSUBR (Fspecifier_tag_initial_stage_p);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2198 DEFSUBR (Fspecifier_tag_final_stage_p);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2199 DEFSUBR (Fspecifier_tag_encode_as_utf_8_p);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2200 #endif /* MULE */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2201
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
2202 DEFSYMBOL (Qfacep);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
2203 DEFSYMBOL (Qforeground);
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
2204 DEFSYMBOL (Qforeback);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
2205 DEFSYMBOL (Qbackground);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2206 /* Qfont defined in general.c */
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
2207 DEFSYMBOL (Qdisplay_table);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
2208 DEFSYMBOL (Qbackground_pixmap);
5080
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
2209 DEFSYMBOL (Qbackground_placement);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
2210 DEFSYMBOL (Qunderline);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
2211 DEFSYMBOL (Qstrikethru);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2212 /* Qhighlight, Qreverse defined in general.c */
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
2213 DEFSYMBOL (Qdim);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
2214 DEFSYMBOL (Qblinking);
5619
75ad4969a16d Replace the 'flush face property with the opposite 'shrink one.
Didier Verna <didier@xemacs.org>
parents: 5617
diff changeset
2215 DEFSYMBOL (Qshrink);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2216
2865
8baa2f03d853 [xemacs-hg @ 2005-07-19 09:45:00 by didierv]
didierv
parents: 2720
diff changeset
2217 DEFSYMBOL (Qface_alias);
2867
abbd4c295aa2 [xemacs-hg @ 2005-07-20 07:36:33 by didierv]
didierv
parents: 2865
diff changeset
2218 DEFERROR_STANDARD (Qcyclic_face_alias, Qinvalid_state);
2865
8baa2f03d853 [xemacs-hg @ 2005-07-19 09:45:00 by didierv]
didierv
parents: 2720
diff changeset
2219
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
2220 DEFSYMBOL (Qinit_face_from_resources);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
2221 DEFSYMBOL (Qinit_global_faces);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
2222 DEFSYMBOL (Qinit_device_faces);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
2223 DEFSYMBOL (Qinit_frame_faces);
5222
18c0b5909d16 Use keywords in structure syntax; new #define, NEED_TO_HANDLE_21_4_CODE 1
Aidan Kehoe <kehoea@parhasard.net>
parents: 5191
diff changeset
2224
18c0b5909d16 Use keywords in structure syntax; new #define, NEED_TO_HANDLE_21_4_CODE 1
Aidan Kehoe <kehoea@parhasard.net>
parents: 5191
diff changeset
2225 DEFKEYWORD (Q_name);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2226 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2227
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2228 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2229 structure_type_create_faces (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2230 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2231 struct structure_type *st;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2232
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2233 st = define_structure_type (Qface, face_validate, face_instantiate);
5222
18c0b5909d16 Use keywords in structure syntax; new #define, NEED_TO_HANDLE_21_4_CODE 1
Aidan Kehoe <kehoea@parhasard.net>
parents: 5191
diff changeset
2234 #ifdef NEED_TO_HANDLE_21_4_CODE
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2235 define_structure_type_keyword (st, Qname, face_name_validate);
5222
18c0b5909d16 Use keywords in structure syntax; new #define, NEED_TO_HANDLE_21_4_CODE 1
Aidan Kehoe <kehoea@parhasard.net>
parents: 5191
diff changeset
2236 #endif
18c0b5909d16 Use keywords in structure syntax; new #define, NEED_TO_HANDLE_21_4_CODE 1
Aidan Kehoe <kehoea@parhasard.net>
parents: 5191
diff changeset
2237 define_structure_type_keyword (st, Q_name, face_name_validate);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2238 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2239
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2240 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2241 vars_of_faces (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2242 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2243 staticpro (&Vpermanent_faces_cache);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2244 Vpermanent_faces_cache =
5191
71ee43b8a74d Add #'equalp as a hash test by default; add #'define-hash-table-test, GNU API
Aidan Kehoe <kehoea@parhasard.net>
parents: 5178
diff changeset
2245 make_lisp_hash_table (10, HASH_TABLE_NON_WEAK, Qeq);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2246 staticpro (&Vtemporary_faces_cache);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2247 Vtemporary_faces_cache =
5191
71ee43b8a74d Add #'equalp as a hash test by default; add #'define-hash-table-test, GNU API
Aidan Kehoe <kehoea@parhasard.net>
parents: 5178
diff changeset
2248 make_lisp_hash_table (0, HASH_TABLE_WEAK, Qeq);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2249
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2250 staticpro (&Vdefault_face);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2251 Vdefault_face = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2252 staticpro (&Vgui_element_face);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2253 Vgui_element_face = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2254 staticpro (&Vwidget_face);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2255 Vwidget_face = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2256 staticpro (&Vmodeline_face);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2257 Vmodeline_face = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2258 staticpro (&Vtoolbar_face);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2259 Vtoolbar_face = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2260
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2261 staticpro (&Vvertical_divider_face);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2262 Vvertical_divider_face = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2263 staticpro (&Vleft_margin_face);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2264 Vleft_margin_face = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2265 staticpro (&Vright_margin_face);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2266 Vright_margin_face = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2267 staticpro (&Vtext_cursor_face);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2268 Vtext_cursor_face = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2269 staticpro (&Vpointer_face);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2270 Vpointer_face = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2271
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2272 #ifdef DEBUG_XEMACS
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2273 DEFVAR_INT ("debug-x-faces", &debug_x_faces /*
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2274 If non-zero, display debug information about X faces
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2275 */ );
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2276 debug_x_faces = 0;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2277 #endif
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2278
5386
af961911bcb2 Make listu() and listn() assemble lists in forward order. Use them.
Jerry James <james@xemacs.org>
parents: 5384
diff changeset
2279 Vbuilt_in_face_specifiers =
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
2280 listu (Qforeground, Qforeback, Qbackground,
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
2281 Qfont, Qdisplay_table, Qbackground_pixmap, Qbackground_placement,
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
2282 Qunderline, Qstrikethru, Qhighlight, Qdim,
5619
75ad4969a16d Replace the 'flush face property with the opposite 'shrink one.
Didier Verna <didier@xemacs.org>
parents: 5617
diff changeset
2283 Qblinking, Qreverse, Qshrink, Qunbound);
5386
af961911bcb2 Make listu() and listn() assemble lists in forward order. Use them.
Jerry James <james@xemacs.org>
parents: 5384
diff changeset
2284 staticpro (&Vbuilt_in_face_specifiers);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2285 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2286
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2287 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2288 complex_vars_of_faces (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2289 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2290 /* Create the default face now so we know what it is immediately. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2291
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2292 Vdefault_face = Qnil; /* so that Fmake_face() doesn't set up a bogus
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2293 default value */
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4862
diff changeset
2294 Vdefault_face = Fmake_face (Qdefault, build_defer_string ("default face"),
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2295 Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2296
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2297 /* Provide some last-resort fallbacks to avoid utter fuckage if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2298 someone provides invalid values for the global specifications. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2299
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2300 {
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
2301 Lisp_Object fg_fb = Qnil, bg_fb = Qnil, fb_fb = Qnil;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2302
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 446
diff changeset
2303 #ifdef HAVE_GTK
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
2304 fg_fb = Facons (list1 (Qgtk), build_ascstring ("black"), fg_fb);
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
2305 fb_fb = Facons (list1 (Qgtk), build_ascstring ("gray90"), fb_fb);
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
2306 bg_fb = Facons (list1 (Qgtk), build_ascstring ("white"), bg_fb);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 446
diff changeset
2307 #endif
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2308 #ifdef HAVE_X_WINDOWS
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
2309 fg_fb = Facons (list1 (Qx), build_ascstring ("black"), fg_fb);
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
2310 fb_fb = Facons (list1 (Qx), build_ascstring ("gray70"), fb_fb);
5354
22c4e67a2e69 Remove #'acons from cl.el, make the version in alloc.c visible to Lisp
Aidan Kehoe <kehoea@parhasard.net>
parents: 5222
diff changeset
2311 bg_fb = Facons (list1 (Qx), build_ascstring ("gray80"), bg_fb);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2312 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2313 #ifdef HAVE_TTY
5354
22c4e67a2e69 Remove #'acons from cl.el, make the version in alloc.c visible to Lisp
Aidan Kehoe <kehoea@parhasard.net>
parents: 5222
diff changeset
2314 fg_fb = Facons (list1 (Qtty), Fvector (0, 0), fg_fb);
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
2315 fb_fb = Facons (list1 (Qtty), Fvector (0, 0), fb_fb);
5354
22c4e67a2e69 Remove #'acons from cl.el, make the version in alloc.c visible to Lisp
Aidan Kehoe <kehoea@parhasard.net>
parents: 5222
diff changeset
2316 bg_fb = Facons (list1 (Qtty), Fvector (0, 0), bg_fb);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2317 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2318 #ifdef HAVE_MS_WINDOWS
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
2319 fg_fb = Facons (list1 (Qmsprinter), build_ascstring ("black"), fg_fb);
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
2320 fb_fb = Facons (list1 (Qmsprinter), build_ascstring ("gray90"), fb_fb);
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
2321 bg_fb = Facons (list1 (Qmsprinter), build_ascstring ("white"), bg_fb);
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
2322 fg_fb = Facons (list1 (Qmswindows), build_ascstring ("black"), fg_fb);
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
2323 fb_fb = Facons (list1 (Qmswindows), build_ascstring ("gray90"), fb_fb);
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
2324 bg_fb = Facons (list1 (Qmswindows), build_ascstring ("white"), bg_fb);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2325 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2326 set_specifier_fallback (Fget (Vdefault_face, Qforeground, Qnil), fg_fb);
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
2327 set_specifier_fallback (Fget (Vdefault_face, Qforeback, Qnil), fb_fb);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2328 set_specifier_fallback (Fget (Vdefault_face, Qbackground, Qnil), bg_fb);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2329 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2330
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2331 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2332 Lisp_Object inst_list = Qnil;
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 446
diff changeset
2333
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 826
diff changeset
2334 #if defined (HAVE_X_WINDOWS) || defined (HAVE_GTK)
2865
8baa2f03d853 [xemacs-hg @ 2005-07-19 09:45:00 by didierv]
didierv
parents: 2720
diff changeset
2335
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2336 #ifdef HAVE_GTK
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2337 Lisp_Object device_symbol = Qgtk;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2338 #else
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2339 Lisp_Object device_symbol = Qx;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2340 #endif
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2341
4916
a6c778975d7d split USE_XFT into HAVE_XFT/USE_XFT
Ben Wing <ben@xemacs.org>
parents: 4906
diff changeset
2342 #if defined (HAVE_XFT) || defined (MULE)
3802
d6f975442bd3 [xemacs-hg @ 2007-01-27 17:14:20 by michaels]
michaels
parents: 3747
diff changeset
2343 const Ascbyte **fontptr;
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2344
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2286
diff changeset
2345 const Ascbyte *fonts[] =
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2346 {
4916
a6c778975d7d split USE_XFT into HAVE_XFT/USE_XFT
Ben Wing <ben@xemacs.org>
parents: 4906
diff changeset
2347 #ifdef HAVE_XFT
3094
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
2348 /************** Xft fonts *************/
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
2349
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
2350 /* Note that fontconfig can search for several font families in one
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
2351 call. We should use this facility. */
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2352 "Monospace-12",
3094
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
2353 /* do we need to worry about non-Latin characters for monospace?
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2354 No, at least in Debian's implementation of Xft.
3094
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
2355 We should recommend that "gothic" and "mincho" aliases be created? */
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2356 "Sazanami Mincho-12",
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2357 /* Japanese #### add encoding info? */
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2358 /* Arphic for Chinese? */
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2359 /* Korean */
3094
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
2360 #else
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2361 /* The default Japanese fonts installed with XFree86 4.0 use this
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2362 point size, and the -misc-fixed fonts (which look really bad with
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2363 Han characters) don't. We need to prefer the former. */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2364 "-*-*-medium-r-*-*-*-150-*-*-c-*-*-*",
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2365 /* And the Chinese ones, maddeningly, use this one. (But on 4.0, while
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2366 XListFonts returns them, XLoadQueryFont on the fully-specified XLFD
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2367 corresponding to one of them fails!) */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2368 "-*-*-medium-r-*-*-*-160-*-*-c-*-*-*",
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2369 "-*-*-medium-r-*-*-*-170-*-*-c-*-*-*",
3094
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
2370 #endif
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2371 };
4916
a6c778975d7d split USE_XFT into HAVE_XFT/USE_XFT
Ben Wing <ben@xemacs.org>
parents: 4906
diff changeset
2372 #endif /* defined (HAVE_XFT) || defined (MULE) */
3802
d6f975442bd3 [xemacs-hg @ 2007-01-27 17:14:20 by michaels]
michaels
parents: 3747
diff changeset
2373
d6f975442bd3 [xemacs-hg @ 2007-01-27 17:14:20 by michaels]
michaels
parents: 3747
diff changeset
2374 #ifdef MULE
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2375
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2376 /* Define some specifier tags for classes of character sets. Combining
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2377 these allows for distinct fallback fonts for distinct dimensions of
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2378 character sets and stages. */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2379
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2380 define_specifier_tag(Qtwo_dimensional, Qnil,
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2381 intern ("specifier-tag-two-dimensional-p"));
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2382
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2383 define_specifier_tag(Qone_dimensional, Qnil,
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2384 intern ("specifier-tag-one-dimensional-p"));
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2385
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2386 define_specifier_tag(Qinitial, Qnil,
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2387 intern ("specifier-tag-initial-stage-p"));
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2388
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2389 define_specifier_tag(Qfinal, Qnil,
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2390 intern ("specifier-tag-final-stage-p"));
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2391
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2392 define_specifier_tag (Qencode_as_utf_8, Qnil,
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2393 intern("specifier-tag-encode-as-utf-8-p"));
3918
049dc907c17a [xemacs-hg @ 2007-04-22 19:58:27 by aidan]
aidan
parents: 3802
diff changeset
2394
049dc907c17a [xemacs-hg @ 2007-04-22 19:58:27 by aidan]
aidan
parents: 3802
diff changeset
2395 /* This tag is used to group those instantiators made available in the
049dc907c17a [xemacs-hg @ 2007-04-22 19:58:27 by aidan]
aidan
parents: 3802
diff changeset
2396 fallback for the sake of coverage of obscure characters, notably
049dc907c17a [xemacs-hg @ 2007-04-22 19:58:27 by aidan]
aidan
parents: 3802
diff changeset
2397 Markus Kuhn's misc-fixed fonts. They will be copied from the fallback
049dc907c17a [xemacs-hg @ 2007-04-22 19:58:27 by aidan]
aidan
parents: 3802
diff changeset
2398 when the default face is determined from X resources at startup. */
049dc907c17a [xemacs-hg @ 2007-04-22 19:58:27 by aidan]
aidan
parents: 3802
diff changeset
2399 define_specifier_tag (Qx_coverage_instantiator, Qnil, Qnil);
049dc907c17a [xemacs-hg @ 2007-04-22 19:58:27 by aidan]
aidan
parents: 3802
diff changeset
2400
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2401 #endif /* MULE */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2402
4916
a6c778975d7d split USE_XFT into HAVE_XFT/USE_XFT
Ben Wing <ben@xemacs.org>
parents: 4906
diff changeset
2403 #ifdef HAVE_XFT
3747
c13b89ba4796 [xemacs-hg @ 2006-12-17 11:25:58 by aidan]
aidan
parents: 3707
diff changeset
2404 for (fontptr = fonts + countof(fonts) - 1; fontptr >= fonts; fontptr--)
c13b89ba4796 [xemacs-hg @ 2006-12-17 11:25:58 by aidan]
aidan
parents: 3707
diff changeset
2405 inst_list = Fcons (Fcons (list1 (device_symbol),
4953
304aebb79cd3 function renamings to track names of char typedefs
Ben Wing <ben@xemacs.org>
parents: 4952
diff changeset
2406 build_cistring (*fontptr)),
3747
c13b89ba4796 [xemacs-hg @ 2006-12-17 11:25:58 by aidan]
aidan
parents: 3707
diff changeset
2407 inst_list);
c13b89ba4796 [xemacs-hg @ 2006-12-17 11:25:58 by aidan]
aidan
parents: 3707
diff changeset
2408
4916
a6c778975d7d split USE_XFT into HAVE_XFT/USE_XFT
Ben Wing <ben@xemacs.org>
parents: 4906
diff changeset
2409 #else /* !HAVE_XFT */
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2410 inst_list =
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2411 Fcons
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2412 (Fcons
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2413 (list1 (device_symbol),
4766
32b358a240b0 Avoid calling Xft if not built in.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4759
diff changeset
2414 /* grrr. This really does need to be "*", not an XLFD.
32b358a240b0 Avoid calling Xft if not built in.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4759
diff changeset
2415 An unspecified XLFD won't pick up stuff like 10x20. */
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4862
diff changeset
2416 build_ascstring ("*")),
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2417 inst_list);
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2418 #ifdef MULE
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2419
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2420 /* For Han characters and Ethiopic, we want the misc-fixed font used to
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2421 be distinct from that for alphabetic scripts, because the font
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2422 specified below is distractingly ugly when used for Han characters
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2423 (this is slightly less so) and because its coverage isn't up to
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2424 handling them (well, chiefly, it's not up to handling Ethiopic--we do
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2425 have charset-specific fallbacks for the East Asian charsets.) */
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2426 inst_list =
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2427 Fcons
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2428 (Fcons
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2429 (list4(device_symbol, Qtwo_dimensional, Qfinal, Qx_coverage_instantiator),
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4862
diff changeset
2430 build_ascstring
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2431 ("-misc-fixed-medium-r-normal--15-140-75-75-c-90-iso10646-1")),
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2432 inst_list);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2433
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2434 /* Use Markus Kuhn's version of misc-fixed as the font for the font for
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2435 when a given charset's registries can't be found and redisplay for
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2436 that charset falls back to iso10646-1. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2437
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2438 inst_list =
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2439 Fcons
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2440 (Fcons
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2441 (list4(device_symbol, Qone_dimensional, Qfinal, Qx_coverage_instantiator),
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4862
diff changeset
2442 build_ascstring
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2443 ("-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1")),
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2444 inst_list);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2445
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 446
diff changeset
2446 for (fontptr = fonts + countof(fonts) - 1; fontptr >= fonts; fontptr--)
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2447 inst_list = Fcons (Fcons (list3 (device_symbol,
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2448 Qtwo_dimensional, Qinitial),
4953
304aebb79cd3 function renamings to track names of char typedefs
Ben Wing <ben@xemacs.org>
parents: 4952
diff changeset
2449 build_cistring (*fontptr)),
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 446
diff changeset
2450 inst_list);
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2451
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2452 /* We need to set the font for the JIT-ucs-charsets separately from the
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2453 final stage, since otherwise it picks up the two-dimensional
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2454 specification (see specifier-tag-two-dimensional-initial-stage-p
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2455 above). They also use Markus Kuhn's ISO 10646-1 fixed fonts for
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2456 redisplay. */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2457
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2458 inst_list =
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2459 Fcons
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2460 (Fcons
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2461 (list4(device_symbol, Qencode_as_utf_8, Qinitial, Qx_coverage_instantiator),
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4862
diff changeset
2462 build_ascstring
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2463 ("-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1")),
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2464 inst_list);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2465
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2466 #endif /* MULE */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2467
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2468 /* Needed to make sure that charsets with non-specified fonts don't
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2469 use bold and oblique first if medium and regular are available. */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2470 inst_list =
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2471 Fcons
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2472 (Fcons
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2473 (list1 (device_symbol),
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4862
diff changeset
2474 build_ascstring ("-*-*-medium-r-*-*-*-120-*-*-c-*-*-*")),
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2475 inst_list);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2476
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2477 /* With a Cygwin XFree86 install, this returns the best (clearest,
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2478 most readable) font I can find when scaling of bitmap fonts is
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2479 turned on, as it is by default. (WHO IN THE NAME OF CHRIST THOUGHT
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2480 THAT WAS A GOOD IDEA?!?!) The other fonts that used to be specified
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2481 here gave horrendous results. */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2482
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2483 inst_list =
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2484 Fcons
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2485 (Fcons
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2486 (list1 (device_symbol),
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4862
diff changeset
2487 build_ascstring ("-*-lucidatypewriter-medium-r-*-*-*-120-*-*-*-*-*-*")),
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2488 inst_list);
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3094
diff changeset
2489
4916
a6c778975d7d split USE_XFT into HAVE_XFT/USE_XFT
Ben Wing <ben@xemacs.org>
parents: 4906
diff changeset
2490 #endif /* !HAVE_XFT */
3747
c13b89ba4796 [xemacs-hg @ 2006-12-17 11:25:58 by aidan]
aidan
parents: 3707
diff changeset
2491
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 446
diff changeset
2492 #endif /* HAVE_X_WINDOWS || HAVE_GTK */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 446
diff changeset
2493
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2494 #ifdef HAVE_TTY
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4862
diff changeset
2495 inst_list = Fcons (Fcons (list1 (Qtty), build_ascstring ("normal")),
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2496 inst_list);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2497 #endif /* HAVE_TTY */
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
2498
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2499 #ifdef HAVE_MS_WINDOWS
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2500 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2286
diff changeset
2501 const Ascbyte *mswfonts[] =
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2502 {
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2503 "Courier New:Regular:10::",
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2504 "Courier:Regular:10::",
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2505 ":Regular:10::"
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2506 };
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2286
diff changeset
2507 const Ascbyte **mswfontptr;
2865
8baa2f03d853 [xemacs-hg @ 2005-07-19 09:45:00 by didierv]
didierv
parents: 2720
diff changeset
2508
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2509 for (mswfontptr = mswfonts + countof (mswfonts) - 1;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2510 mswfontptr >= mswfonts; mswfontptr--)
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2511 {
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2512 /* display device */
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2513 inst_list = Fcons (Fcons (list1 (Qmswindows),
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4862
diff changeset
2514 build_ascstring (*mswfontptr)),
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2515 inst_list);
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2516 /* printer device */
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2517 inst_list = Fcons (Fcons (list1 (Qmsprinter),
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4862
diff changeset
2518 build_ascstring (*mswfontptr)),
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2519 inst_list);
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2520 }
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
2521 /* Use Lucida Console rather than Courier New if it exists -- the
4187
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2522 line spacing is much less, so many more lines fit with the same
26dccfc8fa60 [xemacs-hg @ 2007-09-26 13:27:59 by didierv]
didierv
parents: 3918
diff changeset
2523 size font. (And it's specifically designed for screens.) */
2865
8baa2f03d853 [xemacs-hg @ 2005-07-19 09:45:00 by didierv]
didierv
parents: 2720
diff changeset
2524 inst_list = Fcons (Fcons (list1 (Qmswindows),
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4862
diff changeset
2525 build_ascstring ("Lucida Console:Regular:10::")),
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
2526 inst_list);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2527 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2528 #endif /* HAVE_MS_WINDOWS */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
2529
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2530 set_specifier_fallback (Fget (Vdefault_face, Qfont, Qnil), inst_list);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2531 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2532
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2533 set_specifier_fallback (Fget (Vdefault_face, Qunderline, Qnil),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2534 list1 (Fcons (Qnil, Qnil)));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2535 set_specifier_fallback (Fget (Vdefault_face, Qstrikethru, Qnil),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2536 list1 (Fcons (Qnil, Qnil)));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2537 set_specifier_fallback (Fget (Vdefault_face, Qhighlight, Qnil),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2538 list1 (Fcons (Qnil, Qnil)));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2539 set_specifier_fallback (Fget (Vdefault_face, Qdim, Qnil),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2540 list1 (Fcons (Qnil, Qnil)));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2541 set_specifier_fallback (Fget (Vdefault_face, Qblinking, Qnil),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2542 list1 (Fcons (Qnil, Qnil)));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2543 set_specifier_fallback (Fget (Vdefault_face, Qreverse, Qnil),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2544 list1 (Fcons (Qnil, Qnil)));
5619
75ad4969a16d Replace the 'flush face property with the opposite 'shrink one.
Didier Verna <didier@xemacs.org>
parents: 5617
diff changeset
2545 set_specifier_fallback (Fget (Vdefault_face, Qshrink, Qnil),
5617
b0d712bbc2a6 The "flush" face property.
Didier Verna <didier@xemacs.org>
parents: 5475
diff changeset
2546 list1 (Fcons (Qnil, Qnil)));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2547
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2548 /* gui-element is the parent face of all gui elements such as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2549 modeline, vertical divider and toolbar. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2550 Vgui_element_face = Fmake_face (Qgui_element,
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4862
diff changeset
2551 build_defer_string ("gui element face"),
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2552 Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2553
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2554 /* Provide some last-resort fallbacks for gui-element face which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2555 mustn't default to default. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2556 {
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
2557 Lisp_Object fg_fb = Qnil, bg_fb = Qnil, fb_fb = Qnil;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2558
3094
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
2559 /* #### gui-element face doesn't have a font property?
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
2560 But it gets referred to later! */
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 446
diff changeset
2561 #ifdef HAVE_GTK
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 446
diff changeset
2562 /* We need to put something in there, or error checking gets
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 446
diff changeset
2563 #%!@#ed up before the styles are set, which override the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 446
diff changeset
2564 fallbacks. */
5354
22c4e67a2e69 Remove #'acons from cl.el, make the version in alloc.c visible to Lisp
Aidan Kehoe <kehoea@parhasard.net>
parents: 5222
diff changeset
2565 fg_fb = Facons (list1 (Qgtk), build_ascstring ("black"), fg_fb);
5636
07256dcc0c8b Add missing foreback specifier values to the GUI Element face.
Didier Verna <didier@lrde.epita.fr>
parents: 5625
diff changeset
2566 fb_fb = Facons (list1 (Qgtk), build_ascstring ("Gray70"), fb_fb);
5354
22c4e67a2e69 Remove #'acons from cl.el, make the version in alloc.c visible to Lisp
Aidan Kehoe <kehoea@parhasard.net>
parents: 5222
diff changeset
2567 bg_fb = Facons (list1 (Qgtk), build_ascstring ("Gray80"), bg_fb);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 446
diff changeset
2568 #endif
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2569 #ifdef HAVE_X_WINDOWS
5354
22c4e67a2e69 Remove #'acons from cl.el, make the version in alloc.c visible to Lisp
Aidan Kehoe <kehoea@parhasard.net>
parents: 5222
diff changeset
2570 fg_fb = Facons (list1 (Qx), build_ascstring ("black"), fg_fb);
5636
07256dcc0c8b Add missing foreback specifier values to the GUI Element face.
Didier Verna <didier@lrde.epita.fr>
parents: 5625
diff changeset
2571 fb_fb = Facons (list1 (Qx), build_ascstring ("Gray70"), fb_fb);
5354
22c4e67a2e69 Remove #'acons from cl.el, make the version in alloc.c visible to Lisp
Aidan Kehoe <kehoea@parhasard.net>
parents: 5222
diff changeset
2572 bg_fb = Facons (list1 (Qx), build_ascstring ("Gray80"), bg_fb);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2573 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2574 #ifdef HAVE_TTY
5354
22c4e67a2e69 Remove #'acons from cl.el, make the version in alloc.c visible to Lisp
Aidan Kehoe <kehoea@parhasard.net>
parents: 5222
diff changeset
2575 fg_fb = Facons (list1 (Qtty), Fvector (0, 0), fg_fb);
5636
07256dcc0c8b Add missing foreback specifier values to the GUI Element face.
Didier Verna <didier@lrde.epita.fr>
parents: 5625
diff changeset
2576 fb_fb = Facons (list1 (Qtty), Fvector (0, 0), fb_fb);
5354
22c4e67a2e69 Remove #'acons from cl.el, make the version in alloc.c visible to Lisp
Aidan Kehoe <kehoea@parhasard.net>
parents: 5222
diff changeset
2577 bg_fb = Facons (list1 (Qtty), Fvector (0, 0), bg_fb);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2578 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2579 #ifdef HAVE_MS_WINDOWS
5354
22c4e67a2e69 Remove #'acons from cl.el, make the version in alloc.c visible to Lisp
Aidan Kehoe <kehoea@parhasard.net>
parents: 5222
diff changeset
2580 fg_fb = Facons (list1 (Qmsprinter), build_ascstring ("black"), fg_fb);
5636
07256dcc0c8b Add missing foreback specifier values to the GUI Element face.
Didier Verna <didier@lrde.epita.fr>
parents: 5625
diff changeset
2581 fb_fb = Facons (list1 (Qmsprinter), build_ascstring ("Gray90"), fb_fb);
5354
22c4e67a2e69 Remove #'acons from cl.el, make the version in alloc.c visible to Lisp
Aidan Kehoe <kehoea@parhasard.net>
parents: 5222
diff changeset
2582 bg_fb = Facons (list1 (Qmsprinter), build_ascstring ("white"), bg_fb);
22c4e67a2e69 Remove #'acons from cl.el, make the version in alloc.c visible to Lisp
Aidan Kehoe <kehoea@parhasard.net>
parents: 5222
diff changeset
2583 fg_fb = Facons (list1 (Qmswindows), build_ascstring ("black"), fg_fb);
5636
07256dcc0c8b Add missing foreback specifier values to the GUI Element face.
Didier Verna <didier@lrde.epita.fr>
parents: 5625
diff changeset
2584 fb_fb = Facons (list1 (Qmswindows), build_ascstring ("Gray65"), fb_fb);
5354
22c4e67a2e69 Remove #'acons from cl.el, make the version in alloc.c visible to Lisp
Aidan Kehoe <kehoea@parhasard.net>
parents: 5222
diff changeset
2585 bg_fb = Facons (list1 (Qmswindows), build_ascstring ("Gray75"), bg_fb);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2586 #endif
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
2587 set_specifier_fallback (Fget (Vgui_element_face, Qforeground, Qnil),
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
2588 fg_fb);
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
2589 set_specifier_fallback (Fget (Vgui_element_face, Qforeback, Qnil),
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
2590 fb_fb);
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
2591 set_specifier_fallback (Fget (Vgui_element_face, Qbackground, Qnil),
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
2592 bg_fb);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2593 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2594
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2595 /* Now create the other faces that redisplay needs to refer to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2596 directly. We could create them in Lisp but it's simpler this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2597 way since we need to get them anyway. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2598
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2599 /* modeline is gui element. */
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4862
diff changeset
2600 Vmodeline_face = Fmake_face (Qmodeline, build_defer_string ("modeline face"),
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2601 Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2602
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2603 set_specifier_fallback (Fget (Vmodeline_face, Qforeground, Qunbound),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2604 Fget (Vgui_element_face, Qforeground, Qunbound));
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
2605 set_specifier_fallback (Fget (Vmodeline_face, Qforeback, Qunbound),
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
2606 Fget (Vgui_element_face, Qforeback, Qunbound));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2607 set_specifier_fallback (Fget (Vmodeline_face, Qbackground, Qunbound),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2608 Fget (Vgui_element_face, Qbackground, Qunbound));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2609 set_specifier_fallback (Fget (Vmodeline_face, Qbackground_pixmap, Qnil),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2610 Fget (Vgui_element_face, Qbackground_pixmap,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2611 Qunbound));
5080
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
2612 set_specifier_fallback (Fget (Vmodeline_face, Qbackground_placement, Qnil),
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
2613 Fget (Vgui_element_face, Qbackground_placement,
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
2614 Qunbound));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2615
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2616 /* toolbar is another gui element */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2617 Vtoolbar_face = Fmake_face (Qtoolbar,
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4862
diff changeset
2618 build_defer_string ("toolbar face"),
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2619 Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2620 set_specifier_fallback (Fget (Vtoolbar_face, Qforeground, Qunbound),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2621 Fget (Vgui_element_face, Qforeground, Qunbound));
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
2622 set_specifier_fallback (Fget (Vtoolbar_face, Qforeback, Qunbound),
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
2623 Fget (Vgui_element_face, Qforeback, Qunbound));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2624 set_specifier_fallback (Fget (Vtoolbar_face, Qbackground, Qunbound),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2625 Fget (Vgui_element_face, Qbackground, Qunbound));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2626 set_specifier_fallback (Fget (Vtoolbar_face, Qbackground_pixmap, Qnil),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2627 Fget (Vgui_element_face, Qbackground_pixmap,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2628 Qunbound));
5080
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
2629 set_specifier_fallback (Fget (Vtoolbar_face, Qbackground_placement, Qnil),
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
2630 Fget (Vgui_element_face, Qbackground_placement,
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
2631 Qunbound));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2632
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2633 /* vertical divider is another gui element */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2634 Vvertical_divider_face = Fmake_face (Qvertical_divider,
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4862
diff changeset
2635 build_defer_string ("vertical divider face"),
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2636 Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2637
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2638 set_specifier_fallback (Fget (Vvertical_divider_face, Qforeground, Qunbound),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2639 Fget (Vgui_element_face, Qforeground, Qunbound));
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
2640 set_specifier_fallback (Fget (Vvertical_divider_face, Qforeback, Qunbound),
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
2641 Fget (Vgui_element_face, Qforeback, Qunbound));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2642 set_specifier_fallback (Fget (Vvertical_divider_face, Qbackground, Qunbound),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2643 Fget (Vgui_element_face, Qbackground, Qunbound));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2644 set_specifier_fallback (Fget (Vvertical_divider_face, Qbackground_pixmap,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2645 Qunbound),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2646 Fget (Vgui_element_face, Qbackground_pixmap,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2647 Qunbound));
5080
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
2648 set_specifier_fallback (Fget (Vvertical_divider_face, Qbackground_placement,
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
2649 Qnil),
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
2650 Fget (Vgui_element_face, Qbackground_placement,
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
2651 Qunbound));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2652
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2653 /* widget is another gui element */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2654 Vwidget_face = Fmake_face (Qwidget,
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4862
diff changeset
2655 build_defer_string ("widget face"),
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2656 Qnil);
3094
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3017
diff changeset
2657 /* #### weird ... the gui-element face doesn't have its own font yet */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2658 set_specifier_fallback (Fget (Vwidget_face, Qfont, Qunbound),
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2659 Fget (Vgui_element_face, Qfont, Qunbound));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2660 set_specifier_fallback (Fget (Vwidget_face, Qforeground, Qunbound),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2661 Fget (Vgui_element_face, Qforeground, Qunbound));
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
2662 set_specifier_fallback (Fget (Vwidget_face, Qforeback, Qunbound),
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
2663 Fget (Vgui_element_face, Qforeback, Qunbound));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2664 set_specifier_fallback (Fget (Vwidget_face, Qbackground, Qunbound),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2665 Fget (Vgui_element_face, Qbackground, Qunbound));
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2666 /* We don't want widgets to have a default background pixmap. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2667
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2668 Vleft_margin_face = Fmake_face (Qleft_margin,
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4862
diff changeset
2669 build_defer_string ("left margin face"),
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2670 Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2671 Vright_margin_face = Fmake_face (Qright_margin,
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4862
diff changeset
2672 build_defer_string ("right margin face"),
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2673 Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2674 Vtext_cursor_face = Fmake_face (Qtext_cursor,
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4862
diff changeset
2675 build_defer_string ("face for text cursor"),
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2676 Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2677 Vpointer_face =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2678 Fmake_face (Qpointer,
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4862
diff changeset
2679 build_defer_string
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2680 ("face for foreground/background colors of mouse pointer"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2681 Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2682 }