X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/f2cec7a9907796d97bbe4f99ce00d1866b773dfb..8057d3c0149f7ee04a46825e94bee5c9247624a0:/src/dispextern.h diff --git a/src/dispextern.h b/src/dispextern.h index 4a4c731748..8aeaa82cc5 100644 --- a/src/dispextern.h +++ b/src/dispextern.h @@ -61,10 +61,10 @@ typedef XImage *XImagePtr; typedef HDC XImagePtr_or_DC; #endif -#ifdef MAC_OS -#include "macgui.h" -typedef struct mac_display_info Display_Info; -/* Mac equivalent of XImage. */ +#ifdef HAVE_NS +#include "nsgui.h" +/* following typedef needed to accomodate the MSDOS port, believe it or not */ +typedef struct ns_display_info Display_Info; typedef Pixmap XImagePtr; typedef XImagePtr XImagePtr_or_DC; #endif @@ -274,7 +274,7 @@ enum glyph_type /* Glyph describes a character. */ CHAR_GLYPH, - /* Glyph describes a composition sequence. */ + /* Glyph describes a static composition. */ COMPOSITE_GLYPH, /* Glyph describes an image. */ @@ -366,7 +366,11 @@ struct glyph doesn't have a glyph in a font. */ unsigned glyph_not_available_p : 1; -#define FACE_ID_BITS 21 + + /* Non-zero means don't display cursor here. */ + unsigned avoid_cursor_p : 1; + +#define FACE_ID_BITS 20 /* Face of the glyph. This is a realized face ID, an index in the face cache of the frame. */ @@ -386,8 +390,17 @@ struct glyph /* Character code for character glyphs (type == CHAR_GLYPH). */ unsigned ch; - /* Composition ID for composition glyphs (type == COMPOSITION_GLYPH) */ - unsigned cmp_id; + /* Sub-structures for type == COMPOSITION_GLYPH. */ + struct + { + /* Flag to tell if the composition is automatic or not. */ + unsigned automatic : 1; + /* ID of the composition. */ + unsigned id : 23; + /* Start and end indices of glyhs of the composition. */ + unsigned from : 4; + unsigned to : 4; + } cmp; /* Image ID for image glyphs (type == IMAGE_GLYPH). */ unsigned img_id; @@ -1161,14 +1174,15 @@ struct glyph_string /* Font in which this string is to be drawn. */ struct font *font; - /* Non-null means this string describes (part of) a composition. - All characters from char2b are drawn composed. */ + /* Non-null means this string describes (part of) a static + composition. */ struct composition *cmp; - /* Index of this glyph string's first character in the glyph - definition of CMP. If this is zero, this glyph string describes - the first character of a composition. */ - int gidx; + /* If not negative, this string describes a compos. */ + int cmp_id; + + /* Start and end glyph indices in a glyph-string. */ + int cmp_from, cmp_to; /* 1 means this glyph strings face has to be drawn to the right end of the window's drawing area. */ @@ -1208,7 +1222,7 @@ struct glyph_string unsigned padding_p : 1; /* The GC to use for drawing this glyph string. */ -#if defined(HAVE_X_WINDOWS) || defined(MAC_OS) +#if defined(HAVE_X_WINDOWS) GC gc; #endif #if defined(HAVE_NTGUI) @@ -1398,6 +1412,7 @@ struct glyph_string enum lface_attribute_index { LFACE_FAMILY_INDEX = 1, + LFACE_FOUNDRY_INDEX, LFACE_SWIDTH_INDEX, LFACE_HEIGHT_INDEX, LFACE_WEIGHT_INDEX, @@ -1558,6 +1573,13 @@ struct face /* If non-zero, use overstrike (to simulate bold-face). */ unsigned overstrike : 1; +/* NOTE: this is not used yet, but eventually this impl should be done + similarly to overstrike */ +#ifdef HAVE_NS + /* If non-zero, use geometric rotation (to simulate italic). */ + unsigned synth_ital : 1; +#endif + /* Next and previous face in hash collision list of face cache. */ struct face *next, *prev; @@ -1762,7 +1784,7 @@ enum display_element_type /* A normal character. */ IT_CHARACTER, - /* A composition sequence. */ + /* A composition (static and automatic). */ IT_COMPOSITION, /* An image. */ @@ -1803,6 +1825,14 @@ enum prop_idx LAST_PROP_IDX }; +/* An enumerator for the method of wrapping long lines. */ + +enum line_wrap_method +{ + TRUNCATE, + WORD_WRAP, + WINDOW_WRAP +}; struct it_slice { @@ -1818,7 +1848,6 @@ struct it_slice enum it_method { GET_FROM_BUFFER = 0, GET_FROM_DISPLAY_VECTOR, - GET_FROM_COMPOSITION, GET_FROM_STRING, GET_FROM_C_STRING, GET_FROM_IMAGE, @@ -1828,6 +1857,30 @@ enum it_method { #define IT_STACK_SIZE 4 +/* Iterator for composition (both for static and automatic). */ +struct composition_it +{ + /* Next position at which to check the composition. */ + EMACS_INT stop_pos; + /* ID number of the composition or glyph-string. If negative, we + are not iterating over a composition now. */ + int id; + /* If non-negative, character that triggers the automatic + composition at `stop_pos', and this is an automatic compositoin. + If negative, this is a static composition.. */ + int ch; + /* If non-negative, number of glyphs of the glyph-string. */ + int nglyphs; + /* Number of characters and bytes of the current grapheme cluster. */ + int nchars, nbytes; + /* Indices of the glyphs for the current grapheme cluster. */ + int from, to; + /* Width of the current grapheme cluster in units of pixels on a + graphic display and in units of canonical characters on a + terminal display. */ + int width; +}; + struct it { /* The window in which we iterate over current_buffer (or a string). */ @@ -1878,6 +1931,9 @@ struct it this is 1 if we're doing an ellipsis. Otherwise meaningless. */ unsigned ellipsis_p : 1; + /* True means cursor shouldn't be displayed here. */ + unsigned avoid_cursor_p : 1; + /* Display table in effect or null for none. */ struct Lisp_Char_Table *dp; @@ -1947,6 +2003,7 @@ struct it int string_nchars; int end_charpos; int stop_charpos; + struct composition_it cmp_it; int face_id; /* Save values specific to a given method. */ @@ -1960,8 +2017,6 @@ struct it /* method == GET_FROM_COMPOSITION */ struct { Lisp_Object object; - int c, len; - int cmp_id, cmp_len; } comp; /* method == GET_FROM_STRETCH */ struct { @@ -1978,6 +2033,7 @@ struct it unsigned multibyte_p : 1; unsigned string_from_display_prop_p : 1; unsigned display_ellipsis_p : 1; + unsigned avoid_cursor_p : 1; /* properties from display property that are reset by another display property. */ Lisp_Object space_width; @@ -2007,8 +2063,7 @@ struct it where the `^' can be replaced by a display table entry. */ unsigned ctl_arrow_p : 1; - /* 1 means lines are truncated. */ - unsigned truncate_lines_p : 1; + enum line_wrap_method line_wrap; /* Non-zero means that the current face has a box. */ unsigned face_box_p : 1; @@ -2058,9 +2113,9 @@ struct it and length in bytes of the composition. */ int c, len; - /* If what == IT_COMPOSITION, identification number and length in - chars of a composition. */ - int cmp_id, cmp_len; + /* If what == IT_COMPOSITION, iterator substructure for the + composition. */ + struct composition_it cmp_it; /* The character to display, possibly translated to multibyte if unibyte_display_via_language_environment is set. This @@ -2685,6 +2740,9 @@ void move_it_vertically P_ ((struct it *, int)); void move_it_vertically_backward P_ ((struct it *, int)); void move_it_by_lines P_ ((struct it *, int, int)); void move_it_past_eol P_ ((struct it *)); +void move_it_in_display_line (struct it *it, + EMACS_INT to_charpos, int to_x, + enum move_operation_enum op); int in_display_vector_p P_ ((struct it *)); int frame_mode_line_height P_ ((struct frame *)); void highlight_trailing_whitespace P_ ((struct frame *, struct glyph_row *)); @@ -2702,6 +2760,7 @@ extern struct frame *last_mouse_frame; extern int last_tool_bar_item; extern Lisp_Object Vmouse_autoselect_window; extern int unibyte_display_via_language_environment; +extern EMACS_INT underline_minimum_offset; extern void reseat_at_previous_visible_line_start P_ ((struct it *)); @@ -2779,10 +2838,6 @@ void compute_fringe_widths P_ ((struct frame *, int)); void w32_init_fringe P_ ((struct redisplay_interface *)); void w32_reset_fringes P_ ((void)); #endif -#ifdef MAC_OS -void mac_init_fringe P_ ((struct redisplay_interface *)); -#endif - /* Defined in image.c */ #ifdef HAVE_WINDOW_SYSTEM @@ -2850,7 +2905,6 @@ int ascii_face_of_lisp_face P_ ((struct frame *, int)); void prepare_face_for_display P_ ((struct frame *, struct face *)); int xstrcasecmp P_ ((const unsigned char *, const unsigned char *)); int lookup_face P_ ((struct frame *, Lisp_Object *)); -int lookup_non_ascii_face P_ ((struct frame *, int, struct face *)); int lookup_named_face P_ ((struct frame *, Lisp_Object, int)); int lookup_basic_face P_ ((struct frame *, int)); int smaller_face P_ ((struct frame *, int, int)); @@ -2878,8 +2932,6 @@ void free_realized_face P_ ((struct frame *, struct face *)); extern Lisp_Object Qforeground_color, Qbackground_color; extern Lisp_Object Qframe_set_background_mode; extern char unspecified_fg[], unspecified_bg[]; -extern Lisp_Object split_font_name_into_vector P_ ((Lisp_Object)); -extern Lisp_Object build_font_name_from_vector P_ ((Lisp_Object)); extern Lisp_Object Vface_remapping_alist; @@ -2891,9 +2943,6 @@ void gamma_correct P_ ((struct frame *, XColor *)); #ifdef WINDOWSNT void gamma_correct P_ ((struct frame *, COLORREF *)); #endif -#ifdef MAC_OS -void gamma_correct P_ ((struct frame *, unsigned long *)); -#endif #ifdef HAVE_WINDOW_SYSTEM @@ -2908,6 +2957,15 @@ extern void start_hourglass P_ ((void)); extern void cancel_hourglass P_ ((void)); extern int hourglass_started P_ ((void)); extern int display_hourglass_p; +extern int hourglass_shown_p; +struct atimer; /* Defined in atimer.h. */ +/* If non-null, an asynchronous timer that, when it expires, displays + an hourglass cursor on all frames. */ +extern struct atimer *hourglass_atimer; + +/* Each GUI implements these. FIXME: move into RIF. */ +extern void show_hourglass P_ ((struct atimer *)); +extern void hide_hourglass P_ ((void)); /* Returns the background color of IMG, calculating one heuristically if necessary. If non-zero, XIMG is an existing XImage object to use for