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
/* Glyph describes a character. */
CHAR_GLYPH,
- /* Glyph describes a composition sequence. */
+ /* Glyph describes a static composition. */
COMPOSITE_GLYPH,
/* Glyph describes an image. */
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. */
/* 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;
/* 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. */
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)
/* 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;
/* A normal character. */
IT_CHARACTER,
- /* A composition sequence. */
+ /* A composition (static and automatic). */
IT_COMPOSITION,
/* An image. */
LAST_PROP_IDX
};
+/* An enumerator for the method of wrapping long lines. */
+
+enum line_wrap_method
+{
+ TRUNCATE,
+ WORD_WRAP,
+ WINDOW_WRAP
+};
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,
#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). */
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;
int string_nchars;
int end_charpos;
int stop_charpos;
+ struct composition_it cmp_it;
int face_id;
/* Save values specific to a given method. */
/* method == GET_FROM_COMPOSITION */
struct {
Lisp_Object object;
- int c, len;
- int cmp_id, cmp_len;
} comp;
/* method == GET_FROM_STRETCH */
struct {
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];
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;
-
/* Non-zero means that the current face has a box. */
unsigned face_box_p : 1;
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;
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
/* 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;
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;
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
#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
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