annotate src/xfaces.c @ 16306:450f26426101 libc-960925 libc-960926 libc-960927 libc-960928 libc-960929 libc-961001 libc-961004 libc-961005 libc-961006 libc-961007 libc-961008 libc-961009 libc-961010 libc-961011 libc-961012 libc-961013 libc-961014 libc-961015 libc-961016 libc-961017 libc-961018 libc-961019 libc-961020 libc-961021 libc-961022 libc-961023 libc-961024 libc-961025 libc-961026 libc-961027 libc-961028

(-vxsim*): New operating system.
author Richard Kenner <kenner@gnu.org>
date Tue, 24 Sep 1996 02:44:17 +0000
parents ccf489f8596e
children 6c586afaa572
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
1 /* "Face" primitives.
7307
cd81dba38a49 Update copyright.
Karl Heuer <kwzh@gnu.org>
parents: 6879
diff changeset
2 Copyright (C) 1993, 1994 Free Software Foundation.
2342
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
3
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4 This file is part of GNU Emacs.
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6 GNU Emacs is free software; you can redistribute it and/or modify
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7 it under the terms of the GNU General Public License as published by
2342
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
8 the Free Software Foundation; either version 2, or (at your option)
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9 any later version.
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11 GNU Emacs is distributed in the hope that it will be useful,
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14 GNU General Public License for more details.
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17 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
18 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
19 Boston, MA 02111-1307, USA. */
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
20
2438
b513de4de386 * xfaces.c: Doc fixes.
Jim Blandy <jimb@redhat.com>
parents: 2391
diff changeset
21 /* This is derived from work by Lucid (some parts very loosely so). */
2342
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
22
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
23 #include <sys/types.h>
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
24 #include <sys/stat.h>
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
25
4696
1fc792473491 Include <config.h> instead of "config.h".
Roland McGrath <roland@gnu.org>
parents: 4258
diff changeset
26 #include <config.h>
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
27 #include "lisp.h"
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
28
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
29 #ifdef HAVE_FACES
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
30
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
31 #ifdef HAVE_X_WINDOWS
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
32 #include "xterm.h"
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
33 #endif
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
34 #ifdef MSDOS
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
35 #include "dosfns.h"
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
36 #endif
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
37 #include "buffer.h"
2391
226dcdb8ab67 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2342
diff changeset
38 #include "dispextern.h"
2342
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
39 #include "frame.h"
2438
b513de4de386 * xfaces.c: Doc fixes.
Jim Blandy <jimb@redhat.com>
parents: 2391
diff changeset
40 #include "blockinput.h"
2767
482fa0725db6 * xfaces.c (intern_frame_face): Exchange order of arguments, to
Jim Blandy <jimb@redhat.com>
parents: 2743
diff changeset
41 #include "window.h"
8848
48b3ac951c53 Add #include "intervals.h"
Karl Heuer <kwzh@gnu.org>
parents: 8472
diff changeset
42 #include "intervals.h"
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
43
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
44 #ifdef HAVE_X_WINDOWS
3997
d968bcba16af * xfaces.c [XOS_NEEDS_TIME_H]: #undef USG while #including
Jim Blandy <jimb@redhat.com>
parents: 3882
diff changeset
45 /* Compensate for bug in Xos.h on some systems, on which it requires
d968bcba16af * xfaces.c [XOS_NEEDS_TIME_H]: #undef USG while #including
Jim Blandy <jimb@redhat.com>
parents: 3882
diff changeset
46 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
47 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
48 #included. */
3436
291f28da7ea1 Test XOS_NEEDS_TIME_H, not HPUX, for including time.hj.
Richard M. Stallman <rms@gnu.org>
parents: 3401
diff changeset
49 #ifdef XOS_NEEDS_TIME_H
3277
564f748751ea [HPUX]: Include time.h and define __TIMEVAL__.
Richard M. Stallman <rms@gnu.org>
parents: 3074
diff changeset
50
3997
d968bcba16af * xfaces.c [XOS_NEEDS_TIME_H]: #undef USG while #including
Jim Blandy <jimb@redhat.com>
parents: 3882
diff changeset
51 #include <time.h>
d968bcba16af * xfaces.c [XOS_NEEDS_TIME_H]: #undef USG while #including
Jim Blandy <jimb@redhat.com>
parents: 3882
diff changeset
52 #undef USG
d968bcba16af * xfaces.c [XOS_NEEDS_TIME_H]: #undef USG while #including
Jim Blandy <jimb@redhat.com>
parents: 3882
diff changeset
53 #include <X11/Xos.h>
d968bcba16af * xfaces.c [XOS_NEEDS_TIME_H]: #undef USG while #including
Jim Blandy <jimb@redhat.com>
parents: 3882
diff changeset
54 #define USG
d968bcba16af * xfaces.c [XOS_NEEDS_TIME_H]: #undef USG while #including
Jim Blandy <jimb@redhat.com>
parents: 3882
diff changeset
55 #define __TIMEVAL__
d968bcba16af * xfaces.c [XOS_NEEDS_TIME_H]: #undef USG while #including
Jim Blandy <jimb@redhat.com>
parents: 3882
diff changeset
56
d968bcba16af * xfaces.c [XOS_NEEDS_TIME_H]: #undef USG while #including
Jim Blandy <jimb@redhat.com>
parents: 3882
diff changeset
57 #else
3316
9857db8aa4cd * xfaces.c (unload_color): Don't #include <X11/Intrinsic.h>,
Jim Blandy <jimb@redhat.com>
parents: 3302
diff changeset
58
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
59 #include <X11/Xos.h>
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
60
3997
d968bcba16af * xfaces.c [XOS_NEEDS_TIME_H]: #undef USG while #including
Jim Blandy <jimb@redhat.com>
parents: 3882
diff changeset
61 #endif
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
62 #endif /* HAVE_X_WINDOWS */
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
63
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
64 /* An explanation of the face data structures. */
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
65
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
66 /* ========================= Face Data Structures =========================
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
67
3882
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
68 Let FACE-NAME be a symbol naming a face.
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
69
3882
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
70 Let FACE-VECTOR be (assq FACE-NAME (frame-face-alist FRAME))
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
71 FACE-VECTOR is either nil, or a vector of the form
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
72 [face NAME ID FONT FOREGROUND BACKGROUND BACKGROUND-PIXMAP UNDERLINE-P]
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
73 where
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
74 face is the symbol `face',
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
75 NAME is the symbol with which this vector is associated (a backpointer),
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
76 ID is the face ID, an integer used internally by the C code to identify
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
77 the face,
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
78 FONT, FOREGROUND, and BACKGROUND are strings naming the fonts and colors
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
79 to use with the face,
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
80 BACKGROUND-PIXMAP is the name of an x bitmap filename, which we don't
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
81 use right now, and
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
82 UNDERLINE-P is non-nil if the face should be underlined.
3882
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
83 If any of these elements are nil, that parameter is considered
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
84 unspecified; parameters from faces specified by lower-priority
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
85 overlays or text properties, or the parameters of the frame itself,
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
86 can show through. (lisp/faces.el maintains these lists.)
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
87
3882
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
88 (assq FACE-NAME global-face-data) returns a vector describing the
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
89 global parameters for that face.
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
90
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12608
diff changeset
91 Let PARAM-FACE be FRAME->output_data.x->param_faces[Faref (FACE-VECTOR, 2)].
3882
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
92 PARAM_FACE is a struct face whose members are the Xlib analogues of
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
93 the parameters in FACE-VECTOR. If an element of FACE-VECTOR is
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
94 nil, then the corresponding member of PARAM_FACE is FACE_DEFAULT.
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
95 These faces are called "parameter faces", because they're the ones
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
96 lisp manipulates to control what gets displayed. Elements 0 and 1
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12608
diff changeset
97 of FRAME->output_data.x->param_faces are special - they describe the
3882
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
98 default and mode line faces. None of the faces in param_faces have
14036
621a575db6f7 Comment fixes.
Karl Heuer <kwzh@gnu.org>
parents: 13626
diff changeset
99 GC's. (See src/dispextern.h for the definition of struct face.
3882
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
100 lisp/faces.el maintains the isomorphism between face_alist and
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
101 param_faces.)
2342
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
102
3882
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
103 The functions compute_char_face and compute_glyph_face find and
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
104 combine the parameter faces associated with overlays and text
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
105 properties. The resulting faces are called "computed faces"; none
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
106 of their members are FACE_DEFAULT; they are completely specified.
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
107 They then call intern_compute_face to search
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12608
diff changeset
108 FRAME->output_data.x->computed_faces for a matching face, add one if
3882
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
109 none is found, and return the index into
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12608
diff changeset
110 FRAME->output_data.x->computed_faces. FRAME's glyph matrices use these
3882
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
111 indices to record the faces of the matrix characters, and the X
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
112 display hooks consult compute_faces to decide how to display these
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
113 characters. Elements 0 and 1 of computed_faces always describe the
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
114 default and mode-line faces.
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
115
9564
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
116 Each computed face belongs to a particular frame.
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
117
9529
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
118 Computed faces have graphics contexts some of the time.
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
119 intern_face builds a GC for a specified computed face
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
120 if it doesn't have one already.
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
121 clear_face_cache clears out the GCs of all computed faces.
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
122 This is done from time to time so that we don't hold on to
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
123 lots of GCs that are no longer needed.
3882
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
124
13460
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
125 If a computed face has 0 as its font,
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
126 it is unused, and can be reused by new_computed_face.
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
127
3882
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
128 Constraints:
2342
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
129
3882
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
130 Symbols naming faces must have associations on all frames; for any
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
131 FRAME, for all FACE-NAME, if (assq FACE-NAME (frame-face-alist
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
132 FRAME)) is non-nil, it must be non-nil for all frames.
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
133
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
134 Analogously, indices into param_faces must be valid on all frames;
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
135 if param_faces[i] is a non-zero face pointer on one frame, then it
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
136 must be filled in on all frames. Code assumes that face ID's can
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
137 be used on any frame.
2342
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
138
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
139 Some subtleties:
2342
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
140
3882
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
141 Why do we keep param_faces and computed_faces separate?
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
142 computed_faces contains an element for every combination of facial
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
143 parameters we have ever displayed. indices into param_faces have
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
144 to be valid on all frames. If they were the same array, then that
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
145 array would grow very large on all frames, because any facial
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
146 combination displayed on any frame would need to be a valid entry
9529
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
147 on all frames. */
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
148
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
149 /* Definitions and declarations. */
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
150
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
151 /* The number of face-id's in use (same for all frames). */
11737
9b62959880f4 (region_face, next_face_id): Make static.
Richard M. Stallman <rms@gnu.org>
parents: 11420
diff changeset
152 static int next_face_id;
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
153
2795
e97e96fb0cb8 (compute_char_face): New args REGION_BEG, REGION_END.
Richard M. Stallman <rms@gnu.org>
parents: 2784
diff changeset
154 /* The number of the face to use to indicate the region. */
11737
9b62959880f4 (region_face, next_face_id): Make static.
Richard M. Stallman <rms@gnu.org>
parents: 11420
diff changeset
155 static int region_face;
2795
e97e96fb0cb8 (compute_char_face): New args REGION_BEG, REGION_END.
Richard M. Stallman <rms@gnu.org>
parents: 2784
diff changeset
156
2838
5f6a2d52d2ef (compute_char_face): Pass 0 as EXTEND arg to overlays_at.
Richard M. Stallman <rms@gnu.org>
parents: 2821
diff changeset
157 /* This is what appears in a slot in a face to signify that the face
5f6a2d52d2ef (compute_char_face): Pass 0 as EXTEND arg to overlays_at.
Richard M. Stallman <rms@gnu.org>
parents: 2821
diff changeset
158 does not specify that display aspect. */
2342
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
159 #define FACE_DEFAULT (~0)
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
160
6615
96ddf85642d1 (compute_char_face): New arg MOUSE.
Richard M. Stallman <rms@gnu.org>
parents: 5858
diff changeset
161 Lisp_Object Qface, Qmouse_face;
9564
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
162 Lisp_Object Qpixmap_spec_p;
2391
226dcdb8ab67 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2342
diff changeset
163
3830
205d69567177 * xfaces.c: Add forward declaration for recompute_basic_faces.
Jim Blandy <jimb@redhat.com>
parents: 3811
diff changeset
164 int face_name_id_number ( /* FRAME_PTR, Lisp_Object name */ );
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
165
3830
205d69567177 * xfaces.c: Add forward declaration for recompute_basic_faces.
Jim Blandy <jimb@redhat.com>
parents: 3811
diff changeset
166 struct face *intern_face ( /* FRAME_PTR, struct face * */ );
3882
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
167 static int new_computed_face ( /* FRAME_PTR, struct face * */ );
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
168 static int intern_computed_face ( /* FRAME_PTR, struct face * */ );
3830
205d69567177 * xfaces.c: Add forward declaration for recompute_basic_faces.
Jim Blandy <jimb@redhat.com>
parents: 3811
diff changeset
169 static void ensure_face_ready ( /* FRAME_PTR, int id */ );
3843
18892e151d53 * xfaces.c (recompute_basic_faces): This shouldn't be declared static.
Jim Blandy <jimb@redhat.com>
parents: 3830
diff changeset
170 void recompute_basic_faces ( /* FRAME_PTR f */ );
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
171
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
172 /* Allocating, copying, and comparing struct faces. */
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
173
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
174 /* Allocate a new face */
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
175 static struct face *
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
176 allocate_face ()
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
177 {
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
178 struct face *result = (struct face *) xmalloc (sizeof (struct face));
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
179 bzero (result, sizeof (struct face));
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
180 result->font = (XFontStruct *) FACE_DEFAULT;
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
181 result->foreground = FACE_DEFAULT;
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
182 result->background = FACE_DEFAULT;
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
183 result->stipple = FACE_DEFAULT;
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
184 return result;
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
185 }
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
186
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
187 /* Make a new face that's a copy of an existing one. */
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
188 static struct face *
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
189 copy_face (face)
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
190 struct face *face;
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
191 {
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
192 struct face *result = allocate_face ();
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
193
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
194 result->font = face->font;
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
195 result->foreground = face->foreground;
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
196 result->background = face->background;
2391
226dcdb8ab67 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2342
diff changeset
197 result->stipple = face->stipple;
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
198 result->underline = face->underline;
9564
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
199 result->pixmap_h = face->pixmap_h;
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
200 result->pixmap_w = face->pixmap_w;
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
201
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
202 return result;
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
203 }
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
204
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
205 static int
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
206 face_eql (face1, face2)
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
207 struct face *face1, *face2;
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
208 {
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
209 return ( face1->font == face2->font
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
210 && face1->foreground == face2->foreground
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
211 && face1->background == face2->background
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
212 && face1->stipple == face2->stipple
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
213 && face1->underline == face2->underline);
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
214 }
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
215
9529
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
216 /* Managing graphics contexts of faces. */
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
217
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
218 #ifdef HAVE_X_WINDOWS
9529
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
219 /* Given a computed face, construct its graphics context if necessary. */
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
220
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
221 struct face *
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
222 intern_face (f, face)
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
223 struct frame *f;
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
224 struct face *face;
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
225 {
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
226 GC gc;
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
227 XGCValues xgcv;
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
228 unsigned long mask;
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
229
9529
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
230 if (face->gc)
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
231 return face;
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
232
3074
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
233 BLOCK_INPUT;
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
234
2391
226dcdb8ab67 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2342
diff changeset
235 if (face->foreground != FACE_DEFAULT)
226dcdb8ab67 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2342
diff changeset
236 xgcv.foreground = face->foreground;
226dcdb8ab67 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2342
diff changeset
237 else
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12608
diff changeset
238 xgcv.foreground = f->output_data.x->foreground_pixel;
3074
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
239
2391
226dcdb8ab67 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2342
diff changeset
240 if (face->background != FACE_DEFAULT)
226dcdb8ab67 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2342
diff changeset
241 xgcv.background = face->background;
226dcdb8ab67 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2342
diff changeset
242 else
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12608
diff changeset
243 xgcv.background = f->output_data.x->background_pixel;
3074
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
244
11238
747eeabdbbcb (intern_face): Cast FONT_DEFAULT to (XFontStruct *)
Richard M. Stallman <rms@gnu.org>
parents: 10919
diff changeset
245 if (face->font && face->font != (XFontStruct *) FACE_DEFAULT)
2391
226dcdb8ab67 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2342
diff changeset
246 xgcv.font = face->font->fid;
226dcdb8ab67 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2342
diff changeset
247 else
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12608
diff changeset
248 xgcv.font = f->output_data.x->font->fid;
3074
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
249
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
250 xgcv.graphics_exposures = 0;
3074
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
251
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
252 mask = GCForeground | GCBackground | GCFont | GCGraphicsExposures;
9564
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
253 if (face->stipple && face->stipple != FACE_DEFAULT)
9566
fef2cfcbbe37 (intern_face): Update mask properly to set stipple
Richard M. Stallman <rms@gnu.org>
parents: 9564
diff changeset
254 {
fef2cfcbbe37 (intern_face): Update mask properly to set stipple
Richard M. Stallman <rms@gnu.org>
parents: 9564
diff changeset
255 xgcv.fill_style = FillStippled;
fef2cfcbbe37 (intern_face): Update mask properly to set stipple
Richard M. Stallman <rms@gnu.org>
parents: 9564
diff changeset
256 xgcv.stipple = x_bitmap_pixmap (f, face->stipple);
fef2cfcbbe37 (intern_face): Update mask properly to set stipple
Richard M. Stallman <rms@gnu.org>
parents: 9564
diff changeset
257 mask |= GCFillStyle | GCStipple;
fef2cfcbbe37 (intern_face): Update mask properly to set stipple
Richard M. Stallman <rms@gnu.org>
parents: 9564
diff changeset
258 }
9564
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
259
9529
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
260 gc = XCreateGC (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
261 mask, &xgcv);
3074
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
262
2391
226dcdb8ab67 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2342
diff changeset
263 face->gc = gc;
3074
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
264
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
265 UNBLOCK_INPUT;
9529
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
266
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
267 return face;
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
268 }
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
269
9529
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
270 /* Clear out all graphics contexts for all computed faces
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
271 except for the default and mode line faces.
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
272 This should be done from time to time just to avoid
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
273 keeping too many graphics contexts that are no longer needed. */
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
274
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
275 void
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
276 clear_face_cache ()
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
277 {
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
278 Lisp_Object tail, frame;
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
279
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
280 BLOCK_INPUT;
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
281 FOR_EACH_FRAME (tail, frame)
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
282 {
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
283 FRAME_PTR f = XFRAME (frame);
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
284 if (FRAME_X_P (f))
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
285 {
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
286 int i;
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
287 Display *dpy = FRAME_X_DISPLAY (f);
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
288
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
289 for (i = 2; i < FRAME_N_COMPUTED_FACES (f); i++)
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
290 {
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
291 struct face *face = FRAME_COMPUTED_FACES (f) [i];
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
292 if (face->gc)
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
293 XFreeGC (dpy, face->gc);
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
294 face->gc = 0;
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
295 }
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
296 }
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
297 }
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
298
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
299 UNBLOCK_INPUT;
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
300 }
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
301
9564
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
302 /* Allocating, freeing, and duplicating fonts, colors, and pixmaps.
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
303
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
304 These functions operate on param faces only.
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
305 Computed faces get their fonts, colors and pixmaps
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
306 by merging param faces. */
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
307
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
308 static XFontStruct *
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
309 load_font (f, name)
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
310 struct frame *f;
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
311 Lisp_Object name;
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
312 {
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
313 XFontStruct *font;
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
314
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
315 if (NILP (name))
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
316 return (XFontStruct *) FACE_DEFAULT;
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
317
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
318 CHECK_STRING (name, 0);
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
319 BLOCK_INPUT;
9529
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
320 font = XLoadQueryFont (FRAME_X_DISPLAY (f), (char *) XSTRING (name)->data);
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
321 UNBLOCK_INPUT;
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
322
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
323 if (! font)
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
324 Fsignal (Qerror, Fcons (build_string ("undefined font"),
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
325 Fcons (name, Qnil)));
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
326 return font;
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
327 }
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
328
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
329 static void
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
330 unload_font (f, font)
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
331 struct frame *f;
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
332 XFontStruct *font;
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
333 {
13460
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
334 int len = FRAME_N_COMPUTED_FACES (f);
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
335 int i;
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
336
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
337 if (!font || font == ((XFontStruct *) FACE_DEFAULT))
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
338 return;
3074
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
339
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
340 BLOCK_INPUT;
13460
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
341 /* Invalidate any computed faces which use this font,
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
342 and free their GC's if they have any. */
13622
67c2ba47a729 (unload_color, unload_font): Never invalidate computed faces 0 and 1.
Richard M. Stallman <rms@gnu.org>
parents: 13460
diff changeset
343 for (i = 2; i < len; i++)
13460
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
344 {
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
345 struct face *face = FRAME_COMPUTED_FACES (f)[i];
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
346 if (face->font == font)
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
347 {
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
348 Display *dpy = FRAME_X_DISPLAY (f);
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
349 if (face->gc)
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
350 XFreeGC (dpy, face->gc);
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
351 face->gc = 0;
13622
67c2ba47a729 (unload_color, unload_font): Never invalidate computed faces 0 and 1.
Richard M. Stallman <rms@gnu.org>
parents: 13460
diff changeset
352 /* This marks the computed face as available to reuse. */
13460
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
353 face->font = 0;
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
354 }
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
355 }
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
356
9529
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
357 XFreeFont (FRAME_X_DISPLAY (f), font);
3074
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
358 UNBLOCK_INPUT;
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
359 }
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
360
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
361 static unsigned long
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
362 load_color (f, name)
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
363 struct frame *f;
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
364 Lisp_Object name;
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
365 {
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
366 XColor color;
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
367 int result;
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
368
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
369 if (NILP (name))
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
370 return FACE_DEFAULT;
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
371
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
372 CHECK_STRING (name, 0);
12077
74b296435fd9 (load_color): misleading comment rewritten.
Karl Heuer <kwzh@gnu.org>
parents: 11883
diff changeset
373 /* if the colormap is full, defined_color will return a best match
74b296435fd9 (load_color): misleading comment rewritten.
Karl Heuer <kwzh@gnu.org>
parents: 11883
diff changeset
374 to the values in an an existing cell. */
10919
ebae5c953523 (load_color): Call defined_color to allocate the color.
Richard M. Stallman <rms@gnu.org>
parents: 10718
diff changeset
375 result = defined_color(f, (char *) XSTRING (name)->data, &color, 1);
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
376 if (! result)
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
377 Fsignal (Qerror, Fcons (build_string ("undefined color"),
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
378 Fcons (name, Qnil)));
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
379 return (unsigned long) color.pixel;
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
380 }
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
381
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
382 static void
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
383 unload_color (f, pixel)
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
384 struct frame *f;
3316
9857db8aa4cd * xfaces.c (unload_color): Don't #include <X11/Intrinsic.h>,
Jim Blandy <jimb@redhat.com>
parents: 3302
diff changeset
385 unsigned long pixel;
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
386 {
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
387 Colormap cmap;
9529
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
388 Display *dpy = FRAME_X_DISPLAY (f);
12608
c6215ec3f536 (unload_color): Don't free colors if immutable colormap.
Richard M. Stallman <rms@gnu.org>
parents: 12468
diff changeset
389 int class = FRAME_X_DISPLAY_INFO (f)->visual->class;
c6215ec3f536 (unload_color): Don't free colors if immutable colormap.
Richard M. Stallman <rms@gnu.org>
parents: 12468
diff changeset
390
2818
d1cfc6cbdbf7 * xfaces.c (unload_color): Don't try to unload the standard black
Jim Blandy <jimb@redhat.com>
parents: 2795
diff changeset
391 if (pixel == FACE_DEFAULT
9671
5c7a3709e81a (unload_color): Pass arg f to WHITE_PIX_DEFAULT and BLACK_PIX_DEFAULT.
Richard M. Stallman <rms@gnu.org>
parents: 9572
diff changeset
392 || pixel == BLACK_PIX_DEFAULT (f)
5c7a3709e81a (unload_color): Pass arg f to WHITE_PIX_DEFAULT and BLACK_PIX_DEFAULT.
Richard M. Stallman <rms@gnu.org>
parents: 9572
diff changeset
393 || pixel == WHITE_PIX_DEFAULT (f))
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
394 return;
9529
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
395 cmap = DefaultColormapOfScreen (DefaultScreenOfDisplay (dpy));
12608
c6215ec3f536 (unload_color): Don't free colors if immutable colormap.
Richard M. Stallman <rms@gnu.org>
parents: 12468
diff changeset
396
c6215ec3f536 (unload_color): Don't free colors if immutable colormap.
Richard M. Stallman <rms@gnu.org>
parents: 12468
diff changeset
397 /* If display has an immutable color map, freeing colors is not
c6215ec3f536 (unload_color): Don't free colors if immutable colormap.
Richard M. Stallman <rms@gnu.org>
parents: 12468
diff changeset
398 necessary and some servers don't allow it. So don't do it. */
c6215ec3f536 (unload_color): Don't free colors if immutable colormap.
Richard M. Stallman <rms@gnu.org>
parents: 12468
diff changeset
399 if (! (class == StaticColor || class == StaticGray || class == TrueColor))
c6215ec3f536 (unload_color): Don't free colors if immutable colormap.
Richard M. Stallman <rms@gnu.org>
parents: 12468
diff changeset
400 {
13460
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
401 int len = FRAME_N_COMPUTED_FACES (f);
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
402 int i;
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
403
12608
c6215ec3f536 (unload_color): Don't free colors if immutable colormap.
Richard M. Stallman <rms@gnu.org>
parents: 12468
diff changeset
404 BLOCK_INPUT;
13460
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
405 /* Invalidate any computed faces which use this color,
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
406 and free their GC's if they have any. */
13622
67c2ba47a729 (unload_color, unload_font): Never invalidate computed faces 0 and 1.
Richard M. Stallman <rms@gnu.org>
parents: 13460
diff changeset
407 for (i = 2; i < len; i++)
13460
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
408 {
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
409 struct face *face = FRAME_COMPUTED_FACES (f)[i];
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
410 if (face->foreground == pixel
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
411 || face->background == pixel)
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
412 {
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
413 Display *dpy = FRAME_X_DISPLAY (f);
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
414 if (face->gc)
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
415 XFreeGC (dpy, face->gc);
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
416 face->gc = 0;
13622
67c2ba47a729 (unload_color, unload_font): Never invalidate computed faces 0 and 1.
Richard M. Stallman <rms@gnu.org>
parents: 13460
diff changeset
417 /* This marks the computed face as available to reuse. */
13460
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
418 face->font = 0;
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
419 }
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
420 }
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
421
12608
c6215ec3f536 (unload_color): Don't free colors if immutable colormap.
Richard M. Stallman <rms@gnu.org>
parents: 12468
diff changeset
422 XFreeColors (dpy, cmap, &pixel, 1, (unsigned long)0);
c6215ec3f536 (unload_color): Don't free colors if immutable colormap.
Richard M. Stallman <rms@gnu.org>
parents: 12468
diff changeset
423 UNBLOCK_INPUT;
c6215ec3f536 (unload_color): Don't free colors if immutable colormap.
Richard M. Stallman <rms@gnu.org>
parents: 12468
diff changeset
424 }
9564
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
425 }
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
426
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
427 DEFUN ("pixmap-spec-p", Fpixmap_spec_p, Spixmap_spec_p, 1, 1, 0,
14090
24b93860d392 (Fpixmap_spec_p): Harmonize arguments with documentation.
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
428 "Return t if OBJECT is a valid pixmap specification.")
24b93860d392 (Fpixmap_spec_p): Harmonize arguments with documentation.
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
429 (object)
24b93860d392 (Fpixmap_spec_p): Harmonize arguments with documentation.
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
430 Lisp_Object object;
9564
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
431 {
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
432 Lisp_Object height, width;
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
433
14090
24b93860d392 (Fpixmap_spec_p): Harmonize arguments with documentation.
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
434 return ((STRINGP (object)
24b93860d392 (Fpixmap_spec_p): Harmonize arguments with documentation.
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
435 || (CONSP (object)
24b93860d392 (Fpixmap_spec_p): Harmonize arguments with documentation.
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
436 && CONSP (XCONS (object)->cdr)
24b93860d392 (Fpixmap_spec_p): Harmonize arguments with documentation.
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
437 && CONSP (XCONS (XCONS (object)->cdr)->cdr)
24b93860d392 (Fpixmap_spec_p): Harmonize arguments with documentation.
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
438 && NILP (XCONS (XCONS (XCONS (object)->cdr)->cdr)->cdr)
24b93860d392 (Fpixmap_spec_p): Harmonize arguments with documentation.
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
439 && (width = XCONS (object)->car, INTEGERP (width))
24b93860d392 (Fpixmap_spec_p): Harmonize arguments with documentation.
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
440 && (height = XCONS (XCONS (object)->cdr)->car, INTEGERP (height))
24b93860d392 (Fpixmap_spec_p): Harmonize arguments with documentation.
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
441 && STRINGP (XCONS (XCONS (XCONS (object)->cdr)->cdr)->car)
9564
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
442 && XINT (width) > 0
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
443 && XINT (height) > 0
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
444 /* The string must have enough bits for width * height. */
14090
24b93860d392 (Fpixmap_spec_p): Harmonize arguments with documentation.
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
445 && ((XSTRING (XCONS (XCONS (XCONS (object)->cdr)->cdr)->car)->size
13363
941c37982f37 (BITS_PER_SHORT, BITS_PER_INT, BITS_PER_LONG):
Karl Heuer <kwzh@gnu.org>
parents: 12667
diff changeset
446 * (BITS_PER_INT / sizeof (int)))
9944
dd9afae74baf (Fpixmap_spec_p): Avoid function calls and assignments as arguments to a
Karl Heuer <kwzh@gnu.org>
parents: 9902
diff changeset
447 >= XFASTINT (width) * XFASTINT (height))))
9564
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
448 ? Qt : Qnil);
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
449 }
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
450
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
451 /* Load a bitmap according to NAME (which is either a file name
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
452 or a pixmap spec). Return the bitmap_id (see xfns.c)
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
453 or get an error if NAME is invalid.
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
454
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
455 Store the bitmap width in *W_PTR and height in *H_PTR. */
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
456
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
457 static long
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
458 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
459 FRAME_PTR f;
9564
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
460 Lisp_Object name;
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
461 unsigned int *w_ptr, *h_ptr;
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
462 {
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
463 int bitmap_id;
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
464 Lisp_Object tem;
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
465
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
466 if (NILP (name))
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
467 return FACE_DEFAULT;
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
468
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
469 tem = Fpixmap_spec_p (name);
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
470 if (NILP (tem))
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
471 wrong_type_argument (Qpixmap_spec_p, name);
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
472
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
473 BLOCK_INPUT;
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
474
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
475 if (CONSP (name))
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
476 {
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
477 /* Decode a bitmap spec into a bitmap. */
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
478
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
479 int h, w;
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
480 Lisp_Object bits;
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
481
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
482 w = XINT (Fcar (name));
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
483 h = XINT (Fcar (Fcdr (name)));
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
484 bits = Fcar (Fcdr (Fcdr (name)));
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
485
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
486 bitmap_id = x_create_bitmap_from_data (f, XSTRING (bits)->data,
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
487 w, h);
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
488 }
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
489 else
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
490 {
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
491 /* 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
492 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
493 }
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
494 UNBLOCK_INPUT;
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
495
9902
32ed712a45a3 (load_pixmap): Handle bitmap_id < 0. F is a FRAME_PTR.
Richard M. Stallman <rms@gnu.org>
parents: 9671
diff changeset
496 if (bitmap_id < 0)
32ed712a45a3 (load_pixmap): Handle bitmap_id < 0. F is a FRAME_PTR.
Richard M. Stallman <rms@gnu.org>
parents: 9671
diff changeset
497 Fsignal (Qerror, Fcons (build_string ("invalid or undefined bitmap"),
9564
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
498 Fcons (name, Qnil)));
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
499
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
500 *w_ptr = x_bitmap_width (f, bitmap_id);
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
501 *h_ptr = x_bitmap_height (f, bitmap_id);
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
502
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
503 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
504 }
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
505
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
506 #else /* !HAVE_X_WINDOWS */
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
507
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
508 /* Stubs for MSDOS when not under X. */
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
509
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
510 struct face *
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
511 intern_face (f, face)
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
512 struct frame *f;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
513 struct face *face;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
514 {
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
515 return face;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
516 }
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
517
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
518 void
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
519 clear_face_cache ()
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
520 {
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
521 /* No action. */
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
522 }
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
523
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
524 #ifdef MSDOS
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
525 unsigned long
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
526 load_color (f, name)
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
527 FRAME_PTR f;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
528 Lisp_Object name;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
529 {
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
530 Lisp_Object result;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
531
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
532 if (NILP (name))
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
533 return FACE_DEFAULT;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
534
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
535 CHECK_STRING (name, 0);
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
536 result = call1 (Qmsdos_color_translate, name);
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
537 if (INTEGERP (result))
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
538 return XINT (result);
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
539 else
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
540 Fsignal (Qerror, Fcons (build_string ("undefined color"),
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
541 Fcons (name, Qnil)));
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
542 }
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
543 #endif
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
544 #endif /* !HAVE_X_WINDOWS */
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
545
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
546
3882
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
547 /* Managing parameter face arrays for frames. */
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
548
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
549 void
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
550 init_frame_faces (f)
3074
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
551 FRAME_PTR f;
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
552 {
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
553 ensure_face_ready (f, 0);
3074
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
554 ensure_face_ready (f, 1);
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
555
5801
af397aaa8e6b (init_frame_faces): Clear FRAME_N_COMPUTED_FACES
Richard M. Stallman <rms@gnu.org>
parents: 5084
diff changeset
556 FRAME_N_COMPUTED_FACES (f) = 0;
af397aaa8e6b (init_frame_faces): Clear FRAME_N_COMPUTED_FACES
Richard M. Stallman <rms@gnu.org>
parents: 5084
diff changeset
557 FRAME_SIZE_COMPUTED_FACES (f) = 0;
af397aaa8e6b (init_frame_faces): Clear FRAME_N_COMPUTED_FACES
Richard M. Stallman <rms@gnu.org>
parents: 5084
diff changeset
558
3882
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
559 new_computed_face (f, FRAME_PARAM_FACES (f)[0]);
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
560 new_computed_face (f, FRAME_PARAM_FACES (f)[1]);
3074
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
561 recompute_basic_faces (f);
3299
6fab7c7bb1f1 * xfaces.c (init_frame_faces): We have to make sure that face ID's
Jim Blandy <jimb@redhat.com>
parents: 3277
diff changeset
562
3583
0bc9838eb0bb * xfaces.c (init_frame_faces): Remove assumption that the selected
Jim Blandy <jimb@redhat.com>
parents: 3528
diff changeset
563 /* Find another X frame. */
0bc9838eb0bb * xfaces.c (init_frame_faces): Remove assumption that the selected
Jim Blandy <jimb@redhat.com>
parents: 3528
diff changeset
564 {
0bc9838eb0bb * xfaces.c (init_frame_faces): Remove assumption that the selected
Jim Blandy <jimb@redhat.com>
parents: 3528
diff changeset
565 Lisp_Object tail, frame, result;
0bc9838eb0bb * xfaces.c (init_frame_faces): Remove assumption that the selected
Jim Blandy <jimb@redhat.com>
parents: 3528
diff changeset
566
0bc9838eb0bb * xfaces.c (init_frame_faces): Remove assumption that the selected
Jim Blandy <jimb@redhat.com>
parents: 3528
diff changeset
567 result = Qnil;
0bc9838eb0bb * xfaces.c (init_frame_faces): Remove assumption that the selected
Jim Blandy <jimb@redhat.com>
parents: 3528
diff changeset
568 FOR_EACH_FRAME (tail, frame)
15383
9a6c8d10ac5f (init_frame_faces): Build faces for an MSDOS frame like for X frame.
Richard M. Stallman <rms@gnu.org>
parents: 15340
diff changeset
569 if ((FRAME_MSDOS_P (XFRAME (frame)) || FRAME_X_P (XFRAME (frame)))
3583
0bc9838eb0bb * xfaces.c (init_frame_faces): Remove assumption that the selected
Jim Blandy <jimb@redhat.com>
parents: 3528
diff changeset
570 && XFRAME (frame) != f)
0bc9838eb0bb * xfaces.c (init_frame_faces): Remove assumption that the selected
Jim Blandy <jimb@redhat.com>
parents: 3528
diff changeset
571 {
0bc9838eb0bb * xfaces.c (init_frame_faces): Remove assumption that the selected
Jim Blandy <jimb@redhat.com>
parents: 3528
diff changeset
572 result = frame;
0bc9838eb0bb * xfaces.c (init_frame_faces): Remove assumption that the selected
Jim Blandy <jimb@redhat.com>
parents: 3528
diff changeset
573 break;
0bc9838eb0bb * xfaces.c (init_frame_faces): Remove assumption that the selected
Jim Blandy <jimb@redhat.com>
parents: 3528
diff changeset
574 }
3299
6fab7c7bb1f1 * xfaces.c (init_frame_faces): We have to make sure that face ID's
Jim Blandy <jimb@redhat.com>
parents: 3277
diff changeset
575
3583
0bc9838eb0bb * xfaces.c (init_frame_faces): Remove assumption that the selected
Jim Blandy <jimb@redhat.com>
parents: 3528
diff changeset
576 /* If we didn't find any X frames other than f, then we don't need
0bc9838eb0bb * xfaces.c (init_frame_faces): Remove assumption that the selected
Jim Blandy <jimb@redhat.com>
parents: 3528
diff changeset
577 any faces other than 0 and 1, so we're okay. Otherwise, make
0bc9838eb0bb * xfaces.c (init_frame_faces): Remove assumption that the selected
Jim Blandy <jimb@redhat.com>
parents: 3528
diff changeset
578 sure that all faces valid on the selected frame are also valid
0bc9838eb0bb * xfaces.c (init_frame_faces): Remove assumption that the selected
Jim Blandy <jimb@redhat.com>
parents: 3528
diff changeset
579 on this new frame. */
0bc9838eb0bb * xfaces.c (init_frame_faces): Remove assumption that the selected
Jim Blandy <jimb@redhat.com>
parents: 3528
diff changeset
580 if (FRAMEP (result))
0bc9838eb0bb * xfaces.c (init_frame_faces): Remove assumption that the selected
Jim Blandy <jimb@redhat.com>
parents: 3528
diff changeset
581 {
0bc9838eb0bb * xfaces.c (init_frame_faces): Remove assumption that the selected
Jim Blandy <jimb@redhat.com>
parents: 3528
diff changeset
582 int i;
3882
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
583 int n_faces = FRAME_N_PARAM_FACES (XFRAME (result));
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
584 struct face **faces = FRAME_PARAM_FACES (XFRAME (result));
3299
6fab7c7bb1f1 * xfaces.c (init_frame_faces): We have to make sure that face ID's
Jim Blandy <jimb@redhat.com>
parents: 3277
diff changeset
585
3583
0bc9838eb0bb * xfaces.c (init_frame_faces): Remove assumption that the selected
Jim Blandy <jimb@redhat.com>
parents: 3528
diff changeset
586 for (i = 2; i < n_faces; i++)
0bc9838eb0bb * xfaces.c (init_frame_faces): Remove assumption that the selected
Jim Blandy <jimb@redhat.com>
parents: 3528
diff changeset
587 if (faces[i])
0bc9838eb0bb * xfaces.c (init_frame_faces): Remove assumption that the selected
Jim Blandy <jimb@redhat.com>
parents: 3528
diff changeset
588 ensure_face_ready (f, i);
0bc9838eb0bb * xfaces.c (init_frame_faces): Remove assumption that the selected
Jim Blandy <jimb@redhat.com>
parents: 3528
diff changeset
589 }
0bc9838eb0bb * xfaces.c (init_frame_faces): Remove assumption that the selected
Jim Blandy <jimb@redhat.com>
parents: 3528
diff changeset
590 }
3074
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
591 }
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
592
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
593
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
594 /* Called from Fdelete_frame. */
9564
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
595
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
596 void
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
597 free_frame_faces (f)
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
598 struct frame *f;
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
599 {
9529
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
600 Display *dpy = FRAME_X_DISPLAY (f);
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
601 int i;
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
602
3074
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
603 BLOCK_INPUT;
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
604
3882
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
605 for (i = 0; i < FRAME_N_PARAM_FACES (f); i++)
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
606 {
3882
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
607 struct face *face = FRAME_PARAM_FACES (f) [i];
3074
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
608 if (face)
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
609 {
3882
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
610 unload_font (f, face->font);
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
611 unload_color (f, face->foreground);
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
612 unload_color (f, face->background);
9564
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
613 x_destroy_bitmap (f, face->stipple);
3074
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
614 xfree (face);
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
615 }
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
616 }
3882
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
617 xfree (FRAME_PARAM_FACES (f));
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
618 FRAME_PARAM_FACES (f) = 0;
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
619 FRAME_N_PARAM_FACES (f) = 0;
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
620
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
621 /* All faces in FRAME_COMPUTED_FACES use resources copied from
9529
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
622 FRAME_PARAM_FACES; we can free them without fuss.
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
623 But we do free the GCs and the face objects themselves. */
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
624 for (i = 0; i < FRAME_N_COMPUTED_FACES (f); i++)
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
625 {
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
626 struct face *face = FRAME_COMPUTED_FACES (f) [i];
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
627 if (face)
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
628 {
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
629 if (face->gc)
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
630 XFreeGC (dpy, face->gc);
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
631 xfree (face);
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
632 }
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
633 }
3882
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
634 xfree (FRAME_COMPUTED_FACES (f));
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
635 FRAME_COMPUTED_FACES (f) = 0;
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
636 FRAME_N_COMPUTED_FACES (f) = 0;
3074
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
637
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
638 UNBLOCK_INPUT;
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
639 }
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
640
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
641 /* Interning faces in a frame's face array. */
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
642
3074
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
643 static int
3882
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
644 new_computed_face (f, new_face)
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
645 struct frame *f;
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
646 struct face *new_face;
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
647 {
13460
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
648 int len = FRAME_N_COMPUTED_FACES (f);
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
649 int i;
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
650
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
651 /* Search for an unused computed face in the middle of the table. */
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
652 for (i = 0; i < len; i++)
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
653 {
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
654 struct face *face = FRAME_COMPUTED_FACES (f)[i];
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
655 if (face->font == 0)
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
656 {
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
657 FRAME_COMPUTED_FACES (f)[i] = copy_face (new_face);
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
658 return i;
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
659 }
5513606156bc (unload_font): Invalidate computed faces.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
660 }
3882
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
661
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
662 if (i >= FRAME_SIZE_COMPUTED_FACES (f))
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
663 {
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
664 int new_size = i + 32;
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
665
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
666 FRAME_COMPUTED_FACES (f)
5801
af397aaa8e6b (init_frame_faces): Clear FRAME_N_COMPUTED_FACES
Richard M. Stallman <rms@gnu.org>
parents: 5084
diff changeset
667 = (struct face **) (FRAME_SIZE_COMPUTED_FACES (f) == 0
af397aaa8e6b (init_frame_faces): Clear FRAME_N_COMPUTED_FACES
Richard M. Stallman <rms@gnu.org>
parents: 5084
diff changeset
668 ? xmalloc (new_size * sizeof (struct face *))
af397aaa8e6b (init_frame_faces): Clear FRAME_N_COMPUTED_FACES
Richard M. Stallman <rms@gnu.org>
parents: 5084
diff changeset
669 : xrealloc (FRAME_COMPUTED_FACES (f),
af397aaa8e6b (init_frame_faces): Clear FRAME_N_COMPUTED_FACES
Richard M. Stallman <rms@gnu.org>
parents: 5084
diff changeset
670 new_size * sizeof (struct face *)));
3882
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
671 FRAME_SIZE_COMPUTED_FACES (f) = new_size;
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
672 }
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
673
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
674 i = FRAME_N_COMPUTED_FACES (f)++;
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
675 FRAME_COMPUTED_FACES (f)[i] = copy_face (new_face);
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
676 return i;
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
677 }
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
678
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
679
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
680 /* Find a match for NEW_FACE in a FRAME's computed face array, and add
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
681 it if we don't find one. */
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
682 static int
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
683 intern_computed_face (f, new_face)
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
684 struct frame *f;
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
685 struct face *new_face;
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
686 {
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
687 int len = FRAME_N_COMPUTED_FACES (f);
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
688 int i;
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
689
3882
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
690 /* Search for a computed face already on F equivalent to FACE. */
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
691 for (i = 0; i < len; i++)
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
692 {
3882
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
693 if (! FRAME_COMPUTED_FACES (f)[i])
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
694 abort ();
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
695 if (face_eql (new_face, FRAME_COMPUTED_FACES (f)[i]))
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
696 return i;
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
697 }
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
698
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
699 /* We didn't find one; add a new one. */
3882
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
700 return new_computed_face (f, new_face);
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
701 }
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
702
3882
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
703 /* Make parameter face id ID valid on frame F. */
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
704
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
705 static void
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
706 ensure_face_ready (f, id)
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
707 struct frame *f;
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
708 int id;
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
709 {
3882
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
710 if (FRAME_N_PARAM_FACES (f) <= id)
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
711 {
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
712 int n = id + 10;
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
713 int i;
3882
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
714 if (!FRAME_N_PARAM_FACES (f))
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
715 FRAME_PARAM_FACES (f)
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
716 = (struct face **) xmalloc (sizeof (struct face *) * n);
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
717 else
3882
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
718 FRAME_PARAM_FACES (f)
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
719 = (struct face **) xrealloc (FRAME_PARAM_FACES (f),
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
720 sizeof (struct face *) * n);
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
721
3882
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
722 bzero (FRAME_PARAM_FACES (f) + FRAME_N_PARAM_FACES (f),
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
723 (n - FRAME_N_PARAM_FACES (f)) * sizeof (struct face *));
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
724 FRAME_N_PARAM_FACES (f) = n;
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
725 }
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
726
3882
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
727 if (FRAME_PARAM_FACES (f) [id] == 0)
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
728 FRAME_PARAM_FACES (f) [id] = allocate_face ();
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
729 }
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
730
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
731 #ifdef HAVE_X_WINDOWS
6784
d41c216ccd27 (frame_update_line_height): Check param_faces[i] not null.
Richard M. Stallman <rms@gnu.org>
parents: 6768
diff changeset
732 /* Return non-zero if FONT1 and FONT2 have the same width.
d41c216ccd27 (frame_update_line_height): Check param_faces[i] not null.
Richard M. Stallman <rms@gnu.org>
parents: 6768
diff changeset
733 We do not check the height, because we can now deal with
d41c216ccd27 (frame_update_line_height): Check param_faces[i] not null.
Richard M. Stallman <rms@gnu.org>
parents: 6768
diff changeset
734 different heights.
d41c216ccd27 (frame_update_line_height): Check param_faces[i] not null.
Richard M. Stallman <rms@gnu.org>
parents: 6768
diff changeset
735 We assume that they're both character-cell fonts. */
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
736
3074
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
737 int
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
738 same_size_fonts (font1, font2)
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
739 XFontStruct *font1, *font2;
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
740 {
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
741 XCharStruct *bounds1 = &font1->min_bounds;
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
742 XCharStruct *bounds2 = &font2->min_bounds;
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
743
3528
aad9fd004281 (same_size_fonts): Compare only the width.
Richard M. Stallman <rms@gnu.org>
parents: 3436
diff changeset
744 return (bounds1->width == bounds2->width);
3074
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
745 }
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
746
6768
0b61d2b74e64 (frame_update_line_height): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6615
diff changeset
747 /* Update the line_height of frame F according to the biggest font in
6879
471aebc1b151 (frame_update_line_height): Don't call x_set_window_size.
Richard M. Stallman <rms@gnu.org>
parents: 6784
diff changeset
748 any face. Return nonzero if if line_height changes. */
6768
0b61d2b74e64 (frame_update_line_height): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6615
diff changeset
749
6879
471aebc1b151 (frame_update_line_height): Don't call x_set_window_size.
Richard M. Stallman <rms@gnu.org>
parents: 6784
diff changeset
750 int
6768
0b61d2b74e64 (frame_update_line_height): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6615
diff changeset
751 frame_update_line_height (f)
0b61d2b74e64 (frame_update_line_height): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6615
diff changeset
752 FRAME_PTR f;
0b61d2b74e64 (frame_update_line_height): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6615
diff changeset
753 {
0b61d2b74e64 (frame_update_line_height): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6615
diff changeset
754 int i;
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12608
diff changeset
755 int biggest = FONT_HEIGHT (f->output_data.x->font);
6768
0b61d2b74e64 (frame_update_line_height): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6615
diff changeset
756
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12608
diff changeset
757 for (i = 0; i < f->output_data.x->n_param_faces; i++)
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12608
diff changeset
758 if (f->output_data.x->param_faces[i] != 0
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12608
diff changeset
759 && f->output_data.x->param_faces[i]->font != (XFontStruct *) FACE_DEFAULT)
6768
0b61d2b74e64 (frame_update_line_height): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6615
diff changeset
760 {
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12608
diff changeset
761 int height = FONT_HEIGHT (f->output_data.x->param_faces[i]->font);
6768
0b61d2b74e64 (frame_update_line_height): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6615
diff changeset
762 if (height > biggest)
0b61d2b74e64 (frame_update_line_height): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6615
diff changeset
763 biggest = height;
0b61d2b74e64 (frame_update_line_height): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6615
diff changeset
764 }
0b61d2b74e64 (frame_update_line_height): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6615
diff changeset
765
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12608
diff changeset
766 if (biggest == f->output_data.x->line_height)
6879
471aebc1b151 (frame_update_line_height): Don't call x_set_window_size.
Richard M. Stallman <rms@gnu.org>
parents: 6784
diff changeset
767 return 0;
6768
0b61d2b74e64 (frame_update_line_height): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6615
diff changeset
768
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12608
diff changeset
769 f->output_data.x->line_height = biggest;
6879
471aebc1b151 (frame_update_line_height): Don't call x_set_window_size.
Richard M. Stallman <rms@gnu.org>
parents: 6784
diff changeset
770 return 1;
6768
0b61d2b74e64 (frame_update_line_height): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6615
diff changeset
771 }
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
772 #endif /* not HAVE_X_WINDOWS */
6784
d41c216ccd27 (frame_update_line_height): Check param_faces[i] not null.
Richard M. Stallman <rms@gnu.org>
parents: 6768
diff changeset
773
2342
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
774 /* Modify face TO by copying from FROM all properties which have
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
775 nondefault settings. */
6784
d41c216ccd27 (frame_update_line_height): Check param_faces[i] not null.
Richard M. Stallman <rms@gnu.org>
parents: 6768
diff changeset
776
2342
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
777 static void
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
778 merge_faces (from, to)
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
779 struct face *from, *to;
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
780 {
6784
d41c216ccd27 (frame_update_line_height): Check param_faces[i] not null.
Richard M. Stallman <rms@gnu.org>
parents: 6768
diff changeset
781 /* Only merge the font if it's the same width as the base font.
d41c216ccd27 (frame_update_line_height): Check param_faces[i] not null.
Richard M. Stallman <rms@gnu.org>
parents: 6768
diff changeset
782 Otherwise ignore it, since we can't handle it properly. */
2883
b8a3b11892dc Make sure that all the display faces use fonts of the
Jim Blandy <jimb@redhat.com>
parents: 2875
diff changeset
783 if (from->font != (XFontStruct *) FACE_DEFAULT
b8a3b11892dc Make sure that all the display faces use fonts of the
Jim Blandy <jimb@redhat.com>
parents: 2875
diff changeset
784 && same_size_fonts (from->font, to->font))
b8a3b11892dc Make sure that all the display faces use fonts of the
Jim Blandy <jimb@redhat.com>
parents: 2875
diff changeset
785 to->font = from->font;
2342
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
786 if (from->foreground != FACE_DEFAULT)
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
787 to->foreground = from->foreground;
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
788 if (from->background != FACE_DEFAULT)
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
789 to->background = from->background;
2391
226dcdb8ab67 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2342
diff changeset
790 if (from->stipple != FACE_DEFAULT)
9564
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
791 {
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
792 to->stipple = from->stipple;
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
793 to->pixmap_h = from->pixmap_h;
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
794 to->pixmap_w = from->pixmap_w;
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
795 }
2342
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
796 if (from->underline)
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
797 to->underline = from->underline;
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
798 }
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
799
3074
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
800 /* Set up the basic set of facial parameters, based on the frame's
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
801 data; all faces are deltas applied to this. */
6784
d41c216ccd27 (frame_update_line_height): Check param_faces[i] not null.
Richard M. Stallman <rms@gnu.org>
parents: 6768
diff changeset
802
3074
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
803 static void
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
804 compute_base_face (f, face)
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
805 FRAME_PTR f;
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
806 struct face *face;
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
807 {
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
808 face->gc = 0;
9564
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
809 face->foreground = FRAME_FOREGROUND_PIXEL (f);
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
810 face->background = FRAME_BACKGROUND_PIXEL (f);
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
811 face->font = FRAME_FONT (f);
3811
48b1ef149180 * xfaces.c (compute_base_face): Initialize the face's stipple.
Jim Blandy <jimb@redhat.com>
parents: 3583
diff changeset
812 face->stipple = 0;
3074
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
813 face->underline = 0;
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
814 }
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
815
6784
d41c216ccd27 (frame_update_line_height): Check param_faces[i] not null.
Richard M. Stallman <rms@gnu.org>
parents: 6768
diff changeset
816 /* Return the face ID to use to display a special glyph which selects
d41c216ccd27 (frame_update_line_height): Check param_faces[i] not null.
Richard M. Stallman <rms@gnu.org>
parents: 6768
diff changeset
817 FACE_CODE as the face ID, assuming that ordinarily the face would
d41c216ccd27 (frame_update_line_height): Check param_faces[i] not null.
Richard M. Stallman <rms@gnu.org>
parents: 6768
diff changeset
818 be CURRENT_FACE. F is the frame. */
3074
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
819
6784
d41c216ccd27 (frame_update_line_height): Check param_faces[i] not null.
Richard M. Stallman <rms@gnu.org>
parents: 6768
diff changeset
820 int
d41c216ccd27 (frame_update_line_height): Check param_faces[i] not null.
Richard M. Stallman <rms@gnu.org>
parents: 6768
diff changeset
821 compute_glyph_face (f, face_code, current_face)
d41c216ccd27 (frame_update_line_height): Check param_faces[i] not null.
Richard M. Stallman <rms@gnu.org>
parents: 6768
diff changeset
822 struct frame *f;
d41c216ccd27 (frame_update_line_height): Check param_faces[i] not null.
Richard M. Stallman <rms@gnu.org>
parents: 6768
diff changeset
823 int face_code, current_face;
d41c216ccd27 (frame_update_line_height): Check param_faces[i] not null.
Richard M. Stallman <rms@gnu.org>
parents: 6768
diff changeset
824 {
d41c216ccd27 (frame_update_line_height): Check param_faces[i] not null.
Richard M. Stallman <rms@gnu.org>
parents: 6768
diff changeset
825 struct face face;
d41c216ccd27 (frame_update_line_height): Check param_faces[i] not null.
Richard M. Stallman <rms@gnu.org>
parents: 6768
diff changeset
826
d41c216ccd27 (frame_update_line_height): Check param_faces[i] not null.
Richard M. Stallman <rms@gnu.org>
parents: 6768
diff changeset
827 face = *FRAME_COMPUTED_FACES (f)[current_face];
d41c216ccd27 (frame_update_line_height): Check param_faces[i] not null.
Richard M. Stallman <rms@gnu.org>
parents: 6768
diff changeset
828
d41c216ccd27 (frame_update_line_height): Check param_faces[i] not null.
Richard M. Stallman <rms@gnu.org>
parents: 6768
diff changeset
829 if (face_code >= 0 && face_code < FRAME_N_PARAM_FACES (f)
d41c216ccd27 (frame_update_line_height): Check param_faces[i] not null.
Richard M. Stallman <rms@gnu.org>
parents: 6768
diff changeset
830 && FRAME_PARAM_FACES (f) [face_code] != 0)
d41c216ccd27 (frame_update_line_height): Check param_faces[i] not null.
Richard M. Stallman <rms@gnu.org>
parents: 6768
diff changeset
831 merge_faces (FRAME_PARAM_FACES (f) [face_code], &face);
d41c216ccd27 (frame_update_line_height): Check param_faces[i] not null.
Richard M. Stallman <rms@gnu.org>
parents: 6768
diff changeset
832
d41c216ccd27 (frame_update_line_height): Check param_faces[i] not null.
Richard M. Stallman <rms@gnu.org>
parents: 6768
diff changeset
833 return intern_computed_face (f, &face);
d41c216ccd27 (frame_update_line_height): Check param_faces[i] not null.
Richard M. Stallman <rms@gnu.org>
parents: 6768
diff changeset
834 }
8472
0d0b32e78a5b (compute_glyph_face_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8119
diff changeset
835
0d0b32e78a5b (compute_glyph_face_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8119
diff changeset
836 /* Return the face ID to use to display a special glyph which selects
0d0b32e78a5b (compute_glyph_face_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8119
diff changeset
837 FACE_CODE as the face ID, assuming that ordinarily the face would
0d0b32e78a5b (compute_glyph_face_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8119
diff changeset
838 be CURRENT_FACE. F is the frame. */
0d0b32e78a5b (compute_glyph_face_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8119
diff changeset
839
0d0b32e78a5b (compute_glyph_face_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8119
diff changeset
840 int
0d0b32e78a5b (compute_glyph_face_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8119
diff changeset
841 compute_glyph_face_1 (f, face_name, current_face)
0d0b32e78a5b (compute_glyph_face_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8119
diff changeset
842 struct frame *f;
0d0b32e78a5b (compute_glyph_face_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8119
diff changeset
843 Lisp_Object face_name;
0d0b32e78a5b (compute_glyph_face_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8119
diff changeset
844 int current_face;
0d0b32e78a5b (compute_glyph_face_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8119
diff changeset
845 {
0d0b32e78a5b (compute_glyph_face_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8119
diff changeset
846 struct face face;
0d0b32e78a5b (compute_glyph_face_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8119
diff changeset
847
0d0b32e78a5b (compute_glyph_face_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8119
diff changeset
848 face = *FRAME_COMPUTED_FACES (f)[current_face];
0d0b32e78a5b (compute_glyph_face_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8119
diff changeset
849
0d0b32e78a5b (compute_glyph_face_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8119
diff changeset
850 if (!NILP (face_name))
0d0b32e78a5b (compute_glyph_face_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8119
diff changeset
851 {
0d0b32e78a5b (compute_glyph_face_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8119
diff changeset
852 int facecode = face_name_id_number (f, face_name);
0d0b32e78a5b (compute_glyph_face_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8119
diff changeset
853 if (facecode >= 0 && facecode < FRAME_N_PARAM_FACES (f)
0d0b32e78a5b (compute_glyph_face_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8119
diff changeset
854 && FRAME_PARAM_FACES (f) [facecode] != 0)
0d0b32e78a5b (compute_glyph_face_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8119
diff changeset
855 merge_faces (FRAME_PARAM_FACES (f) [facecode], &face);
0d0b32e78a5b (compute_glyph_face_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8119
diff changeset
856 }
0d0b32e78a5b (compute_glyph_face_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8119
diff changeset
857
0d0b32e78a5b (compute_glyph_face_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8119
diff changeset
858 return intern_computed_face (f, &face);
0d0b32e78a5b (compute_glyph_face_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8119
diff changeset
859 }
6784
d41c216ccd27 (frame_update_line_height): Check param_faces[i] not null.
Richard M. Stallman <rms@gnu.org>
parents: 6768
diff changeset
860
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
861 /* Return the face ID associated with a buffer position POS.
2342
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
862 Store into *ENDPTR the position at which a different face is needed.
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
863 This does not take account of glyphs that specify their own face codes.
2784
f8c6796b7777 * xfaces.c (compute_char_face): When merging the overlays,
Jim Blandy <jimb@redhat.com>
parents: 2767
diff changeset
864 F is the frame in use for display, and W is a window displaying
2795
e97e96fb0cb8 (compute_char_face): New args REGION_BEG, REGION_END.
Richard M. Stallman <rms@gnu.org>
parents: 2784
diff changeset
865 the current buffer.
e97e96fb0cb8 (compute_char_face): New args REGION_BEG, REGION_END.
Richard M. Stallman <rms@gnu.org>
parents: 2784
diff changeset
866
5084
863e092a5891 (compute_char_face): Accept new arg LIMIT.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
867 REGION_BEG, REGION_END delimit the region, so it can be highlighted.
863e092a5891 (compute_char_face): Accept new arg LIMIT.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
868
863e092a5891 (compute_char_face): Accept new arg LIMIT.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
869 LIMIT is a position not to scan beyond. That is to limit
6615
96ddf85642d1 (compute_char_face): New arg MOUSE.
Richard M. Stallman <rms@gnu.org>
parents: 5858
diff changeset
870 the time this function can take.
96ddf85642d1 (compute_char_face): New arg MOUSE.
Richard M. Stallman <rms@gnu.org>
parents: 5858
diff changeset
871
96ddf85642d1 (compute_char_face): New arg MOUSE.
Richard M. Stallman <rms@gnu.org>
parents: 5858
diff changeset
872 If MOUSE is nonzero, use the character's mouse-face, not its face. */
2795
e97e96fb0cb8 (compute_char_face): New args REGION_BEG, REGION_END.
Richard M. Stallman <rms@gnu.org>
parents: 2784
diff changeset
873
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
874 int
6615
96ddf85642d1 (compute_char_face): New arg MOUSE.
Richard M. Stallman <rms@gnu.org>
parents: 5858
diff changeset
875 compute_char_face (f, w, pos, region_beg, region_end, endptr, limit, mouse)
2342
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
876 struct frame *f;
2391
226dcdb8ab67 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2342
diff changeset
877 struct window *w;
2342
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
878 int pos;
2795
e97e96fb0cb8 (compute_char_face): New args REGION_BEG, REGION_END.
Richard M. Stallman <rms@gnu.org>
parents: 2784
diff changeset
879 int region_beg, region_end;
2342
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
880 int *endptr;
5084
863e092a5891 (compute_char_face): Accept new arg LIMIT.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
881 int limit;
6615
96ddf85642d1 (compute_char_face): New arg MOUSE.
Richard M. Stallman <rms@gnu.org>
parents: 5858
diff changeset
882 int mouse;
2342
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
883 {
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
884 struct face face;
2767
482fa0725db6 * xfaces.c (intern_frame_face): Exchange order of arguments, to
Jim Blandy <jimb@redhat.com>
parents: 2743
diff changeset
885 Lisp_Object prop, position;
2342
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
886 int i, j, noverlays;
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
887 int facecode;
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
888 Lisp_Object *overlay_vec;
2391
226dcdb8ab67 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2342
diff changeset
889 Lisp_Object frame;
2784
f8c6796b7777 * xfaces.c (compute_char_face): When merging the overlays,
Jim Blandy <jimb@redhat.com>
parents: 2767
diff changeset
890 int endpos;
6615
96ddf85642d1 (compute_char_face): New arg MOUSE.
Richard M. Stallman <rms@gnu.org>
parents: 5858
diff changeset
891 Lisp_Object propname;
2784
f8c6796b7777 * xfaces.c (compute_char_face): When merging the overlays,
Jim Blandy <jimb@redhat.com>
parents: 2767
diff changeset
892
f8c6796b7777 * xfaces.c (compute_char_face): When merging the overlays,
Jim Blandy <jimb@redhat.com>
parents: 2767
diff changeset
893 /* 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
894 to use the frame and buffer of W, but right now it doesn't. */
f8c6796b7777 * xfaces.c (compute_char_face): When merging the overlays,
Jim Blandy <jimb@redhat.com>
parents: 2767
diff changeset
895 if (XBUFFER (w->buffer) != current_buffer)
f8c6796b7777 * xfaces.c (compute_char_face): When merging the overlays,
Jim Blandy <jimb@redhat.com>
parents: 2767
diff changeset
896 abort ();
2391
226dcdb8ab67 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2342
diff changeset
897
9284
a969e0eefaf5 (compute_char_face): Use new accessor macros instead of calling XSET directly.
Karl Heuer <kwzh@gnu.org>
parents: 9186
diff changeset
898 XSETFRAME (frame, f);
2342
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
899
2784
f8c6796b7777 * xfaces.c (compute_char_face): When merging the overlays,
Jim Blandy <jimb@redhat.com>
parents: 2767
diff changeset
900 endpos = ZV;
2795
e97e96fb0cb8 (compute_char_face): New args REGION_BEG, REGION_END.
Richard M. Stallman <rms@gnu.org>
parents: 2784
diff changeset
901 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
902 endpos = region_beg;
2784
f8c6796b7777 * xfaces.c (compute_char_face): When merging the overlays,
Jim Blandy <jimb@redhat.com>
parents: 2767
diff changeset
903
9326
bcf42f7e049a (compute_char_face): Don't use XFASTINT as an lvalue.
Karl Heuer <kwzh@gnu.org>
parents: 9284
diff changeset
904 XSETFASTINT (position, pos);
6615
96ddf85642d1 (compute_char_face): New arg MOUSE.
Richard M. Stallman <rms@gnu.org>
parents: 5858
diff changeset
905
96ddf85642d1 (compute_char_face): New arg MOUSE.
Richard M. Stallman <rms@gnu.org>
parents: 5858
diff changeset
906 if (mouse)
96ddf85642d1 (compute_char_face): New arg MOUSE.
Richard M. Stallman <rms@gnu.org>
parents: 5858
diff changeset
907 propname = Qmouse_face;
96ddf85642d1 (compute_char_face): New arg MOUSE.
Richard M. Stallman <rms@gnu.org>
parents: 5858
diff changeset
908 else
96ddf85642d1 (compute_char_face): New arg MOUSE.
Richard M. Stallman <rms@gnu.org>
parents: 5858
diff changeset
909 propname = Qface;
96ddf85642d1 (compute_char_face): New arg MOUSE.
Richard M. Stallman <rms@gnu.org>
parents: 5858
diff changeset
910
96ddf85642d1 (compute_char_face): New arg MOUSE.
Richard M. Stallman <rms@gnu.org>
parents: 5858
diff changeset
911 prop = Fget_text_property (position, propname, w->buffer);
96ddf85642d1 (compute_char_face): New arg MOUSE.
Richard M. Stallman <rms@gnu.org>
parents: 5858
diff changeset
912
2767
482fa0725db6 * xfaces.c (intern_frame_face): Exchange order of arguments, to
Jim Blandy <jimb@redhat.com>
parents: 2743
diff changeset
913 {
5084
863e092a5891 (compute_char_face): Accept new arg LIMIT.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
914 Lisp_Object limit1, end;
2767
482fa0725db6 * xfaces.c (intern_frame_face): Exchange order of arguments, to
Jim Blandy <jimb@redhat.com>
parents: 2743
diff changeset
915
9326
bcf42f7e049a (compute_char_face): Don't use XFASTINT as an lvalue.
Karl Heuer <kwzh@gnu.org>
parents: 9284
diff changeset
916 XSETFASTINT (limit1, (limit < endpos ? limit : endpos));
6615
96ddf85642d1 (compute_char_face): New arg MOUSE.
Richard M. Stallman <rms@gnu.org>
parents: 5858
diff changeset
917 end = Fnext_single_property_change (position, propname, w->buffer, limit1);
2767
482fa0725db6 * xfaces.c (intern_frame_face): Exchange order of arguments, to
Jim Blandy <jimb@redhat.com>
parents: 2743
diff changeset
918 if (INTEGERP (end))
482fa0725db6 * xfaces.c (intern_frame_face): Exchange order of arguments, to
Jim Blandy <jimb@redhat.com>
parents: 2743
diff changeset
919 endpos = XINT (end);
482fa0725db6 * xfaces.c (intern_frame_face): Exchange order of arguments, to
Jim Blandy <jimb@redhat.com>
parents: 2743
diff changeset
920 }
2342
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
921
2767
482fa0725db6 * xfaces.c (intern_frame_face): Exchange order of arguments, to
Jim Blandy <jimb@redhat.com>
parents: 2743
diff changeset
922 {
2784
f8c6796b7777 * xfaces.c (compute_char_face): When merging the overlays,
Jim Blandy <jimb@redhat.com>
parents: 2767
diff changeset
923 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
924 int len;
2767
482fa0725db6 * xfaces.c (intern_frame_face): Exchange order of arguments, to
Jim Blandy <jimb@redhat.com>
parents: 2743
diff changeset
925
2838
5f6a2d52d2ef (compute_char_face): Pass 0 as EXTEND arg to overlays_at.
Richard M. Stallman <rms@gnu.org>
parents: 2821
diff changeset
926 /* 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
927 len = 40;
5f6a2d52d2ef (compute_char_face): Pass 0 as EXTEND arg to overlays_at.
Richard M. Stallman <rms@gnu.org>
parents: 2821
diff changeset
928 overlay_vec = (Lisp_Object *) alloca (len * sizeof (Lisp_Object));
5f6a2d52d2ef (compute_char_face): Pass 0 as EXTEND arg to overlays_at.
Richard M. Stallman <rms@gnu.org>
parents: 2821
diff changeset
929
11420
8ab99c3646a7 (compute_char_face): Don't use NULL.
Richard M. Stallman <rms@gnu.org>
parents: 11416
diff changeset
930 noverlays = overlays_at (pos, 0, &overlay_vec, &len,
8ab99c3646a7 (compute_char_face): Don't use NULL.
Richard M. Stallman <rms@gnu.org>
parents: 11416
diff changeset
931 &next_overlay, (int *) 0);
2838
5f6a2d52d2ef (compute_char_face): Pass 0 as EXTEND arg to overlays_at.
Richard M. Stallman <rms@gnu.org>
parents: 2821
diff changeset
932
5f6a2d52d2ef (compute_char_face): Pass 0 as EXTEND arg to overlays_at.
Richard M. Stallman <rms@gnu.org>
parents: 2821
diff changeset
933 /* If there are more than 40,
5f6a2d52d2ef (compute_char_face): Pass 0 as EXTEND arg to overlays_at.
Richard M. Stallman <rms@gnu.org>
parents: 2821
diff changeset
934 make enough space for all, and try again. */
5f6a2d52d2ef (compute_char_face): Pass 0 as EXTEND arg to overlays_at.
Richard M. Stallman <rms@gnu.org>
parents: 2821
diff changeset
935 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
936 {
5f6a2d52d2ef (compute_char_face): Pass 0 as EXTEND arg to overlays_at.
Richard M. Stallman <rms@gnu.org>
parents: 2821
diff changeset
937 len = noverlays;
5f6a2d52d2ef (compute_char_face): Pass 0 as EXTEND arg to overlays_at.
Richard M. Stallman <rms@gnu.org>
parents: 2821
diff changeset
938 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
939 noverlays = overlays_at (pos, 0, &overlay_vec, &len,
11420
8ab99c3646a7 (compute_char_face): Don't use NULL.
Richard M. Stallman <rms@gnu.org>
parents: 11416
diff changeset
940 &next_overlay, (int *) 0);
2838
5f6a2d52d2ef (compute_char_face): Pass 0 as EXTEND arg to overlays_at.
Richard M. Stallman <rms@gnu.org>
parents: 2821
diff changeset
941 }
5f6a2d52d2ef (compute_char_face): Pass 0 as EXTEND arg to overlays_at.
Richard M. Stallman <rms@gnu.org>
parents: 2821
diff changeset
942
2784
f8c6796b7777 * xfaces.c (compute_char_face): When merging the overlays,
Jim Blandy <jimb@redhat.com>
parents: 2767
diff changeset
943 if (next_overlay < endpos)
f8c6796b7777 * xfaces.c (compute_char_face): When merging the overlays,
Jim Blandy <jimb@redhat.com>
parents: 2767
diff changeset
944 endpos = next_overlay;
2767
482fa0725db6 * xfaces.c (intern_frame_face): Exchange order of arguments, to
Jim Blandy <jimb@redhat.com>
parents: 2743
diff changeset
945 }
482fa0725db6 * xfaces.c (intern_frame_face): Exchange order of arguments, to
Jim Blandy <jimb@redhat.com>
parents: 2743
diff changeset
946
482fa0725db6 * xfaces.c (intern_frame_face): Exchange order of arguments, to
Jim Blandy <jimb@redhat.com>
parents: 2743
diff changeset
947 *endptr = endpos;
2342
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
948
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
949 /* Optimize the default case. */
2795
e97e96fb0cb8 (compute_char_face): New args REGION_BEG, REGION_END.
Richard M. Stallman <rms@gnu.org>
parents: 2784
diff changeset
950 if (noverlays == 0 && NILP (prop)
e97e96fb0cb8 (compute_char_face): New args REGION_BEG, REGION_END.
Richard M. Stallman <rms@gnu.org>
parents: 2784
diff changeset
951 && !(pos >= region_beg && pos < region_end))
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
952 return 0;
2342
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
953
3074
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
954 compute_base_face (f, &face);
2342
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
955
9186
45bac5feb065 (compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents: 9184
diff changeset
956 if (CONSP (prop))
45bac5feb065 (compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents: 9184
diff changeset
957 {
45bac5feb065 (compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents: 9184
diff changeset
958 /* We have a list of faces, merge them in reverse order */
12468
395a1d99820b (compute_char_face): Use Fsafe_length.
Richard M. Stallman <rms@gnu.org>
parents: 12077
diff changeset
959 Lisp_Object length;
395a1d99820b (compute_char_face): Use Fsafe_length.
Richard M. Stallman <rms@gnu.org>
parents: 12077
diff changeset
960 int len;
9186
45bac5feb065 (compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents: 9184
diff changeset
961 Lisp_Object *faces;
45bac5feb065 (compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents: 9184
diff changeset
962
12468
395a1d99820b (compute_char_face): Use Fsafe_length.
Richard M. Stallman <rms@gnu.org>
parents: 12077
diff changeset
963 length = Fsafe_length (prop);
395a1d99820b (compute_char_face): Use Fsafe_length.
Richard M. Stallman <rms@gnu.org>
parents: 12077
diff changeset
964 len = XFASTINT (length);
395a1d99820b (compute_char_face): Use Fsafe_length.
Richard M. Stallman <rms@gnu.org>
parents: 12077
diff changeset
965
9186
45bac5feb065 (compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents: 9184
diff changeset
966 /* Put them into an array */
45bac5feb065 (compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents: 9184
diff changeset
967 faces = (Lisp_Object *) alloca (len * sizeof (Lisp_Object));
45bac5feb065 (compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents: 9184
diff changeset
968 for (j = 0; j < len; j++)
45bac5feb065 (compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents: 9184
diff changeset
969 {
45bac5feb065 (compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents: 9184
diff changeset
970 faces[j] = Fcar (prop);
45bac5feb065 (compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents: 9184
diff changeset
971 prop = Fcdr (prop);
45bac5feb065 (compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents: 9184
diff changeset
972 }
45bac5feb065 (compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents: 9184
diff changeset
973 /* So that we can merge them in the reverse order */
45bac5feb065 (compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents: 9184
diff changeset
974 for (j = len - 1; j >= 0; j--)
45bac5feb065 (compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents: 9184
diff changeset
975 {
45bac5feb065 (compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents: 9184
diff changeset
976 facecode = face_name_id_number (f, faces[j]);
45bac5feb065 (compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents: 9184
diff changeset
977 if (facecode >= 0 && facecode < FRAME_N_PARAM_FACES (f)
45bac5feb065 (compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents: 9184
diff changeset
978 && FRAME_PARAM_FACES (f) [facecode] != 0)
45bac5feb065 (compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents: 9184
diff changeset
979 merge_faces (FRAME_PARAM_FACES (f) [facecode], &face);
45bac5feb065 (compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents: 9184
diff changeset
980 }
45bac5feb065 (compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents: 9184
diff changeset
981 }
45bac5feb065 (compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents: 9184
diff changeset
982 else if (!NILP (prop))
2342
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
983 {
3065
fff06093b756 * xfns.c (Fx_list_fonts): New function.
Jim Blandy <jimb@redhat.com>
parents: 2998
diff changeset
984 facecode = face_name_id_number (f, prop);
3882
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
985 if (facecode >= 0 && facecode < FRAME_N_PARAM_FACES (f)
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
986 && FRAME_PARAM_FACES (f) [facecode] != 0)
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
987 merge_faces (FRAME_PARAM_FACES (f) [facecode], &face);
2342
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
988 }
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
989
5858
021e58905963 (compute_char_face): Extract overlay-sorting code as a separate function,
Karl Heuer <kwzh@gnu.org>
parents: 5801
diff changeset
990 noverlays = sort_overlays (overlay_vec, noverlays, w);
2342
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
991
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
992 /* Now merge the overlay data in that order. */
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
993 for (i = 0; i < noverlays; i++)
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
994 {
6615
96ddf85642d1 (compute_char_face): New arg MOUSE.
Richard M. Stallman <rms@gnu.org>
parents: 5858
diff changeset
995 prop = Foverlay_get (overlay_vec[i], propname);
9186
45bac5feb065 (compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents: 9184
diff changeset
996 if (CONSP (prop))
45bac5feb065 (compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents: 9184
diff changeset
997 {
45bac5feb065 (compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents: 9184
diff changeset
998 /* We have a list of faces, merge them in reverse order */
12468
395a1d99820b (compute_char_face): Use Fsafe_length.
Richard M. Stallman <rms@gnu.org>
parents: 12077
diff changeset
999 Lisp_Object length;
395a1d99820b (compute_char_face): Use Fsafe_length.
Richard M. Stallman <rms@gnu.org>
parents: 12077
diff changeset
1000 int len;
9186
45bac5feb065 (compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents: 9184
diff changeset
1001 Lisp_Object *faces;
12468
395a1d99820b (compute_char_face): Use Fsafe_length.
Richard M. Stallman <rms@gnu.org>
parents: 12077
diff changeset
1002
395a1d99820b (compute_char_face): Use Fsafe_length.
Richard M. Stallman <rms@gnu.org>
parents: 12077
diff changeset
1003 length = Fsafe_length (prop);
395a1d99820b (compute_char_face): Use Fsafe_length.
Richard M. Stallman <rms@gnu.org>
parents: 12077
diff changeset
1004 len = XFASTINT (length);
9186
45bac5feb065 (compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents: 9184
diff changeset
1005
45bac5feb065 (compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents: 9184
diff changeset
1006 /* Put them into an array */
45bac5feb065 (compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents: 9184
diff changeset
1007 faces = (Lisp_Object *) alloca (len * sizeof (Lisp_Object));
45bac5feb065 (compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents: 9184
diff changeset
1008 for (j = 0; j < len; j++)
45bac5feb065 (compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents: 9184
diff changeset
1009 {
45bac5feb065 (compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents: 9184
diff changeset
1010 faces[j] = Fcar (prop);
45bac5feb065 (compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents: 9184
diff changeset
1011 prop = Fcdr (prop);
45bac5feb065 (compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents: 9184
diff changeset
1012 }
45bac5feb065 (compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents: 9184
diff changeset
1013 /* So that we can merge them in the reverse order */
45bac5feb065 (compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents: 9184
diff changeset
1014 for (j = len - 1; j >= 0; j--)
45bac5feb065 (compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents: 9184
diff changeset
1015 {
45bac5feb065 (compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents: 9184
diff changeset
1016 facecode = face_name_id_number (f, faces[j]);
45bac5feb065 (compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents: 9184
diff changeset
1017 if (facecode >= 0 && facecode < FRAME_N_PARAM_FACES (f)
45bac5feb065 (compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents: 9184
diff changeset
1018 && FRAME_PARAM_FACES (f) [facecode] != 0)
45bac5feb065 (compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents: 9184
diff changeset
1019 merge_faces (FRAME_PARAM_FACES (f) [facecode], &face);
45bac5feb065 (compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents: 9184
diff changeset
1020 }
45bac5feb065 (compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents: 9184
diff changeset
1021 }
45bac5feb065 (compute_char_face): Handle list as overlay face property.
Richard M. Stallman <rms@gnu.org>
parents: 9184
diff changeset
1022 else if (!NILP (prop))
2342
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
1023 {
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
1024 Lisp_Object oend;
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
1025 int oendpos;
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
1026
3065
fff06093b756 * xfns.c (Fx_list_fonts): New function.
Jim Blandy <jimb@redhat.com>
parents: 2998
diff changeset
1027 facecode = face_name_id_number (f, prop);
3882
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
1028 if (facecode >= 0 && facecode < FRAME_N_PARAM_FACES (f)
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
1029 && FRAME_PARAM_FACES (f) [facecode] != 0)
6615
96ddf85642d1 (compute_char_face): New arg MOUSE.
Richard M. Stallman <rms@gnu.org>
parents: 5858
diff changeset
1030 merge_faces (FRAME_PARAM_FACES (f)[facecode], &face);
2342
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
1031
5858
021e58905963 (compute_char_face): Extract overlay-sorting code as a separate function,
Karl Heuer <kwzh@gnu.org>
parents: 5801
diff changeset
1032 oend = OVERLAY_END (overlay_vec[i]);
2342
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
1033 oendpos = OVERLAY_POSITION (oend);
2784
f8c6796b7777 * xfaces.c (compute_char_face): When merging the overlays,
Jim Blandy <jimb@redhat.com>
parents: 2767
diff changeset
1034 if (oendpos < endpos)
2342
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
1035 endpos = oendpos;
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
1036 }
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
1037 }
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
1038
2795
e97e96fb0cb8 (compute_char_face): New args REGION_BEG, REGION_END.
Richard M. Stallman <rms@gnu.org>
parents: 2784
diff changeset
1039 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
1040 {
e97e96fb0cb8 (compute_char_face): New args REGION_BEG, REGION_END.
Richard M. Stallman <rms@gnu.org>
parents: 2784
diff changeset
1041 if (region_end < endpos)
e97e96fb0cb8 (compute_char_face): New args REGION_BEG, REGION_END.
Richard M. Stallman <rms@gnu.org>
parents: 2784
diff changeset
1042 endpos = region_end;
e97e96fb0cb8 (compute_char_face): New args REGION_BEG, REGION_END.
Richard M. Stallman <rms@gnu.org>
parents: 2784
diff changeset
1043 if (region_face >= 0 && region_face < next_face_id)
6615
96ddf85642d1 (compute_char_face): New arg MOUSE.
Richard M. Stallman <rms@gnu.org>
parents: 5858
diff changeset
1044 merge_faces (FRAME_PARAM_FACES (f)[region_face], &face);
2795
e97e96fb0cb8 (compute_char_face): New args REGION_BEG, REGION_END.
Richard M. Stallman <rms@gnu.org>
parents: 2784
diff changeset
1045 }
e97e96fb0cb8 (compute_char_face): New args REGION_BEG, REGION_END.
Richard M. Stallman <rms@gnu.org>
parents: 2784
diff changeset
1046
2342
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
1047 *endptr = endpos;
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
1048
3882
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
1049 return intern_computed_face (f, &face);
2342
f881f2936eec *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2336
diff changeset
1050 }
6784
d41c216ccd27 (frame_update_line_height): Check param_faces[i] not null.
Richard M. Stallman <rms@gnu.org>
parents: 6768
diff changeset
1051
3074
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
1052 /* Recompute the GC's for the default and modeline faces.
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
1053 We call this after changing frame parameters on which those GC's
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
1054 depend. */
5801
af397aaa8e6b (init_frame_faces): Clear FRAME_N_COMPUTED_FACES
Richard M. Stallman <rms@gnu.org>
parents: 5084
diff changeset
1055
3074
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
1056 void
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
1057 recompute_basic_faces (f)
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
1058 FRAME_PTR f;
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
1059 {
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
1060 /* If the frame's faces haven't been initialized yet, don't worry about
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
1061 this stuff. */
3882
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
1062 if (FRAME_N_PARAM_FACES (f) < 2)
3074
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
1063 return;
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
1064
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
1065 BLOCK_INPUT;
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
1066
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
1067 if (FRAME_DEFAULT_FACE (f)->gc)
9529
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
1068 XFreeGC (FRAME_X_DISPLAY (f), FRAME_DEFAULT_FACE (f)->gc);
3074
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
1069 if (FRAME_MODE_LINE_FACE (f)->gc)
9529
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
1070 XFreeGC (FRAME_X_DISPLAY (f), FRAME_MODE_LINE_FACE (f)->gc);
3882
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
1071
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
1072 compute_base_face (f, FRAME_DEFAULT_FACE (f));
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
1073 compute_base_face (f, FRAME_MODE_LINE_FACE (f));
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
1074
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
1075 merge_faces (FRAME_DEFAULT_PARAM_FACE (f), FRAME_DEFAULT_FACE (f));
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
1076 merge_faces (FRAME_MODE_LINE_PARAM_FACE (f), FRAME_MODE_LINE_FACE (f));
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
1077
9529
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
1078 intern_face (f, FRAME_DEFAULT_FACE (f));
8e610355cb29 Eliminate the "display faces"; store GCs in the "computed faces".
Richard M. Stallman <rms@gnu.org>
parents: 9326
diff changeset
1079 intern_face (f, FRAME_MODE_LINE_FACE (f));
3074
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
1080
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
1081 UNBLOCK_INPUT;
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
1082 }
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
1083
96b4623fdeb3 * xterm.h: New section for declarations for xfaces.c.
Jim Blandy <jimb@redhat.com>
parents: 3065
diff changeset
1084
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1085
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
1086 /* Lisp interface. */
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1087
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1088 DEFUN ("frame-face-alist", Fframe_face_alist, Sframe_face_alist, 1, 1, 0,
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1089 "")
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1090 (frame)
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1091 Lisp_Object frame;
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1092 {
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1093 CHECK_FRAME (frame, 0);
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1094 return XFRAME (frame)->face_alist;
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1095 }
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1096
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1097 DEFUN ("set-frame-face-alist", Fset_frame_face_alist, Sset_frame_face_alist,
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1098 2, 2, 0, "")
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1099 (frame, value)
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1100 Lisp_Object frame, value;
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1101 {
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1102 CHECK_FRAME (frame, 0);
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1103 XFRAME (frame)->face_alist = value;
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1104 return value;
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1105 }
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1106
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1107
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1108 DEFUN ("make-face-internal", Fmake_face_internal, Smake_face_internal, 1, 1, 0,
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1109 "Create face number FACE-ID on all frames.")
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1110 (face_id)
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1111 Lisp_Object face_id;
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1112 {
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
1113 Lisp_Object rest, frame;
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1114 int id = XINT (face_id);
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1115
2391
226dcdb8ab67 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2342
diff changeset
1116 CHECK_NUMBER (face_id, 0);
226dcdb8ab67 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2342
diff changeset
1117 if (id < 0 || id >= next_face_id)
226dcdb8ab67 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2342
diff changeset
1118 error ("Face id out of range");
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1119
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
1120 FOR_EACH_FRAME (rest, frame)
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1121 {
15383
9a6c8d10ac5f (init_frame_faces): Build faces for an MSDOS frame like for X frame.
Richard M. Stallman <rms@gnu.org>
parents: 15340
diff changeset
1122 if (FRAME_MSDOS_P (XFRAME (frame)) || FRAME_X_P (XFRAME (frame)))
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
1123 ensure_face_ready (XFRAME (frame), id);
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1124 }
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1125 return Qnil;
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1126 }
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1127
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1128
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1129 DEFUN ("set-face-attribute-internal", Fset_face_attribute_internal,
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1130 Sset_face_attribute_internal, 4, 4, 0, "")
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1131 (face_id, attr_name, attr_value, frame)
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1132 Lisp_Object face_id, attr_name, attr_value, frame;
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1133 {
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1134 struct face *face;
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1135 struct frame *f;
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1136 int magic_p;
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1137 int id;
9184
d50d31da6c8d (Fset_face_attribute_internal): Mark frame garbaged whenever
Richard M. Stallman <rms@gnu.org>
parents: 8965
diff changeset
1138 int garbaged = 0;
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1139
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1140 CHECK_FRAME (frame, 0);
2391
226dcdb8ab67 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2342
diff changeset
1141 CHECK_NUMBER (face_id, 0);
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1142 CHECK_SYMBOL (attr_name, 0);
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1143
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1144 f = XFRAME (frame);
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1145 id = XINT (face_id);
2391
226dcdb8ab67 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2342
diff changeset
1146 if (id < 0 || id >= next_face_id)
226dcdb8ab67 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2342
diff changeset
1147 error ("Face id out of range");
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1148
15383
9a6c8d10ac5f (init_frame_faces): Build faces for an MSDOS frame like for X frame.
Richard M. Stallman <rms@gnu.org>
parents: 15340
diff changeset
1149 if (! FRAME_X_P (f) && ! FRAME_MSDOS_P (f))
7583
7bfbe20f7686 (Fset_face_attribute_internal): Always return valid data.
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
1150 return Qnil;
2767
482fa0725db6 * xfaces.c (intern_frame_face): Exchange order of arguments, to
Jim Blandy <jimb@redhat.com>
parents: 2743
diff changeset
1151
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1152 ensure_face_ready (f, id);
3882
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
1153 face = FRAME_PARAM_FACES (f) [XFASTINT (face_id)];
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1154
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1155 if (EQ (attr_name, intern ("font")))
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1156 {
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
1157 #if defined (MSDOS) && !defined (HAVE_X_WINDOWS)
13626
177fbffc7359 (Fset_face_attribute_internal) [MSDOS]: Set font field to 1.
Richard M. Stallman <rms@gnu.org>
parents: 13622
diff changeset
1158 /* The one and only font. Must *not* be zero (which
177fbffc7359 (Fset_face_attribute_internal) [MSDOS]: Set font field to 1.
Richard M. Stallman <rms@gnu.org>
parents: 13622
diff changeset
1159 is taken to mean an unused face nowadays). */
177fbffc7359 (Fset_face_attribute_internal) [MSDOS]: Set font field to 1.
Richard M. Stallman <rms@gnu.org>
parents: 13622
diff changeset
1160 face->font = (XFontStruct *)1 ;
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
1161 #else
2391
226dcdb8ab67 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2342
diff changeset
1162 XFontStruct *font = load_font (f, attr_value);
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12608
diff changeset
1163 if (face->font != f->output_data.x->font)
2998
885e08ef0577 (Fset_face_attribute_internal): Don't call unload_font
Richard M. Stallman <rms@gnu.org>
parents: 2981
diff changeset
1164 unload_font (f, face->font);
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1165 face->font = font;
6879
471aebc1b151 (frame_update_line_height): Don't call x_set_window_size.
Richard M. Stallman <rms@gnu.org>
parents: 6784
diff changeset
1166 if (frame_update_line_height (f))
471aebc1b151 (frame_update_line_height): Don't call x_set_window_size.
Richard M. Stallman <rms@gnu.org>
parents: 6784
diff changeset
1167 x_set_window_size (f, 0, f->width, f->height);
9184
d50d31da6c8d (Fset_face_attribute_internal): Mark frame garbaged whenever
Richard M. Stallman <rms@gnu.org>
parents: 8965
diff changeset
1168 /* Must clear cache, since it might contain the font
d50d31da6c8d (Fset_face_attribute_internal): Mark frame garbaged whenever
Richard M. Stallman <rms@gnu.org>
parents: 8965
diff changeset
1169 we just got rid of. */
d50d31da6c8d (Fset_face_attribute_internal): Mark frame garbaged whenever
Richard M. Stallman <rms@gnu.org>
parents: 8965
diff changeset
1170 garbaged = 1;
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
1171 #endif
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1172 }
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1173 else if (EQ (attr_name, intern ("foreground")))
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1174 {
2391
226dcdb8ab67 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2342
diff changeset
1175 unsigned long new_color = load_color (f, attr_value);
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1176 unload_color (f, face->foreground);
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1177 face->foreground = new_color;
9184
d50d31da6c8d (Fset_face_attribute_internal): Mark frame garbaged whenever
Richard M. Stallman <rms@gnu.org>
parents: 8965
diff changeset
1178 garbaged = 1;
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1179 }
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1180 else if (EQ (attr_name, intern ("background")))
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1181 {
2391
226dcdb8ab67 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2342
diff changeset
1182 unsigned long new_color = load_color (f, attr_value);
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1183 unload_color (f, face->background);
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1184 face->background = new_color;
9184
d50d31da6c8d (Fset_face_attribute_internal): Mark frame garbaged whenever
Richard M. Stallman <rms@gnu.org>
parents: 8965
diff changeset
1185 garbaged = 1;
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1186 }
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1187 else if (EQ (attr_name, intern ("background-pixmap")))
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1188 {
9564
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
1189 unsigned int w, h;
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
1190 unsigned long new_pixmap = load_pixmap (f, attr_value, &w, &h);
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
1191 x_destroy_bitmap (f, face->stipple);
2391
226dcdb8ab67 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2342
diff changeset
1192 face->stipple = new_pixmap;
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1193 face->pixmap_w = w;
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1194 face->pixmap_h = h;
9564
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
1195 garbaged = 1;
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1196 }
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1197 else if (EQ (attr_name, intern ("underline")))
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1198 {
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1199 int new = !NILP (attr_value);
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1200 face->underline = new;
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1201 }
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1202 else
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1203 error ("unknown face attribute");
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1204
3882
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
1205 if (id == 0 || id == 1)
a0b9347a3973 Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents: 3843
diff changeset
1206 recompute_basic_faces (f);
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1207
9184
d50d31da6c8d (Fset_face_attribute_internal): Mark frame garbaged whenever
Richard M. Stallman <rms@gnu.org>
parents: 8965
diff changeset
1208 /* We must redraw the frame whenever any face font or color changes,
d50d31da6c8d (Fset_face_attribute_internal): Mark frame garbaged whenever
Richard M. Stallman <rms@gnu.org>
parents: 8965
diff changeset
1209 because it's possible that a merged (display) face
d50d31da6c8d (Fset_face_attribute_internal): Mark frame garbaged whenever
Richard M. Stallman <rms@gnu.org>
parents: 8965
diff changeset
1210 contains the font or color we just replaced.
d50d31da6c8d (Fset_face_attribute_internal): Mark frame garbaged whenever
Richard M. Stallman <rms@gnu.org>
parents: 8965
diff changeset
1211 And we must inhibit any Expose events until the redraw is done,
d50d31da6c8d (Fset_face_attribute_internal): Mark frame garbaged whenever
Richard M. Stallman <rms@gnu.org>
parents: 8965
diff changeset
1212 since they would try to use the invalid display faces. */
d50d31da6c8d (Fset_face_attribute_internal): Mark frame garbaged whenever
Richard M. Stallman <rms@gnu.org>
parents: 8965
diff changeset
1213 if (garbaged)
15992
fb5a22197a8d (Fset_face_attribute_internal): Set mouse_face_defer flag.
Richard M. Stallman <rms@gnu.org>
parents: 15383
diff changeset
1214 {
fb5a22197a8d (Fset_face_attribute_internal): Set mouse_face_defer flag.
Richard M. Stallman <rms@gnu.org>
parents: 15383
diff changeset
1215 SET_FRAME_GARBAGED (f);
fb5a22197a8d (Fset_face_attribute_internal): Set mouse_face_defer flag.
Richard M. Stallman <rms@gnu.org>
parents: 15383
diff changeset
1216 FRAME_X_DISPLAY_INFO (f)->mouse_face_defer = 1;
fb5a22197a8d (Fset_face_attribute_internal): Set mouse_face_defer flag.
Richard M. Stallman <rms@gnu.org>
parents: 15383
diff changeset
1217 }
2821
95010b414003 * xfaces.c (Fset_face_attribute_internal): Jolt redisplay, so it
Jim Blandy <jimb@redhat.com>
parents: 2818
diff changeset
1218
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1219 return Qnil;
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1220 }
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1221
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1222 DEFUN ("internal-next-face-id", Finternal_next_face_id, Sinternal_next_face_id,
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1223 0, 0, 0, "")
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1224 ()
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1225 {
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1226 return make_number (next_face_id++);
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1227 }
2391
226dcdb8ab67 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2342
diff changeset
1228
226dcdb8ab67 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2342
diff changeset
1229 /* Return the face id for name NAME on frame FRAME.
226dcdb8ab67 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2342
diff changeset
1230 (It should be the same for all frames,
226dcdb8ab67 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2342
diff changeset
1231 but it's as easy to use the "right" frame to look it up
226dcdb8ab67 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2342
diff changeset
1232 as to use any other one.) */
226dcdb8ab67 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2342
diff changeset
1233
3065
fff06093b756 * xfns.c (Fx_list_fonts): New function.
Jim Blandy <jimb@redhat.com>
parents: 2998
diff changeset
1234 int
fff06093b756 * xfns.c (Fx_list_fonts): New function.
Jim Blandy <jimb@redhat.com>
parents: 2998
diff changeset
1235 face_name_id_number (f, name)
fff06093b756 * xfns.c (Fx_list_fonts): New function.
Jim Blandy <jimb@redhat.com>
parents: 2998
diff changeset
1236 FRAME_PTR f;
fff06093b756 * xfns.c (Fx_list_fonts): New function.
Jim Blandy <jimb@redhat.com>
parents: 2998
diff changeset
1237 Lisp_Object name;
2391
226dcdb8ab67 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2342
diff changeset
1238 {
226dcdb8ab67 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2342
diff changeset
1239 Lisp_Object tem;
226dcdb8ab67 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2342
diff changeset
1240
4258
8f02e992e4dc (face_name_id_number): Use assq_no_quit, not Fassq.
Richard M. Stallman <rms@gnu.org>
parents: 3997
diff changeset
1241 tem = Fcdr (assq_no_quit (name, f->face_alist));
2767
482fa0725db6 * xfaces.c (intern_frame_face): Exchange order of arguments, to
Jim Blandy <jimb@redhat.com>
parents: 2743
diff changeset
1242 if (NILP (tem))
482fa0725db6 * xfaces.c (intern_frame_face): Exchange order of arguments, to
Jim Blandy <jimb@redhat.com>
parents: 2743
diff changeset
1243 return 0;
2391
226dcdb8ab67 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2342
diff changeset
1244 CHECK_VECTOR (tem, 0);
226dcdb8ab67 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2342
diff changeset
1245 tem = XVECTOR (tem)->contents[2];
226dcdb8ab67 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2342
diff changeset
1246 CHECK_NUMBER (tem, 0);
226dcdb8ab67 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2342
diff changeset
1247 return XINT (tem);
226dcdb8ab67 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2342
diff changeset
1248 }
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1249
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
1250 /* Emacs initialization. */
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
1251
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1252 void
2391
226dcdb8ab67 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2342
diff changeset
1253 syms_of_xfaces ()
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1254 {
2391
226dcdb8ab67 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2342
diff changeset
1255 Qface = intern ("face");
226dcdb8ab67 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2342
diff changeset
1256 staticpro (&Qface);
6615
96ddf85642d1 (compute_char_face): New arg MOUSE.
Richard M. Stallman <rms@gnu.org>
parents: 5858
diff changeset
1257 Qmouse_face = intern ("mouse-face");
96ddf85642d1 (compute_char_face): New arg MOUSE.
Richard M. Stallman <rms@gnu.org>
parents: 5858
diff changeset
1258 staticpro (&Qmouse_face);
9564
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
1259 Qpixmap_spec_p = intern ("pixmap-spec-p");
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
1260 staticpro (&Qpixmap_spec_p);
2391
226dcdb8ab67 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 2342
diff changeset
1261
2795
e97e96fb0cb8 (compute_char_face): New args REGION_BEG, REGION_END.
Richard M. Stallman <rms@gnu.org>
parents: 2784
diff changeset
1262 DEFVAR_INT ("region-face", &region_face,
e97e96fb0cb8 (compute_char_face): New args REGION_BEG, REGION_END.
Richard M. Stallman <rms@gnu.org>
parents: 2784
diff changeset
1263 "Face number to use to highlight the region\n\
e97e96fb0cb8 (compute_char_face): New args REGION_BEG, REGION_END.
Richard M. Stallman <rms@gnu.org>
parents: 2784
diff changeset
1264 The region is highlighted with this face\n\
e97e96fb0cb8 (compute_char_face): New args REGION_BEG, REGION_END.
Richard M. Stallman <rms@gnu.org>
parents: 2784
diff changeset
1265 when Transient Mark mode is enabled and the mark is active.");
e97e96fb0cb8 (compute_char_face): New args REGION_BEG, REGION_END.
Richard M. Stallman <rms@gnu.org>
parents: 2784
diff changeset
1266
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
1267 #ifdef HAVE_X_WINDOWS
9564
1bfb920ab23e (intern_face): Set the fill_style.
Richard M. Stallman <rms@gnu.org>
parents: 9529
diff changeset
1268 defsubr (&Spixmap_spec_p);
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
1269 #endif
2336
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1270 defsubr (&Sframe_face_alist);
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1271 defsubr (&Sset_frame_face_alist);
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1272 defsubr (&Smake_face_internal);
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1273 defsubr (&Sset_face_attribute_internal);
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1274 defsubr (&Sinternal_next_face_id);
7aaafd275bec Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1275 }
2730
139740855fa6 * xfaces.c (Fmake_face_internal): Do nothing for non-X frames.
Jim Blandy <jimb@redhat.com>
parents: 2538
diff changeset
1276
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9566
diff changeset
1277 #endif /* HAVE_FACES */