summaryrefslogtreecommitdiff
path: root/src/dispextern.h
diff options
context:
space:
mode:
authorKenichi Handa <handa@m17n.org>2000-03-21 00:36:45 +0000
committerKenichi Handa <handa@m17n.org>2000-03-21 00:36:45 +0000
commitb3091a238849daf332191a3f929143260f085a44 (patch)
treeaeae61b27e528d3c03a68ac4de88e6f13ebf2539 /src/dispextern.h
parent9170cbcc18e1e71c5299f51c6de2eba3d1c0ed71 (diff)
downloademacs-b3091a238849daf332191a3f929143260f085a44.tar.gz
(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.
Diffstat (limited to 'src/dispextern.h')
-rw-r--r--src/dispextern.h62
1 files changed, 29 insertions, 33 deletions
diff --git a/src/dispextern.h b/src/dispextern.h
index 7a7c20e3265..34dd9712c86 100644
--- a/src/dispextern.h
+++ b/src/dispextern.h
@@ -269,8 +269,12 @@ struct glyph
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 @@ enum lface_attribute_index
LFACE_OVERLINE_INDEX,
LFACE_STRIKE_THROUGH_INDEX,
LFACE_BOX_INDEX,
+ LFACE_FONT_INDEX,
LFACE_VECTOR_SIZE
};
@@ -1166,9 +1171,6 @@ struct face
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 @@ struct face
/* 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 @@ struct face_cache
? 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 @@ struct it
/* 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 @@ struct it
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 x_free_colors P_ ((struct frame *, unsigned long *, int));
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 @@ void unload_color P_ ((struct frame *, unsigned long));
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 face_at_string_position P_ ((struct window *, Lisp_Object,
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 */