# HG changeset patch # User Kenichi Handa # Date 953599005 0 # Node ID 6622698b83d6086bbee733b3af37dcd64991466a # Parent 27014604bbd38bc078b38f135ce6e484ae778734 (struct glyph): New member glyph_not_available_p. Use 22 bits for face_id. (enum lface_attribute_index): Add LFACE_FONT_INDEX. (struct face): Delete member registry, new member ascii_face. (FACE_SUITABLE_FOR_CHAR_P): Renamed from FACE_SUITABLE_FOR_CHARSET_P. Caller changed. (FACE_FOR_CHAR): Renamed from FACE_FOR_CHARSET. Caller changed. (struct it): Delete member charset, new member glyph_not_available_p. diff -r 27014604bbd3 -r 6622698b83d6 src/dispextern.h --- a/src/dispextern.h Tue Mar 21 00:36:12 2000 +0000 +++ b/src/dispextern.h Tue Mar 21 00:36:45 2000 +0000 @@ -269,8 +269,12 @@ padding. */ unsigned padding_p : 1; + /* 1 means the actual glyph is not available in the current + system. */ + unsigned glyph_not_available_p : 1; + /* Face of the glyph. */ - unsigned face_id : 23; + unsigned face_id : 22; /* A union of sub-structures for different glyph types. */ union @@ -1089,6 +1093,7 @@ LFACE_OVERLINE_INDEX, LFACE_STRIKE_THROUGH_INDEX, LFACE_BOX_INDEX, + LFACE_FONT_INDEX, LFACE_VECTOR_SIZE }; @@ -1166,9 +1171,6 @@ must not be freed. */ char *font_name; - /* The X font registry and encoding of font_name. */ - Lisp_Object registry; - /* Font info ID for this face's font. An ID is stored here because pointers to font_info structures may change. The reason is that they are pointers into a font table vector that is itself @@ -1249,6 +1251,10 @@ /* Next and previous face in hash collision list of face cache. */ struct face *next, *prev; + + /* If this face is for ASCII characters, this points this face + itself. Otherwise, this points a face for ASCII characters. */ + struct face *ascii_face; }; @@ -1324,29 +1330,21 @@ ? FRAME_FACE_CACHE (F)->faces_by_id[ID] \ : NULL) -/* Non-zero if FACE is suitable for displaying characters of CHARSET. - CHARSET < 0 means unibyte text. */ - -#define FACE_SUITABLE_FOR_CHARSET_P(FACE, CHARSET) \ - (((CHARSET) < 0 \ - ? (EQ ((FACE)->registry, Vface_default_registry) \ - || !NILP (Fequal ((FACE)->registry, Vface_default_registry))) \ - : ((FACE)->charset == (CHARSET) \ - || ((FACE)->charset == CHARSET_ASCII \ - && (CHARSET) == charset_latin_iso8859_1 \ - && face_suitable_for_iso8859_1_p ((FACE))) \ - || ((FACE)->charset == charset_latin_iso8859_1 \ - && (CHARSET) == CHARSET_ASCII)))) - +/* Non-zero if FACE is suitable for displaying character CHAR. */ + +#define FACE_SUITABLE_FOR_CHAR_P(FACE, CHAR) \ + (SINGLE_BYTE_CHAR_P (CHAR) \ + ? (FACE) == (FACE)->ascii_face \ + : face_suitable_for_char_p ((FACE), (CHAR))) + /* Return the id of the realized face on frame F that is like the face - with id ID but is suitable for displaying characters of CHARSET. - This macro is only meaningful for CHARSET >= 0, i.e. multibyte - text. */ + with id ID but is suitable for displaying character CHAR. + This macro is only meaningful for multibyte character CHAR. */ -#define FACE_FOR_CHARSET(F, ID, CHARSET) \ - (FACE_SUITABLE_FOR_CHARSET_P (FACE_FROM_ID ((F), (ID)), (CHARSET)) \ - ? (ID) \ - : lookup_face ((F), FACE_FROM_ID ((F), (ID))->lface, (CHARSET))) +#define FACE_FOR_CHAR(F, FACE, CHAR) \ + (SINGLE_BYTE_CHAR_P (CHAR) \ + ? (FACE)->ascii_face->id \ + : face_for_char ((F), (FACE), (CHAR))) /* The default registry and encoding to use. */ @@ -1601,6 +1599,10 @@ /* 1 means overlay strings at end_charpos have been processed. */ unsigned overlay_strings_at_end_processed_p : 1; + /* 1 means the actual glyph is not available in the current + system. */ + unsigned glyph_not_available_p : 1; + /* The ID of the default face to use. One of DEFAULT_FACE_ID, MODE_LINE_FACE_ID, or TOOL_BAR_FACE_ID, depending on what we are displaying. */ @@ -1624,10 +1626,6 @@ is set after x_produce_glyphs has been called. */ int char_to_display; - /* Charset for which face_id was computed. This is the charset - of char_to_display after x_produce_glyphs has been called. */ - int charset; - /* If what == IT_IMAGE, the id of the image to display. */ int image_id; @@ -2118,7 +2116,6 @@ void update_face_from_frame_parameter P_ ((struct frame *, Lisp_Object, Lisp_Object)); -char *x_charset_registry P_ ((int)); Lisp_Object tty_color_name P_ ((struct frame *, int)); void clear_face_cache P_ ((int)); unsigned long load_color P_ ((struct frame *, struct face *, Lisp_Object, @@ -2127,10 +2124,8 @@ int frame_update_line_height P_ ((struct frame *)); int ascii_face_of_lisp_face P_ ((struct frame *, int)); void prepare_face_for_display P_ ((struct frame *, struct face *)); -int face_suitable_for_iso8859_1_p P_ ((struct face *)); int xstricmp P_ ((unsigned char *, unsigned char *)); -int lookup_face P_ ((struct frame *, Lisp_Object *, int)); -int face_suitable_for_charset_p P_ ((struct face *, int)); +int lookup_face P_ ((struct frame *, Lisp_Object *, int, struct face *)); int lookup_named_face P_ ((struct frame *, Lisp_Object, int)); int smaller_face P_ ((struct frame *, int, int)); int face_with_height P_ ((struct frame *, int, int)); @@ -2145,6 +2140,7 @@ int compute_char_face P_ ((struct frame *, int, Lisp_Object)); void free_all_realized_faces P_ ((Lisp_Object)); extern Lisp_Object Qforeground_color, Qbackground_color; +void free_realized_multibyte_face P_ ((struct frame *, int)); /* Defined in xfns.c */