Mercurial > emacs
annotate src/xfaces.c @ 54736:b94de166de9d
(ethio-sera-being-called-by-w3): New
variable.
(ethio-sera-to-fidel-ethio): Check ethio-sera-being-called-by-w3
instead of sera-being-called-by-w3.
(ethio-fidel-to-sera-buffer): Likewise.
(ethio-find-file): Bind ethio-sera-being-called-by-w3 to t
instead of sera-being-called-by-w3.
(ethio-write-file): Likewise.
| author | Kenichi Handa <handa@m17n.org> |
|---|---|
| date | Mon, 05 Apr 2004 23:27:37 +0000 |
| parents | d85f8f2e71f7 |
| children | b87089cc7e4c 03a73693678e |
| rev | line source |
|---|---|
| 24995 | 1 /* xfaces.c -- "Face" primitives. |
|
50412
49cba7ce673a
(choose_face_font): Make sure *NEEDS_OVERSTRIKE is always set.
Miles Bader <miles@gnu.org>
parents:
50369
diff
changeset
|
2 Copyright (C) 1993, 1994, 1998, 1999, 2000, 2001, 2002, 2003 |
|
35369
aca9ba55cfcc
(x_face_list_fonts): Call x_list_fonts with SIZE -1,
Gerd Moellmann <gerd@gnu.org>
parents:
35228
diff
changeset
|
3 Free Software Foundation. |
| 2342 | 4 |
| 2336 | 5 This file is part of GNU Emacs. |
| 6 | |
| 7 GNU Emacs is free software; you can redistribute it and/or modify | |
| 8 it under the terms of the GNU General Public License as published by | |
| 2342 | 9 the Free Software Foundation; either version 2, or (at your option) |
| 2336 | 10 any later version. |
| 11 | |
| 12 GNU Emacs is distributed in the hope that it will be useful, | |
| 13 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 15 GNU General Public License for more details. | |
| 16 | |
| 17 You should have received a copy of the GNU General Public License | |
| 18 along with GNU Emacs; see the file COPYING. If not, write to | |
|
14186
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
14090
diff
changeset
|
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
|
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
14090
diff
changeset
|
20 Boston, MA 02111-1307, USA. */ |
| 2336 | 21 |
| 24995 | 22 /* New face implementation by Gerd Moellmann <gerd@gnu.org>. */ |
| 23 | |
| 24 /* Faces. | |
| 25 | |
| 26 When using Emacs with X, the display style of characters can be | |
| 27 changed by defining `faces'. Each face can specify the following | |
| 28 display attributes: | |
| 29 | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
30 1. Font family name. |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
31 |
| 24995 | 32 2. Relative proportionate width, aka character set width or set |
| 33 width (swidth), e.g. `semi-compressed'. | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
34 |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
35 3. Font height in 1/10pt. |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
36 |
| 24995 | 37 4. Font weight, e.g. `bold'. |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
38 |
| 24995 | 39 5. Font slant, e.g. `italic'. |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
40 |
| 24995 | 41 6. Foreground color. |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
42 |
| 24995 | 43 7. Background color. |
| 44 | |
| 45 8. Whether or not characters should be underlined, and in what color. | |
| 46 | |
| 47 9. Whether or not characters should be displayed in inverse video. | |
| 48 | |
| 49 10. A background stipple, a bitmap. | |
| 50 | |
| 51 11. Whether or not characters should be overlined, and in what color. | |
| 52 | |
| 53 12. Whether or not characters should be strike-through, and in what | |
| 54 color. | |
| 55 | |
| 56 13. Whether or not a box should be drawn around characters, the box | |
| 57 type, and, for simple boxes, in what color. | |
| 58 | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
59 14. Font or fontset pattern, or nil. This is a special attribute. |
| 36946 | 60 When this attribute is specified, the face uses a font opened by |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
61 that pattern as is. In addition, all the other font-related |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
62 attributes (1st thru 5th) are generated from the opened font name. |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
63 On the other hand, if one of the other font-related attributes are |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
64 specified, this attribute is set to nil. In that case, the face |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
65 doesn't inherit this attribute from the `default' face, and uses a |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
66 font determined by the other attributes (those may be inherited |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
67 from the `default' face). |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
68 |
| 31178 | 69 15. A face name or list of face names from which to inherit attributes. |
| 70 | |
|
35913
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
71 16. A specified average font width, which is invisible from Lisp, |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
72 and is used to ensure that a font specified on the command line, |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
73 for example, can be matched exactly. |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
74 |
| 24995 | 75 Faces are frame-local by nature because Emacs allows to define the |
| 76 same named face (face names are symbols) differently for different | |
| 77 frames. Each frame has an alist of face definitions for all named | |
| 78 faces. The value of a named face in such an alist is a Lisp vector | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
79 with the symbol `face' in slot 0, and a slot for each of the face |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
80 attributes mentioned above. |
| 24995 | 81 |
| 82 There is also a global face alist `Vface_new_frame_defaults'. Face | |
| 83 definitions from this list are used to initialize faces of newly | |
| 84 created frames. | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
85 |
| 24995 | 86 A face doesn't have to specify all attributes. Those not specified |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
87 have a value of `unspecified'. Faces specifying all attributes but |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
88 the 14th are called `fully-specified'. |
| 24995 | 89 |
| 90 | |
| 91 Face merging. | |
| 92 | |
| 93 The display style of a given character in the text is determined by | |
| 94 combining several faces. This process is called `face merging'. | |
| 95 Any aspect of the display style that isn't specified by overlays or | |
| 96 text properties is taken from the `default' face. Since it is made | |
| 97 sure that the default face is always fully-specified, face merging | |
| 98 always results in a fully-specified face. | |
| 99 | |
| 100 | |
| 101 Face realization. | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
102 |
| 24995 | 103 After all face attributes for a character have been determined by |
| 104 merging faces of that character, that face is `realized'. The | |
| 105 realization process maps face attributes to what is physically | |
| 106 available on the system where Emacs runs. The result is a | |
| 107 `realized face' in form of a struct face which is stored in the | |
| 108 face cache of the frame on which it was realized. | |
| 109 | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
110 Face realization is done in the context of the character to display |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
111 because different fonts may be used for different characters. In |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
112 other words, for characters that have different font |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
113 specifications, different realized faces are needed to display |
| 24995 | 114 them. |
| 115 | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
116 Font specification is done by fontsets. See the comment in |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
117 fontset.c for the details. In the current implementation, all ASCII |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
118 characters share the same font in a fontset. |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
119 |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
120 Faces are at first realized for ASCII characters, and, at that |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
121 time, assigned a specific realized fontset. Hereafter, we call |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
122 such a face as `ASCII face'. When a face for a multibyte character |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
123 is realized, it inherits (thus shares) a fontset of an ASCII face |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
124 that has the same attributes other than font-related ones. |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
125 |
| 36946 | 126 Thus, all realized face have a realized fontset. |
| 24995 | 127 |
| 128 | |
| 129 Unibyte text. | |
| 130 | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
131 Unibyte text (i.e. raw 8-bit characters) is displayed with the same |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
132 font as ASCII characters. That is because it is expected that |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
133 unibyte text users specify a font that is suitable both for ASCII |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
134 and raw 8-bit characters. |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
135 |
| 24995 | 136 |
| 137 Font selection. | |
| 138 | |
| 139 Font selection tries to find the best available matching font for a | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
140 given (character, face) combination. |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
141 |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
142 If the face specifies a fontset name, that fontset determines a |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
143 pattern for fonts of the given character. If the face specifies a |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
144 font name or the other font-related attributes, a fontset is |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
145 realized from the default fontset. In that case, that |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
146 specification determines a pattern for ASCII characters and the |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
147 default fontset determines a pattern for multibyte characters. |
| 24995 | 148 |
| 149 Available fonts on the system on which Emacs runs are then matched | |
| 150 against the font pattern. The result of font selection is the best | |
| 151 match for the given face attributes in this font list. | |
| 152 | |
| 153 Font selection can be influenced by the user. | |
| 154 | |
| 155 1. The user can specify the relative importance he gives the face | |
| 156 attributes width, height, weight, and slant by setting | |
| 157 face-font-selection-order (faces.el) to a list of face attribute | |
| 158 names. The default is '(:width :height :weight :slant), and means | |
| 159 that font selection first tries to find a good match for the font | |
| 160 width specified by a face, then---within fonts with that | |
| 161 width---tries to find a best match for the specified font height, | |
| 162 etc. | |
| 163 | |
|
34629
10675adcbf6f
(Vface_ignored_fonts): New variable.
Kenichi Handa <handa@m17n.org>
parents:
34289
diff
changeset
|
164 2. Setting face-font-family-alternatives allows the user to |
| 24995 | 165 specify alternative font families to try if a family specified by a |
| 166 face doesn't exist. | |
| 167 | |
|
34629
10675adcbf6f
(Vface_ignored_fonts): New variable.
Kenichi Handa <handa@m17n.org>
parents:
34289
diff
changeset
|
168 3. Setting face-font-registry-alternatives allows the user to |
|
10675adcbf6f
(Vface_ignored_fonts): New variable.
Kenichi Handa <handa@m17n.org>
parents:
34289
diff
changeset
|
169 specify all alternative font registries to try for a face |
|
10675adcbf6f
(Vface_ignored_fonts): New variable.
Kenichi Handa <handa@m17n.org>
parents:
34289
diff
changeset
|
170 specifying a registry. |
|
10675adcbf6f
(Vface_ignored_fonts): New variable.
Kenichi Handa <handa@m17n.org>
parents:
34289
diff
changeset
|
171 |
|
10675adcbf6f
(Vface_ignored_fonts): New variable.
Kenichi Handa <handa@m17n.org>
parents:
34289
diff
changeset
|
172 4. Setting face-ignored-fonts allows the user to ignore specific |
|
10675adcbf6f
(Vface_ignored_fonts): New variable.
Kenichi Handa <handa@m17n.org>
parents:
34289
diff
changeset
|
173 fonts. |
|
10675adcbf6f
(Vface_ignored_fonts): New variable.
Kenichi Handa <handa@m17n.org>
parents:
34289
diff
changeset
|
174 |
| 24995 | 175 |
| 36946 | 176 Character composition. |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
177 |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
178 Usually, the realization process is already finished when Emacs |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
179 actually reflects the desired glyph matrix on the screen. However, |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
180 on displaying a composition (sequence of characters to be composed |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
181 on the screen), a suitable font for the components of the |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
182 composition is selected and realized while drawing them on the |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
183 screen, i.e. the realization process is delayed but in principle |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
184 the same. |
| 24995 | 185 |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
186 |
| 24995 | 187 Initialization of basic faces. |
| 188 | |
| 189 The faces `default', `modeline' are considered `basic faces'. | |
| 190 When redisplay happens the first time for a newly created frame, | |
| 191 basic faces are realized for CHARSET_ASCII. Frame parameters are | |
| 192 used to fill in unspecified attributes of the default face. */ | |
| 193 | |
|
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25890
diff
changeset
|
194 #include <config.h> |
|
53901
d85f8f2e71f7
Move include stdio.h to same place as in other files.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
53354
diff
changeset
|
195 #include <stdio.h> |
| 2336 | 196 #include <sys/types.h> |
| 197 #include <sys/stat.h> | |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
198 |
| 2336 | 199 #include "lisp.h" |
| 17047 | 200 #include "charset.h" |
|
37700
0e6b93106f2a
Include keyboard.h before frame.h, not after it.
Eli Zaretskii <eliz@gnu.org>
parents:
37679
diff
changeset
|
201 #include "keyboard.h" |
|
18083
c361afa561c5
Include frame.h unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
17047
diff
changeset
|
202 #include "frame.h" |
|
c361afa561c5
Include frame.h unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
17047
diff
changeset
|
203 |
|
29897
cd1bb44e646d
Include fontset.h dependent on HAVE_WINDOW_SYSTEM, not HAVE_X_WINDOWS.
Dave Love <fx@gnu.org>
parents:
29768
diff
changeset
|
204 #ifdef HAVE_WINDOW_SYSTEM |
|
cd1bb44e646d
Include fontset.h dependent on HAVE_WINDOW_SYSTEM, not HAVE_X_WINDOWS.
Dave Love <fx@gnu.org>
parents:
29768
diff
changeset
|
205 #include "fontset.h" |
|
31570
9eeff4863080
Remove conditional compilation on SCALABLE_FONTS.
Gerd Moellmann <gerd@gnu.org>
parents:
31522
diff
changeset
|
206 #endif /* HAVE_WINDOW_SYSTEM */ |
|
9eeff4863080
Remove conditional compilation on SCALABLE_FONTS.
Gerd Moellmann <gerd@gnu.org>
parents:
31522
diff
changeset
|
207 |
| 9572 | 208 #ifdef HAVE_X_WINDOWS |
| 2336 | 209 #include "xterm.h" |
|
25883
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
210 #ifdef USE_MOTIF |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
211 #include <Xm/Xm.h> |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
212 #include <Xm/XmStrDefs.h> |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
213 #endif /* USE_MOTIF */ |
|
31570
9eeff4863080
Remove conditional compilation on SCALABLE_FONTS.
Gerd Moellmann <gerd@gnu.org>
parents:
31522
diff
changeset
|
214 #endif /* HAVE_X_WINDOWS */ |
| 24995 | 215 |
| 9572 | 216 #ifdef MSDOS |
| 217 #include "dosfns.h" | |
| 218 #endif | |
| 24995 | 219 |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
220 #ifdef WINDOWSNT |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
221 #include "w32term.h" |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
222 #include "fontset.h" |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
223 /* Redefine X specifics to W32 equivalents to avoid cluttering the |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
224 code with #ifdef blocks. */ |
|
37700
0e6b93106f2a
Include keyboard.h before frame.h, not after it.
Eli Zaretskii <eliz@gnu.org>
parents:
37679
diff
changeset
|
225 #undef FRAME_X_DISPLAY_INFO |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
226 #define FRAME_X_DISPLAY_INFO FRAME_W32_DISPLAY_INFO |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
227 #define x_display_info w32_display_info |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
228 #define FRAME_X_FONT_TABLE FRAME_W32_FONT_TABLE |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
229 #define check_x check_w32 |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
230 #define x_list_fonts w32_list_fonts |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
231 #define GCGraphicsExposures 0 |
|
31570
9eeff4863080
Remove conditional compilation on SCALABLE_FONTS.
Gerd Moellmann <gerd@gnu.org>
parents:
31522
diff
changeset
|
232 #endif /* WINDOWSNT */ |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
233 |
|
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44705
diff
changeset
|
234 #ifdef MAC_OS |
|
32752
923b8d6d8277
Initial check-in: changes for building Emacs under Mac OS.
Andrew Choi <akochoi@shaw.ca>
parents:
32176
diff
changeset
|
235 #include "macterm.h" |
|
923b8d6d8277
Initial check-in: changes for building Emacs under Mac OS.
Andrew Choi <akochoi@shaw.ca>
parents:
32176
diff
changeset
|
236 #define x_display_info mac_display_info |
|
923b8d6d8277
Initial check-in: changes for building Emacs under Mac OS.
Andrew Choi <akochoi@shaw.ca>
parents:
32176
diff
changeset
|
237 #define check_x check_mac |
|
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44705
diff
changeset
|
238 #endif /* MAC_OS */ |
|
32752
923b8d6d8277
Initial check-in: changes for building Emacs under Mac OS.
Andrew Choi <akochoi@shaw.ca>
parents:
32176
diff
changeset
|
239 |
| 2336 | 240 #include "buffer.h" |
| 2391 | 241 #include "dispextern.h" |
| 2438 | 242 #include "blockinput.h" |
|
2767
482fa0725db6
* xfaces.c (intern_frame_face): Exchange order of arguments, to
Jim Blandy <jimb@redhat.com>
parents:
2743
diff
changeset
|
243 #include "window.h" |
| 8848 | 244 #include "intervals.h" |
| 2336 | 245 |
| 9572 | 246 #ifdef HAVE_X_WINDOWS |
| 24995 | 247 |
| 248 /* Compensate for a bug in Xos.h on some systems, on which it requires | |
|
3997
d968bcba16af
* xfaces.c [XOS_NEEDS_TIME_H]: #undef USG while #including
Jim Blandy <jimb@redhat.com>
parents:
3882
diff
changeset
|
249 time.h. On some such systems, Xos.h tries to redefine struct |
|
d968bcba16af
* xfaces.c [XOS_NEEDS_TIME_H]: #undef USG while #including
Jim Blandy <jimb@redhat.com>
parents:
3882
diff
changeset
|
250 timeval and struct timezone if USG is #defined while it is |
|
d968bcba16af
* xfaces.c [XOS_NEEDS_TIME_H]: #undef USG while #including
Jim Blandy <jimb@redhat.com>
parents:
3882
diff
changeset
|
251 #included. */ |
| 24995 | 252 |
|
3436
291f28da7ea1
Test XOS_NEEDS_TIME_H, not HPUX, for including time.hj.
Richard M. Stallman <rms@gnu.org>
parents:
3401
diff
changeset
|
253 #ifdef XOS_NEEDS_TIME_H |
|
3997
d968bcba16af
* xfaces.c [XOS_NEEDS_TIME_H]: #undef USG while #including
Jim Blandy <jimb@redhat.com>
parents:
3882
diff
changeset
|
254 #include <time.h> |
|
d968bcba16af
* xfaces.c [XOS_NEEDS_TIME_H]: #undef USG while #including
Jim Blandy <jimb@redhat.com>
parents:
3882
diff
changeset
|
255 #undef USG |
|
d968bcba16af
* xfaces.c [XOS_NEEDS_TIME_H]: #undef USG while #including
Jim Blandy <jimb@redhat.com>
parents:
3882
diff
changeset
|
256 #include <X11/Xos.h> |
|
d968bcba16af
* xfaces.c [XOS_NEEDS_TIME_H]: #undef USG while #including
Jim Blandy <jimb@redhat.com>
parents:
3882
diff
changeset
|
257 #define USG |
|
d968bcba16af
* xfaces.c [XOS_NEEDS_TIME_H]: #undef USG while #including
Jim Blandy <jimb@redhat.com>
parents:
3882
diff
changeset
|
258 #define __TIMEVAL__ |
| 24995 | 259 #else /* not XOS_NEEDS_TIME_H */ |
| 2336 | 260 #include <X11/Xos.h> |
| 24995 | 261 #endif /* not XOS_NEEDS_TIME_H */ |
| 262 | |
| 9572 | 263 #endif /* HAVE_X_WINDOWS */ |
| 24995 | 264 |
| 265 #include <ctype.h> | |
| 266 | |
| 267 #define abs(X) ((X) < 0 ? -(X) : (X)) | |
| 268 | |
| 34882 | 269 /* Number of pt per inch (from the TeXbook). */ |
| 270 | |
| 271 #define PT_PER_INCH 72.27 | |
| 272 | |
| 24995 | 273 /* Non-zero if face attribute ATTR is unspecified. */ |
| 274 | |
| 275 #define UNSPECIFIEDP(ATTR) EQ ((ATTR), Qunspecified) | |
| 276 | |
| 277 /* Value is the number of elements of VECTOR. */ | |
| 278 | |
| 279 #define DIM(VECTOR) (sizeof (VECTOR) / sizeof *(VECTOR)) | |
| 280 | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
281 /* Make a copy of string S on the stack using alloca. Value is a pointer |
| 24995 | 282 to the copy. */ |
| 283 | |
| 284 #define STRDUPA(S) strcpy ((char *) alloca (strlen ((S)) + 1), (S)) | |
| 285 | |
| 286 /* Make a copy of the contents of Lisp string S on the stack using | |
| 287 alloca. Value is a pointer to the copy. */ | |
| 288 | |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
289 #define LSTRDUPA(S) STRDUPA (SDATA ((S))) |
| 24995 | 290 |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
291 /* Size of hash table of realized faces in face caches (should be a |
| 24995 | 292 prime number). */ |
| 293 | |
| 294 #define FACE_CACHE_BUCKETS_SIZE 1001 | |
| 295 | |
| 296 /* Keyword symbols used for face attribute names. */ | |
| 297 | |
| 298 Lisp_Object QCfamily, QCheight, QCweight, QCslant, QCunderline; | |
| 299 Lisp_Object QCinverse_video, QCforeground, QCbackground, QCstipple; | |
| 300 Lisp_Object QCwidth, QCfont, QCbold, QCitalic; | |
| 301 Lisp_Object QCreverse_video; | |
| 31178 | 302 Lisp_Object QCoverline, QCstrike_through, QCbox, QCinherit; |
| 24995 | 303 |
| 304 /* Symbols used for attribute values. */ | |
| 305 | |
| 306 Lisp_Object Qnormal, Qbold, Qultra_light, Qextra_light, Qlight; | |
| 307 Lisp_Object Qsemi_light, Qsemi_bold, Qextra_bold, Qultra_bold; | |
| 308 Lisp_Object Qoblique, Qitalic, Qreverse_oblique, Qreverse_italic; | |
| 309 Lisp_Object Qultra_condensed, Qextra_condensed, Qcondensed; | |
| 310 Lisp_Object Qsemi_condensed, Qsemi_expanded, Qexpanded, Qextra_expanded; | |
| 311 Lisp_Object Qultra_expanded; | |
| 312 Lisp_Object Qreleased_button, Qpressed_button; | |
| 313 Lisp_Object QCstyle, QCcolor, QCline_width; | |
|
27114
4efa5e54e9a9
(Qunspecified_fg, Qunspecified_bg): Remove.
Eli Zaretskii <eliz@gnu.org>
parents:
27100
diff
changeset
|
314 Lisp_Object Qunspecified; |
|
4efa5e54e9a9
(Qunspecified_fg, Qunspecified_bg): Remove.
Eli Zaretskii <eliz@gnu.org>
parents:
27100
diff
changeset
|
315 |
|
4efa5e54e9a9
(Qunspecified_fg, Qunspecified_bg): Remove.
Eli Zaretskii <eliz@gnu.org>
parents:
27100
diff
changeset
|
316 char unspecified_fg[] = "unspecified-fg", unspecified_bg[] = "unspecified-bg"; |
| 24995 | 317 |
|
25661
a6e2ae7964fb
(Fx_family_fonts): Replaces Fx_font_list.
Gerd Moellmann <gerd@gnu.org>
parents:
25592
diff
changeset
|
318 /* The name of the function to call when the background of the frame |
|
a6e2ae7964fb
(Fx_family_fonts): Replaces Fx_font_list.
Gerd Moellmann <gerd@gnu.org>
parents:
25592
diff
changeset
|
319 has changed, frame_update_face_colors. */ |
|
a6e2ae7964fb
(Fx_family_fonts): Replaces Fx_font_list.
Gerd Moellmann <gerd@gnu.org>
parents:
25592
diff
changeset
|
320 |
|
a6e2ae7964fb
(Fx_family_fonts): Replaces Fx_font_list.
Gerd Moellmann <gerd@gnu.org>
parents:
25592
diff
changeset
|
321 Lisp_Object Qframe_update_face_colors; |
|
a6e2ae7964fb
(Fx_family_fonts): Replaces Fx_font_list.
Gerd Moellmann <gerd@gnu.org>
parents:
25592
diff
changeset
|
322 |
| 24995 | 323 /* Names of basic faces. */ |
| 324 | |
|
26574
5510d0cc07c3
Don't duplicate Qmode_line definition done elsewhere.
Dave Love <fx@gnu.org>
parents:
26088
diff
changeset
|
325 Lisp_Object Qdefault, Qtool_bar, Qregion, Qfringe; |
|
25883
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
326 Lisp_Object Qheader_line, Qscroll_bar, Qcursor, Qborder, Qmouse, Qmenu; |
|
43203
dd98ef3675e5
(Qmode_line_inactive): New face variable for mode-line
Kim F. Storm <storm@cua.dk>
parents:
43069
diff
changeset
|
327 Lisp_Object Qmode_line_inactive; |
|
26574
5510d0cc07c3
Don't duplicate Qmode_line definition done elsewhere.
Dave Love <fx@gnu.org>
parents:
26088
diff
changeset
|
328 extern Lisp_Object Qmode_line; |
|
25592
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
329 |
|
25661
a6e2ae7964fb
(Fx_family_fonts): Replaces Fx_font_list.
Gerd Moellmann <gerd@gnu.org>
parents:
25592
diff
changeset
|
330 /* The symbol `face-alias'. A symbols having that property is an |
|
a6e2ae7964fb
(Fx_family_fonts): Replaces Fx_font_list.
Gerd Moellmann <gerd@gnu.org>
parents:
25592
diff
changeset
|
331 alias for another face. Value of the property is the name of |
|
a6e2ae7964fb
(Fx_family_fonts): Replaces Fx_font_list.
Gerd Moellmann <gerd@gnu.org>
parents:
25592
diff
changeset
|
332 the aliased face. */ |
|
a6e2ae7964fb
(Fx_family_fonts): Replaces Fx_font_list.
Gerd Moellmann <gerd@gnu.org>
parents:
25592
diff
changeset
|
333 |
|
a6e2ae7964fb
(Fx_family_fonts): Replaces Fx_font_list.
Gerd Moellmann <gerd@gnu.org>
parents:
25592
diff
changeset
|
334 Lisp_Object Qface_alias; |
|
a6e2ae7964fb
(Fx_family_fonts): Replaces Fx_font_list.
Gerd Moellmann <gerd@gnu.org>
parents:
25592
diff
changeset
|
335 |
| 24995 | 336 /* Default stipple pattern used on monochrome displays. This stipple |
| 337 pattern is used on monochrome displays instead of shades of gray | |
| 338 for a face background color. See `set-face-stipple' for possible | |
| 339 values for this variable. */ | |
| 340 | |
| 341 Lisp_Object Vface_default_stipple; | |
| 342 | |
| 343 /* Alist of alternative font families. Each element is of the form | |
| 344 (FAMILY FAMILY1 FAMILY2 ...). If fonts of FAMILY can't be loaded, | |
| 345 try FAMILY1, then FAMILY2, ... */ | |
| 346 | |
| 347 Lisp_Object Vface_alternative_font_family_alist; | |
| 348 | |
|
33372
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
349 /* Alist of alternative font registries. Each element is of the form |
|
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
350 (REGISTRY REGISTRY1 REGISTRY2...). If fonts of REGISTRY can't be |
|
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
351 loaded, try REGISTRY1, then REGISTRY2, ... */ |
|
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
352 |
|
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
353 Lisp_Object Vface_alternative_font_registry_alist; |
|
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
354 |
| 24995 | 355 /* Allowed scalable fonts. A value of nil means don't allow any |
| 356 scalable fonts. A value of t means allow the use of any scalable | |
| 357 font. Otherwise, value must be a list of regular expressions. A | |
| 358 font may be scaled if its name matches a regular expression in the | |
| 359 list. */ | |
| 360 | |
|
37394
7847d9b8bbff
(Qscalable_fonts_allowed): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
37206
diff
changeset
|
361 Lisp_Object Vscalable_fonts_allowed, Qscalable_fonts_allowed; |
| 24995 | 362 |
|
34629
10675adcbf6f
(Vface_ignored_fonts): New variable.
Kenichi Handa <handa@m17n.org>
parents:
34289
diff
changeset
|
363 /* List of regular expressions that matches names of fonts to ignore. */ |
|
10675adcbf6f
(Vface_ignored_fonts): New variable.
Kenichi Handa <handa@m17n.org>
parents:
34289
diff
changeset
|
364 |
|
10675adcbf6f
(Vface_ignored_fonts): New variable.
Kenichi Handa <handa@m17n.org>
parents:
34289
diff
changeset
|
365 Lisp_Object Vface_ignored_fonts; |
|
10675adcbf6f
(Vface_ignored_fonts): New variable.
Kenichi Handa <handa@m17n.org>
parents:
34289
diff
changeset
|
366 |
|
50515
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
367 /* Alist of font name patterns vs the rescaling factor. */ |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
368 |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
369 Lisp_Object Vface_font_rescale_alist; |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
370 |
| 25270 | 371 /* Maximum number of fonts to consider in font_list. If not an |
| 372 integer > 0, DEFAULT_FONT_LIST_LIMIT is used instead. */ | |
| 373 | |
| 374 Lisp_Object Vfont_list_limit; | |
| 375 #define DEFAULT_FONT_LIST_LIMIT 100 | |
| 376 | |
| 24995 | 377 /* The symbols `foreground-color' and `background-color' which can be |
| 378 used as part of a `face' property. This is for compatibility with | |
| 379 Emacs 20.2. */ | |
| 380 | |
| 381 Lisp_Object Qforeground_color, Qbackground_color; | |
| 382 | |
| 383 /* The symbols `face' and `mouse-face' used as text properties. */ | |
| 2342 | 384 |
|
23730
c71c3ac4b80a
(Qmouse_face): Replace definition with extern decl.
Richard M. Stallman <rms@gnu.org>
parents:
21766
diff
changeset
|
385 Lisp_Object Qface; |
| 24995 | 386 extern Lisp_Object Qmouse_face; |
| 387 | |
| 388 /* Error symbol for wrong_type_argument in load_pixmap. */ | |
| 389 | |
|
25890
b10a34d40b55
(Qbitmap_spec_p): Replaces Qpixmap_spec_p.
Gerd Moellmann <gerd@gnu.org>
parents:
25883
diff
changeset
|
390 Lisp_Object Qbitmap_spec_p; |
| 2391 | 391 |
| 24995 | 392 /* Alist of global face definitions. Each element is of the form |
| 393 (FACE . LFACE) where FACE is a symbol naming a face and LFACE | |
| 394 is a Lisp vector of face attributes. These faces are used | |
| 395 to initialize faces for new frames. */ | |
| 396 | |
| 397 Lisp_Object Vface_new_frame_defaults; | |
| 398 | |
| 399 /* The next ID to assign to Lisp faces. */ | |
| 400 | |
| 401 static int next_lface_id; | |
| 402 | |
| 403 /* A vector mapping Lisp face Id's to face names. */ | |
| 404 | |
| 405 static Lisp_Object *lface_id_to_name; | |
| 406 static int lface_id_to_name_size; | |
| 407 | |
|
30973
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
408 /* TTY color-related functions (defined in tty-colors.el). */ |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
409 |
|
45718
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
410 Lisp_Object Qtty_color_desc, Qtty_color_by_index, Qtty_color_standard_values; |
| 24995 | 411 |
|
30973
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
412 /* The name of the function used to compute colors on TTYs. */ |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
413 |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
414 Lisp_Object Qtty_color_alist; |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
415 |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
416 /* An alist of defined terminal colors and their RGB values. */ |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
417 |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
418 Lisp_Object Vtty_defined_color_alist; |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
419 |
| 24995 | 420 /* Counter for calls to clear_face_cache. If this counter reaches |
| 421 CLEAR_FONT_TABLE_COUNT, and a frame has more than | |
| 422 CLEAR_FONT_TABLE_NFONTS load, unused fonts are freed. */ | |
| 423 | |
| 424 static int clear_font_table_count; | |
| 425 #define CLEAR_FONT_TABLE_COUNT 100 | |
| 426 #define CLEAR_FONT_TABLE_NFONTS 10 | |
| 427 | |
| 428 /* Non-zero means face attributes have been changed since the last | |
| 429 redisplay. Used in redisplay_internal. */ | |
| 430 | |
| 431 int face_change_count; | |
| 432 | |
|
28529
b8ac36c58391
(tty_suppress_bold_inverse_default_colors_p): New
Gerd Moellmann <gerd@gnu.org>
parents:
28464
diff
changeset
|
433 /* Non-zero means don't display bold text if a face's foreground |
|
b8ac36c58391
(tty_suppress_bold_inverse_default_colors_p): New
Gerd Moellmann <gerd@gnu.org>
parents:
28464
diff
changeset
|
434 and background colors are the inverse of the default colors of the |
|
b8ac36c58391
(tty_suppress_bold_inverse_default_colors_p): New
Gerd Moellmann <gerd@gnu.org>
parents:
28464
diff
changeset
|
435 display. This is a kluge to suppress `bold black' foreground text |
|
b8ac36c58391
(tty_suppress_bold_inverse_default_colors_p): New
Gerd Moellmann <gerd@gnu.org>
parents:
28464
diff
changeset
|
436 which is hard to read on an LCD monitor. */ |
|
b8ac36c58391
(tty_suppress_bold_inverse_default_colors_p): New
Gerd Moellmann <gerd@gnu.org>
parents:
28464
diff
changeset
|
437 |
|
b8ac36c58391
(tty_suppress_bold_inverse_default_colors_p): New
Gerd Moellmann <gerd@gnu.org>
parents:
28464
diff
changeset
|
438 int tty_suppress_bold_inverse_default_colors_p; |
|
b8ac36c58391
(tty_suppress_bold_inverse_default_colors_p): New
Gerd Moellmann <gerd@gnu.org>
parents:
28464
diff
changeset
|
439 |
|
31449
8797df6a9fa2
(Vparam_value_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31440
diff
changeset
|
440 /* A list of the form `((x . y))' used to avoid consing in |
|
8797df6a9fa2
(Vparam_value_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31440
diff
changeset
|
441 Finternal_set_lisp_face_attribute. */ |
|
8797df6a9fa2
(Vparam_value_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31440
diff
changeset
|
442 |
|
8797df6a9fa2
(Vparam_value_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31440
diff
changeset
|
443 static Lisp_Object Vparam_value_alist; |
|
8797df6a9fa2
(Vparam_value_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31440
diff
changeset
|
444 |
| 24995 | 445 /* The total number of colors currently allocated. */ |
| 446 | |
| 447 #if GLYPH_DEBUG | |
| 448 static int ncolors_allocated; | |
| 449 static int npixmaps_allocated; | |
| 450 static int ngcs; | |
| 451 #endif | |
| 452 | |
|
38905
70ef1eb656a6
(menu_face_changed_default): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38818
diff
changeset
|
453 /* Non-zero means the definition of the `menu' face for new frames has |
|
70ef1eb656a6
(menu_face_changed_default): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38818
diff
changeset
|
454 been changed. */ |
|
70ef1eb656a6
(menu_face_changed_default): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38818
diff
changeset
|
455 |
|
70ef1eb656a6
(menu_face_changed_default): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38818
diff
changeset
|
456 int menu_face_changed_default; |
| 24995 | 457 |
| 2336 | 458 |
| 24995 | 459 /* Function prototypes. */ |
| 460 | |
| 461 struct font_name; | |
| 462 struct table_entry; | |
| 463 | |
|
30973
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
464 static void map_tty_color P_ ((struct frame *, struct face *, |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
465 enum lface_attribute_index, int *)); |
|
25883
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
466 static Lisp_Object resolve_face_name P_ ((Lisp_Object)); |
|
46556
71e205b50a3e
(may_use_scalable_font_p): Argument now points to
Ken Raeburn <raeburn@raeburn.org>
parents:
46478
diff
changeset
|
467 static int may_use_scalable_font_p P_ ((const char *)); |
| 24995 | 468 static void set_font_frame_param P_ ((Lisp_Object, Lisp_Object)); |
| 469 static int better_font_p P_ ((int *, struct font_name *, struct font_name *, | |
|
35913
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
470 int, int)); |
| 24995 | 471 static int x_face_list_fonts P_ ((struct frame *, char *, |
|
49859
c6bacc76cfb6
* xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
472 struct font_name **, int, int)); |
| 24995 | 473 static int font_scalable_p P_ ((struct font_name *)); |
| 474 static int get_lface_attributes P_ ((struct frame *, Lisp_Object, Lisp_Object *, int)); | |
| 475 static int load_pixmap P_ ((struct frame *, Lisp_Object, unsigned *, unsigned *)); | |
| 476 static unsigned char *xstrlwr P_ ((unsigned char *)); | |
| 477 static void signal_error P_ ((char *, Lisp_Object)); | |
| 478 static struct frame *frame_or_selected_frame P_ ((Lisp_Object, int)); | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
479 static void load_face_font P_ ((struct frame *, struct face *, int)); |
| 24995 | 480 static void load_face_colors P_ ((struct frame *, struct face *, Lisp_Object *)); |
| 481 static void free_face_colors P_ ((struct frame *, struct face *)); | |
| 482 static int face_color_gray_p P_ ((struct frame *, char *)); | |
| 483 static char *build_font_name P_ ((struct font_name *)); | |
| 484 static void free_font_names P_ ((struct font_name *, int)); | |
| 485 static int sorted_font_list P_ ((struct frame *, char *, | |
| 486 int (*cmpfn) P_ ((const void *, const void *)), | |
| 487 struct font_name **)); | |
|
33372
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
488 static int font_list_1 P_ ((struct frame *, Lisp_Object, Lisp_Object, |
|
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
489 Lisp_Object, struct font_name **)); |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
490 static int font_list P_ ((struct frame *, Lisp_Object, Lisp_Object, |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
491 Lisp_Object, struct font_name **)); |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48384
diff
changeset
|
492 static int try_font_list P_ ((struct frame *, Lisp_Object *, |
|
47618
e620377a0596
(try_font_list): New arg PREFER_FACE_FAMILY. If it is
Kenichi Handa <handa@m17n.org>
parents:
47471
diff
changeset
|
493 Lisp_Object, Lisp_Object, struct font_name **, |
|
e620377a0596
(try_font_list): New arg PREFER_FACE_FAMILY. If it is
Kenichi Handa <handa@m17n.org>
parents:
47471
diff
changeset
|
494 int)); |
|
37679
13efa6105da9
(try_alternative_families): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37433
diff
changeset
|
495 static int try_alternative_families P_ ((struct frame *f, Lisp_Object, |
|
13efa6105da9
(try_alternative_families): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37433
diff
changeset
|
496 Lisp_Object, struct font_name **)); |
| 24995 | 497 static int cmp_font_names P_ ((const void *, const void *)); |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
498 static struct face *realize_face P_ ((struct face_cache *, Lisp_Object *, int, |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
499 struct face *, int)); |
| 24995 | 500 static struct face *realize_x_face P_ ((struct face_cache *, |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
501 Lisp_Object *, int, struct face *)); |
| 24995 | 502 static struct face *realize_tty_face P_ ((struct face_cache *, |
| 503 Lisp_Object *, int)); | |
| 504 static int realize_basic_faces P_ ((struct frame *)); | |
| 505 static int realize_default_face P_ ((struct frame *)); | |
| 506 static void realize_named_face P_ ((struct frame *, Lisp_Object, int)); | |
| 507 static int lface_fully_specified_p P_ ((Lisp_Object *)); | |
| 508 static int lface_equal_p P_ ((Lisp_Object *, Lisp_Object *)); | |
| 509 static unsigned hash_string_case_insensitive P_ ((Lisp_Object)); | |
| 510 static unsigned lface_hash P_ ((Lisp_Object *)); | |
| 511 static int lface_same_font_attributes_p P_ ((Lisp_Object *, Lisp_Object *)); | |
| 512 static struct face_cache *make_face_cache P_ ((struct frame *)); | |
| 513 static void free_realized_face P_ ((struct frame *, struct face *)); | |
| 514 static void clear_face_gcs P_ ((struct face_cache *)); | |
| 515 static void free_face_cache P_ ((struct face_cache *)); | |
| 516 static int face_numeric_weight P_ ((Lisp_Object)); | |
| 517 static int face_numeric_slant P_ ((Lisp_Object)); | |
| 518 static int face_numeric_swidth P_ ((Lisp_Object)); | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
519 static int face_fontset P_ ((Lisp_Object *)); |
|
48384
acfaa904eb56
(load_face_font): Set `face->overstrike' based on result from
Miles Bader <miles@gnu.org>
parents:
47983
diff
changeset
|
520 static char *choose_face_font P_ ((struct frame *, Lisp_Object *, int, int, int*)); |
| 31178 | 521 static void merge_face_vectors P_ ((struct frame *, Lisp_Object *, Lisp_Object*, Lisp_Object)); |
| 522 static void merge_face_inheritance P_ ((struct frame *f, Lisp_Object, | |
| 523 Lisp_Object *, Lisp_Object)); | |
| 24995 | 524 static void merge_face_vector_with_property P_ ((struct frame *, Lisp_Object *, |
| 525 Lisp_Object)); | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
526 static int set_lface_from_font_name P_ ((struct frame *, Lisp_Object, |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
527 Lisp_Object, int, int)); |
| 24995 | 528 static Lisp_Object lface_from_face_name P_ ((struct frame *, Lisp_Object, int)); |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
529 static struct face *make_realized_face P_ ((Lisp_Object *)); |
| 24995 | 530 static void free_realized_faces P_ ((struct face_cache *)); |
| 531 static char *best_matching_font P_ ((struct frame *, Lisp_Object *, | |
|
48384
acfaa904eb56
(load_face_font): Set `face->overstrike' based on result from
Miles Bader <miles@gnu.org>
parents:
47983
diff
changeset
|
532 struct font_name *, int, int, int *)); |
| 24995 | 533 static void cache_face P_ ((struct face_cache *, struct face *, unsigned)); |
| 534 static void uncache_face P_ ((struct face_cache *, struct face *)); | |
| 535 static int xlfd_numeric_slant P_ ((struct font_name *)); | |
| 536 static int xlfd_numeric_weight P_ ((struct font_name *)); | |
| 537 static int xlfd_numeric_swidth P_ ((struct font_name *)); | |
| 538 static Lisp_Object xlfd_symbolic_slant P_ ((struct font_name *)); | |
| 539 static Lisp_Object xlfd_symbolic_weight P_ ((struct font_name *)); | |
| 540 static Lisp_Object xlfd_symbolic_swidth P_ ((struct font_name *)); | |
| 541 static int xlfd_fixed_p P_ ((struct font_name *)); | |
| 542 static int xlfd_numeric_value P_ ((struct table_entry *, int, struct font_name *, | |
| 543 int, int)); | |
| 544 static Lisp_Object xlfd_symbolic_value P_ ((struct table_entry *, int, | |
|
28464
cad4cc0508a0
Fix Lisp_Object/int type confusion revealed by making Lisp_Object a union type:
Ken Raeburn <raeburn@raeburn.org>
parents:
28461
diff
changeset
|
545 struct font_name *, int, |
|
cad4cc0508a0
Fix Lisp_Object/int type confusion revealed by making Lisp_Object a union type:
Ken Raeburn <raeburn@raeburn.org>
parents:
28461
diff
changeset
|
546 Lisp_Object)); |
| 24995 | 547 static struct table_entry *xlfd_lookup_field_contents P_ ((struct table_entry *, int, |
| 548 struct font_name *, int)); | |
|
2730
139740855fa6
* xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents:
2538
diff
changeset
|
549 |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
550 #ifdef HAVE_WINDOW_SYSTEM |
| 24995 | 551 |
| 552 static int split_font_name P_ ((struct frame *, struct font_name *, int)); | |
| 553 static int xlfd_point_size P_ ((struct frame *, struct font_name *)); | |
| 554 static void sort_fonts P_ ((struct frame *, struct font_name *, int, | |
| 555 int (*cmpfn) P_ ((const void *, const void *)))); | |
| 556 static GC x_create_gc P_ ((struct frame *, unsigned long, XGCValues *)); | |
| 557 static void x_free_gc P_ ((struct frame *, GC)); | |
|
38434
86a4e78aeae0
(clear_face_cache): Clear fonts on a display basis.
Gerd Moellmann <gerd@gnu.org>
parents:
38346
diff
changeset
|
558 static void clear_font_table P_ ((struct x_display_info *)); |
| 24995 | 559 |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
560 #ifdef WINDOWSNT |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
561 extern Lisp_Object w32_list_fonts P_ ((struct frame *, Lisp_Object, int, int)); |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
562 #endif /* WINDOWSNT */ |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
563 |
|
36942
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
564 #ifdef USE_X_TOOLKIT |
|
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
565 static void x_update_menu_appearance P_ ((struct frame *)); |
| 39675 | 566 |
| 567 extern void free_frame_menubar P_ ((struct frame *)); | |
|
36942
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
568 #endif /* USE_X_TOOLKIT */ |
|
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
569 |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
570 #endif /* HAVE_WINDOW_SYSTEM */ |
| 24995 | 571 |
| 572 | |
| 573 /*********************************************************************** | |
| 574 Utilities | |
| 575 ***********************************************************************/ | |
| 576 | |
| 577 #ifdef HAVE_X_WINDOWS | |
| 578 | |
|
28354
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
579 #ifdef DEBUG_X_COLORS |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
580 |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
581 /* The following is a poor mans infrastructure for debugging X color |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
582 allocation problems on displays with PseudoColor-8. Some X servers |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
583 like 3.3.5 XF86_SVGA with Matrox cards apparently don't implement |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
584 color reference counts completely so that they don't signal an |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
585 error when a color is freed whose reference count is already 0. |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
586 Other X servers do. To help me debug this, the following code |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
587 implements a simple reference counting schema of its own, for a |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
588 single display/screen. --gerd. */ |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
589 |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
590 /* Reference counts for pixel colors. */ |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
591 |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
592 int color_count[256]; |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
593 |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
594 /* Register color PIXEL as allocated. */ |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
595 |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
596 void |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
597 register_color (pixel) |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
598 unsigned long pixel; |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
599 { |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
600 xassert (pixel < 256); |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
601 ++color_count[pixel]; |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
602 } |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
603 |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
604 |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
605 /* Register color PIXEL as deallocated. */ |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
606 |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
607 void |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
608 unregister_color (pixel) |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
609 unsigned long pixel; |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
610 { |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
611 xassert (pixel < 256); |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
612 if (color_count[pixel] > 0) |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
613 --color_count[pixel]; |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
614 else |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
615 abort (); |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
616 } |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
617 |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
618 |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
619 /* Register N colors from PIXELS as deallocated. */ |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
620 |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
621 void |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
622 unregister_colors (pixels, n) |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
623 unsigned long *pixels; |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
624 int n; |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
625 { |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
626 int i; |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
627 for (i = 0; i < n; ++i) |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
628 unregister_color (pixels[i]); |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
629 } |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
630 |
|
29599
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
631 |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
632 DEFUN ("dump-colors", Fdump_colors, Sdump_colors, 0, 0, 0, |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
633 doc: /* Dump currently allocated colors to stderr. */) |
|
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
634 () |
|
29599
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
635 { |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
636 int i, n; |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
637 |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
638 fputc ('\n', stderr); |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
639 |
|
29599
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
640 for (i = n = 0; i < sizeof color_count / sizeof color_count[0]; ++i) |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
641 if (color_count[i]) |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
642 { |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
643 fprintf (stderr, "%3d: %5d", i, color_count[i]); |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
644 ++n; |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
645 if (n % 5 == 0) |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
646 fputc ('\n', stderr); |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
647 else |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
648 fputc ('\t', stderr); |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
649 } |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
650 |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
651 if (n % 5 != 0) |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
652 fputc ('\n', stderr); |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
653 return Qnil; |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
654 } |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
655 |
|
28354
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
656 #endif /* DEBUG_X_COLORS */ |
|
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
657 |
|
31570
9eeff4863080
Remove conditional compilation on SCALABLE_FONTS.
Gerd Moellmann <gerd@gnu.org>
parents:
31522
diff
changeset
|
658 |
|
27960
25a04100858d
(x_free_colors): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27743
diff
changeset
|
659 /* Free colors used on frame F. PIXELS is an array of NPIXELS pixel |
|
25a04100858d
(x_free_colors): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27743
diff
changeset
|
660 color values. Interrupt input must be blocked when this function |
|
25a04100858d
(x_free_colors): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27743
diff
changeset
|
661 is called. */ |
|
25a04100858d
(x_free_colors): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27743
diff
changeset
|
662 |
|
25a04100858d
(x_free_colors): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27743
diff
changeset
|
663 void |
|
25a04100858d
(x_free_colors): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27743
diff
changeset
|
664 x_free_colors (f, pixels, npixels) |
|
25a04100858d
(x_free_colors): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27743
diff
changeset
|
665 struct frame *f; |
|
25a04100858d
(x_free_colors): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27743
diff
changeset
|
666 unsigned long *pixels; |
|
25a04100858d
(x_free_colors): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27743
diff
changeset
|
667 int npixels; |
|
25a04100858d
(x_free_colors): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27743
diff
changeset
|
668 { |
|
25a04100858d
(x_free_colors): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27743
diff
changeset
|
669 int class = FRAME_X_DISPLAY_INFO (f)->visual->class; |
|
25a04100858d
(x_free_colors): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27743
diff
changeset
|
670 |
|
25a04100858d
(x_free_colors): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27743
diff
changeset
|
671 /* If display has an immutable color map, freeing colors is not |
|
25a04100858d
(x_free_colors): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27743
diff
changeset
|
672 necessary and some servers don't allow it. So don't do it. */ |
|
25a04100858d
(x_free_colors): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27743
diff
changeset
|
673 if (class != StaticColor && class != StaticGray && class != TrueColor) |
|
25a04100858d
(x_free_colors): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27743
diff
changeset
|
674 { |
|
28354
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
675 #ifdef DEBUG_X_COLORS |
|
29599
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
676 unregister_colors (pixels, npixels); |
|
28354
d6ae8188fa58
(register_color, unregister_colors, unregister_colors)
Gerd Moellmann <gerd@gnu.org>
parents:
28349
diff
changeset
|
677 #endif |
|
35228
ae27a81ee8dc
(x_free_colors, x_free_dpy_colors): Do the
Gerd Moellmann <gerd@gnu.org>
parents:
35040
diff
changeset
|
678 XFreeColors (FRAME_X_DISPLAY (f), FRAME_X_COLORMAP (f), |
|
ae27a81ee8dc
(x_free_colors, x_free_dpy_colors): Do the
Gerd Moellmann <gerd@gnu.org>
parents:
35040
diff
changeset
|
679 pixels, npixels, 0); |
|
27960
25a04100858d
(x_free_colors): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27743
diff
changeset
|
680 } |
|
25a04100858d
(x_free_colors): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27743
diff
changeset
|
681 } |
|
25a04100858d
(x_free_colors): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27743
diff
changeset
|
682 |
|
29599
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
683 |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
684 /* Free colors used on frame F. PIXELS is an array of NPIXELS pixel |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
685 color values. Interrupt input must be blocked when this function |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
686 is called. */ |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
687 |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
688 void |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
689 x_free_dpy_colors (dpy, screen, cmap, pixels, npixels) |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
690 Display *dpy; |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
691 Screen *screen; |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
692 Colormap cmap; |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
693 unsigned long *pixels; |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
694 int npixels; |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
695 { |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
696 struct x_display_info *dpyinfo = x_display_info_for_display (dpy); |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
697 int class = dpyinfo->visual->class; |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
698 |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
699 /* If display has an immutable color map, freeing colors is not |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
700 necessary and some servers don't allow it. So don't do it. */ |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
701 if (class != StaticColor && class != StaticGray && class != TrueColor) |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
702 { |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
703 #ifdef DEBUG_X_COLORS |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
704 unregister_colors (pixels, npixels); |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
705 #endif |
|
35228
ae27a81ee8dc
(x_free_colors, x_free_dpy_colors): Do the
Gerd Moellmann <gerd@gnu.org>
parents:
35040
diff
changeset
|
706 XFreeColors (dpy, cmap, pixels, npixels, 0); |
|
29599
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
707 } |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
708 } |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
709 |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
710 |
| 24995 | 711 /* Create and return a GC for use on frame F. GC values and mask |
| 712 are given by XGCV and MASK. */ | |
| 713 | |
| 714 static INLINE GC | |
| 715 x_create_gc (f, mask, xgcv) | |
|
2730
139740855fa6
* xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents:
2538
diff
changeset
|
716 struct frame *f; |
| 24995 | 717 unsigned long mask; |
| 718 XGCValues *xgcv; | |
|
2730
139740855fa6
* xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents:
2538
diff
changeset
|
719 { |
| 2336 | 720 GC gc; |
| 24995 | 721 BLOCK_INPUT; |
| 722 gc = XCreateGC (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), mask, xgcv); | |
| 723 UNBLOCK_INPUT; | |
| 724 IF_DEBUG (++ngcs); | |
| 725 return gc; | |
| 726 } | |
| 727 | |
| 728 | |
| 729 /* Free GC which was used on frame F. */ | |
| 730 | |
| 731 static INLINE void | |
| 732 x_free_gc (f, gc) | |
| 733 struct frame *f; | |
| 734 GC gc; | |
| 735 { | |
|
3074
96b4623fdeb3
* xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents:
3065
diff
changeset
|
736 BLOCK_INPUT; |
| 24995 | 737 xassert (--ngcs >= 0); |
| 738 XFreeGC (FRAME_X_DISPLAY (f), gc); | |
| 739 UNBLOCK_INPUT; | |
| 740 } | |
| 741 | |
| 742 #endif /* HAVE_X_WINDOWS */ | |
| 743 | |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
744 #ifdef WINDOWSNT |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
745 /* W32 emulation of GCs */ |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
746 |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
747 static INLINE GC |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
748 x_create_gc (f, mask, xgcv) |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
749 struct frame *f; |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
750 unsigned long mask; |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
751 XGCValues *xgcv; |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
752 { |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
753 GC gc; |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
754 BLOCK_INPUT; |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
755 gc = XCreateGC (NULL, FRAME_W32_WINDOW (f), mask, xgcv); |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
756 UNBLOCK_INPUT; |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
757 IF_DEBUG (++ngcs); |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
758 return gc; |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
759 } |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
760 |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
761 |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
762 /* Free GC which was used on frame F. */ |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
763 |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
764 static INLINE void |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
765 x_free_gc (f, gc) |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
766 struct frame *f; |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
767 GC gc; |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
768 { |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
769 BLOCK_INPUT; |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
770 xassert (--ngcs >= 0); |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
771 xfree (gc); |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
772 UNBLOCK_INPUT; |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
773 } |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
774 |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
775 #endif /* WINDOWSNT */ |
| 24995 | 776 |
|
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44705
diff
changeset
|
777 #ifdef MAC_OS |
|
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44705
diff
changeset
|
778 /* Mac OS emulation of GCs */ |
|
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44705
diff
changeset
|
779 |
|
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44705
diff
changeset
|
780 extern XGCValues *XCreateGC (void *, Window, unsigned long, XGCValues *); |
|
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44705
diff
changeset
|
781 |
|
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44705
diff
changeset
|
782 static INLINE GC |
|
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44705
diff
changeset
|
783 x_create_gc (f, mask, xgcv) |
|
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44705
diff
changeset
|
784 struct frame *f; |
|
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44705
diff
changeset
|
785 unsigned long mask; |
|
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44705
diff
changeset
|
786 XGCValues *xgcv; |
|
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44705
diff
changeset
|
787 { |
|
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44705
diff
changeset
|
788 GC gc; |
|
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44705
diff
changeset
|
789 gc = XCreateGC (FRAME_MAC_DISPLAY (f), FRAME_MAC_WINDOW (f), mask, xgcv); |
|
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44705
diff
changeset
|
790 return gc; |
|
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44705
diff
changeset
|
791 } |
|
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44705
diff
changeset
|
792 |
|
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44705
diff
changeset
|
793 static INLINE void |
|
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44705
diff
changeset
|
794 x_free_gc (f, gc) |
|
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44705
diff
changeset
|
795 struct frame *f; |
|
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44705
diff
changeset
|
796 GC gc; |
|
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44705
diff
changeset
|
797 { |
|
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44705
diff
changeset
|
798 XFreeGC (FRAME_MAC_DISPLAY (f), gc); |
|
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44705
diff
changeset
|
799 } |
|
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44705
diff
changeset
|
800 |
|
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44705
diff
changeset
|
801 #endif /* MAC_OS */ |
|
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44705
diff
changeset
|
802 |
| 24995 | 803 /* Like stricmp. Used to compare parts of font names which are in |
| 804 ISO8859-1. */ | |
| 805 | |
| 806 int | |
| 807 xstricmp (s1, s2) | |
|
46478
d6b51ec01987
(xstricmp): String pointer args now point to const.
Ken Raeburn <raeburn@raeburn.org>
parents:
46370
diff
changeset
|
808 const unsigned char *s1, *s2; |
| 24995 | 809 { |
| 810 while (*s1 && *s2) | |
| 811 { | |
| 812 unsigned char c1 = tolower (*s1); | |
| 813 unsigned char c2 = tolower (*s2); | |
| 814 if (c1 != c2) | |
| 815 return c1 < c2 ? -1 : 1; | |
| 816 ++s1, ++s2; | |
| 817 } | |
| 818 | |
| 819 if (*s1 == 0) | |
| 820 return *s2 == 0 ? 0 : -1; | |
| 821 return 1; | |
| 822 } | |
| 823 | |
| 824 | |
| 825 /* Like strlwr, which might not always be available. */ | |
| 826 | |
| 827 static unsigned char * | |
| 828 xstrlwr (s) | |
| 829 unsigned char *s; | |
| 830 { | |
| 831 unsigned char *p = s; | |
| 832 | |
| 833 for (p = s; *p; ++p) | |
| 834 *p = tolower (*p); | |
| 835 | |
| 836 return s; | |
| 837 } | |
| 838 | |
| 839 | |
| 840 /* Signal `error' with message S, and additional argument ARG. */ | |
| 841 | |
| 842 static void | |
| 843 signal_error (s, arg) | |
| 844 char *s; | |
| 845 Lisp_Object arg; | |
| 846 { | |
| 847 Fsignal (Qerror, Fcons (build_string (s), Fcons (arg, Qnil))); | |
| 848 } | |
| 849 | |
| 850 | |
|
25678
1878f7ae0df5
(frame_or_selected_frame): Change for Lisp_Object
Gerd Moellmann <gerd@gnu.org>
parents:
25661
diff
changeset
|
851 /* If FRAME is nil, return a pointer to the selected frame. |
|
1878f7ae0df5
(frame_or_selected_frame): Change for Lisp_Object
Gerd Moellmann <gerd@gnu.org>
parents:
25661
diff
changeset
|
852 Otherwise, check that FRAME is a live frame, and return a pointer |
|
1878f7ae0df5
(frame_or_selected_frame): Change for Lisp_Object
Gerd Moellmann <gerd@gnu.org>
parents:
25661
diff
changeset
|
853 to it. NPARAM is the parameter number of FRAME, for |
|
1878f7ae0df5
(frame_or_selected_frame): Change for Lisp_Object
Gerd Moellmann <gerd@gnu.org>
parents:
25661
diff
changeset
|
854 CHECK_LIVE_FRAME. This is here because it's a frequent pattern in |
|
1878f7ae0df5
(frame_or_selected_frame): Change for Lisp_Object
Gerd Moellmann <gerd@gnu.org>
parents:
25661
diff
changeset
|
855 Lisp function definitions. */ |
| 24995 | 856 |
| 857 static INLINE struct frame * | |
| 858 frame_or_selected_frame (frame, nparam) | |
| 859 Lisp_Object frame; | |
| 860 int nparam; | |
| 861 { | |
|
25678
1878f7ae0df5
(frame_or_selected_frame): Change for Lisp_Object
Gerd Moellmann <gerd@gnu.org>
parents:
25661
diff
changeset
|
862 if (NILP (frame)) |
|
1878f7ae0df5
(frame_or_selected_frame): Change for Lisp_Object
Gerd Moellmann <gerd@gnu.org>
parents:
25661
diff
changeset
|
863 frame = selected_frame; |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
864 |
|
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40603
diff
changeset
|
865 CHECK_LIVE_FRAME (frame); |
|
25678
1878f7ae0df5
(frame_or_selected_frame): Change for Lisp_Object
Gerd Moellmann <gerd@gnu.org>
parents:
25661
diff
changeset
|
866 return XFRAME (frame); |
| 24995 | 867 } |
| 868 | |
| 869 | |
| 870 /*********************************************************************** | |
| 871 Frames and faces | |
| 872 ***********************************************************************/ | |
| 873 | |
| 874 /* Initialize face cache and basic faces for frame F. */ | |
|
9529
8e610355cb29
Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents:
9326
diff
changeset
|
875 |
|
8e610355cb29
Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents:
9326
diff
changeset
|
876 void |
| 24995 | 877 init_frame_faces (f) |
| 878 struct frame *f; | |
|
9529
8e610355cb29
Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents:
9326
diff
changeset
|
879 { |
| 24995 | 880 /* Make a face cache, if F doesn't have one. */ |
| 881 if (FRAME_FACE_CACHE (f) == NULL) | |
| 882 FRAME_FACE_CACHE (f) = make_face_cache (f); | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
883 |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
884 #ifdef HAVE_WINDOW_SYSTEM |
| 24995 | 885 /* Make the image cache. */ |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
886 if (FRAME_WINDOW_P (f)) |
|
9529
8e610355cb29
Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents:
9326
diff
changeset
|
887 { |
| 24995 | 888 if (FRAME_X_IMAGE_CACHE (f) == NULL) |
| 889 FRAME_X_IMAGE_CACHE (f) = make_image_cache (); | |
| 890 ++FRAME_X_IMAGE_CACHE (f)->refcount; | |
| 891 } | |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
892 #endif /* HAVE_WINDOW_SYSTEM */ |
| 24995 | 893 |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
894 /* Realize basic faces. Must have enough information in frame |
| 24995 | 895 parameters to realize basic faces at this point. */ |
| 896 #ifdef HAVE_X_WINDOWS | |
| 897 if (!FRAME_X_P (f) || FRAME_X_WINDOW (f)) | |
| 898 #endif | |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
899 #ifdef WINDOWSNT |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
900 if (!FRAME_WINDOW_P (f) || FRAME_W32_WINDOW (f)) |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
901 #endif |
| 45848 | 902 #ifdef MAC_OS |
| 903 if (!FRAME_MAC_P (f) || FRAME_MAC_WINDOW (f)) | |
| 904 #endif | |
| 24995 | 905 if (!realize_basic_faces (f)) |
| 906 abort (); | |
| 907 } | |
| 908 | |
| 909 | |
| 910 /* Free face cache of frame F. Called from Fdelete_frame. */ | |
| 911 | |
| 912 void | |
| 913 free_frame_faces (f) | |
| 914 struct frame *f; | |
| 915 { | |
| 916 struct face_cache *face_cache = FRAME_FACE_CACHE (f); | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
917 |
| 24995 | 918 if (face_cache) |
| 919 { | |
| 920 free_face_cache (face_cache); | |
| 921 FRAME_FACE_CACHE (f) = NULL; | |
| 922 } | |
| 923 | |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
924 #ifdef HAVE_WINDOW_SYSTEM |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
925 if (FRAME_WINDOW_P (f)) |
| 24995 | 926 { |
| 927 struct image_cache *image_cache = FRAME_X_IMAGE_CACHE (f); | |
| 928 if (image_cache) | |
|
9529
8e610355cb29
Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents:
9326
diff
changeset
|
929 { |
| 24995 | 930 --image_cache->refcount; |
| 931 if (image_cache->refcount == 0) | |
| 932 free_image_cache (f); | |
| 933 } | |
| 934 } | |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
935 #endif /* HAVE_WINDOW_SYSTEM */ |
| 24995 | 936 } |
| 937 | |
| 938 | |
|
25592
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
939 /* Clear face caches, and recompute basic faces for frame F. Call |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
940 this after changing frame parameters on which those faces depend, |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
941 or when realized faces have been freed due to changing attributes |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
942 of named faces. */ |
| 24995 | 943 |
| 944 void | |
| 945 recompute_basic_faces (f) | |
| 946 struct frame *f; | |
| 947 { | |
| 948 if (FRAME_FACE_CACHE (f)) | |
| 949 { | |
|
25592
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
950 clear_face_cache (0); |
|
26601
e23e3120d84f
(set_lface_from_font_name): Fix previous change.
Gerd Moellmann <gerd@gnu.org>
parents:
26594
diff
changeset
|
951 if (!realize_basic_faces (f)) |
|
e23e3120d84f
(set_lface_from_font_name): Fix previous change.
Gerd Moellmann <gerd@gnu.org>
parents:
26594
diff
changeset
|
952 abort (); |
| 24995 | 953 } |
| 954 } | |
| 955 | |
| 956 | |
| 957 /* Clear the face caches of all frames. CLEAR_FONTS_P non-zero means | |
| 958 try to free unused fonts, too. */ | |
| 959 | |
| 960 void | |
| 961 clear_face_cache (clear_fonts_p) | |
| 962 int clear_fonts_p; | |
| 963 { | |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
964 #ifdef HAVE_WINDOW_SYSTEM |
| 24995 | 965 Lisp_Object tail, frame; |
| 966 struct frame *f; | |
| 967 | |
| 968 if (clear_fonts_p | |
| 969 || ++clear_font_table_count == CLEAR_FONT_TABLE_COUNT) | |
| 970 { | |
|
38434
86a4e78aeae0
(clear_face_cache): Clear fonts on a display basis.
Gerd Moellmann <gerd@gnu.org>
parents:
38346
diff
changeset
|
971 struct x_display_info *dpyinfo; |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48384
diff
changeset
|
972 |
|
38434
86a4e78aeae0
(clear_face_cache): Clear fonts on a display basis.
Gerd Moellmann <gerd@gnu.org>
parents:
38346
diff
changeset
|
973 /* Fonts are common for frames on one display, i.e. on |
|
86a4e78aeae0
(clear_face_cache): Clear fonts on a display basis.
Gerd Moellmann <gerd@gnu.org>
parents:
38346
diff
changeset
|
974 one X screen. */ |
|
86a4e78aeae0
(clear_face_cache): Clear fonts on a display basis.
Gerd Moellmann <gerd@gnu.org>
parents:
38346
diff
changeset
|
975 for (dpyinfo = x_display_list; dpyinfo; dpyinfo = dpyinfo->next) |
|
86a4e78aeae0
(clear_face_cache): Clear fonts on a display basis.
Gerd Moellmann <gerd@gnu.org>
parents:
38346
diff
changeset
|
976 if (dpyinfo->n_fonts > CLEAR_FONT_TABLE_NFONTS) |
|
86a4e78aeae0
(clear_face_cache): Clear fonts on a display basis.
Gerd Moellmann <gerd@gnu.org>
parents:
38346
diff
changeset
|
977 clear_font_table (dpyinfo); |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48384
diff
changeset
|
978 |
| 24995 | 979 /* From time to time see if we can unload some fonts. This also |
| 980 frees all realized faces on all frames. Fonts needed by | |
| 981 faces will be loaded again when faces are realized again. */ | |
| 982 clear_font_table_count = 0; | |
| 983 | |
| 984 FOR_EACH_FRAME (tail, frame) | |
| 985 { | |
|
38434
86a4e78aeae0
(clear_face_cache): Clear fonts on a display basis.
Gerd Moellmann <gerd@gnu.org>
parents:
38346
diff
changeset
|
986 struct frame *f = XFRAME (frame); |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
987 if (FRAME_WINDOW_P (f) |
| 24995 | 988 && FRAME_X_DISPLAY_INFO (f)->n_fonts > CLEAR_FONT_TABLE_NFONTS) |
|
38434
86a4e78aeae0
(clear_face_cache): Clear fonts on a display basis.
Gerd Moellmann <gerd@gnu.org>
parents:
38346
diff
changeset
|
989 free_all_realized_faces (frame); |
|
9529
8e610355cb29
Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents:
9326
diff
changeset
|
990 } |
|
8e610355cb29
Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents:
9326
diff
changeset
|
991 } |
| 24995 | 992 else |
|
13460
5513606156bc
(unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents:
13363
diff
changeset
|
993 { |
| 24995 | 994 /* Clear GCs of realized faces. */ |
| 995 FOR_EACH_FRAME (tail, frame) | |
|
13460
5513606156bc
(unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents:
13363
diff
changeset
|
996 { |
| 24995 | 997 f = XFRAME (frame); |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
998 if (FRAME_WINDOW_P (f)) |
| 24995 | 999 { |
| 1000 clear_face_gcs (FRAME_FACE_CACHE (f)); | |
| 1001 clear_image_cache (f, 0); | |
| 1002 } | |
|
13460
5513606156bc
(unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents:
13363
diff
changeset
|
1003 } |
|
5513606156bc
(unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents:
13363
diff
changeset
|
1004 } |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
1005 #endif /* HAVE_WINDOW_SYSTEM */ |
|
2730
139740855fa6
* xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents:
2538
diff
changeset
|
1006 } |
|
139740855fa6
* xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents:
2538
diff
changeset
|
1007 |
| 24995 | 1008 |
| 1009 DEFUN ("clear-face-cache", Fclear_face_cache, Sclear_face_cache, 0, 1, 0, | |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
1010 doc: /* Clear face caches on all frames. |
|
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
1011 Optional THOROUGHLY non-nil means try to free unused fonts, too. */) |
|
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
1012 (thoroughly) |
|
35843
c032770ba567
(Fclear_face_cache): Rename the `thorougly' argument
Eli Zaretskii <eliz@gnu.org>
parents:
35443
diff
changeset
|
1013 Lisp_Object thoroughly; |
|
c032770ba567
(Fclear_face_cache): Rename the `thorougly' argument
Eli Zaretskii <eliz@gnu.org>
parents:
35443
diff
changeset
|
1014 { |
|
c032770ba567
(Fclear_face_cache): Rename the `thorougly' argument
Eli Zaretskii <eliz@gnu.org>
parents:
35443
diff
changeset
|
1015 clear_face_cache (!NILP (thoroughly)); |
|
30973
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
1016 ++face_change_count; |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
1017 ++windows_or_buffers_changed; |
| 24995 | 1018 return Qnil; |
|
2730
139740855fa6
* xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents:
2538
diff
changeset
|
1019 } |
|
139740855fa6
* xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents:
2538
diff
changeset
|
1020 |
| 24995 | 1021 |
| 1022 | |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
1023 #ifdef HAVE_WINDOW_SYSTEM |
| 24995 | 1024 |
| 1025 | |
| 38435 | 1026 /* Remove fonts from the font table of DPYINFO except for the default |
| 1027 ASCII fonts of frames on that display. Called from clear_face_cache | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
1028 from time to time. */ |
| 24995 | 1029 |
| 1030 static void | |
|
38434
86a4e78aeae0
(clear_face_cache): Clear fonts on a display basis.
Gerd Moellmann <gerd@gnu.org>
parents:
38346
diff
changeset
|
1031 clear_font_table (dpyinfo) |
|
86a4e78aeae0
(clear_face_cache): Clear fonts on a display basis.
Gerd Moellmann <gerd@gnu.org>
parents:
38346
diff
changeset
|
1032 struct x_display_info *dpyinfo; |
|
86a4e78aeae0
(clear_face_cache): Clear fonts on a display basis.
Gerd Moellmann <gerd@gnu.org>
parents:
38346
diff
changeset
|
1033 { |
| 24995 | 1034 int i; |
| 1035 | |
|
38434
86a4e78aeae0
(clear_face_cache): Clear fonts on a display basis.
Gerd Moellmann <gerd@gnu.org>
parents:
38346
diff
changeset
|
1036 /* Free those fonts that are not used by frames on DPYINFO. */ |
| 24995 | 1037 for (i = 0; i < dpyinfo->n_fonts; ++i) |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
1038 { |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
1039 struct font_info *font_info = dpyinfo->font_table + i; |
|
38434
86a4e78aeae0
(clear_face_cache): Clear fonts on a display basis.
Gerd Moellmann <gerd@gnu.org>
parents:
38346
diff
changeset
|
1040 Lisp_Object tail, frame; |
|
86a4e78aeae0
(clear_face_cache): Clear fonts on a display basis.
Gerd Moellmann <gerd@gnu.org>
parents:
38346
diff
changeset
|
1041 |
|
86a4e78aeae0
(clear_face_cache): Clear fonts on a display basis.
Gerd Moellmann <gerd@gnu.org>
parents:
38346
diff
changeset
|
1042 /* Check if slot is already free. */ |
|
86a4e78aeae0
(clear_face_cache): Clear fonts on a display basis.
Gerd Moellmann <gerd@gnu.org>
parents:
38346
diff
changeset
|
1043 if (font_info->name == NULL) |
|
86a4e78aeae0
(clear_face_cache): Clear fonts on a display basis.
Gerd Moellmann <gerd@gnu.org>
parents:
38346
diff
changeset
|
1044 continue; |
|
86a4e78aeae0
(clear_face_cache): Clear fonts on a display basis.
Gerd Moellmann <gerd@gnu.org>
parents:
38346
diff
changeset
|
1045 |
|
44705
413dd322c77d
(clear_font_table): Don't free the default font of
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43270
diff
changeset
|
1046 /* Don't free a default font of some frame. */ |
|
38434
86a4e78aeae0
(clear_face_cache): Clear fonts on a display basis.
Gerd Moellmann <gerd@gnu.org>
parents:
38346
diff
changeset
|
1047 FOR_EACH_FRAME (tail, frame) |
|
86a4e78aeae0
(clear_face_cache): Clear fonts on a display basis.
Gerd Moellmann <gerd@gnu.org>
parents:
38346
diff
changeset
|
1048 { |
|
86a4e78aeae0
(clear_face_cache): Clear fonts on a display basis.
Gerd Moellmann <gerd@gnu.org>
parents:
38346
diff
changeset
|
1049 struct frame *f = XFRAME (frame); |
|
86a4e78aeae0
(clear_face_cache): Clear fonts on a display basis.
Gerd Moellmann <gerd@gnu.org>
parents:
38346
diff
changeset
|
1050 if (FRAME_WINDOW_P (f) |
|
86a4e78aeae0
(clear_face_cache): Clear fonts on a display basis.
Gerd Moellmann <gerd@gnu.org>
parents:
38346
diff
changeset
|
1051 && font_info->font == FRAME_FONT (f)) |
|
86a4e78aeae0
(clear_face_cache): Clear fonts on a display basis.
Gerd Moellmann <gerd@gnu.org>
parents:
38346
diff
changeset
|
1052 break; |
|
86a4e78aeae0
(clear_face_cache): Clear fonts on a display basis.
Gerd Moellmann <gerd@gnu.org>
parents:
38346
diff
changeset
|
1053 } |
|
86a4e78aeae0
(clear_face_cache): Clear fonts on a display basis.
Gerd Moellmann <gerd@gnu.org>
parents:
38346
diff
changeset
|
1054 |
|
86a4e78aeae0
(clear_face_cache): Clear fonts on a display basis.
Gerd Moellmann <gerd@gnu.org>
parents:
38346
diff
changeset
|
1055 if (!NILP (tail)) |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
1056 continue; |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
1057 |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
1058 /* Free names. */ |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
1059 if (font_info->full_name != font_info->name) |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
1060 xfree (font_info->full_name); |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
1061 xfree (font_info->name); |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
1062 |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
1063 /* Free the font. */ |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
1064 BLOCK_INPUT; |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
1065 #ifdef HAVE_X_WINDOWS |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
1066 XFreeFont (dpyinfo->display, font_info->font); |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
1067 #endif |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
1068 #ifdef WINDOWSNT |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
1069 w32_unload_font (dpyinfo, font_info->font); |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
1070 #endif |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
1071 UNBLOCK_INPUT; |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
1072 |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
1073 /* Mark font table slot free. */ |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
1074 font_info->font = NULL; |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
1075 font_info->name = font_info->full_name = NULL; |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
1076 } |
|
9564
1bfb920ab23e
(intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents:
9529
diff
changeset
|
1077 } |
|
1bfb920ab23e
(intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents:
9529
diff
changeset
|
1078 |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
1079 #endif /* HAVE_WINDOW_SYSTEM */ |
| 24995 | 1080 |
| 1081 | |
| 1082 | |
| 1083 /*********************************************************************** | |
| 1084 X Pixmaps | |
| 1085 ***********************************************************************/ | |
| 1086 | |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
1087 #ifdef HAVE_WINDOW_SYSTEM |
| 24995 | 1088 |
|
25890
b10a34d40b55
(Qbitmap_spec_p): Replaces Qpixmap_spec_p.
Gerd Moellmann <gerd@gnu.org>
parents:
25883
diff
changeset
|
1089 DEFUN ("bitmap-spec-p", Fbitmap_spec_p, Sbitmap_spec_p, 1, 1, 0, |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
1090 doc: /* Value is non-nil if OBJECT is a valid bitmap specification. |
|
39914
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
1091 A bitmap specification is either a string, a file name, or a list |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
1092 \(WIDTH HEIGHT DATA) where WIDTH is the pixel width of the bitmap, |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
1093 HEIGHT is its height, and DATA is a string containing the bits of |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
1094 the pixmap. Bits are stored row by row, each row occupies |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
1095 \(WIDTH + 7)/8 bytes. */) |
|
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
1096 (object) |
|
14090
24b93860d392
(Fpixmap_spec_p): Harmonize arguments with documentation.
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
1097 Lisp_Object object; |
|
9564
1bfb920ab23e
(intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents:
9529
diff
changeset
|
1098 { |
|
25883
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
1099 int pixmap_p = 0; |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
1100 |
|
25883
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
1101 if (STRINGP (object)) |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
1102 /* If OBJECT is a string, it's a file name. */ |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
1103 pixmap_p = 1; |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
1104 else if (CONSP (object)) |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
1105 { |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
1106 /* Otherwise OBJECT must be (WIDTH HEIGHT DATA), WIDTH and |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
1107 HEIGHT must be integers > 0, and DATA must be string large |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
1108 enough to hold a bitmap of the specified size. */ |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
1109 Lisp_Object width, height, data; |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
1110 |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
1111 height = width = data = Qnil; |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
1112 |
|
25883
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
1113 if (CONSP (object)) |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
1114 { |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
1115 width = XCAR (object); |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
1116 object = XCDR (object); |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
1117 if (CONSP (object)) |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
1118 { |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
1119 height = XCAR (object); |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
1120 object = XCDR (object); |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
1121 if (CONSP (object)) |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
1122 data = XCAR (object); |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
1123 } |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
1124 } |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
1125 |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
1126 if (NATNUMP (width) && NATNUMP (height) && STRINGP (data)) |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
1127 { |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
1128 int bytes_per_row = ((XFASTINT (width) + BITS_PER_CHAR - 1) |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
1129 / BITS_PER_CHAR); |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
1130 if (SBYTES (data) >= bytes_per_row * XINT (height)) |
|
25883
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
1131 pixmap_p = 1; |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
1132 } |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
1133 } |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
1134 |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
1135 return pixmap_p ? Qt : Qnil; |
|
9564
1bfb920ab23e
(intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents:
9529
diff
changeset
|
1136 } |
|
1bfb920ab23e
(intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents:
9529
diff
changeset
|
1137 |
| 24995 | 1138 |
| 1139 /* Load a bitmap according to NAME (which is either a file name or a | |
| 1140 pixmap spec) for use on frame F. Value is the bitmap_id (see | |
| 1141 xfns.c). If NAME is nil, return with a bitmap id of zero. If | |
| 1142 bitmap cannot be loaded, display a message saying so, and return | |
| 1143 zero. Store the bitmap width in *W_PTR and its height in *H_PTR, | |
| 1144 if these pointers are not null. */ | |
| 1145 | |
| 1146 static int | |
|
9564
1bfb920ab23e
(intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents:
9529
diff
changeset
|
1147 load_pixmap (f, name, w_ptr, h_ptr) |
|
9902
32ed712a45a3
(load_pixmap): Handle bitmap_id < 0. F is a FRAME_PTR.
Richard M. Stallman <rms@gnu.org>
parents:
9671
diff
changeset
|
1148 FRAME_PTR f; |
|
9564
1bfb920ab23e
(intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents:
9529
diff
changeset
|
1149 Lisp_Object name; |
|
1bfb920ab23e
(intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents:
9529
diff
changeset
|
1150 unsigned int *w_ptr, *h_ptr; |
|
1bfb920ab23e
(intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents:
9529
diff
changeset
|
1151 { |
|
1bfb920ab23e
(intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents:
9529
diff
changeset
|
1152 int bitmap_id; |
|
1bfb920ab23e
(intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents:
9529
diff
changeset
|
1153 Lisp_Object tem; |
|
1bfb920ab23e
(intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents:
9529
diff
changeset
|
1154 |
|
1bfb920ab23e
(intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents:
9529
diff
changeset
|
1155 if (NILP (name)) |
| 24995 | 1156 return 0; |
|
9564
1bfb920ab23e
(intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents:
9529
diff
changeset
|
1157 |
|
25890
b10a34d40b55
(Qbitmap_spec_p): Replaces Qpixmap_spec_p.
Gerd Moellmann <gerd@gnu.org>
parents:
25883
diff
changeset
|
1158 tem = Fbitmap_spec_p (name); |
|
9564
1bfb920ab23e
(intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents:
9529
diff
changeset
|
1159 if (NILP (tem)) |
|
25890
b10a34d40b55
(Qbitmap_spec_p): Replaces Qpixmap_spec_p.
Gerd Moellmann <gerd@gnu.org>
parents:
25883
diff
changeset
|
1160 wrong_type_argument (Qbitmap_spec_p, name); |
|
9564
1bfb920ab23e
(intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents:
9529
diff
changeset
|
1161 |
|
1bfb920ab23e
(intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents:
9529
diff
changeset
|
1162 BLOCK_INPUT; |
|
1bfb920ab23e
(intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents:
9529
diff
changeset
|
1163 if (CONSP (name)) |
|
1bfb920ab23e
(intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents:
9529
diff
changeset
|
1164 { |
|
1bfb920ab23e
(intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents:
9529
diff
changeset
|
1165 /* Decode a bitmap spec into a bitmap. */ |
|
1bfb920ab23e
(intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents:
9529
diff
changeset
|
1166 |
|
1bfb920ab23e
(intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents:
9529
diff
changeset
|
1167 int h, w; |
|
1bfb920ab23e
(intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents:
9529
diff
changeset
|
1168 Lisp_Object bits; |
|
1bfb920ab23e
(intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents:
9529
diff
changeset
|
1169 |
|
1bfb920ab23e
(intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents:
9529
diff
changeset
|
1170 w = XINT (Fcar (name)); |
|
1bfb920ab23e
(intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents:
9529
diff
changeset
|
1171 h = XINT (Fcar (Fcdr (name))); |
|
1bfb920ab23e
(intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents:
9529
diff
changeset
|
1172 bits = Fcar (Fcdr (Fcdr (name))); |
|
1bfb920ab23e
(intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents:
9529
diff
changeset
|
1173 |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
1174 bitmap_id = x_create_bitmap_from_data (f, SDATA (bits), |
|
9564
1bfb920ab23e
(intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents:
9529
diff
changeset
|
1175 w, h); |
|
1bfb920ab23e
(intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents:
9529
diff
changeset
|
1176 } |
|
1bfb920ab23e
(intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents:
9529
diff
changeset
|
1177 else |
|
1bfb920ab23e
(intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents:
9529
diff
changeset
|
1178 { |
|
1bfb920ab23e
(intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents:
9529
diff
changeset
|
1179 /* It must be a string -- a file name. */ |
|
1bfb920ab23e
(intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents:
9529
diff
changeset
|
1180 bitmap_id = x_create_bitmap_from_file (f, name); |
|
1bfb920ab23e
(intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents:
9529
diff
changeset
|
1181 } |
|
1bfb920ab23e
(intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents:
9529
diff
changeset
|
1182 UNBLOCK_INPUT; |
|
1bfb920ab23e
(intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents:
9529
diff
changeset
|
1183 |
|
9902
32ed712a45a3
(load_pixmap): Handle bitmap_id < 0. F is a FRAME_PTR.
Richard M. Stallman <rms@gnu.org>
parents:
9671
diff
changeset
|
1184 if (bitmap_id < 0) |
| 24995 | 1185 { |
|
25799
1c370ec939da
(load_pixmap): Call add_to_log without frame parameter.
Gerd Moellmann <gerd@gnu.org>
parents:
25678
diff
changeset
|
1186 add_to_log ("Invalid or undefined bitmap %s", name, Qnil); |
| 24995 | 1187 bitmap_id = 0; |
| 1188 | |
| 1189 if (w_ptr) | |
| 1190 *w_ptr = 0; | |
| 1191 if (h_ptr) | |
| 1192 *h_ptr = 0; | |
| 1193 } | |
| 1194 else | |
| 1195 { | |
| 1196 #if GLYPH_DEBUG | |
| 1197 ++npixmaps_allocated; | |
| 1198 #endif | |
| 1199 if (w_ptr) | |
| 1200 *w_ptr = x_bitmap_width (f, bitmap_id); | |
| 1201 | |
| 1202 if (h_ptr) | |
| 1203 *h_ptr = x_bitmap_height (f, bitmap_id); | |
| 1204 } | |
|
9564
1bfb920ab23e
(intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents:
9529
diff
changeset
|
1205 |
|
1bfb920ab23e
(intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents:
9529
diff
changeset
|
1206 return bitmap_id; |
|
2730
139740855fa6
* xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents:
2538
diff
changeset
|
1207 } |
| 9572 | 1208 |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
1209 #endif /* HAVE_WINDOW_SYSTEM */ |
| 24995 | 1210 |
| 9572 | 1211 |
| 2336 | 1212 |
| 24995 | 1213 /*********************************************************************** |
| 1214 Fonts | |
| 1215 ***********************************************************************/ | |
| 1216 | |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
1217 #ifdef HAVE_WINDOW_SYSTEM |
| 24995 | 1218 |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
1219 /* Load font of face FACE which is used on frame F to display |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
1220 character C. The name of the font to load is determined by lface |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
1221 and fontset of FACE. */ |
|
6784
d41c216ccd27
(frame_update_line_height): Check param_faces[i] not null.
Richard M. Stallman <rms@gnu.org>
parents:
6768
diff
changeset
|
1222 |
|
3074
96b4623fdeb3
* xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents:
3065
diff
changeset
|
1223 static void |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
1224 load_face_font (f, face, c) |
| 24995 | 1225 struct frame *f; |
| 1226 struct face *face; | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
1227 int c; |
| 24995 | 1228 { |
| 1229 struct font_info *font_info = NULL; | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
1230 char *font_name; |
|
48384
acfaa904eb56
(load_face_font): Set `face->overstrike' based on result from
Miles Bader <miles@gnu.org>
parents:
47983
diff
changeset
|
1231 int needs_overstrike; |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
1232 |
| 24995 | 1233 face->font_info_id = -1; |
| 1234 face->font = NULL; | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
1235 |
|
48384
acfaa904eb56
(load_face_font): Set `face->overstrike' based on result from
Miles Bader <miles@gnu.org>
parents:
47983
diff
changeset
|
1236 font_name = choose_face_font (f, face->lface, face->fontset, c, |
|
acfaa904eb56
(load_face_font): Set `face->overstrike' based on result from
Miles Bader <miles@gnu.org>
parents:
47983
diff
changeset
|
1237 &needs_overstrike); |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
1238 if (!font_name) |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
1239 return; |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
1240 |
| 24995 | 1241 BLOCK_INPUT; |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
1242 font_info = FS_LOAD_FACE_FONT (f, c, font_name, face); |
| 24995 | 1243 UNBLOCK_INPUT; |
| 1244 | |
| 1245 if (font_info) | |
| 1246 { | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
1247 face->font_info_id = font_info->font_idx; |
| 24995 | 1248 face->font = font_info->font; |
| 1249 face->font_name = font_info->full_name; | |
|
48384
acfaa904eb56
(load_face_font): Set `face->overstrike' based on result from
Miles Bader <miles@gnu.org>
parents:
47983
diff
changeset
|
1250 face->overstrike = needs_overstrike; |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
1251 if (face->gc) |
| 24995 | 1252 { |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
1253 x_free_gc (f, face->gc); |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
1254 face->gc = 0; |
| 24995 | 1255 } |
| 1256 } | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
1257 else |
|
25799
1c370ec939da
(load_pixmap): Call add_to_log without frame parameter.
Gerd Moellmann <gerd@gnu.org>
parents:
25678
diff
changeset
|
1258 add_to_log ("Unable to load font %s", |
|
25301
2042c4a224ad
(add_to_log): Renamed from display_message.
Gerd Moellmann <gerd@gnu.org>
parents:
25270
diff
changeset
|
1259 build_string (font_name), Qnil); |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
1260 xfree (font_name); |
| 24995 | 1261 } |
| 1262 | |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
1263 #endif /* HAVE_WINDOW_SYSTEM */ |
| 24995 | 1264 |
| 1265 | |
| 1266 | |
| 1267 /*********************************************************************** | |
| 1268 X Colors | |
| 1269 ***********************************************************************/ | |
| 1270 | |
|
45718
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1271 /* Parse RGB_LIST, and fill in the RGB fields of COLOR. |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1272 RGB_LIST should contain (at least) 3 lisp integers. |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1273 Return 0 if there's a problem with RGB_LIST, otherwise return 1. */ |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1274 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1275 static int |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1276 parse_rgb_list (rgb_list, color) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1277 Lisp_Object rgb_list; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1278 XColor *color; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1279 { |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1280 #define PARSE_RGB_LIST_FIELD(field) \ |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1281 if (CONSP (rgb_list) && INTEGERP (XCAR (rgb_list))) \ |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1282 { \ |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1283 color->field = XINT (XCAR (rgb_list)); \ |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1284 rgb_list = XCDR (rgb_list); \ |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1285 } \ |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1286 else \ |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1287 return 0; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1288 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1289 PARSE_RGB_LIST_FIELD (red); |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1290 PARSE_RGB_LIST_FIELD (green); |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1291 PARSE_RGB_LIST_FIELD (blue); |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1292 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1293 return 1; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1294 } |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1295 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1296 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1297 /* Lookup on frame F the color described by the lisp string COLOR. |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1298 The resulting tty color is returned in TTY_COLOR; if STD_COLOR is |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1299 non-zero, then the `standard' definition of the same color is |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1300 returned in it. */ |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1301 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1302 static int |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1303 tty_lookup_color (f, color, tty_color, std_color) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1304 struct frame *f; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1305 Lisp_Object color; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1306 XColor *tty_color, *std_color; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1307 { |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1308 Lisp_Object frame, color_desc; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1309 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1310 if (!STRINGP (color) || NILP (Ffboundp (Qtty_color_desc))) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1311 return 0; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1312 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1313 XSETFRAME (frame, f); |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1314 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1315 color_desc = call2 (Qtty_color_desc, color, frame); |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1316 if (CONSP (color_desc) && CONSP (XCDR (color_desc))) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1317 { |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1318 Lisp_Object rgb; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1319 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1320 if (! INTEGERP (XCAR (XCDR (color_desc)))) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1321 return 0; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1322 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1323 tty_color->pixel = XINT (XCAR (XCDR (color_desc))); |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1324 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1325 rgb = XCDR (XCDR (color_desc)); |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1326 if (! parse_rgb_list (rgb, tty_color)) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1327 return 0; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1328 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1329 /* Should we fill in STD_COLOR too? */ |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1330 if (std_color) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1331 { |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1332 /* Default STD_COLOR to the same as TTY_COLOR. */ |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1333 *std_color = *tty_color; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1334 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1335 /* Do a quick check to see if the returned descriptor is |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1336 actually _exactly_ equal to COLOR, otherwise we have to |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1337 lookup STD_COLOR separately. If it's impossible to lookup |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1338 a standard color, we just give up and use TTY_COLOR. */ |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1339 if ((!STRINGP (XCAR (color_desc)) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1340 || NILP (Fstring_equal (color, XCAR (color_desc)))) |
|
45746
8f026a28517c
(tty_lookup_color): Type bool/Lisp_Object mismatch fixed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45718
diff
changeset
|
1341 && !NILP (Ffboundp (Qtty_color_standard_values))) |
|
45718
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1342 { |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1343 /* Look up STD_COLOR separately. */ |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1344 rgb = call1 (Qtty_color_standard_values, color); |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1345 if (! parse_rgb_list (rgb, std_color)) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1346 return 0; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1347 } |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1348 } |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1349 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1350 return 1; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1351 } |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1352 else if (NILP (Fsymbol_value (intern ("tty-defined-color-alist")))) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1353 /* We were called early during startup, and the colors are not |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1354 yet set up in tty-defined-color-alist. Don't return a failure |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1355 indication, since this produces the annoying "Unable to |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1356 load color" messages in the *Messages* buffer. */ |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1357 return 1; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1358 else |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1359 /* tty-color-desc seems to have returned a bad value. */ |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1360 return 0; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1361 } |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1362 |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1363 /* A version of defined_color for non-X frames. */ |
|
29599
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1364 |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1365 int |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1366 tty_defined_color (f, color_name, color_def, alloc) |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1367 struct frame *f; |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1368 char *color_name; |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1369 XColor *color_def; |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1370 int alloc; |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1371 { |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1372 int status = 1; |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1373 |
|
45718
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1374 /* Defaults. */ |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48384
diff
changeset
|
1375 color_def->pixel = FACE_TTY_DEFAULT_COLOR; |
|
45718
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1376 color_def->red = 0; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1377 color_def->blue = 0; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1378 color_def->green = 0; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1379 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1380 if (*color_name) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1381 status = tty_lookup_color (f, build_string (color_name), color_def, 0); |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1382 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1383 if (color_def->pixel == FACE_TTY_DEFAULT_COLOR && *color_name) |
|
26902
264b83a3a688
Changes for separate unspecified foreground and background colors
Eli Zaretskii <eliz@gnu.org>
parents:
26875
diff
changeset
|
1384 { |
|
264b83a3a688
Changes for separate unspecified foreground and background colors
Eli Zaretskii <eliz@gnu.org>
parents:
26875
diff
changeset
|
1385 if (strcmp (color_name, "unspecified-fg") == 0) |
|
45718
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1386 color_def->pixel = FACE_TTY_DEFAULT_FG_COLOR; |
|
26902
264b83a3a688
Changes for separate unspecified foreground and background colors
Eli Zaretskii <eliz@gnu.org>
parents:
26875
diff
changeset
|
1387 else if (strcmp (color_name, "unspecified-bg") == 0) |
|
45718
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1388 color_def->pixel = FACE_TTY_DEFAULT_BG_COLOR; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1389 } |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1390 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
1391 if (color_def->pixel != FACE_TTY_DEFAULT_COLOR) |
|
27743
2e020ab026b8
(tty_defined_color): Don't return faulire indication
Eli Zaretskii <eliz@gnu.org>
parents:
27695
diff
changeset
|
1392 status = 1; |
|
2e020ab026b8
(tty_defined_color): Don't return faulire indication
Eli Zaretskii <eliz@gnu.org>
parents:
27695
diff
changeset
|
1393 |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1394 return status; |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1395 } |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1396 |
|
29599
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1397 |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1398 /* Decide if color named COLOR_NAME is valid for the display |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1399 associated with the frame F; if so, return the rgb values in |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1400 COLOR_DEF. If ALLOC is nonzero, allocate a new colormap cell. |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1401 |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1402 This does the right thing for any type of frame. */ |
|
29599
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1403 |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1404 int |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1405 defined_color (f, color_name, color_def, alloc) |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1406 struct frame *f; |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1407 char *color_name; |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1408 XColor *color_def; |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1409 int alloc; |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1410 { |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1411 if (!FRAME_WINDOW_P (f)) |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1412 return tty_defined_color (f, color_name, color_def, alloc); |
| 24995 | 1413 #ifdef HAVE_X_WINDOWS |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1414 else if (FRAME_X_P (f)) |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1415 return x_defined_color (f, color_name, color_def, alloc); |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1416 #endif |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1417 #ifdef WINDOWSNT |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1418 else if (FRAME_W32_P (f)) |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1419 return w32_defined_color (f, color_name, color_def, alloc); |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1420 #endif |
|
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44705
diff
changeset
|
1421 #ifdef MAC_OS |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1422 else if (FRAME_MAC_P (f)) |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1423 return mac_defined_color (f, color_name, color_def, alloc); |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1424 #endif |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1425 else |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1426 abort (); |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1427 } |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1428 |
|
29599
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1429 |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1430 /* Given the index IDX of a tty color on frame F, return its name, a |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1431 Lisp string. */ |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1432 |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1433 Lisp_Object |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1434 tty_color_name (f, idx) |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1435 struct frame *f; |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1436 int idx; |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1437 { |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1438 if (idx >= 0 && !NILP (Ffboundp (Qtty_color_by_index))) |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1439 { |
|
27088
23bd823f11f4
(tty_defined_color): Pass frame to tty-color-desc. The
Eli Zaretskii <eliz@gnu.org>
parents:
26976
diff
changeset
|
1440 Lisp_Object frame; |
|
23bd823f11f4
(tty_defined_color): Pass frame to tty-color-desc. The
Eli Zaretskii <eliz@gnu.org>
parents:
26976
diff
changeset
|
1441 Lisp_Object coldesc; |
|
23bd823f11f4
(tty_defined_color): Pass frame to tty-color-desc. The
Eli Zaretskii <eliz@gnu.org>
parents:
26976
diff
changeset
|
1442 |
|
23bd823f11f4
(tty_defined_color): Pass frame to tty-color-desc. The
Eli Zaretskii <eliz@gnu.org>
parents:
26976
diff
changeset
|
1443 XSETFRAME (frame, f); |
|
23bd823f11f4
(tty_defined_color): Pass frame to tty-color-desc. The
Eli Zaretskii <eliz@gnu.org>
parents:
26976
diff
changeset
|
1444 coldesc = call2 (Qtty_color_by_index, make_number (idx), frame); |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1445 |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1446 if (!NILP (coldesc)) |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1447 return XCAR (coldesc); |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1448 } |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1449 #ifdef MSDOS |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1450 /* We can have an MSDOG frame under -nw for a short window of |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1451 opportunity before internal_terminal_init is called. DTRT. */ |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1452 if (FRAME_MSDOS_P (f) && !inhibit_window_system) |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1453 return msdos_stdcolor_name (idx); |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1454 #endif |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1455 |
|
27114
4efa5e54e9a9
(Qunspecified_fg, Qunspecified_bg): Remove.
Eli Zaretskii <eliz@gnu.org>
parents:
27100
diff
changeset
|
1456 if (idx == FACE_TTY_DEFAULT_FG_COLOR) |
|
4efa5e54e9a9
(Qunspecified_fg, Qunspecified_bg): Remove.
Eli Zaretskii <eliz@gnu.org>
parents:
27100
diff
changeset
|
1457 return build_string (unspecified_fg); |
|
4efa5e54e9a9
(Qunspecified_fg, Qunspecified_bg): Remove.
Eli Zaretskii <eliz@gnu.org>
parents:
27100
diff
changeset
|
1458 if (idx == FACE_TTY_DEFAULT_BG_COLOR) |
|
4efa5e54e9a9
(Qunspecified_fg, Qunspecified_bg): Remove.
Eli Zaretskii <eliz@gnu.org>
parents:
27100
diff
changeset
|
1459 return build_string (unspecified_bg); |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
1460 |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
1461 #ifdef WINDOWSNT |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
1462 return vga_stdcolor_name (idx); |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
1463 #endif |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
1464 |
|
27114
4efa5e54e9a9
(Qunspecified_fg, Qunspecified_bg): Remove.
Eli Zaretskii <eliz@gnu.org>
parents:
27100
diff
changeset
|
1465 return Qunspecified; |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1466 } |
| 24995 | 1467 |
|
29599
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1468 |
| 24995 | 1469 /* Return non-zero if COLOR_NAME is a shade of gray (or white or |
| 1470 black) on frame F. The algorithm is taken from 20.2 faces.el. */ | |
| 1471 | |
| 1472 static int | |
| 1473 face_color_gray_p (f, color_name) | |
| 1474 struct frame *f; | |
| 1475 char *color_name; | |
| 1476 { | |
| 1477 XColor color; | |
| 1478 int gray_p; | |
| 1479 | |
| 1480 if (defined_color (f, color_name, &color, 0)) | |
| 1481 gray_p = ((abs (color.red - color.green) | |
| 1482 < max (color.red, color.green) / 20) | |
| 1483 && (abs (color.green - color.blue) | |
| 1484 < max (color.green, color.blue) / 20) | |
| 1485 && (abs (color.blue - color.red) | |
| 1486 < max (color.blue, color.red) / 20)); | |
| 1487 else | |
| 1488 gray_p = 0; | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
1489 |
| 24995 | 1490 return gray_p; |
| 1491 } | |
| 1492 | |
| 1493 | |
| 1494 /* Return non-zero if color COLOR_NAME can be displayed on frame F. | |
| 1495 BACKGROUND_P non-zero means the color will be used as background | |
| 1496 color. */ | |
| 1497 | |
| 1498 static int | |
| 1499 face_color_supported_p (f, color_name, background_p) | |
| 1500 struct frame *f; | |
| 1501 char *color_name; | |
| 1502 int background_p; | |
| 1503 { | |
| 1504 Lisp_Object frame; | |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1505 XColor not_used; |
| 24995 | 1506 |
| 1507 XSETFRAME (frame, f); | |
|
26972
68a3d8530f6c
(face_color_supported_p): Check by tty_defined_color
Kenichi Handa <handa@m17n.org>
parents:
26913
diff
changeset
|
1508 return (FRAME_WINDOW_P (f) |
|
68a3d8530f6c
(face_color_supported_p): Check by tty_defined_color
Kenichi Handa <handa@m17n.org>
parents:
26913
diff
changeset
|
1509 ? (!NILP (Fxw_display_color_p (frame)) |
|
68a3d8530f6c
(face_color_supported_p): Check by tty_defined_color
Kenichi Handa <handa@m17n.org>
parents:
26913
diff
changeset
|
1510 || xstricmp (color_name, "black") == 0 |
|
68a3d8530f6c
(face_color_supported_p): Check by tty_defined_color
Kenichi Handa <handa@m17n.org>
parents:
26913
diff
changeset
|
1511 || xstricmp (color_name, "white") == 0 |
|
68a3d8530f6c
(face_color_supported_p): Check by tty_defined_color
Kenichi Handa <handa@m17n.org>
parents:
26913
diff
changeset
|
1512 || (background_p |
|
68a3d8530f6c
(face_color_supported_p): Check by tty_defined_color
Kenichi Handa <handa@m17n.org>
parents:
26913
diff
changeset
|
1513 && face_color_gray_p (f, color_name)) |
|
68a3d8530f6c
(face_color_supported_p): Check by tty_defined_color
Kenichi Handa <handa@m17n.org>
parents:
26913
diff
changeset
|
1514 || (!NILP (Fx_display_grayscale_p (frame)) |
|
68a3d8530f6c
(face_color_supported_p): Check by tty_defined_color
Kenichi Handa <handa@m17n.org>
parents:
26913
diff
changeset
|
1515 && face_color_gray_p (f, color_name))) |
|
68a3d8530f6c
(face_color_supported_p): Check by tty_defined_color
Kenichi Handa <handa@m17n.org>
parents:
26913
diff
changeset
|
1516 : tty_defined_color (f, color_name, ¬_used, 0)); |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1517 } |
| 24995 | 1518 |
| 1519 | |
|
27100
9a0d8503806e
(Fcolor_gray_p): Renamed from face-color-gray-p.
Eli Zaretskii <eliz@gnu.org>
parents:
27088
diff
changeset
|
1520 DEFUN ("color-gray-p", Fcolor_gray_p, Scolor_gray_p, 1, 2, 0, |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
1521 doc: /* Return non-nil if COLOR is a shade of gray (or white or black). |
|
39914
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
1522 FRAME specifies the frame and thus the display for interpreting COLOR. |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
1523 If FRAME is nil or omitted, use the selected frame. */) |
|
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
1524 (color, frame) |
| 24995 | 1525 Lisp_Object color, frame; |
| 1526 { | |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1527 struct frame *f; |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1528 |
|
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40603
diff
changeset
|
1529 CHECK_STRING (color); |
|
53267
bec1d17789a6
(Fcolor_gray_p): Fix omission bug:
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
52401
diff
changeset
|
1530 if (NILP (frame)) |
|
bec1d17789a6
(Fcolor_gray_p): Fix omission bug:
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
52401
diff
changeset
|
1531 frame = selected_frame; |
|
bec1d17789a6
(Fcolor_gray_p): Fix omission bug:
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
52401
diff
changeset
|
1532 else |
|
bec1d17789a6
(Fcolor_gray_p): Fix omission bug:
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
52401
diff
changeset
|
1533 CHECK_FRAME (frame); |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1534 f = XFRAME (frame); |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
1535 return face_color_gray_p (f, SDATA (color)) ? Qt : Qnil; |
| 24995 | 1536 } |
| 1537 | |
| 1538 | |
|
27100
9a0d8503806e
(Fcolor_gray_p): Renamed from face-color-gray-p.
Eli Zaretskii <eliz@gnu.org>
parents:
27088
diff
changeset
|
1539 DEFUN ("color-supported-p", Fcolor_supported_p, |
|
47471
8ed65bf4ee3d
(Fcolor_supported_p): Just one arg is required.
Richard M. Stallman <rms@gnu.org>
parents:
46556
diff
changeset
|
1540 Scolor_supported_p, 1, 3, 0, |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
1541 doc: /* Return non-nil if COLOR can be displayed on FRAME. |
|
39914
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
1542 BACKGROUND-P non-nil means COLOR is used as a background. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
1543 If FRAME is nil or omitted, use the selected frame. |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
1544 COLOR must be a valid color name. */) |
|
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
1545 (color, frame, background_p) |
| 24995 | 1546 Lisp_Object frame, color, background_p; |
| 1547 { | |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1548 struct frame *f; |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1549 |
|
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40603
diff
changeset
|
1550 CHECK_STRING (color); |
|
53267
bec1d17789a6
(Fcolor_gray_p): Fix omission bug:
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
52401
diff
changeset
|
1551 if (NILP (frame)) |
|
bec1d17789a6
(Fcolor_gray_p): Fix omission bug:
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
52401
diff
changeset
|
1552 frame = selected_frame; |
|
bec1d17789a6
(Fcolor_gray_p): Fix omission bug:
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
52401
diff
changeset
|
1553 else |
|
bec1d17789a6
(Fcolor_gray_p): Fix omission bug:
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
52401
diff
changeset
|
1554 CHECK_FRAME (frame); |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1555 f = XFRAME (frame); |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
1556 if (face_color_supported_p (f, SDATA (color), !NILP (background_p))) |
| 24995 | 1557 return Qt; |
| 1558 return Qnil; | |
| 1559 } | |
| 1560 | |
|
29599
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1561 |
| 24995 | 1562 /* Load color with name NAME for use by face FACE on frame F. |
| 1563 TARGET_INDEX must be one of LFACE_FOREGROUND_INDEX, | |
| 1564 LFACE_BACKGROUND_INDEX, LFACE_UNDERLINE_INDEX, LFACE_OVERLINE_INDEX, | |
| 1565 LFACE_STRIKE_THROUGH_INDEX, or LFACE_BOX_INDEX. Value is the | |
| 1566 pixel color. If color cannot be loaded, display a message, and | |
| 1567 return the foreground, background or underline color of F, but | |
| 1568 record that fact in flags of the face so that we don't try to free | |
| 1569 these colors. */ | |
| 1570 | |
|
25114
be5d3e21fbd7
(load_color): Remove static from definition and remove
Eli Zaretskii <eliz@gnu.org>
parents:
25092
diff
changeset
|
1571 unsigned long |
| 24995 | 1572 load_color (f, face, name, target_index) |
| 1573 struct frame *f; | |
| 1574 struct face *face; | |
| 1575 Lisp_Object name; | |
| 1576 enum lface_attribute_index target_index; | |
| 1577 { | |
| 1578 XColor color; | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
1579 |
| 24995 | 1580 xassert (STRINGP (name)); |
| 1581 xassert (target_index == LFACE_FOREGROUND_INDEX | |
| 1582 || target_index == LFACE_BACKGROUND_INDEX | |
| 1583 || target_index == LFACE_UNDERLINE_INDEX | |
| 1584 || target_index == LFACE_OVERLINE_INDEX | |
| 1585 || target_index == LFACE_STRIKE_THROUGH_INDEX | |
| 1586 || target_index == LFACE_BOX_INDEX); | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
1587 |
| 24995 | 1588 /* if the color map is full, defined_color will return a best match |
| 1589 to the values in an existing cell. */ | |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
1590 if (!defined_color (f, SDATA (name), &color, 1)) |
| 24995 | 1591 { |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
1592 add_to_log ("Unable to load color \"%s\"", name, Qnil); |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
1593 |
| 24995 | 1594 switch (target_index) |
| 1595 { | |
| 1596 case LFACE_FOREGROUND_INDEX: | |
| 1597 face->foreground_defaulted_p = 1; | |
| 1598 color.pixel = FRAME_FOREGROUND_PIXEL (f); | |
| 1599 break; | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
1600 |
| 24995 | 1601 case LFACE_BACKGROUND_INDEX: |
| 1602 face->background_defaulted_p = 1; | |
| 1603 color.pixel = FRAME_BACKGROUND_PIXEL (f); | |
| 1604 break; | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
1605 |
| 24995 | 1606 case LFACE_UNDERLINE_INDEX: |
| 1607 face->underline_defaulted_p = 1; | |
| 1608 color.pixel = FRAME_FOREGROUND_PIXEL (f); | |
| 1609 break; | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
1610 |
| 24995 | 1611 case LFACE_OVERLINE_INDEX: |
| 1612 face->overline_color_defaulted_p = 1; | |
| 1613 color.pixel = FRAME_FOREGROUND_PIXEL (f); | |
| 1614 break; | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
1615 |
| 24995 | 1616 case LFACE_STRIKE_THROUGH_INDEX: |
| 1617 face->strike_through_color_defaulted_p = 1; | |
| 1618 color.pixel = FRAME_FOREGROUND_PIXEL (f); | |
| 1619 break; | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
1620 |
| 24995 | 1621 case LFACE_BOX_INDEX: |
| 1622 face->box_color_defaulted_p = 1; | |
| 1623 color.pixel = FRAME_FOREGROUND_PIXEL (f); | |
| 1624 break; | |
| 1625 | |
| 1626 default: | |
| 1627 abort (); | |
| 1628 } | |
| 1629 } | |
| 1630 #if GLYPH_DEBUG | |
| 1631 else | |
| 1632 ++ncolors_allocated; | |
| 1633 #endif | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
1634 |
| 24995 | 1635 return color.pixel; |
| 1636 } | |
| 1637 | |
|
29599
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1638 |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
1639 #ifdef HAVE_WINDOW_SYSTEM |
| 24995 | 1640 |
| 1641 /* Load colors for face FACE which is used on frame F. Colors are | |
| 1642 specified by slots LFACE_BACKGROUND_INDEX and LFACE_FOREGROUND_INDEX | |
| 1643 of ATTRS. If the background color specified is not supported on F, | |
| 1644 try to emulate gray colors with a stipple from Vface_default_stipple. */ | |
| 1645 | |
| 1646 static void | |
| 1647 load_face_colors (f, face, attrs) | |
| 1648 struct frame *f; | |
| 1649 struct face *face; | |
| 1650 Lisp_Object *attrs; | |
| 1651 { | |
| 1652 Lisp_Object fg, bg; | |
| 1653 | |
| 1654 bg = attrs[LFACE_BACKGROUND_INDEX]; | |
| 1655 fg = attrs[LFACE_FOREGROUND_INDEX]; | |
| 1656 | |
| 1657 /* Swap colors if face is inverse-video. */ | |
| 1658 if (EQ (attrs[LFACE_INVERSE_INDEX], Qt)) | |
| 1659 { | |
| 1660 Lisp_Object tmp; | |
| 1661 tmp = fg; | |
| 1662 fg = bg; | |
| 1663 bg = tmp; | |
| 1664 } | |
| 1665 | |
| 1666 /* Check for support for foreground, not for background because | |
| 1667 face_color_supported_p is smart enough to know that grays are | |
| 1668 "supported" as background because we are supposed to use stipple | |
| 1669 for them. */ | |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
1670 if (!face_color_supported_p (f, SDATA (bg), 0) |
|
25890
b10a34d40b55
(Qbitmap_spec_p): Replaces Qpixmap_spec_p.
Gerd Moellmann <gerd@gnu.org>
parents:
25883
diff
changeset
|
1671 && !NILP (Fbitmap_spec_p (Vface_default_stipple))) |
| 24995 | 1672 { |
| 1673 x_destroy_bitmap (f, face->stipple); | |
| 1674 face->stipple = load_pixmap (f, Vface_default_stipple, | |
| 1675 &face->pixmap_w, &face->pixmap_h); | |
| 1676 } | |
|
25092
79a5a567bdb0
(prepare_face_for_display): Use FillOpaqueStippled instead of
Gerd Moellmann <gerd@gnu.org>
parents:
25062
diff
changeset
|
1677 |
|
79a5a567bdb0
(prepare_face_for_display): Use FillOpaqueStippled instead of
Gerd Moellmann <gerd@gnu.org>
parents:
25062
diff
changeset
|
1678 face->background = load_color (f, face, bg, LFACE_BACKGROUND_INDEX); |
| 24995 | 1679 face->foreground = load_color (f, face, fg, LFACE_FOREGROUND_INDEX); |
| 1680 } | |
| 1681 | |
| 1682 | |
| 1683 /* Free color PIXEL on frame F. */ | |
| 1684 | |
| 1685 void | |
| 1686 unload_color (f, pixel) | |
| 1687 struct frame *f; | |
| 1688 unsigned long pixel; | |
| 1689 { | |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
1690 #ifdef HAVE_X_WINDOWS |
|
38346
a86234ceb517
(unload_color): Do nothing if PIXEL is -1.
Gerd Moellmann <gerd@gnu.org>
parents:
37798
diff
changeset
|
1691 if (pixel != -1) |
|
a86234ceb517
(unload_color): Do nothing if PIXEL is -1.
Gerd Moellmann <gerd@gnu.org>
parents:
37798
diff
changeset
|
1692 { |
|
a86234ceb517
(unload_color): Do nothing if PIXEL is -1.
Gerd Moellmann <gerd@gnu.org>
parents:
37798
diff
changeset
|
1693 BLOCK_INPUT; |
|
a86234ceb517
(unload_color): Do nothing if PIXEL is -1.
Gerd Moellmann <gerd@gnu.org>
parents:
37798
diff
changeset
|
1694 x_free_colors (f, &pixel, 1); |
|
a86234ceb517
(unload_color): Do nothing if PIXEL is -1.
Gerd Moellmann <gerd@gnu.org>
parents:
37798
diff
changeset
|
1695 UNBLOCK_INPUT; |
|
a86234ceb517
(unload_color): Do nothing if PIXEL is -1.
Gerd Moellmann <gerd@gnu.org>
parents:
37798
diff
changeset
|
1696 } |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
1697 #endif |
| 24995 | 1698 } |
| 1699 | |
| 1700 | |
| 1701 /* Free colors allocated for FACE. */ | |
| 1702 | |
| 1703 static void | |
| 1704 free_face_colors (f, face) | |
| 1705 struct frame *f; | |
|
3074
96b4623fdeb3
* xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents:
3065
diff
changeset
|
1706 struct face *face; |
|
96b4623fdeb3
* xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents:
3065
diff
changeset
|
1707 { |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
1708 #ifdef HAVE_X_WINDOWS |
|
40555
dfc4450c2329
(realize_x_face): If C is not a single-byte character,
Gerd Moellmann <gerd@gnu.org>
parents:
40532
diff
changeset
|
1709 if (face->colors_copied_bitwise_p) |
|
dfc4450c2329
(realize_x_face): If C is not a single-byte character,
Gerd Moellmann <gerd@gnu.org>
parents:
40532
diff
changeset
|
1710 return; |
|
dfc4450c2329
(realize_x_face): If C is not a single-byte character,
Gerd Moellmann <gerd@gnu.org>
parents:
40532
diff
changeset
|
1711 |
|
29599
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1712 BLOCK_INPUT; |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
1713 |
|
29599
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1714 if (!face->foreground_defaulted_p) |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1715 { |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1716 x_free_colors (f, &face->foreground, 1); |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1717 IF_DEBUG (--ncolors_allocated); |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1718 } |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
1719 |
|
29599
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1720 if (!face->background_defaulted_p) |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1721 { |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1722 x_free_colors (f, &face->background, 1); |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1723 IF_DEBUG (--ncolors_allocated); |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1724 } |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1725 |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1726 if (face->underline_p |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1727 && !face->underline_defaulted_p) |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1728 { |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1729 x_free_colors (f, &face->underline_color, 1); |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1730 IF_DEBUG (--ncolors_allocated); |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1731 } |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1732 |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1733 if (face->overline_p |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1734 && !face->overline_color_defaulted_p) |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1735 { |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1736 x_free_colors (f, &face->overline_color, 1); |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1737 IF_DEBUG (--ncolors_allocated); |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1738 } |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1739 |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1740 if (face->strike_through_p |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1741 && !face->strike_through_color_defaulted_p) |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1742 { |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1743 x_free_colors (f, &face->strike_through_color, 1); |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1744 IF_DEBUG (--ncolors_allocated); |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1745 } |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1746 |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1747 if (face->box != FACE_NO_BOX |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1748 && !face->box_color_defaulted_p) |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1749 { |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1750 x_free_colors (f, &face->box_color, 1); |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1751 IF_DEBUG (--ncolors_allocated); |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1752 } |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1753 |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1754 UNBLOCK_INPUT; |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
1755 #endif /* HAVE_X_WINDOWS */ |
| 24995 | 1756 } |
|
29599
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
1757 |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
1758 #endif /* HAVE_WINDOW_SYSTEM */ |
| 24995 | 1759 |
| 1760 | |
| 1761 | |
| 1762 /*********************************************************************** | |
| 1763 XLFD Font Names | |
| 1764 ***********************************************************************/ | |
| 1765 | |
| 1766 /* An enumerator for each field of an XLFD font name. */ | |
| 1767 | |
| 1768 enum xlfd_field | |
| 1769 { | |
| 1770 XLFD_FOUNDRY, | |
| 1771 XLFD_FAMILY, | |
| 1772 XLFD_WEIGHT, | |
| 1773 XLFD_SLANT, | |
| 1774 XLFD_SWIDTH, | |
| 1775 XLFD_ADSTYLE, | |
| 1776 XLFD_PIXEL_SIZE, | |
| 1777 XLFD_POINT_SIZE, | |
| 1778 XLFD_RESX, | |
| 1779 XLFD_RESY, | |
| 1780 XLFD_SPACING, | |
| 1781 XLFD_AVGWIDTH, | |
| 1782 XLFD_REGISTRY, | |
| 1783 XLFD_ENCODING, | |
| 1784 XLFD_LAST | |
| 1785 }; | |
| 1786 | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
1787 /* An enumerator for each possible slant value of a font. Taken from |
| 24995 | 1788 the XLFD specification. */ |
| 1789 | |
| 1790 enum xlfd_slant | |
| 1791 { | |
| 1792 XLFD_SLANT_UNKNOWN, | |
| 1793 XLFD_SLANT_ROMAN, | |
| 1794 XLFD_SLANT_ITALIC, | |
| 1795 XLFD_SLANT_OBLIQUE, | |
| 1796 XLFD_SLANT_REVERSE_ITALIC, | |
| 1797 XLFD_SLANT_REVERSE_OBLIQUE, | |
| 1798 XLFD_SLANT_OTHER | |
| 1799 }; | |
| 1800 | |
| 1801 /* Relative font weight according to XLFD documentation. */ | |
| 1802 | |
| 1803 enum xlfd_weight | |
| 1804 { | |
| 1805 XLFD_WEIGHT_UNKNOWN, | |
| 1806 XLFD_WEIGHT_ULTRA_LIGHT, /* 10 */ | |
| 1807 XLFD_WEIGHT_EXTRA_LIGHT, /* 20 */ | |
| 1808 XLFD_WEIGHT_LIGHT, /* 30 */ | |
| 1809 XLFD_WEIGHT_SEMI_LIGHT, /* 40: SemiLight, Book, ... */ | |
| 1810 XLFD_WEIGHT_MEDIUM, /* 50: Medium, Normal, Regular, ... */ | |
| 1811 XLFD_WEIGHT_SEMI_BOLD, /* 60: SemiBold, DemiBold, ... */ | |
| 1812 XLFD_WEIGHT_BOLD, /* 70: Bold, ... */ | |
| 1813 XLFD_WEIGHT_EXTRA_BOLD, /* 80: ExtraBold, Heavy, ... */ | |
| 1814 XLFD_WEIGHT_ULTRA_BOLD /* 90: UltraBold, Black, ... */ | |
| 1815 }; | |
| 1816 | |
| 1817 /* Relative proportionate width. */ | |
| 1818 | |
| 1819 enum xlfd_swidth | |
| 1820 { | |
| 1821 XLFD_SWIDTH_UNKNOWN, | |
| 1822 XLFD_SWIDTH_ULTRA_CONDENSED, /* 10 */ | |
| 1823 XLFD_SWIDTH_EXTRA_CONDENSED, /* 20 */ | |
| 1824 XLFD_SWIDTH_CONDENSED, /* 30: Condensed, Narrow, Compressed, ... */ | |
| 1825 XLFD_SWIDTH_SEMI_CONDENSED, /* 40: semicondensed */ | |
| 1826 XLFD_SWIDTH_MEDIUM, /* 50: Medium, Normal, Regular, ... */ | |
| 1827 XLFD_SWIDTH_SEMI_EXPANDED, /* 60: SemiExpanded, DemiExpanded, ... */ | |
| 1828 XLFD_SWIDTH_EXPANDED, /* 70: Expanded... */ | |
| 1829 XLFD_SWIDTH_EXTRA_EXPANDED, /* 80: ExtraExpanded, Wide... */ | |
| 1830 XLFD_SWIDTH_ULTRA_EXPANDED /* 90: UltraExpanded... */ | |
| 1831 }; | |
| 1832 | |
| 1833 /* Structure used for tables mapping XLFD weight, slant, and width | |
| 1834 names to numeric and symbolic values. */ | |
| 1835 | |
| 1836 struct table_entry | |
| 1837 { | |
| 1838 char *name; | |
| 1839 int numeric; | |
| 1840 Lisp_Object *symbol; | |
| 1841 }; | |
| 1842 | |
| 1843 /* Table of XLFD slant names and their numeric and symbolic | |
| 1844 representations. This table must be sorted by slant names in | |
| 1845 ascending order. */ | |
| 1846 | |
| 1847 static struct table_entry slant_table[] = | |
| 1848 { | |
| 1849 {"i", XLFD_SLANT_ITALIC, &Qitalic}, | |
| 1850 {"o", XLFD_SLANT_OBLIQUE, &Qoblique}, | |
| 1851 {"ot", XLFD_SLANT_OTHER, &Qitalic}, | |
| 1852 {"r", XLFD_SLANT_ROMAN, &Qnormal}, | |
| 1853 {"ri", XLFD_SLANT_REVERSE_ITALIC, &Qreverse_italic}, | |
| 1854 {"ro", XLFD_SLANT_REVERSE_OBLIQUE, &Qreverse_oblique} | |
| 1855 }; | |
| 1856 | |
| 1857 /* Table of XLFD weight names. This table must be sorted by weight | |
| 1858 names in ascending order. */ | |
| 1859 | |
| 1860 static struct table_entry weight_table[] = | |
| 1861 { | |
| 1862 {"black", XLFD_WEIGHT_ULTRA_BOLD, &Qultra_bold}, | |
| 1863 {"bold", XLFD_WEIGHT_BOLD, &Qbold}, | |
| 1864 {"book", XLFD_WEIGHT_SEMI_LIGHT, &Qsemi_light}, | |
|
33529
2e6d343c238d
(weight_table): Add `demi' with the same meaning as
Gerd Moellmann <gerd@gnu.org>
parents:
33372
diff
changeset
|
1865 {"demi", XLFD_WEIGHT_SEMI_BOLD, &Qsemi_bold}, |
| 24995 | 1866 {"demibold", XLFD_WEIGHT_SEMI_BOLD, &Qsemi_bold}, |
| 1867 {"extralight", XLFD_WEIGHT_EXTRA_LIGHT, &Qextra_light}, | |
| 1868 {"extrabold", XLFD_WEIGHT_EXTRA_BOLD, &Qextra_bold}, | |
| 1869 {"heavy", XLFD_WEIGHT_EXTRA_BOLD, &Qextra_bold}, | |
| 1870 {"light", XLFD_WEIGHT_LIGHT, &Qlight}, | |
| 1871 {"medium", XLFD_WEIGHT_MEDIUM, &Qnormal}, | |
| 1872 {"normal", XLFD_WEIGHT_MEDIUM, &Qnormal}, | |
| 1873 {"regular", XLFD_WEIGHT_MEDIUM, &Qnormal}, | |
| 1874 {"semibold", XLFD_WEIGHT_SEMI_BOLD, &Qsemi_bold}, | |
| 1875 {"semilight", XLFD_WEIGHT_SEMI_LIGHT, &Qsemi_light}, | |
| 1876 {"ultralight", XLFD_WEIGHT_ULTRA_LIGHT, &Qultra_light}, | |
| 1877 {"ultrabold", XLFD_WEIGHT_ULTRA_BOLD, &Qultra_bold} | |
| 1878 }; | |
| 1879 | |
| 1880 /* Table of XLFD width names. This table must be sorted by width | |
| 1881 names in ascending order. */ | |
| 1882 | |
| 1883 static struct table_entry swidth_table[] = | |
| 1884 { | |
| 1885 {"compressed", XLFD_SWIDTH_CONDENSED, &Qcondensed}, | |
| 1886 {"condensed", XLFD_SWIDTH_CONDENSED, &Qcondensed}, | |
| 1887 {"demiexpanded", XLFD_SWIDTH_SEMI_EXPANDED, &Qsemi_expanded}, | |
| 1888 {"expanded", XLFD_SWIDTH_EXPANDED, &Qexpanded}, | |
| 1889 {"extracondensed", XLFD_SWIDTH_EXTRA_CONDENSED, &Qextra_condensed}, | |
| 1890 {"extraexpanded", XLFD_SWIDTH_EXTRA_EXPANDED, &Qextra_expanded}, | |
| 1891 {"medium", XLFD_SWIDTH_MEDIUM, &Qnormal}, | |
| 1892 {"narrow", XLFD_SWIDTH_CONDENSED, &Qcondensed}, | |
| 1893 {"normal", XLFD_SWIDTH_MEDIUM, &Qnormal}, | |
| 1894 {"regular", XLFD_SWIDTH_MEDIUM, &Qnormal}, | |
| 1895 {"semicondensed", XLFD_SWIDTH_SEMI_CONDENSED, &Qsemi_condensed}, | |
| 1896 {"semiexpanded", XLFD_SWIDTH_SEMI_EXPANDED, &Qsemi_expanded}, | |
| 1897 {"ultracondensed", XLFD_SWIDTH_ULTRA_CONDENSED, &Qultra_condensed}, | |
| 1898 {"ultraexpanded", XLFD_SWIDTH_ULTRA_EXPANDED, &Qultra_expanded}, | |
| 1899 {"wide", XLFD_SWIDTH_EXTRA_EXPANDED, &Qextra_expanded} | |
| 1900 }; | |
| 1901 | |
| 1902 /* Structure used to hold the result of splitting font names in XLFD | |
| 1903 format into their fields. */ | |
| 1904 | |
| 1905 struct font_name | |
| 1906 { | |
| 1907 /* The original name which is modified destructively by | |
| 1908 split_font_name. The pointer is kept here to be able to free it | |
| 1909 if it was allocated from the heap. */ | |
| 1910 char *name; | |
| 1911 | |
| 1912 /* Font name fields. Each vector element points into `name' above. | |
| 1913 Fields are NUL-terminated. */ | |
| 1914 char *fields[XLFD_LAST]; | |
| 1915 | |
| 1916 /* Numeric values for those fields that interest us. See | |
| 1917 split_font_name for which these are. */ | |
| 1918 int numeric[XLFD_LAST]; | |
|
34160
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
1919 |
|
50515
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
1920 /* If the original name matches one of Vface_font_rescale_alist, |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
1921 the value is the corresponding rescale ratio. Otherwise, the |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
1922 value is 1.0. */ |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
1923 double rescale_ratio; |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
1924 |
|
34160
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
1925 /* Lower value mean higher priority. */ |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
1926 int registry_priority; |
| 24995 | 1927 }; |
| 1928 | |
| 1929 /* The frame in effect when sorting font names. Set temporarily in | |
| 1930 sort_fonts so that it is available in font comparison functions. */ | |
| 1931 | |
| 1932 static struct frame *font_frame; | |
| 1933 | |
| 1934 /* Order by which font selection chooses fonts. The default values | |
| 1935 mean `first, find a best match for the font width, then for the | |
| 1936 font height, then for weight, then for slant.' This variable can be | |
| 1937 set via set-face-font-sort-order. */ | |
| 1938 | |
|
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44705
diff
changeset
|
1939 #ifdef MAC_OS |
|
35913
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
1940 static int font_sort_order[4] = { |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
1941 XLFD_SWIDTH, XLFD_POINT_SIZE, XLFD_WEIGHT, XLFD_SLANT |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
1942 }; |
|
32752
923b8d6d8277
Initial check-in: changes for building Emacs under Mac OS.
Andrew Choi <akochoi@shaw.ca>
parents:
32176
diff
changeset
|
1943 #else |
| 24995 | 1944 static int font_sort_order[4]; |
|
32752
923b8d6d8277
Initial check-in: changes for building Emacs under Mac OS.
Andrew Choi <akochoi@shaw.ca>
parents:
32176
diff
changeset
|
1945 #endif |
| 24995 | 1946 |
| 1947 /* Look up FONT.fields[FIELD_INDEX] in TABLE which has DIM entries. | |
| 1948 TABLE must be sorted by TABLE[i]->name in ascending order. Value | |
| 1949 is a pointer to the matching table entry or null if no table entry | |
| 1950 matches. */ | |
| 1951 | |
| 1952 static struct table_entry * | |
| 1953 xlfd_lookup_field_contents (table, dim, font, field_index) | |
| 1954 struct table_entry *table; | |
| 1955 int dim; | |
| 1956 struct font_name *font; | |
| 1957 int field_index; | |
| 1958 { | |
| 1959 /* Function split_font_name converts fields to lower-case, so there | |
| 1960 is no need to use xstrlwr or xstricmp here. */ | |
| 1961 char *s = font->fields[field_index]; | |
| 1962 int low, mid, high, cmp; | |
| 1963 | |
| 1964 low = 0; | |
| 1965 high = dim - 1; | |
| 1966 | |
| 1967 while (low <= high) | |
| 1968 { | |
| 1969 mid = (low + high) / 2; | |
| 1970 cmp = strcmp (table[mid].name, s); | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
1971 |
| 24995 | 1972 if (cmp < 0) |
| 1973 low = mid + 1; | |
| 1974 else if (cmp > 0) | |
| 1975 high = mid - 1; | |
| 1976 else | |
| 1977 return table + mid; | |
| 1978 } | |
| 1979 | |
| 1980 return NULL; | |
| 1981 } | |
| 1982 | |
| 1983 | |
| 1984 /* Return a numeric representation for font name field | |
| 1985 FONT.fields[FIELD_INDEX]. The field is looked up in TABLE which | |
| 1986 has DIM entries. Value is the numeric value found or DFLT if no | |
| 1987 table entry matches. This function is used to translate weight, | |
| 1988 slant, and swidth names of XLFD font names to numeric values. */ | |
| 1989 | |
| 1990 static INLINE int | |
| 1991 xlfd_numeric_value (table, dim, font, field_index, dflt) | |
| 1992 struct table_entry *table; | |
| 1993 int dim; | |
| 1994 struct font_name *font; | |
| 1995 int field_index; | |
| 1996 int dflt; | |
| 1997 { | |
| 1998 struct table_entry *p; | |
| 1999 p = xlfd_lookup_field_contents (table, dim, font, field_index); | |
| 2000 return p ? p->numeric : dflt; | |
| 2001 } | |
| 2002 | |
| 2003 | |
| 2004 /* Return a symbolic representation for font name field | |
| 2005 FONT.fields[FIELD_INDEX]. The field is looked up in TABLE which | |
| 2006 has DIM entries. Value is the symbolic value found or DFLT if no | |
| 2007 table entry matches. This function is used to translate weight, | |
| 2008 slant, and swidth names of XLFD font names to symbols. */ | |
| 2009 | |
| 2010 static INLINE Lisp_Object | |
| 2011 xlfd_symbolic_value (table, dim, font, field_index, dflt) | |
| 2012 struct table_entry *table; | |
| 2013 int dim; | |
| 2014 struct font_name *font; | |
| 2015 int field_index; | |
|
28464
cad4cc0508a0
Fix Lisp_Object/int type confusion revealed by making Lisp_Object a union type:
Ken Raeburn <raeburn@raeburn.org>
parents:
28461
diff
changeset
|
2016 Lisp_Object dflt; |
| 24995 | 2017 { |
| 2018 struct table_entry *p; | |
| 2019 p = xlfd_lookup_field_contents (table, dim, font, field_index); | |
| 2020 return p ? *p->symbol : dflt; | |
| 2021 } | |
| 2022 | |
| 2023 | |
| 2024 /* Return a numeric value for the slant of the font given by FONT. */ | |
| 2025 | |
| 2026 static INLINE int | |
| 2027 xlfd_numeric_slant (font) | |
| 2028 struct font_name *font; | |
| 2029 { | |
| 2030 return xlfd_numeric_value (slant_table, DIM (slant_table), | |
| 2031 font, XLFD_SLANT, XLFD_SLANT_ROMAN); | |
| 2032 } | |
| 2033 | |
| 2034 | |
| 2035 /* Return a symbol representing the weight of the font given by FONT. */ | |
| 2036 | |
| 2037 static INLINE Lisp_Object | |
| 2038 xlfd_symbolic_slant (font) | |
| 2039 struct font_name *font; | |
| 2040 { | |
| 2041 return xlfd_symbolic_value (slant_table, DIM (slant_table), | |
| 2042 font, XLFD_SLANT, Qnormal); | |
| 2043 } | |
| 2044 | |
| 2045 | |
| 2046 /* Return a numeric value for the weight of the font given by FONT. */ | |
| 2047 | |
| 2048 static INLINE int | |
| 2049 xlfd_numeric_weight (font) | |
| 2050 struct font_name *font; | |
| 2051 { | |
| 2052 return xlfd_numeric_value (weight_table, DIM (weight_table), | |
| 2053 font, XLFD_WEIGHT, XLFD_WEIGHT_MEDIUM); | |
| 2054 } | |
| 2055 | |
| 2056 | |
| 2057 /* Return a symbol representing the slant of the font given by FONT. */ | |
| 2058 | |
| 2059 static INLINE Lisp_Object | |
| 2060 xlfd_symbolic_weight (font) | |
| 2061 struct font_name *font; | |
| 2062 { | |
| 2063 return xlfd_symbolic_value (weight_table, DIM (weight_table), | |
| 2064 font, XLFD_WEIGHT, Qnormal); | |
| 2065 } | |
| 2066 | |
| 2067 | |
| 2068 /* Return a numeric value for the swidth of the font whose XLFD font | |
| 2069 name fields are found in FONT. */ | |
| 2070 | |
| 2071 static INLINE int | |
| 2072 xlfd_numeric_swidth (font) | |
| 2073 struct font_name *font; | |
| 2074 { | |
| 2075 return xlfd_numeric_value (swidth_table, DIM (swidth_table), | |
| 2076 font, XLFD_SWIDTH, XLFD_SWIDTH_MEDIUM); | |
| 2077 } | |
| 2078 | |
| 2079 | |
| 2080 /* Return a symbolic value for the swidth of FONT. */ | |
| 2081 | |
| 2082 static INLINE Lisp_Object | |
| 2083 xlfd_symbolic_swidth (font) | |
| 2084 struct font_name *font; | |
| 2085 { | |
| 2086 return xlfd_symbolic_value (swidth_table, DIM (swidth_table), | |
| 2087 font, XLFD_SWIDTH, Qnormal); | |
| 2088 } | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
2089 |
| 24995 | 2090 |
| 2091 /* Look up the entry of SYMBOL in the vector TABLE which has DIM | |
| 2092 entries. Value is a pointer to the matching table entry or null if | |
| 2093 no element of TABLE contains SYMBOL. */ | |
| 2094 | |
| 2095 static struct table_entry * | |
| 2096 face_value (table, dim, symbol) | |
| 2097 struct table_entry *table; | |
| 2098 int dim; | |
| 2099 Lisp_Object symbol; | |
| 2100 { | |
| 2101 int i; | |
| 2102 | |
| 2103 xassert (SYMBOLP (symbol)); | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
2104 |
| 24995 | 2105 for (i = 0; i < dim; ++i) |
| 2106 if (EQ (*table[i].symbol, symbol)) | |
| 2107 break; | |
| 2108 | |
| 2109 return i < dim ? table + i : NULL; | |
| 2110 } | |
| 2111 | |
| 2112 | |
| 2113 /* Return a numeric value for SYMBOL in the vector TABLE which has DIM | |
| 2114 entries. Value is -1 if SYMBOL is not found in TABLE. */ | |
| 2115 | |
| 2116 static INLINE int | |
| 2117 face_numeric_value (table, dim, symbol) | |
| 2118 struct table_entry *table; | |
| 2119 int dim; | |
| 2120 Lisp_Object symbol; | |
| 2121 { | |
| 2122 struct table_entry *p = face_value (table, dim, symbol); | |
| 2123 return p ? p->numeric : -1; | |
| 2124 } | |
| 2125 | |
| 2126 | |
| 2127 /* Return a numeric value representing the weight specified by Lisp | |
| 2128 symbol WEIGHT. Value is one of the enumerators of enum | |
| 2129 xlfd_weight. */ | |
| 2130 | |
| 2131 static INLINE int | |
| 2132 face_numeric_weight (weight) | |
| 2133 Lisp_Object weight; | |
| 2134 { | |
| 2135 return face_numeric_value (weight_table, DIM (weight_table), weight); | |
| 2136 } | |
| 2137 | |
| 2138 | |
| 2139 /* Return a numeric value representing the slant specified by Lisp | |
| 2140 symbol SLANT. Value is one of the enumerators of enum xlfd_slant. */ | |
| 2141 | |
| 2142 static INLINE int | |
| 2143 face_numeric_slant (slant) | |
| 2144 Lisp_Object slant; | |
| 2145 { | |
| 2146 return face_numeric_value (slant_table, DIM (slant_table), slant); | |
| 2147 } | |
| 2148 | |
| 2149 | |
| 2150 /* Return a numeric value representing the swidth specified by Lisp | |
| 2151 symbol WIDTH. Value is one of the enumerators of enum xlfd_swidth. */ | |
| 2152 | |
| 2153 static int | |
| 2154 face_numeric_swidth (width) | |
| 2155 Lisp_Object width; | |
| 2156 { | |
| 2157 return face_numeric_value (swidth_table, DIM (swidth_table), width); | |
| 2158 } | |
| 2159 | |
| 2160 | |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
2161 #ifdef HAVE_WINDOW_SYSTEM |
| 24995 | 2162 |
| 2163 /* Return non-zero if FONT is the name of a fixed-pitch font. */ | |
| 2164 | |
| 2165 static INLINE int | |
| 2166 xlfd_fixed_p (font) | |
| 2167 struct font_name *font; | |
| 2168 { | |
| 2169 /* Function split_font_name converts fields to lower-case, so there | |
| 2170 is no need to use tolower here. */ | |
| 2171 return *font->fields[XLFD_SPACING] != 'p'; | |
| 2172 } | |
| 2173 | |
| 2174 | |
| 2175 /* Return the point size of FONT on frame F, measured in 1/10 pt. | |
| 2176 | |
| 2177 The actual height of the font when displayed on F depends on the | |
| 2178 resolution of both the font and frame. For example, a 10pt font | |
| 2179 designed for a 100dpi display will display larger than 10pt on a | |
| 2180 75dpi display. (It's not unusual to use fonts not designed for the | |
| 2181 display one is using. For example, some intlfonts are available in | |
| 2182 72dpi versions, only.) | |
| 2183 | |
| 2184 Value is the real point size of FONT on frame F, or 0 if it cannot | |
| 2185 be determined. */ | |
| 2186 | |
| 2187 static INLINE int | |
| 2188 xlfd_point_size (f, font) | |
| 2189 struct frame *f; | |
| 2190 struct font_name *font; | |
| 2191 { | |
| 2192 double resy = FRAME_X_DISPLAY_INFO (f)->resy; | |
|
37714
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2193 char *pixel_field = font->fields[XLFD_PIXEL_SIZE]; |
|
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2194 double pixel; |
| 24995 | 2195 int real_pt; |
| 2196 | |
|
37714
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2197 if (*pixel_field == '[') |
|
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2198 { |
|
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2199 /* The pixel size field is `[A B C D]' which specifies |
|
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2200 a transformation matrix. |
|
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2201 |
|
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2202 A B 0 |
|
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2203 C D 0 |
|
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2204 0 0 1 |
|
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2205 |
|
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2206 by which all glyphs of the font are transformed. The spec |
|
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2207 says that s scalar value N for the pixel size is equivalent |
|
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2208 to A = N * resx/resy, B = C = 0, D = N. */ |
|
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2209 char *start = pixel_field + 1, *end; |
|
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2210 double matrix[4]; |
|
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2211 int i; |
|
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2212 |
|
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2213 for (i = 0; i < 4; ++i) |
|
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2214 { |
|
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2215 matrix[i] = strtod (start, &end); |
|
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2216 start = end; |
|
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2217 } |
|
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2218 |
|
37798
d4b4c850abc0
(xlfd_point_size): Don't divide pixel size from
Gerd Moellmann <gerd@gnu.org>
parents:
37756
diff
changeset
|
2219 pixel = matrix[3]; |
|
37714
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2220 } |
|
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2221 else |
|
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2222 pixel = atoi (pixel_field); |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48384
diff
changeset
|
2223 |
|
37714
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2224 if (pixel == 0) |
| 24995 | 2225 real_pt = 0; |
| 2226 else | |
|
37714
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2227 real_pt = PT_PER_INCH * 10.0 * pixel / resy + 0.5; |
| 24995 | 2228 |
| 2229 return real_pt; | |
| 2230 } | |
| 2231 | |
| 2232 | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
2233 /* Return point size of PIXEL dots while considering Y-resultion (DPI) |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
2234 of frame F. This function is used to guess a point size of font |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
2235 when only the pixel height of the font is available. */ |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
2236 |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
2237 static INLINE int |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
2238 pixel_point_size (f, pixel) |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
2239 struct frame *f; |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
2240 int pixel; |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
2241 { |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
2242 double resy = FRAME_X_DISPLAY_INFO (f)->resy; |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
2243 double real_pt; |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
2244 int int_pt; |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
2245 |
| 34882 | 2246 /* As one inch is PT_PER_INCH points, PT_PER_INCH/RESY gives the |
| 2247 point size of one dot. */ | |
| 2248 real_pt = pixel * PT_PER_INCH / resy; | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
2249 int_pt = real_pt + 0.5; |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
2250 |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
2251 return int_pt; |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
2252 } |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
2253 |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
2254 |
|
50515
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
2255 /* Return a rescaling ratio of a font of NAME. */ |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
2256 |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
2257 static double |
|
51401
bcf91e20f6a2
(font_rescale_ratio): Fix for K&R.
Dave Love <fx@gnu.org>
parents:
51315
diff
changeset
|
2258 font_rescale_ratio (name) |
|
bcf91e20f6a2
(font_rescale_ratio): Fix for K&R.
Dave Love <fx@gnu.org>
parents:
51315
diff
changeset
|
2259 char *name; |
|
50515
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
2260 { |
|
53267
bec1d17789a6
(Fcolor_gray_p): Fix omission bug:
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
52401
diff
changeset
|
2261 Lisp_Object tail, elt; |
|
50515
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
2262 |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
2263 for (tail = Vface_font_rescale_alist; CONSP (tail); tail = XCDR (tail)) |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
2264 { |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
2265 elt = XCAR (tail); |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
2266 if (STRINGP (XCAR (elt)) && FLOATP (XCDR (elt)) |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
2267 && fast_c_string_match_ignore_case (XCAR (elt), name) >= 0) |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
2268 return XFLOAT_DATA (XCDR (elt)); |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
2269 } |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
2270 return 1.0; |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
2271 } |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
2272 |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
2273 |
| 24995 | 2274 /* Split XLFD font name FONT->name destructively into NUL-terminated, |
| 2275 lower-case fields in FONT->fields. NUMERIC_P non-zero means | |
| 2276 compute numeric values for fields XLFD_POINT_SIZE, XLFD_SWIDTH, | |
| 2277 XLFD_RESY, XLFD_SLANT, and XLFD_WEIGHT in FONT->numeric. Value is | |
| 2278 zero if the font name doesn't have the format we expect. The | |
| 2279 expected format is a font name that starts with a `-' and has | |
|
37714
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2280 XLFD_LAST fields separated by `-'. */ |
| 24995 | 2281 |
| 2282 static int | |
| 2283 split_font_name (f, font, numeric_p) | |
| 2284 struct frame *f; | |
| 2285 struct font_name *font; | |
| 2286 int numeric_p; | |
| 2287 { | |
| 2288 int i = 0; | |
| 2289 int success_p; | |
|
50515
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
2290 double rescale_ratio; |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
2291 |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
2292 if (numeric_p) |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
2293 /* This must be done before splitting the font name. */ |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
2294 rescale_ratio = font_rescale_ratio (font->name); |
| 24995 | 2295 |
| 2296 if (*font->name == '-') | |
| 2297 { | |
| 2298 char *p = xstrlwr (font->name) + 1; | |
| 2299 | |
|
37716
018b29727e8d
(split_font_name): Make sure to leave the loop
Gerd Moellmann <gerd@gnu.org>
parents:
37714
diff
changeset
|
2300 while (i < XLFD_LAST) |
| 24995 | 2301 { |
| 2302 font->fields[i] = p; | |
|
37716
018b29727e8d
(split_font_name): Make sure to leave the loop
Gerd Moellmann <gerd@gnu.org>
parents:
37714
diff
changeset
|
2303 ++i; |
|
37714
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2304 |
|
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2305 /* Pixel and point size may be of the form `[....]'. For |
|
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2306 BNF, see XLFD spec, chapter 4. Negative values are |
|
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2307 indicated by tilde characters which we replace with |
|
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2308 `-' characters, here. */ |
|
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2309 if (*p == '[' |
|
37736
d6f944b128c4
(split_font_name): Handle `[...]' for the right
Gerd Moellmann <gerd@gnu.org>
parents:
37724
diff
changeset
|
2310 && (i - 1 == XLFD_PIXEL_SIZE |
|
d6f944b128c4
(split_font_name): Handle `[...]' for the right
Gerd Moellmann <gerd@gnu.org>
parents:
37724
diff
changeset
|
2311 || i - 1 == XLFD_POINT_SIZE)) |
|
37714
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2312 { |
|
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2313 char *start, *end; |
|
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2314 int j; |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48384
diff
changeset
|
2315 |
|
37714
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2316 for (++p; *p && *p != ']'; ++p) |
|
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2317 if (*p == '~') |
|
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2318 *p = '-'; |
|
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2319 |
|
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2320 /* Check that the matrix contains 4 floating point |
|
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2321 numbers. */ |
|
37756
2cea00ea4d76
(split_font_name): Use the right field when
Gerd Moellmann <gerd@gnu.org>
parents:
37736
diff
changeset
|
2322 for (j = 0, start = font->fields[i - 1] + 1; |
|
37714
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2323 j < 4; |
|
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2324 ++j, start = end) |
|
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2325 if (strtod (start, &end) == 0 && start == end) |
|
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2326 break; |
|
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2327 |
|
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2328 if (j < 4) |
|
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2329 break; |
|
cf79e6de9752
(split_font_name): Handle matrix transformations
Gerd Moellmann <gerd@gnu.org>
parents:
37700
diff
changeset
|
2330 } |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
2331 |
| 24995 | 2332 while (*p && *p != '-') |
| 2333 ++p; | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
2334 |
| 24995 | 2335 if (*p != '-') |
| 2336 break; | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
2337 |
| 24995 | 2338 *p++ = 0; |
| 2339 } | |
| 2340 } | |
| 2341 | |
| 2342 success_p = i == XLFD_LAST; | |
| 2343 | |
| 2344 /* If requested, and font name was in the expected format, | |
| 2345 compute numeric values for some fields. */ | |
| 2346 if (numeric_p && success_p) | |
| 2347 { | |
| 2348 font->numeric[XLFD_POINT_SIZE] = xlfd_point_size (f, font); | |
| 2349 font->numeric[XLFD_RESY] = atoi (font->fields[XLFD_RESY]); | |
| 2350 font->numeric[XLFD_SLANT] = xlfd_numeric_slant (font); | |
| 2351 font->numeric[XLFD_WEIGHT] = xlfd_numeric_weight (font); | |
| 2352 font->numeric[XLFD_SWIDTH] = xlfd_numeric_swidth (font); | |
|
35913
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
2353 font->numeric[XLFD_AVGWIDTH] = atoi (font->fields[XLFD_AVGWIDTH]); |
|
50515
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
2354 font->rescale_ratio = rescale_ratio; |
| 24995 | 2355 } |
| 2356 | |
|
34160
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2357 /* Initialize it to zero. It will be overridden by font_list while |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2358 trying alternate registries. */ |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2359 font->registry_priority = 0; |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2360 |
| 24995 | 2361 return success_p; |
| 2362 } | |
| 2363 | |
| 2364 | |
| 2365 /* Build an XLFD font name from font name fields in FONT. Value is a | |
| 2366 pointer to the font name, which is allocated via xmalloc. */ | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
2367 |
| 24995 | 2368 static char * |
| 2369 build_font_name (font) | |
| 2370 struct font_name *font; | |
| 2371 { | |
| 2372 int i; | |
| 2373 int size = 100; | |
| 2374 char *font_name = (char *) xmalloc (size); | |
| 2375 int total_length = 0; | |
| 2376 | |
| 2377 for (i = 0; i < XLFD_LAST; ++i) | |
| 2378 { | |
| 2379 /* Add 1 because of the leading `-'. */ | |
| 2380 int len = strlen (font->fields[i]) + 1; | |
| 2381 | |
| 2382 /* Reallocate font_name if necessary. Add 1 for the final | |
| 2383 NUL-byte. */ | |
| 2384 if (total_length + len + 1 >= size) | |
| 2385 { | |
| 2386 int new_size = max (2 * size, size + len + 1); | |
| 2387 int sz = new_size * sizeof *font_name; | |
| 2388 font_name = (char *) xrealloc (font_name, sz); | |
| 2389 size = new_size; | |
| 2390 } | |
| 2391 | |
| 2392 font_name[total_length] = '-'; | |
| 2393 bcopy (font->fields[i], font_name + total_length + 1, len - 1); | |
| 2394 total_length += len; | |
| 2395 } | |
| 2396 | |
| 2397 font_name[total_length] = 0; | |
| 2398 return font_name; | |
| 2399 } | |
| 2400 | |
| 2401 | |
| 2402 /* Free an array FONTS of N font_name structures. This frees FONTS | |
| 2403 itself and all `name' fields in its elements. */ | |
| 2404 | |
| 2405 static INLINE void | |
| 2406 free_font_names (fonts, n) | |
| 2407 struct font_name *fonts; | |
| 2408 int n; | |
| 2409 { | |
| 2410 while (n) | |
| 2411 xfree (fonts[--n].name); | |
| 2412 xfree (fonts); | |
| 2413 } | |
| 2414 | |
| 2415 | |
| 2416 /* Sort vector FONTS of font_name structures which contains NFONTS | |
| 2417 elements using qsort and comparison function CMPFN. F is the frame | |
| 2418 on which the fonts will be used. The global variable font_frame | |
| 2419 is temporarily set to F to make it available in CMPFN. */ | |
| 2420 | |
| 2421 static INLINE void | |
| 2422 sort_fonts (f, fonts, nfonts, cmpfn) | |
| 2423 struct frame *f; | |
| 2424 struct font_name *fonts; | |
| 2425 int nfonts; | |
| 2426 int (*cmpfn) P_ ((const void *, const void *)); | |
| 2427 { | |
| 2428 font_frame = f; | |
| 2429 qsort (fonts, nfonts, sizeof *fonts, cmpfn); | |
| 2430 font_frame = NULL; | |
|
3074
96b4623fdeb3
* xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents:
3065
diff
changeset
|
2431 } |
|
96b4623fdeb3
* xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents:
3065
diff
changeset
|
2432 |
| 24995 | 2433 |
| 2434 /* Get fonts matching PATTERN on frame F. If F is null, use the first | |
| 2435 display in x_display_list. FONTS is a pointer to a vector of | |
| 2436 NFONTS font_name structures. TRY_ALTERNATIVES_P non-zero means try | |
| 2437 alternative patterns from Valternate_fontname_alist if no fonts are | |
|
37186
e47810283f6b
(best_matching_font): Remove unused parameter PATTERN.
Gerd Moellmann <gerd@gnu.org>
parents:
37036
diff
changeset
|
2438 found matching PATTERN. |
| 24995 | 2439 |
| 2440 For all fonts found, set FONTS[i].name to the name of the font, | |
| 2441 allocated via xmalloc, and split font names into fields. Ignore | |
|
35371
dc0d772c9d3d
(x_face_list_fonts): Don't BLOCK_INPUT around the
Gerd Moellmann <gerd@gnu.org>
parents:
35369
diff
changeset
|
2442 fonts that we can't parse. Value is the number of fonts found. */ |
| 24995 | 2443 |
| 2444 static int | |
|
49859
c6bacc76cfb6
* xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
2445 x_face_list_fonts (f, pattern, pfonts, nfonts, try_alternatives_p) |
| 24995 | 2446 struct frame *f; |
| 2447 char *pattern; | |
|
49859
c6bacc76cfb6
* xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
2448 struct font_name **pfonts; |
| 24995 | 2449 int nfonts, try_alternatives_p; |
|
37186
e47810283f6b
(best_matching_font): Remove unused parameter PATTERN.
Gerd Moellmann <gerd@gnu.org>
parents:
37036
diff
changeset
|
2450 { |
|
e47810283f6b
(best_matching_font): Remove unused parameter PATTERN.
Gerd Moellmann <gerd@gnu.org>
parents:
37036
diff
changeset
|
2451 int n, nignored; |
|
35369
aca9ba55cfcc
(x_face_list_fonts): Call x_list_fonts with SIZE -1,
Gerd Moellmann <gerd@gnu.org>
parents:
35228
diff
changeset
|
2452 |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
2453 /* NTEMACS_TODO : currently this uses w32_list_fonts, but it may be |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
2454 better to do it the other way around. */ |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
2455 Lisp_Object lfonts; |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
2456 Lisp_Object lpattern, tem; |
|
49859
c6bacc76cfb6
* xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
2457 struct font_name *fonts = 0; |
|
c6bacc76cfb6
* xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
2458 int num_fonts = nfonts; |
|
c6bacc76cfb6
* xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
2459 |
|
c6bacc76cfb6
* xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
2460 *pfonts = 0; |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
2461 lpattern = build_string (pattern); |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
2462 |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
2463 /* Get the list of fonts matching PATTERN. */ |
|
35371
dc0d772c9d3d
(x_face_list_fonts): Don't BLOCK_INPUT around the
Gerd Moellmann <gerd@gnu.org>
parents:
35369
diff
changeset
|
2464 #ifdef WINDOWSNT |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
2465 BLOCK_INPUT; |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
2466 lfonts = w32_list_fonts (f, lpattern, 0, nfonts); |
|
35371
dc0d772c9d3d
(x_face_list_fonts): Don't BLOCK_INPUT around the
Gerd Moellmann <gerd@gnu.org>
parents:
35369
diff
changeset
|
2467 UNBLOCK_INPUT; |
|
35369
aca9ba55cfcc
(x_face_list_fonts): Call x_list_fonts with SIZE -1,
Gerd Moellmann <gerd@gnu.org>
parents:
35228
diff
changeset
|
2468 #else |
|
37186
e47810283f6b
(best_matching_font): Remove unused parameter PATTERN.
Gerd Moellmann <gerd@gnu.org>
parents:
37036
diff
changeset
|
2469 lfonts = x_list_fonts (f, lpattern, -1, nfonts); |
|
32752
923b8d6d8277
Initial check-in: changes for building Emacs under Mac OS.
Andrew Choi <akochoi@shaw.ca>
parents:
32176
diff
changeset
|
2470 #endif |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
2471 |
|
49859
c6bacc76cfb6
* xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
2472 if (nfonts < 0 && CONSP (lfonts)) |
|
49914
b4b6ede28a6f
(x_face_list_fonts): Fix int/Lisp_Object mixup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49864
diff
changeset
|
2473 num_fonts = XFASTINT (Flength (lfonts)); |
|
53267
bec1d17789a6
(Fcolor_gray_p): Fix omission bug:
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
52401
diff
changeset
|
2474 |
|
35369
aca9ba55cfcc
(x_face_list_fonts): Call x_list_fonts with SIZE -1,
Gerd Moellmann <gerd@gnu.org>
parents:
35228
diff
changeset
|
2475 /* Make a copy of the font names we got from X, and |
|
aca9ba55cfcc
(x_face_list_fonts): Call x_list_fonts with SIZE -1,
Gerd Moellmann <gerd@gnu.org>
parents:
35228
diff
changeset
|
2476 split them into fields. */ |
|
37186
e47810283f6b
(best_matching_font): Remove unused parameter PATTERN.
Gerd Moellmann <gerd@gnu.org>
parents:
37036
diff
changeset
|
2477 n = nignored = 0; |
|
49859
c6bacc76cfb6
* xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
2478 for (tem = lfonts; CONSP (tem) && n < num_fonts; tem = XCDR (tem)) |
|
35369
aca9ba55cfcc
(x_face_list_fonts): Call x_list_fonts with SIZE -1,
Gerd Moellmann <gerd@gnu.org>
parents:
35228
diff
changeset
|
2479 { |
|
aca9ba55cfcc
(x_face_list_fonts): Call x_list_fonts with SIZE -1,
Gerd Moellmann <gerd@gnu.org>
parents:
35228
diff
changeset
|
2480 Lisp_Object elt, tail; |
|
46556
71e205b50a3e
(may_use_scalable_font_p): Argument now points to
Ken Raeburn <raeburn@raeburn.org>
parents:
46478
diff
changeset
|
2481 const char *name = SDATA (XCAR (tem)); |
|
35369
aca9ba55cfcc
(x_face_list_fonts): Call x_list_fonts with SIZE -1,
Gerd Moellmann <gerd@gnu.org>
parents:
35228
diff
changeset
|
2482 |
|
37186
e47810283f6b
(best_matching_font): Remove unused parameter PATTERN.
Gerd Moellmann <gerd@gnu.org>
parents:
37036
diff
changeset
|
2483 /* Ignore fonts matching a pattern from face-ignored-fonts. */ |
|
35369
aca9ba55cfcc
(x_face_list_fonts): Call x_list_fonts with SIZE -1,
Gerd Moellmann <gerd@gnu.org>
parents:
35228
diff
changeset
|
2484 for (tail = Vface_ignored_fonts; CONSP (tail); tail = XCDR (tail)) |
| 24995 | 2485 { |
|
35369
aca9ba55cfcc
(x_face_list_fonts): Call x_list_fonts with SIZE -1,
Gerd Moellmann <gerd@gnu.org>
parents:
35228
diff
changeset
|
2486 elt = XCAR (tail); |
|
aca9ba55cfcc
(x_face_list_fonts): Call x_list_fonts with SIZE -1,
Gerd Moellmann <gerd@gnu.org>
parents:
35228
diff
changeset
|
2487 if (STRINGP (elt) |
|
aca9ba55cfcc
(x_face_list_fonts): Call x_list_fonts with SIZE -1,
Gerd Moellmann <gerd@gnu.org>
parents:
35228
diff
changeset
|
2488 && fast_c_string_match_ignore_case (elt, name) >= 0) |
|
aca9ba55cfcc
(x_face_list_fonts): Call x_list_fonts with SIZE -1,
Gerd Moellmann <gerd@gnu.org>
parents:
35228
diff
changeset
|
2489 break; |
|
aca9ba55cfcc
(x_face_list_fonts): Call x_list_fonts with SIZE -1,
Gerd Moellmann <gerd@gnu.org>
parents:
35228
diff
changeset
|
2490 } |
|
aca9ba55cfcc
(x_face_list_fonts): Call x_list_fonts with SIZE -1,
Gerd Moellmann <gerd@gnu.org>
parents:
35228
diff
changeset
|
2491 if (!NILP (tail)) |
|
37186
e47810283f6b
(best_matching_font): Remove unused parameter PATTERN.
Gerd Moellmann <gerd@gnu.org>
parents:
37036
diff
changeset
|
2492 { |
|
e47810283f6b
(best_matching_font): Remove unused parameter PATTERN.
Gerd Moellmann <gerd@gnu.org>
parents:
37036
diff
changeset
|
2493 ++nignored; |
|
e47810283f6b
(best_matching_font): Remove unused parameter PATTERN.
Gerd Moellmann <gerd@gnu.org>
parents:
37036
diff
changeset
|
2494 continue; |
|
e47810283f6b
(best_matching_font): Remove unused parameter PATTERN.
Gerd Moellmann <gerd@gnu.org>
parents:
37036
diff
changeset
|
2495 } |
|
35369
aca9ba55cfcc
(x_face_list_fonts): Call x_list_fonts with SIZE -1,
Gerd Moellmann <gerd@gnu.org>
parents:
35228
diff
changeset
|
2496 |
|
49859
c6bacc76cfb6
* xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
2497 if (! fonts) |
|
c6bacc76cfb6
* xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
2498 { |
|
c6bacc76cfb6
* xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
2499 *pfonts = (struct font_name *) xmalloc (num_fonts * sizeof **pfonts); |
|
c6bacc76cfb6
* xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
2500 fonts = *pfonts; |
|
c6bacc76cfb6
* xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
2501 } |
|
c6bacc76cfb6
* xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
2502 |
|
35369
aca9ba55cfcc
(x_face_list_fonts): Call x_list_fonts with SIZE -1,
Gerd Moellmann <gerd@gnu.org>
parents:
35228
diff
changeset
|
2503 /* Make a copy of the font name. */ |
|
aca9ba55cfcc
(x_face_list_fonts): Call x_list_fonts with SIZE -1,
Gerd Moellmann <gerd@gnu.org>
parents:
35228
diff
changeset
|
2504 fonts[n].name = xstrdup (name); |
|
aca9ba55cfcc
(x_face_list_fonts): Call x_list_fonts with SIZE -1,
Gerd Moellmann <gerd@gnu.org>
parents:
35228
diff
changeset
|
2505 |
|
37186
e47810283f6b
(best_matching_font): Remove unused parameter PATTERN.
Gerd Moellmann <gerd@gnu.org>
parents:
37036
diff
changeset
|
2506 if (split_font_name (f, fonts + n, 1)) |
|
35369
aca9ba55cfcc
(x_face_list_fonts): Call x_list_fonts with SIZE -1,
Gerd Moellmann <gerd@gnu.org>
parents:
35228
diff
changeset
|
2507 { |
|
37186
e47810283f6b
(best_matching_font): Remove unused parameter PATTERN.
Gerd Moellmann <gerd@gnu.org>
parents:
37036
diff
changeset
|
2508 if (font_scalable_p (fonts + n) |
|
e47810283f6b
(best_matching_font): Remove unused parameter PATTERN.
Gerd Moellmann <gerd@gnu.org>
parents:
37036
diff
changeset
|
2509 && !may_use_scalable_font_p (name)) |
|
e47810283f6b
(best_matching_font): Remove unused parameter PATTERN.
Gerd Moellmann <gerd@gnu.org>
parents:
37036
diff
changeset
|
2510 { |
|
e47810283f6b
(best_matching_font): Remove unused parameter PATTERN.
Gerd Moellmann <gerd@gnu.org>
parents:
37036
diff
changeset
|
2511 ++nignored; |
|
e47810283f6b
(best_matching_font): Remove unused parameter PATTERN.
Gerd Moellmann <gerd@gnu.org>
parents:
37036
diff
changeset
|
2512 xfree (fonts[n].name); |
|
e47810283f6b
(best_matching_font): Remove unused parameter PATTERN.
Gerd Moellmann <gerd@gnu.org>
parents:
37036
diff
changeset
|
2513 } |
| 24995 | 2514 else |
|
35369
aca9ba55cfcc
(x_face_list_fonts): Call x_list_fonts with SIZE -1,
Gerd Moellmann <gerd@gnu.org>
parents:
35228
diff
changeset
|
2515 ++n; |
| 24995 | 2516 } |
|
35369
aca9ba55cfcc
(x_face_list_fonts): Call x_list_fonts with SIZE -1,
Gerd Moellmann <gerd@gnu.org>
parents:
35228
diff
changeset
|
2517 else |
|
37186
e47810283f6b
(best_matching_font): Remove unused parameter PATTERN.
Gerd Moellmann <gerd@gnu.org>
parents:
37036
diff
changeset
|
2518 xfree (fonts[n].name); |
|
e47810283f6b
(best_matching_font): Remove unused parameter PATTERN.
Gerd Moellmann <gerd@gnu.org>
parents:
37036
diff
changeset
|
2519 } |
|
e47810283f6b
(best_matching_font): Remove unused parameter PATTERN.
Gerd Moellmann <gerd@gnu.org>
parents:
37036
diff
changeset
|
2520 |
| 24995 | 2521 /* If no fonts found, try patterns from Valternate_fontname_alist. */ |
| 2522 if (n == 0 && try_alternatives_p) | |
| 2523 { | |
| 2524 Lisp_Object list = Valternate_fontname_alist; | |
| 2525 | |
|
49863
6d5c33f4dd05
* xfaces.c (x_face_list_fonts): Set *pfonts to 0 if no fonts found.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49859
diff
changeset
|
2526 if (*pfonts) |
|
6d5c33f4dd05
* xfaces.c (x_face_list_fonts): Set *pfonts to 0 if no fonts found.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49859
diff
changeset
|
2527 { |
|
6d5c33f4dd05
* xfaces.c (x_face_list_fonts): Set *pfonts to 0 if no fonts found.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49859
diff
changeset
|
2528 xfree (*pfonts); |
|
6d5c33f4dd05
* xfaces.c (x_face_list_fonts): Set *pfonts to 0 if no fonts found.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49859
diff
changeset
|
2529 *pfonts = 0; |
|
6d5c33f4dd05
* xfaces.c (x_face_list_fonts): Set *pfonts to 0 if no fonts found.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49859
diff
changeset
|
2530 } |
|
6d5c33f4dd05
* xfaces.c (x_face_list_fonts): Set *pfonts to 0 if no fonts found.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49859
diff
changeset
|
2531 |
| 24995 | 2532 while (CONSP (list)) |
| 2533 { | |
| 2534 Lisp_Object entry = XCAR (list); | |
| 2535 if (CONSP (entry) | |
| 2536 && STRINGP (XCAR (entry)) | |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
2537 && strcmp (SDATA (XCAR (entry)), pattern) == 0) |
| 24995 | 2538 break; |
| 2539 list = XCDR (list); | |
| 2540 } | |
| 2541 | |
| 2542 if (CONSP (list)) | |
| 2543 { | |
| 2544 Lisp_Object patterns = XCAR (list); | |
| 2545 Lisp_Object name; | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
2546 |
| 24995 | 2547 while (CONSP (patterns) |
| 2548 /* If list is screwed up, give up. */ | |
| 2549 && (name = XCAR (patterns), | |
| 2550 STRINGP (name)) | |
| 2551 /* Ignore patterns equal to PATTERN because we tried that | |
| 2552 already with no success. */ | |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
2553 && (strcmp (SDATA (name), pattern) == 0 |
|
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
2554 || (n = x_face_list_fonts (f, SDATA (name), |
|
49859
c6bacc76cfb6
* xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
2555 pfonts, nfonts, 0), |
| 24995 | 2556 n == 0))) |
| 2557 patterns = XCDR (patterns); | |
| 2558 } | |
| 2559 } | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
2560 |
| 24995 | 2561 return n; |
| 2562 } | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
2563 |
| 24995 | 2564 |
|
53354
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2565 /* Check if a font matching pattern_offset_t on frame F is available |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2566 or not. PATTERN may be a cons (FAMILY . REGISTRY), in which case, |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2567 a font name pattern is generated from FAMILY and REGISTRY. */ |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2568 |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2569 int |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2570 face_font_available_p (f, pattern) |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2571 struct frame *f; |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2572 Lisp_Object pattern; |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2573 { |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2574 Lisp_Object fonts; |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2575 |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2576 if (! STRINGP (pattern)) |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2577 { |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2578 Lisp_Object family, registry; |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2579 char *family_str, *registry_str, *pattern_str; |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2580 |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2581 CHECK_CONS (pattern); |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2582 family = XCAR (pattern); |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2583 if (NILP (family)) |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2584 family_str = "*"; |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2585 else |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2586 { |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2587 CHECK_STRING (family); |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2588 family_str = (char *) SDATA (family); |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2589 } |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2590 registry = XCDR (pattern); |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2591 if (NILP (registry)) |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2592 registry_str = "*"; |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2593 else |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2594 { |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2595 CHECK_STRING (registry); |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2596 registry_str = (char *) SDATA (registry); |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2597 } |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2598 |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2599 pattern_str = (char *) alloca (strlen (family_str) |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2600 + strlen (registry_str) |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2601 + 10); |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2602 strcpy (pattern_str, index (family_str, '-') ? "-" : "-*-"); |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2603 strcat (pattern_str, family_str); |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2604 strcat (pattern_str, "-*-"); |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2605 strcat (pattern_str, registry_str); |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2606 if (!index (registry_str, '-')) |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2607 { |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2608 if (registry_str[strlen (registry_str) - 1] == '*') |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2609 strcat (pattern_str, "-*"); |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2610 else |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2611 strcat (pattern_str, "*-*"); |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2612 } |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2613 pattern = build_string (pattern_str); |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2614 } |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2615 |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2616 /* Get the list of fonts matching PATTERN. */ |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2617 #ifdef WINDOWSNT |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2618 BLOCK_INPUT; |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2619 fonts = w32_list_fonts (f, pattern, 0, 1); |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2620 UNBLOCK_INPUT; |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2621 #else |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2622 fonts = x_list_fonts (f, pattern, -1, 1); |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2623 #endif |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2624 return XINT (Flength (fonts)); |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2625 } |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2626 |
|
605475ba45e3
(face_font_available_p): New function.
Kenichi Handa <handa@m17n.org>
parents:
53334
diff
changeset
|
2627 |
| 24995 | 2628 /* Determine fonts matching PATTERN on frame F. Sort resulting fonts |
| 2629 using comparison function CMPFN. Value is the number of fonts | |
| 2630 found. If value is non-zero, *FONTS is set to a vector of | |
| 2631 font_name structures allocated from the heap containing matching | |
| 2632 fonts. Each element of *FONTS contains a name member that is also | |
| 2633 allocated from the heap. Font names in these structures are split | |
| 2634 into fields. Use free_font_names to free such an array. */ | |
| 2635 | |
| 2636 static int | |
| 2637 sorted_font_list (f, pattern, cmpfn, fonts) | |
| 2638 struct frame *f; | |
| 2639 char *pattern; | |
| 2640 int (*cmpfn) P_ ((const void *, const void *)); | |
| 2641 struct font_name **fonts; | |
| 2642 { | |
| 2643 int nfonts; | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
2644 |
| 24995 | 2645 /* Get the list of fonts matching pattern. 100 should suffice. */ |
| 25270 | 2646 nfonts = DEFAULT_FONT_LIST_LIMIT; |
|
49859
c6bacc76cfb6
* xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
2647 if (INTEGERP (Vfont_list_limit)) |
|
c6bacc76cfb6
* xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
2648 nfonts = XINT (Vfont_list_limit); |
|
c6bacc76cfb6
* xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
2649 |
|
c6bacc76cfb6
* xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
2650 *fonts = NULL; |
|
c6bacc76cfb6
* xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
2651 nfonts = x_face_list_fonts (f, pattern, fonts, nfonts, 1); |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
2652 |
|
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
2653 /* Sort the resulting array and return it in *FONTS. If no |
| 24995 | 2654 fonts were found, make sure to set *FONTS to null. */ |
| 2655 if (nfonts) | |
| 2656 sort_fonts (f, *fonts, nfonts, cmpfn); | |
|
49859
c6bacc76cfb6
* xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
2657 else if (*fonts) |
| 24995 | 2658 { |
| 2659 xfree (*fonts); | |
| 2660 *fonts = NULL; | |
| 2661 } | |
| 2662 | |
| 2663 return nfonts; | |
| 2664 } | |
| 2665 | |
| 2666 | |
| 2667 /* Compare two font_name structures *A and *B. Value is analogous to | |
| 2668 strcmp. Sort order is given by the global variable | |
| 2669 font_sort_order. Font names are sorted so that, everything else | |
| 2670 being equal, fonts with a resolution closer to that of the frame on | |
| 2671 which they are used are listed first. The global variable | |
| 2672 font_frame is the frame on which we operate. */ | |
| 2673 | |
| 2674 static int | |
| 2675 cmp_font_names (a, b) | |
| 2676 const void *a, *b; | |
| 2677 { | |
| 2678 struct font_name *x = (struct font_name *) a; | |
| 2679 struct font_name *y = (struct font_name *) b; | |
| 2680 int cmp; | |
| 2681 | |
| 2682 /* All strings have been converted to lower-case by split_font_name, | |
| 2683 so we can use strcmp here. */ | |
| 2684 cmp = strcmp (x->fields[XLFD_FAMILY], y->fields[XLFD_FAMILY]); | |
| 2685 if (cmp == 0) | |
| 2686 { | |
| 2687 int i; | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
2688 |
| 24995 | 2689 for (i = 0; i < DIM (font_sort_order) && cmp == 0; ++i) |
| 2690 { | |
| 2691 int j = font_sort_order[i]; | |
| 2692 cmp = x->numeric[j] - y->numeric[j]; | |
| 2693 } | |
| 2694 | |
| 2695 if (cmp == 0) | |
| 2696 { | |
| 2697 /* Everything else being equal, we prefer fonts with an | |
| 2698 y-resolution closer to that of the frame. */ | |
| 2699 int resy = FRAME_X_DISPLAY_INFO (font_frame)->resy; | |
| 2700 int x_resy = x->numeric[XLFD_RESY]; | |
| 2701 int y_resy = y->numeric[XLFD_RESY]; | |
| 2702 cmp = abs (resy - x_resy) - abs (resy - y_resy); | |
| 2703 } | |
| 2704 } | |
| 2705 | |
| 2706 return cmp; | |
| 2707 } | |
| 2708 | |
| 2709 | |
| 2710 /* Get a sorted list of fonts of family FAMILY on frame F. If PATTERN | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
2711 is non-nil list fonts matching that pattern. Otherwise, if |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
2712 REGISTRY is non-nil return only fonts with that registry, otherwise |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
2713 return fonts of any registry. Set *FONTS to a vector of font_name |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
2714 structures allocated from the heap containing the fonts found. |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
2715 Value is the number of fonts found. */ |
| 24995 | 2716 |
| 2717 static int | |
|
33372
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
2718 font_list_1 (f, pattern, family, registry, fonts) |
| 24995 | 2719 struct frame *f; |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
2720 Lisp_Object pattern, family, registry; |
| 24995 | 2721 struct font_name **fonts; |
| 2722 { | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
2723 char *pattern_str, *family_str, *registry_str; |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
2724 |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
2725 if (NILP (pattern)) |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
2726 { |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
2727 family_str = (NILP (family) ? "*" : (char *) SDATA (family)); |
|
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
2728 registry_str = (NILP (registry) ? "*" : (char *) SDATA (registry)); |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
2729 |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
2730 pattern_str = (char *) alloca (strlen (family_str) |
|
29768
6f3f0ca4a359
(font_list): Handle the case that REGISTRY doesn't contain information
Kenichi Handa <handa@m17n.org>
parents:
29711
diff
changeset
|
2731 + strlen (registry_str) |
|
6f3f0ca4a359
(font_list): Handle the case that REGISTRY doesn't contain information
Kenichi Handa <handa@m17n.org>
parents:
29711
diff
changeset
|
2732 + 10); |
|
6f3f0ca4a359
(font_list): Handle the case that REGISTRY doesn't contain information
Kenichi Handa <handa@m17n.org>
parents:
29711
diff
changeset
|
2733 strcpy (pattern_str, index (family_str, '-') ? "-" : "-*-"); |
|
6f3f0ca4a359
(font_list): Handle the case that REGISTRY doesn't contain information
Kenichi Handa <handa@m17n.org>
parents:
29711
diff
changeset
|
2734 strcat (pattern_str, family_str); |
|
6f3f0ca4a359
(font_list): Handle the case that REGISTRY doesn't contain information
Kenichi Handa <handa@m17n.org>
parents:
29711
diff
changeset
|
2735 strcat (pattern_str, "-*-"); |
|
6f3f0ca4a359
(font_list): Handle the case that REGISTRY doesn't contain information
Kenichi Handa <handa@m17n.org>
parents:
29711
diff
changeset
|
2736 strcat (pattern_str, registry_str); |
|
6f3f0ca4a359
(font_list): Handle the case that REGISTRY doesn't contain information
Kenichi Handa <handa@m17n.org>
parents:
29711
diff
changeset
|
2737 if (!index (registry_str, '-')) |
|
6f3f0ca4a359
(font_list): Handle the case that REGISTRY doesn't contain information
Kenichi Handa <handa@m17n.org>
parents:
29711
diff
changeset
|
2738 { |
|
6f3f0ca4a359
(font_list): Handle the case that REGISTRY doesn't contain information
Kenichi Handa <handa@m17n.org>
parents:
29711
diff
changeset
|
2739 if (registry_str[strlen (registry_str) - 1] == '*') |
|
6f3f0ca4a359
(font_list): Handle the case that REGISTRY doesn't contain information
Kenichi Handa <handa@m17n.org>
parents:
29711
diff
changeset
|
2740 strcat (pattern_str, "-*"); |
|
6f3f0ca4a359
(font_list): Handle the case that REGISTRY doesn't contain information
Kenichi Handa <handa@m17n.org>
parents:
29711
diff
changeset
|
2741 else |
|
6f3f0ca4a359
(font_list): Handle the case that REGISTRY doesn't contain information
Kenichi Handa <handa@m17n.org>
parents:
29711
diff
changeset
|
2742 strcat (pattern_str, "*-*"); |
|
6f3f0ca4a359
(font_list): Handle the case that REGISTRY doesn't contain information
Kenichi Handa <handa@m17n.org>
parents:
29711
diff
changeset
|
2743 } |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
2744 } |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
2745 else |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
2746 pattern_str = (char *) SDATA (pattern); |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
2747 |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
2748 return sorted_font_list (f, pattern_str, cmp_font_names, fonts); |
| 24995 | 2749 } |
| 2750 | |
| 2751 | |
|
34160
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2752 /* Concatenate font list FONTS1 and FONTS2. FONTS1 and FONTS2 |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2753 contains NFONTS1 fonts and NFONTS2 fonts respectively. Return a |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2754 pointer to a newly allocated font list. FONTS1 and FONTS2 are |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2755 freed. */ |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2756 |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2757 static struct font_name * |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2758 concat_font_list (fonts1, nfonts1, fonts2, nfonts2) |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2759 struct font_name *fonts1, *fonts2; |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2760 int nfonts1, nfonts2; |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2761 { |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2762 int new_nfonts = nfonts1 + nfonts2; |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2763 struct font_name *new_fonts; |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2764 |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2765 new_fonts = (struct font_name *) xmalloc (sizeof *new_fonts * new_nfonts); |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2766 bcopy (fonts1, new_fonts, sizeof *new_fonts * nfonts1); |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2767 bcopy (fonts2, new_fonts + nfonts1, sizeof *new_fonts * nfonts2); |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2768 xfree (fonts1); |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2769 xfree (fonts2); |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2770 return new_fonts; |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2771 } |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2772 |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2773 |
|
33372
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
2774 /* Get a sorted list of fonts of family FAMILY on frame F. |
|
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
2775 |
|
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
2776 If PATTERN is non-nil list fonts matching that pattern. |
|
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
2777 |
|
34160
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2778 If REGISTRY is non-nil, return fonts with that registry and the |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2779 alternative registries from Vface_alternative_font_registry_alist. |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48384
diff
changeset
|
2780 |
|
33372
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
2781 If REGISTRY is nil return fonts of any registry. |
|
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
2782 |
|
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
2783 Set *FONTS to a vector of font_name structures allocated from the |
|
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
2784 heap containing the fonts found. Value is the number of fonts |
|
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
2785 found. */ |
|
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
2786 |
|
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
2787 static int |
|
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
2788 font_list (f, pattern, family, registry, fonts) |
|
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
2789 struct frame *f; |
|
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
2790 Lisp_Object pattern, family, registry; |
|
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
2791 struct font_name **fonts; |
|
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
2792 { |
|
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
2793 int nfonts = font_list_1 (f, pattern, family, registry, fonts); |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48384
diff
changeset
|
2794 |
|
34160
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2795 if (!NILP (registry) |
|
33372
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
2796 && CONSP (Vface_alternative_font_registry_alist)) |
|
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
2797 { |
|
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
2798 Lisp_Object alter; |
|
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
2799 |
|
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
2800 alter = Fassoc (registry, Vface_alternative_font_registry_alist); |
|
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
2801 if (CONSP (alter)) |
|
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
2802 { |
|
34160
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2803 int reg_prio, i; |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2804 |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2805 for (alter = XCDR (alter), reg_prio = 1; |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2806 CONSP (alter); |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2807 alter = XCDR (alter), reg_prio++) |
|
33372
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
2808 if (STRINGP (XCAR (alter))) |
|
34160
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2809 { |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2810 int nfonts2; |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2811 struct font_name *fonts2; |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2812 |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2813 nfonts2 = font_list_1 (f, pattern, family, XCAR (alter), |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2814 &fonts2); |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2815 for (i = 0; i < nfonts2; i++) |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2816 fonts2[i].registry_priority = reg_prio; |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2817 *fonts = (nfonts > 0 |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2818 ? concat_font_list (*fonts, nfonts, fonts2, nfonts2) |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2819 : fonts2); |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2820 nfonts += nfonts2; |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
2821 } |
|
33372
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
2822 } |
|
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
2823 } |
|
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
2824 |
|
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
2825 return nfonts; |
|
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
2826 } |
|
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
2827 |
|
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
2828 |
| 24995 | 2829 /* Remove elements from LIST whose cars are `equal'. Called from |
|
25661
a6e2ae7964fb
(Fx_family_fonts): Replaces Fx_font_list.
Gerd Moellmann <gerd@gnu.org>
parents:
25592
diff
changeset
|
2830 x-family-fonts and x-font-family-list to remove duplicate font |
| 24995 | 2831 entries. */ |
| 2832 | |
| 2833 static void | |
| 2834 remove_duplicates (list) | |
| 2835 Lisp_Object list; | |
| 2836 { | |
| 2837 Lisp_Object tail = list; | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
2838 |
| 24995 | 2839 while (!NILP (tail) && !NILP (XCDR (tail))) |
| 2840 { | |
| 2841 Lisp_Object next = XCDR (tail); | |
| 2842 if (!NILP (Fequal (XCAR (next), XCAR (tail)))) | |
|
39973
579177964efa
Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents:
39914
diff
changeset
|
2843 XSETCDR (tail, XCDR (next)); |
| 24995 | 2844 else |
| 2845 tail = XCDR (tail); | |
| 2846 } | |
| 2847 } | |
| 2848 | |
| 2849 | |
|
25661
a6e2ae7964fb
(Fx_family_fonts): Replaces Fx_font_list.
Gerd Moellmann <gerd@gnu.org>
parents:
25592
diff
changeset
|
2850 DEFUN ("x-family-fonts", Fx_family_fonts, Sx_family_fonts, 0, 2, 0, |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
2851 doc: /* Return a list of available fonts of family FAMILY on FRAME. |
|
39914
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
2852 If FAMILY is omitted or nil, list all families. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
2853 Otherwise, FAMILY must be a string, possibly containing wildcards |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
2854 `?' and `*'. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
2855 If FRAME is omitted or nil, use the selected frame. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
2856 Each element of the result is a vector [FAMILY WIDTH POINT-SIZE WEIGHT |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
2857 SLANT FIXED-P FULL REGISTRY-AND-ENCODING]. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
2858 FAMILY is the font family name. POINT-SIZE is the size of the |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
2859 font in 1/10 pt. WIDTH, WEIGHT, and SLANT are symbols describing the |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
2860 width, weight and slant of the font. These symbols are the same as for |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
2861 face attributes. FIXED-P is non-nil if the font is fixed-pitch. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
2862 FULL is the full name of the font, and REGISTRY-AND-ENCODING is a string |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
2863 giving the registry and encoding of the font. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
2864 The result list is sorted according to the current setting of |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
2865 the face font sort order. */) |
|
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
2866 (family, frame) |
| 24995 | 2867 Lisp_Object family, frame; |
| 2868 { | |
| 2869 struct frame *f = check_x_frame (frame); | |
| 2870 struct font_name *fonts; | |
| 2871 int i, nfonts; | |
| 2872 Lisp_Object result; | |
| 2873 struct gcpro gcpro1; | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
2874 |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
2875 if (!NILP (family)) |
|
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40603
diff
changeset
|
2876 CHECK_STRING (family); |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
2877 |
| 24995 | 2878 result = Qnil; |
| 2879 GCPRO1 (result); | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
2880 nfonts = font_list (f, Qnil, family, Qnil, &fonts); |
| 24995 | 2881 for (i = nfonts - 1; i >= 0; --i) |
| 2882 { | |
| 25270 | 2883 Lisp_Object v = Fmake_vector (make_number (8), Qnil); |
| 2884 char *tem; | |
| 24995 | 2885 |
| 2886 ASET (v, 0, build_string (fonts[i].fields[XLFD_FAMILY])); | |
| 2887 ASET (v, 1, xlfd_symbolic_swidth (fonts + i)); | |
| 2888 ASET (v, 2, make_number (xlfd_point_size (f, fonts + i))); | |
| 2889 ASET (v, 3, xlfd_symbolic_weight (fonts + i)); | |
| 2890 ASET (v, 4, xlfd_symbolic_slant (fonts + i)); | |
| 2891 ASET (v, 5, xlfd_fixed_p (fonts + i) ? Qt : Qnil); | |
| 25270 | 2892 tem = build_font_name (fonts + i); |
| 2893 ASET (v, 6, build_string (tem)); | |
| 2894 sprintf (tem, "%s-%s", fonts[i].fields[XLFD_REGISTRY], | |
| 2895 fonts[i].fields[XLFD_ENCODING]); | |
| 2896 ASET (v, 7, build_string (tem)); | |
| 2897 xfree (tem); | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
2898 |
| 24995 | 2899 result = Fcons (v, result); |
| 2900 } | |
| 2901 | |
| 2902 remove_duplicates (result); | |
| 2903 free_font_names (fonts, nfonts); | |
| 2904 UNGCPRO; | |
| 2905 return result; | |
| 2906 } | |
| 2907 | |
| 2908 | |
| 2909 DEFUN ("x-font-family-list", Fx_font_family_list, Sx_font_family_list, | |
| 2910 0, 1, 0, | |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
2911 doc: /* Return a list of available font families on FRAME. |
|
39914
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
2912 If FRAME is omitted or nil, use the selected frame. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
2913 Value is a list of conses (FAMILY . FIXED-P) where FAMILY |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
2914 is a font family, and FIXED-P is non-nil if fonts of that family |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
2915 are fixed-pitch. */) |
|
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
2916 (frame) |
| 24995 | 2917 Lisp_Object frame; |
| 2918 { | |
| 2919 struct frame *f = check_x_frame (frame); | |
| 2920 int nfonts, i; | |
| 2921 struct font_name *fonts; | |
| 2922 Lisp_Object result; | |
| 2923 struct gcpro gcpro1; | |
|
46293
1fb8f75062c6
Use macro SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents:
46285
diff
changeset
|
2924 int count = SPECPDL_INDEX (); |
|
49859
c6bacc76cfb6
* xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
2925 |
|
c6bacc76cfb6
* xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
2926 /* Let's consider all fonts. */ |
|
c6bacc76cfb6
* xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
2927 specbind (intern ("font-list-limit"), make_number (-1)); |
|
c6bacc76cfb6
* xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
2928 nfonts = font_list (f, Qnil, Qnil, Qnil, &fonts); |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
2929 |
| 24995 | 2930 result = Qnil; |
| 2931 GCPRO1 (result); | |
| 2932 for (i = nfonts - 1; i >= 0; --i) | |
| 2933 result = Fcons (Fcons (build_string (fonts[i].fields[XLFD_FAMILY]), | |
| 2934 xlfd_fixed_p (fonts + i) ? Qt : Qnil), | |
| 2935 result); | |
| 2936 | |
| 2937 remove_duplicates (result); | |
| 2938 free_font_names (fonts, nfonts); | |
| 2939 UNGCPRO; | |
| 25270 | 2940 return unbind_to (count, result); |
| 24995 | 2941 } |
| 2942 | |
| 2943 | |
| 2944 DEFUN ("x-list-fonts", Fx_list_fonts, Sx_list_fonts, 1, 5, 0, | |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
2945 doc: /* Return a list of the names of available fonts matching PATTERN. |
|
39914
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
2946 If optional arguments FACE and FRAME are specified, return only fonts |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
2947 the same size as FACE on FRAME. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
2948 PATTERN is a string, perhaps with wildcard characters; |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
2949 the * character matches any substring, and |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
2950 the ? character matches any single character. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
2951 PATTERN is case-insensitive. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
2952 FACE is a face name--a symbol. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
2953 |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
2954 The return value is a list of strings, suitable as arguments to |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
2955 set-face-font. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
2956 |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
2957 Fonts Emacs can't use may or may not be excluded |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
2958 even if they match PATTERN and FACE. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
2959 The optional fourth argument MAXIMUM sets a limit on how many |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
2960 fonts to match. The first MAXIMUM fonts are reported. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
2961 The optional fifth argument WIDTH, if specified, is a number of columns |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
2962 occupied by a character of a font. In that case, return only fonts |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
2963 the WIDTH times as wide as FACE on FRAME. */) |
|
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
2964 (pattern, face, frame, maximum, width) |
| 24995 | 2965 Lisp_Object pattern, face, frame, maximum, width; |
| 2966 { | |
| 2967 struct frame *f; | |
| 2968 int size; | |
| 2969 int maxnames; | |
| 2970 | |
| 2971 check_x (); | |
|
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40603
diff
changeset
|
2972 CHECK_STRING (pattern); |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
2973 |
| 24995 | 2974 if (NILP (maximum)) |
|
49859
c6bacc76cfb6
* xterm.c (x_list_fonts): If maxnames is less than 0, get all font
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
2975 maxnames = -1; |
| 24995 | 2976 else |
| 2977 { | |
|
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40603
diff
changeset
|
2978 CHECK_NATNUM (maximum); |
| 24995 | 2979 maxnames = XINT (maximum); |
| 2980 } | |
| 2981 | |
| 2982 if (!NILP (width)) | |
|
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40603
diff
changeset
|
2983 CHECK_NUMBER (width); |
| 24995 | 2984 |
| 2985 /* We can't simply call check_x_frame because this function may be | |
| 2986 called before any frame is created. */ | |
| 2987 f = frame_or_selected_frame (frame, 2); | |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
2988 if (!FRAME_WINDOW_P (f)) |
| 24995 | 2989 { |
| 2990 /* Perhaps we have not yet created any frame. */ | |
| 2991 f = NULL; | |
| 2992 face = Qnil; | |
| 2993 } | |
| 2994 | |
| 2995 /* Determine the width standard for comparison with the fonts we find. */ | |
| 2996 | |
| 2997 if (NILP (face)) | |
| 2998 size = 0; | |
| 2999 else | |
| 3000 { | |
| 3001 /* This is of limited utility since it works with character | |
| 3002 widths. Keep it for compatibility. --gerd. */ | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3003 int face_id = lookup_named_face (f, face, 0); |
|
33275
8c453c73a11b
(lookup_named_face): If default face isn't realized,
Gerd Moellmann <gerd@gnu.org>
parents:
33082
diff
changeset
|
3004 struct face *face = (face_id < 0 |
|
8c453c73a11b
(lookup_named_face): If default face isn't realized,
Gerd Moellmann <gerd@gnu.org>
parents:
33082
diff
changeset
|
3005 ? NULL |
|
8c453c73a11b
(lookup_named_face): If default face isn't realized,
Gerd Moellmann <gerd@gnu.org>
parents:
33082
diff
changeset
|
3006 : FACE_FROM_ID (f, face_id)); |
|
8c453c73a11b
(lookup_named_face): If default face isn't realized,
Gerd Moellmann <gerd@gnu.org>
parents:
33082
diff
changeset
|
3007 |
|
51210
491ca5acf5b3
[WINDOWSNT]: Move redefinition of FONT_WIDTH macro to
Kim F. Storm <storm@cua.dk>
parents:
51092
diff
changeset
|
3008 #ifdef WINDOWSNT |
|
491ca5acf5b3
[WINDOWSNT]: Move redefinition of FONT_WIDTH macro to
Kim F. Storm <storm@cua.dk>
parents:
51092
diff
changeset
|
3009 /* For historic reasons, FONT_WIDTH refers to average width on W32, |
|
491ca5acf5b3
[WINDOWSNT]: Move redefinition of FONT_WIDTH macro to
Kim F. Storm <storm@cua.dk>
parents:
51092
diff
changeset
|
3010 not maximum as on X. Redefine here. */ |
|
491ca5acf5b3
[WINDOWSNT]: Move redefinition of FONT_WIDTH macro to
Kim F. Storm <storm@cua.dk>
parents:
51092
diff
changeset
|
3011 #undef FONT_WIDTH |
|
491ca5acf5b3
[WINDOWSNT]: Move redefinition of FONT_WIDTH macro to
Kim F. Storm <storm@cua.dk>
parents:
51092
diff
changeset
|
3012 #define FONT_WIDTH FONT_MAX_WIDTH |
|
491ca5acf5b3
[WINDOWSNT]: Move redefinition of FONT_WIDTH macro to
Kim F. Storm <storm@cua.dk>
parents:
51092
diff
changeset
|
3013 #endif |
|
491ca5acf5b3
[WINDOWSNT]: Move redefinition of FONT_WIDTH macro to
Kim F. Storm <storm@cua.dk>
parents:
51092
diff
changeset
|
3014 |
|
33275
8c453c73a11b
(lookup_named_face): If default face isn't realized,
Gerd Moellmann <gerd@gnu.org>
parents:
33082
diff
changeset
|
3015 if (face && face->font) |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
3016 size = FONT_WIDTH (face->font); |
| 24995 | 3017 else |
|
51210
491ca5acf5b3
[WINDOWSNT]: Move redefinition of FONT_WIDTH macro to
Kim F. Storm <storm@cua.dk>
parents:
51092
diff
changeset
|
3018 size = FONT_WIDTH (FRAME_FONT (f)); /* FRAME_COLUMN_WIDTH (f) */ |
| 24995 | 3019 |
| 3020 if (!NILP (width)) | |
| 3021 size *= XINT (width); | |
| 3022 } | |
| 3023 | |
| 3024 { | |
| 3025 Lisp_Object args[2]; | |
| 3026 | |
| 3027 args[0] = x_list_fonts (f, pattern, size, maxnames); | |
| 3028 if (f == NULL) | |
| 3029 /* We don't have to check fontsets. */ | |
| 3030 return args[0]; | |
| 3031 args[1] = list_fontsets (f, pattern, size); | |
| 3032 return Fnconc (2, args); | |
| 3033 } | |
| 3034 } | |
| 3035 | |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
3036 #endif /* HAVE_WINDOW_SYSTEM */ |
| 24995 | 3037 |
| 3038 | |
| 3039 | |
| 3040 /*********************************************************************** | |
| 3041 Lisp Faces | |
| 3042 ***********************************************************************/ | |
| 3043 | |
|
35913
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
3044 /* Access face attributes of face LFACE, a Lisp vector. */ |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
3045 |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
3046 #define LFACE_FAMILY(LFACE) AREF ((LFACE), LFACE_FAMILY_INDEX) |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
3047 #define LFACE_HEIGHT(LFACE) AREF ((LFACE), LFACE_HEIGHT_INDEX) |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
3048 #define LFACE_WEIGHT(LFACE) AREF ((LFACE), LFACE_WEIGHT_INDEX) |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
3049 #define LFACE_SLANT(LFACE) AREF ((LFACE), LFACE_SLANT_INDEX) |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
3050 #define LFACE_UNDERLINE(LFACE) AREF ((LFACE), LFACE_UNDERLINE_INDEX) |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
3051 #define LFACE_INVERSE(LFACE) AREF ((LFACE), LFACE_INVERSE_INDEX) |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
3052 #define LFACE_FOREGROUND(LFACE) AREF ((LFACE), LFACE_FOREGROUND_INDEX) |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
3053 #define LFACE_BACKGROUND(LFACE) AREF ((LFACE), LFACE_BACKGROUND_INDEX) |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
3054 #define LFACE_STIPPLE(LFACE) AREF ((LFACE), LFACE_STIPPLE_INDEX) |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
3055 #define LFACE_SWIDTH(LFACE) AREF ((LFACE), LFACE_SWIDTH_INDEX) |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
3056 #define LFACE_OVERLINE(LFACE) AREF ((LFACE), LFACE_OVERLINE_INDEX) |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
3057 #define LFACE_STRIKE_THROUGH(LFACE) AREF ((LFACE), LFACE_STRIKE_THROUGH_INDEX) |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
3058 #define LFACE_BOX(LFACE) AREF ((LFACE), LFACE_BOX_INDEX) |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
3059 #define LFACE_FONT(LFACE) AREF ((LFACE), LFACE_FONT_INDEX) |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
3060 #define LFACE_INHERIT(LFACE) AREF ((LFACE), LFACE_INHERIT_INDEX) |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
3061 #define LFACE_AVGWIDTH(LFACE) AREF ((LFACE), LFACE_AVGWIDTH_INDEX) |
| 24995 | 3062 |
| 3063 /* Non-zero if LFACE is a Lisp face. A Lisp face is a vector of size | |
| 3064 LFACE_VECTOR_SIZE which has the symbol `face' in slot 0. */ | |
| 3065 | |
| 3066 #define LFACEP(LFACE) \ | |
| 3067 (VECTORP (LFACE) \ | |
| 3068 && XVECTOR (LFACE)->size == LFACE_VECTOR_SIZE \ | |
|
35913
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
3069 && EQ (AREF (LFACE, 0), Qface)) |
| 24995 | 3070 |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
3071 |
| 24995 | 3072 #if GLYPH_DEBUG |
| 3073 | |
| 3074 /* Check consistency of Lisp face attribute vector ATTRS. */ | |
| 3075 | |
| 3076 static void | |
| 3077 check_lface_attrs (attrs) | |
| 3078 Lisp_Object *attrs; | |
| 3079 { | |
| 3080 xassert (UNSPECIFIEDP (attrs[LFACE_FAMILY_INDEX]) | |
| 3081 || STRINGP (attrs[LFACE_FAMILY_INDEX])); | |
| 3082 xassert (UNSPECIFIEDP (attrs[LFACE_SWIDTH_INDEX]) | |
| 3083 || SYMBOLP (attrs[LFACE_SWIDTH_INDEX])); | |
|
35913
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
3084 xassert (UNSPECIFIEDP (attrs[LFACE_AVGWIDTH_INDEX]) |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
3085 || INTEGERP (attrs[LFACE_AVGWIDTH_INDEX])); |
| 24995 | 3086 xassert (UNSPECIFIEDP (attrs[LFACE_HEIGHT_INDEX]) |
| 31178 | 3087 || INTEGERP (attrs[LFACE_HEIGHT_INDEX]) |
| 3088 || FLOATP (attrs[LFACE_HEIGHT_INDEX]) | |
| 3089 || FUNCTIONP (attrs[LFACE_HEIGHT_INDEX])); | |
| 24995 | 3090 xassert (UNSPECIFIEDP (attrs[LFACE_WEIGHT_INDEX]) |
| 3091 || SYMBOLP (attrs[LFACE_WEIGHT_INDEX])); | |
| 3092 xassert (UNSPECIFIEDP (attrs[LFACE_SLANT_INDEX]) | |
| 3093 || SYMBOLP (attrs[LFACE_SLANT_INDEX])); | |
| 3094 xassert (UNSPECIFIEDP (attrs[LFACE_UNDERLINE_INDEX]) | |
| 3095 || SYMBOLP (attrs[LFACE_UNDERLINE_INDEX]) | |
| 3096 || STRINGP (attrs[LFACE_UNDERLINE_INDEX])); | |
| 3097 xassert (UNSPECIFIEDP (attrs[LFACE_OVERLINE_INDEX]) | |
| 3098 || SYMBOLP (attrs[LFACE_OVERLINE_INDEX]) | |
| 3099 || STRINGP (attrs[LFACE_OVERLINE_INDEX])); | |
| 3100 xassert (UNSPECIFIEDP (attrs[LFACE_STRIKE_THROUGH_INDEX]) | |
| 3101 || SYMBOLP (attrs[LFACE_STRIKE_THROUGH_INDEX]) | |
| 3102 || STRINGP (attrs[LFACE_STRIKE_THROUGH_INDEX])); | |
| 3103 xassert (UNSPECIFIEDP (attrs[LFACE_BOX_INDEX]) | |
| 3104 || SYMBOLP (attrs[LFACE_BOX_INDEX]) | |
| 3105 || STRINGP (attrs[LFACE_BOX_INDEX]) | |
| 3106 || INTEGERP (attrs[LFACE_BOX_INDEX]) | |
| 3107 || CONSP (attrs[LFACE_BOX_INDEX])); | |
| 3108 xassert (UNSPECIFIEDP (attrs[LFACE_INVERSE_INDEX]) | |
| 3109 || SYMBOLP (attrs[LFACE_INVERSE_INDEX])); | |
| 3110 xassert (UNSPECIFIEDP (attrs[LFACE_FOREGROUND_INDEX]) | |
| 3111 || STRINGP (attrs[LFACE_FOREGROUND_INDEX])); | |
| 3112 xassert (UNSPECIFIEDP (attrs[LFACE_BACKGROUND_INDEX]) | |
| 3113 || STRINGP (attrs[LFACE_BACKGROUND_INDEX])); | |
| 31178 | 3114 xassert (UNSPECIFIEDP (attrs[LFACE_INHERIT_INDEX]) |
| 3115 || NILP (attrs[LFACE_INHERIT_INDEX]) | |
| 3116 || SYMBOLP (attrs[LFACE_INHERIT_INDEX]) | |
| 3117 || CONSP (attrs[LFACE_INHERIT_INDEX])); | |
| 24995 | 3118 #ifdef HAVE_WINDOW_SYSTEM |
| 3119 xassert (UNSPECIFIEDP (attrs[LFACE_STIPPLE_INDEX]) | |
| 3120 || SYMBOLP (attrs[LFACE_STIPPLE_INDEX]) | |
|
25890
b10a34d40b55
(Qbitmap_spec_p): Replaces Qpixmap_spec_p.
Gerd Moellmann <gerd@gnu.org>
parents:
25883
diff
changeset
|
3121 || !NILP (Fbitmap_spec_p (attrs[LFACE_STIPPLE_INDEX]))); |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3122 xassert (UNSPECIFIEDP (attrs[LFACE_FONT_INDEX]) |
|
28237
2f636fd2f714
(check_lface_attrs) [GLYPH_DEBUG]: Fix syntax error.
Gerd Moellmann <gerd@gnu.org>
parents:
28230
diff
changeset
|
3123 || NILP (attrs[LFACE_FONT_INDEX]) |
|
2f636fd2f714
(check_lface_attrs) [GLYPH_DEBUG]: Fix syntax error.
Gerd Moellmann <gerd@gnu.org>
parents:
28230
diff
changeset
|
3124 || STRINGP (attrs[LFACE_FONT_INDEX])); |
| 24995 | 3125 #endif |
| 3126 } | |
| 3127 | |
| 3128 | |
| 3129 /* Check consistency of attributes of Lisp face LFACE (a Lisp vector). */ | |
| 3130 | |
| 3131 static void | |
| 3132 check_lface (lface) | |
| 3133 Lisp_Object lface; | |
| 3134 { | |
| 3135 if (!NILP (lface)) | |
| 3136 { | |
| 3137 xassert (LFACEP (lface)); | |
| 3138 check_lface_attrs (XVECTOR (lface)->contents); | |
| 3139 } | |
| 3140 } | |
| 3141 | |
| 3142 #else /* GLYPH_DEBUG == 0 */ | |
| 3143 | |
| 3144 #define check_lface_attrs(attrs) (void) 0 | |
| 3145 #define check_lface(lface) (void) 0 | |
| 3146 | |
| 3147 #endif /* GLYPH_DEBUG == 0 */ | |
| 3148 | |
| 3149 | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3150 /* Resolve face name FACE_NAME. If FACE_NAME is a string, intern it |
|
25883
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
3151 to make it a symvol. If FACE_NAME is an alias for another face, |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
3152 return that face's name. */ |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
3153 |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
3154 static Lisp_Object |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
3155 resolve_face_name (face_name) |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
3156 Lisp_Object face_name; |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
3157 { |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
3158 Lisp_Object aliased; |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
3159 |
|
25883
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
3160 if (STRINGP (face_name)) |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
3161 face_name = intern (SDATA (face_name)); |
|
25883
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
3162 |
|
33070
ca31e3965686
(resolve_face_name): Handle case that FACE_NAME
Gerd Moellmann <gerd@gnu.org>
parents:
32752
diff
changeset
|
3163 while (SYMBOLP (face_name)) |
|
25883
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
3164 { |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
3165 aliased = Fget (face_name, Qface_alias); |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
3166 if (NILP (aliased)) |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
3167 break; |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
3168 else |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
3169 face_name = aliased; |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
3170 } |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
3171 |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
3172 return face_name; |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
3173 } |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
3174 |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
3175 |
| 24995 | 3176 /* Return the face definition of FACE_NAME on frame F. F null means |
|
33853
eb4affa4abc6
(lface_from_face_name): Function comment fix.
Gerd Moellmann <gerd@gnu.org>
parents:
33529
diff
changeset
|
3177 return the definition for new frames. FACE_NAME may be a string or |
|
eb4affa4abc6
(lface_from_face_name): Function comment fix.
Gerd Moellmann <gerd@gnu.org>
parents:
33529
diff
changeset
|
3178 a symbol (apparently Emacs 20.2 allowed strings as face names in |
|
eb4affa4abc6
(lface_from_face_name): Function comment fix.
Gerd Moellmann <gerd@gnu.org>
parents:
33529
diff
changeset
|
3179 face text properties; Ediff uses that). If FACE_NAME is an alias |
|
eb4affa4abc6
(lface_from_face_name): Function comment fix.
Gerd Moellmann <gerd@gnu.org>
parents:
33529
diff
changeset
|
3180 for another face, return that face's definition. If SIGNAL_P is |
|
25661
a6e2ae7964fb
(Fx_family_fonts): Replaces Fx_font_list.
Gerd Moellmann <gerd@gnu.org>
parents:
25592
diff
changeset
|
3181 non-zero, signal an error if FACE_NAME is not a valid face name. |
|
a6e2ae7964fb
(Fx_family_fonts): Replaces Fx_font_list.
Gerd Moellmann <gerd@gnu.org>
parents:
25592
diff
changeset
|
3182 If SIGNAL_P is zero, value is nil if FACE_NAME is not a valid face |
|
a6e2ae7964fb
(Fx_family_fonts): Replaces Fx_font_list.
Gerd Moellmann <gerd@gnu.org>
parents:
25592
diff
changeset
|
3183 name. */ |
| 24995 | 3184 |
| 3185 static INLINE Lisp_Object | |
| 3186 lface_from_face_name (f, face_name, signal_p) | |
| 3187 struct frame *f; | |
| 3188 Lisp_Object face_name; | |
| 3189 int signal_p; | |
| 3190 { | |
|
25883
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
3191 Lisp_Object lface; |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
3192 |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
3193 face_name = resolve_face_name (face_name); |
|
25661
a6e2ae7964fb
(Fx_family_fonts): Replaces Fx_font_list.
Gerd Moellmann <gerd@gnu.org>
parents:
25592
diff
changeset
|
3194 |
| 24995 | 3195 if (f) |
| 3196 lface = assq_no_quit (face_name, f->face_alist); | |
| 3197 else | |
| 3198 lface = assq_no_quit (face_name, Vface_new_frame_defaults); | |
| 3199 | |
| 3200 if (CONSP (lface)) | |
| 3201 lface = XCDR (lface); | |
| 3202 else if (signal_p) | |
| 3203 signal_error ("Invalid face", face_name); | |
| 3204 | |
| 3205 check_lface (lface); | |
| 3206 return lface; | |
| 3207 } | |
| 3208 | |
| 3209 | |
| 3210 /* Get face attributes of face FACE_NAME from frame-local faces on | |
| 3211 frame F. Store the resulting attributes in ATTRS which must point | |
| 3212 to a vector of Lisp_Objects of size LFACE_VECTOR_SIZE. If SIGNAL_P | |
| 3213 is non-zero, signal an error if FACE_NAME does not name a face. | |
| 3214 Otherwise, value is zero if FACE_NAME is not a face. */ | |
| 3215 | |
| 3216 static INLINE int | |
| 3217 get_lface_attributes (f, face_name, attrs, signal_p) | |
| 3218 struct frame *f; | |
| 3219 Lisp_Object face_name; | |
| 3220 Lisp_Object *attrs; | |
| 3221 int signal_p; | |
| 3222 { | |
| 3223 Lisp_Object lface; | |
| 3224 int success_p; | |
| 3225 | |
| 3226 lface = lface_from_face_name (f, face_name, signal_p); | |
| 3227 if (!NILP (lface)) | |
| 3228 { | |
| 3229 bcopy (XVECTOR (lface)->contents, attrs, | |
| 3230 LFACE_VECTOR_SIZE * sizeof *attrs); | |
| 3231 success_p = 1; | |
| 3232 } | |
| 3233 else | |
| 3234 success_p = 0; | |
| 3235 | |
| 3236 return success_p; | |
| 3237 } | |
| 3238 | |
| 3239 | |
| 3240 /* Non-zero if all attributes in face attribute vector ATTRS are | |
| 3241 specified, i.e. are non-nil. */ | |
| 3242 | |
| 3243 static int | |
| 3244 lface_fully_specified_p (attrs) | |
| 3245 Lisp_Object *attrs; | |
| 3246 { | |
| 3247 int i; | |
| 3248 | |
| 3249 for (i = 1; i < LFACE_VECTOR_SIZE; ++i) | |
|
35913
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
3250 if (i != LFACE_FONT_INDEX && i != LFACE_INHERIT_INDEX |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
3251 && i != LFACE_AVGWIDTH_INDEX) |
|
53274
c6ecb6ee69bf
* xfaces.c (lface_fully_specified_p): Take into account that
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
53267
diff
changeset
|
3252 if (UNSPECIFIEDP (attrs[i]) |
|
c6ecb6ee69bf
* xfaces.c (lface_fully_specified_p): Take into account that
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
53267
diff
changeset
|
3253 #ifdef MAC_OS |
|
c6ecb6ee69bf
* xfaces.c (lface_fully_specified_p): Take into account that
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
53267
diff
changeset
|
3254 /* MAC_TODO: No stipple support on Mac OS yet, this index is |
|
c6ecb6ee69bf
* xfaces.c (lface_fully_specified_p): Take into account that
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
53267
diff
changeset
|
3255 always unspecified. */ |
|
c6ecb6ee69bf
* xfaces.c (lface_fully_specified_p): Take into account that
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
53267
diff
changeset
|
3256 && i != LFACE_STIPPLE_INDEX |
|
c6ecb6ee69bf
* xfaces.c (lface_fully_specified_p): Take into account that
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
53267
diff
changeset
|
3257 #endif |
|
c6ecb6ee69bf
* xfaces.c (lface_fully_specified_p): Take into account that
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
53267
diff
changeset
|
3258 ) |
|
31202
1733db535955
(lface_fully_specified_p): Handle :inherit.
Gerd Moellmann <gerd@gnu.org>
parents:
31178
diff
changeset
|
3259 break; |
| 24995 | 3260 |
| 3261 return i == LFACE_VECTOR_SIZE; | |
| 3262 } | |
| 3263 | |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
3264 #ifdef HAVE_WINDOW_SYSTEM |
| 24995 | 3265 |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3266 /* Set font-related attributes of Lisp face LFACE from the fullname of |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3267 the font opened by FONTNAME. If FORCE_P is zero, set only |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3268 unspecified attributes of LFACE. The exception is `font' |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3269 attribute. It is set to FONTNAME as is regardless of FORCE_P. |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3270 |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3271 If FONTNAME is not available on frame F, |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3272 return 0 if MAY_FAIL_P is non-zero, otherwise abort. |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3273 If the fullname is not in a valid XLFD format, |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3274 return 0 if MAY_FAIL_P is non-zero, otherwise set normal values |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3275 in LFACE and return 1. |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3276 Otherwise, return 1. */ |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
3277 |
| 24995 | 3278 static int |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3279 set_lface_from_font_name (f, lface, fontname, force_p, may_fail_p) |
|
6784
d41c216ccd27
(frame_update_line_height): Check param_faces[i] not null.
Richard M. Stallman <rms@gnu.org>
parents:
6768
diff
changeset
|
3280 struct frame *f; |
| 24995 | 3281 Lisp_Object lface; |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3282 Lisp_Object fontname; |
|
26594
f24bdf26ad39
(set_lface_from_font_name): New parameter may_fail_p.
Gerd Moellmann <gerd@gnu.org>
parents:
26574
diff
changeset
|
3283 int force_p, may_fail_p; |
| 24995 | 3284 { |
| 3285 struct font_name font; | |
| 3286 char *buffer; | |
| 3287 int pt; | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3288 int have_xlfd_p; |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3289 int fontset; |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
3290 char *font_name = SDATA (fontname); |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3291 struct font_info *font_info; |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3292 |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3293 /* If FONTNAME is actually a fontset name, get ASCII font name of it. */ |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3294 fontset = fs_query_fontset (fontname, 0); |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3295 if (fontset >= 0) |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
3296 font_name = SDATA (fontset_ascii (fontset)); |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3297 |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3298 /* Check if FONT_NAME is surely available on the system. Usually |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3299 FONT_NAME is already cached for the frame F and FS_LOAD_FONT |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3300 returns quickly. But, even if FONT_NAME is not yet cached, |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3301 caching it now is not futail because we anyway load the font |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3302 later. */ |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3303 BLOCK_INPUT; |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3304 font_info = FS_LOAD_FONT (f, 0, font_name, -1); |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3305 UNBLOCK_INPUT; |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3306 |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3307 if (!font_info) |
|
26594
f24bdf26ad39
(set_lface_from_font_name): New parameter may_fail_p.
Gerd Moellmann <gerd@gnu.org>
parents:
26574
diff
changeset
|
3308 { |
|
f24bdf26ad39
(set_lface_from_font_name): New parameter may_fail_p.
Gerd Moellmann <gerd@gnu.org>
parents:
26574
diff
changeset
|
3309 if (may_fail_p) |
|
f24bdf26ad39
(set_lface_from_font_name): New parameter may_fail_p.
Gerd Moellmann <gerd@gnu.org>
parents:
26574
diff
changeset
|
3310 return 0; |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3311 abort (); |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3312 } |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3313 |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3314 font.name = STRDUPA (font_info->full_name); |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3315 have_xlfd_p = split_font_name (f, &font, 1); |
| 24995 | 3316 |
| 3317 /* Set attributes only if unspecified, otherwise face defaults for | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3318 new frames would never take effect. If we couldn't get a font |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3319 name conforming to XLFD, set normal values. */ |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
3320 |
| 24995 | 3321 if (force_p || UNSPECIFIEDP (LFACE_FAMILY (lface))) |
| 3322 { | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3323 Lisp_Object val; |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3324 if (have_xlfd_p) |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3325 { |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3326 buffer = (char *) alloca (strlen (font.fields[XLFD_FAMILY]) |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3327 + strlen (font.fields[XLFD_FOUNDRY]) |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3328 + 2); |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3329 sprintf (buffer, "%s-%s", font.fields[XLFD_FOUNDRY], |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3330 font.fields[XLFD_FAMILY]); |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3331 val = build_string (buffer); |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3332 } |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3333 else |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3334 val = build_string ("*"); |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3335 LFACE_FAMILY (lface) = val; |
| 24995 | 3336 } |
| 3337 | |
| 3338 if (force_p || UNSPECIFIEDP (LFACE_HEIGHT (lface))) | |
| 3339 { | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3340 if (have_xlfd_p) |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3341 pt = xlfd_point_size (f, &font); |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3342 else |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3343 pt = pixel_point_size (f, font_info->height * 10); |
| 24995 | 3344 xassert (pt > 0); |
| 3345 LFACE_HEIGHT (lface) = make_number (pt); | |
| 3346 } | |
| 3347 | |
| 3348 if (force_p || UNSPECIFIEDP (LFACE_SWIDTH (lface))) | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3349 LFACE_SWIDTH (lface) |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3350 = have_xlfd_p ? xlfd_symbolic_swidth (&font) : Qnormal; |
| 24995 | 3351 |
|
35913
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
3352 if (force_p || UNSPECIFIEDP (LFACE_AVGWIDTH (lface))) |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
3353 LFACE_AVGWIDTH (lface) |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
3354 = (have_xlfd_p |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
3355 ? make_number (font.numeric[XLFD_AVGWIDTH]) |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
3356 : Qunspecified); |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
3357 |
| 24995 | 3358 if (force_p || UNSPECIFIEDP (LFACE_WEIGHT (lface))) |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3359 LFACE_WEIGHT (lface) |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3360 = have_xlfd_p ? xlfd_symbolic_weight (&font) : Qnormal; |
| 24995 | 3361 |
| 3362 if (force_p || UNSPECIFIEDP (LFACE_SLANT (lface))) | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3363 LFACE_SLANT (lface) |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3364 = have_xlfd_p ? xlfd_symbolic_slant (&font) : Qnormal; |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3365 |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3366 LFACE_FONT (lface) = fontname; |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
3367 |
| 24995 | 3368 return 1; |
| 3369 } | |
|
31570
9eeff4863080
Remove conditional compilation on SCALABLE_FONTS.
Gerd Moellmann <gerd@gnu.org>
parents:
31522
diff
changeset
|
3370 |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
3371 #endif /* HAVE_WINDOW_SYSTEM */ |
| 24995 | 3372 |
| 3373 | |
| 31178 | 3374 /* Merges the face height FROM with the face height TO, and returns the |
| 3375 merged height. If FROM is an invalid height, then INVALID is | |
|
40398
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
3376 returned instead. FROM and TO may be either absolute face heights or |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
3377 `relative' heights; the returned value is always an absolute height |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
3378 unless both FROM and TO are relative. GCPRO is a lisp value that |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
3379 will be protected from garbage-collection if this function makes a |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
3380 call into lisp. */ |
| 31178 | 3381 |
| 3382 Lisp_Object | |
| 3383 merge_face_heights (from, to, invalid, gcpro) | |
| 3384 Lisp_Object from, to, invalid, gcpro; | |
| 3385 { | |
|
40398
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
3386 Lisp_Object result = invalid; |
| 31178 | 3387 |
| 3388 if (INTEGERP (from)) | |
|
40398
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
3389 /* FROM is absolute, just use it as is. */ |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
3390 result = from; |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
3391 else if (FLOATP (from)) |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
3392 /* FROM is a scale, use it to adjust TO. */ |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
3393 { |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
3394 if (INTEGERP (to)) |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
3395 /* relative X absolute => absolute */ |
|
41518
ee7c1fe5feaf
(merge_face_heights): Coerce back to int explicitly.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41129
diff
changeset
|
3396 result = make_number ((EMACS_INT)(XFLOAT_DATA (from) * XINT (to))); |
|
40398
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
3397 else if (FLOATP (to)) |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
3398 /* relative X relative => relative */ |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
3399 result = make_float (XFLOAT_DATA (from) * XFLOAT_DATA (to)); |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
3400 } |
| 31178 | 3401 else if (FUNCTIONP (from)) |
|
40398
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
3402 /* FROM is a function, which use to adjust TO. */ |
| 31178 | 3403 { |
| 3404 /* Call function with current height as argument. | |
| 3405 From is the new height. */ | |
|
40398
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
3406 Lisp_Object args[2]; |
| 31178 | 3407 struct gcpro gcpro1; |
| 3408 | |
| 3409 GCPRO1 (gcpro); | |
| 3410 | |
| 3411 args[0] = from; | |
| 3412 args[1] = to; | |
|
40398
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
3413 result = safe_call (2, args); |
| 31178 | 3414 |
| 3415 UNGCPRO; | |
| 3416 | |
|
40398
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
3417 /* Ensure that if TO was absolute, so is the result. */ |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
3418 if (INTEGERP (to) && !INTEGERP (result)) |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
3419 result = invalid; |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
3420 } |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
3421 |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
3422 return result; |
| 31178 | 3423 } |
| 3424 | |
| 3425 | |
| 3426 /* Merge two Lisp face attribute vectors on frame F, FROM and TO, and | |
|
31259
2be1770112c1
(default_face_vector): New function.
Miles Bader <miles@gnu.org>
parents:
31221
diff
changeset
|
3427 store the resulting attributes in TO, which must be already be |
|
2be1770112c1
(default_face_vector): New function.
Miles Bader <miles@gnu.org>
parents:
31221
diff
changeset
|
3428 completely specified and contain only absolute attributes. Every |
|
2be1770112c1
(default_face_vector): New function.
Miles Bader <miles@gnu.org>
parents:
31221
diff
changeset
|
3429 specified attribute of FROM overrides the corresponding attribute of |
|
2be1770112c1
(default_face_vector): New function.
Miles Bader <miles@gnu.org>
parents:
31221
diff
changeset
|
3430 TO; relative attributes in FROM are merged with the absolute value in |
|
2be1770112c1
(default_face_vector): New function.
Miles Bader <miles@gnu.org>
parents:
31221
diff
changeset
|
3431 TO and replace it. CYCLE_CHECK is used internally to detect loops in |
|
2be1770112c1
(default_face_vector): New function.
Miles Bader <miles@gnu.org>
parents:
31221
diff
changeset
|
3432 face inheritance; it should be Qnil when called from other places. */ |
| 24995 | 3433 |
| 3434 static INLINE void | |
| 31178 | 3435 merge_face_vectors (f, from, to, cycle_check) |
| 3436 struct frame *f; | |
| 24995 | 3437 Lisp_Object *from, *to; |
| 31178 | 3438 Lisp_Object cycle_check; |
| 24995 | 3439 { |
| 3440 int i; | |
| 31178 | 3441 |
| 3442 /* If FROM inherits from some other faces, merge their attributes into | |
| 3443 TO before merging FROM's direct attributes. Note that an :inherit | |
| 3444 attribute of `unspecified' is the same as one of nil; we never | |
| 3445 merge :inherit attributes, so nil is more correct, but lots of | |
| 3446 other code uses `unspecified' as a generic value for face attributes. */ | |
| 3447 if (!UNSPECIFIEDP (from[LFACE_INHERIT_INDEX]) | |
| 3448 && !NILP (from[LFACE_INHERIT_INDEX])) | |
| 3449 merge_face_inheritance (f, from[LFACE_INHERIT_INDEX], to, cycle_check); | |
| 3450 | |
| 31221 | 3451 /* If TO specifies a :font attribute, and FROM specifies some |
| 3452 font-related attribute, we need to clear TO's :font attribute | |
| 3453 (because it will be inconsistent with whatever FROM specifies, and | |
| 3454 FROM takes precedence). */ | |
| 3455 if (!NILP (to[LFACE_FONT_INDEX]) | |
| 3456 && (!UNSPECIFIEDP (from[LFACE_FAMILY_INDEX]) | |
| 3457 || !UNSPECIFIEDP (from[LFACE_HEIGHT_INDEX]) | |
| 3458 || !UNSPECIFIEDP (from[LFACE_WEIGHT_INDEX]) | |
| 3459 || !UNSPECIFIEDP (from[LFACE_SLANT_INDEX]) | |
|
35913
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
3460 || !UNSPECIFIEDP (from[LFACE_SWIDTH_INDEX]) |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
3461 || !UNSPECIFIEDP (from[LFACE_AVGWIDTH_INDEX]))) |
| 31221 | 3462 to[LFACE_FONT_INDEX] = Qnil; |
| 3463 | |
| 24995 | 3464 for (i = 1; i < LFACE_VECTOR_SIZE; ++i) |
| 3465 if (!UNSPECIFIEDP (from[i])) | |
|
40838
bf08eafda9a3
(merge_face_vectors): Use braces to follow GNU Coding Standards.
Pavel Jan?k <Pavel@Janik.cz>
parents:
40656
diff
changeset
|
3466 { |
|
bf08eafda9a3
(merge_face_vectors): Use braces to follow GNU Coding Standards.
Pavel Jan?k <Pavel@Janik.cz>
parents:
40656
diff
changeset
|
3467 if (i == LFACE_HEIGHT_INDEX && !INTEGERP (from[i])) |
|
bf08eafda9a3
(merge_face_vectors): Use braces to follow GNU Coding Standards.
Pavel Jan?k <Pavel@Janik.cz>
parents:
40656
diff
changeset
|
3468 to[i] = merge_face_heights (from[i], to[i], to[i], cycle_check); |
|
bf08eafda9a3
(merge_face_vectors): Use braces to follow GNU Coding Standards.
Pavel Jan?k <Pavel@Janik.cz>
parents:
40656
diff
changeset
|
3469 else |
|
bf08eafda9a3
(merge_face_vectors): Use braces to follow GNU Coding Standards.
Pavel Jan?k <Pavel@Janik.cz>
parents:
40656
diff
changeset
|
3470 to[i] = from[i]; |
|
bf08eafda9a3
(merge_face_vectors): Use braces to follow GNU Coding Standards.
Pavel Jan?k <Pavel@Janik.cz>
parents:
40656
diff
changeset
|
3471 } |
| 31178 | 3472 |
| 3473 /* TO is always an absolute face, which should inherit from nothing. | |
| 3474 We blindly copy the :inherit attribute above and fix it up here. */ | |
| 3475 to[LFACE_INHERIT_INDEX] = Qnil; | |
| 3476 } | |
| 3477 | |
|
31202
1733db535955
(lface_fully_specified_p): Handle :inherit.
Gerd Moellmann <gerd@gnu.org>
parents:
31178
diff
changeset
|
3478 |
| 31178 | 3479 /* Checks the `cycle check' variable CHECK to see if it indicates that |
| 3480 EL is part of a cycle; CHECK must be either Qnil or a value returned | |
| 3481 by an earlier use of CYCLE_CHECK. SUSPICIOUS is the number of | |
| 3482 elements after which a cycle might be suspected; after that many | |
| 3483 elements, this macro begins consing in order to keep more precise | |
| 3484 track of elements. | |
| 3485 | |
| 42206 | 3486 Returns nil if a cycle was detected, otherwise a new value for CHECK |
| 31178 | 3487 that includes EL. |
| 3488 | |
| 3489 CHECK is evaluated multiple times, EL and SUSPICIOUS 0 or 1 times, so | |
| 3490 the caller should make sure that's ok. */ | |
|
31202
1733db535955
(lface_fully_specified_p): Handle :inherit.
Gerd Moellmann <gerd@gnu.org>
parents:
31178
diff
changeset
|
3491 |
|
31522
7ba4ef0eac8d
(CYCLE_CHECK): Don't use the Lisp_Object returned
Gerd Moellmann <gerd@gnu.org>
parents:
31519
diff
changeset
|
3492 #define CYCLE_CHECK(check, el, suspicious) \ |
|
7ba4ef0eac8d
(CYCLE_CHECK): Don't use the Lisp_Object returned
Gerd Moellmann <gerd@gnu.org>
parents:
31519
diff
changeset
|
3493 (NILP (check) \ |
|
7ba4ef0eac8d
(CYCLE_CHECK): Don't use the Lisp_Object returned
Gerd Moellmann <gerd@gnu.org>
parents:
31519
diff
changeset
|
3494 ? make_number (0) \ |
|
7ba4ef0eac8d
(CYCLE_CHECK): Don't use the Lisp_Object returned
Gerd Moellmann <gerd@gnu.org>
parents:
31519
diff
changeset
|
3495 : (INTEGERP (check) \ |
|
7ba4ef0eac8d
(CYCLE_CHECK): Don't use the Lisp_Object returned
Gerd Moellmann <gerd@gnu.org>
parents:
31519
diff
changeset
|
3496 ? (XFASTINT (check) < (suspicious) \ |
|
7ba4ef0eac8d
(CYCLE_CHECK): Don't use the Lisp_Object returned
Gerd Moellmann <gerd@gnu.org>
parents:
31519
diff
changeset
|
3497 ? make_number (XFASTINT (check) + 1) \ |
|
7ba4ef0eac8d
(CYCLE_CHECK): Don't use the Lisp_Object returned
Gerd Moellmann <gerd@gnu.org>
parents:
31519
diff
changeset
|
3498 : Fcons (el, Qnil)) \ |
|
7ba4ef0eac8d
(CYCLE_CHECK): Don't use the Lisp_Object returned
Gerd Moellmann <gerd@gnu.org>
parents:
31519
diff
changeset
|
3499 : (!NILP (Fmemq ((el), (check))) \ |
|
7ba4ef0eac8d
(CYCLE_CHECK): Don't use the Lisp_Object returned
Gerd Moellmann <gerd@gnu.org>
parents:
31519
diff
changeset
|
3500 ? Qnil \ |
|
7ba4ef0eac8d
(CYCLE_CHECK): Don't use the Lisp_Object returned
Gerd Moellmann <gerd@gnu.org>
parents:
31519
diff
changeset
|
3501 : Fcons ((el), (check))))) |
| 31178 | 3502 |
| 31221 | 3503 |
| 3504 /* Merge face attributes from the face on frame F whose name is | |
| 3505 INHERITS, into the vector of face attributes TO; INHERITS may also be | |
| 3506 a list of face names, in which case they are applied in order. | |
| 3507 CYCLE_CHECK is used to detect loops in face inheritance. | |
| 3508 Returns true if any of the inherited attributes are `font-related'. */ | |
| 3509 | |
| 31178 | 3510 static void |
| 3511 merge_face_inheritance (f, inherit, to, cycle_check) | |
| 3512 struct frame *f; | |
| 3513 Lisp_Object inherit; | |
| 3514 Lisp_Object *to; | |
| 3515 Lisp_Object cycle_check; | |
| 3516 { | |
| 3517 if (SYMBOLP (inherit) && !EQ (inherit, Qunspecified)) | |
| 3518 /* Inherit from the named face INHERIT. */ | |
| 3519 { | |
| 3520 Lisp_Object lface; | |
| 3521 | |
| 3522 /* Make sure we're not in an inheritance loop. */ | |
| 3523 cycle_check = CYCLE_CHECK (cycle_check, inherit, 15); | |
| 3524 if (NILP (cycle_check)) | |
| 3525 /* Cycle detected, ignore any further inheritance. */ | |
| 3526 return; | |
| 3527 | |
| 3528 lface = lface_from_face_name (f, inherit, 0); | |
| 3529 if (!NILP (lface)) | |
| 3530 merge_face_vectors (f, XVECTOR (lface)->contents, to, cycle_check); | |
| 3531 } | |
| 3532 else if (CONSP (inherit)) | |
| 3533 /* Handle a list of inherited faces by calling ourselves recursively | |
| 3534 on each element. Note that we only do so for symbol elements, so | |
| 3535 it's not possible to infinitely recurse. */ | |
| 3536 { | |
| 3537 while (CONSP (inherit)) | |
| 3538 { | |
| 3539 if (SYMBOLP (XCAR (inherit))) | |
| 3540 merge_face_inheritance (f, XCAR (inherit), to, cycle_check); | |
| 3541 | |
| 3542 /* Check for a circular inheritance list. */ | |
| 3543 cycle_check = CYCLE_CHECK (cycle_check, inherit, 15); | |
| 3544 if (NILP (cycle_check)) | |
| 3545 /* Cycle detected. */ | |
| 3546 break; | |
| 3547 | |
| 3548 inherit = XCDR (inherit); | |
| 3549 } | |
| 3550 } | |
| 24995 | 3551 } |
| 3552 | |
| 3553 | |
| 3554 /* Given a Lisp face attribute vector TO and a Lisp object PROP that | |
| 3555 is a face property, determine the resulting face attributes on | |
| 3556 frame F, and store them in TO. PROP may be a single face | |
| 3557 specification or a list of such specifications. Each face | |
| 3558 specification can be | |
| 3559 | |
| 3560 1. A symbol or string naming a Lisp face. | |
| 3561 | |
| 3562 2. A property list of the form (KEYWORD VALUE ...) where each | |
| 3563 KEYWORD is a face attribute name, and value is an appropriate value | |
| 3564 for that attribute. | |
| 3565 | |
| 3566 3. Conses or the form (FOREGROUND-COLOR . COLOR) or | |
| 3567 (BACKGROUND-COLOR . COLOR) where COLOR is a color name. This is | |
| 3568 for compatibility with 20.2. | |
| 3569 | |
| 3570 Face specifications earlier in lists take precedence over later | |
| 3571 specifications. */ | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
3572 |
| 24995 | 3573 static void |
| 3574 merge_face_vector_with_property (f, to, prop) | |
| 3575 struct frame *f; | |
| 3576 Lisp_Object *to; | |
| 3577 Lisp_Object prop; | |
| 3578 { | |
| 3579 if (CONSP (prop)) | |
| 3580 { | |
| 3581 Lisp_Object first = XCAR (prop); | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
3582 |
| 24995 | 3583 if (EQ (first, Qforeground_color) |
| 3584 || EQ (first, Qbackground_color)) | |
| 3585 { | |
| 3586 /* One of (FOREGROUND-COLOR . COLOR) or (BACKGROUND-COLOR | |
| 3587 . COLOR). COLOR must be a string. */ | |
| 3588 Lisp_Object color_name = XCDR (prop); | |
| 3589 Lisp_Object color = first; | |
| 3590 | |
| 3591 if (STRINGP (color_name)) | |
| 3592 { | |
| 3593 if (EQ (color, Qforeground_color)) | |
| 3594 to[LFACE_FOREGROUND_INDEX] = color_name; | |
| 3595 else | |
| 3596 to[LFACE_BACKGROUND_INDEX] = color_name; | |
| 3597 } | |
| 3598 else | |
|
25799
1c370ec939da
(load_pixmap): Call add_to_log without frame parameter.
Gerd Moellmann <gerd@gnu.org>
parents:
25678
diff
changeset
|
3599 add_to_log ("Invalid face color", color_name, Qnil); |
| 24995 | 3600 } |
| 3601 else if (SYMBOLP (first) | |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
3602 && *SDATA (SYMBOL_NAME (first)) == ':') |
| 24995 | 3603 { |
| 3604 /* Assume this is the property list form. */ | |
| 3605 while (CONSP (prop) && CONSP (XCDR (prop))) | |
| 3606 { | |
| 3607 Lisp_Object keyword = XCAR (prop); | |
| 3608 Lisp_Object value = XCAR (XCDR (prop)); | |
| 3609 | |
| 3610 if (EQ (keyword, QCfamily)) | |
| 3611 { | |
| 3612 if (STRINGP (value)) | |
| 3613 to[LFACE_FAMILY_INDEX] = value; | |
| 3614 else | |
|
30601
7c995a54a0e8
Replace `illegal' with `invalid'.
Gerd Moellmann <gerd@gnu.org>
parents:
30304
diff
changeset
|
3615 add_to_log ("Invalid face font family", value, Qnil); |
| 24995 | 3616 } |
| 3617 else if (EQ (keyword, QCheight)) | |
| 3618 { | |
| 31178 | 3619 Lisp_Object new_height = |
| 3620 merge_face_heights (value, to[LFACE_HEIGHT_INDEX], | |
| 3621 Qnil, Qnil); | |
| 3622 | |
| 3623 if (NILP (new_height)) | |
| 3624 add_to_log ("Invalid face font height", value, Qnil); | |
| 24995 | 3625 else |
| 31178 | 3626 to[LFACE_HEIGHT_INDEX] = new_height; |
| 24995 | 3627 } |
| 3628 else if (EQ (keyword, QCweight)) | |
| 3629 { | |
| 3630 if (SYMBOLP (value) | |
| 3631 && face_numeric_weight (value) >= 0) | |
| 3632 to[LFACE_WEIGHT_INDEX] = value; | |
| 3633 else | |
|
30601
7c995a54a0e8
Replace `illegal' with `invalid'.
Gerd Moellmann <gerd@gnu.org>
parents:
30304
diff
changeset
|
3634 add_to_log ("Invalid face weight", value, Qnil); |
| 24995 | 3635 } |
| 3636 else if (EQ (keyword, QCslant)) | |
| 3637 { | |
| 3638 if (SYMBOLP (value) | |
| 3639 && face_numeric_slant (value) >= 0) | |
| 3640 to[LFACE_SLANT_INDEX] = value; | |
| 3641 else | |
|
30601
7c995a54a0e8
Replace `illegal' with `invalid'.
Gerd Moellmann <gerd@gnu.org>
parents:
30304
diff
changeset
|
3642 add_to_log ("Invalid face slant", value, Qnil); |
| 24995 | 3643 } |
| 3644 else if (EQ (keyword, QCunderline)) | |
| 3645 { | |
| 3646 if (EQ (value, Qt) | |
| 3647 || NILP (value) | |
| 3648 || STRINGP (value)) | |
| 3649 to[LFACE_UNDERLINE_INDEX] = value; | |
| 3650 else | |
|
30601
7c995a54a0e8
Replace `illegal' with `invalid'.
Gerd Moellmann <gerd@gnu.org>
parents:
30304
diff
changeset
|
3651 add_to_log ("Invalid face underline", value, Qnil); |
| 24995 | 3652 } |
| 3653 else if (EQ (keyword, QCoverline)) | |
| 3654 { | |
| 3655 if (EQ (value, Qt) | |
| 3656 || NILP (value) | |
| 3657 || STRINGP (value)) | |
| 3658 to[LFACE_OVERLINE_INDEX] = value; | |
| 3659 else | |
|
30601
7c995a54a0e8
Replace `illegal' with `invalid'.
Gerd Moellmann <gerd@gnu.org>
parents:
30304
diff
changeset
|
3660 add_to_log ("Invalid face overline", value, Qnil); |
| 24995 | 3661 } |
| 3662 else if (EQ (keyword, QCstrike_through)) | |
| 3663 { | |
| 3664 if (EQ (value, Qt) | |
| 3665 || NILP (value) | |
| 3666 || STRINGP (value)) | |
| 3667 to[LFACE_STRIKE_THROUGH_INDEX] = value; | |
| 3668 else | |
|
30601
7c995a54a0e8
Replace `illegal' with `invalid'.
Gerd Moellmann <gerd@gnu.org>
parents:
30304
diff
changeset
|
3669 add_to_log ("Invalid face strike-through", value, Qnil); |
| 24995 | 3670 } |
| 3671 else if (EQ (keyword, QCbox)) | |
| 3672 { | |
| 3673 if (EQ (value, Qt)) | |
| 3674 value = make_number (1); | |
| 3675 if (INTEGERP (value) | |
| 3676 || STRINGP (value) | |
| 3677 || CONSP (value) | |
| 3678 || NILP (value)) | |
| 3679 to[LFACE_BOX_INDEX] = value; | |
| 3680 else | |
|
30601
7c995a54a0e8
Replace `illegal' with `invalid'.
Gerd Moellmann <gerd@gnu.org>
parents:
30304
diff
changeset
|
3681 add_to_log ("Invalid face box", value, Qnil); |
| 24995 | 3682 } |
| 3683 else if (EQ (keyword, QCinverse_video) | |
| 3684 || EQ (keyword, QCreverse_video)) | |
| 3685 { | |
| 3686 if (EQ (value, Qt) || NILP (value)) | |
| 3687 to[LFACE_INVERSE_INDEX] = value; | |
| 3688 else | |
|
30601
7c995a54a0e8
Replace `illegal' with `invalid'.
Gerd Moellmann <gerd@gnu.org>
parents:
30304
diff
changeset
|
3689 add_to_log ("Invalid face inverse-video", value, Qnil); |
| 24995 | 3690 } |
| 3691 else if (EQ (keyword, QCforeground)) | |
| 3692 { | |
| 3693 if (STRINGP (value)) | |
| 3694 to[LFACE_FOREGROUND_INDEX] = value; | |
| 3695 else | |
|
30601
7c995a54a0e8
Replace `illegal' with `invalid'.
Gerd Moellmann <gerd@gnu.org>
parents:
30304
diff
changeset
|
3696 add_to_log ("Invalid face foreground", value, Qnil); |
| 24995 | 3697 } |
| 3698 else if (EQ (keyword, QCbackground)) | |
| 3699 { | |
| 3700 if (STRINGP (value)) | |
| 3701 to[LFACE_BACKGROUND_INDEX] = value; | |
| 3702 else | |
|
30601
7c995a54a0e8
Replace `illegal' with `invalid'.
Gerd Moellmann <gerd@gnu.org>
parents:
30304
diff
changeset
|
3703 add_to_log ("Invalid face background", value, Qnil); |
| 24995 | 3704 } |
| 3705 else if (EQ (keyword, QCstipple)) | |
| 3706 { | |
| 3707 #ifdef HAVE_X_WINDOWS | |
|
25890
b10a34d40b55
(Qbitmap_spec_p): Replaces Qpixmap_spec_p.
Gerd Moellmann <gerd@gnu.org>
parents:
25883
diff
changeset
|
3708 Lisp_Object pixmap_p = Fbitmap_spec_p (value); |
| 24995 | 3709 if (!NILP (pixmap_p)) |
| 3710 to[LFACE_STIPPLE_INDEX] = value; | |
| 3711 else | |
|
30601
7c995a54a0e8
Replace `illegal' with `invalid'.
Gerd Moellmann <gerd@gnu.org>
parents:
30304
diff
changeset
|
3712 add_to_log ("Invalid face stipple", value, Qnil); |
| 24995 | 3713 #endif |
| 3714 } | |
| 3715 else if (EQ (keyword, QCwidth)) | |
| 3716 { | |
| 3717 if (SYMBOLP (value) | |
| 3718 && face_numeric_swidth (value) >= 0) | |
| 3719 to[LFACE_SWIDTH_INDEX] = value; | |
| 3720 else | |
|
30601
7c995a54a0e8
Replace `illegal' with `invalid'.
Gerd Moellmann <gerd@gnu.org>
parents:
30304
diff
changeset
|
3721 add_to_log ("Invalid face width", value, Qnil); |
| 24995 | 3722 } |
| 31178 | 3723 else if (EQ (keyword, QCinherit)) |
| 3724 { | |
| 3725 if (SYMBOLP (value)) | |
| 3726 to[LFACE_INHERIT_INDEX] = value; | |
| 3727 else | |
| 3728 { | |
| 3729 Lisp_Object tail; | |
| 3730 for (tail = value; CONSP (tail); tail = XCDR (tail)) | |
| 3731 if (!SYMBOLP (XCAR (tail))) | |
| 3732 break; | |
| 3733 if (NILP (tail)) | |
| 3734 to[LFACE_INHERIT_INDEX] = value; | |
| 3735 else | |
| 3736 add_to_log ("Invalid face inherit", value, Qnil); | |
| 3737 } | |
| 3738 } | |
| 24995 | 3739 else |
|
25799
1c370ec939da
(load_pixmap): Call add_to_log without frame parameter.
Gerd Moellmann <gerd@gnu.org>
parents:
25678
diff
changeset
|
3740 add_to_log ("Invalid attribute %s in face property", |
|
25301
2042c4a224ad
(add_to_log): Renamed from display_message.
Gerd Moellmann <gerd@gnu.org>
parents:
25270
diff
changeset
|
3741 keyword, Qnil); |
| 24995 | 3742 |
| 3743 prop = XCDR (XCDR (prop)); | |
| 3744 } | |
| 3745 } | |
| 3746 else | |
| 3747 { | |
| 3748 /* This is a list of face specs. Specifications at the | |
| 3749 beginning of the list take precedence over later | |
| 3750 specifications, so we have to merge starting with the | |
| 3751 last specification. */ | |
| 3752 Lisp_Object next = XCDR (prop); | |
| 3753 if (!NILP (next)) | |
| 3754 merge_face_vector_with_property (f, to, next); | |
| 3755 merge_face_vector_with_property (f, to, first); | |
| 3756 } | |
| 3757 } | |
| 3758 else | |
| 3759 { | |
| 3760 /* PROP ought to be a face name. */ | |
| 3761 Lisp_Object lface = lface_from_face_name (f, prop, 0); | |
| 3762 if (NILP (lface)) | |
|
25799
1c370ec939da
(load_pixmap): Call add_to_log without frame parameter.
Gerd Moellmann <gerd@gnu.org>
parents:
25678
diff
changeset
|
3763 add_to_log ("Invalid face text property value: %s", prop, Qnil); |
| 24995 | 3764 else |
| 31178 | 3765 merge_face_vectors (f, XVECTOR (lface)->contents, to, Qnil); |
| 24995 | 3766 } |
| 3767 } | |
| 3768 | |
| 3769 | |
| 3770 DEFUN ("internal-make-lisp-face", Finternal_make_lisp_face, | |
| 3771 Sinternal_make_lisp_face, 1, 2, 0, | |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
3772 doc: /* Make FACE, a symbol, a Lisp face with all attributes nil. |
|
39914
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
3773 If FACE was not known as a face before, create a new one. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
3774 If optional argument FRAME is specified, make a frame-local face |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
3775 for that frame. Otherwise operate on the global face definition. |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
3776 Value is a vector of face attributes. */) |
|
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
3777 (face, frame) |
| 24995 | 3778 Lisp_Object face, frame; |
| 3779 { | |
| 3780 Lisp_Object global_lface, lface; | |
| 3781 struct frame *f; | |
| 3782 int i; | |
| 3783 | |
|
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40603
diff
changeset
|
3784 CHECK_SYMBOL (face); |
| 24995 | 3785 global_lface = lface_from_face_name (NULL, face, 0); |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
3786 |
| 24995 | 3787 if (!NILP (frame)) |
| 3788 { | |
|
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40603
diff
changeset
|
3789 CHECK_LIVE_FRAME (frame); |
| 24995 | 3790 f = XFRAME (frame); |
| 3791 lface = lface_from_face_name (f, face, 0); | |
| 3792 } | |
| 3793 else | |
| 3794 f = NULL, lface = Qnil; | |
| 3795 | |
| 3796 /* Add a global definition if there is none. */ | |
| 3797 if (NILP (global_lface)) | |
| 3798 { | |
| 3799 global_lface = Fmake_vector (make_number (LFACE_VECTOR_SIZE), | |
| 3800 Qunspecified); | |
|
35913
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
3801 AREF (global_lface, 0) = Qface; |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
3802 Vface_new_frame_defaults = Fcons (Fcons (face, global_lface), |
| 24995 | 3803 Vface_new_frame_defaults); |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
3804 |
| 24995 | 3805 /* Assign the new Lisp face a unique ID. The mapping from Lisp |
| 3806 face id to Lisp face is given by the vector lface_id_to_name. | |
| 3807 The mapping from Lisp face to Lisp face id is given by the | |
| 3808 property `face' of the Lisp face name. */ | |
| 3809 if (next_lface_id == lface_id_to_name_size) | |
| 3810 { | |
| 3811 int new_size = max (50, 2 * lface_id_to_name_size); | |
| 3812 int sz = new_size * sizeof *lface_id_to_name; | |
| 3813 lface_id_to_name = (Lisp_Object *) xrealloc (lface_id_to_name, sz); | |
| 3814 lface_id_to_name_size = new_size; | |
| 3815 } | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
3816 |
| 24995 | 3817 lface_id_to_name[next_lface_id] = face; |
| 3818 Fput (face, Qface, make_number (next_lface_id)); | |
| 3819 ++next_lface_id; | |
| 3820 } | |
| 3821 else if (f == NULL) | |
| 3822 for (i = 1; i < LFACE_VECTOR_SIZE; ++i) | |
|
35913
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
3823 AREF (global_lface, i) = Qunspecified; |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
3824 |
| 24995 | 3825 /* Add a frame-local definition. */ |
| 3826 if (f) | |
| 3827 { | |
| 3828 if (NILP (lface)) | |
| 3829 { | |
| 3830 lface = Fmake_vector (make_number (LFACE_VECTOR_SIZE), | |
| 3831 Qunspecified); | |
|
35913
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
3832 AREF (lface, 0) = Qface; |
| 24995 | 3833 f->face_alist = Fcons (Fcons (face, lface), f->face_alist); |
| 3834 } | |
| 3835 else | |
| 3836 for (i = 1; i < LFACE_VECTOR_SIZE; ++i) | |
|
35913
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
3837 AREF (lface, i) = Qunspecified; |
| 24995 | 3838 } |
| 3839 else | |
| 3840 lface = global_lface; | |
| 3841 | |
|
43270
935816913346
(Finternal_make_lisp_face, Finternal_copy_lisp_face)
Richard M. Stallman <rms@gnu.org>
parents:
43203
diff
changeset
|
3842 /* Changing a named face means that all realized faces depending on |
|
935816913346
(Finternal_make_lisp_face, Finternal_copy_lisp_face)
Richard M. Stallman <rms@gnu.org>
parents:
43203
diff
changeset
|
3843 that face are invalid. Since we cannot tell which realized faces |
|
935816913346
(Finternal_make_lisp_face, Finternal_copy_lisp_face)
Richard M. Stallman <rms@gnu.org>
parents:
43203
diff
changeset
|
3844 depend on the face, make sure they are all removed. This is done |
|
935816913346
(Finternal_make_lisp_face, Finternal_copy_lisp_face)
Richard M. Stallman <rms@gnu.org>
parents:
43203
diff
changeset
|
3845 by incrementing face_change_count. The next call to |
|
935816913346
(Finternal_make_lisp_face, Finternal_copy_lisp_face)
Richard M. Stallman <rms@gnu.org>
parents:
43203
diff
changeset
|
3846 init_iterator will then free realized faces. */ |
|
935816913346
(Finternal_make_lisp_face, Finternal_copy_lisp_face)
Richard M. Stallman <rms@gnu.org>
parents:
43203
diff
changeset
|
3847 ++face_change_count; |
|
935816913346
(Finternal_make_lisp_face, Finternal_copy_lisp_face)
Richard M. Stallman <rms@gnu.org>
parents:
43203
diff
changeset
|
3848 ++windows_or_buffers_changed; |
|
935816913346
(Finternal_make_lisp_face, Finternal_copy_lisp_face)
Richard M. Stallman <rms@gnu.org>
parents:
43203
diff
changeset
|
3849 |
| 24995 | 3850 xassert (LFACEP (lface)); |
| 3851 check_lface (lface); | |
| 3852 return lface; | |
| 3853 } | |
| 3854 | |
| 3855 | |
| 3856 DEFUN ("internal-lisp-face-p", Finternal_lisp_face_p, | |
| 3857 Sinternal_lisp_face_p, 1, 2, 0, | |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
3858 doc: /* Return non-nil if FACE names a face. |
|
39914
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
3859 If optional second parameter FRAME is non-nil, check for the |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
3860 existence of a frame-local face with name FACE on that frame. |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
3861 Otherwise check for the existence of a global face. */) |
|
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
3862 (face, frame) |
| 24995 | 3863 Lisp_Object face, frame; |
| 3864 { | |
| 3865 Lisp_Object lface; | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
3866 |
| 24995 | 3867 if (!NILP (frame)) |
| 3868 { | |
|
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40603
diff
changeset
|
3869 CHECK_LIVE_FRAME (frame); |
| 24995 | 3870 lface = lface_from_face_name (XFRAME (frame), face, 0); |
| 3871 } | |
| 3872 else | |
| 3873 lface = lface_from_face_name (NULL, face, 0); | |
| 3874 | |
| 3875 return lface; | |
| 3876 } | |
| 3877 | |
| 3878 | |
| 3879 DEFUN ("internal-copy-lisp-face", Finternal_copy_lisp_face, | |
| 3880 Sinternal_copy_lisp_face, 4, 4, 0, | |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
3881 doc: /* Copy face FROM to TO. |
|
39914
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
3882 If FRAME it t, copy the global face definition of FROM to the |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
3883 global face definition of TO. Otherwise, copy the frame-local |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
3884 definition of FROM on FRAME to the frame-local definition of TO |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
3885 on NEW-FRAME, or FRAME if NEW-FRAME is nil. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
3886 |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
3887 Value is TO. */) |
|
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
3888 (from, to, frame, new_frame) |
| 24995 | 3889 Lisp_Object from, to, frame, new_frame; |
| 3890 { | |
| 3891 Lisp_Object lface, copy; | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
3892 |
|
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40603
diff
changeset
|
3893 CHECK_SYMBOL (from); |
|
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40603
diff
changeset
|
3894 CHECK_SYMBOL (to); |
| 24995 | 3895 if (NILP (new_frame)) |
| 3896 new_frame = frame; | |
| 3897 | |
| 3898 if (EQ (frame, Qt)) | |
| 3899 { | |
| 3900 /* Copy global definition of FROM. We don't make copies of | |
| 3901 strings etc. because 20.2 didn't do it either. */ | |
| 3902 lface = lface_from_face_name (NULL, from, 1); | |
| 3903 copy = Finternal_make_lisp_face (to, Qnil); | |
| 3904 } | |
| 3905 else | |
| 3906 { | |
| 3907 /* Copy frame-local definition of FROM. */ | |
|
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40603
diff
changeset
|
3908 CHECK_LIVE_FRAME (frame); |
|
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40603
diff
changeset
|
3909 CHECK_LIVE_FRAME (new_frame); |
| 24995 | 3910 lface = lface_from_face_name (XFRAME (frame), from, 1); |
| 3911 copy = Finternal_make_lisp_face (to, new_frame); | |
| 3912 } | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
3913 |
| 24995 | 3914 bcopy (XVECTOR (lface)->contents, XVECTOR (copy)->contents, |
| 3915 LFACE_VECTOR_SIZE * sizeof (Lisp_Object)); | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
3916 |
|
43270
935816913346
(Finternal_make_lisp_face, Finternal_copy_lisp_face)
Richard M. Stallman <rms@gnu.org>
parents:
43203
diff
changeset
|
3917 /* Changing a named face means that all realized faces depending on |
|
935816913346
(Finternal_make_lisp_face, Finternal_copy_lisp_face)
Richard M. Stallman <rms@gnu.org>
parents:
43203
diff
changeset
|
3918 that face are invalid. Since we cannot tell which realized faces |
|
935816913346
(Finternal_make_lisp_face, Finternal_copy_lisp_face)
Richard M. Stallman <rms@gnu.org>
parents:
43203
diff
changeset
|
3919 depend on the face, make sure they are all removed. This is done |
|
935816913346
(Finternal_make_lisp_face, Finternal_copy_lisp_face)
Richard M. Stallman <rms@gnu.org>
parents:
43203
diff
changeset
|
3920 by incrementing face_change_count. The next call to |
|
935816913346
(Finternal_make_lisp_face, Finternal_copy_lisp_face)
Richard M. Stallman <rms@gnu.org>
parents:
43203
diff
changeset
|
3921 init_iterator will then free realized faces. */ |
|
935816913346
(Finternal_make_lisp_face, Finternal_copy_lisp_face)
Richard M. Stallman <rms@gnu.org>
parents:
43203
diff
changeset
|
3922 ++face_change_count; |
|
935816913346
(Finternal_make_lisp_face, Finternal_copy_lisp_face)
Richard M. Stallman <rms@gnu.org>
parents:
43203
diff
changeset
|
3923 ++windows_or_buffers_changed; |
|
935816913346
(Finternal_make_lisp_face, Finternal_copy_lisp_face)
Richard M. Stallman <rms@gnu.org>
parents:
43203
diff
changeset
|
3924 |
| 24995 | 3925 return to; |
| 3926 } | |
| 3927 | |
| 3928 | |
| 3929 DEFUN ("internal-set-lisp-face-attribute", Finternal_set_lisp_face_attribute, | |
| 3930 Sinternal_set_lisp_face_attribute, 3, 4, 0, | |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
3931 doc: /* Set attribute ATTR of FACE to VALUE. |
|
39914
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
3932 FRAME being a frame means change the face on that frame. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
3933 FRAME nil means change the face of the selected frame. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
3934 FRAME t means change the default for new frames. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
3935 FRAME 0 means change the face on all frames, and change the default |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
3936 for new frames. */) |
|
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
3937 (face, attr, value, frame) |
| 24995 | 3938 Lisp_Object face, attr, value, frame; |
|
6784
d41c216ccd27
(frame_update_line_height): Check param_faces[i] not null.
Richard M. Stallman <rms@gnu.org>
parents:
6768
diff
changeset
|
3939 { |
| 24995 | 3940 Lisp_Object lface; |
| 3941 Lisp_Object old_value = Qnil; | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3942 /* Set 1 if ATTR is QCfont. */ |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3943 int font_attr_p = 0; |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
3944 /* Set 1 if ATTR is one of font-related attributes other than QCfont. */ |
| 24995 | 3945 int font_related_attr_p = 0; |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
3946 |
|
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40603
diff
changeset
|
3947 CHECK_SYMBOL (face); |
|
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40603
diff
changeset
|
3948 CHECK_SYMBOL (attr); |
| 24995 | 3949 |
|
25883
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
3950 face = resolve_face_name (face); |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
3951 |
|
31440
67f5b4186ed2
(Finternal_set_lisp_face_attribute): If FRAME is 0,
Gerd Moellmann <gerd@gnu.org>
parents:
31292
diff
changeset
|
3952 /* If FRAME is 0, change face on all frames, and change the |
|
67f5b4186ed2
(Finternal_set_lisp_face_attribute): If FRAME is 0,
Gerd Moellmann <gerd@gnu.org>
parents:
31292
diff
changeset
|
3953 default for new frames. */ |
|
67f5b4186ed2
(Finternal_set_lisp_face_attribute): If FRAME is 0,
Gerd Moellmann <gerd@gnu.org>
parents:
31292
diff
changeset
|
3954 if (INTEGERP (frame) && XINT (frame) == 0) |
|
67f5b4186ed2
(Finternal_set_lisp_face_attribute): If FRAME is 0,
Gerd Moellmann <gerd@gnu.org>
parents:
31292
diff
changeset
|
3955 { |
|
67f5b4186ed2
(Finternal_set_lisp_face_attribute): If FRAME is 0,
Gerd Moellmann <gerd@gnu.org>
parents:
31292
diff
changeset
|
3956 Lisp_Object tail; |
|
31570
9eeff4863080
Remove conditional compilation on SCALABLE_FONTS.
Gerd Moellmann <gerd@gnu.org>
parents:
31522
diff
changeset
|
3957 Finternal_set_lisp_face_attribute (face, attr, value, Qt); |
|
31440
67f5b4186ed2
(Finternal_set_lisp_face_attribute): If FRAME is 0,
Gerd Moellmann <gerd@gnu.org>
parents:
31292
diff
changeset
|
3958 FOR_EACH_FRAME (tail, frame) |
|
67f5b4186ed2
(Finternal_set_lisp_face_attribute): If FRAME is 0,
Gerd Moellmann <gerd@gnu.org>
parents:
31292
diff
changeset
|
3959 Finternal_set_lisp_face_attribute (face, attr, value, frame); |
|
31570
9eeff4863080
Remove conditional compilation on SCALABLE_FONTS.
Gerd Moellmann <gerd@gnu.org>
parents:
31522
diff
changeset
|
3960 return face; |
|
31440
67f5b4186ed2
(Finternal_set_lisp_face_attribute): If FRAME is 0,
Gerd Moellmann <gerd@gnu.org>
parents:
31292
diff
changeset
|
3961 } |
|
67f5b4186ed2
(Finternal_set_lisp_face_attribute): If FRAME is 0,
Gerd Moellmann <gerd@gnu.org>
parents:
31292
diff
changeset
|
3962 |
| 24995 | 3963 /* Set lface to the Lisp attribute vector of FACE. */ |
| 3964 if (EQ (frame, Qt)) | |
| 3965 lface = lface_from_face_name (NULL, face, 1); | |
| 3966 else | |
| 3967 { | |
| 3968 if (NILP (frame)) | |
|
25678
1878f7ae0df5
(frame_or_selected_frame): Change for Lisp_Object
Gerd Moellmann <gerd@gnu.org>
parents:
25661
diff
changeset
|
3969 frame = selected_frame; |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
3970 |
|
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40603
diff
changeset
|
3971 CHECK_LIVE_FRAME (frame); |
| 24995 | 3972 lface = lface_from_face_name (XFRAME (frame), face, 0); |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
3973 |
| 24995 | 3974 /* If a frame-local face doesn't exist yet, create one. */ |
| 3975 if (NILP (lface)) | |
| 3976 lface = Finternal_make_lisp_face (face, frame); | |
| 3977 } | |
| 3978 | |
| 3979 if (EQ (attr, QCfamily)) | |
| 3980 { | |
| 3981 if (!UNSPECIFIEDP (value)) | |
| 3982 { | |
|
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40603
diff
changeset
|
3983 CHECK_STRING (value); |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
3984 if (SCHARS (value) == 0) |
| 24995 | 3985 signal_error ("Invalid face family", value); |
| 3986 } | |
| 3987 old_value = LFACE_FAMILY (lface); | |
| 3988 LFACE_FAMILY (lface) = value; | |
| 3989 font_related_attr_p = 1; | |
| 3990 } | |
| 3991 else if (EQ (attr, QCheight)) | |
| 3992 { | |
| 3993 if (!UNSPECIFIEDP (value)) | |
| 3994 { | |
|
40023
3914e6d2452f
(Finternal_set_lisp_face_attribute): Follow coding conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
39988
diff
changeset
|
3995 Lisp_Object test; |
|
3914e6d2452f
(Finternal_set_lisp_face_attribute): Follow coding conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
39988
diff
changeset
|
3996 |
|
3914e6d2452f
(Finternal_set_lisp_face_attribute): Follow coding conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
39988
diff
changeset
|
3997 test = (EQ (face, Qdefault) |
|
3914e6d2452f
(Finternal_set_lisp_face_attribute): Follow coding conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
39988
diff
changeset
|
3998 ? value |
|
3914e6d2452f
(Finternal_set_lisp_face_attribute): Follow coding conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
39988
diff
changeset
|
3999 /* The default face must have an absolute size, |
|
3914e6d2452f
(Finternal_set_lisp_face_attribute): Follow coding conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
39988
diff
changeset
|
4000 otherwise, we do a test merge with a random |
|
3914e6d2452f
(Finternal_set_lisp_face_attribute): Follow coding conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
39988
diff
changeset
|
4001 height to see if VALUE's ok. */ |
|
3914e6d2452f
(Finternal_set_lisp_face_attribute): Follow coding conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
39988
diff
changeset
|
4002 : merge_face_heights (value, make_number (10), Qnil, Qnil)); |
|
3914e6d2452f
(Finternal_set_lisp_face_attribute): Follow coding conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
39988
diff
changeset
|
4003 |
|
3914e6d2452f
(Finternal_set_lisp_face_attribute): Follow coding conventions.
Gerd Moellmann <gerd@gnu.org>
parents:
39988
diff
changeset
|
4004 if (!INTEGERP (test) || XINT (test) <= 0) |
| 24995 | 4005 signal_error ("Invalid face height", value); |
| 4006 } | |
| 31178 | 4007 |
| 24995 | 4008 old_value = LFACE_HEIGHT (lface); |
| 4009 LFACE_HEIGHT (lface) = value; | |
| 4010 font_related_attr_p = 1; | |
| 4011 } | |
| 4012 else if (EQ (attr, QCweight)) | |
| 4013 { | |
| 4014 if (!UNSPECIFIEDP (value)) | |
| 4015 { | |
|
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40603
diff
changeset
|
4016 CHECK_SYMBOL (value); |
| 24995 | 4017 if (face_numeric_weight (value) < 0) |
| 4018 signal_error ("Invalid face weight", value); | |
| 4019 } | |
| 4020 old_value = LFACE_WEIGHT (lface); | |
| 4021 LFACE_WEIGHT (lface) = value; | |
| 4022 font_related_attr_p = 1; | |
| 4023 } | |
| 4024 else if (EQ (attr, QCslant)) | |
| 4025 { | |
| 4026 if (!UNSPECIFIEDP (value)) | |
| 4027 { | |
|
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40603
diff
changeset
|
4028 CHECK_SYMBOL (value); |
| 24995 | 4029 if (face_numeric_slant (value) < 0) |
| 4030 signal_error ("Invalid face slant", value); | |
| 4031 } | |
| 4032 old_value = LFACE_SLANT (lface); | |
| 4033 LFACE_SLANT (lface) = value; | |
| 4034 font_related_attr_p = 1; | |
| 4035 } | |
| 4036 else if (EQ (attr, QCunderline)) | |
| 4037 { | |
| 4038 if (!UNSPECIFIEDP (value)) | |
| 4039 if ((SYMBOLP (value) | |
| 4040 && !EQ (value, Qt) | |
| 4041 && !EQ (value, Qnil)) | |
| 4042 /* Underline color. */ | |
| 4043 || (STRINGP (value) | |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
4044 && SCHARS (value) == 0)) |
| 24995 | 4045 signal_error ("Invalid face underline", value); |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
4046 |
| 24995 | 4047 old_value = LFACE_UNDERLINE (lface); |
| 4048 LFACE_UNDERLINE (lface) = value; | |
| 4049 } | |
| 4050 else if (EQ (attr, QCoverline)) | |
| 4051 { | |
| 4052 if (!UNSPECIFIEDP (value)) | |
| 4053 if ((SYMBOLP (value) | |
| 4054 && !EQ (value, Qt) | |
| 4055 && !EQ (value, Qnil)) | |
| 4056 /* Overline color. */ | |
| 4057 || (STRINGP (value) | |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
4058 && SCHARS (value) == 0)) |
| 24995 | 4059 signal_error ("Invalid face overline", value); |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
4060 |
| 24995 | 4061 old_value = LFACE_OVERLINE (lface); |
| 4062 LFACE_OVERLINE (lface) = value; | |
| 4063 } | |
| 4064 else if (EQ (attr, QCstrike_through)) | |
| 4065 { | |
| 4066 if (!UNSPECIFIEDP (value)) | |
| 4067 if ((SYMBOLP (value) | |
| 4068 && !EQ (value, Qt) | |
| 4069 && !EQ (value, Qnil)) | |
| 4070 /* Strike-through color. */ | |
| 4071 || (STRINGP (value) | |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
4072 && SCHARS (value) == 0)) |
| 24995 | 4073 signal_error ("Invalid face strike-through", value); |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
4074 |
| 24995 | 4075 old_value = LFACE_STRIKE_THROUGH (lface); |
| 4076 LFACE_STRIKE_THROUGH (lface) = value; | |
| 4077 } | |
| 4078 else if (EQ (attr, QCbox)) | |
| 4079 { | |
| 4080 int valid_p; | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
4081 |
| 24995 | 4082 /* Allow t meaning a simple box of width 1 in foreground color |
| 4083 of the face. */ | |
| 4084 if (EQ (value, Qt)) | |
| 4085 value = make_number (1); | |
| 4086 | |
| 4087 if (UNSPECIFIEDP (value)) | |
| 4088 valid_p = 1; | |
| 4089 else if (NILP (value)) | |
| 4090 valid_p = 1; | |
| 4091 else if (INTEGERP (value)) | |
|
36006
a9d75e8a6cb9
(Finternal_set_lisp_face_attribute): The value of :box
Kenichi Handa <handa@m17n.org>
parents:
35913
diff
changeset
|
4092 valid_p = XINT (value) != 0; |
| 24995 | 4093 else if (STRINGP (value)) |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
4094 valid_p = SCHARS (value) > 0; |
| 24995 | 4095 else if (CONSP (value)) |
| 4096 { | |
| 4097 Lisp_Object tem; | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
4098 |
| 24995 | 4099 tem = value; |
| 4100 while (CONSP (tem)) | |
| 4101 { | |
| 4102 Lisp_Object k, v; | |
| 4103 | |
| 4104 k = XCAR (tem); | |
| 4105 tem = XCDR (tem); | |
| 4106 if (!CONSP (tem)) | |
| 4107 break; | |
| 4108 v = XCAR (tem); | |
| 4109 tem = XCDR (tem); | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
4110 |
| 24995 | 4111 if (EQ (k, QCline_width)) |
| 4112 { | |
|
36006
a9d75e8a6cb9
(Finternal_set_lisp_face_attribute): The value of :box
Kenichi Handa <handa@m17n.org>
parents:
35913
diff
changeset
|
4113 if (!INTEGERP (v) || XINT (v) == 0) |
| 24995 | 4114 break; |
| 4115 } | |
| 4116 else if (EQ (k, QCcolor)) | |
| 4117 { | |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
4118 if (!STRINGP (v) || SCHARS (v) == 0) |
| 24995 | 4119 break; |
| 4120 } | |
| 4121 else if (EQ (k, QCstyle)) | |
| 4122 { | |
| 4123 if (!EQ (v, Qpressed_button) && !EQ (v, Qreleased_button)) | |
| 4124 break; | |
| 4125 } | |
| 4126 else | |
| 4127 break; | |
| 4128 } | |
| 4129 | |
| 4130 valid_p = NILP (tem); | |
| 4131 } | |
| 4132 else | |
| 4133 valid_p = 0; | |
| 4134 | |
| 4135 if (!valid_p) | |
| 4136 signal_error ("Invalid face box", value); | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
4137 |
| 24995 | 4138 old_value = LFACE_BOX (lface); |
| 4139 LFACE_BOX (lface) = value; | |
| 4140 } | |
| 4141 else if (EQ (attr, QCinverse_video) | |
| 4142 || EQ (attr, QCreverse_video)) | |
| 4143 { | |
| 4144 if (!UNSPECIFIEDP (value)) | |
| 4145 { | |
|
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40603
diff
changeset
|
4146 CHECK_SYMBOL (value); |
| 24995 | 4147 if (!EQ (value, Qt) && !NILP (value)) |
| 4148 signal_error ("Invalid inverse-video face attribute value", value); | |
| 4149 } | |
| 4150 old_value = LFACE_INVERSE (lface); | |
| 4151 LFACE_INVERSE (lface) = value; | |
| 4152 } | |
| 4153 else if (EQ (attr, QCforeground)) | |
| 4154 { | |
|
27114
4efa5e54e9a9
(Qunspecified_fg, Qunspecified_bg): Remove.
Eli Zaretskii <eliz@gnu.org>
parents:
27100
diff
changeset
|
4155 if (!UNSPECIFIEDP (value)) |
| 24995 | 4156 { |
| 4157 /* Don't check for valid color names here because it depends | |
| 4158 on the frame (display) whether the color will be valid | |
| 4159 when the face is realized. */ | |
|
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40603
diff
changeset
|
4160 CHECK_STRING (value); |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
4161 if (SCHARS (value) == 0) |
| 24995 | 4162 signal_error ("Empty foreground color value", value); |
| 4163 } | |
| 4164 old_value = LFACE_FOREGROUND (lface); | |
| 4165 LFACE_FOREGROUND (lface) = value; | |
| 4166 } | |
| 4167 else if (EQ (attr, QCbackground)) | |
| 4168 { | |
|
27114
4efa5e54e9a9
(Qunspecified_fg, Qunspecified_bg): Remove.
Eli Zaretskii <eliz@gnu.org>
parents:
27100
diff
changeset
|
4169 if (!UNSPECIFIEDP (value)) |
| 24995 | 4170 { |
| 4171 /* Don't check for valid color names here because it depends | |
| 4172 on the frame (display) whether the color will be valid | |
| 4173 when the face is realized. */ | |
|
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40603
diff
changeset
|
4174 CHECK_STRING (value); |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
4175 if (SCHARS (value) == 0) |
| 24995 | 4176 signal_error ("Empty background color value", value); |
| 4177 } | |
| 4178 old_value = LFACE_BACKGROUND (lface); | |
| 4179 LFACE_BACKGROUND (lface) = value; | |
| 4180 } | |
| 4181 else if (EQ (attr, QCstipple)) | |
| 4182 { | |
| 4183 #ifdef HAVE_X_WINDOWS | |
| 4184 if (!UNSPECIFIEDP (value) | |
| 4185 && !NILP (value) | |
|
25890
b10a34d40b55
(Qbitmap_spec_p): Replaces Qpixmap_spec_p.
Gerd Moellmann <gerd@gnu.org>
parents:
25883
diff
changeset
|
4186 && NILP (Fbitmap_spec_p (value))) |
| 24995 | 4187 signal_error ("Invalid stipple attribute", value); |
| 4188 old_value = LFACE_STIPPLE (lface); | |
| 4189 LFACE_STIPPLE (lface) = value; | |
| 4190 #endif /* HAVE_X_WINDOWS */ | |
| 4191 } | |
| 4192 else if (EQ (attr, QCwidth)) | |
| 4193 { | |
| 4194 if (!UNSPECIFIEDP (value)) | |
| 4195 { | |
|
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40603
diff
changeset
|
4196 CHECK_SYMBOL (value); |
| 24995 | 4197 if (face_numeric_swidth (value) < 0) |
| 4198 signal_error ("Invalid face width", value); | |
| 4199 } | |
| 4200 old_value = LFACE_SWIDTH (lface); | |
| 4201 LFACE_SWIDTH (lface) = value; | |
| 4202 font_related_attr_p = 1; | |
| 4203 } | |
| 4204 else if (EQ (attr, QCfont)) | |
| 4205 { | |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
4206 #ifdef HAVE_WINDOW_SYSTEM |
|
44705
413dd322c77d
(clear_font_table): Don't free the default font of
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43270
diff
changeset
|
4207 if (EQ (frame, Qt) || FRAME_WINDOW_P (XFRAME (frame))) |
|
40224
12dcadf8cb59
(Finternal_set_lisp_face_attribute)
Eli Zaretskii <eliz@gnu.org>
parents:
40023
diff
changeset
|
4208 { |
|
12dcadf8cb59
(Finternal_set_lisp_face_attribute)
Eli Zaretskii <eliz@gnu.org>
parents:
40023
diff
changeset
|
4209 /* Set font-related attributes of the Lisp face from an XLFD |
|
12dcadf8cb59
(Finternal_set_lisp_face_attribute)
Eli Zaretskii <eliz@gnu.org>
parents:
40023
diff
changeset
|
4210 font name. */ |
|
12dcadf8cb59
(Finternal_set_lisp_face_attribute)
Eli Zaretskii <eliz@gnu.org>
parents:
40023
diff
changeset
|
4211 struct frame *f; |
|
12dcadf8cb59
(Finternal_set_lisp_face_attribute)
Eli Zaretskii <eliz@gnu.org>
parents:
40023
diff
changeset
|
4212 Lisp_Object tmp; |
|
12dcadf8cb59
(Finternal_set_lisp_face_attribute)
Eli Zaretskii <eliz@gnu.org>
parents:
40023
diff
changeset
|
4213 |
|
12dcadf8cb59
(Finternal_set_lisp_face_attribute)
Eli Zaretskii <eliz@gnu.org>
parents:
40023
diff
changeset
|
4214 if (EQ (frame, Qt)) |
|
12dcadf8cb59
(Finternal_set_lisp_face_attribute)
Eli Zaretskii <eliz@gnu.org>
parents:
40023
diff
changeset
|
4215 f = SELECTED_FRAME (); |
|
12dcadf8cb59
(Finternal_set_lisp_face_attribute)
Eli Zaretskii <eliz@gnu.org>
parents:
40023
diff
changeset
|
4216 else |
|
12dcadf8cb59
(Finternal_set_lisp_face_attribute)
Eli Zaretskii <eliz@gnu.org>
parents:
40023
diff
changeset
|
4217 f = check_x_frame (frame); |
|
12dcadf8cb59
(Finternal_set_lisp_face_attribute)
Eli Zaretskii <eliz@gnu.org>
parents:
40023
diff
changeset
|
4218 |
|
51092
c559952fe972
(Finternal_set_lisp_face_attribute): Handle Qunspecified
Richard M. Stallman <rms@gnu.org>
parents:
50515
diff
changeset
|
4219 if (!UNSPECIFIEDP (value)) |
|
c559952fe972
(Finternal_set_lisp_face_attribute): Handle Qunspecified
Richard M. Stallman <rms@gnu.org>
parents:
50515
diff
changeset
|
4220 { |
|
c559952fe972
(Finternal_set_lisp_face_attribute): Handle Qunspecified
Richard M. Stallman <rms@gnu.org>
parents:
50515
diff
changeset
|
4221 CHECK_STRING (value); |
|
c559952fe972
(Finternal_set_lisp_face_attribute): Handle Qunspecified
Richard M. Stallman <rms@gnu.org>
parents:
50515
diff
changeset
|
4222 |
|
c559952fe972
(Finternal_set_lisp_face_attribute): Handle Qunspecified
Richard M. Stallman <rms@gnu.org>
parents:
50515
diff
changeset
|
4223 /* VALUE may be a fontset name or an alias of fontset. In |
|
c559952fe972
(Finternal_set_lisp_face_attribute): Handle Qunspecified
Richard M. Stallman <rms@gnu.org>
parents:
50515
diff
changeset
|
4224 such a case, use the base fontset name. */ |
|
c559952fe972
(Finternal_set_lisp_face_attribute): Handle Qunspecified
Richard M. Stallman <rms@gnu.org>
parents:
50515
diff
changeset
|
4225 tmp = Fquery_fontset (value, Qnil); |
|
c559952fe972
(Finternal_set_lisp_face_attribute): Handle Qunspecified
Richard M. Stallman <rms@gnu.org>
parents:
50515
diff
changeset
|
4226 if (!NILP (tmp)) |
|
c559952fe972
(Finternal_set_lisp_face_attribute): Handle Qunspecified
Richard M. Stallman <rms@gnu.org>
parents:
50515
diff
changeset
|
4227 value = tmp; |
|
c559952fe972
(Finternal_set_lisp_face_attribute): Handle Qunspecified
Richard M. Stallman <rms@gnu.org>
parents:
50515
diff
changeset
|
4228 |
|
c559952fe972
(Finternal_set_lisp_face_attribute): Handle Qunspecified
Richard M. Stallman <rms@gnu.org>
parents:
50515
diff
changeset
|
4229 if (!set_lface_from_font_name (f, lface, value, 1, 1)) |
|
c559952fe972
(Finternal_set_lisp_face_attribute): Handle Qunspecified
Richard M. Stallman <rms@gnu.org>
parents:
50515
diff
changeset
|
4230 signal_error ("Invalid font or fontset name", value); |
|
c559952fe972
(Finternal_set_lisp_face_attribute): Handle Qunspecified
Richard M. Stallman <rms@gnu.org>
parents:
50515
diff
changeset
|
4231 } |
|
40224
12dcadf8cb59
(Finternal_set_lisp_face_attribute)
Eli Zaretskii <eliz@gnu.org>
parents:
40023
diff
changeset
|
4232 |
|
12dcadf8cb59
(Finternal_set_lisp_face_attribute)
Eli Zaretskii <eliz@gnu.org>
parents:
40023
diff
changeset
|
4233 font_attr_p = 1; |
|
12dcadf8cb59
(Finternal_set_lisp_face_attribute)
Eli Zaretskii <eliz@gnu.org>
parents:
40023
diff
changeset
|
4234 } |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
4235 #endif /* HAVE_WINDOW_SYSTEM */ |
| 24995 | 4236 } |
| 31178 | 4237 else if (EQ (attr, QCinherit)) |
| 4238 { | |
| 4239 Lisp_Object tail; | |
| 4240 if (SYMBOLP (value)) | |
| 4241 tail = Qnil; | |
| 4242 else | |
| 4243 for (tail = value; CONSP (tail); tail = XCDR (tail)) | |
| 4244 if (!SYMBOLP (XCAR (tail))) | |
| 4245 break; | |
| 4246 if (NILP (tail)) | |
| 4247 LFACE_INHERIT (lface) = value; | |
| 4248 else | |
|
31202
1733db535955
(lface_fully_specified_p): Handle :inherit.
Gerd Moellmann <gerd@gnu.org>
parents:
31178
diff
changeset
|
4249 signal_error ("Invalid face inheritance", value); |
| 31178 | 4250 } |
| 24995 | 4251 else if (EQ (attr, QCbold)) |
| 4252 { | |
| 4253 old_value = LFACE_WEIGHT (lface); | |
| 4254 LFACE_WEIGHT (lface) = NILP (value) ? Qnormal : Qbold; | |
| 4255 font_related_attr_p = 1; | |
| 4256 } | |
| 4257 else if (EQ (attr, QCitalic)) | |
| 4258 { | |
| 4259 old_value = LFACE_SLANT (lface); | |
| 4260 LFACE_SLANT (lface) = NILP (value) ? Qnormal : Qitalic; | |
| 4261 font_related_attr_p = 1; | |
| 4262 } | |
| 4263 else | |
| 4264 signal_error ("Invalid face attribute name", attr); | |
| 4265 | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
4266 if (font_related_attr_p |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
4267 && !UNSPECIFIEDP (value)) |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
4268 /* If a font-related attribute other than QCfont is specified, the |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
4269 original `font' attribute nor that of default face is useless |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
4270 to determine a new font. Thus, we set it to nil so that font |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
4271 selection mechanism doesn't use it. */ |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
4272 LFACE_FONT (lface) = Qnil; |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
4273 |
| 24995 | 4274 /* Changing a named face means that all realized faces depending on |
| 4275 that face are invalid. Since we cannot tell which realized faces | |
| 4276 depend on the face, make sure they are all removed. This is done | |
| 4277 by incrementing face_change_count. The next call to | |
| 4278 init_iterator will then free realized faces. */ | |
| 4279 if (!EQ (frame, Qt) | |
| 4280 && (EQ (attr, QCfont) | |
| 4281 || NILP (Fequal (old_value, value)))) | |
| 4282 { | |
| 4283 ++face_change_count; | |
| 4284 ++windows_or_buffers_changed; | |
| 4285 } | |
| 4286 | |
|
34242
dd4e1abada68
(Finternal_set_lisp_face_attribute): If FRAME is `t', update
Miles Bader <miles@gnu.org>
parents:
34160
diff
changeset
|
4287 if (!UNSPECIFIEDP (value) |
| 24995 | 4288 && NILP (Fequal (old_value, value))) |
|
25592
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4289 { |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4290 Lisp_Object param; |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4291 |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4292 param = Qnil; |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
4293 |
|
25592
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4294 if (EQ (face, Qdefault)) |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4295 { |
|
36481
8456d3257f81
(Finternal_set_lisp_face_attribute)
Eli Zaretskii <eliz@gnu.org>
parents:
36066
diff
changeset
|
4296 #ifdef HAVE_WINDOW_SYSTEM |
|
25592
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4297 /* Changed font-related attributes of the `default' face are |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4298 reflected in changed `font' frame parameters. */ |
|
38905
70ef1eb656a6
(menu_face_changed_default): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38818
diff
changeset
|
4299 if (FRAMEP (frame) |
|
70ef1eb656a6
(menu_face_changed_default): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38818
diff
changeset
|
4300 && (font_related_attr_p || font_attr_p) |
|
25592
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4301 && lface_fully_specified_p (XVECTOR (lface)->contents)) |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4302 set_font_frame_param (frame, lface); |
|
36481
8456d3257f81
(Finternal_set_lisp_face_attribute)
Eli Zaretskii <eliz@gnu.org>
parents:
36066
diff
changeset
|
4303 else |
|
8456d3257f81
(Finternal_set_lisp_face_attribute)
Eli Zaretskii <eliz@gnu.org>
parents:
36066
diff
changeset
|
4304 #endif /* HAVE_WINDOW_SYSTEM */ |
|
8456d3257f81
(Finternal_set_lisp_face_attribute)
Eli Zaretskii <eliz@gnu.org>
parents:
36066
diff
changeset
|
4305 |
|
8456d3257f81
(Finternal_set_lisp_face_attribute)
Eli Zaretskii <eliz@gnu.org>
parents:
36066
diff
changeset
|
4306 if (EQ (attr, QCforeground)) |
|
25592
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4307 param = Qforeground_color; |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4308 else if (EQ (attr, QCbackground)) |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4309 param = Qbackground_color; |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4310 } |
|
36481
8456d3257f81
(Finternal_set_lisp_face_attribute)
Eli Zaretskii <eliz@gnu.org>
parents:
36066
diff
changeset
|
4311 #ifdef HAVE_WINDOW_SYSTEM |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
4312 #ifndef WINDOWSNT |
|
25592
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4313 else if (EQ (face, Qscroll_bar)) |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4314 { |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4315 /* Changing the colors of `scroll-bar' sets frame parameters |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4316 `scroll-bar-foreground' and `scroll-bar-background'. */ |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4317 if (EQ (attr, QCforeground)) |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4318 param = Qscroll_bar_foreground; |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4319 else if (EQ (attr, QCbackground)) |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4320 param = Qscroll_bar_background; |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4321 } |
|
31570
9eeff4863080
Remove conditional compilation on SCALABLE_FONTS.
Gerd Moellmann <gerd@gnu.org>
parents:
31522
diff
changeset
|
4322 #endif /* not WINDOWSNT */ |
|
25592
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4323 else if (EQ (face, Qborder)) |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4324 { |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4325 /* Changing background color of `border' sets frame parameter |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4326 `border-color'. */ |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4327 if (EQ (attr, QCbackground)) |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4328 param = Qborder_color; |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4329 } |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4330 else if (EQ (face, Qcursor)) |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4331 { |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4332 /* Changing background color of `cursor' sets frame parameter |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4333 `cursor-color'. */ |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4334 if (EQ (attr, QCbackground)) |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4335 param = Qcursor_color; |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4336 } |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4337 else if (EQ (face, Qmouse)) |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4338 { |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4339 /* Changing background color of `mouse' sets frame parameter |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4340 `mouse-color'. */ |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4341 if (EQ (attr, QCbackground)) |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4342 param = Qmouse_color; |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4343 } |
|
36481
8456d3257f81
(Finternal_set_lisp_face_attribute)
Eli Zaretskii <eliz@gnu.org>
parents:
36066
diff
changeset
|
4344 #endif /* HAVE_WINDOW_SYSTEM */ |
|
33082
5ab6f3e1f5c8
(menu_face_change_count): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33070
diff
changeset
|
4345 else if (EQ (face, Qmenu)) |
|
38905
70ef1eb656a6
(menu_face_changed_default): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38818
diff
changeset
|
4346 { |
|
70ef1eb656a6
(menu_face_changed_default): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38818
diff
changeset
|
4347 /* Indicate that we have to update the menu bar when |
|
70ef1eb656a6
(menu_face_changed_default): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38818
diff
changeset
|
4348 realizing faces on FRAME. FRAME t change the |
|
70ef1eb656a6
(menu_face_changed_default): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38818
diff
changeset
|
4349 default for new frames. We do this by setting |
|
70ef1eb656a6
(menu_face_changed_default): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38818
diff
changeset
|
4350 setting the flag in new face caches */ |
|
70ef1eb656a6
(menu_face_changed_default): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38818
diff
changeset
|
4351 if (FRAMEP (frame)) |
|
70ef1eb656a6
(menu_face_changed_default): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38818
diff
changeset
|
4352 { |
|
70ef1eb656a6
(menu_face_changed_default): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38818
diff
changeset
|
4353 struct frame *f = XFRAME (frame); |
|
70ef1eb656a6
(menu_face_changed_default): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38818
diff
changeset
|
4354 if (FRAME_FACE_CACHE (f) == NULL) |
|
70ef1eb656a6
(menu_face_changed_default): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38818
diff
changeset
|
4355 FRAME_FACE_CACHE (f) = make_face_cache (f); |
|
70ef1eb656a6
(menu_face_changed_default): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38818
diff
changeset
|
4356 FRAME_FACE_CACHE (f)->menu_face_changed_p = 1; |
|
70ef1eb656a6
(menu_face_changed_default): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38818
diff
changeset
|
4357 } |
|
70ef1eb656a6
(menu_face_changed_default): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38818
diff
changeset
|
4358 else |
|
70ef1eb656a6
(menu_face_changed_default): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38818
diff
changeset
|
4359 menu_face_changed_default = 1; |
|
70ef1eb656a6
(menu_face_changed_default): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38818
diff
changeset
|
4360 } |
|
25592
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4361 |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
4362 if (!NILP (param)) |
|
40838
bf08eafda9a3
(merge_face_vectors): Use braces to follow GNU Coding Standards.
Pavel Jan?k <Pavel@Janik.cz>
parents:
40656
diff
changeset
|
4363 { |
|
bf08eafda9a3
(merge_face_vectors): Use braces to follow GNU Coding Standards.
Pavel Jan?k <Pavel@Janik.cz>
parents:
40656
diff
changeset
|
4364 if (EQ (frame, Qt)) |
|
bf08eafda9a3
(merge_face_vectors): Use braces to follow GNU Coding Standards.
Pavel Jan?k <Pavel@Janik.cz>
parents:
40656
diff
changeset
|
4365 /* Update `default-frame-alist', which is used for new frames. */ |
|
bf08eafda9a3
(merge_face_vectors): Use braces to follow GNU Coding Standards.
Pavel Jan?k <Pavel@Janik.cz>
parents:
40656
diff
changeset
|
4366 { |
|
bf08eafda9a3
(merge_face_vectors): Use braces to follow GNU Coding Standards.
Pavel Jan?k <Pavel@Janik.cz>
parents:
40656
diff
changeset
|
4367 store_in_alist (&Vdefault_frame_alist, param, value); |
|
bf08eafda9a3
(merge_face_vectors): Use braces to follow GNU Coding Standards.
Pavel Jan?k <Pavel@Janik.cz>
parents:
40656
diff
changeset
|
4368 } |
|
bf08eafda9a3
(merge_face_vectors): Use braces to follow GNU Coding Standards.
Pavel Jan?k <Pavel@Janik.cz>
parents:
40656
diff
changeset
|
4369 else |
|
bf08eafda9a3
(merge_face_vectors): Use braces to follow GNU Coding Standards.
Pavel Jan?k <Pavel@Janik.cz>
parents:
40656
diff
changeset
|
4370 /* Update the current frame's parameters. */ |
|
bf08eafda9a3
(merge_face_vectors): Use braces to follow GNU Coding Standards.
Pavel Jan?k <Pavel@Janik.cz>
parents:
40656
diff
changeset
|
4371 { |
|
bf08eafda9a3
(merge_face_vectors): Use braces to follow GNU Coding Standards.
Pavel Jan?k <Pavel@Janik.cz>
parents:
40656
diff
changeset
|
4372 Lisp_Object cons; |
|
bf08eafda9a3
(merge_face_vectors): Use braces to follow GNU Coding Standards.
Pavel Jan?k <Pavel@Janik.cz>
parents:
40656
diff
changeset
|
4373 cons = XCAR (Vparam_value_alist); |
|
bf08eafda9a3
(merge_face_vectors): Use braces to follow GNU Coding Standards.
Pavel Jan?k <Pavel@Janik.cz>
parents:
40656
diff
changeset
|
4374 XSETCAR (cons, param); |
|
bf08eafda9a3
(merge_face_vectors): Use braces to follow GNU Coding Standards.
Pavel Jan?k <Pavel@Janik.cz>
parents:
40656
diff
changeset
|
4375 XSETCDR (cons, value); |
|
bf08eafda9a3
(merge_face_vectors): Use braces to follow GNU Coding Standards.
Pavel Jan?k <Pavel@Janik.cz>
parents:
40656
diff
changeset
|
4376 Fmodify_frame_parameters (frame, Vparam_value_alist); |
|
bf08eafda9a3
(merge_face_vectors): Use braces to follow GNU Coding Standards.
Pavel Jan?k <Pavel@Janik.cz>
parents:
40656
diff
changeset
|
4377 } |
|
bf08eafda9a3
(merge_face_vectors): Use braces to follow GNU Coding Standards.
Pavel Jan?k <Pavel@Janik.cz>
parents:
40656
diff
changeset
|
4378 } |
|
25592
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4379 } |
| 24995 | 4380 |
| 4381 return face; | |
| 4382 } | |
| 4383 | |
| 4384 | |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
4385 #ifdef HAVE_WINDOW_SYSTEM |
| 24995 | 4386 |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
4387 /* Set the `font' frame parameter of FRAME determined from `default' |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
4388 face attributes LFACE. If a face or fontset name is explicitely |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
4389 specfied in LFACE, use it as is. Otherwise, determine a font name |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
4390 from the other font-related atrributes of LFACE. In that case, if |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
4391 there's no matching font, signals an error. */ |
| 24995 | 4392 |
| 4393 static void | |
| 4394 set_font_frame_param (frame, lface) | |
| 4395 Lisp_Object frame, lface; | |
| 4396 { | |
| 4397 struct frame *f = XFRAME (frame); | |
|
35040
604d4b3d1054
(set_font_frame_param): Don't do anything for
Gerd Moellmann <gerd@gnu.org>
parents:
35004
diff
changeset
|
4398 |
|
604d4b3d1054
(set_font_frame_param): Don't do anything for
Gerd Moellmann <gerd@gnu.org>
parents:
35004
diff
changeset
|
4399 if (FRAME_WINDOW_P (f)) |
|
604d4b3d1054
(set_font_frame_param): Don't do anything for
Gerd Moellmann <gerd@gnu.org>
parents:
35004
diff
changeset
|
4400 { |
|
604d4b3d1054
(set_font_frame_param): Don't do anything for
Gerd Moellmann <gerd@gnu.org>
parents:
35004
diff
changeset
|
4401 Lisp_Object font_name; |
|
604d4b3d1054
(set_font_frame_param): Don't do anything for
Gerd Moellmann <gerd@gnu.org>
parents:
35004
diff
changeset
|
4402 char *font; |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48384
diff
changeset
|
4403 |
|
35040
604d4b3d1054
(set_font_frame_param): Don't do anything for
Gerd Moellmann <gerd@gnu.org>
parents:
35004
diff
changeset
|
4404 if (STRINGP (LFACE_FONT (lface))) |
|
604d4b3d1054
(set_font_frame_param): Don't do anything for
Gerd Moellmann <gerd@gnu.org>
parents:
35004
diff
changeset
|
4405 font_name = LFACE_FONT (lface); |
|
604d4b3d1054
(set_font_frame_param): Don't do anything for
Gerd Moellmann <gerd@gnu.org>
parents:
35004
diff
changeset
|
4406 else |
|
604d4b3d1054
(set_font_frame_param): Don't do anything for
Gerd Moellmann <gerd@gnu.org>
parents:
35004
diff
changeset
|
4407 { |
|
604d4b3d1054
(set_font_frame_param): Don't do anything for
Gerd Moellmann <gerd@gnu.org>
parents:
35004
diff
changeset
|
4408 /* Choose a font name that reflects LFACE's attributes and has |
|
604d4b3d1054
(set_font_frame_param): Don't do anything for
Gerd Moellmann <gerd@gnu.org>
parents:
35004
diff
changeset
|
4409 the registry and encoding pattern specified in the default |
|
604d4b3d1054
(set_font_frame_param): Don't do anything for
Gerd Moellmann <gerd@gnu.org>
parents:
35004
diff
changeset
|
4410 fontset (3rd arg: -1) for ASCII characters (4th arg: 0). */ |
|
48384
acfaa904eb56
(load_face_font): Set `face->overstrike' based on result from
Miles Bader <miles@gnu.org>
parents:
47983
diff
changeset
|
4411 font = choose_face_font (f, XVECTOR (lface)->contents, -1, 0, 0); |
|
35040
604d4b3d1054
(set_font_frame_param): Don't do anything for
Gerd Moellmann <gerd@gnu.org>
parents:
35004
diff
changeset
|
4412 if (!font) |
|
604d4b3d1054
(set_font_frame_param): Don't do anything for
Gerd Moellmann <gerd@gnu.org>
parents:
35004
diff
changeset
|
4413 error ("No font matches the specified attribute"); |
|
604d4b3d1054
(set_font_frame_param): Don't do anything for
Gerd Moellmann <gerd@gnu.org>
parents:
35004
diff
changeset
|
4414 font_name = build_string (font); |
|
604d4b3d1054
(set_font_frame_param): Don't do anything for
Gerd Moellmann <gerd@gnu.org>
parents:
35004
diff
changeset
|
4415 xfree (font); |
|
604d4b3d1054
(set_font_frame_param): Don't do anything for
Gerd Moellmann <gerd@gnu.org>
parents:
35004
diff
changeset
|
4416 } |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48384
diff
changeset
|
4417 |
|
51665
c1f65dfc56eb
Fix some of the font/face problems.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
51500
diff
changeset
|
4418 f->default_face_done_p = 0; |
|
35040
604d4b3d1054
(set_font_frame_param): Don't do anything for
Gerd Moellmann <gerd@gnu.org>
parents:
35004
diff
changeset
|
4419 Fmodify_frame_parameters (frame, Fcons (Fcons (Qfont, font_name), Qnil)); |
|
604d4b3d1054
(set_font_frame_param): Don't do anything for
Gerd Moellmann <gerd@gnu.org>
parents:
35004
diff
changeset
|
4420 } |
| 24995 | 4421 } |
| 4422 | |
| 4423 | |
|
25592
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4424 /* Update the corresponding face when frame parameter PARAM on frame F |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4425 has been assigned the value NEW_VALUE. */ |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4426 |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4427 void |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4428 update_face_from_frame_parameter (f, param, new_value) |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4429 struct frame *f; |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4430 Lisp_Object param, new_value; |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4431 { |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4432 Lisp_Object lface; |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4433 |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4434 /* If there are no faces yet, give up. This is the case when called |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4435 from Fx_create_frame, and we do the necessary things later in |
|
25661
a6e2ae7964fb
(Fx_family_fonts): Replaces Fx_font_list.
Gerd Moellmann <gerd@gnu.org>
parents:
25592
diff
changeset
|
4436 face-set-after-frame-defaults. */ |
|
25592
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4437 if (NILP (f->face_alist)) |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4438 return; |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
4439 |
|
43270
935816913346
(Finternal_make_lisp_face, Finternal_copy_lisp_face)
Richard M. Stallman <rms@gnu.org>
parents:
43203
diff
changeset
|
4440 /* Changing a named face means that all realized faces depending on |
|
935816913346
(Finternal_make_lisp_face, Finternal_copy_lisp_face)
Richard M. Stallman <rms@gnu.org>
parents:
43203
diff
changeset
|
4441 that face are invalid. Since we cannot tell which realized faces |
|
935816913346
(Finternal_make_lisp_face, Finternal_copy_lisp_face)
Richard M. Stallman <rms@gnu.org>
parents:
43203
diff
changeset
|
4442 depend on the face, make sure they are all removed. This is done |
|
935816913346
(Finternal_make_lisp_face, Finternal_copy_lisp_face)
Richard M. Stallman <rms@gnu.org>
parents:
43203
diff
changeset
|
4443 by incrementing face_change_count. The next call to |
|
935816913346
(Finternal_make_lisp_face, Finternal_copy_lisp_face)
Richard M. Stallman <rms@gnu.org>
parents:
43203
diff
changeset
|
4444 init_iterator will then free realized faces. */ |
|
935816913346
(Finternal_make_lisp_face, Finternal_copy_lisp_face)
Richard M. Stallman <rms@gnu.org>
parents:
43203
diff
changeset
|
4445 ++face_change_count; |
|
935816913346
(Finternal_make_lisp_face, Finternal_copy_lisp_face)
Richard M. Stallman <rms@gnu.org>
parents:
43203
diff
changeset
|
4446 ++windows_or_buffers_changed; |
|
935816913346
(Finternal_make_lisp_face, Finternal_copy_lisp_face)
Richard M. Stallman <rms@gnu.org>
parents:
43203
diff
changeset
|
4447 |
|
25592
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4448 if (EQ (param, Qforeground_color)) |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4449 { |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4450 lface = lface_from_face_name (f, Qdefault, 1); |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4451 LFACE_FOREGROUND (lface) = (STRINGP (new_value) |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4452 ? new_value : Qunspecified); |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4453 realize_basic_faces (f); |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4454 } |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4455 else if (EQ (param, Qbackground_color)) |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4456 { |
|
25661
a6e2ae7964fb
(Fx_family_fonts): Replaces Fx_font_list.
Gerd Moellmann <gerd@gnu.org>
parents:
25592
diff
changeset
|
4457 Lisp_Object frame; |
|
a6e2ae7964fb
(Fx_family_fonts): Replaces Fx_font_list.
Gerd Moellmann <gerd@gnu.org>
parents:
25592
diff
changeset
|
4458 |
|
a6e2ae7964fb
(Fx_family_fonts): Replaces Fx_font_list.
Gerd Moellmann <gerd@gnu.org>
parents:
25592
diff
changeset
|
4459 /* Changing the background color might change the background |
|
a6e2ae7964fb
(Fx_family_fonts): Replaces Fx_font_list.
Gerd Moellmann <gerd@gnu.org>
parents:
25592
diff
changeset
|
4460 mode, so that we have to load new defface specs. Call |
|
a6e2ae7964fb
(Fx_family_fonts): Replaces Fx_font_list.
Gerd Moellmann <gerd@gnu.org>
parents:
25592
diff
changeset
|
4461 frame-update-face-colors to do that. */ |
|
a6e2ae7964fb
(Fx_family_fonts): Replaces Fx_font_list.
Gerd Moellmann <gerd@gnu.org>
parents:
25592
diff
changeset
|
4462 XSETFRAME (frame, f); |
|
a6e2ae7964fb
(Fx_family_fonts): Replaces Fx_font_list.
Gerd Moellmann <gerd@gnu.org>
parents:
25592
diff
changeset
|
4463 call1 (Qframe_update_face_colors, frame); |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
4464 |
|
25592
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4465 lface = lface_from_face_name (f, Qdefault, 1); |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4466 LFACE_BACKGROUND (lface) = (STRINGP (new_value) |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4467 ? new_value : Qunspecified); |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4468 realize_basic_faces (f); |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4469 } |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4470 if (EQ (param, Qborder_color)) |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4471 { |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4472 lface = lface_from_face_name (f, Qborder, 1); |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4473 LFACE_BACKGROUND (lface) = (STRINGP (new_value) |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4474 ? new_value : Qunspecified); |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4475 } |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4476 else if (EQ (param, Qcursor_color)) |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4477 { |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4478 lface = lface_from_face_name (f, Qcursor, 1); |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4479 LFACE_BACKGROUND (lface) = (STRINGP (new_value) |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4480 ? new_value : Qunspecified); |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4481 } |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4482 else if (EQ (param, Qmouse_color)) |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4483 { |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4484 lface = lface_from_face_name (f, Qmouse, 1); |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4485 LFACE_BACKGROUND (lface) = (STRINGP (new_value) |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4486 ? new_value : Qunspecified); |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4487 } |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4488 } |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4489 |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
4490 |
| 24995 | 4491 /* Get the value of X resource RESOURCE, class CLASS for the display |
| 4492 of frame FRAME. This is here because ordinary `x-get-resource' | |
| 4493 doesn't take a frame argument. */ | |
| 4494 | |
| 4495 DEFUN ("internal-face-x-get-resource", Finternal_face_x_get_resource, | |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
4496 Sinternal_face_x_get_resource, 3, 3, 0, doc: /* */) |
|
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
4497 (resource, class, frame) |
| 24995 | 4498 Lisp_Object resource, class, frame; |
| 4499 { | |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
4500 Lisp_Object value = Qnil; |
|
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40603
diff
changeset
|
4501 CHECK_STRING (resource); |
|
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40603
diff
changeset
|
4502 CHECK_STRING (class); |
|
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40603
diff
changeset
|
4503 CHECK_LIVE_FRAME (frame); |
| 24995 | 4504 BLOCK_INPUT; |
| 4505 value = display_x_get_resource (FRAME_X_DISPLAY_INFO (XFRAME (frame)), | |
| 4506 resource, class, Qnil, Qnil); | |
| 4507 UNBLOCK_INPUT; | |
| 4508 return value; | |
| 4509 } | |
| 4510 | |
| 4511 | |
| 4512 /* Return resource string VALUE as a boolean value, i.e. nil, or t. | |
| 4513 If VALUE is "on" or "true", return t. If VALUE is "off" or | |
| 4514 "false", return nil. Otherwise, if SIGNAL_P is non-zero, signal an | |
| 4515 error; if SIGNAL_P is zero, return 0. */ | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
4516 |
| 24995 | 4517 static Lisp_Object |
| 4518 face_boolean_x_resource_value (value, signal_p) | |
| 4519 Lisp_Object value; | |
| 4520 int signal_p; | |
| 4521 { | |
| 4522 Lisp_Object result = make_number (0); | |
| 4523 | |
| 4524 xassert (STRINGP (value)); | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
4525 |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
4526 if (xstricmp (SDATA (value), "on") == 0 |
|
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
4527 || xstricmp (SDATA (value), "true") == 0) |
| 24995 | 4528 result = Qt; |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
4529 else if (xstricmp (SDATA (value), "off") == 0 |
|
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
4530 || xstricmp (SDATA (value), "false") == 0) |
| 24995 | 4531 result = Qnil; |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
4532 else if (xstricmp (SDATA (value), "unspecified") == 0) |
| 24995 | 4533 result = Qunspecified; |
| 4534 else if (signal_p) | |
| 4535 signal_error ("Invalid face attribute value from X resource", value); | |
| 4536 | |
| 4537 return result; | |
| 4538 } | |
| 4539 | |
| 4540 | |
| 4541 DEFUN ("internal-set-lisp-face-attribute-from-resource", | |
| 4542 Finternal_set_lisp_face_attribute_from_resource, | |
| 4543 Sinternal_set_lisp_face_attribute_from_resource, | |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
4544 3, 4, 0, doc: /* */) |
|
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
4545 (face, attr, value, frame) |
| 24995 | 4546 Lisp_Object face, attr, value, frame; |
| 4547 { | |
|
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40603
diff
changeset
|
4548 CHECK_SYMBOL (face); |
|
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40603
diff
changeset
|
4549 CHECK_SYMBOL (attr); |
|
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40603
diff
changeset
|
4550 CHECK_STRING (value); |
| 24995 | 4551 |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
4552 if (xstricmp (SDATA (value), "unspecified") == 0) |
| 24995 | 4553 value = Qunspecified; |
| 4554 else if (EQ (attr, QCheight)) | |
| 4555 { | |
| 4556 value = Fstring_to_number (value, make_number (10)); | |
| 4557 if (XINT (value) <= 0) | |
| 4558 signal_error ("Invalid face height from X resource", value); | |
| 4559 } | |
| 4560 else if (EQ (attr, QCbold) || EQ (attr, QCitalic)) | |
| 4561 value = face_boolean_x_resource_value (value, 1); | |
| 4562 else if (EQ (attr, QCweight) || EQ (attr, QCslant) || EQ (attr, QCwidth)) | |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
4563 value = intern (SDATA (value)); |
| 24995 | 4564 else if (EQ (attr, QCreverse_video) || EQ (attr, QCinverse_video)) |
| 4565 value = face_boolean_x_resource_value (value, 1); | |
| 4566 else if (EQ (attr, QCunderline) | |
| 4567 || EQ (attr, QCoverline) | |
|
40603
e8ff19a0b76e
(Finternal_set_lisp_face_attribute_from_resource):
Gerd Moellmann <gerd@gnu.org>
parents:
40598
diff
changeset
|
4568 || EQ (attr, QCstrike_through)) |
| 24995 | 4569 { |
| 4570 Lisp_Object boolean_value; | |
| 4571 | |
| 4572 /* If the result of face_boolean_x_resource_value is t or nil, | |
| 4573 VALUE does NOT specify a color. */ | |
| 4574 boolean_value = face_boolean_x_resource_value (value, 0); | |
| 4575 if (SYMBOLP (boolean_value)) | |
| 4576 value = boolean_value; | |
| 4577 } | |
|
40603
e8ff19a0b76e
(Finternal_set_lisp_face_attribute_from_resource):
Gerd Moellmann <gerd@gnu.org>
parents:
40598
diff
changeset
|
4578 else if (EQ (attr, QCbox)) |
|
e8ff19a0b76e
(Finternal_set_lisp_face_attribute_from_resource):
Gerd Moellmann <gerd@gnu.org>
parents:
40598
diff
changeset
|
4579 value = Fcar (Fread_from_string (value, Qnil, Qnil)); |
| 24995 | 4580 |
| 4581 return Finternal_set_lisp_face_attribute (face, attr, value, frame); | |
|
6784
d41c216ccd27
(frame_update_line_height): Check param_faces[i] not null.
Richard M. Stallman <rms@gnu.org>
parents:
6768
diff
changeset
|
4582 } |
|
8472
0d0b32e78a5b
(compute_glyph_face_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8119
diff
changeset
|
4583 |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
4584 #endif /* HAVE_WINDOW_SYSTEM */ |
| 24995 | 4585 |
|
25883
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
4586 |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
4587 /*********************************************************************** |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
4588 Menu face |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
4589 ***********************************************************************/ |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
4590 |
|
36942
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4591 #if defined HAVE_X_WINDOWS && defined USE_X_TOOLKIT |
|
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4592 |
|
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4593 /* Make menus on frame F appear as specified by the `menu' face. */ |
|
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4594 |
|
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4595 static void |
|
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4596 x_update_menu_appearance (f) |
|
25883
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
4597 struct frame *f; |
|
36936
bda3649d35fd
(x_set_menu_resources_from_menu_face) [USE_X_TOOLKIT]:
Gerd Moellmann <gerd@gnu.org>
parents:
36932
diff
changeset
|
4598 { |
|
bda3649d35fd
(x_set_menu_resources_from_menu_face) [USE_X_TOOLKIT]:
Gerd Moellmann <gerd@gnu.org>
parents:
36932
diff
changeset
|
4599 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); |
|
36942
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4600 XrmDatabase rdb; |
|
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4601 |
|
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4602 if (dpyinfo |
|
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4603 && (rdb = XrmGetDatabase (FRAME_X_DISPLAY (f)), |
|
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4604 rdb != NULL)) |
|
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4605 { |
|
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4606 char line[512]; |
|
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4607 Lisp_Object lface = lface_from_face_name (f, Qmenu, 1); |
|
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4608 struct face *face = FACE_FROM_ID (f, MENU_FACE_ID); |
|
46556
71e205b50a3e
(may_use_scalable_font_p): Argument now points to
Ken Raeburn <raeburn@raeburn.org>
parents:
46478
diff
changeset
|
4609 const char *myname = SDATA (Vx_resource_name); |
|
36942
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4610 int changed_p = 0; |
|
36956
22c5aa03d4aa
(x_update_menu_appearance): Use a different path
Gerd Moellmann <gerd@gnu.org>
parents:
36946
diff
changeset
|
4611 #ifdef USE_MOTIF |
|
22c5aa03d4aa
(x_update_menu_appearance): Use a different path
Gerd Moellmann <gerd@gnu.org>
parents:
36946
diff
changeset
|
4612 const char *popup_path = "popup_menu"; |
|
22c5aa03d4aa
(x_update_menu_appearance): Use a different path
Gerd Moellmann <gerd@gnu.org>
parents:
36946
diff
changeset
|
4613 #else |
|
22c5aa03d4aa
(x_update_menu_appearance): Use a different path
Gerd Moellmann <gerd@gnu.org>
parents:
36946
diff
changeset
|
4614 const char *popup_path = "menu.popup"; |
|
22c5aa03d4aa
(x_update_menu_appearance): Use a different path
Gerd Moellmann <gerd@gnu.org>
parents:
36946
diff
changeset
|
4615 #endif |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48384
diff
changeset
|
4616 |
|
36942
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4617 if (STRINGP (LFACE_FOREGROUND (lface))) |
|
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4618 { |
|
36956
22c5aa03d4aa
(x_update_menu_appearance): Use a different path
Gerd Moellmann <gerd@gnu.org>
parents:
36946
diff
changeset
|
4619 sprintf (line, "%s.%s*foreground: %s", |
|
22c5aa03d4aa
(x_update_menu_appearance): Use a different path
Gerd Moellmann <gerd@gnu.org>
parents:
36946
diff
changeset
|
4620 myname, popup_path, |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
4621 SDATA (LFACE_FOREGROUND (lface))); |
|
36942
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4622 XrmPutLineResource (&rdb, line); |
|
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4623 sprintf (line, "%s.pane.menubar*foreground: %s", |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
4624 myname, SDATA (LFACE_FOREGROUND (lface))); |
|
36942
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4625 XrmPutLineResource (&rdb, line); |
|
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4626 changed_p = 1; |
|
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4627 } |
|
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4628 |
|
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4629 if (STRINGP (LFACE_BACKGROUND (lface))) |
|
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4630 { |
|
36956
22c5aa03d4aa
(x_update_menu_appearance): Use a different path
Gerd Moellmann <gerd@gnu.org>
parents:
36946
diff
changeset
|
4631 sprintf (line, "%s.%s*background: %s", |
|
22c5aa03d4aa
(x_update_menu_appearance): Use a different path
Gerd Moellmann <gerd@gnu.org>
parents:
36946
diff
changeset
|
4632 myname, popup_path, |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
4633 SDATA (LFACE_BACKGROUND (lface))); |
|
36942
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4634 XrmPutLineResource (&rdb, line); |
|
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4635 sprintf (line, "%s.pane.menubar*background: %s", |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
4636 myname, SDATA (LFACE_BACKGROUND (lface))); |
|
36942
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4637 XrmPutLineResource (&rdb, line); |
|
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4638 changed_p = 1; |
|
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4639 } |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48384
diff
changeset
|
4640 |
|
36942
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4641 if (face->font_name |
|
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4642 && (!UNSPECIFIEDP (LFACE_FAMILY (lface)) |
|
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4643 || !UNSPECIFIEDP (LFACE_SWIDTH (lface)) |
|
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4644 || !UNSPECIFIEDP (LFACE_AVGWIDTH (lface)) |
|
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4645 || !UNSPECIFIEDP (LFACE_WEIGHT (lface)) |
|
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4646 || !UNSPECIFIEDP (LFACE_SLANT (lface)) |
|
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4647 || !UNSPECIFIEDP (LFACE_HEIGHT (lface)))) |
|
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4648 { |
|
25883
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
4649 #ifdef USE_MOTIF |
|
36942
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4650 const char *suffix = "List"; |
|
36936
bda3649d35fd
(x_set_menu_resources_from_menu_face) [USE_X_TOOLKIT]:
Gerd Moellmann <gerd@gnu.org>
parents:
36932
diff
changeset
|
4651 #else |
|
36942
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4652 const char *suffix = ""; |
|
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4653 #endif |
|
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4654 sprintf (line, "%s.pane.menubar*font%s: %s", |
|
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4655 myname, suffix, face->font_name); |
|
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4656 XrmPutLineResource (&rdb, line); |
|
36996
46d9cc8def79
(x_update_menu_appearance): Use local variable
Gerd Moellmann <gerd@gnu.org>
parents:
36956
diff
changeset
|
4657 sprintf (line, "%s.%s*font%s: %s", |
|
46d9cc8def79
(x_update_menu_appearance): Use local variable
Gerd Moellmann <gerd@gnu.org>
parents:
36956
diff
changeset
|
4658 myname, popup_path, suffix, face->font_name); |
|
36942
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4659 XrmPutLineResource (&rdb, line); |
|
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4660 changed_p = 1; |
|
36936
bda3649d35fd
(x_set_menu_resources_from_menu_face) [USE_X_TOOLKIT]:
Gerd Moellmann <gerd@gnu.org>
parents:
36932
diff
changeset
|
4661 } |
|
36942
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4662 |
|
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4663 if (changed_p && f->output_data.x->menubar_widget) |
|
38818
b0327e4e1da7
(x_update_menu_appearance): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
38802
diff
changeset
|
4664 free_frame_menubar (f); |
|
36942
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4665 } |
|
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4666 } |
|
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4667 |
|
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
4668 #endif /* HAVE_X_WINDOWS && USE_X_TOOLKIT */ |
| 24995 | 4669 |
| 4670 | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48384
diff
changeset
|
4671 DEFUN ("face-attribute-relative-p", Fface_attribute_relative_p, |
|
40398
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
4672 Sface_attribute_relative_p, |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
4673 2, 2, 0, |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
4674 doc: /* Return non-nil if face ATTRIBUTE VALUE is relative. */) |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
4675 (attribute, value) |
|
40532
221868112227
(Fface_attribute_relative_p): Declare args.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40441
diff
changeset
|
4676 Lisp_Object attribute, value; |
|
40398
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
4677 { |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
4678 if (EQ (value, Qunspecified)) |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
4679 return Qt; |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
4680 else if (EQ (attribute, QCheight)) |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
4681 return INTEGERP (value) ? Qnil : Qt; |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
4682 else |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
4683 return Qnil; |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
4684 } |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
4685 |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
4686 DEFUN ("merge-face-attribute", Fmerge_face_attribute, Smerge_face_attribute, |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
4687 3, 3, 0, |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
4688 doc: /* Return face ATTRIBUTE VALUE1 merged with VALUE2. |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
4689 If VALUE1 or VALUE2 are absolute (see `face-attribute-relative-p'), then |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
4690 the result will be absolute, otherwise it will be relative. */) |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
4691 (attribute, value1, value2) |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
4692 Lisp_Object attribute, value1, value2; |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
4693 { |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
4694 if (EQ (value1, Qunspecified)) |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
4695 return value2; |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
4696 else if (EQ (attribute, QCheight)) |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
4697 return merge_face_heights (value1, value2, value1, Qnil); |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
4698 else |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
4699 return value1; |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
4700 } |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
4701 |
| 24995 | 4702 |
| 4703 DEFUN ("internal-get-lisp-face-attribute", Finternal_get_lisp_face_attribute, | |
| 4704 Sinternal_get_lisp_face_attribute, | |
| 4705 2, 3, 0, | |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
4706 doc: /* Return face attribute KEYWORD of face SYMBOL. |
|
39914
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
4707 If SYMBOL does not name a valid Lisp face or KEYWORD isn't a valid |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
4708 face attribute name, signal an error. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
4709 If the optional argument FRAME is given, report on face FACE in that |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
4710 frame. If FRAME is t, report on the defaults for face FACE (for new |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
4711 frames). If FRAME is omitted or nil, use the selected frame. */) |
|
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
4712 (symbol, keyword, frame) |
| 24995 | 4713 Lisp_Object symbol, keyword, frame; |
| 4714 { | |
| 4715 Lisp_Object lface, value = Qnil; | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
4716 |
|
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40603
diff
changeset
|
4717 CHECK_SYMBOL (symbol); |
|
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40603
diff
changeset
|
4718 CHECK_SYMBOL (keyword); |
| 24995 | 4719 |
| 4720 if (EQ (frame, Qt)) | |
| 4721 lface = lface_from_face_name (NULL, symbol, 1); | |
| 4722 else | |
| 4723 { | |
| 4724 if (NILP (frame)) | |
|
25678
1878f7ae0df5
(frame_or_selected_frame): Change for Lisp_Object
Gerd Moellmann <gerd@gnu.org>
parents:
25661
diff
changeset
|
4725 frame = selected_frame; |
|
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40603
diff
changeset
|
4726 CHECK_LIVE_FRAME (frame); |
| 24995 | 4727 lface = lface_from_face_name (XFRAME (frame), symbol, 1); |
| 4728 } | |
| 4729 | |
| 4730 if (EQ (keyword, QCfamily)) | |
| 4731 value = LFACE_FAMILY (lface); | |
| 4732 else if (EQ (keyword, QCheight)) | |
| 4733 value = LFACE_HEIGHT (lface); | |
| 4734 else if (EQ (keyword, QCweight)) | |
| 4735 value = LFACE_WEIGHT (lface); | |
| 4736 else if (EQ (keyword, QCslant)) | |
| 4737 value = LFACE_SLANT (lface); | |
| 4738 else if (EQ (keyword, QCunderline)) | |
| 4739 value = LFACE_UNDERLINE (lface); | |
| 4740 else if (EQ (keyword, QCoverline)) | |
| 4741 value = LFACE_OVERLINE (lface); | |
| 4742 else if (EQ (keyword, QCstrike_through)) | |
| 4743 value = LFACE_STRIKE_THROUGH (lface); | |
| 4744 else if (EQ (keyword, QCbox)) | |
| 4745 value = LFACE_BOX (lface); | |
| 4746 else if (EQ (keyword, QCinverse_video) | |
| 4747 || EQ (keyword, QCreverse_video)) | |
| 4748 value = LFACE_INVERSE (lface); | |
| 4749 else if (EQ (keyword, QCforeground)) | |
| 4750 value = LFACE_FOREGROUND (lface); | |
| 4751 else if (EQ (keyword, QCbackground)) | |
| 4752 value = LFACE_BACKGROUND (lface); | |
| 4753 else if (EQ (keyword, QCstipple)) | |
| 4754 value = LFACE_STIPPLE (lface); | |
| 4755 else if (EQ (keyword, QCwidth)) | |
| 4756 value = LFACE_SWIDTH (lface); | |
| 31178 | 4757 else if (EQ (keyword, QCinherit)) |
| 4758 value = LFACE_INHERIT (lface); | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
4759 else if (EQ (keyword, QCfont)) |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
4760 value = LFACE_FONT (lface); |
| 24995 | 4761 else |
| 4762 signal_error ("Invalid face attribute name", keyword); | |
| 4763 | |
| 4764 return value; | |
| 4765 } | |
| 4766 | |
| 4767 | |
| 4768 DEFUN ("internal-lisp-face-attribute-values", | |
| 4769 Finternal_lisp_face_attribute_values, | |
| 4770 Sinternal_lisp_face_attribute_values, 1, 1, 0, | |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
4771 doc: /* Return a list of valid discrete values for face attribute ATTR. |
|
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
4772 Value is nil if ATTR doesn't have a discrete set of valid values. */) |
|
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
4773 (attr) |
| 24995 | 4774 Lisp_Object attr; |
| 4775 { | |
| 4776 Lisp_Object result = Qnil; | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
4777 |
|
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40603
diff
changeset
|
4778 CHECK_SYMBOL (attr); |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
4779 |
| 24995 | 4780 if (EQ (attr, QCweight) |
| 4781 || EQ (attr, QCslant) | |
| 4782 || EQ (attr, QCwidth)) | |
| 4783 { | |
| 4784 /* Extract permissible symbols from tables. */ | |
| 4785 struct table_entry *table; | |
| 4786 int i, dim; | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
4787 |
| 24995 | 4788 if (EQ (attr, QCweight)) |
| 4789 table = weight_table, dim = DIM (weight_table); | |
| 4790 else if (EQ (attr, QCslant)) | |
| 4791 table = slant_table, dim = DIM (slant_table); | |
| 4792 else | |
| 4793 table = swidth_table, dim = DIM (swidth_table); | |
| 4794 | |
| 4795 for (i = 0; i < dim; ++i) | |
| 4796 { | |
| 4797 Lisp_Object symbol = *table[i].symbol; | |
| 4798 Lisp_Object tail = result; | |
| 4799 | |
| 4800 while (!NILP (tail) | |
| 4801 && !EQ (XCAR (tail), symbol)) | |
| 4802 tail = XCDR (tail); | |
| 4803 | |
| 4804 if (NILP (tail)) | |
| 4805 result = Fcons (symbol, result); | |
| 4806 } | |
| 4807 } | |
| 4808 else if (EQ (attr, QCunderline)) | |
| 4809 result = Fcons (Qt, Fcons (Qnil, Qnil)); | |
| 4810 else if (EQ (attr, QCoverline)) | |
| 4811 result = Fcons (Qt, Fcons (Qnil, Qnil)); | |
| 4812 else if (EQ (attr, QCstrike_through)) | |
| 4813 result = Fcons (Qt, Fcons (Qnil, Qnil)); | |
| 4814 else if (EQ (attr, QCinverse_video) || EQ (attr, QCreverse_video)) | |
| 4815 result = Fcons (Qt, Fcons (Qnil, Qnil)); | |
| 4816 | |
| 4817 return result; | |
| 4818 } | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
4819 |
| 24995 | 4820 |
| 4821 DEFUN ("internal-merge-in-global-face", Finternal_merge_in_global_face, | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
4822 Sinternal_merge_in_global_face, 2, 2, 0, |
|
40598
7f3db64c7d42
(Finternal_merge_in_global_face): Reindent.
Pavel Jan?k <Pavel@Janik.cz>
parents:
40555
diff
changeset
|
4823 doc: /* Add attributes from frame-default definition of FACE to FACE on FRAME. |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
4824 Default face attributes override any local face attributes. */) |
|
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
4825 (face, frame) |
| 24995 | 4826 Lisp_Object face, frame; |
| 4827 { | |
|
31483
5ef4cd475781
(default_face_vector): Function removed.
Miles Bader <miles@gnu.org>
parents:
31463
diff
changeset
|
4828 int i; |
|
5ef4cd475781
(default_face_vector): Function removed.
Miles Bader <miles@gnu.org>
parents:
31463
diff
changeset
|
4829 Lisp_Object global_lface, local_lface, *gvec, *lvec; |
|
5ef4cd475781
(default_face_vector): Function removed.
Miles Bader <miles@gnu.org>
parents:
31463
diff
changeset
|
4830 |
|
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40603
diff
changeset
|
4831 CHECK_LIVE_FRAME (frame); |
| 24995 | 4832 global_lface = lface_from_face_name (NULL, face, 1); |
| 4833 local_lface = lface_from_face_name (XFRAME (frame), face, 0); | |
| 4834 if (NILP (local_lface)) | |
| 4835 local_lface = Finternal_make_lisp_face (face, frame); | |
|
31483
5ef4cd475781
(default_face_vector): Function removed.
Miles Bader <miles@gnu.org>
parents:
31463
diff
changeset
|
4836 |
|
31519
5a14247e8e26
(Finternal_set_lisp_face_attribute): Minor thinko.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31518
diff
changeset
|
4837 /* Make every specified global attribute override the local one. |
|
5a14247e8e26
(Finternal_set_lisp_face_attribute): Minor thinko.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31518
diff
changeset
|
4838 BEWARE!! This is only used from `face-set-after-frame-default' where |
|
5a14247e8e26
(Finternal_set_lisp_face_attribute): Minor thinko.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31518
diff
changeset
|
4839 the local frame is defined from default specs in `face-defface-spec' |
|
5a14247e8e26
(Finternal_set_lisp_face_attribute): Minor thinko.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31518
diff
changeset
|
4840 and those should be overridden by global settings. Hence the strange |
|
5a14247e8e26
(Finternal_set_lisp_face_attribute): Minor thinko.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31518
diff
changeset
|
4841 "global before local" priority. */ |
|
31483
5ef4cd475781
(default_face_vector): Function removed.
Miles Bader <miles@gnu.org>
parents:
31463
diff
changeset
|
4842 lvec = XVECTOR (local_lface)->contents; |
|
5ef4cd475781
(default_face_vector): Function removed.
Miles Bader <miles@gnu.org>
parents:
31463
diff
changeset
|
4843 gvec = XVECTOR (global_lface)->contents; |
|
5ef4cd475781
(default_face_vector): Function removed.
Miles Bader <miles@gnu.org>
parents:
31463
diff
changeset
|
4844 for (i = 1; i < LFACE_VECTOR_SIZE; ++i) |
|
5ef4cd475781
(default_face_vector): Function removed.
Miles Bader <miles@gnu.org>
parents:
31463
diff
changeset
|
4845 if (! UNSPECIFIEDP (gvec[i])) |
|
5ef4cd475781
(default_face_vector): Function removed.
Miles Bader <miles@gnu.org>
parents:
31463
diff
changeset
|
4846 lvec[i] = gvec[i]; |
|
31507
ac6d049932e9
(Finternal_merge_in_global_face): Return a Lisp object.
Gerd Moellmann <gerd@gnu.org>
parents:
31483
diff
changeset
|
4847 |
|
ac6d049932e9
(Finternal_merge_in_global_face): Return a Lisp object.
Gerd Moellmann <gerd@gnu.org>
parents:
31483
diff
changeset
|
4848 return Qnil; |
| 24995 | 4849 } |
| 4850 | |
| 4851 | |
| 4852 /* The following function is implemented for compatibility with 20.2. | |
| 4853 The function is used in x-resolve-fonts when it is asked to | |
| 4854 return fonts with the same size as the font of a face. This is | |
| 4855 done in fontset.el. */ | |
| 4856 | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
4857 DEFUN ("face-font", Fface_font, Sface_font, 1, 2, 0, |
|
40598
7f3db64c7d42
(Finternal_merge_in_global_face): Reindent.
Pavel Jan?k <Pavel@Janik.cz>
parents:
40555
diff
changeset
|
4858 doc: /* Return the font name of face FACE, or nil if it is unspecified. |
|
39914
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
4859 If the optional argument FRAME is given, report on face FACE in that frame. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
4860 If FRAME is t, report on the defaults for face FACE (for new frames). |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
4861 The font default for a face is either nil, or a list |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
4862 of the form (bold), (italic) or (bold italic). |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
4863 If FRAME is omitted or nil, use the selected frame. */) |
|
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
4864 (face, frame) |
| 24995 | 4865 Lisp_Object face, frame; |
| 4866 { | |
| 4867 if (EQ (frame, Qt)) | |
| 4868 { | |
| 4869 Lisp_Object result = Qnil; | |
| 4870 Lisp_Object lface = lface_from_face_name (NULL, face, 1); | |
| 4871 | |
| 4872 if (!UNSPECIFIEDP (LFACE_WEIGHT (lface)) | |
| 4873 && !EQ (LFACE_WEIGHT (lface), Qnormal)) | |
| 4874 result = Fcons (Qbold, result); | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
4875 |
|
40441
024f6efc3f87
(Fface_font): Use UNSPECIFIEDP instead of NILP for
Gerd Moellmann <gerd@gnu.org>
parents:
40398
diff
changeset
|
4876 if (!UNSPECIFIEDP (LFACE_SLANT (lface)) |
| 24995 | 4877 && !EQ (LFACE_SLANT (lface), Qnormal)) |
| 4878 result = Fcons (Qitalic, result); | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
4879 |
| 24995 | 4880 return result; |
| 4881 } | |
| 4882 else | |
| 4883 { | |
| 4884 struct frame *f = frame_or_selected_frame (frame, 1); | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
4885 int face_id = lookup_named_face (f, face, 0); |
| 24995 | 4886 struct face *face = FACE_FROM_ID (f, face_id); |
|
33275
8c453c73a11b
(lookup_named_face): If default face isn't realized,
Gerd Moellmann <gerd@gnu.org>
parents:
33082
diff
changeset
|
4887 return face ? build_string (face->font_name) : Qnil; |
| 24995 | 4888 } |
| 4889 } | |
| 4890 | |
| 4891 | |
| 4892 /* Compare face vectors V1 and V2 for equality. Value is non-zero if | |
| 4893 all attributes are `equal'. Tries to be fast because this function | |
| 4894 is called quite often. */ | |
| 4895 | |
| 4896 static INLINE int | |
| 4897 lface_equal_p (v1, v2) | |
| 4898 Lisp_Object *v1, *v2; | |
| 4899 { | |
| 4900 int i, equal_p = 1; | |
| 4901 | |
| 4902 for (i = 1; i < LFACE_VECTOR_SIZE && equal_p; ++i) | |
| 4903 { | |
| 4904 Lisp_Object a = v1[i]; | |
| 4905 Lisp_Object b = v2[i]; | |
| 4906 | |
| 4907 /* Type can differ, e.g. when one attribute is unspecified, i.e. nil, | |
| 4908 and the other is specified. */ | |
| 4909 equal_p = XTYPE (a) == XTYPE (b); | |
| 4910 if (!equal_p) | |
| 4911 break; | |
| 4912 | |
| 4913 if (!EQ (a, b)) | |
| 4914 { | |
| 4915 switch (XTYPE (a)) | |
| 4916 { | |
| 4917 case Lisp_String: | |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
4918 equal_p = ((SBYTES (a) |
|
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
4919 == SBYTES (b)) |
|
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
4920 && bcmp (SDATA (a), SDATA (b), |
|
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
4921 SBYTES (a)) == 0); |
| 24995 | 4922 break; |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
4923 |
| 24995 | 4924 case Lisp_Int: |
| 4925 case Lisp_Symbol: | |
| 4926 equal_p = 0; | |
| 4927 break; | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
4928 |
| 24995 | 4929 default: |
| 4930 equal_p = !NILP (Fequal (a, b)); | |
| 4931 break; | |
| 4932 } | |
| 4933 } | |
| 4934 } | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
4935 |
| 24995 | 4936 return equal_p; |
| 4937 } | |
| 4938 | |
| 4939 | |
| 4940 DEFUN ("internal-lisp-face-equal-p", Finternal_lisp_face_equal_p, | |
| 4941 Sinternal_lisp_face_equal_p, 2, 3, 0, | |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
4942 doc: /* True if FACE1 and FACE2 are equal. |
|
39914
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
4943 If the optional argument FRAME is given, report on face FACE in that frame. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
4944 If FRAME is t, report on the defaults for face FACE (for new frames). |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
4945 If FRAME is omitted or nil, use the selected frame. */) |
|
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
4946 (face1, face2, frame) |
| 24995 | 4947 Lisp_Object face1, face2, frame; |
| 4948 { | |
| 4949 int equal_p; | |
| 4950 struct frame *f; | |
| 4951 Lisp_Object lface1, lface2; | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
4952 |
| 24995 | 4953 if (EQ (frame, Qt)) |
| 4954 f = NULL; | |
| 4955 else | |
| 4956 /* Don't use check_x_frame here because this function is called | |
| 4957 before X frames exist. At that time, if FRAME is nil, | |
| 4958 selected_frame will be used which is the frame dumped with | |
| 4959 Emacs. That frame is not an X frame. */ | |
| 4960 f = frame_or_selected_frame (frame, 2); | |
| 4961 | |
| 4962 lface1 = lface_from_face_name (NULL, face1, 1); | |
| 4963 lface2 = lface_from_face_name (NULL, face2, 1); | |
| 4964 equal_p = lface_equal_p (XVECTOR (lface1)->contents, | |
| 4965 XVECTOR (lface2)->contents); | |
| 4966 return equal_p ? Qt : Qnil; | |
| 4967 } | |
| 4968 | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
4969 |
| 24995 | 4970 DEFUN ("internal-lisp-face-empty-p", Finternal_lisp_face_empty_p, |
| 4971 Sinternal_lisp_face_empty_p, 1, 2, 0, | |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
4972 doc: /* True if FACE has no attribute specified. |
|
39914
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
4973 If the optional argument FRAME is given, report on face FACE in that frame. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
4974 If FRAME is t, report on the defaults for face FACE (for new frames). |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
4975 If FRAME is omitted or nil, use the selected frame. */) |
|
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
4976 (face, frame) |
| 24995 | 4977 Lisp_Object face, frame; |
| 4978 { | |
| 4979 struct frame *f; | |
| 4980 Lisp_Object lface; | |
| 4981 int i; | |
| 4982 | |
| 4983 if (NILP (frame)) | |
|
25678
1878f7ae0df5
(frame_or_selected_frame): Change for Lisp_Object
Gerd Moellmann <gerd@gnu.org>
parents:
25661
diff
changeset
|
4984 frame = selected_frame; |
|
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40603
diff
changeset
|
4985 CHECK_LIVE_FRAME (frame); |
|
25678
1878f7ae0df5
(frame_or_selected_frame): Change for Lisp_Object
Gerd Moellmann <gerd@gnu.org>
parents:
25661
diff
changeset
|
4986 f = XFRAME (frame); |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
4987 |
| 24995 | 4988 if (EQ (frame, Qt)) |
| 4989 lface = lface_from_face_name (NULL, face, 1); | |
| 4990 else | |
| 4991 lface = lface_from_face_name (f, face, 1); | |
| 4992 | |
| 4993 for (i = 1; i < LFACE_VECTOR_SIZE; ++i) | |
|
35913
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
4994 if (!UNSPECIFIEDP (AREF (lface, i))) |
| 24995 | 4995 break; |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
4996 |
| 24995 | 4997 return i == LFACE_VECTOR_SIZE ? Qt : Qnil; |
| 4998 } | |
| 4999 | |
| 5000 | |
| 5001 DEFUN ("frame-face-alist", Fframe_face_alist, Sframe_face_alist, | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
5002 0, 1, 0, |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
5003 doc: /* Return an alist of frame-local faces defined on FRAME. |
|
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
5004 For internal use only. */) |
|
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
5005 (frame) |
| 24995 | 5006 Lisp_Object frame; |
| 5007 { | |
| 5008 struct frame *f = frame_or_selected_frame (frame, 0); | |
| 5009 return f->face_alist; | |
| 5010 } | |
| 5011 | |
| 5012 | |
| 5013 /* Return a hash code for Lisp string STRING with case ignored. Used | |
| 5014 below in computing a hash value for a Lisp face. */ | |
| 5015 | |
| 5016 static INLINE unsigned | |
| 5017 hash_string_case_insensitive (string) | |
| 5018 Lisp_Object string; | |
| 5019 { | |
|
46556
71e205b50a3e
(may_use_scalable_font_p): Argument now points to
Ken Raeburn <raeburn@raeburn.org>
parents:
46478
diff
changeset
|
5020 const unsigned char *s; |
| 24995 | 5021 unsigned hash = 0; |
| 5022 xassert (STRINGP (string)); | |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
5023 for (s = SDATA (string); *s; ++s) |
| 24995 | 5024 hash = (hash << 1) ^ tolower (*s); |
| 5025 return hash; | |
| 5026 } | |
| 5027 | |
| 5028 | |
| 5029 /* Return a hash code for face attribute vector V. */ | |
| 5030 | |
| 5031 static INLINE unsigned | |
| 5032 lface_hash (v) | |
| 5033 Lisp_Object *v; | |
| 5034 { | |
| 5035 return (hash_string_case_insensitive (v[LFACE_FAMILY_INDEX]) | |
| 5036 ^ hash_string_case_insensitive (v[LFACE_FOREGROUND_INDEX]) | |
| 5037 ^ hash_string_case_insensitive (v[LFACE_BACKGROUND_INDEX]) | |
|
28464
cad4cc0508a0
Fix Lisp_Object/int type confusion revealed by making Lisp_Object a union type:
Ken Raeburn <raeburn@raeburn.org>
parents:
28461
diff
changeset
|
5038 ^ XFASTINT (v[LFACE_WEIGHT_INDEX]) |
|
cad4cc0508a0
Fix Lisp_Object/int type confusion revealed by making Lisp_Object a union type:
Ken Raeburn <raeburn@raeburn.org>
parents:
28461
diff
changeset
|
5039 ^ XFASTINT (v[LFACE_SLANT_INDEX]) |
|
cad4cc0508a0
Fix Lisp_Object/int type confusion revealed by making Lisp_Object a union type:
Ken Raeburn <raeburn@raeburn.org>
parents:
28461
diff
changeset
|
5040 ^ XFASTINT (v[LFACE_SWIDTH_INDEX]) |
| 24995 | 5041 ^ XFASTINT (v[LFACE_HEIGHT_INDEX])); |
| 5042 } | |
| 5043 | |
| 5044 | |
| 5045 /* Return non-zero if LFACE1 and LFACE2 specify the same font (without | |
| 5046 considering charsets/registries). They do if they specify the same | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5047 family, point size, weight, width, slant, and fontset. Both LFACE1 |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5048 and LFACE2 must be fully-specified. */ |
| 24995 | 5049 |
| 5050 static INLINE int | |
| 5051 lface_same_font_attributes_p (lface1, lface2) | |
| 5052 Lisp_Object *lface1, *lface2; | |
| 5053 { | |
| 5054 xassert (lface_fully_specified_p (lface1) | |
| 5055 && lface_fully_specified_p (lface2)); | |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
5056 return (xstricmp (SDATA (lface1[LFACE_FAMILY_INDEX]), |
|
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
5057 SDATA (lface2[LFACE_FAMILY_INDEX])) == 0 |
| 31178 | 5058 && EQ (lface1[LFACE_HEIGHT_INDEX], lface2[LFACE_HEIGHT_INDEX]) |
| 24995 | 5059 && EQ (lface1[LFACE_SWIDTH_INDEX], lface2[LFACE_SWIDTH_INDEX]) |
|
35913
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
5060 && EQ (lface1[LFACE_AVGWIDTH_INDEX], lface2[LFACE_AVGWIDTH_INDEX]) |
| 24995 | 5061 && EQ (lface1[LFACE_WEIGHT_INDEX], lface2[LFACE_WEIGHT_INDEX]) |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5062 && EQ (lface1[LFACE_SLANT_INDEX], lface2[LFACE_SLANT_INDEX]) |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5063 && (EQ (lface1[LFACE_FONT_INDEX], lface2[LFACE_FONT_INDEX]) |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5064 || (STRINGP (lface1[LFACE_FONT_INDEX]) |
|
28263
73181b84ea57
(lface_same_font_attributes_p): Compare font attributes
Gerd Moellmann <gerd@gnu.org>
parents:
28237
diff
changeset
|
5065 && STRINGP (lface2[LFACE_FONT_INDEX]) |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
5066 && xstricmp (SDATA (lface1[LFACE_FONT_INDEX]), |
|
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
5067 SDATA (lface2[LFACE_FONT_INDEX]))))); |
| 24995 | 5068 } |
| 5069 | |
| 5070 | |
| 5071 | |
| 5072 /*********************************************************************** | |
| 5073 Realized Faces | |
| 5074 ***********************************************************************/ | |
| 5075 | |
| 5076 /* Allocate and return a new realized face for Lisp face attribute | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5077 vector ATTR. */ |
| 24995 | 5078 |
| 5079 static struct face * | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5080 make_realized_face (attr) |
| 24995 | 5081 Lisp_Object *attr; |
| 5082 { | |
| 5083 struct face *face = (struct face *) xmalloc (sizeof *face); | |
| 5084 bzero (face, sizeof *face); | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5085 face->ascii_face = face; |
| 24995 | 5086 bcopy (attr, face->lface, sizeof face->lface); |
| 5087 return face; | |
| 5088 } | |
| 5089 | |
| 5090 | |
| 5091 /* Free realized face FACE, including its X resources. FACE may | |
| 5092 be null. */ | |
| 5093 | |
| 5094 static void | |
| 5095 free_realized_face (f, face) | |
| 5096 struct frame *f; | |
| 5097 struct face *face; | |
| 5098 { | |
| 5099 if (face) | |
| 5100 { | |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
5101 #ifdef HAVE_WINDOW_SYSTEM |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
5102 if (FRAME_WINDOW_P (f)) |
| 24995 | 5103 { |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5104 /* Free fontset of FACE if it is ASCII face. */ |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5105 if (face->fontset >= 0 && face == face->ascii_face) |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5106 free_face_fontset (f, face); |
| 24995 | 5107 if (face->gc) |
| 5108 { | |
| 5109 x_free_gc (f, face->gc); | |
| 5110 face->gc = 0; | |
| 5111 } | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
5112 |
| 24995 | 5113 free_face_colors (f, face); |
| 5114 x_destroy_bitmap (f, face->stipple); | |
| 5115 } | |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
5116 #endif /* HAVE_WINDOW_SYSTEM */ |
| 24995 | 5117 |
| 5118 xfree (face); | |
| 5119 } | |
| 5120 } | |
| 5121 | |
| 5122 | |
| 5123 /* Prepare face FACE for subsequent display on frame F. This | |
| 5124 allocated GCs if they haven't been allocated yet or have been freed | |
| 5125 by clearing the face cache. */ | |
| 5126 | |
| 5127 void | |
| 5128 prepare_face_for_display (f, face) | |
| 5129 struct frame *f; | |
| 5130 struct face *face; | |
| 5131 { | |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
5132 #ifdef HAVE_WINDOW_SYSTEM |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
5133 xassert (FRAME_WINDOW_P (f)); |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
5134 |
| 24995 | 5135 if (face->gc == 0) |
| 5136 { | |
| 5137 XGCValues xgcv; | |
| 5138 unsigned long mask = GCForeground | GCBackground | GCGraphicsExposures; | |
| 5139 | |
| 5140 xgcv.foreground = face->foreground; | |
| 5141 xgcv.background = face->background; | |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
5142 #ifdef HAVE_X_WINDOWS |
| 24995 | 5143 xgcv.graphics_exposures = False; |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
5144 #endif |
| 24995 | 5145 /* The font of FACE may be null if we couldn't load it. */ |
| 5146 if (face->font) | |
| 5147 { | |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
5148 #ifdef HAVE_X_WINDOWS |
| 24995 | 5149 xgcv.font = face->font->fid; |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
5150 #endif |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
5151 #ifdef WINDOWSNT |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
5152 xgcv.font = face->font; |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
5153 #endif |
|
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
44705
diff
changeset
|
5154 #ifdef MAC_OS |
|
32752
923b8d6d8277
Initial check-in: changes for building Emacs under Mac OS.
Andrew Choi <akochoi@shaw.ca>
parents:
32176
diff
changeset
|
5155 xgcv.font = face->font; |
|
923b8d6d8277
Initial check-in: changes for building Emacs under Mac OS.
Andrew Choi <akochoi@shaw.ca>
parents:
32176
diff
changeset
|
5156 #endif |
| 24995 | 5157 mask |= GCFont; |
| 5158 } | |
| 5159 | |
| 5160 BLOCK_INPUT; | |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
5161 #ifdef HAVE_X_WINDOWS |
| 24995 | 5162 if (face->stipple) |
| 5163 { | |
|
25092
79a5a567bdb0
(prepare_face_for_display): Use FillOpaqueStippled instead of
Gerd Moellmann <gerd@gnu.org>
parents:
25062
diff
changeset
|
5164 xgcv.fill_style = FillOpaqueStippled; |
| 24995 | 5165 xgcv.stipple = x_bitmap_pixmap (f, face->stipple); |
| 5166 mask |= GCFillStyle | GCStipple; | |
| 5167 } | |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
5168 #endif |
| 24995 | 5169 face->gc = x_create_gc (f, mask, &xgcv); |
| 5170 UNBLOCK_INPUT; | |
| 5171 } | |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
5172 #endif /* HAVE_WINDOW_SYSTEM */ |
| 24995 | 5173 } |
| 5174 | |
| 5175 | |
|
45718
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5176 /* Returns the `distance' between the colors X and Y. */ |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5177 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5178 static int |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5179 color_distance (x, y) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5180 XColor *x, *y; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5181 { |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5182 /* This formula is from a paper title `Colour metric' by Thiadmer Riemersma. |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5183 Quoting from that paper: |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5184 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5185 This formula has results that are very close to L*u*v* (with the |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5186 modified lightness curve) and, more importantly, it is a more even |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5187 algorithm: it does not have a range of colours where it suddenly |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5188 gives far from optimal results. |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5189 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5190 See <http://www.compuphase.com/cmetric.htm> for more info. */ |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5191 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5192 long r = (x->red - y->red) >> 8; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5193 long g = (x->green - y->green) >> 8; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5194 long b = (x->blue - y->blue) >> 8; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5195 long r_mean = (x->red + y->red) >> 9; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5196 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5197 return |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5198 (((512 + r_mean) * r * r) >> 8) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5199 + 4 * g * g |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5200 + (((767 - r_mean) * b * b) >> 8); |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5201 } |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5202 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5203 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5204 DEFUN ("color-distance", Fcolor_distance, Scolor_distance, 2, 3, 0, |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5205 doc: /* Return an integer distance between COLOR1 and COLOR2 on FRAME. |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5206 COLOR1 and COLOR2 may be either strings containing the color name, |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5207 or lists of the form (RED GREEN BLUE). |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5208 If FRAME is unspecified or nil, the current frame is used. */) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5209 (color1, color2, frame) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5210 Lisp_Object color1, color2, frame; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5211 { |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5212 struct frame *f; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5213 XColor cdef1, cdef2; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5214 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5215 if (NILP (frame)) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5216 frame = selected_frame; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5217 CHECK_LIVE_FRAME (frame); |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5218 f = XFRAME (frame); |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5219 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5220 if ((CONSP (color1) && !parse_rgb_list (color1, &cdef1)) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5221 || !STRINGP (color1) |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
5222 || !defined_color (f, SDATA (color1), &cdef1, 0)) |
|
45718
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5223 signal_error ("Invalid color", color1); |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5224 if ((CONSP (color2) && !parse_rgb_list (color2, &cdef2)) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5225 || !STRINGP (color2) |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
5226 || !defined_color (f, SDATA (color2), &cdef2, 0)) |
|
45718
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5227 signal_error ("Invalid color", color2); |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5228 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5229 return make_number (color_distance (&cdef1, &cdef2)); |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5230 } |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5231 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5232 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5233 /*********************************************************************** |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5234 Face capability testing for ttys |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5235 ***********************************************************************/ |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5236 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5237 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5238 /* If the distance (as returned by color_distance) between two colors is |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5239 less than this, then they are considered the same, for determining |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5240 whether a color is supported or not. The range of values is 0-65535. */ |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5241 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5242 #define TTY_SAME_COLOR_THRESHOLD 10000 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5243 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5244 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5245 DEFUN ("tty-supports-face-attributes-p", |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5246 Ftty_supports_face_attributes_p, Stty_supports_face_attributes_p, |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5247 1, 2, 0, |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5248 doc: /* Return non-nil if all the face attributes in ATTRIBUTES are supported. |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5249 The optional argument FRAME is the frame on which to test; if it is nil |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5250 or unspecified, then the current frame is used. If FRAME is not a tty |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5251 frame, then nil is returned. |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5252 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5253 The definition of `supported' is somewhat heuristic, but basically means |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5254 that a face containing all the attributes in ATTRIBUTES, when merged |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5255 with the default face for display, can be represented in a way that's |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5256 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5257 \(1) different in appearance than the default face, and |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5258 \(2) `close in spirit' to what the attributes specify, if not exact. |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5259 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5260 Point (2) implies that a `:weight black' attribute will be satisified |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5261 by any terminal that can display bold, and a `:foreground "yellow"' as |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5262 long as the terminal can display a yellowish color, but `:slant italic' |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5263 will _not_ be satisified by the tty display code's automatic |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5264 substitution of a `dim' face for italic. */) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5265 (attributes, frame) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5266 Lisp_Object attributes, frame; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5267 { |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5268 int weight, i; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5269 struct frame *f; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5270 Lisp_Object val, fg, bg; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5271 XColor fg_tty_color, fg_std_color; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5272 XColor bg_tty_color, bg_std_color; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5273 Lisp_Object attrs[LFACE_VECTOR_SIZE]; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5274 unsigned test_caps = 0; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5275 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5276 if (NILP (frame)) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5277 frame = selected_frame; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5278 CHECK_LIVE_FRAME (frame); |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5279 f = XFRAME (frame); |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5280 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5281 for (i = 0; i < LFACE_VECTOR_SIZE; i++) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5282 attrs[i] = Qunspecified; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5283 merge_face_vector_with_property (f, attrs, attributes); |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5284 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5285 /* This function only works on ttys. */ |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5286 if (!FRAME_TERMCAP_P (f) && !FRAME_MSDOS_P (f)) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5287 return Qnil; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5288 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5289 /* First check some easy-to-check stuff; ttys support none of the |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5290 following attributes, so we can just return nil if any are requested. */ |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5291 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5292 /* stipple */ |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5293 val = attrs[LFACE_STIPPLE_INDEX]; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5294 if (!UNSPECIFIEDP (val) && !NILP (val)) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5295 return Qnil; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5296 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5297 /* font height */ |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5298 val = attrs[LFACE_HEIGHT_INDEX]; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5299 if (!UNSPECIFIEDP (val) && !NILP (val)) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5300 return Qnil; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5301 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5302 /* font width */ |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5303 val = attrs[LFACE_SWIDTH_INDEX]; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5304 if (!UNSPECIFIEDP (val) && !NILP (val) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5305 && face_numeric_swidth (val) != XLFD_SWIDTH_MEDIUM) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5306 return Qnil; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5307 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5308 /* overline */ |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5309 val = attrs[LFACE_OVERLINE_INDEX]; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5310 if (!UNSPECIFIEDP (val) && !NILP (val)) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5311 return Qnil; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5312 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5313 /* strike-through */ |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5314 val = attrs[LFACE_STRIKE_THROUGH_INDEX]; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5315 if (!UNSPECIFIEDP (val) && !NILP (val)) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5316 return Qnil; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5317 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5318 /* boxes */ |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5319 val = attrs[LFACE_BOX_INDEX]; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5320 if (!UNSPECIFIEDP (val) && !NILP (val)) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5321 return Qnil; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5322 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5323 /* slant (italics/oblique); We consider any non-default value |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5324 unsupportable on ttys, even though the face code actually `fakes' |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5325 them using a dim attribute if possible. This is because the faked |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5326 result is too different from what the face specifies. */ |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5327 val = attrs[LFACE_SLANT_INDEX]; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5328 if (!UNSPECIFIEDP (val) && !NILP (val) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5329 && face_numeric_slant (val) != XLFD_SLANT_ROMAN) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5330 return Qnil; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5331 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5332 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5333 /* Test for terminal `capabilities' (non-color character attributes). */ |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5334 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5335 /* font weight (bold/dim) */ |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5336 weight = face_numeric_weight (attrs[LFACE_WEIGHT_INDEX]); |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5337 if (weight >= 0) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5338 { |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5339 if (weight > XLFD_WEIGHT_MEDIUM) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5340 test_caps = TTY_CAP_BOLD; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5341 else if (weight < XLFD_WEIGHT_MEDIUM) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5342 test_caps = TTY_CAP_DIM; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5343 } |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48384
diff
changeset
|
5344 |
|
45718
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5345 /* underlining */ |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5346 val = attrs[LFACE_UNDERLINE_INDEX]; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5347 if (!UNSPECIFIEDP (val) && !NILP (val)) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5348 { |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5349 if (STRINGP (val)) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5350 return Qnil; /* ttys don't support colored underlines */ |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5351 else |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5352 test_caps |= TTY_CAP_UNDERLINE; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5353 } |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5354 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5355 /* inverse video */ |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5356 val = attrs[LFACE_INVERSE_INDEX]; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5357 if (!UNSPECIFIEDP (val) && !NILP (val)) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5358 test_caps |= TTY_CAP_INVERSE; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5359 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5360 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5361 /* Color testing. */ |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5362 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5363 /* Default the color indices in FG_TTY_COLOR and BG_TTY_COLOR, since |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5364 we use them when calling `tty_capable_p' below, even if the face |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5365 specifies no colors. */ |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5366 fg_tty_color.pixel = FACE_TTY_DEFAULT_FG_COLOR; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5367 bg_tty_color.pixel = FACE_TTY_DEFAULT_BG_COLOR; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5368 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5369 /* Check if foreground color is close enough. */ |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5370 fg = attrs[LFACE_FOREGROUND_INDEX]; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5371 if (STRINGP (fg)) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5372 { |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5373 if (! tty_lookup_color (f, fg, &fg_tty_color, &fg_std_color)) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5374 return Qnil; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5375 else if (color_distance (&fg_tty_color, &fg_std_color) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5376 > TTY_SAME_COLOR_THRESHOLD) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5377 return Qnil; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5378 } |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5379 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5380 /* Check if background color is close enough. */ |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5381 bg = attrs[LFACE_BACKGROUND_INDEX]; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5382 if (STRINGP (bg)) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5383 { |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5384 if (! tty_lookup_color (f, bg, &bg_tty_color, &bg_std_color)) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5385 return Qnil; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5386 else if (color_distance (&bg_tty_color, &bg_std_color) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5387 > TTY_SAME_COLOR_THRESHOLD) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5388 return Qnil; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5389 } |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5390 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5391 /* If both foreground and background are requested, see if the |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5392 distance between them is OK. We just check to see if the distance |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5393 between the tty's foreground and background is close enough to the |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5394 distance between the standard foreground and background. */ |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5395 if (STRINGP (fg) && STRINGP (bg)) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5396 { |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5397 int delta_delta |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5398 = (color_distance (&fg_std_color, &bg_std_color) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5399 - color_distance (&fg_tty_color, &bg_tty_color)); |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5400 if (delta_delta > TTY_SAME_COLOR_THRESHOLD |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5401 || delta_delta < -TTY_SAME_COLOR_THRESHOLD) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5402 return Qnil; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5403 } |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5404 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5405 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5406 /* See if the capabilities we selected above are supported, with the |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5407 given colors. */ |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5408 if (test_caps != 0 && |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5409 ! tty_capable_p (f, test_caps, fg_tty_color.pixel, bg_tty_color.pixel)) |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5410 return Qnil; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5411 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5412 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5413 /* Hmmm, everything checks out, this terminal must support this face. */ |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5414 return Qt; |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5415 } |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5416 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5417 |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
5418 |
| 24995 | 5419 /*********************************************************************** |
| 5420 Face Cache | |
| 5421 ***********************************************************************/ | |
| 5422 | |
| 5423 /* Return a new face cache for frame F. */ | |
| 5424 | |
| 5425 static struct face_cache * | |
| 5426 make_face_cache (f) | |
|
8472
0d0b32e78a5b
(compute_glyph_face_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8119
diff
changeset
|
5427 struct frame *f; |
| 24995 | 5428 { |
| 5429 struct face_cache *c; | |
| 5430 int size; | |
| 5431 | |
| 5432 c = (struct face_cache *) xmalloc (sizeof *c); | |
| 5433 bzero (c, sizeof *c); | |
| 5434 size = FACE_CACHE_BUCKETS_SIZE * sizeof *c->buckets; | |
| 5435 c->buckets = (struct face **) xmalloc (size); | |
| 5436 bzero (c->buckets, size); | |
| 5437 c->size = 50; | |
| 5438 c->faces_by_id = (struct face **) xmalloc (c->size * sizeof *c->faces_by_id); | |
| 5439 c->f = f; | |
|
38905
70ef1eb656a6
(menu_face_changed_default): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38818
diff
changeset
|
5440 c->menu_face_changed_p = menu_face_changed_default; |
| 24995 | 5441 return c; |
| 5442 } | |
| 5443 | |
| 5444 | |
| 5445 /* Clear out all graphics contexts for all realized faces, except for | |
| 5446 the basic faces. This should be done from time to time just to avoid | |
| 5447 keeping too many graphics contexts that are no longer needed. */ | |
| 5448 | |
| 5449 static void | |
| 5450 clear_face_gcs (c) | |
| 5451 struct face_cache *c; | |
| 5452 { | |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
5453 if (c && FRAME_WINDOW_P (c->f)) |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
5454 { |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
5455 #ifdef HAVE_WINDOW_SYSTEM |
| 24995 | 5456 int i; |
| 5457 for (i = BASIC_FACE_ID_SENTINEL; i < c->used; ++i) | |
| 5458 { | |
| 5459 struct face *face = c->faces_by_id[i]; | |
| 5460 if (face && face->gc) | |
| 5461 { | |
| 5462 x_free_gc (c->f, face->gc); | |
| 5463 face->gc = 0; | |
| 5464 } | |
| 5465 } | |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
5466 #endif /* HAVE_WINDOW_SYSTEM */ |
| 24995 | 5467 } |
| 5468 } | |
| 5469 | |
| 5470 | |
| 5471 /* Free all realized faces in face cache C, including basic faces. C | |
| 5472 may be null. If faces are freed, make sure the frame's current | |
| 5473 matrix is marked invalid, so that a display caused by an expose | |
| 5474 event doesn't try to use faces we destroyed. */ | |
| 5475 | |
| 5476 static void | |
| 5477 free_realized_faces (c) | |
| 5478 struct face_cache *c; | |
|
8472
0d0b32e78a5b
(compute_glyph_face_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8119
diff
changeset
|
5479 { |
| 24995 | 5480 if (c && c->used) |
| 5481 { | |
| 5482 int i, size; | |
| 5483 struct frame *f = c->f; | |
| 5484 | |
|
29284
d458dee20518
(free_realized_faces): Block/unblock input.
Gerd Moellmann <gerd@gnu.org>
parents:
28753
diff
changeset
|
5485 /* We must block input here because we can't process X events |
|
d458dee20518
(free_realized_faces): Block/unblock input.
Gerd Moellmann <gerd@gnu.org>
parents:
28753
diff
changeset
|
5486 safely while only some faces are freed, or when the frame's |
|
d458dee20518
(free_realized_faces): Block/unblock input.
Gerd Moellmann <gerd@gnu.org>
parents:
28753
diff
changeset
|
5487 current matrix still references freed faces. */ |
|
d458dee20518
(free_realized_faces): Block/unblock input.
Gerd Moellmann <gerd@gnu.org>
parents:
28753
diff
changeset
|
5488 BLOCK_INPUT; |
|
d458dee20518
(free_realized_faces): Block/unblock input.
Gerd Moellmann <gerd@gnu.org>
parents:
28753
diff
changeset
|
5489 |
| 24995 | 5490 for (i = 0; i < c->used; ++i) |
| 5491 { | |
| 5492 free_realized_face (f, c->faces_by_id[i]); | |
| 5493 c->faces_by_id[i] = NULL; | |
| 5494 } | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
5495 |
| 24995 | 5496 c->used = 0; |
| 5497 size = FACE_CACHE_BUCKETS_SIZE * sizeof *c->buckets; | |
| 5498 bzero (c->buckets, size); | |
| 5499 | |
| 5500 /* Must do a thorough redisplay the next time. Mark current | |
| 5501 matrices as invalid because they will reference faces freed | |
| 5502 above. This function is also called when a frame is | |
| 5503 destroyed. In this case, the root window of F is nil. */ | |
| 5504 if (WINDOWP (f->root_window)) | |
| 5505 { | |
| 5506 clear_current_matrices (f); | |
| 5507 ++windows_or_buffers_changed; | |
| 5508 } | |
|
29284
d458dee20518
(free_realized_faces): Block/unblock input.
Gerd Moellmann <gerd@gnu.org>
parents:
28753
diff
changeset
|
5509 |
|
d458dee20518
(free_realized_faces): Block/unblock input.
Gerd Moellmann <gerd@gnu.org>
parents:
28753
diff
changeset
|
5510 UNBLOCK_INPUT; |
| 24995 | 5511 } |
| 5512 } | |
| 5513 | |
| 5514 | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5515 /* Free all faces realized for multibyte characters on frame F that |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5516 has FONTSET. */ |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5517 |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5518 void |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5519 free_realized_multibyte_face (f, fontset) |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5520 struct frame *f; |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5521 int fontset; |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5522 { |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5523 struct face_cache *cache = FRAME_FACE_CACHE (f); |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5524 struct face *face; |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5525 int i; |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5526 |
|
29284
d458dee20518
(free_realized_faces): Block/unblock input.
Gerd Moellmann <gerd@gnu.org>
parents:
28753
diff
changeset
|
5527 /* We must block input here because we can't process X events safely |
|
d458dee20518
(free_realized_faces): Block/unblock input.
Gerd Moellmann <gerd@gnu.org>
parents:
28753
diff
changeset
|
5528 while only some faces are freed, or when the frame's current |
|
d458dee20518
(free_realized_faces): Block/unblock input.
Gerd Moellmann <gerd@gnu.org>
parents:
28753
diff
changeset
|
5529 matrix still references freed faces. */ |
|
d458dee20518
(free_realized_faces): Block/unblock input.
Gerd Moellmann <gerd@gnu.org>
parents:
28753
diff
changeset
|
5530 BLOCK_INPUT; |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
5531 |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5532 for (i = 0; i < cache->used; i++) |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5533 { |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5534 face = cache->faces_by_id[i]; |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5535 if (face |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5536 && face != face->ascii_face |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5537 && face->fontset == fontset) |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5538 { |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5539 uncache_face (cache, face); |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5540 free_realized_face (f, face); |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5541 } |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5542 } |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
5543 |
|
29284
d458dee20518
(free_realized_faces): Block/unblock input.
Gerd Moellmann <gerd@gnu.org>
parents:
28753
diff
changeset
|
5544 /* Must do a thorough redisplay the next time. Mark current |
|
d458dee20518
(free_realized_faces): Block/unblock input.
Gerd Moellmann <gerd@gnu.org>
parents:
28753
diff
changeset
|
5545 matrices as invalid because they will reference faces freed |
|
d458dee20518
(free_realized_faces): Block/unblock input.
Gerd Moellmann <gerd@gnu.org>
parents:
28753
diff
changeset
|
5546 above. This function is also called when a frame is destroyed. |
|
d458dee20518
(free_realized_faces): Block/unblock input.
Gerd Moellmann <gerd@gnu.org>
parents:
28753
diff
changeset
|
5547 In this case, the root window of F is nil. */ |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5548 if (WINDOWP (f->root_window)) |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5549 { |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5550 clear_current_matrices (f); |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5551 ++windows_or_buffers_changed; |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5552 } |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
5553 |
|
29284
d458dee20518
(free_realized_faces): Block/unblock input.
Gerd Moellmann <gerd@gnu.org>
parents:
28753
diff
changeset
|
5554 UNBLOCK_INPUT; |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5555 } |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5556 |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5557 |
| 24995 | 5558 /* Free all realized faces on FRAME or on all frames if FRAME is nil. |
| 5559 This is done after attributes of a named face have been changed, | |
| 5560 because we can't tell which realized faces depend on that face. */ | |
| 5561 | |
| 5562 void | |
| 5563 free_all_realized_faces (frame) | |
| 5564 Lisp_Object frame; | |
| 5565 { | |
| 5566 if (NILP (frame)) | |
|
8472
0d0b32e78a5b
(compute_glyph_face_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8119
diff
changeset
|
5567 { |
| 24995 | 5568 Lisp_Object rest; |
| 5569 FOR_EACH_FRAME (rest, frame) | |
| 5570 free_realized_faces (FRAME_FACE_CACHE (XFRAME (frame))); | |
| 5571 } | |
| 5572 else | |
| 5573 free_realized_faces (FRAME_FACE_CACHE (XFRAME (frame))); | |
| 5574 } | |
| 5575 | |
| 5576 | |
| 5577 /* Free face cache C and faces in it, including their X resources. */ | |
| 5578 | |
| 5579 static void | |
| 5580 free_face_cache (c) | |
| 5581 struct face_cache *c; | |
| 5582 { | |
| 5583 if (c) | |
| 5584 { | |
| 5585 free_realized_faces (c); | |
| 5586 xfree (c->buckets); | |
| 5587 xfree (c->faces_by_id); | |
| 5588 xfree (c); | |
| 5589 } | |
| 5590 } | |
| 5591 | |
| 5592 | |
| 5593 /* Cache realized face FACE in face cache C. HASH is the hash value | |
| 5594 of FACE. If FACE->fontset >= 0, add the new face to the end of the | |
| 5595 collision list of the face hash table of C. This is done because | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5596 otherwise lookup_face would find FACE for every character, even if |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5597 faces with the same attributes but for specific characters exist. */ |
| 24995 | 5598 |
| 5599 static void | |
| 5600 cache_face (c, face, hash) | |
| 5601 struct face_cache *c; | |
| 5602 struct face *face; | |
| 5603 unsigned hash; | |
| 5604 { | |
| 5605 int i = hash % FACE_CACHE_BUCKETS_SIZE; | |
| 5606 | |
| 5607 face->hash = hash; | |
| 5608 | |
| 5609 if (face->fontset >= 0) | |
| 5610 { | |
| 5611 struct face *last = c->buckets[i]; | |
| 5612 if (last) | |
| 5613 { | |
| 5614 while (last->next) | |
| 5615 last = last->next; | |
| 5616 last->next = face; | |
| 5617 face->prev = last; | |
| 5618 face->next = NULL; | |
| 5619 } | |
| 5620 else | |
| 5621 { | |
| 5622 c->buckets[i] = face; | |
| 5623 face->prev = face->next = NULL; | |
| 5624 } | |
| 5625 } | |
| 5626 else | |
| 5627 { | |
| 5628 face->prev = NULL; | |
| 5629 face->next = c->buckets[i]; | |
| 5630 if (face->next) | |
| 5631 face->next->prev = face; | |
| 5632 c->buckets[i] = face; | |
|
8472
0d0b32e78a5b
(compute_glyph_face_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8119
diff
changeset
|
5633 } |
|
0d0b32e78a5b
(compute_glyph_face_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8119
diff
changeset
|
5634 |
| 24995 | 5635 /* Find a free slot in C->faces_by_id and use the index of the free |
| 5636 slot as FACE->id. */ | |
| 5637 for (i = 0; i < c->used; ++i) | |
| 5638 if (c->faces_by_id[i] == NULL) | |
| 5639 break; | |
| 5640 face->id = i; | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
5641 |
| 24995 | 5642 /* Maybe enlarge C->faces_by_id. */ |
|
53334
0432020d46a7
(cache_face): Abort if c->size exceeds MAX_FACE_ID.
Kim F. Storm <storm@cua.dk>
parents:
53274
diff
changeset
|
5643 if (i == c->used) |
|
0432020d46a7
(cache_face): Abort if c->size exceeds MAX_FACE_ID.
Kim F. Storm <storm@cua.dk>
parents:
53274
diff
changeset
|
5644 { |
|
0432020d46a7
(cache_face): Abort if c->size exceeds MAX_FACE_ID.
Kim F. Storm <storm@cua.dk>
parents:
53274
diff
changeset
|
5645 if (c->used == c->size) |
|
0432020d46a7
(cache_face): Abort if c->size exceeds MAX_FACE_ID.
Kim F. Storm <storm@cua.dk>
parents:
53274
diff
changeset
|
5646 { |
|
0432020d46a7
(cache_face): Abort if c->size exceeds MAX_FACE_ID.
Kim F. Storm <storm@cua.dk>
parents:
53274
diff
changeset
|
5647 int new_size, sz; |
|
0432020d46a7
(cache_face): Abort if c->size exceeds MAX_FACE_ID.
Kim F. Storm <storm@cua.dk>
parents:
53274
diff
changeset
|
5648 new_size = min (2 * c->size, MAX_FACE_ID); |
|
0432020d46a7
(cache_face): Abort if c->size exceeds MAX_FACE_ID.
Kim F. Storm <storm@cua.dk>
parents:
53274
diff
changeset
|
5649 if (new_size == c->size) |
|
0432020d46a7
(cache_face): Abort if c->size exceeds MAX_FACE_ID.
Kim F. Storm <storm@cua.dk>
parents:
53274
diff
changeset
|
5650 abort (); /* Alternatives? ++kfs */ |
|
0432020d46a7
(cache_face): Abort if c->size exceeds MAX_FACE_ID.
Kim F. Storm <storm@cua.dk>
parents:
53274
diff
changeset
|
5651 sz = new_size * sizeof *c->faces_by_id; |
|
0432020d46a7
(cache_face): Abort if c->size exceeds MAX_FACE_ID.
Kim F. Storm <storm@cua.dk>
parents:
53274
diff
changeset
|
5652 c->faces_by_id = (struct face **) xrealloc (c->faces_by_id, sz); |
|
0432020d46a7
(cache_face): Abort if c->size exceeds MAX_FACE_ID.
Kim F. Storm <storm@cua.dk>
parents:
53274
diff
changeset
|
5653 c->size = new_size; |
|
0432020d46a7
(cache_face): Abort if c->size exceeds MAX_FACE_ID.
Kim F. Storm <storm@cua.dk>
parents:
53274
diff
changeset
|
5654 } |
|
0432020d46a7
(cache_face): Abort if c->size exceeds MAX_FACE_ID.
Kim F. Storm <storm@cua.dk>
parents:
53274
diff
changeset
|
5655 c->used++; |
| 24995 | 5656 } |
| 5657 | |
| 5658 #if GLYPH_DEBUG | |
| 5659 /* Check that FACE got a unique id. */ | |
| 5660 { | |
| 5661 int j, n; | |
| 5662 struct face *face; | |
| 5663 | |
| 5664 for (j = n = 0; j < FACE_CACHE_BUCKETS_SIZE; ++j) | |
| 5665 for (face = c->buckets[j]; face; face = face->next) | |
| 5666 if (face->id == i) | |
| 5667 ++n; | |
| 5668 | |
| 5669 xassert (n == 1); | |
| 5670 } | |
| 5671 #endif /* GLYPH_DEBUG */ | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
5672 |
| 24995 | 5673 c->faces_by_id[i] = face; |
| 5674 } | |
| 5675 | |
| 5676 | |
| 5677 /* Remove face FACE from cache C. */ | |
| 5678 | |
| 5679 static void | |
| 5680 uncache_face (c, face) | |
| 5681 struct face_cache *c; | |
| 5682 struct face *face; | |
| 5683 { | |
| 5684 int i = face->hash % FACE_CACHE_BUCKETS_SIZE; | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
5685 |
| 24995 | 5686 if (face->prev) |
| 5687 face->prev->next = face->next; | |
| 5688 else | |
| 5689 c->buckets[i] = face->next; | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
5690 |
| 24995 | 5691 if (face->next) |
| 5692 face->next->prev = face->prev; | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
5693 |
| 24995 | 5694 c->faces_by_id[face->id] = NULL; |
| 5695 if (face->id == c->used) | |
| 5696 --c->used; | |
| 5697 } | |
| 5698 | |
| 5699 | |
| 5700 /* Look up a realized face with face attributes ATTR in the face cache | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5701 of frame F. The face will be used to display character C. Value |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5702 is the ID of the face found. If no suitable face is found, realize |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5703 a new one. In that case, if C is a multibyte character, BASE_FACE |
|
28753
582ba7ff96f7
(realize_x_face): Fix the argument of the second
Kenichi Handa <handa@m17n.org>
parents:
28620
diff
changeset
|
5704 is a face that has the same attributes. */ |
| 24995 | 5705 |
| 5706 INLINE int | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5707 lookup_face (f, attr, c, base_face) |
| 24995 | 5708 struct frame *f; |
| 5709 Lisp_Object *attr; | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5710 int c; |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5711 struct face *base_face; |
| 24995 | 5712 { |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5713 struct face_cache *cache = FRAME_FACE_CACHE (f); |
| 24995 | 5714 unsigned hash; |
| 5715 int i; | |
| 5716 struct face *face; | |
| 5717 | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5718 xassert (cache != NULL); |
| 24995 | 5719 check_lface_attrs (attr); |
| 5720 | |
| 5721 /* Look up ATTR in the face cache. */ | |
| 5722 hash = lface_hash (attr); | |
| 5723 i = hash % FACE_CACHE_BUCKETS_SIZE; | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
5724 |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5725 for (face = cache->buckets[i]; face; face = face->next) |
| 24995 | 5726 if (face->hash == hash |
|
25114
be5d3e21fbd7
(load_color): Remove static from definition and remove
Eli Zaretskii <eliz@gnu.org>
parents:
25092
diff
changeset
|
5727 && (!FRAME_WINDOW_P (f) |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5728 || FACE_SUITABLE_FOR_CHAR_P (face, c)) |
| 24995 | 5729 && lface_equal_p (face->lface, attr)) |
| 5730 break; | |
| 5731 | |
| 5732 /* If not found, realize a new face. */ | |
| 5733 if (face == NULL) | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5734 face = realize_face (cache, attr, c, base_face, -1); |
| 24995 | 5735 |
| 5736 #if GLYPH_DEBUG | |
| 5737 xassert (face == FACE_FROM_ID (f, face->id)); | |
| 28409 | 5738 |
| 5739 /* When this function is called from face_for_char (in this case, C is | |
| 5740 a multibyte character), a fontset of a face returned by | |
| 5741 realize_face is not yet set, i.e. FACE_SUITABLE_FOR_CHAR_P (FACE, | |
| 5742 C) is not sutisfied. The fontset is set for this face by | |
| 5743 face_for_char later. */ | |
|
28349
26f2a2e9a2b5
(lookup_face): Don't assert FACE_SUITABLE_FOR_CHAR_P.
Gerd Moellmann <gerd@gnu.org>
parents:
28263
diff
changeset
|
5744 #if 0 |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
5745 if (FRAME_WINDOW_P (f)) |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5746 xassert (FACE_SUITABLE_FOR_CHAR_P (face, c)); |
|
28349
26f2a2e9a2b5
(lookup_face): Don't assert FACE_SUITABLE_FOR_CHAR_P.
Gerd Moellmann <gerd@gnu.org>
parents:
28263
diff
changeset
|
5747 #endif |
| 24995 | 5748 #endif /* GLYPH_DEBUG */ |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
5749 |
| 24995 | 5750 return face->id; |
|
8472
0d0b32e78a5b
(compute_glyph_face_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8119
diff
changeset
|
5751 } |
| 24995 | 5752 |
| 5753 | |
| 5754 /* Return the face id of the realized face for named face SYMBOL on | |
|
33275
8c453c73a11b
(lookup_named_face): If default face isn't realized,
Gerd Moellmann <gerd@gnu.org>
parents:
33082
diff
changeset
|
5755 frame F suitable for displaying character C. Value is -1 if the |
|
8c453c73a11b
(lookup_named_face): If default face isn't realized,
Gerd Moellmann <gerd@gnu.org>
parents:
33082
diff
changeset
|
5756 face couldn't be determined, which might happen if the default face |
|
8c453c73a11b
(lookup_named_face): If default face isn't realized,
Gerd Moellmann <gerd@gnu.org>
parents:
33082
diff
changeset
|
5757 isn't realized and cannot be realized. */ |
| 24995 | 5758 |
| 5759 int | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5760 lookup_named_face (f, symbol, c) |
| 24995 | 5761 struct frame *f; |
| 5762 Lisp_Object symbol; | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5763 int c; |
| 24995 | 5764 { |
| 5765 Lisp_Object attrs[LFACE_VECTOR_SIZE]; | |
| 5766 Lisp_Object symbol_attrs[LFACE_VECTOR_SIZE]; | |
| 5767 struct face *default_face = FACE_FROM_ID (f, DEFAULT_FACE_ID); | |
| 5768 | |
|
33275
8c453c73a11b
(lookup_named_face): If default face isn't realized,
Gerd Moellmann <gerd@gnu.org>
parents:
33082
diff
changeset
|
5769 if (default_face == NULL) |
|
8c453c73a11b
(lookup_named_face): If default face isn't realized,
Gerd Moellmann <gerd@gnu.org>
parents:
33082
diff
changeset
|
5770 { |
|
8c453c73a11b
(lookup_named_face): If default face isn't realized,
Gerd Moellmann <gerd@gnu.org>
parents:
33082
diff
changeset
|
5771 if (!realize_basic_faces (f)) |
|
8c453c73a11b
(lookup_named_face): If default face isn't realized,
Gerd Moellmann <gerd@gnu.org>
parents:
33082
diff
changeset
|
5772 return -1; |
|
8c453c73a11b
(lookup_named_face): If default face isn't realized,
Gerd Moellmann <gerd@gnu.org>
parents:
33082
diff
changeset
|
5773 default_face = FACE_FROM_ID (f, DEFAULT_FACE_ID); |
|
8c453c73a11b
(lookup_named_face): If default face isn't realized,
Gerd Moellmann <gerd@gnu.org>
parents:
33082
diff
changeset
|
5774 } |
|
8c453c73a11b
(lookup_named_face): If default face isn't realized,
Gerd Moellmann <gerd@gnu.org>
parents:
33082
diff
changeset
|
5775 |
| 24995 | 5776 get_lface_attributes (f, symbol, symbol_attrs, 1); |
| 5777 bcopy (default_face->lface, attrs, sizeof attrs); | |
| 31178 | 5778 merge_face_vectors (f, symbol_attrs, attrs, Qnil); |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5779 return lookup_face (f, attrs, c, NULL); |
| 24995 | 5780 } |
| 5781 | |
| 5782 | |
| 5783 /* Return the ID of the realized ASCII face of Lisp face with ID | |
| 5784 LFACE_ID on frame F. Value is -1 if LFACE_ID isn't valid. */ | |
| 5785 | |
| 5786 int | |
| 5787 ascii_face_of_lisp_face (f, lface_id) | |
| 5788 struct frame *f; | |
| 5789 int lface_id; | |
| 5790 { | |
| 5791 int face_id; | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
5792 |
| 24995 | 5793 if (lface_id >= 0 && lface_id < lface_id_to_name_size) |
| 5794 { | |
| 5795 Lisp_Object face_name = lface_id_to_name[lface_id]; | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5796 face_id = lookup_named_face (f, face_name, 0); |
| 24995 | 5797 } |
| 5798 else | |
| 5799 face_id = -1; | |
| 5800 | |
| 5801 return face_id; | |
| 5802 } | |
| 5803 | |
| 5804 | |
| 5805 /* Return a face for charset ASCII that is like the face with id | |
| 5806 FACE_ID on frame F, but has a font that is STEPS steps smaller. | |
| 5807 STEPS < 0 means larger. Value is the id of the face. */ | |
| 5808 | |
| 5809 int | |
| 5810 smaller_face (f, face_id, steps) | |
| 5811 struct frame *f; | |
| 5812 int face_id, steps; | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5813 { |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
5814 #ifdef HAVE_WINDOW_SYSTEM |
| 24995 | 5815 struct face *face; |
| 5816 Lisp_Object attrs[LFACE_VECTOR_SIZE]; | |
| 5817 int pt, last_pt, last_height; | |
| 5818 int delta; | |
| 5819 int new_face_id; | |
| 5820 struct face *new_face; | |
| 5821 | |
| 5822 /* If not called for an X frame, just return the original face. */ | |
| 5823 if (FRAME_TERMCAP_P (f)) | |
| 5824 return face_id; | |
| 5825 | |
| 5826 /* Try in increments of 1/2 pt. */ | |
| 5827 delta = steps < 0 ? 5 : -5; | |
| 5828 steps = abs (steps); | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
5829 |
| 24995 | 5830 face = FACE_FROM_ID (f, face_id); |
| 5831 bcopy (face->lface, attrs, sizeof attrs); | |
| 5832 pt = last_pt = XFASTINT (attrs[LFACE_HEIGHT_INDEX]); | |
| 5833 new_face_id = face_id; | |
| 5834 last_height = FONT_HEIGHT (face->font); | |
| 5835 | |
| 5836 while (steps | |
| 5837 && pt + delta > 0 | |
| 5838 /* Give up if we cannot find a font within 10pt. */ | |
| 5839 && abs (last_pt - pt) < 100) | |
| 5840 { | |
| 5841 /* Look up a face for a slightly smaller/larger font. */ | |
| 5842 pt += delta; | |
| 5843 attrs[LFACE_HEIGHT_INDEX] = make_number (pt); | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5844 new_face_id = lookup_face (f, attrs, 0, NULL); |
| 24995 | 5845 new_face = FACE_FROM_ID (f, new_face_id); |
| 5846 | |
| 5847 /* If height changes, count that as one step. */ | |
|
31463
628bb2264f46
(smaller_face): Compare font heights with `<' and `>'
Gerd Moellmann <gerd@gnu.org>
parents:
31449
diff
changeset
|
5848 if ((delta < 0 && FONT_HEIGHT (new_face->font) < last_height) |
|
628bb2264f46
(smaller_face): Compare font heights with `<' and `>'
Gerd Moellmann <gerd@gnu.org>
parents:
31449
diff
changeset
|
5849 || (delta > 0 && FONT_HEIGHT (new_face->font) > last_height)) |
| 24995 | 5850 { |
| 5851 --steps; | |
| 5852 last_height = FONT_HEIGHT (new_face->font); | |
| 5853 last_pt = pt; | |
| 5854 } | |
| 5855 } | |
| 5856 | |
| 5857 return new_face_id; | |
| 5858 | |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
5859 #else /* not HAVE_WINDOW_SYSTEM */ |
| 24995 | 5860 |
| 5861 return face_id; | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
5862 |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
5863 #endif /* not HAVE_WINDOW_SYSTEM */ |
| 24995 | 5864 } |
| 5865 | |
| 5866 | |
| 5867 /* Return a face for charset ASCII that is like the face with id | |
| 5868 FACE_ID on frame F, but has height HEIGHT. */ | |
|
2795
e97e96fb0cb8
(compute_char_face): New args REGION_BEG, REGION_END.
Richard M. Stallman <rms@gnu.org>
parents:
2784
diff
changeset
|
5869 |
|
2730
139740855fa6
* xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents:
2538
diff
changeset
|
5870 int |
| 24995 | 5871 face_with_height (f, face_id, height) |
| 5872 struct frame *f; | |
| 5873 int face_id; | |
| 5874 int height; | |
| 5875 { | |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
5876 #ifdef HAVE_WINDOW_SYSTEM |
| 24995 | 5877 struct face *face; |
| 5878 Lisp_Object attrs[LFACE_VECTOR_SIZE]; | |
| 5879 | |
| 5880 if (FRAME_TERMCAP_P (f) | |
| 5881 || height <= 0) | |
| 5882 return face_id; | |
| 5883 | |
| 5884 face = FACE_FROM_ID (f, face_id); | |
| 5885 bcopy (face->lface, attrs, sizeof attrs); | |
| 5886 attrs[LFACE_HEIGHT_INDEX] = make_number (height); | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5887 face_id = lookup_face (f, attrs, 0, NULL); |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
5888 #endif /* HAVE_WINDOW_SYSTEM */ |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
5889 |
| 24995 | 5890 return face_id; |
| 5891 } | |
| 5892 | |
|
33275
8c453c73a11b
(lookup_named_face): If default face isn't realized,
Gerd Moellmann <gerd@gnu.org>
parents:
33082
diff
changeset
|
5893 |
|
25114
be5d3e21fbd7
(load_color): Remove static from definition and remove
Eli Zaretskii <eliz@gnu.org>
parents:
25092
diff
changeset
|
5894 /* Return the face id of the realized face for named face SYMBOL on |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5895 frame F suitable for displaying character C, and use attributes of |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5896 the face FACE_ID for attributes that aren't completely specified by |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5897 SYMBOL. This is like lookup_named_face, except that the default |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5898 attributes come from FACE_ID, not from the default face. FACE_ID |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5899 is assumed to be already realized. */ |
|
25114
be5d3e21fbd7
(load_color): Remove static from definition and remove
Eli Zaretskii <eliz@gnu.org>
parents:
25092
diff
changeset
|
5900 |
|
be5d3e21fbd7
(load_color): Remove static from definition and remove
Eli Zaretskii <eliz@gnu.org>
parents:
25092
diff
changeset
|
5901 int |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5902 lookup_derived_face (f, symbol, c, face_id) |
|
25114
be5d3e21fbd7
(load_color): Remove static from definition and remove
Eli Zaretskii <eliz@gnu.org>
parents:
25092
diff
changeset
|
5903 struct frame *f; |
|
be5d3e21fbd7
(load_color): Remove static from definition and remove
Eli Zaretskii <eliz@gnu.org>
parents:
25092
diff
changeset
|
5904 Lisp_Object symbol; |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5905 int c; |
|
25114
be5d3e21fbd7
(load_color): Remove static from definition and remove
Eli Zaretskii <eliz@gnu.org>
parents:
25092
diff
changeset
|
5906 int face_id; |
|
be5d3e21fbd7
(load_color): Remove static from definition and remove
Eli Zaretskii <eliz@gnu.org>
parents:
25092
diff
changeset
|
5907 { |
|
be5d3e21fbd7
(load_color): Remove static from definition and remove
Eli Zaretskii <eliz@gnu.org>
parents:
25092
diff
changeset
|
5908 Lisp_Object attrs[LFACE_VECTOR_SIZE]; |
|
be5d3e21fbd7
(load_color): Remove static from definition and remove
Eli Zaretskii <eliz@gnu.org>
parents:
25092
diff
changeset
|
5909 Lisp_Object symbol_attrs[LFACE_VECTOR_SIZE]; |
|
be5d3e21fbd7
(load_color): Remove static from definition and remove
Eli Zaretskii <eliz@gnu.org>
parents:
25092
diff
changeset
|
5910 struct face *default_face = FACE_FROM_ID (f, face_id); |
|
be5d3e21fbd7
(load_color): Remove static from definition and remove
Eli Zaretskii <eliz@gnu.org>
parents:
25092
diff
changeset
|
5911 |
|
be5d3e21fbd7
(load_color): Remove static from definition and remove
Eli Zaretskii <eliz@gnu.org>
parents:
25092
diff
changeset
|
5912 if (!default_face) |
|
be5d3e21fbd7
(load_color): Remove static from definition and remove
Eli Zaretskii <eliz@gnu.org>
parents:
25092
diff
changeset
|
5913 abort (); |
|
be5d3e21fbd7
(load_color): Remove static from definition and remove
Eli Zaretskii <eliz@gnu.org>
parents:
25092
diff
changeset
|
5914 |
|
be5d3e21fbd7
(load_color): Remove static from definition and remove
Eli Zaretskii <eliz@gnu.org>
parents:
25092
diff
changeset
|
5915 get_lface_attributes (f, symbol, symbol_attrs, 1); |
|
be5d3e21fbd7
(load_color): Remove static from definition and remove
Eli Zaretskii <eliz@gnu.org>
parents:
25092
diff
changeset
|
5916 bcopy (default_face->lface, attrs, sizeof attrs); |
| 31178 | 5917 merge_face_vectors (f, symbol_attrs, attrs, Qnil); |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
5918 return lookup_face (f, attrs, c, default_face); |
|
25114
be5d3e21fbd7
(load_color): Remove static from definition and remove
Eli Zaretskii <eliz@gnu.org>
parents:
25092
diff
changeset
|
5919 } |
|
be5d3e21fbd7
(load_color): Remove static from definition and remove
Eli Zaretskii <eliz@gnu.org>
parents:
25092
diff
changeset
|
5920 |
|
40278
6ee20fddfbc5
(Fface_attributes_as_vector): New function.
Richard M. Stallman <rms@gnu.org>
parents:
40226
diff
changeset
|
5921 DEFUN ("face-attributes-as-vector", Fface_attributes_as_vector, |
|
6ee20fddfbc5
(Fface_attributes_as_vector): New function.
Richard M. Stallman <rms@gnu.org>
parents:
40226
diff
changeset
|
5922 Sface_attributes_as_vector, 1, 1, 0, |
|
41010
edd3b39a7cd1
(Fface_attributes_as_vector): Doc fix.
Pavel Jan?k <Pavel@Janik.cz>
parents:
40991
diff
changeset
|
5923 doc: /* Return a vector of face attributes corresponding to PLIST. */) |
|
40278
6ee20fddfbc5
(Fface_attributes_as_vector): New function.
Richard M. Stallman <rms@gnu.org>
parents:
40226
diff
changeset
|
5924 (plist) |
|
6ee20fddfbc5
(Fface_attributes_as_vector): New function.
Richard M. Stallman <rms@gnu.org>
parents:
40226
diff
changeset
|
5925 Lisp_Object plist; |
|
6ee20fddfbc5
(Fface_attributes_as_vector): New function.
Richard M. Stallman <rms@gnu.org>
parents:
40226
diff
changeset
|
5926 { |
|
6ee20fddfbc5
(Fface_attributes_as_vector): New function.
Richard M. Stallman <rms@gnu.org>
parents:
40226
diff
changeset
|
5927 Lisp_Object lface; |
|
6ee20fddfbc5
(Fface_attributes_as_vector): New function.
Richard M. Stallman <rms@gnu.org>
parents:
40226
diff
changeset
|
5928 lface = Fmake_vector (make_number (LFACE_VECTOR_SIZE), |
|
6ee20fddfbc5
(Fface_attributes_as_vector): New function.
Richard M. Stallman <rms@gnu.org>
parents:
40226
diff
changeset
|
5929 Qunspecified); |
|
6ee20fddfbc5
(Fface_attributes_as_vector): New function.
Richard M. Stallman <rms@gnu.org>
parents:
40226
diff
changeset
|
5930 merge_face_vector_with_property (XFRAME (selected_frame), |
|
6ee20fddfbc5
(Fface_attributes_as_vector): New function.
Richard M. Stallman <rms@gnu.org>
parents:
40226
diff
changeset
|
5931 XVECTOR (lface)->contents, |
|
6ee20fddfbc5
(Fface_attributes_as_vector): New function.
Richard M. Stallman <rms@gnu.org>
parents:
40226
diff
changeset
|
5932 plist); |
|
6ee20fddfbc5
(Fface_attributes_as_vector): New function.
Richard M. Stallman <rms@gnu.org>
parents:
40226
diff
changeset
|
5933 return lface; |
|
6ee20fddfbc5
(Fface_attributes_as_vector): New function.
Richard M. Stallman <rms@gnu.org>
parents:
40226
diff
changeset
|
5934 } |
|
6ee20fddfbc5
(Fface_attributes_as_vector): New function.
Richard M. Stallman <rms@gnu.org>
parents:
40226
diff
changeset
|
5935 |
| 24995 | 5936 |
| 5937 | |
| 5938 /*********************************************************************** | |
| 5939 Font selection | |
| 5940 ***********************************************************************/ | |
| 5941 | |
| 5942 DEFUN ("internal-set-font-selection-order", | |
| 5943 Finternal_set_font_selection_order, | |
| 5944 Sinternal_set_font_selection_order, 1, 1, 0, | |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
5945 doc: /* Set font selection order for face font selection to ORDER. |
|
39914
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
5946 ORDER must be a list of length 4 containing the symbols `:width', |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
5947 `:height', `:weight', and `:slant'. Face attributes appearing |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
5948 first in ORDER are matched first, e.g. if `:height' appears before |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
5949 `:weight' in ORDER, font selection first tries to find a font with |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
5950 a suitable height, and then tries to match the font weight. |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
5951 Value is ORDER. */) |
|
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
5952 (order) |
|
39914
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
5953 Lisp_Object order; |
| 24995 | 5954 { |
| 5955 Lisp_Object list; | |
| 5956 int i; | |
|
35913
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
5957 int indices[DIM (font_sort_order)]; |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
5958 |
|
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40603
diff
changeset
|
5959 CHECK_LIST (order); |
| 24995 | 5960 bzero (indices, sizeof indices); |
| 5961 i = 0; | |
| 5962 | |
| 5963 for (list = order; | |
| 5964 CONSP (list) && i < DIM (indices); | |
| 5965 list = XCDR (list), ++i) | |
| 5966 { | |
| 5967 Lisp_Object attr = XCAR (list); | |
| 5968 int xlfd; | |
| 5969 | |
| 5970 if (EQ (attr, QCwidth)) | |
| 5971 xlfd = XLFD_SWIDTH; | |
| 5972 else if (EQ (attr, QCheight)) | |
| 5973 xlfd = XLFD_POINT_SIZE; | |
| 5974 else if (EQ (attr, QCweight)) | |
| 5975 xlfd = XLFD_WEIGHT; | |
| 5976 else if (EQ (attr, QCslant)) | |
| 5977 xlfd = XLFD_SLANT; | |
| 5978 else | |
| 5979 break; | |
| 5980 | |
| 5981 if (indices[i] != 0) | |
| 5982 break; | |
| 5983 indices[i] = xlfd; | |
| 5984 } | |
| 5985 | |
|
35913
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
5986 if (!NILP (list) || i != DIM (indices)) |
| 24995 | 5987 signal_error ("Invalid font sort order", order); |
|
35913
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
5988 for (i = 0; i < DIM (font_sort_order); ++i) |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
5989 if (indices[i] == 0) |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
5990 signal_error ("Invalid font sort order", order); |
| 24995 | 5991 |
| 5992 if (bcmp (indices, font_sort_order, sizeof indices) != 0) | |
| 5993 { | |
| 5994 bcopy (indices, font_sort_order, sizeof font_sort_order); | |
| 5995 free_all_realized_faces (Qnil); | |
| 5996 } | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
5997 |
| 24995 | 5998 return Qnil; |
| 5999 } | |
| 6000 | |
| 6001 | |
| 6002 DEFUN ("internal-set-alternative-font-family-alist", | |
| 6003 Finternal_set_alternative_font_family_alist, | |
| 6004 Sinternal_set_alternative_font_family_alist, 1, 1, 0, | |
|
40991
566c75efb733
(Finternal_set_alternative_font_family_alist): Reindent.
Pavel Jan?k <Pavel@Janik.cz>
parents:
40838
diff
changeset
|
6005 doc: /* Define alternative font families to try in face font selection. |
|
39914
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
6006 ALIST is an alist of (FAMILY ALTERNATIVE1 ALTERNATIVE2 ...) entries. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
6007 Each ALTERNATIVE is tried in order if no fonts of font family FAMILY can |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
6008 be found. Value is ALIST. */) |
|
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
6009 (alist) |
| 24995 | 6010 Lisp_Object alist; |
| 6011 { | |
|
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40603
diff
changeset
|
6012 CHECK_LIST (alist); |
| 24995 | 6013 Vface_alternative_font_family_alist = alist; |
| 6014 free_all_realized_faces (Qnil); | |
| 6015 return alist; | |
| 6016 } | |
| 6017 | |
| 6018 | |
|
33372
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
6019 DEFUN ("internal-set-alternative-font-registry-alist", |
|
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
6020 Finternal_set_alternative_font_registry_alist, |
|
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
6021 Sinternal_set_alternative_font_registry_alist, 1, 1, 0, |
|
40598
7f3db64c7d42
(Finternal_merge_in_global_face): Reindent.
Pavel Jan?k <Pavel@Janik.cz>
parents:
40555
diff
changeset
|
6022 doc: /* Define alternative font registries to try in face font selection. |
|
39914
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
6023 ALIST is an alist of (REGISTRY ALTERNATIVE1 ALTERNATIVE2 ...) entries. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
6024 Each ALTERNATIVE is tried in order if no fonts of font registry REGISTRY can |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
6025 be found. Value is ALIST. */) |
|
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
6026 (alist) |
|
33372
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
6027 Lisp_Object alist; |
|
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
6028 { |
|
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40603
diff
changeset
|
6029 CHECK_LIST (alist); |
|
33372
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
6030 Vface_alternative_font_registry_alist = alist; |
|
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
6031 free_all_realized_faces (Qnil); |
|
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
6032 return alist; |
|
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
6033 } |
|
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
6034 |
|
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
6035 |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
6036 #ifdef HAVE_WINDOW_SYSTEM |
| 24995 | 6037 |
| 6038 /* Value is non-zero if FONT is the name of a scalable font. The | |
| 6039 X11R6 XLFD spec says that point size, pixel size, and average width | |
| 6040 are zero for scalable fonts. Intlfonts contain at least one | |
| 6041 scalable font ("*-muleindian-1") for which this isn't true, so we | |
| 6042 just test average width. */ | |
| 6043 | |
| 6044 static int | |
| 6045 font_scalable_p (font) | |
| 6046 struct font_name *font; | |
| 6047 { | |
| 6048 char *s = font->fields[XLFD_AVGWIDTH]; | |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
6049 return (*s == '0' && *(s + 1) == '\0') |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
6050 #ifdef WINDOWSNT |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
6051 /* Windows implementation of XLFD is slightly broken for backward |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
6052 compatibility with previous broken versions, so test for |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
6053 wildcards as well as 0. */ |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
6054 || *s == '*' |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
6055 #endif |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
6056 ; |
| 24995 | 6057 } |
| 6058 | |
| 6059 | |
|
34160
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
6060 /* Ignore the difference of font point size less than this value. */ |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
6061 |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
6062 #define FONT_POINT_SIZE_QUANTUM 5 |
|
bb9ec0151423
(struct font_name): New member registry_priority.
Kenichi Handa <handa@m17n.org>
parents:
33853
diff
changeset
|
6063 |
| 24995 | 6064 /* Value is non-zero if FONT1 is a better match for font attributes |
| 6065 VALUES than FONT2. VALUES is an array of face attribute values in | |
| 6066 font sort order. COMPARE_PT_P zero means don't compare point | |
|
35913
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
6067 sizes. AVGWIDTH, if not zero, is a specified font average width |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
6068 to compare with. */ |
| 24995 | 6069 |
| 6070 static int | |
|
35913
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
6071 better_font_p (values, font1, font2, compare_pt_p, avgwidth) |
| 24995 | 6072 int *values; |
| 6073 struct font_name *font1, *font2; | |
|
35913
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
6074 int compare_pt_p, avgwidth; |
| 24995 | 6075 { |
| 6076 int i; | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
6077 |
|
35913
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
6078 for (i = 0; i < DIM (font_sort_order); ++i) |
| 24995 | 6079 { |
| 6080 int xlfd_idx = font_sort_order[i]; | |
| 6081 | |
| 6082 if (compare_pt_p || xlfd_idx != XLFD_POINT_SIZE) | |
| 6083 { | |
|
50515
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
6084 int delta1, delta2; |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
6085 |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
6086 if (xlfd_idx == XLFD_POINT_SIZE) |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
6087 { |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
6088 delta1 = abs (values[i] - (font1->numeric[xlfd_idx] |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
6089 / font1->rescale_ratio)); |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
6090 delta2 = abs (values[i] - (font2->numeric[xlfd_idx] |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
6091 / font2->rescale_ratio)); |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
6092 if (abs (delta1 - delta2) < FONT_POINT_SIZE_QUANTUM) |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
6093 continue; |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
6094 } |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
6095 else |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
6096 { |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
6097 delta1 = abs (values[i] - font1->numeric[xlfd_idx]); |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
6098 delta2 = abs (values[i] - font2->numeric[xlfd_idx]); |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
6099 } |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
6100 |
| 24995 | 6101 if (delta1 > delta2) |
| 6102 return 0; | |
| 6103 else if (delta1 < delta2) | |
| 6104 return 1; | |
| 6105 else | |
| 6106 { | |
| 6107 /* The difference may be equal because, e.g., the face | |
| 6108 specifies `italic' but we have only `regular' and | |
| 6109 `oblique'. Prefer `oblique' in this case. */ | |
| 6110 if ((xlfd_idx == XLFD_WEIGHT || xlfd_idx == XLFD_SLANT) | |
| 6111 && font1->numeric[xlfd_idx] > values[i] | |
| 6112 && font2->numeric[xlfd_idx] < values[i]) | |
| 6113 return 1; | |
| 6114 } | |
| 6115 } | |
| 6116 } | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
6117 |
|
35913
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
6118 if (avgwidth) |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
6119 { |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
6120 int delta1 = abs (avgwidth - font1->numeric[XLFD_AVGWIDTH]); |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
6121 int delta2 = abs (avgwidth - font2->numeric[XLFD_AVGWIDTH]); |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
6122 if (delta1 > delta2) |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
6123 return 0; |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
6124 else if (delta1 < delta2) |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
6125 return 1; |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
6126 } |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
6127 |
|
52200
b154b2a09262
* xfaces.c (better_font_p): Prefer a real scalable font; i.e. not
Kenichi Handa <handa@m17n.org>
parents:
51665
diff
changeset
|
6128 if (! compare_pt_p) |
|
b154b2a09262
* xfaces.c (better_font_p): Prefer a real scalable font; i.e. not
Kenichi Handa <handa@m17n.org>
parents:
51665
diff
changeset
|
6129 { |
|
b154b2a09262
* xfaces.c (better_font_p): Prefer a real scalable font; i.e. not
Kenichi Handa <handa@m17n.org>
parents:
51665
diff
changeset
|
6130 /* We prefer a real scalable font; i.e. not what autoscaled. */ |
|
b154b2a09262
* xfaces.c (better_font_p): Prefer a real scalable font; i.e. not
Kenichi Handa <handa@m17n.org>
parents:
51665
diff
changeset
|
6131 int auto_scaled_1 = (font1->numeric[XLFD_POINT_SIZE] == 0 |
|
b154b2a09262
* xfaces.c (better_font_p): Prefer a real scalable font; i.e. not
Kenichi Handa <handa@m17n.org>
parents:
51665
diff
changeset
|
6132 && font1->numeric[XLFD_RESY] > 0); |
|
b154b2a09262
* xfaces.c (better_font_p): Prefer a real scalable font; i.e. not
Kenichi Handa <handa@m17n.org>
parents:
51665
diff
changeset
|
6133 int auto_scaled_2 = (font2->numeric[XLFD_POINT_SIZE] == 0 |
|
b154b2a09262
* xfaces.c (better_font_p): Prefer a real scalable font; i.e. not
Kenichi Handa <handa@m17n.org>
parents:
51665
diff
changeset
|
6134 && font2->numeric[XLFD_RESY] > 0); |
|
b154b2a09262
* xfaces.c (better_font_p): Prefer a real scalable font; i.e. not
Kenichi Handa <handa@m17n.org>
parents:
51665
diff
changeset
|
6135 |
|
b154b2a09262
* xfaces.c (better_font_p): Prefer a real scalable font; i.e. not
Kenichi Handa <handa@m17n.org>
parents:
51665
diff
changeset
|
6136 if (auto_scaled_1 != auto_scaled_2) |
|
b154b2a09262
* xfaces.c (better_font_p): Prefer a real scalable font; i.e. not
Kenichi Handa <handa@m17n.org>
parents:
51665
diff
changeset
|
6137 return auto_scaled_2; |
|
b154b2a09262
* xfaces.c (better_font_p): Prefer a real scalable font; i.e. not
Kenichi Handa <handa@m17n.org>
parents:
51665
diff
changeset
|
6138 } |
|
b154b2a09262
* xfaces.c (better_font_p): Prefer a real scalable font; i.e. not
Kenichi Handa <handa@m17n.org>
parents:
51665
diff
changeset
|
6139 |
|
35913
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
6140 return font1->registry_priority < font2->registry_priority; |
| 24995 | 6141 } |
| 6142 | |
| 6143 | |
| 6144 /* Value is non-zero if FONT is an exact match for face attributes in | |
| 6145 SPECIFIED. SPECIFIED is an array of face attribute values in font | |
|
35913
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
6146 sort order. AVGWIDTH, if non-zero, is an average width to compare |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
6147 with. */ |
| 24995 | 6148 |
| 6149 static int | |
|
35913
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
6150 exact_face_match_p (specified, font, avgwidth) |
| 24995 | 6151 int *specified; |
| 6152 struct font_name *font; | |
|
35913
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
6153 int avgwidth; |
| 24995 | 6154 { |
| 6155 int i; | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
6156 |
|
35913
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
6157 for (i = 0; i < DIM (font_sort_order); ++i) |
| 24995 | 6158 if (specified[i] != font->numeric[font_sort_order[i]]) |
| 6159 break; | |
| 6160 | |
|
35913
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
6161 return (i == DIM (font_sort_order) |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
6162 && (avgwidth <= 0 |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
6163 || avgwidth == font->numeric[XLFD_AVGWIDTH])); |
| 24995 | 6164 } |
| 6165 | |
| 6166 | |
| 6167 /* Value is the name of a scaled font, generated from scalable font | |
| 6168 FONT on frame F. SPECIFIED_PT is the point-size to scale FONT to. | |
| 6169 Value is allocated from heap. */ | |
| 6170 | |
| 6171 static char * | |
| 6172 build_scalable_font_name (f, font, specified_pt) | |
| 6173 struct frame *f; | |
| 6174 struct font_name *font; | |
| 6175 int specified_pt; | |
| 6176 { | |
|
51237
ed40623b1ca6
(build_scalable_font_name): Remove `unused var pixel_size' warning.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51210
diff
changeset
|
6177 char pixel_size[20]; |
| 24995 | 6178 int pixel_value; |
| 6179 double resy = FRAME_X_DISPLAY_INFO (f)->resy; | |
| 6180 double pt; | |
| 6181 | |
| 6182 /* If scalable font is for a specific resolution, compute | |
| 6183 the point size we must specify from the resolution of | |
| 6184 the display and the specified resolution of the font. */ | |
| 6185 if (font->numeric[XLFD_RESY] != 0) | |
| 6186 { | |
| 6187 pt = resy / font->numeric[XLFD_RESY] * specified_pt + 0.5; | |
| 34882 | 6188 pixel_value = font->numeric[XLFD_RESY] / (PT_PER_INCH * 10.0) * pt; |
| 24995 | 6189 } |
| 6190 else | |
| 6191 { | |
| 6192 pt = specified_pt; | |
| 34882 | 6193 pixel_value = resy / (PT_PER_INCH * 10.0) * pt; |
| 24995 | 6194 } |
|
50515
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
6195 /* We may need a font of the different size. */ |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
6196 pixel_value *= font->rescale_ratio; |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
6197 |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
6198 /* We should keep POINT_SIZE 0. Otherwise, X server can't open a |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
6199 font of the specified PIXEL_SIZE. */ |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
6200 #if 0 |
|
51237
ed40623b1ca6
(build_scalable_font_name): Remove `unused var pixel_size' warning.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51210
diff
changeset
|
6201 { /* Set point size of the font. */ |
|
ed40623b1ca6
(build_scalable_font_name): Remove `unused var pixel_size' warning.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51210
diff
changeset
|
6202 char point_size[20]; |
|
ed40623b1ca6
(build_scalable_font_name): Remove `unused var pixel_size' warning.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51210
diff
changeset
|
6203 sprintf (point_size, "%d", (int) pt); |
|
ed40623b1ca6
(build_scalable_font_name): Remove `unused var pixel_size' warning.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51210
diff
changeset
|
6204 font->fields[XLFD_POINT_SIZE] = point_size; |
|
ed40623b1ca6
(build_scalable_font_name): Remove `unused var pixel_size' warning.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51210
diff
changeset
|
6205 font->numeric[XLFD_POINT_SIZE] = pt; |
|
ed40623b1ca6
(build_scalable_font_name): Remove `unused var pixel_size' warning.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51210
diff
changeset
|
6206 } |
|
50515
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
6207 #endif |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
6208 |
| 24995 | 6209 /* Set pixel size. */ |
| 6210 sprintf (pixel_size, "%d", pixel_value); | |
| 6211 font->fields[XLFD_PIXEL_SIZE] = pixel_size; | |
| 6212 font->numeric[XLFD_PIXEL_SIZE] = pixel_value; | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
6213 |
| 24995 | 6214 /* If font doesn't specify its resolution, use the |
| 6215 resolution of the display. */ | |
| 6216 if (font->numeric[XLFD_RESY] == 0) | |
| 6217 { | |
| 6218 char buffer[20]; | |
| 6219 sprintf (buffer, "%d", (int) resy); | |
| 6220 font->fields[XLFD_RESY] = buffer; | |
| 6221 font->numeric[XLFD_RESY] = resy; | |
| 6222 } | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
6223 |
| 24995 | 6224 if (strcmp (font->fields[XLFD_RESX], "0") == 0) |
| 6225 { | |
| 6226 char buffer[20]; | |
| 6227 int resx = FRAME_X_DISPLAY_INFO (f)->resx; | |
| 6228 sprintf (buffer, "%d", resx); | |
| 6229 font->fields[XLFD_RESX] = buffer; | |
| 6230 font->numeric[XLFD_RESX] = resx; | |
| 6231 } | |
| 6232 | |
| 6233 return build_font_name (font); | |
| 6234 } | |
| 6235 | |
| 6236 | |
| 6237 /* Value is non-zero if we are allowed to use scalable font FONT. We | |
| 6238 can't run a Lisp function here since this function may be called | |
| 6239 with input blocked. */ | |
| 6240 | |
| 6241 static int | |
|
37186
e47810283f6b
(best_matching_font): Remove unused parameter PATTERN.
Gerd Moellmann <gerd@gnu.org>
parents:
37036
diff
changeset
|
6242 may_use_scalable_font_p (font) |
|
46556
71e205b50a3e
(may_use_scalable_font_p): Argument now points to
Ken Raeburn <raeburn@raeburn.org>
parents:
46478
diff
changeset
|
6243 const char *font; |
| 24995 | 6244 { |
| 6245 if (EQ (Vscalable_fonts_allowed, Qt)) | |
| 6246 return 1; | |
| 6247 else if (CONSP (Vscalable_fonts_allowed)) | |
| 6248 { | |
| 6249 Lisp_Object tail, regexp; | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
6250 |
| 24995 | 6251 for (tail = Vscalable_fonts_allowed; CONSP (tail); tail = XCDR (tail)) |
| 6252 { | |
| 6253 regexp = XCAR (tail); | |
| 6254 if (STRINGP (regexp) | |
|
37186
e47810283f6b
(best_matching_font): Remove unused parameter PATTERN.
Gerd Moellmann <gerd@gnu.org>
parents:
37036
diff
changeset
|
6255 && fast_c_string_match_ignore_case (regexp, font) >= 0) |
| 24995 | 6256 return 1; |
| 6257 } | |
| 6258 } | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
6259 |
| 24995 | 6260 return 0; |
| 6261 } | |
| 6262 | |
| 6263 | |
| 6264 | |
|
36066
ea51e9f7266e
(best_matching_font): New parameter width_ratio.
Gerd Moellmann <gerd@gnu.org>
parents:
36006
diff
changeset
|
6265 /* Return the name of the best matching font for face attributes ATTRS |
|
ea51e9f7266e
(best_matching_font): New parameter width_ratio.
Gerd Moellmann <gerd@gnu.org>
parents:
36006
diff
changeset
|
6266 in the array of font_name structures FONTS which contains NFONTS |
|
ea51e9f7266e
(best_matching_font): New parameter width_ratio.
Gerd Moellmann <gerd@gnu.org>
parents:
36006
diff
changeset
|
6267 elements. WIDTH_RATIO is a factor with which to multiply average |
|
ea51e9f7266e
(best_matching_font): New parameter width_ratio.
Gerd Moellmann <gerd@gnu.org>
parents:
36006
diff
changeset
|
6268 widths if ATTRS specifies such a width. |
|
ea51e9f7266e
(best_matching_font): New parameter width_ratio.
Gerd Moellmann <gerd@gnu.org>
parents:
36006
diff
changeset
|
6269 |
|
ea51e9f7266e
(best_matching_font): New parameter width_ratio.
Gerd Moellmann <gerd@gnu.org>
parents:
36006
diff
changeset
|
6270 Value is a font name which is allocated from the heap. FONTS is |
|
48384
acfaa904eb56
(load_face_font): Set `face->overstrike' based on result from
Miles Bader <miles@gnu.org>
parents:
47983
diff
changeset
|
6271 freed by this function. |
|
acfaa904eb56
(load_face_font): Set `face->overstrike' based on result from
Miles Bader <miles@gnu.org>
parents:
47983
diff
changeset
|
6272 |
|
acfaa904eb56
(load_face_font): Set `face->overstrike' based on result from
Miles Bader <miles@gnu.org>
parents:
47983
diff
changeset
|
6273 If NEEDS_OVERSTRIKE is non-zero, a boolean is returned in it to |
|
acfaa904eb56
(load_face_font): Set `face->overstrike' based on result from
Miles Bader <miles@gnu.org>
parents:
47983
diff
changeset
|
6274 indicate whether the resulting font should be drawn using overstrike |
|
acfaa904eb56
(load_face_font): Set `face->overstrike' based on result from
Miles Bader <miles@gnu.org>
parents:
47983
diff
changeset
|
6275 to simulate bold-face. */ |
| 24995 | 6276 |
| 6277 static char * | |
|
48384
acfaa904eb56
(load_face_font): Set `face->overstrike' based on result from
Miles Bader <miles@gnu.org>
parents:
47983
diff
changeset
|
6278 best_matching_font (f, attrs, fonts, nfonts, width_ratio, needs_overstrike) |
| 24995 | 6279 struct frame *f; |
| 6280 Lisp_Object *attrs; | |
| 6281 struct font_name *fonts; | |
| 6282 int nfonts; | |
|
36066
ea51e9f7266e
(best_matching_font): New parameter width_ratio.
Gerd Moellmann <gerd@gnu.org>
parents:
36006
diff
changeset
|
6283 int width_ratio; |
|
48384
acfaa904eb56
(load_face_font): Set `face->overstrike' based on result from
Miles Bader <miles@gnu.org>
parents:
47983
diff
changeset
|
6284 int *needs_overstrike; |
| 24995 | 6285 { |
| 6286 char *font_name; | |
| 6287 struct font_name *best; | |
|
31507
ac6d049932e9
(Finternal_merge_in_global_face): Return a Lisp object.
Gerd Moellmann <gerd@gnu.org>
parents:
31483
diff
changeset
|
6288 int i, pt = 0; |
|
35913
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
6289 int specified[5]; |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
6290 int exact_p, avgwidth; |
| 24995 | 6291 |
| 6292 if (nfonts == 0) | |
| 6293 return NULL; | |
| 6294 | |
| 6295 /* Make specified font attributes available in `specified', | |
| 6296 indexed by sort order. */ | |
| 6297 for (i = 0; i < DIM (font_sort_order); ++i) | |
| 6298 { | |
| 6299 int xlfd_idx = font_sort_order[i]; | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
6300 |
| 24995 | 6301 if (xlfd_idx == XLFD_SWIDTH) |
| 6302 specified[i] = face_numeric_swidth (attrs[LFACE_SWIDTH_INDEX]); | |
| 6303 else if (xlfd_idx == XLFD_POINT_SIZE) | |
| 6304 specified[i] = pt = XFASTINT (attrs[LFACE_HEIGHT_INDEX]); | |
| 6305 else if (xlfd_idx == XLFD_WEIGHT) | |
| 6306 specified[i] = face_numeric_weight (attrs[LFACE_WEIGHT_INDEX]); | |
| 6307 else if (xlfd_idx == XLFD_SLANT) | |
| 6308 specified[i] = face_numeric_slant (attrs[LFACE_SLANT_INDEX]); | |
| 6309 else | |
| 6310 abort (); | |
| 6311 } | |
| 6312 | |
|
35913
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
6313 avgwidth = (UNSPECIFIEDP (attrs[LFACE_AVGWIDTH_INDEX]) |
|
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
6314 ? 0 |
|
36066
ea51e9f7266e
(best_matching_font): New parameter width_ratio.
Gerd Moellmann <gerd@gnu.org>
parents:
36006
diff
changeset
|
6315 : XFASTINT (attrs[LFACE_AVGWIDTH_INDEX]) * width_ratio); |
|
35913
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
6316 |
| 24995 | 6317 exact_p = 0; |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
6318 |
|
48384
acfaa904eb56
(load_face_font): Set `face->overstrike' based on result from
Miles Bader <miles@gnu.org>
parents:
47983
diff
changeset
|
6319 if (needs_overstrike) |
|
acfaa904eb56
(load_face_font): Set `face->overstrike' based on result from
Miles Bader <miles@gnu.org>
parents:
47983
diff
changeset
|
6320 *needs_overstrike = 0; |
|
acfaa904eb56
(load_face_font): Set `face->overstrike' based on result from
Miles Bader <miles@gnu.org>
parents:
47983
diff
changeset
|
6321 |
| 24995 | 6322 /* Start with the first non-scalable font in the list. */ |
| 6323 for (i = 0; i < nfonts; ++i) | |
| 6324 if (!font_scalable_p (fonts + i)) | |
| 6325 break; | |
| 6326 | |
| 6327 /* Find the best match among the non-scalable fonts. */ | |
| 6328 if (i < nfonts) | |
| 6329 { | |
| 6330 best = fonts + i; | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
6331 |
| 24995 | 6332 for (i = 1; i < nfonts; ++i) |
| 6333 if (!font_scalable_p (fonts + i) | |
|
35913
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
6334 && better_font_p (specified, fonts + i, best, 1, avgwidth)) |
| 24995 | 6335 { |
| 6336 best = fonts + i; | |
| 6337 | |
|
35913
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
6338 exact_p = exact_face_match_p (specified, best, avgwidth); |
| 24995 | 6339 if (exact_p) |
| 6340 break; | |
| 6341 } | |
| 6342 } | |
| 6343 else | |
| 6344 best = NULL; | |
| 6345 | |
| 6346 /* Unless we found an exact match among non-scalable fonts, see if | |
| 6347 we can find a better match among scalable fonts. */ | |
| 6348 if (!exact_p) | |
| 6349 { | |
| 6350 /* A scalable font is better if | |
| 6351 | |
| 6352 1. its weight, slant, swidth attributes are better, or. | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
6353 |
| 24995 | 6354 2. the best non-scalable font doesn't have the required |
| 6355 point size, and the scalable fonts weight, slant, swidth | |
| 6356 isn't worse. */ | |
| 6357 | |
| 6358 int non_scalable_has_exact_height_p; | |
| 6359 | |
| 6360 if (best && best->numeric[XLFD_POINT_SIZE] == pt) | |
| 6361 non_scalable_has_exact_height_p = 1; | |
| 6362 else | |
| 6363 non_scalable_has_exact_height_p = 0; | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
6364 |
| 24995 | 6365 for (i = 0; i < nfonts; ++i) |
| 6366 if (font_scalable_p (fonts + i)) | |
| 6367 { | |
| 6368 if (best == NULL | |
|
35913
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
6369 || better_font_p (specified, fonts + i, best, 0, 0) |
| 24995 | 6370 || (!non_scalable_has_exact_height_p |
|
35913
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
6371 && !better_font_p (specified, best, fonts + i, 0, 0))) |
|
52200
b154b2a09262
* xfaces.c (better_font_p): Prefer a real scalable font; i.e. not
Kenichi Handa <handa@m17n.org>
parents:
51665
diff
changeset
|
6372 { |
|
b154b2a09262
* xfaces.c (better_font_p): Prefer a real scalable font; i.e. not
Kenichi Handa <handa@m17n.org>
parents:
51665
diff
changeset
|
6373 non_scalable_has_exact_height_p = 1; |
|
b154b2a09262
* xfaces.c (better_font_p): Prefer a real scalable font; i.e. not
Kenichi Handa <handa@m17n.org>
parents:
51665
diff
changeset
|
6374 best = fonts + i; |
|
b154b2a09262
* xfaces.c (better_font_p): Prefer a real scalable font; i.e. not
Kenichi Handa <handa@m17n.org>
parents:
51665
diff
changeset
|
6375 } |
| 24995 | 6376 } |
|
48384
acfaa904eb56
(load_face_font): Set `face->overstrike' based on result from
Miles Bader <miles@gnu.org>
parents:
47983
diff
changeset
|
6377 |
|
acfaa904eb56
(load_face_font): Set `face->overstrike' based on result from
Miles Bader <miles@gnu.org>
parents:
47983
diff
changeset
|
6378 if (needs_overstrike) |
|
acfaa904eb56
(load_face_font): Set `face->overstrike' based on result from
Miles Bader <miles@gnu.org>
parents:
47983
diff
changeset
|
6379 { |
|
acfaa904eb56
(load_face_font): Set `face->overstrike' based on result from
Miles Bader <miles@gnu.org>
parents:
47983
diff
changeset
|
6380 enum xlfd_weight want_weight = specified[XLFD_WEIGHT]; |
|
acfaa904eb56
(load_face_font): Set `face->overstrike' based on result from
Miles Bader <miles@gnu.org>
parents:
47983
diff
changeset
|
6381 enum xlfd_weight got_weight = best->numeric[XLFD_WEIGHT]; |
|
acfaa904eb56
(load_face_font): Set `face->overstrike' based on result from
Miles Bader <miles@gnu.org>
parents:
47983
diff
changeset
|
6382 |
|
acfaa904eb56
(load_face_font): Set `face->overstrike' based on result from
Miles Bader <miles@gnu.org>
parents:
47983
diff
changeset
|
6383 if (want_weight > XLFD_WEIGHT_MEDIUM && want_weight > got_weight) |
|
acfaa904eb56
(load_face_font): Set `face->overstrike' based on result from
Miles Bader <miles@gnu.org>
parents:
47983
diff
changeset
|
6384 { |
|
acfaa904eb56
(load_face_font): Set `face->overstrike' based on result from
Miles Bader <miles@gnu.org>
parents:
47983
diff
changeset
|
6385 /* We want a bold font, but didn't get one; try to use |
|
acfaa904eb56
(load_face_font): Set `face->overstrike' based on result from
Miles Bader <miles@gnu.org>
parents:
47983
diff
changeset
|
6386 overstriking instead to simulate bold-face. However, |
|
acfaa904eb56
(load_face_font): Set `face->overstrike' based on result from
Miles Bader <miles@gnu.org>
parents:
47983
diff
changeset
|
6387 don't overstrike an already-bold fontn unless the |
|
acfaa904eb56
(load_face_font): Set `face->overstrike' based on result from
Miles Bader <miles@gnu.org>
parents:
47983
diff
changeset
|
6388 desired weight grossly exceeds the available weight. */ |
|
acfaa904eb56
(load_face_font): Set `face->overstrike' based on result from
Miles Bader <miles@gnu.org>
parents:
47983
diff
changeset
|
6389 if (got_weight > XLFD_WEIGHT_MEDIUM) |
|
acfaa904eb56
(load_face_font): Set `face->overstrike' based on result from
Miles Bader <miles@gnu.org>
parents:
47983
diff
changeset
|
6390 *needs_overstrike = (got_weight - want_weight) > 2; |
|
acfaa904eb56
(load_face_font): Set `face->overstrike' based on result from
Miles Bader <miles@gnu.org>
parents:
47983
diff
changeset
|
6391 else |
|
acfaa904eb56
(load_face_font): Set `face->overstrike' based on result from
Miles Bader <miles@gnu.org>
parents:
47983
diff
changeset
|
6392 *needs_overstrike = 1; |
|
acfaa904eb56
(load_face_font): Set `face->overstrike' based on result from
Miles Bader <miles@gnu.org>
parents:
47983
diff
changeset
|
6393 } |
|
acfaa904eb56
(load_face_font): Set `face->overstrike' based on result from
Miles Bader <miles@gnu.org>
parents:
47983
diff
changeset
|
6394 } |
| 24995 | 6395 } |
| 6396 | |
| 6397 if (font_scalable_p (best)) | |
| 6398 font_name = build_scalable_font_name (f, best, pt); | |
| 6399 else | |
| 6400 font_name = build_font_name (best); | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
6401 |
| 24995 | 6402 /* Free font_name structures. */ |
| 6403 free_font_names (fonts, nfonts); | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
6404 |
| 24995 | 6405 return font_name; |
| 6406 } | |
| 6407 | |
| 6408 | |
|
37724
3a5a6cd7ee9a
(try_alternative_families): First try the FAMILY.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37716
diff
changeset
|
6409 /* Get a list of matching fonts on frame F, considering FAMILY |
|
3a5a6cd7ee9a
(try_alternative_families): First try the FAMILY.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37716
diff
changeset
|
6410 and alternative font families from Vface_alternative_font_registry_alist. |
|
37679
13efa6105da9
(try_alternative_families): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37433
diff
changeset
|
6411 |
|
13efa6105da9
(try_alternative_families): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37433
diff
changeset
|
6412 FAMILY is the font family whose alternatives are considered. |
|
13efa6105da9
(try_alternative_families): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37433
diff
changeset
|
6413 |
|
13efa6105da9
(try_alternative_families): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37433
diff
changeset
|
6414 REGISTRY, if a string, specifies a font registry and encoding to |
|
13efa6105da9
(try_alternative_families): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37433
diff
changeset
|
6415 match. A value of nil means include fonts of any registry and |
|
13efa6105da9
(try_alternative_families): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37433
diff
changeset
|
6416 encoding. |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48384
diff
changeset
|
6417 |
|
37679
13efa6105da9
(try_alternative_families): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37433
diff
changeset
|
6418 Return in *FONTS a pointer to a vector of font_name structures for |
|
13efa6105da9
(try_alternative_families): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37433
diff
changeset
|
6419 the fonts matched. Value is the number of fonts found. */ |
|
13efa6105da9
(try_alternative_families): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37433
diff
changeset
|
6420 |
|
13efa6105da9
(try_alternative_families): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37433
diff
changeset
|
6421 static int |
|
13efa6105da9
(try_alternative_families): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37433
diff
changeset
|
6422 try_alternative_families (f, family, registry, fonts) |
|
13efa6105da9
(try_alternative_families): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37433
diff
changeset
|
6423 struct frame *f; |
|
13efa6105da9
(try_alternative_families): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37433
diff
changeset
|
6424 Lisp_Object family, registry; |
|
13efa6105da9
(try_alternative_families): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37433
diff
changeset
|
6425 struct font_name **fonts; |
|
13efa6105da9
(try_alternative_families): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37433
diff
changeset
|
6426 { |
|
13efa6105da9
(try_alternative_families): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37433
diff
changeset
|
6427 Lisp_Object alter; |
|
13efa6105da9
(try_alternative_families): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37433
diff
changeset
|
6428 int nfonts = 0; |
|
13efa6105da9
(try_alternative_families): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37433
diff
changeset
|
6429 |
|
37724
3a5a6cd7ee9a
(try_alternative_families): First try the FAMILY.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37716
diff
changeset
|
6430 nfonts = font_list (f, Qnil, family, registry, fonts); |
|
3a5a6cd7ee9a
(try_alternative_families): First try the FAMILY.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37716
diff
changeset
|
6431 if (nfonts == 0) |
|
3a5a6cd7ee9a
(try_alternative_families): First try the FAMILY.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37716
diff
changeset
|
6432 { |
|
3a5a6cd7ee9a
(try_alternative_families): First try the FAMILY.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37716
diff
changeset
|
6433 /* Try alternative font families. */ |
|
3a5a6cd7ee9a
(try_alternative_families): First try the FAMILY.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37716
diff
changeset
|
6434 alter = Fassoc (family, Vface_alternative_font_family_alist); |
|
3a5a6cd7ee9a
(try_alternative_families): First try the FAMILY.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37716
diff
changeset
|
6435 if (CONSP (alter)) |
|
37679
13efa6105da9
(try_alternative_families): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37433
diff
changeset
|
6436 { |
|
37724
3a5a6cd7ee9a
(try_alternative_families): First try the FAMILY.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37716
diff
changeset
|
6437 for (alter = XCDR (alter); |
|
3a5a6cd7ee9a
(try_alternative_families): First try the FAMILY.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37716
diff
changeset
|
6438 CONSP (alter) && nfonts == 0; |
|
3a5a6cd7ee9a
(try_alternative_families): First try the FAMILY.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37716
diff
changeset
|
6439 alter = XCDR (alter)) |
|
3a5a6cd7ee9a
(try_alternative_families): First try the FAMILY.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37716
diff
changeset
|
6440 { |
|
3a5a6cd7ee9a
(try_alternative_families): First try the FAMILY.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37716
diff
changeset
|
6441 if (STRINGP (XCAR (alter))) |
|
3a5a6cd7ee9a
(try_alternative_families): First try the FAMILY.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37716
diff
changeset
|
6442 nfonts = font_list (f, Qnil, XCAR (alter), registry, fonts); |
|
3a5a6cd7ee9a
(try_alternative_families): First try the FAMILY.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37716
diff
changeset
|
6443 } |
|
37679
13efa6105da9
(try_alternative_families): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37433
diff
changeset
|
6444 } |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48384
diff
changeset
|
6445 |
|
49864
a2add8cdc33a
(try_alternative_families): Try all scalable fonts if
Kenichi Handa <handa@m17n.org>
parents:
49863
diff
changeset
|
6446 /* Try all scalable fonts before giving up. */ |
|
a2add8cdc33a
(try_alternative_families): Try all scalable fonts if
Kenichi Handa <handa@m17n.org>
parents:
49863
diff
changeset
|
6447 if (nfonts == 0 && ! EQ (Vscalable_fonts_allowed, Qt)) |
|
37724
3a5a6cd7ee9a
(try_alternative_families): First try the FAMILY.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37716
diff
changeset
|
6448 { |
|
46285
3f111801efb4
Rename BINDING_STACK_SIZE to SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents:
45848
diff
changeset
|
6449 int count = SPECPDL_INDEX (); |
|
37724
3a5a6cd7ee9a
(try_alternative_families): First try the FAMILY.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37716
diff
changeset
|
6450 specbind (Qscalable_fonts_allowed, Qt); |
|
3a5a6cd7ee9a
(try_alternative_families): First try the FAMILY.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37716
diff
changeset
|
6451 nfonts = try_alternative_families (f, family, registry, fonts); |
|
3a5a6cd7ee9a
(try_alternative_families): First try the FAMILY.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37716
diff
changeset
|
6452 unbind_to (count, Qnil); |
|
3a5a6cd7ee9a
(try_alternative_families): First try the FAMILY.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37716
diff
changeset
|
6453 } |
|
3a5a6cd7ee9a
(try_alternative_families): First try the FAMILY.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37716
diff
changeset
|
6454 } |
|
37679
13efa6105da9
(try_alternative_families): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37433
diff
changeset
|
6455 return nfonts; |
|
13efa6105da9
(try_alternative_families): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37433
diff
changeset
|
6456 } |
|
13efa6105da9
(try_alternative_families): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37433
diff
changeset
|
6457 |
|
13efa6105da9
(try_alternative_families): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37433
diff
changeset
|
6458 |
|
37186
e47810283f6b
(best_matching_font): Remove unused parameter PATTERN.
Gerd Moellmann <gerd@gnu.org>
parents:
37036
diff
changeset
|
6459 /* Get a list of matching fonts on frame F. |
|
e47810283f6b
(best_matching_font): Remove unused parameter PATTERN.
Gerd Moellmann <gerd@gnu.org>
parents:
37036
diff
changeset
|
6460 |
|
37724
3a5a6cd7ee9a
(try_alternative_families): First try the FAMILY.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37716
diff
changeset
|
6461 FAMILY, if a string, specifies a font family derived from the fontset. |
|
3a5a6cd7ee9a
(try_alternative_families): First try the FAMILY.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37716
diff
changeset
|
6462 It is only used if the face does not specify any family in ATTRS or |
|
3a5a6cd7ee9a
(try_alternative_families): First try the FAMILY.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37716
diff
changeset
|
6463 if we cannot find any font of the face's family. |
|
37186
e47810283f6b
(best_matching_font): Remove unused parameter PATTERN.
Gerd Moellmann <gerd@gnu.org>
parents:
37036
diff
changeset
|
6464 |
|
e47810283f6b
(best_matching_font): Remove unused parameter PATTERN.
Gerd Moellmann <gerd@gnu.org>
parents:
37036
diff
changeset
|
6465 REGISTRY, if a string, specifies a font registry and encoding to |
|
e47810283f6b
(best_matching_font): Remove unused parameter PATTERN.
Gerd Moellmann <gerd@gnu.org>
parents:
37036
diff
changeset
|
6466 match. A value of nil means include fonts of any registry and |
|
e47810283f6b
(best_matching_font): Remove unused parameter PATTERN.
Gerd Moellmann <gerd@gnu.org>
parents:
37036
diff
changeset
|
6467 encoding. |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48384
diff
changeset
|
6468 |
|
47618
e620377a0596
(try_font_list): New arg PREFER_FACE_FAMILY. If it is
Kenichi Handa <handa@m17n.org>
parents:
47471
diff
changeset
|
6469 If PREFER_FACE_FAMILY is nonzero, perfer face's family to FAMILY. |
|
e620377a0596
(try_font_list): New arg PREFER_FACE_FAMILY. If it is
Kenichi Handa <handa@m17n.org>
parents:
47471
diff
changeset
|
6470 Otherwise, prefer FAMILY. |
|
e620377a0596
(try_font_list): New arg PREFER_FACE_FAMILY. If it is
Kenichi Handa <handa@m17n.org>
parents:
47471
diff
changeset
|
6471 |
|
37186
e47810283f6b
(best_matching_font): Remove unused parameter PATTERN.
Gerd Moellmann <gerd@gnu.org>
parents:
37036
diff
changeset
|
6472 Return in *FONTS a pointer to a vector of font_name structures for |
|
e47810283f6b
(best_matching_font): Remove unused parameter PATTERN.
Gerd Moellmann <gerd@gnu.org>
parents:
37036
diff
changeset
|
6473 the fonts matched. Value is the number of fonts found. */ |
| 24995 | 6474 |
| 6475 static int | |
|
47618
e620377a0596
(try_font_list): New arg PREFER_FACE_FAMILY. If it is
Kenichi Handa <handa@m17n.org>
parents:
47471
diff
changeset
|
6476 try_font_list (f, attrs, family, registry, fonts, prefer_face_family) |
| 24995 | 6477 struct frame *f; |
| 6478 Lisp_Object *attrs; | |
|
37186
e47810283f6b
(best_matching_font): Remove unused parameter PATTERN.
Gerd Moellmann <gerd@gnu.org>
parents:
37036
diff
changeset
|
6479 Lisp_Object family, registry; |
| 24995 | 6480 struct font_name **fonts; |
|
47618
e620377a0596
(try_font_list): New arg PREFER_FACE_FAMILY. If it is
Kenichi Handa <handa@m17n.org>
parents:
47471
diff
changeset
|
6481 int prefer_face_family; |
| 24995 | 6482 { |
|
37679
13efa6105da9
(try_alternative_families): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37433
diff
changeset
|
6483 int nfonts = 0; |
|
37724
3a5a6cd7ee9a
(try_alternative_families): First try the FAMILY.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37716
diff
changeset
|
6484 Lisp_Object face_family = attrs[LFACE_FAMILY_INDEX]; |
|
47618
e620377a0596
(try_font_list): New arg PREFER_FACE_FAMILY. If it is
Kenichi Handa <handa@m17n.org>
parents:
47471
diff
changeset
|
6485 Lisp_Object try_family; |
|
e620377a0596
(try_font_list): New arg PREFER_FACE_FAMILY. If it is
Kenichi Handa <handa@m17n.org>
parents:
47471
diff
changeset
|
6486 |
|
47639
a7c8409f5cad
(try_font_list): Pay attention to the case that FAMILY is nil.
Kenichi Handa <handa@m17n.org>
parents:
47618
diff
changeset
|
6487 try_family = (prefer_face_family || NILP (family)) ? face_family : family; |
|
47618
e620377a0596
(try_font_list): New arg PREFER_FACE_FAMILY. If it is
Kenichi Handa <handa@m17n.org>
parents:
47471
diff
changeset
|
6488 |
|
e620377a0596
(try_font_list): New arg PREFER_FACE_FAMILY. If it is
Kenichi Handa <handa@m17n.org>
parents:
47471
diff
changeset
|
6489 if (STRINGP (try_family)) |
|
e620377a0596
(try_font_list): New arg PREFER_FACE_FAMILY. If it is
Kenichi Handa <handa@m17n.org>
parents:
47471
diff
changeset
|
6490 nfonts = try_alternative_families (f, try_family, registry, fonts); |
|
37724
3a5a6cd7ee9a
(try_alternative_families): First try the FAMILY.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37716
diff
changeset
|
6491 |
| 45848 | 6492 #ifdef MAC_OS |
| 6493 /* When realizing the default face and a font spec does not matched | |
| 6494 exactly, Emacs looks for ones with the same registry as the | |
| 6495 default font. On the Mac, this is mac-roman, which does not work | |
| 6496 if the family is -etl-fixed, e.g. The following widens the | |
| 6497 choices and fixes that problem. */ | |
|
47618
e620377a0596
(try_font_list): New arg PREFER_FACE_FAMILY. If it is
Kenichi Handa <handa@m17n.org>
parents:
47471
diff
changeset
|
6498 if (nfonts == 0 && STRINGP (try_family) && STRINGP (registry) |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
6499 && xstricmp (SDATA (registry), "mac-roman") == 0) |
|
47618
e620377a0596
(try_font_list): New arg PREFER_FACE_FAMILY. If it is
Kenichi Handa <handa@m17n.org>
parents:
47471
diff
changeset
|
6500 nfonts = try_alternative_families (f, try_family, Qnil, fonts); |
| 45848 | 6501 #endif |
| 6502 | |
|
47639
a7c8409f5cad
(try_font_list): Pay attention to the case that FAMILY is nil.
Kenichi Handa <handa@m17n.org>
parents:
47618
diff
changeset
|
6503 if (EQ (try_family, family)) |
|
47618
e620377a0596
(try_font_list): New arg PREFER_FACE_FAMILY. If it is
Kenichi Handa <handa@m17n.org>
parents:
47471
diff
changeset
|
6504 family = face_family; |
|
e620377a0596
(try_font_list): New arg PREFER_FACE_FAMILY. If it is
Kenichi Handa <handa@m17n.org>
parents:
47471
diff
changeset
|
6505 |
|
e620377a0596
(try_font_list): New arg PREFER_FACE_FAMILY. If it is
Kenichi Handa <handa@m17n.org>
parents:
47471
diff
changeset
|
6506 if (nfonts == 0 && STRINGP (family)) |
|
37724
3a5a6cd7ee9a
(try_alternative_families): First try the FAMILY.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37716
diff
changeset
|
6507 nfonts = try_alternative_families (f, family, registry, fonts); |
|
3a5a6cd7ee9a
(try_alternative_families): First try the FAMILY.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37716
diff
changeset
|
6508 |
|
3a5a6cd7ee9a
(try_alternative_families): First try the FAMILY.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37716
diff
changeset
|
6509 /* Try font family of the default face or "fixed". */ |
|
37679
13efa6105da9
(try_alternative_families): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37433
diff
changeset
|
6510 if (nfonts == 0) |
|
13efa6105da9
(try_alternative_families): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37433
diff
changeset
|
6511 { |
|
37724
3a5a6cd7ee9a
(try_alternative_families): First try the FAMILY.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37716
diff
changeset
|
6512 struct face *default_face = FACE_FROM_ID (f, DEFAULT_FACE_ID); |
|
3a5a6cd7ee9a
(try_alternative_families): First try the FAMILY.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37716
diff
changeset
|
6513 if (default_face) |
|
3a5a6cd7ee9a
(try_alternative_families): First try the FAMILY.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37716
diff
changeset
|
6514 family = default_face->lface[LFACE_FAMILY_INDEX]; |
|
3a5a6cd7ee9a
(try_alternative_families): First try the FAMILY.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37716
diff
changeset
|
6515 else |
|
3a5a6cd7ee9a
(try_alternative_families): First try the FAMILY.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37716
diff
changeset
|
6516 family = build_string ("fixed"); |
|
37679
13efa6105da9
(try_alternative_families): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
37433
diff
changeset
|
6517 nfonts = font_list (f, Qnil, family, registry, fonts); |
|
37724
3a5a6cd7ee9a
(try_alternative_families): First try the FAMILY.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37716
diff
changeset
|
6518 } |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48384
diff
changeset
|
6519 |
|
37724
3a5a6cd7ee9a
(try_alternative_families): First try the FAMILY.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37716
diff
changeset
|
6520 /* Try any family with the given registry. */ |
|
3a5a6cd7ee9a
(try_alternative_families): First try the FAMILY.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37716
diff
changeset
|
6521 if (nfonts == 0) |
|
52203
0941be5b523e
(try_font_list): Call try_alternative_families to try any family
Kenichi Handa <handa@m17n.org>
parents:
52200
diff
changeset
|
6522 nfonts = try_alternative_families (f, Qnil, registry, fonts); |
| 24995 | 6523 |
| 6524 return nfonts; | |
| 6525 } | |
| 6526 | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6527 |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6528 /* Return the fontset id of the base fontset name or alias name given |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6529 by the fontset attribute of ATTRS. Value is -1 if the fontset |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6530 attribute of ATTRS doesn't name a fontset. */ |
| 24995 | 6531 |
| 6532 static int | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6533 face_fontset (attrs) |
| 24995 | 6534 Lisp_Object *attrs; |
| 6535 { | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6536 Lisp_Object name; |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
6537 |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6538 name = attrs[LFACE_FONT_INDEX]; |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6539 if (!STRINGP (name)) |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6540 return -1; |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6541 return fs_query_fontset (name, 0); |
| 24995 | 6542 } |
| 6543 | |
| 6544 | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6545 /* Choose a name of font to use on frame F to display character C with |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6546 Lisp face attributes specified by ATTRS. The font name is |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6547 determined by the font-related attributes in ATTRS and the name |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6548 pattern for C in FONTSET. Value is the font name which is |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6549 allocated from the heap and must be freed by the caller, or NULL if |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6550 we can get no information about the font name of C. It is assured |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6551 that we always get some information for a single byte |
|
48384
acfaa904eb56
(load_face_font): Set `face->overstrike' based on result from
Miles Bader <miles@gnu.org>
parents:
47983
diff
changeset
|
6552 character. |
|
acfaa904eb56
(load_face_font): Set `face->overstrike' based on result from
Miles Bader <miles@gnu.org>
parents:
47983
diff
changeset
|
6553 |
|
acfaa904eb56
(load_face_font): Set `face->overstrike' based on result from
Miles Bader <miles@gnu.org>
parents:
47983
diff
changeset
|
6554 If NEEDS_OVERSTRIKE is non-zero, a boolean is returned in it to |
|
acfaa904eb56
(load_face_font): Set `face->overstrike' based on result from
Miles Bader <miles@gnu.org>
parents:
47983
diff
changeset
|
6555 indicate whether the resulting font should be drawn using overstrike |
|
acfaa904eb56
(load_face_font): Set `face->overstrike' based on result from
Miles Bader <miles@gnu.org>
parents:
47983
diff
changeset
|
6556 to simulate bold-face. */ |
| 24995 | 6557 |
| 6558 static char * | |
|
48384
acfaa904eb56
(load_face_font): Set `face->overstrike' based on result from
Miles Bader <miles@gnu.org>
parents:
47983
diff
changeset
|
6559 choose_face_font (f, attrs, fontset, c, needs_overstrike) |
| 24995 | 6560 struct frame *f; |
| 6561 Lisp_Object *attrs; | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6562 int fontset, c; |
|
48384
acfaa904eb56
(load_face_font): Set `face->overstrike' based on result from
Miles Bader <miles@gnu.org>
parents:
47983
diff
changeset
|
6563 int *needs_overstrike; |
| 24995 | 6564 { |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6565 Lisp_Object pattern; |
| 24995 | 6566 char *font_name = NULL; |
| 6567 struct font_name *fonts; | |
|
36066
ea51e9f7266e
(best_matching_font): New parameter width_ratio.
Gerd Moellmann <gerd@gnu.org>
parents:
36006
diff
changeset
|
6568 int nfonts, width_ratio; |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
6569 |
|
50412
49cba7ce673a
(choose_face_font): Make sure *NEEDS_OVERSTRIKE is always set.
Miles Bader <miles@gnu.org>
parents:
50369
diff
changeset
|
6570 if (needs_overstrike) |
|
49cba7ce673a
(choose_face_font): Make sure *NEEDS_OVERSTRIKE is always set.
Miles Bader <miles@gnu.org>
parents:
50369
diff
changeset
|
6571 *needs_overstrike = 0; |
|
49cba7ce673a
(choose_face_font): Make sure *NEEDS_OVERSTRIKE is always set.
Miles Bader <miles@gnu.org>
parents:
50369
diff
changeset
|
6572 |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6573 /* Get (foundry and) family name and registry (and encoding) name of |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6574 a font for C. */ |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6575 pattern = fontset_font_pattern (f, fontset, c); |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6576 if (NILP (pattern)) |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6577 { |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6578 xassert (!SINGLE_BYTE_CHAR_P (c)); |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6579 return NULL; |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6580 } |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48384
diff
changeset
|
6581 |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6582 /* If what we got is a name pattern, return it. */ |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6583 if (STRINGP (pattern)) |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
6584 return xstrdup (SDATA (pattern)); |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6585 |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
6586 /* Get a list of fonts matching that pattern and choose the |
| 24995 | 6587 best match for the specified face attributes from it. */ |
|
47618
e620377a0596
(try_font_list): New arg PREFER_FACE_FAMILY. If it is
Kenichi Handa <handa@m17n.org>
parents:
47471
diff
changeset
|
6588 nfonts = try_font_list (f, attrs, XCAR (pattern), XCDR (pattern), &fonts, |
|
e620377a0596
(try_font_list): New arg PREFER_FACE_FAMILY. If it is
Kenichi Handa <handa@m17n.org>
parents:
47471
diff
changeset
|
6589 (SINGLE_BYTE_CHAR_P (c) |
|
e620377a0596
(try_font_list): New arg PREFER_FACE_FAMILY. If it is
Kenichi Handa <handa@m17n.org>
parents:
47471
diff
changeset
|
6590 || CHAR_CHARSET (c) == charset_latin_iso8859_1)); |
|
36066
ea51e9f7266e
(best_matching_font): New parameter width_ratio.
Gerd Moellmann <gerd@gnu.org>
parents:
36006
diff
changeset
|
6591 width_ratio = (SINGLE_BYTE_CHAR_P (c) |
|
ea51e9f7266e
(best_matching_font): New parameter width_ratio.
Gerd Moellmann <gerd@gnu.org>
parents:
36006
diff
changeset
|
6592 ? 1 |
|
ea51e9f7266e
(best_matching_font): New parameter width_ratio.
Gerd Moellmann <gerd@gnu.org>
parents:
36006
diff
changeset
|
6593 : CHARSET_WIDTH (CHAR_CHARSET (c))); |
|
48384
acfaa904eb56
(load_face_font): Set `face->overstrike' based on result from
Miles Bader <miles@gnu.org>
parents:
47983
diff
changeset
|
6594 font_name = best_matching_font (f, attrs, fonts, nfonts, width_ratio, |
|
acfaa904eb56
(load_face_font): Set `face->overstrike' based on result from
Miles Bader <miles@gnu.org>
parents:
47983
diff
changeset
|
6595 needs_overstrike); |
| 24995 | 6596 return font_name; |
| 6597 } | |
| 6598 | |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
6599 #endif /* HAVE_WINDOW_SYSTEM */ |
| 24995 | 6600 |
| 6601 | |
| 6602 | |
| 6603 /*********************************************************************** | |
| 6604 Face Realization | |
| 6605 ***********************************************************************/ | |
| 6606 | |
| 6607 /* Realize basic faces on frame F. Value is zero if frame parameters | |
| 6608 of F don't contain enough information needed to realize the default | |
| 6609 face. */ | |
| 6610 | |
| 6611 static int | |
| 6612 realize_basic_faces (f) | |
| 2342 | 6613 struct frame *f; |
| 24995 | 6614 { |
| 6615 int success_p = 0; | |
|
46285
3f111801efb4
Rename BINDING_STACK_SIZE to SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents:
45848
diff
changeset
|
6616 int count = SPECPDL_INDEX (); |
|
28461
b6b552188c57
(realize_basic_faces): Block input while realizing
Gerd Moellmann <gerd@gnu.org>
parents:
28412
diff
changeset
|
6617 |
|
38802
7ca6f1c8e014
(x_update_menu_appearance): Save and restore value of
Gerd Moellmann <gerd@gnu.org>
parents:
38435
diff
changeset
|
6618 /* Block input here so that we won't be surprised by an X expose |
|
7ca6f1c8e014
(x_update_menu_appearance): Save and restore value of
Gerd Moellmann <gerd@gnu.org>
parents:
38435
diff
changeset
|
6619 event, for instance, without having the faces set up. */ |
|
28461
b6b552188c57
(realize_basic_faces): Block input while realizing
Gerd Moellmann <gerd@gnu.org>
parents:
28412
diff
changeset
|
6620 BLOCK_INPUT; |
|
37394
7847d9b8bbff
(Qscalable_fonts_allowed): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
37206
diff
changeset
|
6621 specbind (Qscalable_fonts_allowed, Qt); |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
6622 |
| 24995 | 6623 if (realize_default_face (f)) |
| 6624 { | |
|
25661
a6e2ae7964fb
(Fx_family_fonts): Replaces Fx_font_list.
Gerd Moellmann <gerd@gnu.org>
parents:
25592
diff
changeset
|
6625 realize_named_face (f, Qmode_line, MODE_LINE_FACE_ID); |
|
43203
dd98ef3675e5
(Qmode_line_inactive): New face variable for mode-line
Kim F. Storm <storm@cua.dk>
parents:
43069
diff
changeset
|
6626 realize_named_face (f, Qmode_line_inactive, MODE_LINE_INACTIVE_FACE_ID); |
|
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25389
diff
changeset
|
6627 realize_named_face (f, Qtool_bar, TOOL_BAR_FACE_ID); |
| 41129 | 6628 realize_named_face (f, Qfringe, FRINGE_FACE_ID); |
| 25546 | 6629 realize_named_face (f, Qheader_line, HEADER_LINE_FACE_ID); |
|
25592
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
6630 realize_named_face (f, Qscroll_bar, SCROLL_BAR_FACE_ID); |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
6631 realize_named_face (f, Qborder, BORDER_FACE_ID); |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
6632 realize_named_face (f, Qcursor, CURSOR_FACE_ID); |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
6633 realize_named_face (f, Qmouse, MOUSE_FACE_ID); |
|
25883
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
6634 realize_named_face (f, Qmenu, MENU_FACE_ID); |
|
33082
5ab6f3e1f5c8
(menu_face_change_count): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33070
diff
changeset
|
6635 |
|
33275
8c453c73a11b
(lookup_named_face): If default face isn't realized,
Gerd Moellmann <gerd@gnu.org>
parents:
33082
diff
changeset
|
6636 /* Reflect changes in the `menu' face in menu bars. */ |
|
38905
70ef1eb656a6
(menu_face_changed_default): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38818
diff
changeset
|
6637 if (FRAME_FACE_CACHE (f)->menu_face_changed_p) |
|
33082
5ab6f3e1f5c8
(menu_face_change_count): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33070
diff
changeset
|
6638 { |
|
38905
70ef1eb656a6
(menu_face_changed_default): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
38818
diff
changeset
|
6639 FRAME_FACE_CACHE (f)->menu_face_changed_p = 0; |
|
33082
5ab6f3e1f5c8
(menu_face_change_count): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33070
diff
changeset
|
6640 #ifdef USE_X_TOOLKIT |
|
36942
98755810fe71
(x_update_menu_appearance): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
36936
diff
changeset
|
6641 x_update_menu_appearance (f); |
|
36936
bda3649d35fd
(x_set_menu_resources_from_menu_face) [USE_X_TOOLKIT]:
Gerd Moellmann <gerd@gnu.org>
parents:
36932
diff
changeset
|
6642 #endif |
|
33082
5ab6f3e1f5c8
(menu_face_change_count): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33070
diff
changeset
|
6643 } |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48384
diff
changeset
|
6644 |
| 24995 | 6645 success_p = 1; |
| 6646 } | |
| 6647 | |
|
37394
7847d9b8bbff
(Qscalable_fonts_allowed): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
37206
diff
changeset
|
6648 unbind_to (count, Qnil); |
|
28461
b6b552188c57
(realize_basic_faces): Block input while realizing
Gerd Moellmann <gerd@gnu.org>
parents:
28412
diff
changeset
|
6649 UNBLOCK_INPUT; |
| 24995 | 6650 return success_p; |
| 6651 } | |
| 6652 | |
| 6653 | |
| 6654 /* Realize the default face on frame F. If the face is not fully | |
| 6655 specified, make it fully-specified. Attributes of the default face | |
| 6656 that are not explicitly specified are taken from frame parameters. */ | |
| 6657 | |
| 6658 static int | |
| 6659 realize_default_face (f) | |
| 6660 struct frame *f; | |
| 6661 { | |
| 6662 struct face_cache *c = FRAME_FACE_CACHE (f); | |
| 6663 Lisp_Object lface; | |
| 6664 Lisp_Object attrs[LFACE_VECTOR_SIZE]; | |
| 6665 Lisp_Object frame_font; | |
| 6666 struct face *face; | |
| 6667 | |
| 6668 /* If the `default' face is not yet known, create it. */ | |
| 6669 lface = lface_from_face_name (f, Qdefault, 0); | |
| 6670 if (NILP (lface)) | |
|
51315
7156fc3b3571
(realize_default_face): Do not abort if lface is non-existent -
Glenn Morris <rgm@gnu.org>
parents:
51237
diff
changeset
|
6671 { |
|
7156fc3b3571
(realize_default_face): Do not abort if lface is non-existent -
Glenn Morris <rgm@gnu.org>
parents:
51237
diff
changeset
|
6672 Lisp_Object frame; |
|
7156fc3b3571
(realize_default_face): Do not abort if lface is non-existent -
Glenn Morris <rgm@gnu.org>
parents:
51237
diff
changeset
|
6673 XSETFRAME (frame, f); |
|
7156fc3b3571
(realize_default_face): Do not abort if lface is non-existent -
Glenn Morris <rgm@gnu.org>
parents:
51237
diff
changeset
|
6674 lface = Finternal_make_lisp_face (Qdefault, frame); |
|
7156fc3b3571
(realize_default_face): Do not abort if lface is non-existent -
Glenn Morris <rgm@gnu.org>
parents:
51237
diff
changeset
|
6675 } |
|
7156fc3b3571
(realize_default_face): Do not abort if lface is non-existent -
Glenn Morris <rgm@gnu.org>
parents:
51237
diff
changeset
|
6676 |
| 24995 | 6677 |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
6678 #ifdef HAVE_WINDOW_SYSTEM |
|
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
6679 if (FRAME_WINDOW_P (f)) |
| 24995 | 6680 { |
| 6681 /* Set frame_font to the value of the `font' frame parameter. */ | |
| 6682 frame_font = Fassq (Qfont, f->param_alist); | |
| 6683 xassert (CONSP (frame_font) && STRINGP (XCDR (frame_font))); | |
| 6684 frame_font = XCDR (frame_font); | |
|
51665
c1f65dfc56eb
Fix some of the font/face problems.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
51500
diff
changeset
|
6685 set_lface_from_font_name (f, lface, frame_font, |
|
c1f65dfc56eb
Fix some of the font/face problems.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
51500
diff
changeset
|
6686 f->default_face_done_p, 1); |
|
c1f65dfc56eb
Fix some of the font/face problems.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
51500
diff
changeset
|
6687 f->default_face_done_p = 1; |
| 24995 | 6688 } |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
6689 #endif /* HAVE_WINDOW_SYSTEM */ |
| 24995 | 6690 |
|
25114
be5d3e21fbd7
(load_color): Remove static from definition and remove
Eli Zaretskii <eliz@gnu.org>
parents:
25092
diff
changeset
|
6691 if (!FRAME_WINDOW_P (f)) |
| 24995 | 6692 { |
| 6693 LFACE_FAMILY (lface) = build_string ("default"); | |
| 6694 LFACE_SWIDTH (lface) = Qnormal; | |
| 6695 LFACE_HEIGHT (lface) = make_number (1); | |
|
43069
e1291f1c4a5b
(realize_default_face): Don't set the weight and slant
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
6696 if (UNSPECIFIEDP (LFACE_WEIGHT (lface))) |
|
e1291f1c4a5b
(realize_default_face): Don't set the weight and slant
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
6697 LFACE_WEIGHT (lface) = Qnormal; |
|
e1291f1c4a5b
(realize_default_face): Don't set the weight and slant
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
6698 if (UNSPECIFIEDP (LFACE_SLANT (lface))) |
|
e1291f1c4a5b
(realize_default_face): Don't set the weight and slant
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
6699 LFACE_SLANT (lface) = Qnormal; |
|
35913
d3591f4747d7
(split_font_name): Compute numeric value of
Gerd Moellmann <gerd@gnu.org>
parents:
35843
diff
changeset
|
6700 LFACE_AVGWIDTH (lface) = Qunspecified; |
| 24995 | 6701 } |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
6702 |
| 24995 | 6703 if (UNSPECIFIEDP (LFACE_UNDERLINE (lface))) |
| 6704 LFACE_UNDERLINE (lface) = Qnil; | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
6705 |
| 24995 | 6706 if (UNSPECIFIEDP (LFACE_OVERLINE (lface))) |
| 6707 LFACE_OVERLINE (lface) = Qnil; | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
6708 |
| 24995 | 6709 if (UNSPECIFIEDP (LFACE_STRIKE_THROUGH (lface))) |
| 6710 LFACE_STRIKE_THROUGH (lface) = Qnil; | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
6711 |
| 24995 | 6712 if (UNSPECIFIEDP (LFACE_BOX (lface))) |
| 6713 LFACE_BOX (lface) = Qnil; | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
6714 |
| 24995 | 6715 if (UNSPECIFIEDP (LFACE_INVERSE (lface))) |
| 6716 LFACE_INVERSE (lface) = Qnil; | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
6717 |
| 24995 | 6718 if (UNSPECIFIEDP (LFACE_FOREGROUND (lface))) |
| 6719 { | |
| 6720 /* This function is called so early that colors are not yet | |
| 6721 set in the frame parameter list. */ | |
| 6722 Lisp_Object color = Fassq (Qforeground_color, f->param_alist); | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
6723 |
| 24995 | 6724 if (CONSP (color) && STRINGP (XCDR (color))) |
| 6725 LFACE_FOREGROUND (lface) = XCDR (color); | |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
6726 else if (FRAME_WINDOW_P (f)) |
| 24995 | 6727 return 0; |
| 35443 | 6728 else if (FRAME_TERMCAP_P (f) || FRAME_MSDOS_P (f)) |
|
27114
4efa5e54e9a9
(Qunspecified_fg, Qunspecified_bg): Remove.
Eli Zaretskii <eliz@gnu.org>
parents:
27100
diff
changeset
|
6729 LFACE_FOREGROUND (lface) = build_string (unspecified_fg); |
|
26902
264b83a3a688
Changes for separate unspecified foreground and background colors
Eli Zaretskii <eliz@gnu.org>
parents:
26875
diff
changeset
|
6730 else |
| 24995 | 6731 abort (); |
| 6732 } | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
6733 |
| 24995 | 6734 if (UNSPECIFIEDP (LFACE_BACKGROUND (lface))) |
| 6735 { | |
| 6736 /* This function is called so early that colors are not yet | |
| 6737 set in the frame parameter list. */ | |
| 6738 Lisp_Object color = Fassq (Qbackground_color, f->param_alist); | |
| 6739 if (CONSP (color) && STRINGP (XCDR (color))) | |
| 6740 LFACE_BACKGROUND (lface) = XCDR (color); | |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
6741 else if (FRAME_WINDOW_P (f)) |
| 24995 | 6742 return 0; |
| 35443 | 6743 else if (FRAME_TERMCAP_P (f) || FRAME_MSDOS_P (f)) |
|
27114
4efa5e54e9a9
(Qunspecified_fg, Qunspecified_bg): Remove.
Eli Zaretskii <eliz@gnu.org>
parents:
27100
diff
changeset
|
6744 LFACE_BACKGROUND (lface) = build_string (unspecified_bg); |
|
26902
264b83a3a688
Changes for separate unspecified foreground and background colors
Eli Zaretskii <eliz@gnu.org>
parents:
26875
diff
changeset
|
6745 else |
| 24995 | 6746 abort (); |
| 6747 } | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
6748 |
| 24995 | 6749 if (UNSPECIFIEDP (LFACE_STIPPLE (lface))) |
| 6750 LFACE_STIPPLE (lface) = Qnil; | |
| 6751 | |
| 6752 /* Realize the face; it must be fully-specified now. */ | |
| 6753 xassert (lface_fully_specified_p (XVECTOR (lface)->contents)); | |
| 6754 check_lface (lface); | |
| 6755 bcopy (XVECTOR (lface)->contents, attrs, sizeof attrs); | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6756 face = realize_face (c, attrs, 0, NULL, DEFAULT_FACE_ID); |
| 24995 | 6757 return 1; |
| 6758 } | |
| 6759 | |
| 6760 | |
| 6761 /* Realize basic faces other than the default face in face cache C. | |
| 6762 SYMBOL is the face name, ID is the face id the realized face must | |
| 6763 have. The default face must have been realized already. */ | |
| 6764 | |
| 6765 static void | |
| 6766 realize_named_face (f, symbol, id) | |
| 6767 struct frame *f; | |
| 6768 Lisp_Object symbol; | |
| 6769 int id; | |
| 6770 { | |
| 6771 struct face_cache *c = FRAME_FACE_CACHE (f); | |
| 6772 Lisp_Object lface = lface_from_face_name (f, symbol, 0); | |
| 6773 Lisp_Object attrs[LFACE_VECTOR_SIZE]; | |
| 6774 Lisp_Object symbol_attrs[LFACE_VECTOR_SIZE]; | |
| 6775 struct face *new_face; | |
| 6776 | |
| 6777 /* The default face must exist and be fully specified. */ | |
| 6778 get_lface_attributes (f, Qdefault, attrs, 1); | |
| 6779 check_lface_attrs (attrs); | |
| 6780 xassert (lface_fully_specified_p (attrs)); | |
| 6781 | |
| 6782 /* If SYMBOL isn't know as a face, create it. */ | |
| 6783 if (NILP (lface)) | |
| 6784 { | |
| 6785 Lisp_Object frame; | |
| 6786 XSETFRAME (frame, f); | |
| 6787 lface = Finternal_make_lisp_face (symbol, frame); | |
| 6788 } | |
| 6789 | |
| 6790 /* Merge SYMBOL's face with the default face. */ | |
| 6791 get_lface_attributes (f, symbol, symbol_attrs, 1); | |
| 31178 | 6792 merge_face_vectors (f, symbol_attrs, attrs, Qnil); |
| 24995 | 6793 |
| 6794 /* Realize the face. */ | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6795 new_face = realize_face (c, attrs, 0, NULL, id); |
| 24995 | 6796 } |
| 6797 | |
| 6798 | |
| 6799 /* Realize the fully-specified face with attributes ATTRS in face | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6800 cache CACHE for character C. If C is a multibyte character, |
|
28753
582ba7ff96f7
(realize_x_face): Fix the argument of the second
Kenichi Handa <handa@m17n.org>
parents:
28620
diff
changeset
|
6801 BASE_FACE is a face that has the same attributes. Otherwise, |
|
582ba7ff96f7
(realize_x_face): Fix the argument of the second
Kenichi Handa <handa@m17n.org>
parents:
28620
diff
changeset
|
6802 BASE_FACE is ignored. If FORMER_FACE_ID is non-negative, it is an |
|
582ba7ff96f7
(realize_x_face): Fix the argument of the second
Kenichi Handa <handa@m17n.org>
parents:
28620
diff
changeset
|
6803 ID of face to remove before caching the new face. Value is a |
|
582ba7ff96f7
(realize_x_face): Fix the argument of the second
Kenichi Handa <handa@m17n.org>
parents:
28620
diff
changeset
|
6804 pointer to the newly created realized face. */ |
| 24995 | 6805 |
| 6806 static struct face * | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6807 realize_face (cache, attrs, c, base_face, former_face_id) |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6808 struct face_cache *cache; |
| 24995 | 6809 Lisp_Object *attrs; |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6810 int c; |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6811 struct face *base_face; |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6812 int former_face_id; |
| 24995 | 6813 { |
| 6814 struct face *face; | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
6815 |
| 24995 | 6816 /* LFACE must be fully specified. */ |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6817 xassert (cache != NULL); |
| 24995 | 6818 check_lface_attrs (attrs); |
| 6819 | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6820 if (former_face_id >= 0 && cache->used > former_face_id) |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6821 { |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6822 /* Remove the former face. */ |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6823 struct face *former_face = cache->faces_by_id[former_face_id]; |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6824 uncache_face (cache, former_face); |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6825 free_realized_face (cache->f, former_face); |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6826 } |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6827 |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6828 if (FRAME_WINDOW_P (cache->f)) |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6829 face = realize_x_face (cache, attrs, c, base_face); |
| 35443 | 6830 else if (FRAME_TERMCAP_P (cache->f) || FRAME_MSDOS_P (cache->f)) |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6831 face = realize_tty_face (cache, attrs, c); |
| 24995 | 6832 else |
| 6833 abort (); | |
| 6834 | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6835 /* Insert the new face. */ |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6836 cache_face (cache, face, lface_hash (attrs)); |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6837 #ifdef HAVE_WINDOW_SYSTEM |
|
28544
b42146066357
(realize_face): Change FRAME_X_P to FRAME_WINDOW_P.
Jason Rumney <jasonr@gnu.org>
parents:
28529
diff
changeset
|
6838 if (FRAME_WINDOW_P (cache->f) && face->font == NULL) |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6839 load_face_font (cache->f, face, c); |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6840 #endif /* HAVE_WINDOW_SYSTEM */ |
| 24995 | 6841 return face; |
| 6842 } | |
| 6843 | |
| 6844 | |
| 6845 /* Realize the fully-specified face with attributes ATTRS in face | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6846 cache CACHE for character C. Do it for X frame CACHE->f. If C is |
|
28753
582ba7ff96f7
(realize_x_face): Fix the argument of the second
Kenichi Handa <handa@m17n.org>
parents:
28620
diff
changeset
|
6847 a multibyte character, BASE_FACE is a face that has the same |
|
582ba7ff96f7
(realize_x_face): Fix the argument of the second
Kenichi Handa <handa@m17n.org>
parents:
28620
diff
changeset
|
6848 attributes. Otherwise, BASE_FACE is ignored. If the new face |
|
582ba7ff96f7
(realize_x_face): Fix the argument of the second
Kenichi Handa <handa@m17n.org>
parents:
28620
diff
changeset
|
6849 doesn't share font with the default face, a fontname is allocated |
|
582ba7ff96f7
(realize_x_face): Fix the argument of the second
Kenichi Handa <handa@m17n.org>
parents:
28620
diff
changeset
|
6850 from the heap and set in `font_name' of the new face, but it is not |
|
582ba7ff96f7
(realize_x_face): Fix the argument of the second
Kenichi Handa <handa@m17n.org>
parents:
28620
diff
changeset
|
6851 yet loaded here. Value is a pointer to the newly created realized |
|
582ba7ff96f7
(realize_x_face): Fix the argument of the second
Kenichi Handa <handa@m17n.org>
parents:
28620
diff
changeset
|
6852 face. */ |
| 24995 | 6853 |
| 6854 static struct face * | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6855 realize_x_face (cache, attrs, c, base_face) |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6856 struct face_cache *cache; |
| 24995 | 6857 Lisp_Object *attrs; |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6858 int c; |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6859 struct face *base_face; |
| 24995 | 6860 { |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
6861 #ifdef HAVE_WINDOW_SYSTEM |
| 24995 | 6862 struct face *face, *default_face; |
|
26875
d6aa11f2a4af
(choose_face_fontset_font): Delete codes for a
Kenichi Handa <handa@m17n.org>
parents:
26759
diff
changeset
|
6863 struct frame *f; |
| 24995 | 6864 Lisp_Object stipple, overline, strike_through, box; |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6865 |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6866 xassert (FRAME_WINDOW_P (cache->f)); |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6867 xassert (SINGLE_BYTE_CHAR_P (c) |
|
28753
582ba7ff96f7
(realize_x_face): Fix the argument of the second
Kenichi Handa <handa@m17n.org>
parents:
28620
diff
changeset
|
6868 || base_face); |
| 24995 | 6869 |
| 6870 /* Allocate a new realized face. */ | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6871 face = make_realized_face (attrs); |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6872 |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6873 f = cache->f; |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6874 |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6875 /* If C is a multibyte character, we share all face attirbutes with |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6876 BASE_FACE including the realized fontset. But, we must load a |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6877 different font. */ |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6878 if (!SINGLE_BYTE_CHAR_P (c)) |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6879 { |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6880 bcopy (base_face, face, sizeof *face); |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6881 face->gc = 0; |
|
29394
84489c72fb8e
(realize_x_face): When copying BASE_FACE bitwise to the
Gerd Moellmann <gerd@gnu.org>
parents:
29284
diff
changeset
|
6882 |
|
84489c72fb8e
(realize_x_face): When copying BASE_FACE bitwise to the
Gerd Moellmann <gerd@gnu.org>
parents:
29284
diff
changeset
|
6883 /* Don't try to free the colors copied bitwise from BASE_FACE. */ |
|
40555
dfc4450c2329
(realize_x_face): If C is not a single-byte character,
Gerd Moellmann <gerd@gnu.org>
parents:
40532
diff
changeset
|
6884 face->colors_copied_bitwise_p = 1; |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
6885 |
|
29394
84489c72fb8e
(realize_x_face): When copying BASE_FACE bitwise to the
Gerd Moellmann <gerd@gnu.org>
parents:
29284
diff
changeset
|
6886 /* to force realize_face to load font */ |
|
84489c72fb8e
(realize_x_face): When copying BASE_FACE bitwise to the
Gerd Moellmann <gerd@gnu.org>
parents:
29284
diff
changeset
|
6887 face->font = NULL; |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6888 return face; |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6889 } |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6890 |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6891 /* Now we are realizing a face for ASCII (and unibyte) characters. */ |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6892 |
| 24995 | 6893 /* Determine the font to use. Most of the time, the font will be |
| 6894 the same as the font of the default face, so try that first. */ | |
| 6895 default_face = FACE_FROM_ID (f, DEFAULT_FACE_ID); | |
| 6896 if (default_face | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6897 && FACE_SUITABLE_FOR_CHAR_P (default_face, c) |
| 24995 | 6898 && lface_same_font_attributes_p (default_face->lface, attrs)) |
| 6899 { | |
| 6900 face->font = default_face->font; | |
| 6901 face->fontset = default_face->fontset; | |
| 6902 face->font_info_id = default_face->font_info_id; | |
| 6903 face->font_name = default_face->font_name; | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6904 face->ascii_face = face; |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6905 |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6906 /* But, as we can't share the fontset, make a new realized |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6907 fontset that has the same base fontset as of the default |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6908 face. */ |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6909 face->fontset |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6910 = make_fontset_for_ascii_face (f, default_face->fontset); |
| 24995 | 6911 } |
| 6912 else | |
| 6913 { | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6914 /* If the face attribute ATTRS specifies a fontset, use it as |
|
30211
8d8aa26c6884
(realize_x_face): Make fontset using the base of the
Kenichi Handa <handa@m17n.org>
parents:
30174
diff
changeset
|
6915 the base of a new realized fontset. Otherwise, use the same |
|
8d8aa26c6884
(realize_x_face): Make fontset using the base of the
Kenichi Handa <handa@m17n.org>
parents:
30174
diff
changeset
|
6916 base fontset as of the default face. The base determines |
|
8d8aa26c6884
(realize_x_face): Make fontset using the base of the
Kenichi Handa <handa@m17n.org>
parents:
30174
diff
changeset
|
6917 registry and encoding of a font. It may also determine |
|
8d8aa26c6884
(realize_x_face): Make fontset using the base of the
Kenichi Handa <handa@m17n.org>
parents:
30174
diff
changeset
|
6918 foundry and family. The other fields of font name pattern |
|
8d8aa26c6884
(realize_x_face): Make fontset using the base of the
Kenichi Handa <handa@m17n.org>
parents:
30174
diff
changeset
|
6919 are constructed from ATTRS. */ |
|
8d8aa26c6884
(realize_x_face): Make fontset using the base of the
Kenichi Handa <handa@m17n.org>
parents:
30174
diff
changeset
|
6920 int fontset = face_fontset (attrs); |
|
8d8aa26c6884
(realize_x_face): Make fontset using the base of the
Kenichi Handa <handa@m17n.org>
parents:
30174
diff
changeset
|
6921 |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
6922 if ((fontset == -1) && default_face) |
|
30211
8d8aa26c6884
(realize_x_face): Make fontset using the base of the
Kenichi Handa <handa@m17n.org>
parents:
30174
diff
changeset
|
6923 fontset = default_face->fontset; |
|
8d8aa26c6884
(realize_x_face): Make fontset using the base of the
Kenichi Handa <handa@m17n.org>
parents:
30174
diff
changeset
|
6924 face->fontset = make_fontset_for_ascii_face (f, fontset); |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
6925 face->font = NULL; /* to force realize_face to load font */ |
| 24995 | 6926 } |
| 6927 | |
| 6928 /* Load colors, and set remaining attributes. */ | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
6929 |
| 24995 | 6930 load_face_colors (f, face, attrs); |
| 6931 | |
| 6932 /* Set up box. */ | |
| 6933 box = attrs[LFACE_BOX_INDEX]; | |
| 6934 if (STRINGP (box)) | |
| 6935 { | |
| 6936 /* A simple box of line width 1 drawn in color given by | |
| 6937 the string. */ | |
| 6938 face->box_color = load_color (f, face, attrs[LFACE_BOX_INDEX], | |
| 6939 LFACE_BOX_INDEX); | |
| 6940 face->box = FACE_SIMPLE_BOX; | |
| 6941 face->box_line_width = 1; | |
| 6942 } | |
| 6943 else if (INTEGERP (box)) | |
| 6944 { | |
| 6945 /* Simple box of specified line width in foreground color of the | |
| 6946 face. */ | |
|
36006
a9d75e8a6cb9
(Finternal_set_lisp_face_attribute): The value of :box
Kenichi Handa <handa@m17n.org>
parents:
35913
diff
changeset
|
6947 xassert (XINT (box) != 0); |
| 24995 | 6948 face->box = FACE_SIMPLE_BOX; |
|
36006
a9d75e8a6cb9
(Finternal_set_lisp_face_attribute): The value of :box
Kenichi Handa <handa@m17n.org>
parents:
35913
diff
changeset
|
6949 face->box_line_width = XINT (box); |
| 24995 | 6950 face->box_color = face->foreground; |
| 6951 face->box_color_defaulted_p = 1; | |
| 6952 } | |
| 6953 else if (CONSP (box)) | |
| 6954 { | |
| 6955 /* `(:width WIDTH :color COLOR :shadow SHADOW)'. SHADOW | |
| 6956 being one of `raised' or `sunken'. */ | |
| 6957 face->box = FACE_SIMPLE_BOX; | |
| 6958 face->box_color = face->foreground; | |
| 6959 face->box_color_defaulted_p = 1; | |
| 6960 face->box_line_width = 1; | |
| 6961 | |
| 6962 while (CONSP (box)) | |
| 6963 { | |
| 6964 Lisp_Object keyword, value; | |
| 6965 | |
| 6966 keyword = XCAR (box); | |
| 6967 box = XCDR (box); | |
| 6968 | |
| 6969 if (!CONSP (box)) | |
| 6970 break; | |
| 6971 value = XCAR (box); | |
| 6972 box = XCDR (box); | |
| 6973 | |
| 6974 if (EQ (keyword, QCline_width)) | |
| 6975 { | |
|
36006
a9d75e8a6cb9
(Finternal_set_lisp_face_attribute): The value of :box
Kenichi Handa <handa@m17n.org>
parents:
35913
diff
changeset
|
6976 if (INTEGERP (value) && XINT (value) != 0) |
|
a9d75e8a6cb9
(Finternal_set_lisp_face_attribute): The value of :box
Kenichi Handa <handa@m17n.org>
parents:
35913
diff
changeset
|
6977 face->box_line_width = XINT (value); |
| 24995 | 6978 } |
| 6979 else if (EQ (keyword, QCcolor)) | |
| 6980 { | |
| 6981 if (STRINGP (value)) | |
| 6982 { | |
| 6983 face->box_color = load_color (f, face, value, | |
| 6984 LFACE_BOX_INDEX); | |
| 6985 face->use_box_color_for_shadows_p = 1; | |
| 6986 } | |
| 6987 } | |
| 6988 else if (EQ (keyword, QCstyle)) | |
| 6989 { | |
| 6990 if (EQ (value, Qreleased_button)) | |
| 6991 face->box = FACE_RAISED_BOX; | |
| 6992 else if (EQ (value, Qpressed_button)) | |
| 6993 face->box = FACE_SUNKEN_BOX; | |
| 6994 } | |
| 6995 } | |
| 6996 } | |
| 6997 | |
| 6998 /* Text underline, overline, strike-through. */ | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
6999 |
| 24995 | 7000 if (EQ (attrs[LFACE_UNDERLINE_INDEX], Qt)) |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
7001 { |
| 24995 | 7002 /* Use default color (same as foreground color). */ |
| 7003 face->underline_p = 1; | |
| 7004 face->underline_defaulted_p = 1; | |
| 7005 face->underline_color = 0; | |
| 7006 } | |
| 7007 else if (STRINGP (attrs[LFACE_UNDERLINE_INDEX])) | |
| 7008 { | |
| 7009 /* Use specified color. */ | |
| 7010 face->underline_p = 1; | |
| 7011 face->underline_defaulted_p = 0; | |
| 7012 face->underline_color | |
| 7013 = load_color (f, face, attrs[LFACE_UNDERLINE_INDEX], | |
| 7014 LFACE_UNDERLINE_INDEX); | |
| 7015 } | |
| 7016 else if (NILP (attrs[LFACE_UNDERLINE_INDEX])) | |
| 7017 { | |
| 7018 face->underline_p = 0; | |
| 7019 face->underline_defaulted_p = 0; | |
| 7020 face->underline_color = 0; | |
| 7021 } | |
| 7022 | |
| 7023 overline = attrs[LFACE_OVERLINE_INDEX]; | |
| 7024 if (STRINGP (overline)) | |
| 7025 { | |
| 7026 face->overline_color | |
| 7027 = load_color (f, face, attrs[LFACE_OVERLINE_INDEX], | |
| 7028 LFACE_OVERLINE_INDEX); | |
| 7029 face->overline_p = 1; | |
| 7030 } | |
| 7031 else if (EQ (overline, Qt)) | |
| 7032 { | |
| 7033 face->overline_color = face->foreground; | |
| 7034 face->overline_color_defaulted_p = 1; | |
| 7035 face->overline_p = 1; | |
| 7036 } | |
| 7037 | |
| 7038 strike_through = attrs[LFACE_STRIKE_THROUGH_INDEX]; | |
| 7039 if (STRINGP (strike_through)) | |
| 7040 { | |
| 7041 face->strike_through_color | |
| 7042 = load_color (f, face, attrs[LFACE_STRIKE_THROUGH_INDEX], | |
| 7043 LFACE_STRIKE_THROUGH_INDEX); | |
| 7044 face->strike_through_p = 1; | |
| 7045 } | |
| 7046 else if (EQ (strike_through, Qt)) | |
| 7047 { | |
| 7048 face->strike_through_color = face->foreground; | |
| 7049 face->strike_through_color_defaulted_p = 1; | |
| 7050 face->strike_through_p = 1; | |
| 7051 } | |
| 7052 | |
| 7053 stipple = attrs[LFACE_STIPPLE_INDEX]; | |
| 7054 if (!NILP (stipple)) | |
| 7055 face->stipple = load_pixmap (f, stipple, &face->pixmap_w, &face->pixmap_h); | |
| 7056 | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
7057 xassert (FACE_SUITABLE_FOR_CHAR_P (face, c)); |
| 24995 | 7058 return face; |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
7059 #endif /* HAVE_WINDOW_SYSTEM */ |
| 24995 | 7060 } |
| 7061 | |
| 7062 | |
|
30973
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7063 /* Map a specified color of face FACE on frame F to a tty color index. |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7064 IDX is either LFACE_FOREGROUND_INDEX or LFACE_BACKGROUND_INDEX, and |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7065 specifies which color to map. Set *DEFAULTED to 1 if mapping to the |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7066 default foreground/background colors. */ |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7067 |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7068 static void |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7069 map_tty_color (f, face, idx, defaulted) |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7070 struct frame *f; |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7071 struct face *face; |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7072 enum lface_attribute_index idx; |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7073 int *defaulted; |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7074 { |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7075 Lisp_Object frame, color, def; |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7076 int foreground_p = idx == LFACE_FOREGROUND_INDEX; |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7077 unsigned long default_pixel, default_other_pixel, pixel; |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7078 |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7079 xassert (idx == LFACE_FOREGROUND_INDEX || idx == LFACE_BACKGROUND_INDEX); |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7080 |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7081 if (foreground_p) |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7082 { |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7083 pixel = default_pixel = FACE_TTY_DEFAULT_FG_COLOR; |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7084 default_other_pixel = FACE_TTY_DEFAULT_BG_COLOR; |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7085 } |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7086 else |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7087 { |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7088 pixel = default_pixel = FACE_TTY_DEFAULT_BG_COLOR; |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7089 default_other_pixel = FACE_TTY_DEFAULT_FG_COLOR; |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7090 } |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48384
diff
changeset
|
7091 |
|
30973
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7092 XSETFRAME (frame, f); |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7093 color = face->lface[idx]; |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48384
diff
changeset
|
7094 |
|
30973
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7095 if (STRINGP (color) |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
7096 && SCHARS (color) |
|
30973
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7097 && CONSP (Vtty_defined_color_alist) |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7098 && (def = assq_no_quit (color, call1 (Qtty_color_alist, frame)), |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7099 CONSP (def))) |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7100 { |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7101 /* Associations in tty-defined-color-alist are of the form |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7102 (NAME INDEX R G B). We need the INDEX part. */ |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7103 pixel = XINT (XCAR (XCDR (def))); |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7104 } |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7105 |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7106 if (pixel == default_pixel && STRINGP (color)) |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7107 { |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7108 pixel = load_color (f, face, color, idx); |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7109 |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7110 #if defined (MSDOS) || defined (WINDOWSNT) |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7111 /* If the foreground of the default face is the default color, |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7112 use the foreground color defined by the frame. */ |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7113 #ifdef MSDOS |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7114 if (FRAME_MSDOS_P (f)) |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7115 { |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7116 #endif /* MSDOS */ |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7117 if (pixel == default_pixel |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7118 || pixel == FACE_TTY_DEFAULT_COLOR) |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7119 { |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7120 if (foreground_p) |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7121 pixel = FRAME_FOREGROUND_PIXEL (f); |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7122 else |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7123 pixel = FRAME_BACKGROUND_PIXEL (f); |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7124 face->lface[idx] = tty_color_name (f, pixel); |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7125 *defaulted = 1; |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7126 } |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7127 else if (pixel == default_other_pixel) |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7128 { |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7129 if (foreground_p) |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7130 pixel = FRAME_BACKGROUND_PIXEL (f); |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7131 else |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7132 pixel = FRAME_FOREGROUND_PIXEL (f); |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7133 face->lface[idx] = tty_color_name (f, pixel); |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7134 *defaulted = 1; |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7135 } |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7136 #ifdef MSDOS |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7137 } |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7138 #endif |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7139 #endif /* MSDOS or WINDOWSNT */ |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7140 } |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7141 |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7142 if (foreground_p) |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7143 face->foreground = pixel; |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7144 else |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7145 face->background = pixel; |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7146 } |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7147 |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7148 |
| 24995 | 7149 /* Realize the fully-specified face with attributes ATTRS in face |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
7150 cache CACHE for character C. Do it for TTY frame CACHE->f. Value is a |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
7151 pointer to the newly created realized face. */ |
| 24995 | 7152 |
| 7153 static struct face * | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
7154 realize_tty_face (cache, attrs, c) |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
7155 struct face_cache *cache; |
| 24995 | 7156 Lisp_Object *attrs; |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
7157 int c; |
| 24995 | 7158 { |
| 7159 struct face *face; | |
| 7160 int weight, slant; | |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
7161 int face_colors_defaulted = 0; |
|
30973
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7162 struct frame *f = cache->f; |
| 24995 | 7163 |
| 7164 /* Frame must be a termcap frame. */ | |
| 35443 | 7165 xassert (FRAME_TERMCAP_P (cache->f) || FRAME_MSDOS_P (cache->f)); |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
7166 |
| 24995 | 7167 /* Allocate a new realized face. */ |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
7168 face = make_realized_face (attrs); |
| 35443 | 7169 face->font_name = FRAME_MSDOS_P (cache->f) ? "ms-dos" : "tty"; |
| 24995 | 7170 |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
7171 /* Map face attributes to TTY appearances. We map slant to |
| 24995 | 7172 dimmed text because we want italic text to appear differently |
| 7173 and because dimmed text is probably used infrequently. */ | |
| 7174 weight = face_numeric_weight (attrs[LFACE_WEIGHT_INDEX]); | |
| 7175 slant = face_numeric_slant (attrs[LFACE_SLANT_INDEX]); | |
| 7176 | |
| 7177 if (weight > XLFD_WEIGHT_MEDIUM) | |
| 7178 face->tty_bold_p = 1; | |
| 7179 if (weight < XLFD_WEIGHT_MEDIUM || slant != XLFD_SLANT_ROMAN) | |
| 7180 face->tty_dim_p = 1; | |
| 7181 if (!NILP (attrs[LFACE_UNDERLINE_INDEX])) | |
| 7182 face->tty_underline_p = 1; | |
| 7183 if (!NILP (attrs[LFACE_INVERSE_INDEX])) | |
| 7184 face->tty_reverse_p = 1; | |
| 7185 | |
| 7186 /* Map color names to color indices. */ | |
|
30973
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7187 map_tty_color (f, face, LFACE_FOREGROUND_INDEX, &face_colors_defaulted); |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7188 map_tty_color (f, face, LFACE_BACKGROUND_INDEX, &face_colors_defaulted); |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48384
diff
changeset
|
7189 |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
7190 /* Swap colors if face is inverse-video. If the colors are taken |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
7191 from the frame colors, they are already inverted, since the |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
7192 frame-creation function calls x-handle-reverse-video. */ |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
7193 if (face->tty_reverse_p && !face_colors_defaulted) |
|
25114
be5d3e21fbd7
(load_color): Remove static from definition and remove
Eli Zaretskii <eliz@gnu.org>
parents:
25092
diff
changeset
|
7194 { |
|
be5d3e21fbd7
(load_color): Remove static from definition and remove
Eli Zaretskii <eliz@gnu.org>
parents:
25092
diff
changeset
|
7195 unsigned long tem = face->foreground; |
|
be5d3e21fbd7
(load_color): Remove static from definition and remove
Eli Zaretskii <eliz@gnu.org>
parents:
25092
diff
changeset
|
7196 face->foreground = face->background; |
|
be5d3e21fbd7
(load_color): Remove static from definition and remove
Eli Zaretskii <eliz@gnu.org>
parents:
25092
diff
changeset
|
7197 face->background = tem; |
|
be5d3e21fbd7
(load_color): Remove static from definition and remove
Eli Zaretskii <eliz@gnu.org>
parents:
25092
diff
changeset
|
7198 } |
|
be5d3e21fbd7
(load_color): Remove static from definition and remove
Eli Zaretskii <eliz@gnu.org>
parents:
25092
diff
changeset
|
7199 |
|
28529
b8ac36c58391
(tty_suppress_bold_inverse_default_colors_p): New
Gerd Moellmann <gerd@gnu.org>
parents:
28464
diff
changeset
|
7200 if (tty_suppress_bold_inverse_default_colors_p |
|
b8ac36c58391
(tty_suppress_bold_inverse_default_colors_p): New
Gerd Moellmann <gerd@gnu.org>
parents:
28464
diff
changeset
|
7201 && face->tty_bold_p |
|
b8ac36c58391
(tty_suppress_bold_inverse_default_colors_p): New
Gerd Moellmann <gerd@gnu.org>
parents:
28464
diff
changeset
|
7202 && face->background == FACE_TTY_DEFAULT_FG_COLOR |
|
b8ac36c58391
(tty_suppress_bold_inverse_default_colors_p): New
Gerd Moellmann <gerd@gnu.org>
parents:
28464
diff
changeset
|
7203 && face->foreground == FACE_TTY_DEFAULT_BG_COLOR) |
|
b8ac36c58391
(tty_suppress_bold_inverse_default_colors_p): New
Gerd Moellmann <gerd@gnu.org>
parents:
28464
diff
changeset
|
7204 face->tty_bold_p = 0; |
|
b8ac36c58391
(tty_suppress_bold_inverse_default_colors_p): New
Gerd Moellmann <gerd@gnu.org>
parents:
28464
diff
changeset
|
7205 |
| 24995 | 7206 return face; |
| 7207 } | |
| 7208 | |
| 7209 | |
|
28529
b8ac36c58391
(tty_suppress_bold_inverse_default_colors_p): New
Gerd Moellmann <gerd@gnu.org>
parents:
28464
diff
changeset
|
7210 DEFUN ("tty-suppress-bold-inverse-default-colors", |
|
b8ac36c58391
(tty_suppress_bold_inverse_default_colors_p): New
Gerd Moellmann <gerd@gnu.org>
parents:
28464
diff
changeset
|
7211 Ftty_suppress_bold_inverse_default_colors, |
|
b8ac36c58391
(tty_suppress_bold_inverse_default_colors_p): New
Gerd Moellmann <gerd@gnu.org>
parents:
28464
diff
changeset
|
7212 Stty_suppress_bold_inverse_default_colors, 1, 1, 0, |
|
40598
7f3db64c7d42
(Finternal_merge_in_global_face): Reindent.
Pavel Jan?k <Pavel@Janik.cz>
parents:
40555
diff
changeset
|
7213 doc: /* Suppress/allow boldness of faces with inverse default colors. |
|
39914
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
7214 SUPPRESS non-nil means suppress it. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
7215 This affects bold faces on TTYs whose foreground is the default background |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
7216 color of the display and whose background is the default foreground color. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
7217 For such faces, the bold face attribute is ignored if this variable |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
7218 is non-nil. */) |
|
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
7219 (suppress) |
|
28529
b8ac36c58391
(tty_suppress_bold_inverse_default_colors_p): New
Gerd Moellmann <gerd@gnu.org>
parents:
28464
diff
changeset
|
7220 Lisp_Object suppress; |
|
b8ac36c58391
(tty_suppress_bold_inverse_default_colors_p): New
Gerd Moellmann <gerd@gnu.org>
parents:
28464
diff
changeset
|
7221 { |
|
b8ac36c58391
(tty_suppress_bold_inverse_default_colors_p): New
Gerd Moellmann <gerd@gnu.org>
parents:
28464
diff
changeset
|
7222 tty_suppress_bold_inverse_default_colors_p = !NILP (suppress); |
|
b8ac36c58391
(tty_suppress_bold_inverse_default_colors_p): New
Gerd Moellmann <gerd@gnu.org>
parents:
28464
diff
changeset
|
7223 ++face_change_count; |
|
b8ac36c58391
(tty_suppress_bold_inverse_default_colors_p): New
Gerd Moellmann <gerd@gnu.org>
parents:
28464
diff
changeset
|
7224 return suppress; |
|
b8ac36c58391
(tty_suppress_bold_inverse_default_colors_p): New
Gerd Moellmann <gerd@gnu.org>
parents:
28464
diff
changeset
|
7225 } |
|
b8ac36c58391
(tty_suppress_bold_inverse_default_colors_p): New
Gerd Moellmann <gerd@gnu.org>
parents:
28464
diff
changeset
|
7226 |
|
b8ac36c58391
(tty_suppress_bold_inverse_default_colors_p): New
Gerd Moellmann <gerd@gnu.org>
parents:
28464
diff
changeset
|
7227 |
| 24995 | 7228 |
| 7229 /*********************************************************************** | |
| 7230 Computing Faces | |
| 7231 ***********************************************************************/ | |
| 7232 | |
| 7233 /* Return the ID of the face to use to display character CH with face | |
| 7234 property PROP on frame F in current_buffer. */ | |
| 7235 | |
| 7236 int | |
| 7237 compute_char_face (f, ch, prop) | |
| 7238 struct frame *f; | |
| 7239 int ch; | |
| 7240 Lisp_Object prop; | |
| 7241 { | |
| 7242 int face_id; | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
7243 |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
7244 if (NILP (current_buffer->enable_multibyte_characters)) |
|
37433
94967574484c
(compute_char_face): If buffer is unibyte, set CH to
Gerd Moellmann <gerd@gnu.org>
parents:
37394
diff
changeset
|
7245 ch = 0; |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
7246 |
| 24995 | 7247 if (NILP (prop)) |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
7248 { |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
7249 struct face *face = FACE_FROM_ID (f, DEFAULT_FACE_ID); |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
7250 face_id = FACE_FOR_CHAR (f, face, ch); |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
7251 } |
| 24995 | 7252 else |
| 7253 { | |
| 7254 Lisp_Object attrs[LFACE_VECTOR_SIZE]; | |
| 7255 struct face *default_face = FACE_FROM_ID (f, DEFAULT_FACE_ID); | |
| 7256 bcopy (default_face->lface, attrs, sizeof attrs); | |
| 7257 merge_face_vector_with_property (f, attrs, prop); | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
7258 face_id = lookup_face (f, attrs, ch, NULL); |
| 24995 | 7259 } |
| 7260 | |
| 7261 return face_id; | |
| 7262 } | |
| 7263 | |
| 7264 /* Return the face ID associated with buffer position POS for | |
| 7265 displaying ASCII characters. Return in *ENDPTR the position at | |
| 7266 which a different face is needed, as far as text properties and | |
| 7267 overlays are concerned. W is a window displaying current_buffer. | |
| 7268 | |
| 7269 REGION_BEG, REGION_END delimit the region, so it can be | |
| 7270 highlighted. | |
| 7271 | |
| 7272 LIMIT is a position not to scan beyond. That is to limit the time | |
| 7273 this function can take. | |
| 7274 | |
| 7275 If MOUSE is non-zero, use the character's mouse-face, not its face. | |
| 7276 | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
7277 The face returned is suitable for displaying ASCII characters. */ |
| 24995 | 7278 |
| 7279 int | |
| 7280 face_at_buffer_position (w, pos, region_beg, region_end, | |
| 7281 endptr, limit, mouse) | |
| 2391 | 7282 struct window *w; |
| 2342 | 7283 int pos; |
|
2795
e97e96fb0cb8
(compute_char_face): New args REGION_BEG, REGION_END.
Richard M. Stallman <rms@gnu.org>
parents:
2784
diff
changeset
|
7284 int region_beg, region_end; |
| 2342 | 7285 int *endptr; |
|
5084
863e092a5891
(compute_char_face): Accept new arg LIMIT.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
7286 int limit; |
|
6615
96ddf85642d1
(compute_char_face): New arg MOUSE.
Richard M. Stallman <rms@gnu.org>
parents:
5858
diff
changeset
|
7287 int mouse; |
| 2342 | 7288 { |
| 24995 | 7289 struct frame *f = XFRAME (w->frame); |
| 7290 Lisp_Object attrs[LFACE_VECTOR_SIZE]; | |
|
2767
482fa0725db6
* xfaces.c (intern_frame_face): Exchange order of arguments, to
Jim Blandy <jimb@redhat.com>
parents:
2743
diff
changeset
|
7291 Lisp_Object prop, position; |
| 24995 | 7292 int i, noverlays; |
| 2342 | 7293 Lisp_Object *overlay_vec; |
| 2391 | 7294 Lisp_Object frame; |
|
2784
f8c6796b7777
* xfaces.c (compute_char_face): When merging the overlays,
Jim Blandy <jimb@redhat.com>
parents:
2767
diff
changeset
|
7295 int endpos; |
| 24995 | 7296 Lisp_Object propname = mouse ? Qmouse_face : Qface; |
| 7297 Lisp_Object limit1, end; | |
| 7298 struct face *default_face; | |
|
2784
f8c6796b7777
* xfaces.c (compute_char_face): When merging the overlays,
Jim Blandy <jimb@redhat.com>
parents:
2767
diff
changeset
|
7299 |
|
f8c6796b7777
* xfaces.c (compute_char_face): When merging the overlays,
Jim Blandy <jimb@redhat.com>
parents:
2767
diff
changeset
|
7300 /* W must display the current buffer. We could write this function |
|
f8c6796b7777
* xfaces.c (compute_char_face): When merging the overlays,
Jim Blandy <jimb@redhat.com>
parents:
2767
diff
changeset
|
7301 to use the frame and buffer of W, but right now it doesn't. */ |
|
25359
14135aa647e2
(face_at_buffer_position): Don't xassert that
Gerd Moellmann <gerd@gnu.org>
parents:
25301
diff
changeset
|
7302 /* xassert (XBUFFER (w->buffer) == current_buffer); */ |
| 2391 | 7303 |
|
9284
a969e0eefaf5
(compute_char_face): Use new accessor macros instead of calling XSET directly.
Karl Heuer <kwzh@gnu.org>
parents:
9186
diff
changeset
|
7304 XSETFRAME (frame, f); |
| 24995 | 7305 XSETFASTINT (position, pos); |
| 2342 | 7306 |
|
2784
f8c6796b7777
* xfaces.c (compute_char_face): When merging the overlays,
Jim Blandy <jimb@redhat.com>
parents:
2767
diff
changeset
|
7307 endpos = ZV; |
|
2795
e97e96fb0cb8
(compute_char_face): New args REGION_BEG, REGION_END.
Richard M. Stallman <rms@gnu.org>
parents:
2784
diff
changeset
|
7308 if (pos < region_beg && region_beg < endpos) |
|
e97e96fb0cb8
(compute_char_face): New args REGION_BEG, REGION_END.
Richard M. Stallman <rms@gnu.org>
parents:
2784
diff
changeset
|
7309 endpos = region_beg; |
|
2784
f8c6796b7777
* xfaces.c (compute_char_face): When merging the overlays,
Jim Blandy <jimb@redhat.com>
parents:
2767
diff
changeset
|
7310 |
| 24995 | 7311 /* Get the `face' or `mouse_face' text property at POS, and |
| 7312 determine the next position at which the property changes. */ | |
|
6615
96ddf85642d1
(compute_char_face): New arg MOUSE.
Richard M. Stallman <rms@gnu.org>
parents:
5858
diff
changeset
|
7313 prop = Fget_text_property (position, propname, w->buffer); |
| 24995 | 7314 XSETFASTINT (limit1, (limit < endpos ? limit : endpos)); |
| 7315 end = Fnext_single_property_change (position, propname, w->buffer, limit1); | |
| 7316 if (INTEGERP (end)) | |
| 7317 endpos = XINT (end); | |
| 7318 | |
| 7319 /* Look at properties from overlays. */ | |
|
2767
482fa0725db6
* xfaces.c (intern_frame_face): Exchange order of arguments, to
Jim Blandy <jimb@redhat.com>
parents:
2743
diff
changeset
|
7320 { |
|
2784
f8c6796b7777
* xfaces.c (compute_char_face): When merging the overlays,
Jim Blandy <jimb@redhat.com>
parents:
2767
diff
changeset
|
7321 int next_overlay; |
|
2838
5f6a2d52d2ef
(compute_char_face): Pass 0 as EXTEND arg to overlays_at.
Richard M. Stallman <rms@gnu.org>
parents:
2821
diff
changeset
|
7322 int len; |
|
2767
482fa0725db6
* xfaces.c (intern_frame_face): Exchange order of arguments, to
Jim Blandy <jimb@redhat.com>
parents:
2743
diff
changeset
|
7323 |
|
2838
5f6a2d52d2ef
(compute_char_face): Pass 0 as EXTEND arg to overlays_at.
Richard M. Stallman <rms@gnu.org>
parents:
2821
diff
changeset
|
7324 /* First try with room for 40 overlays. */ |
|
5f6a2d52d2ef
(compute_char_face): Pass 0 as EXTEND arg to overlays_at.
Richard M. Stallman <rms@gnu.org>
parents:
2821
diff
changeset
|
7325 len = 40; |
|
5f6a2d52d2ef
(compute_char_face): Pass 0 as EXTEND arg to overlays_at.
Richard M. Stallman <rms@gnu.org>
parents:
2821
diff
changeset
|
7326 overlay_vec = (Lisp_Object *) alloca (len * sizeof (Lisp_Object)); |
|
11420
8ab99c3646a7
(compute_char_face): Don't use NULL.
Richard M. Stallman <rms@gnu.org>
parents:
11416
diff
changeset
|
7327 noverlays = overlays_at (pos, 0, &overlay_vec, &len, |
|
30698
75ff6aa32bf0
(face_at_buffer_position): Update call to overlays_at.
Miles Bader <miles@gnu.org>
parents:
30601
diff
changeset
|
7328 &next_overlay, NULL, 0); |
| 24995 | 7329 |
| 7330 /* If there are more than 40, make enough space for all, and try | |
| 7331 again. */ | |
|
2838
5f6a2d52d2ef
(compute_char_face): Pass 0 as EXTEND arg to overlays_at.
Richard M. Stallman <rms@gnu.org>
parents:
2821
diff
changeset
|
7332 if (noverlays > len) |
|
5f6a2d52d2ef
(compute_char_face): Pass 0 as EXTEND arg to overlays_at.
Richard M. Stallman <rms@gnu.org>
parents:
2821
diff
changeset
|
7333 { |
|
5f6a2d52d2ef
(compute_char_face): Pass 0 as EXTEND arg to overlays_at.
Richard M. Stallman <rms@gnu.org>
parents:
2821
diff
changeset
|
7334 len = noverlays; |
|
5f6a2d52d2ef
(compute_char_face): Pass 0 as EXTEND arg to overlays_at.
Richard M. Stallman <rms@gnu.org>
parents:
2821
diff
changeset
|
7335 overlay_vec = (Lisp_Object *) alloca (len * sizeof (Lisp_Object)); |
|
8965
a7947f88d558
(compute_char_face): Pass new arg to overlays_at.
Richard M. Stallman <rms@gnu.org>
parents:
8848
diff
changeset
|
7336 noverlays = overlays_at (pos, 0, &overlay_vec, &len, |
|
30698
75ff6aa32bf0
(face_at_buffer_position): Update call to overlays_at.
Miles Bader <miles@gnu.org>
parents:
30601
diff
changeset
|
7337 &next_overlay, NULL, 0); |
|
2838
5f6a2d52d2ef
(compute_char_face): Pass 0 as EXTEND arg to overlays_at.
Richard M. Stallman <rms@gnu.org>
parents:
2821
diff
changeset
|
7338 } |
|
5f6a2d52d2ef
(compute_char_face): Pass 0 as EXTEND arg to overlays_at.
Richard M. Stallman <rms@gnu.org>
parents:
2821
diff
changeset
|
7339 |
|
2784
f8c6796b7777
* xfaces.c (compute_char_face): When merging the overlays,
Jim Blandy <jimb@redhat.com>
parents:
2767
diff
changeset
|
7340 if (next_overlay < endpos) |
|
f8c6796b7777
* xfaces.c (compute_char_face): When merging the overlays,
Jim Blandy <jimb@redhat.com>
parents:
2767
diff
changeset
|
7341 endpos = next_overlay; |
|
2767
482fa0725db6
* xfaces.c (intern_frame_face): Exchange order of arguments, to
Jim Blandy <jimb@redhat.com>
parents:
2743
diff
changeset
|
7342 } |
|
482fa0725db6
* xfaces.c (intern_frame_face): Exchange order of arguments, to
Jim Blandy <jimb@redhat.com>
parents:
2743
diff
changeset
|
7343 |
|
482fa0725db6
* xfaces.c (intern_frame_face): Exchange order of arguments, to
Jim Blandy <jimb@redhat.com>
parents:
2743
diff
changeset
|
7344 *endptr = endpos; |
| 2342 | 7345 |
| 24995 | 7346 default_face = FACE_FROM_ID (f, DEFAULT_FACE_ID); |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
7347 |
| 24995 | 7348 /* Optimize common cases where we can use the default face. */ |
| 7349 if (noverlays == 0 | |
| 7350 && NILP (prop) | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
7351 && !(pos >= region_beg && pos < region_end)) |
| 24995 | 7352 return DEFAULT_FACE_ID; |
| 7353 | |
| 7354 /* Begin with attributes from the default face. */ | |
| 7355 bcopy (default_face->lface, attrs, sizeof attrs); | |
| 7356 | |
| 7357 /* Merge in attributes specified via text properties. */ | |
| 7358 if (!NILP (prop)) | |
| 7359 merge_face_vector_with_property (f, attrs, prop); | |
| 7360 | |
| 7361 /* Now merge the overlay data. */ | |
|
5858
021e58905963
(compute_char_face): Extract overlay-sorting code as a separate function,
Karl Heuer <kwzh@gnu.org>
parents:
5801
diff
changeset
|
7362 noverlays = sort_overlays (overlay_vec, noverlays, w); |
| 2342 | 7363 for (i = 0; i < noverlays; i++) |
| 7364 { | |
|
19128
e789b647f15b
(merge_face_list): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18723
diff
changeset
|
7365 Lisp_Object oend; |
|
e789b647f15b
(merge_face_list): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18723
diff
changeset
|
7366 int oendpos; |
|
9186
45bac5feb065
(compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents:
9184
diff
changeset
|
7367 |
|
19128
e789b647f15b
(merge_face_list): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18723
diff
changeset
|
7368 prop = Foverlay_get (overlay_vec[i], propname); |
| 24995 | 7369 if (!NILP (prop)) |
| 7370 merge_face_vector_with_property (f, attrs, prop); | |
| 2342 | 7371 |
|
19128
e789b647f15b
(merge_face_list): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18723
diff
changeset
|
7372 oend = OVERLAY_END (overlay_vec[i]); |
|
e789b647f15b
(merge_face_list): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18723
diff
changeset
|
7373 oendpos = OVERLAY_POSITION (oend); |
|
e789b647f15b
(merge_face_list): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18723
diff
changeset
|
7374 if (oendpos < endpos) |
|
e789b647f15b
(merge_face_list): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18723
diff
changeset
|
7375 endpos = oendpos; |
| 2342 | 7376 } |
| 7377 | |
| 24995 | 7378 /* If in the region, merge in the region face. */ |
|
2795
e97e96fb0cb8
(compute_char_face): New args REGION_BEG, REGION_END.
Richard M. Stallman <rms@gnu.org>
parents:
2784
diff
changeset
|
7379 if (pos >= region_beg && pos < region_end) |
|
e97e96fb0cb8
(compute_char_face): New args REGION_BEG, REGION_END.
Richard M. Stallman <rms@gnu.org>
parents:
2784
diff
changeset
|
7380 { |
| 24995 | 7381 Lisp_Object region_face = lface_from_face_name (f, Qregion, 0); |
| 31178 | 7382 merge_face_vectors (f, XVECTOR (region_face)->contents, attrs, Qnil); |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
7383 |
|
2795
e97e96fb0cb8
(compute_char_face): New args REGION_BEG, REGION_END.
Richard M. Stallman <rms@gnu.org>
parents:
2784
diff
changeset
|
7384 if (region_end < endpos) |
|
e97e96fb0cb8
(compute_char_face): New args REGION_BEG, REGION_END.
Richard M. Stallman <rms@gnu.org>
parents:
2784
diff
changeset
|
7385 endpos = region_end; |
|
e97e96fb0cb8
(compute_char_face): New args REGION_BEG, REGION_END.
Richard M. Stallman <rms@gnu.org>
parents:
2784
diff
changeset
|
7386 } |
|
e97e96fb0cb8
(compute_char_face): New args REGION_BEG, REGION_END.
Richard M. Stallman <rms@gnu.org>
parents:
2784
diff
changeset
|
7387 |
| 2342 | 7388 *endptr = endpos; |
| 7389 | |
| 24995 | 7390 /* Look up a realized face with the given face attributes, |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
7391 or realize a new one for ASCII characters. */ |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
7392 return lookup_face (f, attrs, 0, NULL); |
| 2342 | 7393 } |
|
19128
e789b647f15b
(merge_face_list): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18723
diff
changeset
|
7394 |
| 24995 | 7395 |
| 7396 /* Compute the face at character position POS in Lisp string STRING on | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
7397 window W, for ASCII characters. |
| 24995 | 7398 |
| 7399 If STRING is an overlay string, it comes from position BUFPOS in | |
| 7400 current_buffer, otherwise BUFPOS is zero to indicate that STRING is | |
| 7401 not an overlay string. W must display the current buffer. | |
| 7402 REGION_BEG and REGION_END give the start and end positions of the | |
|
34289
1bf333d1b1de
(face_at_string_position): Update function comment.
Gerd Moellmann <gerd@gnu.org>
parents:
34242
diff
changeset
|
7403 region; both are -1 if no region is visible. |
|
1bf333d1b1de
(face_at_string_position): Update function comment.
Gerd Moellmann <gerd@gnu.org>
parents:
34242
diff
changeset
|
7404 |
|
1bf333d1b1de
(face_at_string_position): Update function comment.
Gerd Moellmann <gerd@gnu.org>
parents:
34242
diff
changeset
|
7405 BASE_FACE_ID is the id of a face to merge with. For strings coming |
|
1bf333d1b1de
(face_at_string_position): Update function comment.
Gerd Moellmann <gerd@gnu.org>
parents:
34242
diff
changeset
|
7406 from overlays or the `display' property it is the face at BUFPOS. |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
7407 |
|
36672
acf152adbf82
(face_at_string_position): Add parameter MOUSE_P.
Gerd Moellmann <gerd@gnu.org>
parents:
36481
diff
changeset
|
7408 If MOUSE_P is non-zero, use the character's mouse-face, not its face. |
|
acf152adbf82
(face_at_string_position): Add parameter MOUSE_P.
Gerd Moellmann <gerd@gnu.org>
parents:
36481
diff
changeset
|
7409 |
| 24995 | 7410 Set *ENDPTR to the next position where to check for faces in |
| 7411 STRING; -1 if the face is constant from POS to the end of the | |
| 7412 string. | |
| 7413 | |
| 7414 Value is the id of the face to use. The face returned is suitable | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
7415 for displaying ASCII characters. */ |
| 24995 | 7416 |
| 7417 int | |
| 7418 face_at_string_position (w, string, pos, bufpos, region_beg, | |
|
36672
acf152adbf82
(face_at_string_position): Add parameter MOUSE_P.
Gerd Moellmann <gerd@gnu.org>
parents:
36481
diff
changeset
|
7419 region_end, endptr, base_face_id, mouse_p) |
| 24995 | 7420 struct window *w; |
| 7421 Lisp_Object string; | |
| 7422 int pos, bufpos; | |
| 7423 int region_beg, region_end; | |
| 7424 int *endptr; | |
| 7425 enum face_id base_face_id; | |
|
36672
acf152adbf82
(face_at_string_position): Add parameter MOUSE_P.
Gerd Moellmann <gerd@gnu.org>
parents:
36481
diff
changeset
|
7426 int mouse_p; |
|
19128
e789b647f15b
(merge_face_list): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18723
diff
changeset
|
7427 { |
| 24995 | 7428 Lisp_Object prop, position, end, limit; |
| 7429 struct frame *f = XFRAME (WINDOW_FRAME (w)); | |
| 7430 Lisp_Object attrs[LFACE_VECTOR_SIZE]; | |
| 7431 struct face *base_face; | |
| 7432 int multibyte_p = STRING_MULTIBYTE (string); | |
|
36672
acf152adbf82
(face_at_string_position): Add parameter MOUSE_P.
Gerd Moellmann <gerd@gnu.org>
parents:
36481
diff
changeset
|
7433 Lisp_Object prop_name = mouse_p ? Qmouse_face : Qface; |
| 24995 | 7434 |
| 7435 /* Get the value of the face property at the current position within | |
| 7436 STRING. Value is nil if there is no face property. */ | |
| 7437 XSETFASTINT (position, pos); | |
|
36672
acf152adbf82
(face_at_string_position): Add parameter MOUSE_P.
Gerd Moellmann <gerd@gnu.org>
parents:
36481
diff
changeset
|
7438 prop = Fget_text_property (position, prop_name, string); |
| 24995 | 7439 |
| 7440 /* Get the next position at which to check for faces. Value of end | |
| 7441 is nil if face is constant all the way to the end of the string. | |
| 7442 Otherwise it is a string position where to check faces next. | |
| 7443 Limit is the maximum position up to which to check for property | |
| 7444 changes in Fnext_single_property_change. Strings are usually | |
| 7445 short, so set the limit to the end of the string. */ | |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
7446 XSETFASTINT (limit, SCHARS (string)); |
|
36672
acf152adbf82
(face_at_string_position): Add parameter MOUSE_P.
Gerd Moellmann <gerd@gnu.org>
parents:
36481
diff
changeset
|
7447 end = Fnext_single_property_change (position, prop_name, string, limit); |
| 24995 | 7448 if (INTEGERP (end)) |
| 7449 *endptr = XFASTINT (end); | |
|
19128
e789b647f15b
(merge_face_list): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18723
diff
changeset
|
7450 else |
| 24995 | 7451 *endptr = -1; |
| 7452 | |
| 7453 base_face = FACE_FROM_ID (f, base_face_id); | |
| 7454 xassert (base_face); | |
| 7455 | |
| 7456 /* Optimize the default case that there is no face property and we | |
| 7457 are not in the region. */ | |
| 7458 if (NILP (prop) | |
| 7459 && (base_face_id != DEFAULT_FACE_ID | |
| 7460 /* BUFPOS <= 0 means STRING is not an overlay string, so | |
| 7461 that the region doesn't have to be taken into account. */ | |
| 7462 || bufpos <= 0 | |
| 7463 || bufpos < region_beg | |
| 7464 || bufpos >= region_end) | |
| 7465 && (multibyte_p | |
| 7466 /* We can't realize faces for different charsets differently | |
| 7467 if we don't have fonts, so we can stop here if not working | |
| 7468 on a window-system frame. */ | |
| 7469 || !FRAME_WINDOW_P (f) | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
7470 || FACE_SUITABLE_FOR_CHAR_P (base_face, 0))) |
| 24995 | 7471 return base_face->id; |
| 7472 | |
| 7473 /* Begin with attributes from the base face. */ | |
| 7474 bcopy (base_face->lface, attrs, sizeof attrs); | |
| 7475 | |
| 7476 /* Merge in attributes specified via text properties. */ | |
| 7477 if (!NILP (prop)) | |
| 7478 merge_face_vector_with_property (f, attrs, prop); | |
| 7479 | |
| 7480 /* If in the region, merge in the region face. */ | |
| 7481 if (bufpos | |
| 7482 && bufpos >= region_beg | |
| 7483 && bufpos < region_end) | |
|
19128
e789b647f15b
(merge_face_list): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18723
diff
changeset
|
7484 { |
| 24995 | 7485 Lisp_Object region_face = lface_from_face_name (f, Qregion, 0); |
| 31178 | 7486 merge_face_vectors (f, XVECTOR (region_face)->contents, attrs, Qnil); |
|
19128
e789b647f15b
(merge_face_list): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18723
diff
changeset
|
7487 } |
| 24995 | 7488 |
| 7489 /* Look up a realized face with the given face attributes, | |
|
28230
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
7490 or realize a new one for ASCII characters. */ |
|
8e330f701881
(Qx_charset_registry, Vface_default_registry):
Kenichi Handa <handa@m17n.org>
parents:
27984
diff
changeset
|
7491 return lookup_face (f, attrs, 0, NULL); |
|
3074
96b4623fdeb3
* xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents:
3065
diff
changeset
|
7492 } |
|
96b4623fdeb3
* xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents:
3065
diff
changeset
|
7493 |
|
96b4623fdeb3
* xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents:
3065
diff
changeset
|
7494 |
| 2336 | 7495 |
| 24995 | 7496 /*********************************************************************** |
| 7497 Tests | |
| 7498 ***********************************************************************/ | |
| 7499 | |
| 7500 #if GLYPH_DEBUG | |
| 7501 | |
| 7502 /* Print the contents of the realized face FACE to stderr. */ | |
| 7503 | |
| 7504 static void | |
| 7505 dump_realized_face (face) | |
| 7506 struct face *face; | |
| 2336 | 7507 { |
| 24995 | 7508 fprintf (stderr, "ID: %d\n", face->id); |
| 7509 #ifdef HAVE_X_WINDOWS | |
| 7510 fprintf (stderr, "gc: %d\n", (int) face->gc); | |
| 7511 #endif | |
| 7512 fprintf (stderr, "foreground: 0x%lx (%s)\n", | |
| 7513 face->foreground, | |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
7514 SDATA (face->lface[LFACE_FOREGROUND_INDEX])); |
| 24995 | 7515 fprintf (stderr, "background: 0x%lx (%s)\n", |
| 7516 face->background, | |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
7517 SDATA (face->lface[LFACE_BACKGROUND_INDEX])); |
| 24995 | 7518 fprintf (stderr, "font_name: %s (%s)\n", |
| 7519 face->font_name, | |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
7520 SDATA (face->lface[LFACE_FAMILY_INDEX])); |
| 24995 | 7521 #ifdef HAVE_X_WINDOWS |
| 7522 fprintf (stderr, "font = %p\n", face->font); | |
| 7523 #endif | |
| 7524 fprintf (stderr, "font_info_id = %d\n", face->font_info_id); | |
| 7525 fprintf (stderr, "fontset: %d\n", face->fontset); | |
| 7526 fprintf (stderr, "underline: %d (%s)\n", | |
| 7527 face->underline_p, | |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
7528 SDATA (Fsymbol_name (face->lface[LFACE_UNDERLINE_INDEX]))); |
| 24995 | 7529 fprintf (stderr, "hash: %d\n", face->hash); |
| 7530 fprintf (stderr, "charset: %d\n", face->charset); | |
| 7531 } | |
| 7532 | |
| 7533 | |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
7534 DEFUN ("dump-face", Fdump_face, Sdump_face, 0, 1, 0, doc: /* */) |
|
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
7535 (n) |
| 24995 | 7536 Lisp_Object n; |
| 7537 { | |
| 7538 if (NILP (n)) | |
| 2336 | 7539 { |
| 24995 | 7540 int i; |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
7541 |
| 24995 | 7542 fprintf (stderr, "font selection order: "); |
| 7543 for (i = 0; i < DIM (font_sort_order); ++i) | |
| 7544 fprintf (stderr, "%d ", font_sort_order[i]); | |
| 7545 fprintf (stderr, "\n"); | |
| 7546 | |
| 7547 fprintf (stderr, "alternative fonts: "); | |
| 7548 debug_print (Vface_alternative_font_family_alist); | |
| 7549 fprintf (stderr, "\n"); | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
7550 |
|
25678
1878f7ae0df5
(frame_or_selected_frame): Change for Lisp_Object
Gerd Moellmann <gerd@gnu.org>
parents:
25661
diff
changeset
|
7551 for (i = 0; i < FRAME_FACE_CACHE (SELECTED_FRAME ())->used; ++i) |
| 24995 | 7552 Fdump_face (make_number (i)); |
| 2336 | 7553 } |
| 24995 | 7554 else |
| 7555 { | |
| 7556 struct face *face; | |
|
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40603
diff
changeset
|
7557 CHECK_NUMBER (n); |
|
25678
1878f7ae0df5
(frame_or_selected_frame): Change for Lisp_Object
Gerd Moellmann <gerd@gnu.org>
parents:
25661
diff
changeset
|
7558 face = FACE_FROM_ID (SELECTED_FRAME (), XINT (n)); |
| 24995 | 7559 if (face == NULL) |
| 7560 error ("Not a valid face"); | |
| 7561 dump_realized_face (face); | |
| 7562 } | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
7563 |
| 2336 | 7564 return Qnil; |
| 7565 } | |
| 7566 | |
| 7567 | |
| 24995 | 7568 DEFUN ("show-face-resources", Fshow_face_resources, Sshow_face_resources, |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
7569 0, 0, 0, doc: /* */) |
|
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
7570 () |
| 2336 | 7571 { |
| 24995 | 7572 fprintf (stderr, "number of colors = %d\n", ncolors_allocated); |
| 7573 fprintf (stderr, "number of pixmaps = %d\n", npixmaps_allocated); | |
| 7574 fprintf (stderr, "number of GCs = %d\n", ngcs); | |
| 2336 | 7575 return Qnil; |
| 7576 } | |
| 24995 | 7577 |
| 7578 #endif /* GLYPH_DEBUG != 0 */ | |
| 7579 | |
|
18083
c361afa561c5
Include frame.h unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
17047
diff
changeset
|
7580 |
|
c361afa561c5
Include frame.h unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
17047
diff
changeset
|
7581 |
| 24995 | 7582 /*********************************************************************** |
| 7583 Initialization | |
| 7584 ***********************************************************************/ | |
|
2730
139740855fa6
* xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents:
2538
diff
changeset
|
7585 |
| 2336 | 7586 void |
| 2391 | 7587 syms_of_xfaces () |
| 2336 | 7588 { |
| 2391 | 7589 Qface = intern ("face"); |
| 7590 staticpro (&Qface); | |
|
25890
b10a34d40b55
(Qbitmap_spec_p): Replaces Qpixmap_spec_p.
Gerd Moellmann <gerd@gnu.org>
parents:
25883
diff
changeset
|
7591 Qbitmap_spec_p = intern ("bitmap-spec-p"); |
|
b10a34d40b55
(Qbitmap_spec_p): Replaces Qpixmap_spec_p.
Gerd Moellmann <gerd@gnu.org>
parents:
25883
diff
changeset
|
7592 staticpro (&Qbitmap_spec_p); |
|
25661
a6e2ae7964fb
(Fx_family_fonts): Replaces Fx_font_list.
Gerd Moellmann <gerd@gnu.org>
parents:
25592
diff
changeset
|
7593 Qframe_update_face_colors = intern ("frame-update-face-colors"); |
|
a6e2ae7964fb
(Fx_family_fonts): Replaces Fx_font_list.
Gerd Moellmann <gerd@gnu.org>
parents:
25592
diff
changeset
|
7594 staticpro (&Qframe_update_face_colors); |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
7595 |
| 24995 | 7596 /* Lisp face attribute keywords. */ |
| 7597 QCfamily = intern (":family"); | |
| 7598 staticpro (&QCfamily); | |
| 7599 QCheight = intern (":height"); | |
| 7600 staticpro (&QCheight); | |
| 7601 QCweight = intern (":weight"); | |
| 7602 staticpro (&QCweight); | |
| 7603 QCslant = intern (":slant"); | |
| 7604 staticpro (&QCslant); | |
| 7605 QCunderline = intern (":underline"); | |
| 7606 staticpro (&QCunderline); | |
| 7607 QCinverse_video = intern (":inverse-video"); | |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
7608 staticpro (&QCinverse_video); |
| 24995 | 7609 QCreverse_video = intern (":reverse-video"); |
| 7610 staticpro (&QCreverse_video); | |
| 7611 QCforeground = intern (":foreground"); | |
| 7612 staticpro (&QCforeground); | |
| 7613 QCbackground = intern (":background"); | |
| 7614 staticpro (&QCbackground); | |
| 7615 QCstipple = intern (":stipple");; | |
| 7616 staticpro (&QCstipple); | |
| 7617 QCwidth = intern (":width"); | |
| 7618 staticpro (&QCwidth); | |
| 7619 QCfont = intern (":font"); | |
| 7620 staticpro (&QCfont); | |
| 7621 QCbold = intern (":bold"); | |
| 7622 staticpro (&QCbold); | |
| 7623 QCitalic = intern (":italic"); | |
| 7624 staticpro (&QCitalic); | |
| 7625 QCoverline = intern (":overline"); | |
| 7626 staticpro (&QCoverline); | |
| 7627 QCstrike_through = intern (":strike-through"); | |
| 7628 staticpro (&QCstrike_through); | |
| 7629 QCbox = intern (":box"); | |
| 7630 staticpro (&QCbox); | |
| 31178 | 7631 QCinherit = intern (":inherit"); |
| 7632 staticpro (&QCinherit); | |
| 24995 | 7633 |
| 7634 /* Symbols used for Lisp face attribute values. */ | |
| 7635 QCcolor = intern (":color"); | |
| 7636 staticpro (&QCcolor); | |
| 7637 QCline_width = intern (":line-width"); | |
| 7638 staticpro (&QCline_width); | |
| 7639 QCstyle = intern (":style"); | |
| 7640 staticpro (&QCstyle); | |
| 7641 Qreleased_button = intern ("released-button"); | |
| 7642 staticpro (&Qreleased_button); | |
| 7643 Qpressed_button = intern ("pressed-button"); | |
| 7644 staticpro (&Qpressed_button); | |
| 7645 Qnormal = intern ("normal"); | |
| 7646 staticpro (&Qnormal); | |
| 7647 Qultra_light = intern ("ultra-light"); | |
| 7648 staticpro (&Qultra_light); | |
| 7649 Qextra_light = intern ("extra-light"); | |
| 7650 staticpro (&Qextra_light); | |
| 7651 Qlight = intern ("light"); | |
| 7652 staticpro (&Qlight); | |
| 7653 Qsemi_light = intern ("semi-light"); | |
| 7654 staticpro (&Qsemi_light); | |
| 7655 Qsemi_bold = intern ("semi-bold"); | |
| 7656 staticpro (&Qsemi_bold); | |
| 7657 Qbold = intern ("bold"); | |
| 7658 staticpro (&Qbold); | |
| 7659 Qextra_bold = intern ("extra-bold"); | |
| 7660 staticpro (&Qextra_bold); | |
| 7661 Qultra_bold = intern ("ultra-bold"); | |
| 7662 staticpro (&Qultra_bold); | |
| 7663 Qoblique = intern ("oblique"); | |
| 7664 staticpro (&Qoblique); | |
| 7665 Qitalic = intern ("italic"); | |
| 7666 staticpro (&Qitalic); | |
| 7667 Qreverse_oblique = intern ("reverse-oblique"); | |
| 7668 staticpro (&Qreverse_oblique); | |
| 7669 Qreverse_italic = intern ("reverse-italic"); | |
| 7670 staticpro (&Qreverse_italic); | |
| 7671 Qultra_condensed = intern ("ultra-condensed"); | |
| 7672 staticpro (&Qultra_condensed); | |
| 7673 Qextra_condensed = intern ("extra-condensed"); | |
| 7674 staticpro (&Qextra_condensed); | |
| 7675 Qcondensed = intern ("condensed"); | |
| 7676 staticpro (&Qcondensed); | |
| 7677 Qsemi_condensed = intern ("semi-condensed"); | |
| 7678 staticpro (&Qsemi_condensed); | |
| 7679 Qsemi_expanded = intern ("semi-expanded"); | |
| 7680 staticpro (&Qsemi_expanded); | |
| 7681 Qexpanded = intern ("expanded"); | |
| 7682 staticpro (&Qexpanded); | |
| 7683 Qextra_expanded = intern ("extra-expanded"); | |
| 7684 staticpro (&Qextra_expanded); | |
| 7685 Qultra_expanded = intern ("ultra-expanded"); | |
| 7686 staticpro (&Qultra_expanded); | |
| 7687 Qbackground_color = intern ("background-color"); | |
| 7688 staticpro (&Qbackground_color); | |
| 7689 Qforeground_color = intern ("foreground-color"); | |
| 7690 staticpro (&Qforeground_color); | |
| 7691 Qunspecified = intern ("unspecified"); | |
| 7692 staticpro (&Qunspecified); | |
| 7693 | |
|
25661
a6e2ae7964fb
(Fx_family_fonts): Replaces Fx_font_list.
Gerd Moellmann <gerd@gnu.org>
parents:
25592
diff
changeset
|
7694 Qface_alias = intern ("face-alias"); |
|
a6e2ae7964fb
(Fx_family_fonts): Replaces Fx_font_list.
Gerd Moellmann <gerd@gnu.org>
parents:
25592
diff
changeset
|
7695 staticpro (&Qface_alias); |
| 24995 | 7696 Qdefault = intern ("default"); |
| 7697 staticpro (&Qdefault); | |
|
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25389
diff
changeset
|
7698 Qtool_bar = intern ("tool-bar"); |
|
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25389
diff
changeset
|
7699 staticpro (&Qtool_bar); |
| 24995 | 7700 Qregion = intern ("region"); |
| 7701 staticpro (&Qregion); | |
|
25592
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
7702 Qfringe = intern ("fringe"); |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
7703 staticpro (&Qfringe); |
| 25546 | 7704 Qheader_line = intern ("header-line"); |
| 7705 staticpro (&Qheader_line); | |
|
25592
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
7706 Qscroll_bar = intern ("scroll-bar"); |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
7707 staticpro (&Qscroll_bar); |
|
25883
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
7708 Qmenu = intern ("menu"); |
|
2955c353186a
(toplevel) [USE_MOTIF]: Include some Motif headers.
Gerd Moellmann <gerd@gnu.org>
parents:
25799
diff
changeset
|
7709 staticpro (&Qmenu); |
|
25592
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
7710 Qcursor = intern ("cursor"); |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
7711 staticpro (&Qcursor); |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
7712 Qborder = intern ("border"); |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
7713 staticpro (&Qborder); |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
7714 Qmouse = intern ("mouse"); |
|
c6be980d15a6
(recompute_basic_faces): Clear face cache.
Gerd Moellmann <gerd@gnu.org>
parents:
25546
diff
changeset
|
7715 staticpro (&Qmouse); |
|
43203
dd98ef3675e5
(Qmode_line_inactive): New face variable for mode-line
Kim F. Storm <storm@cua.dk>
parents:
43069
diff
changeset
|
7716 Qmode_line_inactive = intern ("mode-line-inactive"); |
|
dd98ef3675e5
(Qmode_line_inactive): New face variable for mode-line
Kim F. Storm <storm@cua.dk>
parents:
43069
diff
changeset
|
7717 staticpro (&Qmode_line_inactive); |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
7718 Qtty_color_desc = intern ("tty-color-desc"); |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
7719 staticpro (&Qtty_color_desc); |
|
45718
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
7720 Qtty_color_standard_values = intern ("tty-color-standard-values"); |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
7721 staticpro (&Qtty_color_standard_values); |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
7722 Qtty_color_by_index = intern ("tty-color-by-index"); |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26601
diff
changeset
|
7723 staticpro (&Qtty_color_by_index); |
|
30973
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7724 Qtty_color_alist = intern ("tty-color-alist"); |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7725 staticpro (&Qtty_color_alist); |
|
37394
7847d9b8bbff
(Qscalable_fonts_allowed): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
37206
diff
changeset
|
7726 Qscalable_fonts_allowed = intern ("scalable-fonts-allowed"); |
|
7847d9b8bbff
(Qscalable_fonts_allowed): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
37206
diff
changeset
|
7727 staticpro (&Qscalable_fonts_allowed); |
| 24995 | 7728 |
|
31449
8797df6a9fa2
(Vparam_value_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31440
diff
changeset
|
7729 Vparam_value_alist = Fcons (Fcons (Qnil, Qnil), Qnil); |
|
8797df6a9fa2
(Vparam_value_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
31440
diff
changeset
|
7730 staticpro (&Vparam_value_alist); |
|
30304
626d55ea66ef
(face-alternative-font-family-alist): Remove
Gerd Moellmann <gerd@gnu.org>
parents:
30235
diff
changeset
|
7731 Vface_alternative_font_family_alist = Qnil; |
|
626d55ea66ef
(face-alternative-font-family-alist): Remove
Gerd Moellmann <gerd@gnu.org>
parents:
30235
diff
changeset
|
7732 staticpro (&Vface_alternative_font_family_alist); |
|
33372
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
7733 Vface_alternative_font_registry_alist = Qnil; |
|
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
7734 staticpro (&Vface_alternative_font_registry_alist); |
|
30304
626d55ea66ef
(face-alternative-font-family-alist): Remove
Gerd Moellmann <gerd@gnu.org>
parents:
30235
diff
changeset
|
7735 |
| 24995 | 7736 defsubr (&Sinternal_make_lisp_face); |
| 7737 defsubr (&Sinternal_lisp_face_p); | |
| 7738 defsubr (&Sinternal_set_lisp_face_attribute); | |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
7739 #ifdef HAVE_WINDOW_SYSTEM |
| 24995 | 7740 defsubr (&Sinternal_set_lisp_face_attribute_from_resource); |
|
27137
0ade9883b546
(syms_of_xfaces): defsubr Scolor_gray_p and
Eli Zaretskii <eliz@gnu.org>
parents:
27120
diff
changeset
|
7741 #endif |
|
27120
24a08208cf3a
(syms_of_xfaces): Change Sface_color_gray_p to
Gerd Moellmann <gerd@gnu.org>
parents:
27114
diff
changeset
|
7742 defsubr (&Scolor_gray_p); |
|
24a08208cf3a
(syms_of_xfaces): Change Sface_color_gray_p to
Gerd Moellmann <gerd@gnu.org>
parents:
27114
diff
changeset
|
7743 defsubr (&Scolor_supported_p); |
|
40398
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
7744 defsubr (&Sface_attribute_relative_p); |
|
560b1c474b1a
(merge_face_heights): Handle TO being relative as well.
Miles Bader <miles@gnu.org>
parents:
40278
diff
changeset
|
7745 defsubr (&Smerge_face_attribute); |
| 24995 | 7746 defsubr (&Sinternal_get_lisp_face_attribute); |
| 7747 defsubr (&Sinternal_lisp_face_attribute_values); | |
| 7748 defsubr (&Sinternal_lisp_face_equal_p); | |
| 7749 defsubr (&Sinternal_lisp_face_empty_p); | |
| 7750 defsubr (&Sinternal_copy_lisp_face); | |
| 7751 defsubr (&Sinternal_merge_in_global_face); | |
| 7752 defsubr (&Sface_font); | |
| 7753 defsubr (&Sframe_face_alist); | |
|
45718
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
7754 defsubr (&Stty_supports_face_attributes_p); |
|
e495189229e4
(Ftty_supports_face_attributes_p): New function.
Miles Bader <miles@gnu.org>
parents:
45412
diff
changeset
|
7755 defsubr (&Scolor_distance); |
| 24995 | 7756 defsubr (&Sinternal_set_font_selection_order); |
| 7757 defsubr (&Sinternal_set_alternative_font_family_alist); | |
|
33372
2a665186a9e9
(Vface_alternative_font_registry_alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
33275
diff
changeset
|
7758 defsubr (&Sinternal_set_alternative_font_registry_alist); |
|
40278
6ee20fddfbc5
(Fface_attributes_as_vector): New function.
Richard M. Stallman <rms@gnu.org>
parents:
40226
diff
changeset
|
7759 defsubr (&Sface_attributes_as_vector); |
| 24995 | 7760 #if GLYPH_DEBUG |
| 7761 defsubr (&Sdump_face); | |
| 7762 defsubr (&Sshow_face_resources); | |
| 7763 #endif /* GLYPH_DEBUG */ | |
| 7764 defsubr (&Sclear_face_cache); | |
|
28529
b8ac36c58391
(tty_suppress_bold_inverse_default_colors_p): New
Gerd Moellmann <gerd@gnu.org>
parents:
28464
diff
changeset
|
7765 defsubr (&Stty_suppress_bold_inverse_default_colors); |
| 24995 | 7766 |
|
29711
913fab478495
(syms_of_xfaces) [DEBUG_X_COLORS]: Defsubr dump_colors
Gerd Moellmann <gerd@gnu.org>
parents:
29599
diff
changeset
|
7767 #if defined DEBUG_X_COLORS && defined HAVE_X_WINDOWS |
|
29599
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
7768 defsubr (&Sdump_colors); |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
7769 #endif |
|
8a2e32f7717e
(Fdump_colors) [DEBUG_X_COLORS]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29394
diff
changeset
|
7770 |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
7771 DEFVAR_LISP ("font-list-limit", &Vfont_list_limit, |
|
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
7772 doc: /* *Limit for font matching. |
|
39914
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
7773 If an integer > 0, font matching functions won't load more than |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
7774 that number of fonts when searching for a matching font. */); |
| 25270 | 7775 Vfont_list_limit = make_number (DEFAULT_FONT_LIST_LIMIT); |
| 7776 | |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
7777 DEFVAR_LISP ("face-new-frame-defaults", &Vface_new_frame_defaults, |
|
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
7778 doc: /* List of global face definitions (for internal use only.) */); |
| 24995 | 7779 Vface_new_frame_defaults = Qnil; |
|
30235
5a0d447b7eea
check default_face before dereferencing
Sam Steingold <sds@gnu.org>
parents:
30211
diff
changeset
|
7780 |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
7781 DEFVAR_LISP ("face-default-stipple", &Vface_default_stipple, |
|
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
7782 doc: /* *Default stipple pattern used on monochrome displays. |
|
39914
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
7783 This stipple pattern is used on monochrome displays |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
7784 instead of shades of gray for a face background color. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
7785 See `set-face-stipple' for possible values for this variable. */); |
| 24995 | 7786 Vface_default_stipple = build_string ("gray3"); |
| 7787 | |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
7788 DEFVAR_LISP ("tty-defined-color-alist", &Vtty_defined_color_alist, |
|
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
7789 doc: /* An alist of defined terminal colors and their RGB values. */); |
|
30973
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7790 Vtty_defined_color_alist = Qnil; |
|
2f3dc355bcaf
(lface_equal_p): Compare strings differently.
Gerd Moellmann <gerd@gnu.org>
parents:
30707
diff
changeset
|
7791 |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
7792 DEFVAR_LISP ("scalable-fonts-allowed", &Vscalable_fonts_allowed, |
|
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
7793 doc: /* Allowed scalable fonts. |
|
39914
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
7794 A value of nil means don't allow any scalable fonts. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
7795 A value of t means allow any scalable font. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
7796 Otherwise, value must be a list of regular expressions. A font may be |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
7797 scaled if its name matches a regular expression in the list. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
7798 Note that if value is nil, a scalable font might still be used, if no |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
7799 other font of the appropriate family and registry is available. */); |
|
37724
3a5a6cd7ee9a
(try_alternative_families): First try the FAMILY.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37716
diff
changeset
|
7800 Vscalable_fonts_allowed = Qnil; |
|
18083
c361afa561c5
Include frame.h unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
17047
diff
changeset
|
7801 |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
7802 DEFVAR_LISP ("face-ignored-fonts", &Vface_ignored_fonts, |
|
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39973
diff
changeset
|
7803 doc: /* List of ignored fonts. |
|
39914
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
7804 Each element is a regular expression that matches names of fonts to |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39682
diff
changeset
|
7805 ignore. */); |
|
34629
10675adcbf6f
(Vface_ignored_fonts): New variable.
Kenichi Handa <handa@m17n.org>
parents:
34289
diff
changeset
|
7806 Vface_ignored_fonts = Qnil; |
|
10675adcbf6f
(Vface_ignored_fonts): New variable.
Kenichi Handa <handa@m17n.org>
parents:
34289
diff
changeset
|
7807 |
|
50515
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
7808 DEFVAR_LISP ("face-font-rescale-alist", &Vface_font_rescale_alist, |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
7809 doc: /* Alist of fonts vs the rescaling factors. |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
7810 Each element is a cons (FONT-NAME-PATTERN . RESCALE-RATIO), where |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
7811 FONT-NAME-PATTERN is a regular expression matching a font name, and |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
7812 RESCALE-RATIO is a floating point number to specify how much larger |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
7813 \(or smaller) font we should use. For instance, if a face requests |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
7814 a font of 10 point, we actually use a font of 10 * RESCALE-RATIO point. */); |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
7815 Vface_font_rescale_alist = Qnil; |
|
98bdd2203d85
(Vface_font_rescale_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
50412
diff
changeset
|
7816 |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
7817 #ifdef HAVE_WINDOW_SYSTEM |
|
25890
b10a34d40b55
(Qbitmap_spec_p): Replaces Qpixmap_spec_p.
Gerd Moellmann <gerd@gnu.org>
parents:
25883
diff
changeset
|
7818 defsubr (&Sbitmap_spec_p); |
| 24995 | 7819 defsubr (&Sx_list_fonts); |
| 7820 defsubr (&Sinternal_face_x_get_resource); | |
|
25661
a6e2ae7964fb
(Fx_family_fonts): Replaces Fx_font_list.
Gerd Moellmann <gerd@gnu.org>
parents:
25592
diff
changeset
|
7821 defsubr (&Sx_family_fonts); |
| 24995 | 7822 defsubr (&Sx_font_family_list); |
|
27982
86de01dd01eb
Change many FRAME_X... macros to FRAME_WINDOW... or other
Jason Rumney <jasonr@gnu.org>
parents:
27960
diff
changeset
|
7823 #endif /* HAVE_WINDOW_SYSTEM */ |
| 2336 | 7824 } |
| 52401 | 7825 |
| 7826 /* arch-tag: 8a0f7598-5517-408d-9ab3-1da6fcd4c749 | |
| 7827 (do not change this comment) */ |
