/* Interface definitions for display code.
- Copyright (C) 1985,93,94,97,98,99, 2000,01,02,03, 2004
- Free Software Foundation, Inc.
+ Copyright (C) 1985, 1993, 1994, 1997, 1998, 1999, 2000, 2001, 2002,
+ 2003, 2004, 2005 Free Software Foundation, Inc.
This file is part of GNU Emacs.
You should have received a copy of the GNU General Public License
along with GNU Emacs; see the file COPYING. If not, write to
-the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
+the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+Boston, MA 02110-1301, USA. */
/* New redisplay written by Gerd Moellmann <gerd@gnu.org>. */
typedef HDC XImagePtr_or_DC;
#endif
-#ifdef HAVE_CARBON
+#ifdef MAC_OS
#include "macgui.h"
typedef struct mac_display_info Display_Info;
/* Mac equivalent of XImage. */
#define GLYPH_DEBUG 0
#endif
+/* If XASSERTS is non-zero, additional consistency checks are activated.
+ Turn it off by defining the macro XASSERTS to zero. */
+
+#ifndef XASSERTS
+#define XASSERTS 0
+#endif
+
/* Macros to include code only if GLYPH_DEBUG != 0. */
#if GLYPH_DEBUG
#define IF_DEBUG(X) X
-#define xassert(X) do {if (!(X)) abort ();} while (0)
#else
#define IF_DEBUG(X) (void) 0
+#endif
+
+#if XASSERTS
+#define xassert(X) do {if (!(X)) abort ();} while (0)
+#else
#define xassert(X) (void) 0
#endif
#define FACE_ID_BITS 21
- /* Face of the glyph. */
+ /* Face of the glyph. This is a realized face ID,
+ an index in the face cache of the frame. */
unsigned face_id : FACE_ID_BITS;
/* Type of font used to display the character glyph. May be used to
position of the next row. */
struct display_pos end;
+ /* Non-zero means the overlay arrow bitmap is on this line.
+ -1 means use default overlay arrow bitmap, else
+ it specifies actual fringe bitmap number. */
+ int overlay_arrow_bitmap;
+
/* Left fringe bitmap number (enum fringe_bitmap_type). */
unsigned left_user_fringe_bitmap : FRINGE_ID_BITS;
unsigned truncated_on_left_p : 1;
unsigned truncated_on_right_p : 1;
- /* 1 means the overlay arrow is on this line. */
- unsigned overlay_arrow_p : 1;
-
/* 1 means that this row displays a continued line, i.e. it has a
continuation mark at the right side. */
unsigned continued_p : 1;
/* 1 means this row currently shows the cursor in the right fringe. */
unsigned cursor_in_fringe_p : 1;
+ /* 1 means the last glyph in the row is part of an ellipsis. */
+ unsigned ends_in_ellipsis_p : 1;
+
/* Non-zero means display a bitmap on X frames indicating that this
the first line of the buffer. */
unsigned indicate_bob_p : 1;
unsigned for_overlaps_p : 1;
/* The GC to use for drawing this glyph string. */
-#if defined(HAVE_X_WINDOWS) || defined(HAVE_CARBON)
+#if defined(HAVE_X_WINDOWS) || defined(MAC_OS)
GC gc;
#endif
#if defined(HAVE_NTGUI)
/* Slice */
struct glyph_slice slice;
+ /* Non-null means the horizontal clipping region starts from the
+ left edge of *clip_head, and ends with the right edge of
+ *clip_tail, not including their overhangs. */
+ struct glyph_string *clip_head, *clip_tail;
+
struct glyph_string *next, *prev;
};
CURSOR_FACE_ID,
MOUSE_FACE_ID,
MENU_FACE_ID,
+ VERTICAL_BORDER_FACE_ID,
BASIC_FACE_ID_SENTINEL
};
Lisp_Object height;
};
+enum it_method {
+ GET_FROM_BUFFER = 0,
+ GET_FROM_DISPLAY_VECTOR,
+ GET_FROM_COMPOSITION,
+ GET_FROM_STRING,
+ GET_FROM_C_STRING,
+ GET_FROM_IMAGE,
+ GET_FROM_STRETCH,
+ NUM_IT_METHODS
+};
struct it
{
/* The window's frame. */
struct frame *f;
- /* Function to call to load this structure with the next display
- element. */
- int (* method) P_ ((struct it *it));
+ /* Method to use to load this structure with the next display element. */
+ enum it_method method;
/* The next position at which to check for face changes, invisible
text, overlay strings, end of text etc., which see. */
Don't handle some `display' properties in these strings. */
unsigned string_from_display_prop_p : 1;
+ /* When METHOD == next_element_from_display_vector,
+ this is 1 if we're doing an ellipsis. Otherwise meaningless. */
+ unsigned ellipsis_p : 1;
+
/* Display table in effect or null for none. */
struct Lisp_Char_Table *dp;
means that no such character is involved. */
int dpvec_char_len;
+ /* Face id to use for all characters in display vector. -1 if unused. */
+ int dpvec_face_id;
+
/* Face id of the iterator saved in case a glyph from dpvec contains
a face. The face is restored when all glyphs from dpvec have
been delivered. */
/* Vector of overlays to process. Overlay strings are processed
OVERLAY_STRING_CHUNK_SIZE at a time. */
-#define OVERLAY_STRING_CHUNK_SIZE 3
+#define OVERLAY_STRING_CHUNK_SIZE 16
Lisp_Object overlay_strings[OVERLAY_STRING_CHUNK_SIZE];
/* Total number of overlay strings to process. This can be >
int display_prop_intangible_p P_ ((Lisp_Object));
void resize_echo_area_exactly P_ ((void));
int resize_mini_window P_ ((struct window *, int));
-int try_window P_ ((Lisp_Object, struct text_pos));
+int try_window P_ ((Lisp_Object, struct text_pos, int));
void window_box P_ ((struct window *, int, int *, int *, int *, int *));
int window_box_height P_ ((struct window *));
int window_text_bottom_y P_ ((struct window *));
extern void draw_phys_cursor_glyph P_ ((struct window *,
struct glyph_row *,
enum draw_glyphs_face));
+extern int get_phys_cursor_geometry P_ ((struct window *, struct glyph_row *,
+ struct glyph *, int *));
extern void erase_phys_cursor P_ ((struct window *));
extern void display_and_set_cursor P_ ((struct window *,
int, int, int, int, int));
int lookup_named_face P_ ((struct frame *, Lisp_Object, int, int));
int smaller_face P_ ((struct frame *, int, int));
int face_with_height P_ ((struct frame *, int, int));
-int lookup_derived_face P_ ((struct frame *, Lisp_Object, int, int));
+int lookup_derived_face P_ ((struct frame *, Lisp_Object, int, int, int));
void init_frame_faces P_ ((struct frame *));
void free_frame_faces P_ ((struct frame *));
void recompute_basic_faces P_ ((struct frame *));
int, int));
int face_at_string_position P_ ((struct window *, Lisp_Object, int, int, int,
int, int *, enum face_id, int));
+int merge_faces P_ ((struct frame *, Lisp_Object, int, int));
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;
+extern Lisp_Object Qframe_set_background_mode;
extern char unspecified_fg[], unspecified_bg[];
void free_realized_multibyte_face P_ ((struct frame *, int));
EXFUN (Fx_hide_tip, 0);
extern void start_hourglass P_ ((void));
extern void cancel_hourglass P_ ((void));
+extern int hourglass_started P_ ((void));
extern int display_hourglass_p;
/* Returns the background color of IMG, calculating one heuristically if
void init_display P_ ((void));
void syms_of_display P_ ((void));
extern Lisp_Object Qredisplay_dont_pause;
+GLYPH spec_glyph_lookup_face P_ ((struct window *, GLYPH));
/* Defined in term.c */