Lisp_Object Vleft_margin_face, Vright_margin_face, Vtext_cursor_face;
Lisp_Object Vpointer_face, Vvertical_divider_face, Vtoolbar_face, Vwidget_face;
-/* Qdefault, Qhighlight defined in general.c */
-Lisp_Object Qmodeline, Qgui_element, Qleft_margin, Qright_margin, Qtext_cursor;
-Lisp_Object Qvertical_divider;
+/* Qdefault, Qhighlight, Qleft_margin, Qright_margin defined in general.c */
+Lisp_Object Qmodeline, Qgui_element, Qtext_cursor, Qvertical_divider;
/* In the old implementation Vface_list was a list of the face names,
not the faces themselves. We now distinguish between permanent and
\f
static Lisp_Object
-mark_face (Lisp_Object obj, void (*markobj) (Lisp_Object))
+mark_face (Lisp_Object obj)
{
- struct Lisp_Face *face = XFACE (obj);
+ Lisp_Face *face = XFACE (obj);
- markobj (face->name);
- markobj (face->doc_string);
+ mark_object (face->name);
+ mark_object (face->doc_string);
- markobj (face->foreground);
- markobj (face->background);
- markobj (face->font);
- markobj (face->display_table);
- markobj (face->background_pixmap);
- markobj (face->underline);
- markobj (face->strikethru);
- markobj (face->highlight);
- markobj (face->dim);
- markobj (face->blinking);
- markobj (face->reverse);
+ mark_object (face->foreground);
+ mark_object (face->background);
+ mark_object (face->font);
+ mark_object (face->display_table);
+ mark_object (face->background_pixmap);
+ mark_object (face->underline);
+ mark_object (face->strikethru);
+ mark_object (face->highlight);
+ mark_object (face->dim);
+ mark_object (face->blinking);
+ mark_object (face->reverse);
- markobj (face->charsets_warned_about);
+ mark_object (face->charsets_warned_about);
return face->plist;
}
static void
print_face (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag)
{
- struct Lisp_Face *face = XFACE (obj);
+ Lisp_Face *face = XFACE (obj);
if (print_readably)
{
static int
face_equal (Lisp_Object obj1, Lisp_Object obj2, int depth)
{
- struct Lisp_Face *f1 = XFACE (obj1);
- struct Lisp_Face *f2 = XFACE (obj2);
+ Lisp_Face *f1 = XFACE (obj1);
+ Lisp_Face *f2 = XFACE (obj2);
depth++;
static unsigned long
face_hash (Lisp_Object obj, int depth)
{
- struct Lisp_Face *f = XFACE (obj);
+ Lisp_Face *f = XFACE (obj);
depth++;
static Lisp_Object
face_getprop (Lisp_Object obj, Lisp_Object prop)
{
- struct Lisp_Face *f = XFACE (obj);
+ Lisp_Face *f = XFACE (obj);
return
- ((EQ (prop, Qforeground)) ? f->foreground :
- (EQ (prop, Qbackground)) ? f->background :
- (EQ (prop, Qfont)) ? f->font :
- (EQ (prop, Qdisplay_table)) ? f->display_table :
- (EQ (prop, Qbackground_pixmap)) ? f->background_pixmap :
- (EQ (prop, Qunderline)) ? f->underline :
- (EQ (prop, Qstrikethru)) ? f->strikethru :
- (EQ (prop, Qhighlight)) ? f->highlight :
- (EQ (prop, Qdim)) ? f->dim :
- (EQ (prop, Qblinking)) ? f->blinking :
- (EQ (prop, Qreverse)) ? f->reverse :
- (EQ (prop, Qdoc_string)) ? f->doc_string :
+ (EQ (prop, Qforeground) ? f->foreground :
+ EQ (prop, Qbackground) ? f->background :
+ EQ (prop, Qfont) ? f->font :
+ EQ (prop, Qdisplay_table) ? f->display_table :
+ EQ (prop, Qbackground_pixmap) ? f->background_pixmap :
+ EQ (prop, Qunderline) ? f->underline :
+ EQ (prop, Qstrikethru) ? f->strikethru :
+ EQ (prop, Qhighlight) ? f->highlight :
+ EQ (prop, Qdim) ? f->dim :
+ EQ (prop, Qblinking) ? f->blinking :
+ EQ (prop, Qreverse) ? f->reverse :
+ EQ (prop, Qdoc_string) ? f->doc_string :
external_plist_get (&f->plist, prop, 0, ERROR_ME));
}
static int
face_putprop (Lisp_Object obj, Lisp_Object prop, Lisp_Object value)
{
- struct Lisp_Face *f = XFACE (obj);
+ Lisp_Face *f = XFACE (obj);
if (EQ (prop, Qforeground) ||
EQ (prop, Qbackground) ||
static int
face_remprop (Lisp_Object obj, Lisp_Object prop)
{
- struct Lisp_Face *f = XFACE (obj);
+ Lisp_Face *f = XFACE (obj);
if (EQ (prop, Qforeground) ||
EQ (prop, Qbackground) ||
static Lisp_Object
face_plist (Lisp_Object obj)
{
- struct Lisp_Face *face = XFACE (obj);
+ Lisp_Face *face = XFACE (obj);
Lisp_Object result = face->plist;
result = cons3 (Qreverse, face->reverse, result);
return result;
}
+static const struct lrecord_description face_description[] = {
+ { XD_LISP_OBJECT, offsetof (Lisp_Face, name) },
+ { XD_LISP_OBJECT, offsetof (Lisp_Face, doc_string) },
+ { XD_LISP_OBJECT, offsetof (Lisp_Face, foreground) },
+ { XD_LISP_OBJECT, offsetof (Lisp_Face, background) },
+ { XD_LISP_OBJECT, offsetof (Lisp_Face, font) },
+ { XD_LISP_OBJECT, offsetof (Lisp_Face, display_table) },
+ { XD_LISP_OBJECT, offsetof (Lisp_Face, background_pixmap) },
+ { XD_LISP_OBJECT, offsetof (Lisp_Face, underline) },
+ { XD_LISP_OBJECT, offsetof (Lisp_Face, strikethru) },
+ { XD_LISP_OBJECT, offsetof (Lisp_Face, highlight) },
+ { XD_LISP_OBJECT, offsetof (Lisp_Face, dim) },
+ { XD_LISP_OBJECT, offsetof (Lisp_Face, blinking) },
+ { XD_LISP_OBJECT, offsetof (Lisp_Face, reverse) },
+ { XD_LISP_OBJECT, offsetof (Lisp_Face, plist) },
+ { XD_LISP_OBJECT, offsetof (Lisp_Face, charsets_warned_about) },
+ { XD_END }
+};
+
DEFINE_LRECORD_IMPLEMENTATION_WITH_PROPS ("face", face,
mark_face, print_face, 0, face_equal,
- face_hash, face_getprop,
+ face_hash, face_description, face_getprop,
face_putprop, face_remprop,
- face_plist, struct Lisp_Face);
+ face_plist, Lisp_Face);
\f
/************************************************************************/
/* face read syntax */
****************************************************************************/
static void
-reset_face (struct Lisp_Face *f)
+reset_face (Lisp_Face *f)
{
f->name = Qnil;
f->doc_string = Qnil;
f->charsets_warned_about = Qnil;
}
-static struct Lisp_Face *
+static Lisp_Face *
allocate_face (void)
{
- struct Lisp_Face *result =
- alloc_lcrecord_type (struct Lisp_Face, &lrecord_face);
+ Lisp_Face *result = alloc_lcrecord_type (Lisp_Face, &lrecord_face);
reset_face (result);
return result;
}
static int
-update_face_inheritance_mapper (CONST void *hash_key, void *hash_contents,
+update_face_inheritance_mapper (const void *hash_key, void *hash_contents,
void *face_inheritance_closure)
{
Lisp_Object key, contents;
(name, doc_string, temporary))
{
/* This function can GC if initialized is non-zero */
- struct Lisp_Face *f;
+ Lisp_Face *f;
Lisp_Object face;
CHECK_SYMBOL (name);
/* mark for GC a dynarr of face cachels. */
void
-mark_face_cachels (face_cachel_dynarr *elements,
- void (*markobj) (Lisp_Object))
+mark_face_cachels (face_cachel_dynarr *elements)
{
int elt;
for (i = 0; i < NUM_LEADING_BYTES; i++)
if (!NILP (cachel->font[i]) && !UNBOUNDP (cachel->font[i]))
- markobj (cachel->font[i]);
+ mark_object (cachel->font[i]);
}
- markobj (cachel->face);
- markobj (cachel->foreground);
- markobj (cachel->background);
- markobj (cachel->display_table);
- markobj (cachel->background_pixmap);
+ mark_object (cachel->face);
+ mark_object (cachel->foreground);
+ mark_object (cachel->background);
+ mark_object (cachel->display_table);
+ mark_object (cachel->background_pixmap);
}
}
void
ensure_face_cachel_complete (struct face_cachel *cachel,
- Lisp_Object domain, unsigned char *charsets)
+ Lisp_Object domain, Charset_ID *charsets)
{
int i;
void
face_cachel_charset_font_metric_info (struct face_cachel *cachel,
- unsigned char *charsets,
+ Charset_ID *charsets,
struct font_metric_info *fm)
{
int i;
{
Lisp_Object charset = CHARSET_BY_LEADING_BYTE (i + MIN_LEADING_BYTE);
Lisp_Object font_instance = FACE_CACHEL_FONT (cachel, charset);
- struct Lisp_Font_Instance *fi = XFONT_INSTANCE (font_instance);
+ Lisp_Font_Instance *fi = XFONT_INSTANCE (font_instance);
assert (CHARSETP (charset));
assert (FONT_INSTANCEP (font_instance));
*/
(old_face, new_name, locale, tag_set, exact_p, how_to_add))
{
- struct Lisp_Face *fold, *fnew;
+ Lisp_Face *fold, *fnew;
Lisp_Object new_face = Qnil;
struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
void
syms_of_faces (void)
{
- /* Qdefault & Qwidget defined in general.c */
+ INIT_LRECORD_IMPLEMENTATION (face);
+
+ /* Qdefault, Qwidget, Qleft_margin, Qright_margin defined in general.c */
defsymbol (&Qmodeline, "modeline");
defsymbol (&Qgui_element, "gui-element");
- defsymbol (&Qleft_margin, "left-margin");
- defsymbol (&Qright_margin, "right-margin");
defsymbol (&Qtext_cursor, "text-cursor");
defsymbol (&Qvertical_divider, "vertical-divider");
bg_fb = acons (list1 (Qtty), Fvector (0, 0), bg_fb);
#endif
#ifdef HAVE_MS_WINDOWS
+ fg_fb = acons (list1 (Qmsprinter), build_string ("black"), fg_fb);
+ bg_fb = acons (list1 (Qmsprinter), build_string ("white"), bg_fb);
fg_fb = acons (list1 (Qmswindows), build_string ("black"), fg_fb);
bg_fb = acons (list1 (Qmswindows), build_string ("white"), bg_fb);
#endif
(#### Perhaps we should remove the stuff from x-faces.el
and only depend on this stuff here? That should work.)
*/
- CONST char *fonts[] =
+ const char *fonts[] =
{
"-*-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-*",
"-*-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-*",
"-*-*-*-*-*-*-*-120-*-*-*-*-*-*",
"*"
};
- CONST char **fontptr;
+ const char **fontptr;
for (fontptr = fonts + countof(fonts) - 1; fontptr >= fonts; fontptr--)
inst_list = Fcons (Fcons (list1 (Qx), build_string (*fontptr)),
inst_list);
#endif /* HAVE_TTY */
#ifdef HAVE_MS_WINDOWS
+ /* Fixedsys does not exist for printers */
+ inst_list = Fcons (Fcons (list1 (Qmsprinter),
+ build_string ("Courier:Regular:10::Western")), inst_list);
+ inst_list = Fcons (Fcons (list1 (Qmsprinter),
+ build_string ("Courier New:Regular:10::Western")), inst_list);
+
inst_list = Fcons (Fcons (list1 (Qmswindows),
build_string ("Fixedsys:Regular:9::Western")), inst_list);
inst_list = Fcons (Fcons (list1 (Qmswindows),
bg_fb = acons (list1 (Qtty), Fvector (0, 0), bg_fb);
#endif
#ifdef HAVE_MS_WINDOWS
+ fg_fb = acons (list1 (Qmsprinter), build_string ("black"), fg_fb);
+ bg_fb = acons (list1 (Qmsprinter), build_string ("white"), bg_fb);
fg_fb = acons (list1 (Qmswindows), build_string ("black"), fg_fb);
bg_fb = acons (list1 (Qmswindows), build_string ("Gray75"), bg_fb);
#endif
Vwidget_face = Fmake_face (Qwidget,
build_string ("widget face"),
Qnil);
+ set_specifier_fallback (Fget (Vwidget_face, Qfont, Qunbound),
+ Fget (Vgui_element_face, Qfont, Qunbound));
set_specifier_fallback (Fget (Vwidget_face, Qforeground, Qunbound),
Fget (Vgui_element_face, Qforeground, Qunbound));
set_specifier_fallback (Fget (Vwidget_face, Qbackground, Qunbound),
Fget (Vgui_element_face, Qbackground, Qunbound));
- set_specifier_fallback (Fget (Vwidget_face, Qbackground_pixmap, Qnil),
- Fget (Vgui_element_face, Qbackground_pixmap,
- Qunbound));
+ /* We don't want widgets to have a default background pixmap. */
Vleft_margin_face = Fmake_face (Qleft_margin,
build_string ("left margin face"),