annotate src/faces.h @ 793:e38acbeb1cae

[xemacs-hg @ 2002-03-29 04:46:17 by ben] lots o' fixes etc/ChangeLog: New file. Separated out all entries for etc/ into their own ChangeLog. Includes entries for the following files: etc/BABYL, etc/BETA, etc/CHARSETS, etc/DISTRIB, etc/Emacs.ad, etc/FTP, etc/GNUS-NEWS, etc/GOATS, etc/HELLO, etc/INSTALL, etc/MACHINES, etc/MAILINGLISTS, etc/MSDOS, etc/MYTHOLOGY, etc/NEWS, etc/OXYMORONS, etc/PACKAGES, etc/README, etc/TUTORIAL, etc/TUTORIAL.de, etc/TUTORIAL.ja, etc/TUTORIAL.ko, etc/TUTORIAL.se, etc/aliases.ksh, etc/altrasoft-logo.xpm, etc/check_cygwin_setup.sh, etc/custom/example-themes/europe-theme.el, etc/custom/example-themes/ex-custom-file, etc/custom/example-themes/example-theme.el, etc/e/eterm.ti, etc/edt-user.doc, etc/enriched.doc, etc/etags.1, etc/gnuserv.1, etc/gnuserv.README, etc/package-index.LATEST.gpg, etc/package-index.LATEST.pgp, etc/photos/jan.png, etc/recycle.xpm, etc/refcard.tex, etc/sample.Xdefaults, etc/sample.emacs, etc/sgml/CATALOG, etc/sgml/HTML32.dtd, etc/skk/SKK.tut.E, etc/smilies/Face_ase.xbm, etc/smilies/Face_ase2.xbm, etc/smilies/Face_ase3.xbm, etc/smilies/Face_smile.xbm, etc/smilies/Face_weep.xbm, etc/sounds, etc/toolbar, etc/toolbar/workshop-cap-up.xpm, etc/xemacs-ja.1, etc/xemacs.1, etc/yow.lines, etc\BETA, etc\NEWS, etc\README, etc\TUTORIAL, etc\TUTORIAL.de, etc\check_cygwin_setup.sh, etc\sample.init.el, etc\unicode\README, etc\unicode\mule-ucs\*, etc\unicode\other\* unicode/unicode-consortium/8859-16.TXT: New file. mule/english.el: Define this charset now, since a bug was fixed that formerly prevented it. mule/ethio-util.el: Fix compile errors involving Unicode `characters', which should be integers. Makefile.in.in: Always include gui.c, to fix compile error when TTY-only. EmacsFrame.c, abbrev.c, alloc.c, buffer.c, buffer.h, bytecode.c, bytecode.h, callint.c, callproc.c, casetab.c, casetab.h, charset.h, chartab.c, chartab.h, cmds.c, console-msw.c, console-msw.h, console-tty.c, console-x.c, console-x.h, console.c, console.h, data.c, database.c, device-gtk.c, device-msw.c, device-x.c, device.c, device.h, dialog-msw.c, doc.c, doprnt.c, dumper.c, dynarr.c, editfns.c, eldap.c, eldap.h, elhash.c, elhash.h, emacs.c, eval.c, event-Xt.c, event-gtk.c, event-msw.c, event-stream.c, event-tty.c, event-unixoid.c, events.c, events.h, extents.c, extents.h, faces.c, faces.h, file-coding.c, file-coding.h, fileio.c, filelock.c, fns.c, frame-gtk.c, frame-msw.c, frame-tty.c, frame-x.c, frame.c, frame.h, free-hook.c, general-slots.h, glyphs-eimage.c, glyphs-gtk.c, glyphs-msw.c, glyphs-widget.c, glyphs-x.c, glyphs.c, glyphs.h, gpmevent.c, gtk-xemacs.c, gui-msw.c, gui-x.c, gui-x.h, gui.c, gui.h, gutter.c, gutter.h, indent.c, input-method-xlib.c, insdel.c, keymap.c, keymap.h, lisp-disunion.h, lisp-union.h, lisp.h, lread.c, lrecord.h, lstream.c, lstream.h, marker.c, menubar-gtk.c, menubar-msw.c, menubar-x.c, menubar.c, minibuf.c, mule-canna.c, mule-ccl.c, mule-charset.c, mule-wnnfns.c, native-gtk-toolbar.c, objects-msw.c, objects-tty.c, objects-x.c, objects.c, objects.h, opaque.c, opaque.h, postgresql.c, postgresql.h, print.c, process-unix.c, process.c, process.h, rangetab.c, rangetab.h, redisplay-gtk.c, redisplay-msw.c, redisplay-output.c, redisplay-tty.c, redisplay-x.c, redisplay.c, scrollbar-gtk.c, scrollbar-msw.c, scrollbar-x.c, scrollbar.c, scrollbar.h, search.c, select-gtk.c, select-x.c, sound.c, specifier.c, specifier.h, strftime.c, symbols.c, symeval.h, syntax.h, text.c, text.h, toolbar-common.c, toolbar-msw.c, toolbar.c, toolbar.h, tooltalk.c, tooltalk.h, ui-gtk.c, ui-gtk.h, undo.c, vm-limit.c, window.c, window.h: Eliminate XSETFOO. Replace all usages with wrap_foo(). Make symbol->name a Lisp_Object, not Lisp_String *. Eliminate nearly all uses of Lisp_String * in favor of Lisp_Object, and correct macros so most of them favor Lisp_Object. Create new error-behavior ERROR_ME_DEBUG_WARN -- output warnings, but at level `debug' (usually ignored). Use it when instantiating specifiers, so problems can be debugged. Move log-warning-minimum-level into C so that we can optimize ERROR_ME_DEBUG_WARN. Fix warning levels consistent with new definitions. Add default_ and parent fields to char table; not yet implemented. New fun Dynarr_verify(); use for further error checking on Dynarrs. Rearrange code at top of lisp.h in conjunction with dynarr changes. Fix eifree(). Use Eistrings in various places (format_event_object(), where_is_to_char(), and callers thereof) to avoid fixed-size strings buffers. New fun write_eistring(). Reindent and fix GPM code to follow standards. Set default MS Windows font to Lucida Console (same size as Courier New but less interline spacing, so more lines fit). Increase default frame size on Windows to 50 lines. (If that's too big for the workspace, the frame will be shrunk as necessary.) Fix problem with text files with no newlines (). (Change `convert-eol' coding system to use `nil' for autodetect, consistent with make-coding-system.) Correct compile warnings in vm-limit.c. Fix handling of reverse-direction charsets to avoid errors when opening (e.g.) mule-ucs/lisp/reldata/uiso8859-6.el. Recode some object printing methods to use write_fmt_string() instead of a fixed buffer and sprintf. Turn on display of png comments as warnings (level `info'), now that they're unobtrusive. Revamped the sound documentation. Fixed bug in redisplay w.r.t. hscroll/truncation/continuation glyphs causing jumping up and down of the lines, since they're bigger than the line size. (It was seen most obviously when there's a horizontal scroll bar, e.g. do C-h a glyph or something like that.) The problem was that the glyph-contrib-p setting on glyphs was ignored even if it was set properly, which it wasn't until now.
author ben
date Fri, 29 Mar 2002 04:49:13 +0000
parents 943eaba38521
children 6fa9919a9a0b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 /* Face data structures.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2 Copyright (C) 1995 Board of Trustees, University of Illinois.
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 617
diff changeset
3 Copyright (C) 1995, 2002 Ben Wing
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5 This file is part of XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7 XEmacs is free software; you can redistribute it and/or modify it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9 Free Software Foundation; either version 2, or (at your option) any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10 later version.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12 XEmacs is distributed in the hope that it will be useful, but WITHOUT
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15 for more details.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18 along with XEmacs; see the file COPYING. If not, write to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20 Boston, MA 02111-1307, USA. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22 /* Synched up with: Not in FSF. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
23
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
24 #ifndef INCLUDED_faces_h_
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
25 #define INCLUDED_faces_h_
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 617
diff changeset
27 #include "charset.h" /* for NUM_LEADING_BYTES */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
29 /* a Lisp_Face is the C object corresponding to a face. There is one
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
30 of these per face. It basically contains all of the specifiers for
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
31 the built-in face properties, plus the plist of user-specified
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32 properties. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34 struct Lisp_Face
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
36 struct lcrecord_header header;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38 Lisp_Object name;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39 Lisp_Object doc_string;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40 unsigned int dirty :1; /* Set whenever a face property is changed on
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41 a face. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43 Lisp_Object foreground;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44 Lisp_Object background;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45 Lisp_Object font;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 Lisp_Object display_table;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48 Lisp_Object background_pixmap;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50 Lisp_Object underline;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51 Lisp_Object strikethru;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52 Lisp_Object highlight;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53 Lisp_Object dim;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 Lisp_Object blinking;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55 Lisp_Object reverse;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 Lisp_Object plist;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59 Lisp_Object charsets_warned_about;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
62 /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64 A face cache element caches the results of instantiating the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65 properties of a face in a particular window. (Instantiation can
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66 take a long time so this is very important.) Each window contains
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67 an array of face cache elements (called the "face cache"), one for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68 each face that has been seen in the window so far.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70 Some tricky stuff is done to make sure the face cache does not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71 become inconsistent:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73 1) Switching buffers in a window clears the face cache for that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74 window, because this can change the way any property is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75 instantiated in the window.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76 2) Setting a face property causes that face to be marked as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77 dirty. This causes various stuff to happen to make sure
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78 the appropriate face cache elements are invalidated.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79 (#### Actually this doesn't work quite right, and errs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
80 too much on the side of invalidating unnecessary stuff.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
82 There are also face cache elements for "merged faces", which are the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83 result of merging all the faces that overlap a particular buffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84 position. The merging is always done in the context of a particular
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
85 domain (specifically, a window), and the face cache element is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
86 specific to a particular window. (Face cache elements are contained
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
87 in an array that is attached to each struct_window.) The reason that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88 the merging takes place in the context of a particular window has
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89 to do with the way the merging works:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
91 1) All extents overlying the buffer position are sorted by descending
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92 priority.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
93 2) The property of a particular merged face comes from the highest-
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94 priority face that specifies a value for that particular property.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
95 3) The way to determine whether a face specifies a value for a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96 particular property is to instantiate that face's property in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97 the window in question with the no-fallback option set, to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98 see if we got anything.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100 For Mule, things get a bit trickier because there can be multiple
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101 fonts per face/window combination -- the charset is an argument
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
102 to specifier-instance.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
103
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104 We have two possible data structure representations:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
105
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
106 1) Keep the original "one font per face cache element" representation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107 and use a different face cache element for each charset.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
108 2) Allow multiple fonts to be in a single face cache element.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
110 I've chosen to use (2) -- the data structure gets more complicated
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111 but the algorithms for maintaining face cache elements end up
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112 simpler.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
113 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
114
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
115 #define NUM_STATIC_CACHEL_FACES 4
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
116
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
117 typedef struct face_cachel face_cachel;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
118 struct face_cachel
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
119 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
120 /* There are two kinds of cachels; those created from a single face
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
121 and those created by merging more than one face. In the former
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
122 case, the FACE element specifies the face used. In the latter
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
123 case, the MERGED_FACES_STATIC and MERGED_FACES elements specify
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
124 the faces used for merging by giving the indices of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
125 corresponding single-face cachels.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
126
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
127 Formerly we didn't bother to keep track of the faces used for
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
128 merging. We do now because we need to do so because there is no
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
129 other way to properly handle multiple charsets for Mule in the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
130 presence of display tables short of always computing the values
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
131 for all charsets, which is very expensive. Instead, we use a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
132 lazy scheme where we only compute the font for a particular charset
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
133 when it is needed. (The exception is the font for the ASCII charset.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
134 We always compute it, just like the other attributes, because
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
135 many places in the C code refer to the font of the ASCII charset
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
136 and expect it to always be there.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
137
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
138 We store the first four faces in a static array, and use a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
139 Dynarr for the rest. This has the advantage that the space used
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
140 is small but the Dynarr will almost never be created, so we
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
141 won't spend much time in malloc()/free().
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
142
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
143 The order of the faces here is decreasing extent priority. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
144 Lisp_Object face;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
145 int merged_faces_static[NUM_STATIC_CACHEL_FACES];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
146 int_dynarr *merged_faces;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
147 int nfaces;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
148
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
149 /* The values stored here are computed by calling specifier_instance()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
150 on the appropriate specifiers. This means that we will have either
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
151 a value computed from the face itself or a value computed from the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
152 default face. We need to distinguish the two so that merging works
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
153 properly -- a value that comes from the default face is treated
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
154 as "unspecified" during merging and is overridden by lower-priority
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
155 faces. This is what the _specified flags below are for. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
156
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157 Lisp_Object foreground;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
158 Lisp_Object background;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 617
diff changeset
159 /* There are currently 128 or 129 possible charsets under Mule. For the
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160 moment we just take the easy way out and allocate space for each
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
161 of them. This avoids messing with Dynarrs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
163 #### We should look into this and probably clean it up
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
164 to use Dynarrs. This may be a big space hog as is. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165 Lisp_Object font[NUM_LEADING_BYTES];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
166
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
167 Lisp_Object display_table;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
168 Lisp_Object background_pixmap;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
169
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
170 unsigned int underline :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171 unsigned int strikethru :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
172 unsigned int highlight :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
173 unsigned int dim :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174 unsigned int blinking :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
175 unsigned int reverse :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
176
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
177 /* Used when merging to tell if the above field represents an actual
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
178 value of this face or a fallback value. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179 /* #### Of course we should use a bit array or something. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180 unsigned char font_specified[NUM_LEADING_BYTES];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181 unsigned int foreground_specified :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
182 unsigned int background_specified :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
183 unsigned int display_table_specified :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184 unsigned int background_pixmap_specified :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
185
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
186 unsigned int strikethru_specified :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
187 unsigned int underline_specified :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188 unsigned int highlight_specified :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189 unsigned int dim_specified :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 unsigned int blinking_specified :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
191 unsigned int reverse_specified :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
192
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193 /* The updated flag is set after we calculate the values for the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194 face cachel and cleared whenever a face changes, to indicate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195 that the values stored here might be wrong. The next time
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196 we go to access the values, we recompute them; if any values
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197 change, we set the DIRTY flag, which tells the output routines
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
198 that a face value has in fact changed and the sections of text
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
199 using this face need to be redrawn.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
200
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
201 It is trickier with fonts because we don't automatically
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
202 recompute the fonts but do it only when it is necessary.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
203 (The ASCII font is an exception, of course; see above).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
204
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
205 In the case of fonts, we maintain a separate updated flag
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
206 for each font. Whenever we need to access the font for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
207 a particular charset, we recalculate it if either its
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208 value is Qunbound (meaning it's never been computed at all)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
209 or the updated flag is not set. We set the dirty flag if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
210 the value is not the same as before and the previous value
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
211 was not Qunbound.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
212
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
213 #### Note that we don't yet deal with the case of the new
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
214 value being Qunbound, as could happen if no fonts of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
215 right sort are available on the system. In this case, the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
216 whole program will just crash. For the moment, this is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
217 OK (for debugging purposes) but we should fix this by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
218 storing a "blank font" if the instantiation fails. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219 unsigned int dirty :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220 unsigned int updated :1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
221 /* #### Of course we should use a bit array or something. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
222 unsigned char font_updated[NUM_LEADING_BYTES];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
223 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
225 DECLARE_LRECORD (face, Lisp_Face);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
226 #define XFACE(x) XRECORD (x, face, Lisp_Face)
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 578
diff changeset
227 #define wrap_face(p) wrap_record (p, face)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
228 #define FACEP(x) RECORDP (x, face)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229 #define CHECK_FACE(x) CHECK_RECORD (x, face)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
230
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
231 Lisp_Object ensure_face_cachel_contains_charset (struct face_cachel *cachel,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
232 Lisp_Object domain,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
233 Lisp_Object charset);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
234 void ensure_face_cachel_complete (struct face_cachel *cachel,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
235 Lisp_Object domain,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
236 unsigned char *charsets);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
237 void update_face_cachel_data (struct face_cachel *cachel,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
238 Lisp_Object domain,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
239 Lisp_Object face);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
240 void face_cachel_charset_font_metric_info (struct face_cachel *cachel,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
241 unsigned char *charsets,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
242 struct font_metric_info *fm);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
243 void mark_face_cachels (face_cachel_dynarr *elements);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
244 void mark_face_cachels_as_clean (struct window *w);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
245 void mark_face_cachels_as_not_updated (struct window *w);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
246 void reset_face_cachel (struct face_cachel *inst);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
247 void reset_face_cachels (struct window *w);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
248 face_index get_builtin_face_cache_index (struct window *w,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
249 Lisp_Object face);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
250 #ifdef MEMORY_USAGE_STATS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
251 int compute_face_cachel_usage (face_cachel_dynarr *face_cachels,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
252 struct overhead_stats *ovstats);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
253 #endif /* MEMORY_USAGE_STATS */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
254
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
255 EXFUN (Fface_name, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
256 EXFUN (Ffind_face, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
257 EXFUN (Fget_face, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
258
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
259 extern Lisp_Object Qstrikethru, Vbuilt_in_face_specifiers, Vdefault_face;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
260 extern Lisp_Object Vleft_margin_face, Vpointer_face, Vright_margin_face;
432
3a7e78e1142d Import from CVS: tag r21-2-24
cvs
parents: 428
diff changeset
261 extern Lisp_Object Vtext_cursor_face, Vvertical_divider_face;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
262 extern Lisp_Object Vtoolbar_face, Vgui_element_face, Vwidget_face;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
263
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
264 void mark_all_faces_as_clean (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
265 void init_frame_faces (struct frame *f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
266 void init_device_faces (struct device *d);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
267 void init_global_faces (struct device *d);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
268 face_index get_extent_fragment_face_cache_index (struct window *w,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
269 struct extent_fragment *ef);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
270 void update_frame_face_values (struct frame *f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
271 void face_property_was_changed (Lisp_Object face, Lisp_Object property,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
272 Lisp_Object locale);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
273 void default_face_font_info (Lisp_Object domain, int *ascent,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
274 int *descent, int *height, int *width,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
275 int *proportional_p);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
276 void default_face_height_and_width (Lisp_Object domain,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
277 int *height, int *width);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
278 void default_face_height_and_width_1 (Lisp_Object domain,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
279 int *height, int *width);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
280
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
281 #define FACE_CACHEL_FONT(cachel, charset) \
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 617
diff changeset
282 (cachel->font[XCHARSET_LEADING_BYTE (charset) - MIN_LEADING_BYTE])
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
283
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
284 #define WINDOW_FACE_CACHEL(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
285 Dynarr_atp ((window)->face_cachels, index)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
286
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
287 #define FACE_CACHEL_FINDEX_UNSAFE(cachel, offset) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
288 ((offset) < NUM_STATIC_CACHEL_FACES \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
289 ? (cachel)->merged_faces_static[offset] \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
290 : Dynarr_at ((cachel)->merged_faces, (offset) - NUM_STATIC_CACHEL_FACES))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
291
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
292 #define WINDOW_FACE_CACHEL_FACE(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
293 (WINDOW_FACE_CACHEL (window, index)->face)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
294 #define WINDOW_FACE_CACHEL_FOREGROUND(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
295 (WINDOW_FACE_CACHEL (window, index)->foreground)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
296 #define WINDOW_FACE_CACHEL_BACKGROUND(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
297 (WINDOW_FACE_CACHEL (window, index)->background)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
298 /* #### This can be referenced by various functions,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
299 but face_cachels isn't initialized for the stream device.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
300 Since it doesn't need the value we just return nil here to avoid
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
301 blowing up in multiple places. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
302 #define WINDOW_FACE_CACHEL_FONT(window, index, charset) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
303 ((window)->face_cachels \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
304 ? FACE_CACHEL_FONT (WINDOW_FACE_CACHEL (window, index), charset) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
305 : Qnil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
306 #define WINDOW_FACE_CACHEL_DISPLAY_TABLE(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
307 (WINDOW_FACE_CACHEL (window, index)->display_table)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
308 #define WINDOW_FACE_CACHEL_BACKGROUND_PIXMAP(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
309 (WINDOW_FACE_CACHEL (window, index)->background_pixmap)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
310 #define WINDOW_FACE_CACHEL_DIRTY(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
311 (WINDOW_FACE_CACHEL (window, index)->dirty)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
312 #define WINDOW_FACE_CACHEL_UNDERLINE_P(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
313 (WINDOW_FACE_CACHEL (window, index)->underline)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
314 #define WINDOW_FACE_CACHEL_HIGHLIGHT_P(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
315 (WINDOW_FACE_CACHEL (window, index)->highlight)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
316 #define WINDOW_FACE_CACHEL_DIM_P(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
317 (WINDOW_FACE_CACHEL (window, index)->dim)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
318 #define WINDOW_FACE_CACHEL_BLINKING_P(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
319 (WINDOW_FACE_CACHEL (window, index)->blinking)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
320 #define WINDOW_FACE_CACHEL_REVERSE_P(window, index) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
321 (WINDOW_FACE_CACHEL (window, index)->reverse)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
322
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
323 #define FACE_PROPERTY_SPECIFIER(face, property) Fget (face, property, Qnil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
324
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
325 #define FACE_PROPERTY_INSTANCE_1(face, property, domain, errb, no_fallback, depth) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
326 specifier_instance (FACE_PROPERTY_SPECIFIER (face, property), Qunbound, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
327 domain, errb, 1, no_fallback, depth)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
328
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
329 #define FACE_PROPERTY_INSTANCE(face, property, domain, no_fallback, depth) \
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
330 FACE_PROPERTY_INSTANCE_1 (face, property, domain, ERROR_ME_DEBUG_WARN, \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
331 no_fallback, depth)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
332
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
333 Lisp_Object face_property_matching_instance (Lisp_Object face,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
334 Lisp_Object property,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
335 Lisp_Object charset,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
336 Lisp_Object domain,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 498
diff changeset
337 Error_Behavior errb,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
338 int no_fallback,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
339 Lisp_Object depth);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
340
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
341 #define FACE_PROPERTY_SPEC_LIST(face, property, locale) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
342 Fspecifier_spec_list (FACE_PROPERTY_SPECIFIER (face, property), \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
343 locale, Qnil, Qnil)
498
88e7e9bafe19 [xemacs-hg @ 2001-05-02 16:08:10 by james]
james
parents: 442
diff changeset
344 #define SET_FACE_PROPERTY(face, property, value, locale, tag, how_to_add) \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
345 Fadd_spec_to_specifier (FACE_PROPERTY_SPECIFIER (face, property), \
498
88e7e9bafe19 [xemacs-hg @ 2001-05-02 16:08:10 by james]
james
parents: 442
diff changeset
346 value, locale, tag, how_to_add)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
347
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
348 #define FACE_FOREGROUND(face, domain) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
349 FACE_PROPERTY_INSTANCE (face, Qforeground, domain, 0, Qzero)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
350 #define FACE_BACKGROUND(face, domain) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
351 FACE_PROPERTY_INSTANCE (face, Qbackground, domain, 0, Qzero)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
352 #define FACE_FONT(face, domain, charset) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
353 face_property_matching_instance (face, Qfont, charset, domain, \
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
354 ERROR_ME_DEBUG_WARN, 0, Qzero)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
355 #define FACE_DISPLAY_TABLE(face, domain) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
356 FACE_PROPERTY_INSTANCE (face, Qdisplay_table, domain, 0, Qzero)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
357 #define FACE_BACKGROUND_PIXMAP(face, domain) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
358 FACE_PROPERTY_INSTANCE (face, Qbackground_pixmap, domain, 0, Qzero)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
359 #define FACE_UNDERLINE_P(face, domain) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
360 (!NILP (FACE_PROPERTY_INSTANCE (face, Qunderline, domain, 0, Qzero)))
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
361 #define FACE_STRIKETHRU_P(face, domain) \
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
362 (!NILP (FACE_PROPERTY_INSTANCE (face, Qstrikethru, domain, 0, Qzero)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
363 #define FACE_HIGHLIGHT_P(face, domain) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
364 (!NILP (FACE_PROPERTY_INSTANCE (face, Qhighlight, domain, 0, Qzero)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
365 #define FACE_DIM_P(face, domain) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
366 (!NILP (FACE_PROPERTY_INSTANCE (face, Qdim, domain, 0, Qzero)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
367 #define FACE_BLINKING_P(face, domain) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
368 (!NILP (FACE_PROPERTY_INSTANCE (face, Qblinking, domain, 0, Qzero)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
369 #define FACE_REVERSE_P(face, domain) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
370 (!NILP (FACE_PROPERTY_INSTANCE (face, Qreverse, domain, 0, Qzero)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
371
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 432
diff changeset
372 #endif /* INCLUDED_faces_h_ */