Mercurial > hg > xemacs-beta
annotate src/objects-impl.h @ 5080:5502045ec510
The background-placement face property.
-------------------- ChangeLog entries follow: --------------------
lisp/ChangeLog addition:
2010-02-25 Didier Verna <didier@xemacs.org>
The background-placement face property.
* cl-macs.el (face-background-placement): New defsetf.
* cus-face.el (custom-face-attributes):
* faces.el (face-interactive):
* faces.el (set-face-property):
* faces.el (face-equal):
* faces.el (init-other-random-faces): Update.
* faces.el (face-background-placement):
* faces.el (set-face-background-placement):
* faces.el (face-background-placement-instance):
* faces.el (face-background-placement-instance-p):
* frame.el (set-frame-background-placement):
* frame.el (frame-background-placement):
* frame.el (frame-background-placement-instance):
* objects.el (make-face-background-placement-specifier): New.
man/ChangeLog addition:
2010-02-25 Didier Verna <didier@xemacs.org>
The background-placement face property.
* xemacs/custom.texi (Faces): Document it.
src/ChangeLog addition:
2010-02-25 Didier Verna <didier@xemacs.org>
The background-placement face property.
* console-x-impl.h (struct x_frame): Add new slots x and y.
* console-x-impl.h (FRAME_X_X, FRAME_X_Y): New slot accessors.
* console-gtk-impl.h: Fake something similar for potential port.
* frame-x.c (x_get_frame_text_position): New function.
* frame-x.c (x_init_frame_3): Use it.
* event-Xt.c (emacs_Xt_handle_magic_event): Eat spurious
ConfigureNotify events, get the frame position and mark frame
faces changed.
* objects-impl.h: The face_background_placement_specifier
structure and its accessors.
* objects.c: New symbols Qabsolute and Qrelative.
* objects.c (face_background_placement_create):
* objects.c (face_background_placement_mark):
* objects.c (face_background_placement_instantiate):
* objects.c (face_background_placement_validate):
* objects.c (face_background_placement_after_change):
* objects.c (set_face_background_placement_attached_to): New.
* objects.h (set_face_background_palcement_attached_to): Declare
the one above.
* objects.c (syms_of_objects):
* objects.c (specifier_type_create_objects):
* objects.c (reinit_specifier_type_create_objects):
* objects.c (reinit_vars_of_objects): Update for the modifications
above.
* console-xlike-inc.h (XLIKE_GC_TS_X_ORIGIN, XLIKE_GC_TS_X_ORIGIN):
New X11/Gtk compatibility macros.
* redisplay-xlike-inc.c (XLIKE_get_gc): Add a background placement
argument and handle it.
* gtk-glue.c (face_to_gc):
* redisplay-xlike-inc.c (XLIKE_output_string):
* redisplay-xlike-inc.c (XLIKE_output_pixmap):
* redisplay-xlike-inc.c (XLIKE_output_blank):
* redisplay-xlike-inc.c (XLIKE_output_horizontal_line):
* redisplay-xlike-inc.c (XLIKE_output_eol_cursor): Update
accordingly.
* console-impl.h (struct console_methods): Add a background
placement (Lisp_Object) argument to the clear_region method.
* console-stream.c (stream_clear_region):
* redisplay-tty.c (tty_clear_region):
* redisplay-msw.c (mswindows_clear_region):
* redisplay-xlike-inc.c (XLIKE_clear_region): Update accordingly.
* redisplay-output.c (redisplay_clear_region): Handle the
background placement property and update the call to the
clear_region method.
* faces.h (struct Lisp_Face):
* faces.h (struct face_cachel): Add a background placement slot.
* faces.h (WINDOW_FACE_CACHEL_BACKGROUND_PLACEMENT): New accessor.
* faces.c (mark_face):
* faces.c (face_equal):
* faces.c (face_getprop):
* faces.c (face_putprop):
* faces.c (face_remprop):
* faces.c (face_plist):
* faces.c (reset_face):
* faces.c (mark_face_cachels):
* faces.c (update_face_cachel_data):
* faces.c (merge_face_cachel_data):
* faces.c (reset_face_cachel):
* faces.c (Fmake_face):
* faces.c (Fcopy_face): Handle the background placement property.
* faces.c (syms_of_faces):
* faces.c (vars_of_faces):
* faces.c (complex_vars_of_faces): Update accordingly.
author | Didier Verna <didier@lrde.epita.fr> |
---|---|
date | Thu, 25 Feb 2010 16:19:01 +0100 |
parents | ad2f4ae9895b |
children | 7be849cb8828 |
rev | line source |
---|---|
872 | 1 /* Generic object functions -- header implementation. |
2 Copyright (C) 1995 Board of Trustees, University of Illinois. | |
3 Copyright (C) 1995, 1996, 2002 Ben Wing. | |
5080
5502045ec510
The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents:
3094
diff
changeset
|
4 Copyright (C) 2010 Didier Verna |
872 | 5 |
6 This file is part of XEmacs. | |
7 | |
8 XEmacs is free software; you can redistribute it and/or modify it | |
9 under the terms of the GNU General Public License as published by the | |
10 Free Software Foundation; either version 2, or (at your option) any | |
11 later version. | |
12 | |
13 XEmacs is distributed in the hope that it will be useful, but WITHOUT | |
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
16 for more details. | |
17 | |
18 You should have received a copy of the GNU General Public License | |
19 along with XEmacs; see the file COPYING. If not, write to | |
20 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
21 Boston, MA 02111-1307, USA. */ | |
22 | |
23 /* Synched up with: Not in FSF. */ | |
24 | |
25 #ifndef INCLUDED_objects_impl_h_ | |
26 #define INCLUDED_objects_impl_h_ | |
27 | |
28 #include "specifier.h" | |
29 #include "objects.h" | |
30 | |
31 /***************************************************************************** | |
32 * Color Specifier Object * | |
33 *****************************************************************************/ | |
34 | |
35 struct color_specifier | |
36 { | |
37 Lisp_Object face; /* face this is attached to, or nil */ | |
38 Lisp_Object face_property; /* property of that face */ | |
39 }; | |
40 | |
41 #define COLOR_SPECIFIER_DATA(g) SPECIFIER_TYPE_DATA (g, color) | |
42 #define COLOR_SPECIFIER_FACE(g) (COLOR_SPECIFIER_DATA (g)->face) | |
43 #define COLOR_SPECIFIER_FACE_PROPERTY(g) \ | |
44 (COLOR_SPECIFIER_DATA (g)->face_property) | |
45 | |
46 DECLARE_SPECIFIER_TYPE (color); | |
47 #define XCOLOR_SPECIFIER(x) XSPECIFIER_TYPE (x, color) | |
48 #define COLOR_SPECIFIERP(x) SPECIFIER_TYPEP (x, color) | |
49 #define CHECK_COLOR_SPECIFIER(x) CHECK_SPECIFIER_TYPE (x, color) | |
50 #define CONCHECK_COLOR_SPECIFIER(x) CONCHECK_SPECIFIER_TYPE (x, color) | |
51 | |
52 /***************************************************************************** | |
53 * Font Specifier Object * | |
54 *****************************************************************************/ | |
55 | |
56 struct font_specifier | |
57 { | |
58 Lisp_Object face; /* face this is attached to, or nil */ | |
59 Lisp_Object face_property; /* property of that face */ | |
60 }; | |
61 | |
62 #define FONT_SPECIFIER_DATA(g) SPECIFIER_TYPE_DATA (g, font) | |
63 #define FONT_SPECIFIER_FACE(g) (FONT_SPECIFIER_DATA (g)->face) | |
64 #define FONT_SPECIFIER_FACE_PROPERTY(g) \ | |
65 (FONT_SPECIFIER_DATA (g)->face_property) | |
66 | |
67 DECLARE_SPECIFIER_TYPE (font); | |
68 #define XFONT_SPECIFIER(x) XSPECIFIER_TYPE (x, font) | |
69 #define FONT_SPECIFIERP(x) SPECIFIER_TYPEP (x, font) | |
70 #define CHECK_FONT_SPECIFIER(x) CHECK_SPECIFIER_TYPE (x, font) | |
71 #define CONCHECK_FONT_SPECIFIER(x) CONCHECK_SPECIFIER_TYPE (x, font) | |
72 | |
73 /***************************************************************************** | |
74 * Face Boolean Specifier Object * | |
75 *****************************************************************************/ | |
76 | |
77 struct face_boolean_specifier | |
78 { | |
79 Lisp_Object face; /* face this is attached to, or nil */ | |
80 Lisp_Object face_property; /* property of that face */ | |
81 }; | |
82 | |
83 #define FACE_BOOLEAN_SPECIFIER_DATA(g) SPECIFIER_TYPE_DATA (g, face_boolean) | |
84 #define FACE_BOOLEAN_SPECIFIER_FACE(g) (FACE_BOOLEAN_SPECIFIER_DATA (g)->face) | |
85 #define FACE_BOOLEAN_SPECIFIER_FACE_PROPERTY(g) \ | |
86 (FACE_BOOLEAN_SPECIFIER_DATA (g)->face_property) | |
87 | |
88 DECLARE_SPECIFIER_TYPE (face_boolean); | |
89 extern Lisp_Object Qface_boolean; | |
90 #define XFACE_BOOLEAN_SPECIFIER(x) XSPECIFIER_TYPE (x, face_boolean) | |
91 #define FACE_BOOLEAN_SPECIFIERP(x) SPECIFIER_TYPEP (x, face_boolean) | |
92 #define CHECK_FACE_BOOLEAN_SPECIFIER(x) \ | |
93 CHECK_SPECIFIER_TYPE (x, face_boolean) | |
94 #define CONCHECK_FACE_BOOLEAN_SPECIFIER(x) \ | |
95 CONCHECK_SPECIFIER_TYPE (x, face_boolean) | |
96 | |
5080
5502045ec510
The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents:
3094
diff
changeset
|
97 /***************************************************************************** |
5502045ec510
The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents:
3094
diff
changeset
|
98 * Background Placement Specifier Object * |
5502045ec510
The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents:
3094
diff
changeset
|
99 *****************************************************************************/ |
5502045ec510
The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents:
3094
diff
changeset
|
100 |
5502045ec510
The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents:
3094
diff
changeset
|
101 struct face_background_placement_specifier |
5502045ec510
The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents:
3094
diff
changeset
|
102 { |
5502045ec510
The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents:
3094
diff
changeset
|
103 Lisp_Object face; /* face this is attached to, or nil */ |
5502045ec510
The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents:
3094
diff
changeset
|
104 }; |
5502045ec510
The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents:
3094
diff
changeset
|
105 |
5502045ec510
The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents:
3094
diff
changeset
|
106 #define FACE_BACKGROUND_PLACEMENT_SPECIFIER_DATA(g) \ |
5502045ec510
The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents:
3094
diff
changeset
|
107 SPECIFIER_TYPE_DATA (g, face_background_placement) |
5502045ec510
The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents:
3094
diff
changeset
|
108 #define FACE_BACKGROUND_PLACEMENT_SPECIFIER_FACE(g) \ |
5502045ec510
The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents:
3094
diff
changeset
|
109 (FACE_BACKGROUND_PLACEMENT_SPECIFIER_DATA (g)->face) |
5502045ec510
The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents:
3094
diff
changeset
|
110 |
5502045ec510
The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents:
3094
diff
changeset
|
111 DECLARE_SPECIFIER_TYPE (face_background_placement); |
5502045ec510
The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents:
3094
diff
changeset
|
112 extern Lisp_Object Qface_background_placement, Qabsolute, Qrelative; |
5502045ec510
The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents:
3094
diff
changeset
|
113 #define XFACE_BACKGROUND_PLACEMENT_SPECIFIER(x) \ |
5502045ec510
The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents:
3094
diff
changeset
|
114 XSPECIFIER_TYPE (x, face_background_placement) |
5502045ec510
The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents:
3094
diff
changeset
|
115 #define FACE_BACKGROUND_PLACEMENT_SPECIFIERP(x) \ |
5502045ec510
The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents:
3094
diff
changeset
|
116 SPECIFIER_TYPEP (x, face_background_placement) |
5502045ec510
The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents:
3094
diff
changeset
|
117 #define CHECK_FACE_BACKGROUND_PLACEMENT_SPECIFIER(x) \ |
5502045ec510
The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents:
3094
diff
changeset
|
118 CHECK_SPECIFIER_TYPE (x, face_background_placement) |
5502045ec510
The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents:
3094
diff
changeset
|
119 #define CONCHECK_FACE_BACKGROUND_PLACEMENT_SPECIFIER(x) \ |
5502045ec510
The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents:
3094
diff
changeset
|
120 CONCHECK_SPECIFIER_TYPE (x, face_background_placement) |
5502045ec510
The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents:
3094
diff
changeset
|
121 |
872 | 122 /**************************************************************************** |
123 * Color Instance Object * | |
124 ****************************************************************************/ | |
125 | |
126 struct Lisp_Color_Instance | |
127 { | |
3017 | 128 struct LCRECORD_HEADER header; |
872 | 129 Lisp_Object name; |
130 Lisp_Object device; | |
131 | |
1204 | 132 /* See comment in struct console about console variants. */ |
934 | 133 enum console_variant color_instance_type; |
134 | |
872 | 135 /* console-type-specific data */ |
136 void *data; | |
137 }; | |
138 | |
139 #define COLOR_INSTANCE_NAME(c) ((c)->name) | |
140 #define COLOR_INSTANCE_DEVICE(c) ((c)->device) | |
141 | |
142 /**************************************************************************** | |
143 * Font Instance Object * | |
144 ****************************************************************************/ | |
145 | |
146 struct Lisp_Font_Instance | |
147 { | |
3017 | 148 struct LCRECORD_HEADER header; |
872 | 149 Lisp_Object name; /* the instantiator used to create the font instance */ |
150 Lisp_Object truename; /* used by the device-specific methods; we need to | |
151 call them to get the truename (#### in reality, | |
152 they all probably just store the truename here | |
153 if they know it, and nil otherwise; we should | |
3094 | 154 check this and enforce it as a general policy |
155 X and GTK do this, except that when they don't | |
156 know they return NAME and don't update TRUENAME. | |
157 MS Windows initializes TRUENAME when the font is | |
158 initialized. TTY doesn't do truename.) */ | |
872 | 159 Lisp_Object device; |
3094 | 160 Lisp_Object charset; /* Mule charset, or whatever */ |
872 | 161 |
1204 | 162 /* See comment in struct console about console variants. */ |
934 | 163 enum console_variant font_instance_type; |
164 | |
872 | 165 unsigned short ascent; /* extracted from `font', or made up */ |
166 unsigned short descent; | |
167 unsigned short width; | |
168 unsigned short height; | |
169 int proportional_p; | |
170 | |
171 /* console-type-specific data */ | |
172 void *data; | |
173 }; | |
174 | |
175 #define FONT_INSTANCE_NAME(f) ((f)->name) | |
3094 | 176 #define FONT_INSTANCE_TRUENAME(f) ((f)->truename) |
177 #define FONT_INSTANCE_CHARSET(f) ((f)->charset) | |
872 | 178 #define FONT_INSTANCE_DEVICE(f) ((f)->device) |
179 #define FONT_INSTANCE_ASCENT(f) ((f)->ascent) | |
180 #define FONT_INSTANCE_DESCENT(f) ((f)->descent) | |
181 #define FONT_INSTANCE_WIDTH(f) ((f)->width) | |
182 #define FONT_INSTANCE_HEIGHT(f) ((f)->height) | |
183 | |
184 #define XFONT_INSTANCE_NAME(f) FONT_INSTANCE_NAME (XFONT_INSTANCE (f)) | |
185 #define XFONT_INSTANCE_TRUENAME(f) FONT_INSTANCE_TRUENAME (XFONT_INSTANCE (f)) | |
3094 | 186 #define XFONT_INSTANCE_CHARSET(f) FONT_INSTANCE_CHARSET (XFONT_INSTANCE (f)) |
872 | 187 #define XFONT_INSTANCE_DEVICE(f) FONT_INSTANCE_DEVICE (XFONT_INSTANCE (f)) |
188 #define XFONT_INSTANCE_ASCENT(f) FONT_INSTANCE_ASCENT (XFONT_INSTANCE (f)) | |
189 #define XFONT_INSTANCE_DESCENT(f) FONT_INSTANCE_DESCENT (XFONT_INSTANCE (f)) | |
190 #define XFONT_INSTANCE_WIDTH(f) FONT_INSTANCE_WIDTH (XFONT_INSTANCE (f)) | |
191 #define XFONT_INSTANCE_HEIGHT(f) FONT_INSTANCE_HEIGHT (XFONT_INSTANCE (f)) | |
192 | |
193 #endif /* INCLUDED_objects_impl_h_ */ |