annotate src/faces.h @ 5518:3cc7470ea71c

gnuclient: if TMPDIR was set and connect failed, try again with /tmp 2011-06-03 Aidan Kehoe <kehoea@parhasard.net> * gnuslib.c (connect_to_unix_server): Retry with /tmp as a directory in which to search for Unix sockets if an attempt to connect with some other directory failed (which may be because gnuclient and gnuserv don't share an environment value for TMPDIR, or because gnuserv was compiled with USE_TMPDIR turned off).
author Aidan Kehoe <kehoea@parhasard.net>
date Fri, 03 Jun 2011 18:40:57 +0100
parents 308d34e9f07d
children b0d712bbc2a6
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;
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;
5080
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
49 Lisp_Object background_placement;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51 Lisp_Object underline;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52 Lisp_Object strikethru;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53 Lisp_Object highlight;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 Lisp_Object dim;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55 Lisp_Object blinking;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 Lisp_Object reverse;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58 Lisp_Object plist;
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 charsets_warned_about;
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65 A face cache element caches the results of instantiating the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66 properties of a face in a particular window. (Instantiation can
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67 take a long time so this is very important.) Each window contains
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68 an array of face cache elements (called the "face cache"), one for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69 each face that has been seen in the window so far.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71 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
72 become inconsistent:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74 1) Switching buffers in a window clears the face cache for that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75 window, because this can change the way any property is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76 instantiated in the window.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77 2) Setting a face property causes that face to be marked as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78 dirty. This causes various stuff to happen to make sure
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79 the appropriate face cache elements are invalidated.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
80 (#### Actually this doesn't work quite right, and errs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81 too much on the side of invalidating unnecessary stuff.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
82
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83 There are also face cache elements for "merged faces", which are the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84 result of merging all the faces that overlap a particular buffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
85 position. The merging is always done in the context of a particular
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
86 domain (specifically, a window), and the face cache element is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
87 specific to a particular window. (Face cache elements are contained
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88 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
89 the merging takes place in the context of a particular window has
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90 to do with the way the merging works:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
91
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92 1) All extents overlying the buffer position are sorted by descending
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
93 priority.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94 2) The property of a particular merged face comes from the highest-
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
95 priority face that specifies a value for that particular property.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96 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
97 particular property is to instantiate that face's property in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98 the window in question with the no-fallback option set, to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99 see if we got anything.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101 For Mule, things get a bit trickier because there can be multiple
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
102 fonts per face/window combination -- the charset is an argument
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
103 to specifier-instance.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
105 We have two possible data structure representations:
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 1) Keep the original "one font per face cache element" representation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
108 and use a different face cache element for each charset.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109 2) Allow multiple fonts to be in a single face cache element.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
110
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111 I've chosen to use (2) -- the data structure gets more complicated
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112 but the algorithms for maintaining face cache elements end up
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
113 simpler.
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
116 #define NUM_STATIC_CACHEL_FACES 4
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 typedef struct face_cachel face_cachel;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
119 struct face_cachel
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
120 {
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3017
diff changeset
121 #ifdef NEW_GC
5127
a9c41067dd88 more cleanups, terminology clarification, lots of doc work
Ben Wing <ben@xemacs.org>
parents: 5126
diff changeset
122 NORMAL_LISP_OBJECT_HEADER header;
3263
d674024a8674 [xemacs-hg @ 2006-02-27 16:29:00 by crestani]
crestani
parents: 3094
diff changeset
123 #endif /* NEW_GC */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
124 /* There are two kinds of cachels; those created from a single face
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
125 and those created by merging more than one face. In the former
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
126 case, the FACE element specifies the face used. In the latter
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
127 case, the MERGED_FACES_STATIC and MERGED_FACES elements specify
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
128 the faces used for merging by giving the indices of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
129 corresponding single-face cachels.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
130
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
131 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
132 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
133 other way to properly handle multiple charsets for Mule in the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
134 presence of display tables short of always computing the values
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
135 for all charsets, which is very expensive. Instead, we use a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
136 lazy scheme where we only compute the font for a particular charset
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
137 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
138 We always compute it, just like the other attributes, because
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
139 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
140 and expect it to always be there.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
141
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
142 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
143 Dynarr for the rest. This has the advantage that the space used
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
144 is small but the Dynarr will almost never be created, so we
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
145 won't spend much time in malloc()/free().
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
146
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
147 The order of the faces here is decreasing extent priority. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
148 Lisp_Object face;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
149 int merged_faces_static[NUM_STATIC_CACHEL_FACES];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
150 int_dynarr *merged_faces;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
151 int nfaces;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
152
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
153 /* The values stored here are computed by calling specifier_instance()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
154 on the appropriate specifiers. This means that we will have either
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
155 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
156 default face. We need to distinguish the two so that merging works
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157 properly -- a value that comes from the default face is treated
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
158 as "unspecified" during merging and is overridden by lower-priority
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
159 faces. This is what the _specified flags below are for. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
161 Lisp_Object foreground;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162 Lisp_Object background;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 617
diff changeset
163 /* 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
164 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
165 of them. This avoids messing with Dynarrs.
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 #### 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
168 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
169 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
170 Could be reduced to maybe 50KB. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171 Lisp_Object font[NUM_LEADING_BYTES];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
172
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
173 Lisp_Object display_table;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174 Lisp_Object background_pixmap;
5080
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
175 Lisp_Object background_placement;
428
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 unsigned int underline :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
178 unsigned int strikethru :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179 unsigned int highlight :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180 unsigned int dim :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181 unsigned int blinking :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
182 unsigned int reverse :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
183
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184 /* Used when merging to tell if the above field represents an actual
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
185 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
186 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
187
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188 unsigned int foreground_specified :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189 unsigned int background_specified :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 unsigned int display_table_specified :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
191 unsigned int background_pixmap_specified :1;
5080
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
192 unsigned int background_placement_specified :1;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194 unsigned int strikethru_specified :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195 unsigned int underline_specified :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196 unsigned int highlight_specified :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197 unsigned int dim_specified :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
198 unsigned int blinking_specified :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
199 unsigned int reverse_specified :1;
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 /* The updated flag is set after we calculate the values for the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
202 face cachel and cleared whenever a face changes, to indicate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
203 that the values stored here might be wrong. The next time
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
204 we go to access the values, we recompute them; if any values
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
205 change, we set the DIRTY flag, which tells the output routines
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
206 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
207 using this face need to be redrawn.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
209 It is trickier with fonts because we don't automatically
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
210 recompute the fonts but do it only when it is necessary.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
211 (The ASCII font is an exception, of course; see above).
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 In the case of fonts, we maintain a separate updated flag
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
214 for each font. Whenever we need to access the font for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
215 a particular charset, we recalculate it if either its
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
216 value is Qunbound (meaning it's never been computed at all)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
217 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
218 the value is not the same as before and the previous value
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219 was not Qunbound.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
221 #### 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
222 value being Qunbound, as could happen if no fonts of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
223 right sort are available on the system. In this case, the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224 whole program will just crash. For the moment, this is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
225 OK (for debugging purposes) but we should fix this by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
226 storing a "blank font" if the instantiation fails. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
227 unsigned int dirty :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
228 unsigned int updated :1;
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
229
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
230 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
231
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
232 /* 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
233 "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
234 after the initial stage and before the fallback. */
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
235 DECLARE_INLINE_LISP_BIT_VECTOR(NUM_LEADING_BYTES) font_final_stage;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
236 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
237
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3017
diff changeset
238 #ifdef NEW_GC
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3017
diff changeset
239 typedef struct face_cachel Lisp_Face_Cachel;
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3017
diff changeset
240
5118
e0db3c197671 merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents: 3676
diff changeset
241 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
242
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3017
diff changeset
243 #define XFACE_CACHEL(x) \
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3017
diff changeset
244 XRECORD (x, face_cachel, Lisp_Face_Cachel)
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3017
diff changeset
245 #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
246 #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
247 #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
248 #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
249 #endif /* NEW_GC */
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3017
diff changeset
250
5118
e0db3c197671 merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents: 3676
diff changeset
251 DECLARE_LISP_OBJECT (face, Lisp_Face);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
252 #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
253 #define wrap_face(p) wrap_record (p, face)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
254 #define FACEP(x) RECORDP (x, face)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
255 #define CHECK_FACE(x) CHECK_RECORD (x, face)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
256
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
257 Lisp_Object ensure_face_cachel_contains_charset (struct face_cachel *cachel,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
258 Lisp_Object domain,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
259 Lisp_Object charset);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
260 void ensure_face_cachel_complete (struct face_cachel *cachel,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
261 Lisp_Object domain,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
262 unsigned char *charsets);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
263 void update_face_cachel_data (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 face);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
266 void face_cachel_charset_font_metric_info (struct face_cachel *cachel,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
267 unsigned char *charsets,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
268 struct font_metric_info *fm);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
269 void mark_face_cachels (face_cachel_dynarr *elements);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
270 void mark_face_cachels_as_clean (struct window *w);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
271 void mark_face_cachels_as_not_updated (struct window *w);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
272 void reset_face_cachel (struct face_cachel *inst);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
273 void reset_face_cachels (struct window *w);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
274 face_index get_builtin_face_cache_index (struct window *w,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
275 Lisp_Object face);
3094
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3092
diff changeset
276 /* WARNING: this interface may change. */
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3092
diff changeset
277 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
278 Lisp_Object *face_list, int count);
ad2f4ae9895b [xemacs-hg @ 2005-11-26 11:45:47 by stephent]
stephent
parents: 3092
diff changeset
279
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
280 #ifdef MEMORY_USAGE_STATS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
281 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
282 struct usage_stats *ustats);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
283 #endif /* MEMORY_USAGE_STATS */
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 EXFUN (Fface_name, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
286 EXFUN (Ffind_face, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
287 EXFUN (Fget_face, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
288
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
289 extern Lisp_Object Qstrikethru, Vbuilt_in_face_specifiers, Vdefault_face;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
290 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
291 extern Lisp_Object Vtext_cursor_face, Vvertical_divider_face;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
292 extern Lisp_Object Vtoolbar_face, Vgui_element_face, Vwidget_face;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
293
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
294 void mark_all_faces_as_clean (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
295 void init_frame_faces (struct frame *f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
296 void init_device_faces (struct device *d);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
297 void init_global_faces (struct device *d);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
298 face_index get_extent_fragment_face_cache_index (struct window *w,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
299 struct extent_fragment *ef);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
300 void update_frame_face_values (struct frame *f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
301 void face_property_was_changed (Lisp_Object face, Lisp_Object property,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
302 Lisp_Object locale);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
303 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
304 int *descent, int *width, int *height,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
305 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
306 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
307 int *height);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
308
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
309 #define FACE_CACHEL_FONT(cachel, charset) \
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 617
diff changeset
310 (cachel->font[XCHARSET_LEADING_BYTE (charset) - MIN_LEADING_BYTE])
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
311
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
312 #define FACE_CACHEL_FONT_UPDATED(x) \
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
313 ((struct Lisp_Bit_Vector *)(&((x)->font_updated)))
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
314 #define FACE_CACHEL_FONT_SPECIFIED(x) \
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
315 ((struct Lisp_Bit_Vector *)(&((x)->font_specified)))
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
316 #define FACE_CACHEL_FONT_FINAL_STAGE(x) \
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
317 ((struct Lisp_Bit_Vector *)(&((x)->font_final_stage)))
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
318
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
319 #define WINDOW_FACE_CACHEL(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
320 Dynarr_atp ((window)->face_cachels, index)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
321
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
322 #define FACE_CACHEL_FINDEX_UNSAFE(cachel, offset) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
323 ((offset) < NUM_STATIC_CACHEL_FACES \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
324 ? (cachel)->merged_faces_static[offset] \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
325 : Dynarr_at ((cachel)->merged_faces, (offset) - NUM_STATIC_CACHEL_FACES))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
326
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
327 #define WINDOW_FACE_CACHEL_FACE(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
328 (WINDOW_FACE_CACHEL (window, index)->face)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
329 #define WINDOW_FACE_CACHEL_FOREGROUND(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
330 (WINDOW_FACE_CACHEL (window, index)->foreground)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
331 #define WINDOW_FACE_CACHEL_BACKGROUND(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
332 (WINDOW_FACE_CACHEL (window, index)->background)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
333 /* #### This can be referenced by various functions,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
334 but face_cachels isn't initialized for the stream device.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
335 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
336 blowing up in multiple places. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
337 #define WINDOW_FACE_CACHEL_FONT(window, index, charset) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
338 ((window)->face_cachels \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
339 ? FACE_CACHEL_FONT (WINDOW_FACE_CACHEL (window, index), charset) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
340 : Qnil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
341 #define WINDOW_FACE_CACHEL_DISPLAY_TABLE(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
342 (WINDOW_FACE_CACHEL (window, index)->display_table)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
343 #define WINDOW_FACE_CACHEL_BACKGROUND_PIXMAP(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
344 (WINDOW_FACE_CACHEL (window, index)->background_pixmap)
5080
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
345 #define WINDOW_FACE_CACHEL_BACKGROUND_PLACEMENT(window, index) \
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
346 (WINDOW_FACE_CACHEL (window, index)->background_placement)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
347 #define WINDOW_FACE_CACHEL_DIRTY(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
348 (WINDOW_FACE_CACHEL (window, index)->dirty)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
349 #define WINDOW_FACE_CACHEL_UNDERLINE_P(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
350 (WINDOW_FACE_CACHEL (window, index)->underline)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
351 #define WINDOW_FACE_CACHEL_HIGHLIGHT_P(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
352 (WINDOW_FACE_CACHEL (window, index)->highlight)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
353 #define WINDOW_FACE_CACHEL_DIM_P(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
354 (WINDOW_FACE_CACHEL (window, index)->dim)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
355 #define WINDOW_FACE_CACHEL_BLINKING_P(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
356 (WINDOW_FACE_CACHEL (window, index)->blinking)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
357 #define WINDOW_FACE_CACHEL_REVERSE_P(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
358 (WINDOW_FACE_CACHEL (window, index)->reverse)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
359
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
360 #define FACE_PROPERTY_SPECIFIER(face, property) Fget (face, property, Qnil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
361
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
362 #define FACE_PROPERTY_INSTANCE_1(face, property, domain, errb, no_fallback, depth) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
363 specifier_instance (FACE_PROPERTY_SPECIFIER (face, property), Qunbound, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
364 domain, errb, 1, no_fallback, depth)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
365
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
366 #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
367 FACE_PROPERTY_INSTANCE_1 (face, property, domain, ERROR_ME_DEBUG_WARN, \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
368 no_fallback, depth)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
369
3659
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
370 Lisp_Object face_property_matching_instance
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
371 (Lisp_Object face,
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
372 Lisp_Object property,
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
373 Lisp_Object charset,
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
374 Lisp_Object domain,
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
375 Error_Behavior errb,
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
376 int no_fallback,
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
377 Lisp_Object depth,
98af8a976fc3 [xemacs-hg @ 2006-11-05 22:31:31 by aidan]
aidan
parents: 3263
diff changeset
378 enum font_specifier_matchspec_stages stages);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
379
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
380 #define FACE_PROPERTY_SPEC_LIST(face, property, locale) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
381 Fspecifier_spec_list (FACE_PROPERTY_SPECIFIER (face, property), \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
382 locale, Qnil, Qnil)
498
88e7e9bafe19 [xemacs-hg @ 2001-05-02 16:08:10 by james]
james
parents: 442
diff changeset
383 #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
384 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
385 value, locale, tag, how_to_add)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
386
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
387 #define FACE_FOREGROUND(face, domain) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
388 FACE_PROPERTY_INSTANCE (face, Qforeground, domain, 0, Qzero)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
389 #define FACE_BACKGROUND(face, domain) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
390 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
391
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3659
diff changeset
392 /* 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
393 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
394 x_find_charset_font. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
395 #define FACE_FONT(face, domain, charset) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
396 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
397 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
398 STAGE_INITIAL)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
399 #define FACE_DISPLAY_TABLE(face, domain) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
400 FACE_PROPERTY_INSTANCE (face, Qdisplay_table, domain, 0, Qzero)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
401 #define FACE_BACKGROUND_PIXMAP(face, domain) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
402 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
403
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
404 extern Lisp_Object Qbackground_placement;
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
405 #define FACE_BACKGROUND_PLACEMENT(face, domain) \
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 5047
diff changeset
406 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
407
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
408 #define FACE_UNDERLINE_P(face, domain) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
409 (!NILP (FACE_PROPERTY_INSTANCE (face, Qunderline, domain, 0, Qzero)))
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
410 #define FACE_STRIKETHRU_P(face, domain) \
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
411 (!NILP (FACE_PROPERTY_INSTANCE (face, Qstrikethru, domain, 0, Qzero)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
412 #define FACE_HIGHLIGHT_P(face, domain) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
413 (!NILP (FACE_PROPERTY_INSTANCE (face, Qhighlight, domain, 0, Qzero)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
414 #define FACE_DIM_P(face, domain) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
415 (!NILP (FACE_PROPERTY_INSTANCE (face, Qdim, domain, 0, Qzero)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
416 #define FACE_BLINKING_P(face, domain) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
417 (!NILP (FACE_PROPERTY_INSTANCE (face, Qblinking, domain, 0, Qzero)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
418 #define FACE_REVERSE_P(face, domain) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
419 (!NILP (FACE_PROPERTY_INSTANCE (face, Qreverse, domain, 0, Qzero)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
420
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
421 #endif /* INCLUDED_faces_h_ */