X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Ffaces.c;h=750055c4ad3945ef0a064667cb3cb8c8167e495b;hb=8e97d96e1fc99db94dbac2e8847b501eb20ce0ff;hp=44fbd9826a4f3f995193124294ea97929131b38f;hpb=cb9f6f4eadc44f1becb32cbbd1db26449e347755;p=chise%2Fxemacs-chise.git.1 diff --git a/src/faces.c b/src/faces.c index 44fbd98..750055c 100644 --- a/src/faces.c +++ b/src/faces.c @@ -36,6 +36,7 @@ Boston, MA 02111-1307, USA. */ #include "faces.h" #include "frame.h" #include "glyphs.h" +#include "hash.h" #include "objects.h" #include "specifier.h" #include "window.h" @@ -55,7 +56,7 @@ Lisp_Object Qinit_global_faces; 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, Vwidget_face; +Lisp_Object Vpointer_face, Vvertical_divider_face, Vtoolbar_face; /* Qdefault, Qhighlight defined in general.c */ Lisp_Object Qmodeline, Qgui_element, Qleft_margin, Qright_margin, Qtext_cursor; @@ -77,22 +78,22 @@ mark_face (Lisp_Object obj, void (*markobj) (Lisp_Object)) { 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; } @@ -128,10 +129,10 @@ print_face (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag) This isn't concerned with "unspecified" attributes, that's what #'face-differs-from-default-p is for. */ static int -face_equal (Lisp_Object obj1, Lisp_Object obj2, int depth) +face_equal (Lisp_Object o1, Lisp_Object o2, int depth) { - struct Lisp_Face *f1 = XFACE (obj1); - struct Lisp_Face *f2 = XFACE (obj2); + struct Lisp_Face *f1 = XFACE (o1); + struct Lisp_Face *f2 = XFACE (o2); depth++; @@ -374,14 +375,19 @@ struct face_list_closure }; static int -add_face_to_list_mapper (Lisp_Object key, Lisp_Object value, +add_face_to_list_mapper (CONST void *hash_key, void *hash_contents, 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; - *(fcl->face_list) = Fcons (XFACE (value)->name, (*fcl->face_list)); + *face_list = Fcons (XFACE (contents)->name, *face_list); return 0; } @@ -414,12 +420,15 @@ temporary_faces_list (void) static int -mark_face_as_clean_mapper (Lisp_Object key, Lisp_Object value, +mark_face_as_clean_mapper (CONST void *hash_key, void *hash_contents, void *flag_closure) { /* This function can GC */ + Lisp_Object key, contents; int *flag = (int *) flag_closure; - XFACE (value)->dirty = *flag; + CVOID_TO_LISP (key, hash_key); + VOID_TO_LISP (contents, hash_contents); + XFACE (contents)->dirty = *flag; return 0; } @@ -998,13 +1007,13 @@ mark_face_cachels (face_cachel_dynarr *elements, 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)); } } @@ -1629,19 +1638,23 @@ face_property_was_changed (Lisp_Object face, Lisp_Object property, if (WINDOWP (locale)) { - MARK_FRAME_FACES_CHANGED (XFRAME (XWINDOW (locale)->frame)); + struct frame *f = XFRAME (XWINDOW (locale)->frame); + MARK_FRAME_FACES_CHANGED (f); } else if (FRAMEP (locale)) { - MARK_FRAME_FACES_CHANGED (XFRAME (locale)); + struct frame *f = XFRAME (locale); + MARK_FRAME_FACES_CHANGED (f); } else if (DEVICEP (locale)) { - MARK_DEVICE_FRAMES_FACES_CHANGED (XDEVICE (locale)); + struct device *d = XDEVICE (locale); + MARK_DEVICE_FRAMES_FACES_CHANGED (d); } else { Lisp_Object devcons, concons; + DEVICE_LOOP_NO_BREAK (devcons, concons) MARK_DEVICE_FRAMES_FACES_CHANGED (XDEVICE (XCAR (devcons))); } @@ -1736,7 +1749,7 @@ LOCALE, TAG-SET, EXACT-P, and HOW-TO-ADD are as in `copy-specifier'. void syms_of_faces (void) { - /* Qdefault & Qwidget defined in general.c */ + /* Qdefault defined in general.c */ defsymbol (&Qmodeline, "modeline"); defsymbol (&Qgui_element, "gui-element"); defsymbol (&Qleft_margin, "left-margin"); @@ -1793,8 +1806,6 @@ vars_of_faces (void) 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); @@ -1835,10 +1846,10 @@ vars_of_faces (void) void complex_vars_of_faces (void) { - 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); + Vpermanent_faces_cache = make_lisp_hashtable (10, HASHTABLE_NONWEAK, + HASHTABLE_EQ); + Vtemporary_faces_cache = make_lisp_hashtable (0, HASHTABLE_WEAK, + HASHTABLE_EQ); /* Create the default face now so we know what it is immediately. */ @@ -1908,12 +1919,8 @@ complex_vars_of_faces (void) inst_list); #endif /* HAVE_TTY */ #ifdef HAVE_MS_WINDOWS - 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); + inst_list = Fcons (Fcons (list1 (Qmswindows), build_string ("Courier New")), + inst_list); #endif /* HAVE_MS_WINDOWS */ set_specifier_fallback (Fget (Vdefault_face, Qfont, Qnil), inst_list); } @@ -1930,7 +1937,7 @@ complex_vars_of_faces (void) 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, @@ -1973,7 +1980,7 @@ complex_vars_of_faces (void) 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"), @@ -2000,18 +2007,6 @@ complex_vars_of_faces (void) 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);