annotate src/faces.h @ 771:943eaba38521

[xemacs-hg @ 2002-03-13 08:51:24 by ben] The big ben-mule-21-5 check-in! Various files were added and deleted. See CHANGES-ben-mule. There are still some test suite failures. No crashes, though. Many of the failures have to do with problems in the test suite itself rather than in the actual code. I'll be addressing these in the next day or so -- none of the test suite failures are at all critical. Meanwhile I'll be trying to address the biggest issues -- i.e. build or run failures, which will almost certainly happen on various platforms. All comments should be sent to ben@xemacs.org -- use a Cc: if necessary when sending to mailing lists. There will be pre- and post- tags, something like pre-ben-mule-21-5-merge-in, and post-ben-mule-21-5-merge-in.
author ben
date Wed, 13 Mar 2002 08:54:06 +0000
parents af57a77cbc92
children e38acbeb1cae
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 data structures.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2 Copyright (C) 1995 Board of Trustees, University of Illinois.
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 617
diff changeset
3 Copyright (C) 1995, 2002 Ben Wing
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5 This file is part of XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7 XEmacs is free software; you can redistribute it and/or modify it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9 Free Software Foundation; either version 2, or (at your option) any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10 later version.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12 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
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15 for more details.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18 along with XEmacs; see the file COPYING. If not, write to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20 Boston, MA 02111-1307, USA. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22 /* Synched up with: Not in FSF. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
23
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
24 #ifndef INCLUDED_faces_h_
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
25 #define INCLUDED_faces_h_
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 617
diff changeset
27 #include "charset.h" /* for NUM_LEADING_BYTES */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
29 /* a Lisp_Face is the C object corresponding to a face. There is one
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
30 of these per face. It basically contains all of the specifiers for
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
31 the built-in face properties, plus the plist of user-specified
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32 properties. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34 struct Lisp_Face
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
36 struct lcrecord_header header;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38 Lisp_Object name;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39 Lisp_Object doc_string;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40 unsigned int dirty :1; /* Set whenever a face property is changed on
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41 a face. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43 Lisp_Object foreground;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44 Lisp_Object background;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45 Lisp_Object font;
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 display_table;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48 Lisp_Object background_pixmap;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50 Lisp_Object underline;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51 Lisp_Object strikethru;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52 Lisp_Object highlight;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53 Lisp_Object dim;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 Lisp_Object blinking;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55 Lisp_Object reverse;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 Lisp_Object plist;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59 Lisp_Object charsets_warned_about;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
62 /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64 A face cache element caches the results of instantiating the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65 properties of a face in a particular window. (Instantiation can
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66 take a long time so this is very important.) Each window contains
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67 an array of face cache elements (called the "face cache"), one for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68 each face that has been seen in the window so far.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70 Some tricky stuff is done to make sure the face cache does not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71 become inconsistent:
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 1) Switching buffers in a window clears the face cache for that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74 window, because this can change the way any property is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75 instantiated in the window.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76 2) Setting a face property causes that face to be marked as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77 dirty. This causes various stuff to happen to make sure
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78 the appropriate face cache elements are invalidated.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79 (#### Actually this doesn't work quite right, and errs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
80 too much on the side of invalidating unnecessary stuff.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
82 There are also face cache elements for "merged faces", which are the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83 result of merging all the faces that overlap a particular buffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84 position. The merging is always done in the context of a particular
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
85 domain (specifically, a window), and the face cache element is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
86 specific to a particular window. (Face cache elements are contained
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
87 in an array that is attached to each struct_window.) The reason that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88 the merging takes place in the context of a particular window has
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89 to do with the way the merging works:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
91 1) All extents overlying the buffer position are sorted by descending
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92 priority.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
93 2) The property of a particular merged face comes from the highest-
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94 priority face that specifies a value for that particular property.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
95 3) The way to determine whether a face specifies a value for a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96 particular property is to instantiate that face's property in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97 the window in question with the no-fallback option set, to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98 see if we got anything.
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 For Mule, things get a bit trickier because there can be multiple
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101 fonts per face/window combination -- the charset is an argument
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
102 to specifier-instance.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
103
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104 We have two possible data structure representations:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
105
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
106 1) Keep the original "one font per face cache element" representation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107 and use a different face cache element for each charset.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
108 2) Allow multiple fonts to be in a single face cache element.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
110 I've chosen to use (2) -- the data structure gets more complicated
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111 but the algorithms for maintaining face cache elements end up
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112 simpler.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
113 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
114
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
115 #define NUM_STATIC_CACHEL_FACES 4
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
116
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
117 typedef struct face_cachel face_cachel;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
118 struct face_cachel
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
119 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
120 /* There are two kinds of cachels; those created from a single face
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
121 and those created by merging more than one face. In the former
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
122 case, the FACE element specifies the face used. In the latter
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
123 case, the MERGED_FACES_STATIC and MERGED_FACES elements specify
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
124 the faces used for merging by giving the indices of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
125 corresponding single-face cachels.
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 Formerly we didn't bother to keep track of the faces used for
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
128 merging. We do now because we need to do so because there is no
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
129 other way to properly handle multiple charsets for Mule in the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
130 presence of display tables short of always computing the values
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
131 for all charsets, which is very expensive. Instead, we use a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
132 lazy scheme where we only compute the font for a particular charset
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
133 when it is needed. (The exception is the font for the ASCII charset.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
134 We always compute it, just like the other attributes, because
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
135 many places in the C code refer to the font of the ASCII charset
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
136 and expect it to always be there.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
137
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
138 We store the first four faces in a static array, and use a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
139 Dynarr for the rest. This has the advantage that the space used
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
140 is small but the Dynarr will almost never be created, so we
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
141 won't spend much time in malloc()/free().
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
142
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
143 The order of the faces here is decreasing extent priority. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
144 Lisp_Object face;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
145 int merged_faces_static[NUM_STATIC_CACHEL_FACES];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
146 int_dynarr *merged_faces;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
147 int nfaces;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
148
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
149 /* The values stored here are computed by calling specifier_instance()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
150 on the appropriate specifiers. This means that we will have either
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
151 a value computed from the face itself or a value computed from the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
152 default face. We need to distinguish the two so that merging works
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
153 properly -- a value that comes from the default face is treated
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
154 as "unspecified" during merging and is overridden by lower-priority
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
155 faces. This is what the _specified flags below are for. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
156
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157 Lisp_Object foreground;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
158 Lisp_Object background;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 617
diff changeset
159 /* There are currently 128 or 129 possible charsets under Mule. For the
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160 moment we just take the easy way out and allocate space for each
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
161 of them. This avoids messing with Dynarrs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
163 #### We should look into this and probably clean it up
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
164 to use Dynarrs. This may be a big space hog as is. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165 Lisp_Object font[NUM_LEADING_BYTES];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
166
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
167 Lisp_Object display_table;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
168 Lisp_Object background_pixmap;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
169
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
170 unsigned int underline :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171 unsigned int strikethru :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
172 unsigned int highlight :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
173 unsigned int dim :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174 unsigned int blinking :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
175 unsigned int reverse :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
176
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
177 /* Used when merging to tell if the above field represents an actual
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
178 value of this face or a fallback value. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179 /* #### Of course we should use a bit array or something. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180 unsigned char font_specified[NUM_LEADING_BYTES];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181 unsigned int foreground_specified :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
182 unsigned int background_specified :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
183 unsigned int display_table_specified :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184 unsigned int background_pixmap_specified :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
185
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
186 unsigned int strikethru_specified :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
187 unsigned int underline_specified :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188 unsigned int highlight_specified :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189 unsigned int dim_specified :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 unsigned int blinking_specified :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
191 unsigned int reverse_specified :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
192
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193 /* The updated flag is set after we calculate the values for the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194 face cachel and cleared whenever a face changes, to indicate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195 that the values stored here might be wrong. The next time
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196 we go to access the values, we recompute them; if any values
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197 change, we set the DIRTY flag, which tells the output routines
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
198 that a face value has in fact changed and the sections of text
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
199 using this face need to be redrawn.
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 It is trickier with fonts because we don't automatically
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
202 recompute the fonts but do it only when it is necessary.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
203 (The ASCII font is an exception, of course; see above).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
204
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
205 In the case of fonts, we maintain a separate updated flag
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
206 for each font. Whenever we need to access the font for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
207 a particular charset, we recalculate it if either its
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208 value is Qunbound (meaning it's never been computed at all)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
209 or the updated flag is not set. We set the dirty flag if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
210 the value is not the same as before and the previous value
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
211 was not Qunbound.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
212
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
213 #### Note that we don't yet deal with the case of the new
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
214 value being Qunbound, as could happen if no fonts of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
215 right sort are available on the system. In this case, the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
216 whole program will just crash. For the moment, this is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
217 OK (for debugging purposes) but we should fix this by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
218 storing a "blank font" if the instantiation fails. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219 unsigned int dirty :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220 unsigned int updated :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
221 /* #### Of course we should use a bit array or something. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
222 unsigned char font_updated[NUM_LEADING_BYTES];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
223 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
225 DECLARE_LRECORD (face, Lisp_Face);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
226 #define XFACE(x) XRECORD (x, face, Lisp_Face)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
227 #define XSETFACE(x, p) XSETRECORD (x, p, face)
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 578
diff changeset
228 #define wrap_face(p) wrap_record (p, face)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229 #define FACEP(x) RECORDP (x, face)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
230 #define CHECK_FACE(x) CHECK_RECORD (x, face)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
231
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
232 Lisp_Object ensure_face_cachel_contains_charset (struct face_cachel *cachel,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
233 Lisp_Object domain,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
234 Lisp_Object charset);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
235 void ensure_face_cachel_complete (struct face_cachel *cachel,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
236 Lisp_Object domain,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
237 unsigned char *charsets);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
238 void update_face_cachel_data (struct face_cachel *cachel,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
239 Lisp_Object domain,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
240 Lisp_Object face);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
241 void face_cachel_charset_font_metric_info (struct face_cachel *cachel,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
242 unsigned char *charsets,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
243 struct font_metric_info *fm);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
244 void mark_face_cachels (face_cachel_dynarr *elements);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
245 void mark_face_cachels_as_clean (struct window *w);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
246 void mark_face_cachels_as_not_updated (struct window *w);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
247 void reset_face_cachel (struct face_cachel *inst);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
248 void reset_face_cachels (struct window *w);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
249 face_index get_builtin_face_cache_index (struct window *w,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
250 Lisp_Object face);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
251 #ifdef MEMORY_USAGE_STATS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
252 int compute_face_cachel_usage (face_cachel_dynarr *face_cachels,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
253 struct overhead_stats *ovstats);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
254 #endif /* MEMORY_USAGE_STATS */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
255
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
256 EXFUN (Fface_name, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
257 EXFUN (Ffind_face, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
258 EXFUN (Fget_face, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
259
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
260 extern Lisp_Object Qstrikethru, Vbuilt_in_face_specifiers, Vdefault_face;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
261 extern Lisp_Object Vleft_margin_face, Vpointer_face, Vright_margin_face;
432
3a7e78e1142d Import from CVS: tag r21-2-24
cvs
parents: 428
diff changeset
262 extern Lisp_Object Vtext_cursor_face, Vvertical_divider_face;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
263 extern Lisp_Object Vtoolbar_face, Vgui_element_face, Vwidget_face;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
264
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
265 void mark_all_faces_as_clean (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
266 void init_frame_faces (struct frame *f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
267 void init_device_faces (struct device *d);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
268 void init_global_faces (struct device *d);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
269 face_index get_extent_fragment_face_cache_index (struct window *w,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
270 struct extent_fragment *ef);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
271 void update_frame_face_values (struct frame *f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
272 void face_property_was_changed (Lisp_Object face, Lisp_Object property,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
273 Lisp_Object locale);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
274 void default_face_font_info (Lisp_Object domain, int *ascent,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
275 int *descent, int *height, int *width,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
276 int *proportional_p);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
277 void default_face_height_and_width (Lisp_Object domain,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
278 int *height, int *width);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
279 void default_face_height_and_width_1 (Lisp_Object domain,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
280 int *height, int *width);
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 #define FACE_CACHEL_FONT(cachel, charset) \
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 617
diff changeset
283 (cachel->font[XCHARSET_LEADING_BYTE (charset) - MIN_LEADING_BYTE])
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
284
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
285 #define WINDOW_FACE_CACHEL(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
286 Dynarr_atp ((window)->face_cachels, index)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
287
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
288 #define FACE_CACHEL_FINDEX_UNSAFE(cachel, offset) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
289 ((offset) < NUM_STATIC_CACHEL_FACES \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
290 ? (cachel)->merged_faces_static[offset] \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
291 : Dynarr_at ((cachel)->merged_faces, (offset) - NUM_STATIC_CACHEL_FACES))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
292
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
293 #define WINDOW_FACE_CACHEL_FACE(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
294 (WINDOW_FACE_CACHEL (window, index)->face)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
295 #define WINDOW_FACE_CACHEL_FOREGROUND(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
296 (WINDOW_FACE_CACHEL (window, index)->foreground)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
297 #define WINDOW_FACE_CACHEL_BACKGROUND(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
298 (WINDOW_FACE_CACHEL (window, index)->background)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
299 /* #### This can be referenced by various functions,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
300 but face_cachels isn't initialized for the stream device.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
301 Since it doesn't need the value we just return nil here to avoid
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
302 blowing up in multiple places. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
303 #define WINDOW_FACE_CACHEL_FONT(window, index, charset) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
304 ((window)->face_cachels \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
305 ? FACE_CACHEL_FONT (WINDOW_FACE_CACHEL (window, index), charset) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
306 : Qnil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
307 #define WINDOW_FACE_CACHEL_DISPLAY_TABLE(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
308 (WINDOW_FACE_CACHEL (window, index)->display_table)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
309 #define WINDOW_FACE_CACHEL_BACKGROUND_PIXMAP(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
310 (WINDOW_FACE_CACHEL (window, index)->background_pixmap)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
311 #define WINDOW_FACE_CACHEL_DIRTY(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
312 (WINDOW_FACE_CACHEL (window, index)->dirty)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
313 #define WINDOW_FACE_CACHEL_UNDERLINE_P(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
314 (WINDOW_FACE_CACHEL (window, index)->underline)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
315 #define WINDOW_FACE_CACHEL_HIGHLIGHT_P(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
316 (WINDOW_FACE_CACHEL (window, index)->highlight)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
317 #define WINDOW_FACE_CACHEL_DIM_P(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
318 (WINDOW_FACE_CACHEL (window, index)->dim)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
319 #define WINDOW_FACE_CACHEL_BLINKING_P(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
320 (WINDOW_FACE_CACHEL (window, index)->blinking)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
321 #define WINDOW_FACE_CACHEL_REVERSE_P(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
322 (WINDOW_FACE_CACHEL (window, index)->reverse)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
323
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
324 #define FACE_PROPERTY_SPECIFIER(face, property) Fget (face, property, Qnil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
325
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
326 #define FACE_PROPERTY_INSTANCE_1(face, property, domain, errb, no_fallback, depth) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
327 specifier_instance (FACE_PROPERTY_SPECIFIER (face, property), Qunbound, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
328 domain, errb, 1, no_fallback, depth)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
329
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
330 #define FACE_PROPERTY_INSTANCE(face, property, domain, no_fallback, depth) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
331 FACE_PROPERTY_INSTANCE_1 (face, property, domain, ERROR_ME_NOT, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
332 no_fallback, depth)
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 Lisp_Object face_property_matching_instance (Lisp_Object face,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
335 Lisp_Object property,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
336 Lisp_Object charset,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
337 Lisp_Object domain,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 498
diff changeset
338 Error_Behavior errb,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
339 int no_fallback,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
340 Lisp_Object depth);
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 #define FACE_PROPERTY_SPEC_LIST(face, property, locale) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
343 Fspecifier_spec_list (FACE_PROPERTY_SPECIFIER (face, property), \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
344 locale, Qnil, Qnil)
498
88e7e9bafe19 [xemacs-hg @ 2001-05-02 16:08:10 by james]
james
parents: 442
diff changeset
345 #define SET_FACE_PROPERTY(face, property, value, locale, tag, how_to_add) \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
346 Fadd_spec_to_specifier (FACE_PROPERTY_SPECIFIER (face, property), \
498
88e7e9bafe19 [xemacs-hg @ 2001-05-02 16:08:10 by james]
james
parents: 442
diff changeset
347 value, locale, tag, how_to_add)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
348
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
349 #define FACE_FOREGROUND(face, domain) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
350 FACE_PROPERTY_INSTANCE (face, Qforeground, domain, 0, Qzero)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
351 #define FACE_BACKGROUND(face, domain) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
352 FACE_PROPERTY_INSTANCE (face, Qbackground, domain, 0, Qzero)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
353 #define FACE_FONT(face, domain, charset) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
354 face_property_matching_instance (face, Qfont, charset, domain, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
355 ERROR_ME_NOT, 0, Qzero)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
356 #define FACE_DISPLAY_TABLE(face, domain) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
357 FACE_PROPERTY_INSTANCE (face, Qdisplay_table, domain, 0, Qzero)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
358 #define FACE_BACKGROUND_PIXMAP(face, domain) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
359 FACE_PROPERTY_INSTANCE (face, Qbackground_pixmap, domain, 0, Qzero)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
360 #define FACE_UNDERLINE_P(face, domain) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
361 (!NILP (FACE_PROPERTY_INSTANCE (face, Qunderline, domain, 0, Qzero)))
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
362 #define FACE_STRIKETHRU_P(face, domain) \
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
363 (!NILP (FACE_PROPERTY_INSTANCE (face, Qstrikethru, domain, 0, Qzero)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
364 #define FACE_HIGHLIGHT_P(face, domain) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
365 (!NILP (FACE_PROPERTY_INSTANCE (face, Qhighlight, domain, 0, Qzero)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
366 #define FACE_DIM_P(face, domain) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
367 (!NILP (FACE_PROPERTY_INSTANCE (face, Qdim, domain, 0, Qzero)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
368 #define FACE_BLINKING_P(face, domain) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
369 (!NILP (FACE_PROPERTY_INSTANCE (face, Qblinking, domain, 0, Qzero)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
370 #define FACE_REVERSE_P(face, domain) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
371 (!NILP (FACE_PROPERTY_INSTANCE (face, Qreverse, domain, 0, Qzero)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
372
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
373 #endif /* INCLUDED_faces_h_ */