diff 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
line wrap: on
line diff
--- a/src/xterm.c	Tue Jun 22 07:25:42 1993 +0000
+++ b/src/xterm.c	Tue Jun 22 07:26:44 1993 +0000
@@ -389,8 +389,8 @@
    Since the display generation code is responsible for calling
    compute_char_face and compute_glyph_face on everything it puts in
    the display structure, we can assume that the face code on each
-   glyph is a valid index into FRAME_FACES (f), and the one to which
-   we can actually apply intern_face.  */
+   glyph is a valid index into FRAME_COMPUTED_FACES (f), and the one
+   to which we can actually apply intern_face.  */
 
 #if 1
 /* This is the multi-face code.  */
@@ -451,13 +451,14 @@
 	  {
 	    /* The face codes on the glyphs must be valid indices into the
 	       frame's face table.  */
-	    if (cf < 0 || cf >= FRAME_N_FACES (f))
+	    if (cf < 0 || cf >= FRAME_N_COMPUTED_FACES (f)
+		|| FRAME_COMPUTED_FACES (f) [cf] == 0)
 	      abort ();
 
 	    if (cf == 1)
 	      face = FRAME_MODE_LINE_FACE (f);
 	    else
-	      face = intern_face (f, FRAME_FACES (f) [cf]);
+	      face = intern_face (f, FRAME_COMPUTED_FACES (f) [cf]);
 	    font = FACE_FONT (face);
 	    gc = FACE_GC (face);
 	    defaulted = 0;