annotate src/faces.h @ 5697:40fbceabaafd

menubar-items.el (default-menubar): Reorganize. Add PROBLEMS to toplevel. New "More about XEmacs" submenu for NEWS, licensing, etc. New "Recent History" menu for messages, lossage, etc. Get rid of ugly and unexpressive ellipses.
author Stephen J. Turnbull <stephen@xemacs.org>
date Mon, 24 Dec 2012 03:08:33 +0900
parents c39052c921b5
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 data structures.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2 Copyright (C) 1995 Board of Trustees, University of Illinois.
5043
d0c14ea98592 various frame-geometry fixes
Ben Wing <ben@xemacs.org>
parents: 5015
diff changeset
3 Copyright (C) 1995, 2002, 2010 Ben Wing
5080
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
4 Copyright (C) 2010 Didier Verna
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6 This file is part of XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 5157
diff changeset
8 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
9 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: 5157
diff changeset
10 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: 5157
diff changeset
11 option) any later version.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13 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
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16 for more details.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18 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: 5157
diff changeset
19 along with XEmacs. If not, see <http://www.gnu.org/licenses/>. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21 /* Synched up with: Not in FSF. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
23 #ifndef INCLUDED_faces_h_
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
24 #define INCLUDED_faces_h_
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
25
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 617
diff changeset
26 #include "charset.h" /* for NUM_LEADING_BYTES */
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
27 #include "specifier.h"
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 {
5127
a9c41067dd88 more cleanups, terminology clarification, lots of doc work
Ben Wing <ben@xemacs.org>
parents: 5126
diff changeset
36 NORMAL_LISP_OBJECT_HEADER header;
428
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;
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
44 Lisp_Object foreback;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45 Lisp_Object background;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46 Lisp_Object font;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48 Lisp_Object display_table;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49 Lisp_Object background_pixmap;
5080
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
50 Lisp_Object background_placement;
428
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 Lisp_Object underline;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53 Lisp_Object strikethru;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 Lisp_Object highlight;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55 Lisp_Object dim;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 Lisp_Object blinking;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 Lisp_Object reverse;
5619
75ad4969a16d Replace the 'flush face property with the opposite 'shrink one.
Didier Verna <didier@xemacs.org>
parents: 5617
diff changeset
58 Lisp_Object shrink;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60 Lisp_Object plist;
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 Lisp_Object charsets_warned_about;
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65 /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67 A face cache element caches the results of instantiating the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68 properties of a face in a particular window. (Instantiation can
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69 take a long time so this is very important.) Each window contains
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70 an array of face cache elements (called the "face cache"), one for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71 each face that has been seen in the window so far.
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 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
74 become inconsistent:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76 1) Switching buffers in a window clears the face cache for that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77 window, because this can change the way any property is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78 instantiated in the window.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79 2) Setting a face property causes that face to be marked as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
80 dirty. This causes various stuff to happen to make sure
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81 the appropriate face cache elements are invalidated.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
82 (#### Actually this doesn't work quite right, and errs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83 too much on the side of invalidating unnecessary stuff.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
85 There are also face cache elements for "merged faces", which are the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
86 result of merging all the faces that overlap a particular buffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
87 position. The merging is always done in the context of a particular
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88 domain (specifically, a window), and the face cache element is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89 specific to a particular window. (Face cache elements are contained
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90 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
91 the merging takes place in the context of a particular window has
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92 to do with the way the merging works:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
93
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94 1) All extents overlying the buffer position are sorted by descending
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
95 priority.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96 2) The property of a particular merged face comes from the highest-
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97 priority face that specifies a value for that particular property.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98 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
99 particular property is to instantiate that face's property in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100 the window in question with the no-fallback option set, to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101 see if we got anything.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
102
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
103 For Mule, things get a bit trickier because there can be multiple
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104 fonts per face/window combination -- the charset is an argument
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
105 to specifier-instance.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
106
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107 We have two possible data structure representations:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
108
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109 1) Keep the original "one font per face cache element" representation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
110 and use a different face cache element for each charset.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111 2) Allow multiple fonts to be in a single face cache element.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
113 I've chosen to use (2) -- the data structure gets more complicated
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
114 but the algorithms for maintaining face cache elements end up
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
115 simpler.
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
118 #define NUM_STATIC_CACHEL_FACES 4
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 typedef struct face_cachel face_cachel;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
121 struct face_cachel
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
122 {
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3017
diff changeset
123 #ifdef NEW_GC
5127
a9c41067dd88 more cleanups, terminology clarification, lots of doc work
Ben Wing <ben@xemacs.org>
parents: 5126
diff changeset
124 NORMAL_LISP_OBJECT_HEADER header;
3263
d674024a8674 [xemacs-hg @ 2006-02-27 16:29:00 by crestani]
crestani
parents: 3094
diff changeset
125 #endif /* NEW_GC */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
126 /* There are two kinds of cachels; those created from a single face
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
127 and those created by merging more than one face. In the former
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
128 case, the FACE element specifies the face used. In the latter
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
129 case, the MERGED_FACES_STATIC and MERGED_FACES elements specify
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
130 the faces used for merging by giving the indices of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
131 corresponding single-face cachels.
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 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
134 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
135 other way to properly handle multiple charsets for Mule in the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
136 presence of display tables short of always computing the values
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
137 for all charsets, which is very expensive. Instead, we use a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
138 lazy scheme where we only compute the font for a particular charset
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
139 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
140 We always compute it, just like the other attributes, because
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
141 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
142 and expect it to always be there.)
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 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
145 Dynarr for the rest. This has the advantage that the space used
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
146 is small but the Dynarr will almost never be created, so we
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
147 won't spend much time in malloc()/free().
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 order of the faces here is decreasing extent priority. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
150 Lisp_Object face;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
151 int merged_faces_static[NUM_STATIC_CACHEL_FACES];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
152 int_dynarr *merged_faces;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
153 int nfaces;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
154
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
155 /* The values stored here are computed by calling specifier_instance()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
156 on the appropriate specifiers. This means that we will have either
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157 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
158 default face. We need to distinguish the two so that merging works
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
159 properly -- a value that comes from the default face is treated
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160 as "unspecified" during merging and is overridden by lower-priority
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
161 faces. This is what the _specified flags below are for. */
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 Lisp_Object foreground;
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
164 Lisp_Object foreback;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165 Lisp_Object background;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 617
diff changeset
166 /* 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
167 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
168 of them. This avoids messing with Dynarrs.
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 #### We should look into this and probably clean it up
3094
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3092
diff changeset
171 to use Dynarrs. This may be a big space hog as is.
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3092
diff changeset
172 sjt sez: doesn't look like it, my total face cache is 170KB.
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3092
diff changeset
173 Could be reduced to maybe 50KB. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174 Lisp_Object font[NUM_LEADING_BYTES];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
175
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
176 Lisp_Object display_table;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
177 Lisp_Object background_pixmap;
5080
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
178 Lisp_Object background_placement;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180 unsigned int underline :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181 unsigned int strikethru :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
182 unsigned int highlight :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
183 unsigned int dim :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184 unsigned int blinking :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
185 unsigned int reverse :1;
5619
75ad4969a16d Replace the 'flush face property with the opposite 'shrink one.
Didier Verna <didier@xemacs.org>
parents: 5617
diff changeset
186 unsigned int shrink :1;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
187
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188 /* Used when merging to tell if the above field represents an actual
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189 value of this face or a fallback value. */
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
190 DECLARE_INLINE_LISP_BIT_VECTOR(NUM_LEADING_BYTES) font_specified;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
191
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
192 unsigned int foreground_specified :1;
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
193 unsigned int foreback_specified :1;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194 unsigned int background_specified :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195 unsigned int display_table_specified :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196 unsigned int background_pixmap_specified :1;
5080
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
197 unsigned int background_placement_specified :1;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
198
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
199 unsigned int strikethru_specified :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
200 unsigned int underline_specified :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
201 unsigned int highlight_specified :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
202 unsigned int dim_specified :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
203 unsigned int blinking_specified :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
204 unsigned int reverse_specified :1;
5619
75ad4969a16d Replace the 'flush face property with the opposite 'shrink one.
Didier Verna <didier@xemacs.org>
parents: 5617
diff changeset
205 unsigned int shrink_specified :1;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
206
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
207 /* The updated flag is set after we calculate the values for the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208 face cachel and cleared whenever a face changes, to indicate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
209 that the values stored here might be wrong. The next time
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
210 we go to access the values, we recompute them; if any values
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
211 change, we set the DIRTY flag, which tells the output routines
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
212 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
213 using this face need to be redrawn.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
214
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
215 It is trickier with fonts because we don't automatically
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
216 recompute the fonts but do it only when it is necessary.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
217 (The ASCII font is an exception, of course; see above).
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 In the case of fonts, we maintain a separate updated flag
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220 for each font. Whenever we need to access the font for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
221 a particular charset, we recalculate it if either its
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
222 value is Qunbound (meaning it's never been computed at all)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
223 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
224 the value is not the same as before and the previous value
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
225 was not Qunbound.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
226
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
227 #### 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
228 value being Qunbound, as could happen if no fonts of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229 right sort are available on the system. In this case, the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
230 whole program will just crash. For the moment, this is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
231 OK (for debugging purposes) but we should fix this by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
232 storing a "blank font" if the instantiation fails. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
233 unsigned int dirty :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
234 unsigned int updated :1;
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
235
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
236 DECLARE_INLINE_LISP_BIT_VECTOR(NUM_LEADING_BYTES) font_updated;
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
237
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
238 /* Whether the font for the charset in question was determined in the
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
239 "final stage"; that is, the last stage Lisp code could specify it,
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
240 after the initial stage and before the fallback. */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
241 DECLARE_INLINE_LISP_BIT_VECTOR(NUM_LEADING_BYTES) font_final_stage;
428
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
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3017
diff changeset
244 #ifdef NEW_GC
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3017
diff changeset
245 typedef struct face_cachel Lisp_Face_Cachel;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3017
diff changeset
246
5118
e0db3c197671 merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents: 3676
diff changeset
247 DECLARE_LISP_OBJECT (face_cachel, Lisp_Face_Cachel);
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3017
diff changeset
248
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3017
diff changeset
249 #define XFACE_CACHEL(x) \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3017
diff changeset
250 XRECORD (x, face_cachel, Lisp_Face_Cachel)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3017
diff changeset
251 #define wrap_face_cachel(p) wrap_record (p, face_cachel)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3017
diff changeset
252 #define FACE_CACHEL_P(x) RECORDP (x, face_cachel)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3017
diff changeset
253 #define CHECK_FACE_CACHEL(x) CHECK_RECORD (x, face_cachel)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3017
diff changeset
254 #define CONCHECK_FACE_CACHEL(x) CONCHECK_RECORD (x, face_cachel)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3017
diff changeset
255 #endif /* NEW_GC */
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3017
diff changeset
256
5118
e0db3c197671 merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents: 3676
diff changeset
257 DECLARE_LISP_OBJECT (face, Lisp_Face);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
258 #define XFACE(x) XRECORD (x, face, Lisp_Face)
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 578
diff changeset
259 #define wrap_face(p) wrap_record (p, face)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
260 #define FACEP(x) RECORDP (x, face)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
261 #define CHECK_FACE(x) CHECK_RECORD (x, face)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
262
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
263 Lisp_Object ensure_face_cachel_contains_charset (struct face_cachel *cachel,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
264 Lisp_Object domain,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
265 Lisp_Object charset);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
266 void ensure_face_cachel_complete (struct face_cachel *cachel,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
267 Lisp_Object domain,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
268 unsigned char *charsets);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
269 void update_face_cachel_data (struct face_cachel *cachel,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
270 Lisp_Object domain,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
271 Lisp_Object face);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
272 void face_cachel_charset_font_metric_info (struct face_cachel *cachel,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
273 unsigned char *charsets,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
274 struct font_metric_info *fm);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
275 void mark_face_cachels (face_cachel_dynarr *elements);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
276 void mark_face_cachels_as_clean (struct window *w);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
277 void mark_face_cachels_as_not_updated (struct window *w);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
278 void reset_face_cachel (struct face_cachel *inst);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
279 void reset_face_cachels (struct window *w);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
280 face_index get_builtin_face_cache_index (struct window *w,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
281 Lisp_Object face);
3094
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3092
diff changeset
282 /* WARNING: this interface may change. */
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3092
diff changeset
283 face_index merge_face_list_to_cache_index (struct window *w,
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3092
diff changeset
284 Lisp_Object *face_list, int count);
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3092
diff changeset
285
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
286 #ifdef MEMORY_USAGE_STATS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
287 int 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
288 struct usage_stats *ustats);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
289 #endif /* MEMORY_USAGE_STATS */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
290
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
291 EXFUN (Fface_name, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
292 EXFUN (Ffind_face, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
293 EXFUN (Fget_face, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
294
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
295 extern Lisp_Object Qstrikethru, Vbuilt_in_face_specifiers, Vdefault_face;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
296 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
297 extern Lisp_Object Vtext_cursor_face, Vvertical_divider_face;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
298 extern Lisp_Object Vtoolbar_face, Vgui_element_face, Vwidget_face;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
299
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
300 void mark_all_faces_as_clean (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
301 void init_frame_faces (struct frame *f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
302 void init_device_faces (struct device *d);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
303 void init_global_faces (struct device *d);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
304 face_index get_extent_fragment_face_cache_index (struct window *w,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
305 struct extent_fragment *ef);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
306 void update_frame_face_values (struct frame *f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
307 void face_property_was_changed (Lisp_Object face, Lisp_Object property,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
308 Lisp_Object locale);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
309 void default_face_font_info (Lisp_Object domain, int *ascent,
5047
07dcc7000bbf put width before height consistently, fix a real bug found in the process
Ben Wing <ben@xemacs.org>
parents: 5043
diff changeset
310 int *descent, int *width, int *height,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
311 int *proportional_p);
5047
07dcc7000bbf put width before height consistently, fix a real bug found in the process
Ben Wing <ben@xemacs.org>
parents: 5043
diff changeset
312 void default_face_width_and_height (Lisp_Object domain, int *width,
07dcc7000bbf put width before height consistently, fix a real bug found in the process
Ben Wing <ben@xemacs.org>
parents: 5043
diff changeset
313 int *height);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
314
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
315 #define FACE_CACHEL_FONT(cachel, charset) \
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 617
diff changeset
316 (cachel->font[XCHARSET_LEADING_BYTE (charset) - MIN_LEADING_BYTE])
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
317
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
318 #define FACE_CACHEL_FONT_UPDATED(x) \
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
319 ((struct Lisp_Bit_Vector *)(&((x)->font_updated)))
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
320 #define FACE_CACHEL_FONT_SPECIFIED(x) \
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
321 ((struct Lisp_Bit_Vector *)(&((x)->font_specified)))
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
322 #define FACE_CACHEL_FONT_FINAL_STAGE(x) \
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
323 ((struct Lisp_Bit_Vector *)(&((x)->font_final_stage)))
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
324
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
325 #define WINDOW_FACE_CACHEL(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
326 Dynarr_atp ((window)->face_cachels, index)
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 #define FACE_CACHEL_FINDEX_UNSAFE(cachel, offset) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
329 ((offset) < NUM_STATIC_CACHEL_FACES \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
330 ? (cachel)->merged_faces_static[offset] \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
331 : Dynarr_at ((cachel)->merged_faces, (offset) - NUM_STATIC_CACHEL_FACES))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
332
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
333 #define WINDOW_FACE_CACHEL_FACE(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
334 (WINDOW_FACE_CACHEL (window, index)->face)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
335 #define WINDOW_FACE_CACHEL_FOREGROUND(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
336 (WINDOW_FACE_CACHEL (window, index)->foreground)
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
337 #define WINDOW_FACE_CACHEL_FOREBACK(window, index) \
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
338 (WINDOW_FACE_CACHEL (window, index)->foreback)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
339 #define WINDOW_FACE_CACHEL_BACKGROUND(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
340 (WINDOW_FACE_CACHEL (window, index)->background)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
341 /* #### This can be referenced by various functions,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
342 but face_cachels isn't initialized for the stream device.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
343 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
344 blowing up in multiple places. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
345 #define WINDOW_FACE_CACHEL_FONT(window, index, charset) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
346 ((window)->face_cachels \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
347 ? FACE_CACHEL_FONT (WINDOW_FACE_CACHEL (window, index), charset) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
348 : Qnil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
349 #define WINDOW_FACE_CACHEL_DISPLAY_TABLE(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
350 (WINDOW_FACE_CACHEL (window, index)->display_table)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
351 #define WINDOW_FACE_CACHEL_BACKGROUND_PIXMAP(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
352 (WINDOW_FACE_CACHEL (window, index)->background_pixmap)
5080
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
353 #define WINDOW_FACE_CACHEL_BACKGROUND_PLACEMENT(window, index) \
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
354 (WINDOW_FACE_CACHEL (window, index)->background_placement)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
355 #define WINDOW_FACE_CACHEL_DIRTY(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
356 (WINDOW_FACE_CACHEL (window, index)->dirty)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
357 #define WINDOW_FACE_CACHEL_UNDERLINE_P(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
358 (WINDOW_FACE_CACHEL (window, index)->underline)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
359 #define WINDOW_FACE_CACHEL_HIGHLIGHT_P(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
360 (WINDOW_FACE_CACHEL (window, index)->highlight)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
361 #define WINDOW_FACE_CACHEL_DIM_P(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
362 (WINDOW_FACE_CACHEL (window, index)->dim)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
363 #define WINDOW_FACE_CACHEL_BLINKING_P(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
364 (WINDOW_FACE_CACHEL (window, index)->blinking)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
365 #define WINDOW_FACE_CACHEL_REVERSE_P(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
366 (WINDOW_FACE_CACHEL (window, index)->reverse)
5619
75ad4969a16d Replace the 'flush face property with the opposite 'shrink one.
Didier Verna <didier@xemacs.org>
parents: 5617
diff changeset
367 #define WINDOW_FACE_CACHEL_SHRINK_P(window, index) \
75ad4969a16d Replace the 'flush face property with the opposite 'shrink one.
Didier Verna <didier@xemacs.org>
parents: 5617
diff changeset
368 (WINDOW_FACE_CACHEL (window, index)->shrink)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
369
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
370 #define FACE_PROPERTY_SPECIFIER(face, property) Fget (face, property, Qnil)
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 #define FACE_PROPERTY_INSTANCE_1(face, property, domain, errb, no_fallback, depth) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
373 specifier_instance (FACE_PROPERTY_SPECIFIER (face, property), Qunbound, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
374 domain, errb, 1, no_fallback, depth)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
375
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
376 #define FACE_PROPERTY_INSTANCE(face, property, domain, no_fallback, depth) \
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
377 FACE_PROPERTY_INSTANCE_1 (face, property, domain, ERROR_ME_DEBUG_WARN, \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
378 no_fallback, depth)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
379
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
380 Lisp_Object face_property_matching_instance
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
381 (Lisp_Object face,
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
382 Lisp_Object property,
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
383 Lisp_Object charset,
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
384 Lisp_Object domain,
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
385 Error_Behavior errb,
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
386 int no_fallback,
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
387 Lisp_Object depth,
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
388 enum font_specifier_matchspec_stages stages);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
389
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
390 #define FACE_PROPERTY_SPEC_LIST(face, property, locale) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
391 Fspecifier_spec_list (FACE_PROPERTY_SPECIFIER (face, property), \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
392 locale, Qnil, Qnil)
498
88e7e9bafe19 [xemacs-hg @ 2001-05-02 16:08:10 by james]
james
parents: 442
diff changeset
393 #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
394 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
395 value, locale, tag, how_to_add)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
396
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
397 #define FACE_FOREGROUND(face, domain) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
398 FACE_PROPERTY_INSTANCE (face, Qforeground, domain, 0, Qzero)
5624
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
399 #define FACE_FOREBACK(face, domain) \
c39052c921b5 New "foreback" face property.
Didier Verna <didier@xemacs.org>
parents: 5619
diff changeset
400 FACE_PROPERTY_INSTANCE (face, Qforeback, domain, 0, Qzero)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
401 #define FACE_BACKGROUND(face, domain) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
402 FACE_PROPERTY_INSTANCE (face, Qbackground, domain, 0, Qzero)
3676
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
403
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
404 /* Calling this function on the default face with the ASCII character set
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
405 may delete any X11 frames; see the code at the end of
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
406 x_find_charset_font. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
407 #define FACE_FONT(face, domain, charset) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
408 face_property_matching_instance (face, Qfont, charset, domain, \
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
409 ERROR_ME_DEBUG_WARN, 0, Qzero, \
5015
d95c102a96d3 cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
Ben Wing <ben@xemacs.org>
parents: 3676
diff changeset
410 STAGE_INITIAL)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
411 #define FACE_DISPLAY_TABLE(face, domain) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
412 FACE_PROPERTY_INSTANCE (face, Qdisplay_table, domain, 0, Qzero)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
413 #define FACE_BACKGROUND_PIXMAP(face, domain) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
414 FACE_PROPERTY_INSTANCE (face, Qbackground_pixmap, domain, 0, Qzero)
5080
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
415
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
416 extern Lisp_Object Qbackground_placement;
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
417 #define FACE_BACKGROUND_PLACEMENT(face, domain) \
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
418 FACE_PROPERTY_INSTANCE (face, Qbackground_placement, domain, 0, Qzero)
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
419
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
420 #define FACE_UNDERLINE_P(face, domain) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
421 (!NILP (FACE_PROPERTY_INSTANCE (face, Qunderline, domain, 0, Qzero)))
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
422 #define FACE_STRIKETHRU_P(face, domain) \
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
423 (!NILP (FACE_PROPERTY_INSTANCE (face, Qstrikethru, domain, 0, Qzero)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
424 #define FACE_HIGHLIGHT_P(face, domain) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
425 (!NILP (FACE_PROPERTY_INSTANCE (face, Qhighlight, domain, 0, Qzero)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
426 #define FACE_DIM_P(face, domain) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
427 (!NILP (FACE_PROPERTY_INSTANCE (face, Qdim, domain, 0, Qzero)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
428 #define FACE_BLINKING_P(face, domain) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
429 (!NILP (FACE_PROPERTY_INSTANCE (face, Qblinking, domain, 0, Qzero)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
430 #define FACE_REVERSE_P(face, domain) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
431 (!NILP (FACE_PROPERTY_INSTANCE (face, Qreverse, domain, 0, Qzero)))
5619
75ad4969a16d Replace the 'flush face property with the opposite 'shrink one.
Didier Verna <didier@xemacs.org>
parents: 5617
diff changeset
432 #define FACE_SHRINK_P(face, domain) \
75ad4969a16d Replace the 'flush face property with the opposite 'shrink one.
Didier Verna <didier@xemacs.org>
parents: 5617
diff changeset
433 (!NILP (FACE_PROPERTY_INSTANCE (face, Qshrink, domain, 0, Qzero)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
434
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
435 #endif /* INCLUDED_faces_h_ */