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