comparison src/xterm.c @ 3883:b9e5a869b33e

Separate parameter faces (those created and modified by the user) from the computed faces (the combinations created by compute_char_face), so that we don't waste global face id's. * xterm.h (struct x_display): Replace the fields faces and n_faces with fields param_faces, n_param_faces, computed_faces, n_computed_faces, and size_computed_faces. (FRAME_FACES, FRAME_N_FACES): Replaced by... (FRAME_COMPUTED_FACES, FRAME_N_COMPUTED_FACES, FRAME_PARAM_FACES, FRAME_N_PARAM_FACES): New macros. * xfaces.c: Doc fixes. (init_frame_faces): Call new_computed_face to create entries for the default and mode line faces. Use the FRAME...PARAM_FACES macros. (free_frame_faces): Use the FRAME...PARAM_FACES and FRAME...COMPUTED_FACES macros. Don't use the copy flag; all parameter faces have real X resources, and all computed faces just have copies. Free both the parameter and computed face arrays. (new_computed_face): New function. (intern_computed_face): Renamed from intern_frame_face; callers changed. Call new_computed_face. (ensure_face_ready, compute_char_face, compute_glyph_face): Use the FRAME...PARAM_FACES macros. (recompute_basic_faces): Use the FRAME...PARAM_FACES and FRAME...COMPUTED_FACES macros. Produce the computed faces by starting with the base faces and merging in the parameter faces. (Fset_face_attribute_internal): Use the FRAME...PARAM_FACES macros. Just call recompute_basic_faces if the default or mode line faces have changed. * xfns.c (Fx_list_fonts): Use the FRAME...PARAM_FACES macros. * xterm.c (dumpglyphs): Use the FRAME...COMPUTED_FACES macros. * dispextern.h (struct face): Remove the copy member. This is no longer necessary; all computed faces are copies, and no parameter faces are.
author Jim Blandy <jimb@redhat.com>
date Tue, 22 Jun 1993 07:26:44 +0000
parents 3cc238ae0de5
children ab295012a818
comparison
equal deleted inserted replaced
3882:a0b9347a3973 3883:b9e5a869b33e
387 FONT is the default font to use (for glyphs whose font-code is 0). 387 FONT is the default font to use (for glyphs whose font-code is 0).
388 388
389 Since the display generation code is responsible for calling 389 Since the display generation code is responsible for calling
390 compute_char_face and compute_glyph_face on everything it puts in 390 compute_char_face and compute_glyph_face on everything it puts in
391 the display structure, we can assume that the face code on each 391 the display structure, we can assume that the face code on each
392 glyph is a valid index into FRAME_FACES (f), and the one to which 392 glyph is a valid index into FRAME_COMPUTED_FACES (f), and the one
393 we can actually apply intern_face. */ 393 to which we can actually apply intern_face. */
394 394
395 #if 1 395 #if 1
396 /* This is the multi-face code. */ 396 /* This is the multi-face code. */
397 397
398 static void 398 static void
449 /* First look at the face of the text itself. */ 449 /* First look at the face of the text itself. */
450 if (cf != 0) 450 if (cf != 0)
451 { 451 {
452 /* The face codes on the glyphs must be valid indices into the 452 /* The face codes on the glyphs must be valid indices into the
453 frame's face table. */ 453 frame's face table. */
454 if (cf < 0 || cf >= FRAME_N_FACES (f)) 454 if (cf < 0 || cf >= FRAME_N_COMPUTED_FACES (f)
455 || FRAME_COMPUTED_FACES (f) [cf] == 0)
455 abort (); 456 abort ();
456 457
457 if (cf == 1) 458 if (cf == 1)
458 face = FRAME_MODE_LINE_FACE (f); 459 face = FRAME_MODE_LINE_FACE (f);
459 else 460 else
460 face = intern_face (f, FRAME_FACES (f) [cf]); 461 face = intern_face (f, FRAME_COMPUTED_FACES (f) [cf]);
461 font = FACE_FONT (face); 462 font = FACE_FONT (face);
462 gc = FACE_GC (face); 463 gc = FACE_GC (face);
463 defaulted = 0; 464 defaulted = 0;
464 } 465 }
465 466