Mercurial > hg > xemacs-beta
comparison src/faces.c @ 173:8eaf7971accc r20-3b13
Import from CVS: tag r20-3b13
author | cvs |
---|---|
date | Mon, 13 Aug 2007 09:49:09 +0200 |
parents | cca96a509cfe |
children | bfd6434d15b3 |
comparison
equal
deleted
inserted
replaced
172:a38aed19690b | 173:8eaf7971accc |
---|---|
113 ((markobj) (face->blinking)); | 113 ((markobj) (face->blinking)); |
114 ((markobj) (face->reverse)); | 114 ((markobj) (face->reverse)); |
115 | 115 |
116 ((markobj) (face->charsets_warned_about)); | 116 ((markobj) (face->charsets_warned_about)); |
117 | 117 |
118 return (face->plist); | 118 return face->plist; |
119 } | 119 } |
120 | 120 |
121 static void | 121 static void |
122 print_face (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag) | 122 print_face (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag) |
123 { | 123 { |
337 | 337 |
338 static int | 338 static int |
339 face_validate (Lisp_Object data, Error_behavior errb) | 339 face_validate (Lisp_Object data, Error_behavior errb) |
340 { | 340 { |
341 int name_seen = 0; | 341 int name_seen = 0; |
342 Lisp_Object valw; | 342 Lisp_Object valw = Qnil; |
343 | 343 |
344 data = Fcdr (data); /* skip over Qface */ | 344 data = Fcdr (data); /* skip over Qface */ |
345 while (!NILP (data)) | 345 while (!NILP (data)) |
346 { | 346 { |
347 Lisp_Object keyw = Fcar (data); | 347 Lisp_Object keyw = Fcar (data); |
526 values = XCDR (XCAR (elt)); | 526 values = XCDR (XCAR (elt)); |
527 | 527 |
528 for (; !NILP (values); values = XCDR (values)) | 528 for (; !NILP (values); values = XCDR (values)) |
529 { | 529 { |
530 Lisp_Object value = XCDR (XCAR (values)); | 530 Lisp_Object value = XCDR (XCAR (values)); |
531 if (VECTORP (value) && XVECTOR (value)->size) | 531 if (VECTORP (value) && XVECTOR_LENGTH (value)) |
532 { | 532 { |
533 if (EQ (Ffind_face (vector_data (XVECTOR (value))[0]), inh_face)) | 533 if (EQ (Ffind_face (XVECTOR_DATA (value)[0]), inh_face)) |
534 Fset_specifier_dirty_flag | 534 Fset_specifier_dirty_flag |
535 (FACE_PROPERTY_SPECIFIER (inh_face, property)); | 535 (FACE_PROPERTY_SPECIFIER (inh_face, property)); |
536 } | 536 } |
537 } | 537 } |
538 } | 538 } |
639 DEFUN ("facep", Ffacep, 1, 1, 0, /* | 639 DEFUN ("facep", Ffacep, 1, 1, 0, /* |
640 Return non-nil if OBJECT is a face. | 640 Return non-nil if OBJECT is a face. |
641 */ | 641 */ |
642 (object)) | 642 (object)) |
643 { | 643 { |
644 return (FACEP (object) ? Qt : Qnil); | 644 return FACEP (object) ? Qt : Qnil; |
645 } | 645 } |
646 | 646 |
647 DEFUN ("find-face", Ffind_face, 1, 1, 0, /* | 647 DEFUN ("find-face", Ffind_face, 1, 1, 0, /* |
648 Retrieve the face of the given name. | 648 Retrieve the face of the given name. |
649 If FACE-OR-NAME is a face object, it is simply returned. | 649 If FACE-OR-NAME is a face object, it is simply returned. |
684 DEFUN ("face-name", Fface_name, 1, 1, 0, /* | 684 DEFUN ("face-name", Fface_name, 1, 1, 0, /* |
685 Return the name of the given face. | 685 Return the name of the given face. |
686 */ | 686 */ |
687 (face)) | 687 (face)) |
688 { | 688 { |
689 return (XFACE (Fget_face (face))->name); | 689 return XFACE (Fget_face (face))->name; |
690 } | 690 } |
691 | 691 |
692 DEFUN ("built-in-face-specifiers", Fbuilt_in_face_specifiers, 0, 0, 0, /* | 692 DEFUN ("built-in-face-specifiers", Fbuilt_in_face_specifiers, 0, 0, 0, /* |
693 Return a list of all built-in face specifier properties. | 693 Return a list of all built-in face specifier properties. |
694 Don't modify this list! | 694 Don't modify this list! |
1074 new_val = Qunbound; | 1074 new_val = Qunbound; |
1075 cachel->font_specified[offs] = 0; | 1075 cachel->font_specified[offs] = 0; |
1076 for (i = 0; i < cachel->nfaces; i++) | 1076 for (i = 0; i < cachel->nfaces; i++) |
1077 { | 1077 { |
1078 struct face_cachel *oth; | 1078 struct face_cachel *oth; |
1079 | 1079 |
1080 oth = Dynarr_atp (w->face_cachels, | 1080 oth = Dynarr_atp (w->face_cachels, |
1081 FACE_CACHEL_FINDEX_UNSAFE (cachel, i)); | 1081 FACE_CACHEL_FINDEX_UNSAFE (cachel, i)); |
1082 /* Tout le monde aime la recursion */ | 1082 /* Tout le monde aime la recursion */ |
1083 ensure_face_cachel_contains_charset (oth, domain, charset); | 1083 ensure_face_cachel_contains_charset (oth, domain, charset); |
1084 | 1084 |
1085 if (oth->font_specified[offs]) | 1085 if (oth->font_specified[offs]) |
1086 { | 1086 { |
1087 new_val = oth->font[offs]; | 1087 new_val = oth->font[offs]; |
1088 cachel->font_specified[offs] = 1; | 1088 cachel->font_specified[offs] = 1; |
1089 break; | 1089 break; |
1133 void | 1133 void |
1134 ensure_face_cachel_complete (struct face_cachel *cachel, | 1134 ensure_face_cachel_complete (struct face_cachel *cachel, |
1135 Lisp_Object domain, unsigned char *charsets) | 1135 Lisp_Object domain, unsigned char *charsets) |
1136 { | 1136 { |
1137 int i; | 1137 int i; |
1138 | 1138 |
1139 for (i = 0; i < NUM_LEADING_BYTES; i++) | 1139 for (i = 0; i < NUM_LEADING_BYTES; i++) |
1140 if (charsets[i]) | 1140 if (charsets[i]) |
1141 { | 1141 { |
1142 Lisp_Object charset; | 1142 Lisp_Object charset; |
1143 | 1143 |
1144 charset = CHARSET_BY_LEADING_BYTE (i + MIN_LEADING_BYTE); | 1144 charset = CHARSET_BY_LEADING_BYTE (i + MIN_LEADING_BYTE); |
1145 assert (CHARSETP (charset)); | 1145 assert (CHARSETP (charset)); |
1146 ensure_face_cachel_contains_charset (cachel, domain, charset); | 1146 ensure_face_cachel_contains_charset (cachel, domain, charset); |
1147 } | 1147 } |
1148 } | 1148 } |
1151 face_cachel_charset_font_metric_info (struct face_cachel *cachel, | 1151 face_cachel_charset_font_metric_info (struct face_cachel *cachel, |
1152 unsigned char *charsets, | 1152 unsigned char *charsets, |
1153 struct font_metric_info *fm) | 1153 struct font_metric_info *fm) |
1154 { | 1154 { |
1155 int i; | 1155 int i; |
1156 | 1156 |
1157 fm->width = 1; | 1157 fm->width = 1; |
1158 fm->height = fm->ascent = 1; | 1158 fm->height = fm->ascent = 1; |
1159 fm->descent = 0; | 1159 fm->descent = 0; |
1160 fm->proportional_p = 0; | 1160 fm->proportional_p = 0; |
1161 | 1161 |
1164 if (charsets[i]) | 1164 if (charsets[i]) |
1165 { | 1165 { |
1166 Lisp_Object charset; | 1166 Lisp_Object charset; |
1167 Lisp_Object font_instance; | 1167 Lisp_Object font_instance; |
1168 struct Lisp_Font_Instance *fi; | 1168 struct Lisp_Font_Instance *fi; |
1169 | 1169 |
1170 charset = CHARSET_BY_LEADING_BYTE (i + MIN_LEADING_BYTE); | 1170 charset = CHARSET_BY_LEADING_BYTE (i + MIN_LEADING_BYTE); |
1171 assert (CHARSETP (charset)); | 1171 assert (CHARSETP (charset)); |
1172 font_instance = FACE_CACHEL_FONT (cachel, charset); | 1172 font_instance = FACE_CACHEL_FONT (cachel, charset); |
1173 assert (FONT_INSTANCEP (font_instance)); | 1173 assert (FONT_INSTANCEP (font_instance)); |
1174 fi = XFONT_INSTANCE (font_instance); | 1174 fi = XFONT_INSTANCE (font_instance); |
1214 cachel->field = new_val; \ | 1214 cachel->field = new_val; \ |
1215 cachel->dirty = 1; \ | 1215 cachel->dirty = 1; \ |
1216 } \ | 1216 } \ |
1217 cachel->field##_specified = (bound || default_face); \ | 1217 cachel->field##_specified = (bound || default_face); \ |
1218 } while (0) | 1218 } while (0) |
1219 | 1219 |
1220 FROB (foreground); | 1220 FROB (foreground); |
1221 FROB (background); | 1221 FROB (background); |
1222 FROB (display_table); | 1222 FROB (display_table); |
1223 FROB (background_pixmap); | 1223 FROB (background_pixmap); |
1224 #undef FROB | 1224 #undef FROB |
1512 get_extent_fragment_face_cache_index (struct window *w, | 1512 get_extent_fragment_face_cache_index (struct window *w, |
1513 struct extent_fragment *ef) | 1513 struct extent_fragment *ef) |
1514 { | 1514 { |
1515 struct face_cachel cachel; | 1515 struct face_cachel cachel; |
1516 int len = Dynarr_length (ef->extents); | 1516 int len = Dynarr_length (ef->extents); |
1517 face_index findex; | 1517 face_index findex = 0; |
1518 Lisp_Object window = Qnil; | 1518 Lisp_Object window = Qnil; |
1519 XSETWINDOW (window, w); | 1519 XSETWINDOW (window, w); |
1520 | 1520 |
1521 /* Optimize the default case. */ | 1521 /* Optimize the default case. */ |
1522 if (len == 0) | 1522 if (len == 0) |
1548 Lisp_Object one_face = XCAR (face); | 1548 Lisp_Object one_face = XCAR (face); |
1549 if (FACEP (one_face)) | 1549 if (FACEP (one_face)) |
1550 { | 1550 { |
1551 findex = get_builtin_face_cache_index (w, one_face); | 1551 findex = get_builtin_face_cache_index (w, one_face); |
1552 merge_face_cachel_data (w, findex, &cachel); | 1552 merge_face_cachel_data (w, findex, &cachel); |
1553 | 1553 |
1554 /* code duplication here but there's no clean | 1554 /* code duplication here but there's no clean |
1555 way to avoid it. */ | 1555 way to avoid it. */ |
1556 if (cachel.nfaces >= NUM_STATIC_CACHEL_FACES) | 1556 if (cachel.nfaces >= NUM_STATIC_CACHEL_FACES) |
1557 { | 1557 { |
1558 if (!cachel.merged_faces) | 1558 if (!cachel.merged_faces) |
1563 cachel.merged_faces_static[cachel.nfaces] = findex; | 1563 cachel.merged_faces_static[cachel.nfaces] = findex; |
1564 cachel.nfaces++; | 1564 cachel.nfaces++; |
1565 } | 1565 } |
1566 face = XCDR (face); | 1566 face = XCDR (face); |
1567 } | 1567 } |
1568 | 1568 |
1569 if (has_findex) | 1569 if (has_findex) |
1570 { | 1570 { |
1571 if (cachel.nfaces >= NUM_STATIC_CACHEL_FACES) | 1571 if (cachel.nfaces >= NUM_STATIC_CACHEL_FACES) |
1572 { | 1572 { |
1573 if (!cachel.merged_faces) | 1573 if (!cachel.merged_faces) |
1602 #ifdef HAVE_X_WINDOWS | 1602 #ifdef HAVE_X_WINDOWS |
1603 if (FRAME_X_P (frm)) | 1603 if (FRAME_X_P (frm)) |
1604 { | 1604 { |
1605 Arg av[10]; | 1605 Arg av[10]; |
1606 int ac = 0; | 1606 int ac = 0; |
1607 | 1607 |
1608 if (EQ (name, Qforeground)) | 1608 if (EQ (name, Qforeground)) |
1609 { | 1609 { |
1610 Lisp_Object color = FACE_FOREGROUND (Vdefault_face, frame); | 1610 Lisp_Object color = FACE_FOREGROUND (Vdefault_face, frame); |
1611 XColor fgc; | 1611 XColor fgc; |
1612 | 1612 |
1686 update_EmacsFrame (XCAR (frmcons), name); | 1686 update_EmacsFrame (XCAR (frmcons), name); |
1687 } | 1687 } |
1688 else if (EQ (locale, Qglobal) || EQ (locale, Qfallback)) | 1688 else if (EQ (locale, Qglobal) || EQ (locale, Qfallback)) |
1689 { | 1689 { |
1690 Lisp_Object frmcons, devcons, concons; | 1690 Lisp_Object frmcons, devcons, concons; |
1691 | 1691 |
1692 FRAME_LOOP_NO_BREAK (frmcons, devcons, concons) | 1692 FRAME_LOOP_NO_BREAK (frmcons, devcons, concons) |
1693 update_EmacsFrame (XCAR (frmcons), name); | 1693 update_EmacsFrame (XCAR (frmcons), name); |
1694 } | 1694 } |
1695 } | 1695 } |
1696 | 1696 |
1732 MARK_DEVICE_FRAMES_FACES_CHANGED (XDEVICE (locale)); | 1732 MARK_DEVICE_FRAMES_FACES_CHANGED (XDEVICE (locale)); |
1733 } | 1733 } |
1734 else | 1734 else |
1735 { | 1735 { |
1736 Lisp_Object devcons, concons; | 1736 Lisp_Object devcons, concons; |
1737 | 1737 |
1738 DEVICE_LOOP_NO_BREAK (devcons, concons) | 1738 DEVICE_LOOP_NO_BREAK (devcons, concons) |
1739 MARK_DEVICE_FRAMES_FACES_CHANGED (XDEVICE (XCAR (devcons))); | 1739 MARK_DEVICE_FRAMES_FACES_CHANGED (XDEVICE (XCAR (devcons))); |
1740 } | 1740 } |
1741 | 1741 |
1742 update_faces_inheritance (face, property); | 1742 update_faces_inheritance (face, property); |
1743 XFACE (face)->dirty = 1; | 1743 XFACE (face)->dirty = 1; |
1744 } | 1744 } |
1745 | 1745 |
1746 DEFUN ("copy-face", Fcopy_face, 2, 6, 0, /* | 1746 DEFUN ("copy-face", Fcopy_face, 2, 6, 0, /* |
1973 inst_list = Fcons (Fcons (list1 (Qtty), build_string ("normal")), | 1973 inst_list = Fcons (Fcons (list1 (Qtty), build_string ("normal")), |
1974 inst_list); | 1974 inst_list); |
1975 #endif | 1975 #endif |
1976 set_specifier_fallback (Fget (Vdefault_face, Qfont, Qnil), inst_list); | 1976 set_specifier_fallback (Fget (Vdefault_face, Qfont, Qnil), inst_list); |
1977 } | 1977 } |
1978 | 1978 |
1979 set_specifier_fallback (Fget (Vdefault_face, Qunderline, Qnil), | 1979 set_specifier_fallback (Fget (Vdefault_face, Qunderline, Qnil), |
1980 list1 (Fcons (Qnil, Qnil))); | 1980 list1 (Fcons (Qnil, Qnil))); |
1981 set_specifier_fallback (Fget (Vdefault_face, Qstrikethru, Qnil), | 1981 set_specifier_fallback (Fget (Vdefault_face, Qstrikethru, Qnil), |
1982 list1 (Fcons (Qnil, Qnil))); | 1982 list1 (Fcons (Qnil, Qnil))); |
1983 set_specifier_fallback (Fget (Vdefault_face, Qhighlight, Qnil), | 1983 set_specifier_fallback (Fget (Vdefault_face, Qhighlight, Qnil), |