Mercurial > emacs
comparison src/xfaces.c @ 95128:9c4d21df23ff
Include font.h unconditionally.
(merge_face_ref, merge_face_vectors)
(Finternal_set_lisp_face_attribute): Cancel the previous change.
author | Kenichi Handa <handa@m17n.org> |
---|---|
date | Tue, 20 May 2008 06:33:40 +0000 |
parents | f4fac6175e87 |
children | 4eed3c1f3e86 |
comparison
equal
deleted
inserted
replaced
95127:e2d4be6d5115 | 95128:9c4d21df23ff |
---|---|
247 #include "blockinput.h" | 247 #include "blockinput.h" |
248 #include "window.h" | 248 #include "window.h" |
249 #include "intervals.h" | 249 #include "intervals.h" |
250 #include "termchar.h" | 250 #include "termchar.h" |
251 | 251 |
252 #include "font.h" | |
252 #ifdef HAVE_WINDOW_SYSTEM | 253 #ifdef HAVE_WINDOW_SYSTEM |
253 #include "font.h" | |
254 #include "fontset.h" | 254 #include "fontset.h" |
255 #endif /* HAVE_WINDOW_SYSTEM */ | 255 #endif /* HAVE_WINDOW_SYSTEM */ |
256 | 256 |
257 #ifdef HAVE_X_WINDOWS | 257 #ifdef HAVE_X_WINDOWS |
258 | 258 |
2512 other code uses `unspecified' as a generic value for face attributes. */ | 2512 other code uses `unspecified' as a generic value for face attributes. */ |
2513 if (!UNSPECIFIEDP (from[LFACE_INHERIT_INDEX]) | 2513 if (!UNSPECIFIEDP (from[LFACE_INHERIT_INDEX]) |
2514 && !NILP (from[LFACE_INHERIT_INDEX])) | 2514 && !NILP (from[LFACE_INHERIT_INDEX])) |
2515 merge_face_ref (f, from[LFACE_INHERIT_INDEX], to, 0, named_merge_points); | 2515 merge_face_ref (f, from[LFACE_INHERIT_INDEX], to, 0, named_merge_points); |
2516 | 2516 |
2517 #ifdef HAVE_WINDOW_SYSTEM | |
2518 i = LFACE_FONT_INDEX; | 2517 i = LFACE_FONT_INDEX; |
2519 if (!UNSPECIFIEDP (from[i])) | 2518 if (!UNSPECIFIEDP (from[i])) |
2520 { | 2519 { |
2521 if (!UNSPECIFIEDP (to[i])) | 2520 if (!UNSPECIFIEDP (to[i])) |
2522 to[i] = Fmerge_font_spec (from[i], to[i]); | 2521 to[i] = Fmerge_font_spec (from[i], to[i]); |
2523 else | 2522 else |
2524 to[i] = Fcopy_font_spec (from[i]); | 2523 to[i] = Fcopy_font_spec (from[i]); |
2525 ASET (to[i], FONT_SIZE_INDEX, Qnil); | 2524 ASET (to[i], FONT_SIZE_INDEX, Qnil); |
2526 } | 2525 } |
2527 #endif | |
2528 | 2526 |
2529 for (i = 1; i < LFACE_VECTOR_SIZE; ++i) | 2527 for (i = 1; i < LFACE_VECTOR_SIZE; ++i) |
2530 if (!UNSPECIFIEDP (from[i])) | 2528 if (!UNSPECIFIEDP (from[i])) |
2531 { | 2529 { |
2532 if (i == LFACE_HEIGHT_INDEX && !INTEGERP (from[i])) | 2530 if (i == LFACE_HEIGHT_INDEX && !INTEGERP (from[i])) |
2533 { | 2531 { |
2534 to[i] = merge_face_heights (from[i], to[i], to[i]); | 2532 to[i] = merge_face_heights (from[i], to[i], to[i]); |
2535 #ifdef HAVE_WINDOW_SYSTEM | |
2536 font_clear_prop (to, FONT_SIZE_INDEX); | 2533 font_clear_prop (to, FONT_SIZE_INDEX); |
2537 #endif | |
2538 } | 2534 } |
2539 #ifdef HAVE_WINDOW_SYSTEM | |
2540 else if (i != LFACE_FONT_INDEX) | 2535 else if (i != LFACE_FONT_INDEX) |
2541 { | 2536 { |
2542 to[i] = from[i]; | 2537 to[i] = from[i]; |
2543 if (i >= LFACE_FAMILY_INDEX && i <=LFACE_SLANT_INDEX) | 2538 if (i >= LFACE_FAMILY_INDEX && i <=LFACE_SLANT_INDEX) |
2544 font_clear_prop (to, | 2539 font_clear_prop (to, |
2546 : i == LFACE_SWIDTH_INDEX ? FONT_WIDTH_INDEX | 2541 : i == LFACE_SWIDTH_INDEX ? FONT_WIDTH_INDEX |
2547 : i == LFACE_HEIGHT_INDEX ? FONT_SIZE_INDEX | 2542 : i == LFACE_HEIGHT_INDEX ? FONT_SIZE_INDEX |
2548 : i == LFACE_WEIGHT_INDEX ? FONT_WEIGHT_INDEX | 2543 : i == LFACE_WEIGHT_INDEX ? FONT_WEIGHT_INDEX |
2549 : FONT_SLANT_INDEX)); | 2544 : FONT_SLANT_INDEX)); |
2550 } | 2545 } |
2551 #endif | |
2552 } | 2546 } |
2553 | 2547 |
2554 /* If `font' attribute is specified, reflect the font properties in | 2548 /* If `font' attribute is specified, reflect the font properties in |
2555 it to the other attributes. */ | 2549 it to the other attributes. */ |
2556 if (0 && !UNSPECIFIEDP (to[LFACE_FONT_INDEX])) | 2550 if (0 && !UNSPECIFIEDP (to[LFACE_FONT_INDEX])) |
2671 else if (EQ (keyword, QCfamily)) | 2665 else if (EQ (keyword, QCfamily)) |
2672 { | 2666 { |
2673 if (STRINGP (value)) | 2667 if (STRINGP (value)) |
2674 { | 2668 { |
2675 to[LFACE_FAMILY_INDEX] = value; | 2669 to[LFACE_FAMILY_INDEX] = value; |
2676 #ifdef HAVE_WINDOW_SYSTEM | |
2677 font_clear_prop (to, FONT_FAMILY_INDEX); | 2670 font_clear_prop (to, FONT_FAMILY_INDEX); |
2678 #endif | |
2679 } | 2671 } |
2680 else | 2672 else |
2681 err = 1; | 2673 err = 1; |
2682 } | 2674 } |
2683 else if (EQ (keyword, QCheight)) | 2675 else if (EQ (keyword, QCheight)) |
2686 merge_face_heights (value, to[LFACE_HEIGHT_INDEX], Qnil); | 2678 merge_face_heights (value, to[LFACE_HEIGHT_INDEX], Qnil); |
2687 | 2679 |
2688 if (! NILP (new_height)) | 2680 if (! NILP (new_height)) |
2689 { | 2681 { |
2690 to[LFACE_HEIGHT_INDEX] = new_height; | 2682 to[LFACE_HEIGHT_INDEX] = new_height; |
2691 #ifdef HAVE_WINDOW_SYSTEM | |
2692 font_clear_prop (to, FONT_SIZE_INDEX); | 2683 font_clear_prop (to, FONT_SIZE_INDEX); |
2693 #endif | |
2694 } | 2684 } |
2695 else | 2685 else |
2696 err = 1; | 2686 err = 1; |
2697 } | 2687 } |
2698 else if (EQ (keyword, QCweight)) | 2688 else if (EQ (keyword, QCweight)) |
2699 { | 2689 { |
2700 if (SYMBOLP (value) && FONT_WEIGHT_NAME_NUMERIC (value) >= 0) | 2690 if (SYMBOLP (value) && FONT_WEIGHT_NAME_NUMERIC (value) >= 0) |
2701 { | 2691 { |
2702 to[LFACE_WEIGHT_INDEX] = value; | 2692 to[LFACE_WEIGHT_INDEX] = value; |
2703 #ifdef HAVE_WINDOW_SYSTEM | |
2704 font_clear_prop (to, FONT_WEIGHT_INDEX); | 2693 font_clear_prop (to, FONT_WEIGHT_INDEX); |
2705 #endif | |
2706 } | 2694 } |
2707 else | 2695 else |
2708 err = 1; | 2696 err = 1; |
2709 } | 2697 } |
2710 else if (EQ (keyword, QCslant)) | 2698 else if (EQ (keyword, QCslant)) |
2711 { | 2699 { |
2712 if (SYMBOLP (value) && FONT_SLANT_NAME_NUMERIC (value) >= 0) | 2700 if (SYMBOLP (value) && FONT_SLANT_NAME_NUMERIC (value) >= 0) |
2713 { | 2701 { |
2714 to[LFACE_SLANT_INDEX] = value; | 2702 to[LFACE_SLANT_INDEX] = value; |
2715 #ifdef HAVE_WINDOW_SYSTEM | |
2716 font_clear_prop (to, FONT_SLANT_INDEX); | 2703 font_clear_prop (to, FONT_SLANT_INDEX); |
2717 #endif | |
2718 } | 2704 } |
2719 else | 2705 else |
2720 err = 1; | 2706 err = 1; |
2721 } | 2707 } |
2722 else if (EQ (keyword, QCunderline)) | 2708 else if (EQ (keyword, QCunderline)) |
2793 else if (EQ (keyword, QCwidth)) | 2779 else if (EQ (keyword, QCwidth)) |
2794 { | 2780 { |
2795 if (SYMBOLP (value) && FONT_WIDTH_NAME_NUMERIC (value) >= 0) | 2781 if (SYMBOLP (value) && FONT_WIDTH_NAME_NUMERIC (value) >= 0) |
2796 { | 2782 { |
2797 to[LFACE_SWIDTH_INDEX] = value; | 2783 to[LFACE_SWIDTH_INDEX] = value; |
2798 #ifdef HAVE_WINDOW_SYSTEM | |
2799 font_clear_prop (to, FONT_WIDTH_INDEX); | 2784 font_clear_prop (to, FONT_WIDTH_INDEX); |
2800 #endif | |
2801 } | 2785 } |
2802 else | 2786 else |
2803 err = 1; | 2787 err = 1; |
2804 } | 2788 } |
2805 else if (EQ (keyword, QCinherit)) | 2789 else if (EQ (keyword, QCinherit)) |
3027 (face, attr, value, frame) | 3011 (face, attr, value, frame) |
3028 Lisp_Object face, attr, value, frame; | 3012 Lisp_Object face, attr, value, frame; |
3029 { | 3013 { |
3030 Lisp_Object lface; | 3014 Lisp_Object lface; |
3031 Lisp_Object old_value = Qnil; | 3015 Lisp_Object old_value = Qnil; |
3032 #ifdef HAVE_WINDOW_SYSTEM | |
3033 /* Set one of enum font_property_index (> 0) if ATTR is one of | 3016 /* Set one of enum font_property_index (> 0) if ATTR is one of |
3034 font-related attributes other than QCfont and QCfontset. */ | 3017 font-related attributes other than QCfont and QCfontset. */ |
3035 enum font_property_index prop_index = 0; | 3018 enum font_property_index prop_index = 0; |
3036 #endif | |
3037 | 3019 |
3038 CHECK_SYMBOL (face); | 3020 CHECK_SYMBOL (face); |
3039 CHECK_SYMBOL (attr); | 3021 CHECK_SYMBOL (attr); |
3040 | 3022 |
3041 face = resolve_face_name (face, 1); | 3023 face = resolve_face_name (face, 1); |
3086 if (SCHARS (value) == 0) | 3068 if (SCHARS (value) == 0) |
3087 signal_error ("Invalid face family", value); | 3069 signal_error ("Invalid face family", value); |
3088 } | 3070 } |
3089 old_value = LFACE_FAMILY (lface); | 3071 old_value = LFACE_FAMILY (lface); |
3090 LFACE_FAMILY (lface) = value; | 3072 LFACE_FAMILY (lface) = value; |
3091 #ifdef HAVE_WINDOW_SYSTEM | |
3092 prop_index = FONT_FAMILY_INDEX; | 3073 prop_index = FONT_FAMILY_INDEX; |
3093 #endif | |
3094 } | 3074 } |
3095 else if (EQ (attr, QCheight)) | 3075 else if (EQ (attr, QCheight)) |
3096 { | 3076 { |
3097 if (!UNSPECIFIEDP (value) && !IGNORE_DEFFACE_P (value)) | 3077 if (!UNSPECIFIEDP (value) && !IGNORE_DEFFACE_P (value)) |
3098 { | 3078 { |
3109 signal_error ("Invalid face height", value); | 3089 signal_error ("Invalid face height", value); |
3110 } | 3090 } |
3111 | 3091 |
3112 old_value = LFACE_HEIGHT (lface); | 3092 old_value = LFACE_HEIGHT (lface); |
3113 LFACE_HEIGHT (lface) = value; | 3093 LFACE_HEIGHT (lface) = value; |
3114 #ifdef HAVE_WINDOW_SYSTEM | |
3115 prop_index = FONT_SIZE_INDEX; | 3094 prop_index = FONT_SIZE_INDEX; |
3116 #endif | |
3117 } | 3095 } |
3118 else if (EQ (attr, QCweight)) | 3096 else if (EQ (attr, QCweight)) |
3119 { | 3097 { |
3120 if (!UNSPECIFIEDP (value) && !IGNORE_DEFFACE_P (value)) | 3098 if (!UNSPECIFIEDP (value) && !IGNORE_DEFFACE_P (value)) |
3121 { | 3099 { |
3123 if (FONT_WEIGHT_NAME_NUMERIC (value) < 0) | 3101 if (FONT_WEIGHT_NAME_NUMERIC (value) < 0) |
3124 signal_error ("Invalid face weight", value); | 3102 signal_error ("Invalid face weight", value); |
3125 } | 3103 } |
3126 old_value = LFACE_WEIGHT (lface); | 3104 old_value = LFACE_WEIGHT (lface); |
3127 LFACE_WEIGHT (lface) = value; | 3105 LFACE_WEIGHT (lface) = value; |
3128 #ifdef HAVE_WINDOW_SYSTEM | |
3129 prop_index = FONT_WEIGHT_INDEX; | 3106 prop_index = FONT_WEIGHT_INDEX; |
3130 #endif | |
3131 } | 3107 } |
3132 else if (EQ (attr, QCslant)) | 3108 else if (EQ (attr, QCslant)) |
3133 { | 3109 { |
3134 if (!UNSPECIFIEDP (value) && !IGNORE_DEFFACE_P (value)) | 3110 if (!UNSPECIFIEDP (value) && !IGNORE_DEFFACE_P (value)) |
3135 { | 3111 { |
3137 if (FONT_SLANT_NAME_NUMERIC (value) < 0) | 3113 if (FONT_SLANT_NAME_NUMERIC (value) < 0) |
3138 signal_error ("Invalid face slant", value); | 3114 signal_error ("Invalid face slant", value); |
3139 } | 3115 } |
3140 old_value = LFACE_SLANT (lface); | 3116 old_value = LFACE_SLANT (lface); |
3141 LFACE_SLANT (lface) = value; | 3117 LFACE_SLANT (lface) = value; |
3142 #ifdef HAVE_WINDOW_SYSTEM | |
3143 prop_index = FONT_SLANT_INDEX; | 3118 prop_index = FONT_SLANT_INDEX; |
3144 #endif | |
3145 } | 3119 } |
3146 else if (EQ (attr, QCunderline)) | 3120 else if (EQ (attr, QCunderline)) |
3147 { | 3121 { |
3148 if (!UNSPECIFIEDP (value) && !IGNORE_DEFFACE_P (value)) | 3122 if (!UNSPECIFIEDP (value) && !IGNORE_DEFFACE_P (value)) |
3149 if ((SYMBOLP (value) | 3123 if ((SYMBOLP (value) |
3307 if (FONT_WIDTH_NAME_NUMERIC (value) < 0) | 3281 if (FONT_WIDTH_NAME_NUMERIC (value) < 0) |
3308 signal_error ("Invalid face width", value); | 3282 signal_error ("Invalid face width", value); |
3309 } | 3283 } |
3310 old_value = LFACE_SWIDTH (lface); | 3284 old_value = LFACE_SWIDTH (lface); |
3311 LFACE_SWIDTH (lface) = value; | 3285 LFACE_SWIDTH (lface) = value; |
3312 #ifdef HAVE_WINDOW_SYSTEM | |
3313 prop_index = FONT_WIDTH_INDEX; | 3286 prop_index = FONT_WIDTH_INDEX; |
3314 #endif | |
3315 } | 3287 } |
3316 else if (EQ (attr, QCfont)) | 3288 else if (EQ (attr, QCfont)) |
3317 { | 3289 { |
3318 #ifdef HAVE_WINDOW_SYSTEM | 3290 #ifdef HAVE_WINDOW_SYSTEM |
3319 if (EQ (frame, Qt) || FRAME_WINDOW_P (XFRAME (frame))) | 3291 if (EQ (frame, Qt) || FRAME_WINDOW_P (XFRAME (frame))) |
3388 } | 3360 } |
3389 else if (EQ (attr, QCbold)) | 3361 else if (EQ (attr, QCbold)) |
3390 { | 3362 { |
3391 old_value = LFACE_WEIGHT (lface); | 3363 old_value = LFACE_WEIGHT (lface); |
3392 LFACE_WEIGHT (lface) = NILP (value) ? Qnormal : Qbold; | 3364 LFACE_WEIGHT (lface) = NILP (value) ? Qnormal : Qbold; |
3393 #ifdef HAVE_WINDOW_SYSTEM | |
3394 prop_index = FONT_WEIGHT_INDEX; | 3365 prop_index = FONT_WEIGHT_INDEX; |
3395 #endif | |
3396 } | 3366 } |
3397 else if (EQ (attr, QCitalic)) | 3367 else if (EQ (attr, QCitalic)) |
3398 { | 3368 { |
3399 attr = QCslant; | 3369 attr = QCslant; |
3400 old_value = LFACE_SLANT (lface); | 3370 old_value = LFACE_SLANT (lface); |
3401 LFACE_SLANT (lface) = NILP (value) ? Qnormal : Qitalic; | 3371 LFACE_SLANT (lface) = NILP (value) ? Qnormal : Qitalic; |
3402 #ifdef HAVE_WINDOW_SYSTEM | |
3403 prop_index = FONT_SLANT_INDEX; | 3372 prop_index = FONT_SLANT_INDEX; |
3404 #endif | |
3405 } | 3373 } |
3406 else | 3374 else |
3407 signal_error ("Invalid face attribute name", attr); | 3375 signal_error ("Invalid face attribute name", attr); |
3408 | 3376 |
3409 #ifdef HAVE_WINDOW_SYSTEM | |
3410 if (prop_index) | 3377 if (prop_index) |
3411 /* If a font-related attribute other than QCfont and QCfontset is | 3378 /* If a font-related attribute other than QCfont and QCfontset is |
3412 specified, and if the original QCfont attribute has a font | 3379 specified, and if the original QCfont attribute has a font |
3413 (font-spec or font-object), set the corresponding property in | 3380 (font-spec or font-object), set the corresponding property in |
3414 the font to nil so that the font selector doesn't think that | 3381 the font to nil so that the font selector doesn't think that |
3415 the attribute is mandatory. */ | 3382 the attribute is mandatory. */ |
3416 font_clear_prop (XVECTOR (lface)->contents, prop_index); | 3383 font_clear_prop (XVECTOR (lface)->contents, prop_index); |
3417 #endif | |
3418 | 3384 |
3419 /* Changing a named face means that all realized faces depending on | 3385 /* Changing a named face means that all realized faces depending on |
3420 that face are invalid. Since we cannot tell which realized faces | 3386 that face are invalid. Since we cannot tell which realized faces |
3421 depend on the face, make sure they are all removed. This is done | 3387 depend on the face, make sure they are all removed. This is done |
3422 by incrementing face_change_count. The next call to | 3388 by incrementing face_change_count. The next call to |