X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/bf7a8847fee4c005e578fd8357d0e64618628bb0..91c85b706282144564f8bc805129babe4ffe5a3a:/src/dispextern.h diff --git a/src/dispextern.h b/src/dispextern.h index 1761bede3e..ef66006cc0 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 glyphs 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) @@ -1559,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; @@ -1763,7 +1784,7 @@ enum display_element_type /* A normal character. */ IT_CHARACTER, - /* A composition sequence. */ + /* A composition (static and automatic). */ IT_COMPOSITION, /* An image. */ @@ -1827,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, @@ -1837,6 +1857,36 @@ 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. This is set to -2 + temporarily if searching of composition reach a limit or a + newline. */ + int ch; + /* If this an automatic composition, how many characters to look back + from the position where a character triggering the composition + exists. */ + int lookback; + /* 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). */ @@ -1887,6 +1937,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; @@ -1956,6 +2009,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. */ @@ -1969,8 +2023,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 { @@ -1987,11 +2039,12 @@ 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. */ + short voffset; Lisp_Object space_width; Lisp_Object font_height; - short voffset; } stack[IT_STACK_SIZE]; @@ -2016,8 +2069,6 @@ struct it where the `^' can be replaced by a display table entry. */ unsigned ctl_arrow_p : 1; - enum line_wrap_method line_wrap; - /* Non-zero means that the current face has a box. */ unsigned face_box_p : 1; @@ -2053,6 +2104,8 @@ struct it descent/ascent (line-height property). Reset after this glyph. */ unsigned constrain_row_ascent_descent_p : 1; + enum line_wrap_method line_wrap; + /* The ID of the default face to use. One of DEFAULT_FACE_ID, MODE_LINE_FACE_ID, etc, depending on what we are displaying. */ int base_face_id; @@ -2066,9 +2119,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 @@ -2087,6 +2140,9 @@ struct it /* Computed from the value of the `raise' property. */ short voffset; + /* Number of columns per \t. */ + short tab_width; + /* Value of the `height' property, if any; nil if none. */ Lisp_Object font_height; @@ -2097,9 +2153,6 @@ struct it Lisp_Object object; struct text_pos position; - /* Number of columns per \t. */ - short tab_width; - /* Width in pixels of truncation and continuation glyphs. */ short truncation_pixel_width, continuation_pixel_width; @@ -2791,10 +2844,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 @@ -2900,9 +2949,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 @@ -2917,6 +2963,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