#include "faces.h"
#include "frame.h"
#include "glyphs.h"
-#include "hash.h"
#include "objects.h"
#include "specifier.h"
#include "window.h"
calling Ffind_face. */
Lisp_Object Vdefault_face, Vmodeline_face, Vgui_element_face;
Lisp_Object Vleft_margin_face, Vright_margin_face, Vtext_cursor_face;
-Lisp_Object Vpointer_face, Vvertical_divider_face, Vtoolbar_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;
{
struct Lisp_Face *face = XFACE (obj);
- ((markobj) (face->name));
- ((markobj) (face->doc_string));
+ markobj (face->name);
+ markobj (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));
+ 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);
- ((markobj) (face->charsets_warned_about));
+ markobj (face->charsets_warned_about);
return face->plist;
}
This isn't concerned with "unspecified" attributes, that's what
#'face-differs-from-default-p is for. */
static int
-face_equal (Lisp_Object o1, Lisp_Object o2, int depth)
+face_equal (Lisp_Object obj1, Lisp_Object obj2, int depth)
{
- struct Lisp_Face *f1 = XFACE (o1);
- struct Lisp_Face *f2 = XFACE (o2);
+ struct Lisp_Face *f1 = XFACE (obj1);
+ struct Lisp_Face *f2 = XFACE (obj2);
depth++;
allocate_face (void)
{
struct Lisp_Face *result =
- alloc_lcrecord_type (struct Lisp_Face, lrecord_face);
+ alloc_lcrecord_type (struct Lisp_Face, &lrecord_face);
reset_face (result);
return result;
};
static int
-add_face_to_list_mapper (CONST void *hash_key, void *hash_contents,
+add_face_to_list_mapper (Lisp_Object key, Lisp_Object value,
void *face_list_closure)
{
/* This function can GC */
- Lisp_Object key, contents;
- Lisp_Object *face_list;
struct face_list_closure *fcl =
(struct face_list_closure *) face_list_closure;
- CVOID_TO_LISP (key, hash_key);
- VOID_TO_LISP (contents, hash_contents);
- face_list = fcl->face_list;
- *face_list = Fcons (XFACE (contents)->name, *face_list);
+ *(fcl->face_list) = Fcons (XFACE (value)->name, (*fcl->face_list));
return 0;
}
\f
static int
-mark_face_as_clean_mapper (CONST void *hash_key, void *hash_contents,
+mark_face_as_clean_mapper (Lisp_Object key, Lisp_Object value,
void *flag_closure)
{
/* This function can GC */
- Lisp_Object key, contents;
int *flag = (int *) flag_closure;
- CVOID_TO_LISP (key, hash_key);
- VOID_TO_LISP (contents, hash_contents);
- XFACE (contents)->dirty = *flag;
+ XFACE (value)->dirty = *flag;
return 0;
}
for (i = 0; i < NUM_LEADING_BYTES; i++)
if (!NILP (cachel->font[i]) && !UNBOUNDP (cachel->font[i]))
- ((markobj) (cachel->font[i]));
+ markobj (cachel->font[i]);
}
- ((markobj) (cachel->face));
- ((markobj) (cachel->foreground));
- ((markobj) (cachel->background));
- ((markobj) (cachel->display_table));
- ((markobj) (cachel->background_pixmap));
+ markobj (cachel->face);
+ markobj (cachel->foreground);
+ markobj (cachel->background);
+ markobj (cachel->display_table);
+ markobj (cachel->background_pixmap);
}
}
if (WINDOWP (locale))
{
- struct frame *f = XFRAME (XWINDOW (locale)->frame);
- MARK_FRAME_FACES_CHANGED (f);
+ MARK_FRAME_FACES_CHANGED (XFRAME (XWINDOW (locale)->frame));
}
else if (FRAMEP (locale))
{
- struct frame *f = XFRAME (locale);
- MARK_FRAME_FACES_CHANGED (f);
+ MARK_FRAME_FACES_CHANGED (XFRAME (locale));
}
else if (DEVICEP (locale))
{
- struct device *d = XDEVICE (locale);
- MARK_DEVICE_FRAMES_FACES_CHANGED (d);
+ MARK_DEVICE_FRAMES_FACES_CHANGED (XDEVICE (locale));
}
else
{
Lisp_Object devcons, concons;
-
DEVICE_LOOP_NO_BREAK (devcons, concons)
MARK_DEVICE_FRAMES_FACES_CHANGED (XDEVICE (XCAR (devcons)));
}
void
syms_of_faces (void)
{
- /* Qdefault defined in general.c */
+ /* Qdefault & Qwidget defined in general.c */
defsymbol (&Qmodeline, "modeline");
defsymbol (&Qgui_element, "gui-element");
defsymbol (&Qleft_margin, "left-margin");
Vdefault_face = Qnil;
staticpro (&Vgui_element_face);
Vgui_element_face = Qnil;
+ staticpro (&Vwidget_face);
+ Vwidget_face = Qnil;
staticpro (&Vmodeline_face);
Vmodeline_face = Qnil;
staticpro (&Vtoolbar_face);
syms[n++] = Qblinking;
syms[n++] = Qreverse;
- Vbuilt_in_face_specifiers = pure_list (n, syms);
+ Vbuilt_in_face_specifiers = Flist (n, syms);
staticpro (&Vbuilt_in_face_specifiers);
}
}
void
complex_vars_of_faces (void)
{
- Vpermanent_faces_cache = make_lisp_hashtable (10, HASHTABLE_NONWEAK,
- HASHTABLE_EQ);
- Vtemporary_faces_cache = make_lisp_hashtable (0, HASHTABLE_WEAK,
- HASHTABLE_EQ);
+ Vpermanent_faces_cache =
+ make_lisp_hash_table (10, HASH_TABLE_NON_WEAK, HASH_TABLE_EQ);
+ Vtemporary_faces_cache =
+ make_lisp_hash_table (0, HASH_TABLE_WEAK, HASH_TABLE_EQ);
/* Create the default face now so we know what it is immediately. */
inst_list);
#endif /* HAVE_TTY */
#ifdef HAVE_MS_WINDOWS
- inst_list = Fcons (Fcons (list1 (Qmswindows), build_string ("Courier New")),
- inst_list);
+ inst_list = Fcons (Fcons (list1 (Qmswindows),
+ build_string ("Fixedsys:Regular:9::Western")), inst_list);
+ inst_list = Fcons (Fcons (list1 (Qmswindows),
+ build_string ("Courier:Regular:10::Western")), inst_list);
+ inst_list = Fcons (Fcons (list1 (Qmswindows),
+ build_string ("Courier New:Regular:10::Western")), inst_list);
#endif /* HAVE_MS_WINDOWS */
set_specifier_fallback (Fget (Vdefault_face, Qfont, Qnil), inst_list);
}
list1 (Fcons (Qnil, Qnil)));
set_specifier_fallback (Fget (Vdefault_face, Qreverse, Qnil),
list1 (Fcons (Qnil, Qnil)));
-
+
/* gui-element is the parent face of all gui elements such as
modeline, vertical divider and toolbar. */
Vgui_element_face = Fmake_face (Qgui_element,
set_specifier_fallback (Fget (Vmodeline_face, Qbackground_pixmap, Qnil),
Fget (Vgui_element_face, Qbackground_pixmap,
Qunbound));
-
+
/* toolbar is another gui element */
Vtoolbar_face = Fmake_face (Qtoolbar,
build_string ("toolbar face"),
Fget (Vgui_element_face, Qbackground_pixmap,
Qunbound));
+ /* widget is another gui element */
+ Vwidget_face = Fmake_face (Qwidget,
+ build_string ("widget face"),
+ Qnil);
+ 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));
+
Vleft_margin_face = Fmake_face (Qleft_margin,
build_string ("left margin face"),
Qnil);