/* Interface definitions for display code.
Copyright (C) 1985, 1993, 1994, 1997, 1998, 1999, 2000, 2001, 2002,
- 2003, 2004, 2005, 2006, 2007, 2008
+ 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
Free Software Foundation, Inc.
This file is part of GNU Emacs.
/* Number of bits allocated to store fringe bitmap numbers. */
#define FRINGE_ID_BITS 16
+/* Number of bits allocated to store fringe bitmap height. */
+#define FRINGE_HEIGHT_BITS 8
\f
/***********************************************************************
struct text_pos
{
/* Character position. */
- int charpos;
+ EMACS_INT charpos;
/* Corresponding byte position. */
- int bytepos;
+ EMACS_INT bytepos;
};
/* Access character and byte position of POS in a functional form. */
buffer, this is a position in that buffer. A value of -1
together with a null object means glyph is a truncation glyph at
the start of a row. */
- int charpos;
+ EMACS_INT charpos;
/* Lisp object source of this glyph. Currently either a buffer or
a string, if the glyph was produced from characters which came from
unsigned automatic : 1;
/* ID of the composition. */
unsigned id : 23;
- /* Start and end indices of glyhs of the composition. */
+ /* Start and end indices of glyphs of the composition. */
unsigned from : 4;
unsigned to : 4;
} cmp;
/* Face of the right fringe glyph. */
unsigned right_fringe_face_id : FACE_ID_BITS;
+ /* Vertical offset of the left fringe bitmap. */
+ signed left_fringe_offset : FRINGE_HEIGHT_BITS;
+
+ /* Vertical offset of the right fringe bitmap. */
+ signed right_fringe_offset : FRINGE_HEIGHT_BITS;
+
/* 1 means that we must draw the bitmaps of this row. */
unsigned redraw_fringe_bitmaps_p : 1;
drawing shadows. */
unsigned use_box_color_for_shadows_p : 1;
- /* The Lisp face attributes this face realizes. All attributes
- in this vector are non-nil. */
- Lisp_Object lface[LFACE_VECTOR_SIZE];
-
- /* The hash value of this face. */
- unsigned hash;
-
/* Non-zero if text in this face should be underlined, overlined,
strike-through or have a box drawn around it. */
unsigned underline_p : 1;
unsigned synth_ital : 1;
#endif
+ /* The Lisp face attributes this face realizes. All attributes
+ in this vector are non-nil. */
+ Lisp_Object lface[LFACE_VECTOR_SIZE];
+
+ /* The hash value of this face. */
+ unsigned hash;
+
/* Next and previous face in hash collision list of face cache. */
struct face *next, *prev;
This macro is only meaningful for multibyte character CHAR. */
#define FACE_FOR_CHAR(F, FACE, CHAR, POS, OBJECT) \
- (ASCII_CHAR_P (CHAR) \
+ ((ASCII_CHAR_P (CHAR) || CHAR_BYTE8_P (CHAR)) \
? (FACE)->ascii_face->id \
: face_for_char ((F), (FACE), (CHAR), (POS), (OBJECT)))
enum prop_idx
{
- AUTO_COMPOSED_PROP_IDX,
FONTIFIED_PROP_IDX,
FACE_PROP_IDX,
INVISIBLE_PROP_IDX,
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.. */
+ composition at `stop_pos', and this is an automatic composition.
+ 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 charaters to look back
+ /* If this an automatic composition, how many characters to look back
from the position where a character triggering the composition
exists. */
int lookback;
/* The next position at which to check for face changes, invisible
text, overlay strings, end of text etc., which see. */
- int stop_charpos;
+ EMACS_INT stop_charpos;
/* Maximum string or buffer position + 1. ZV when iterating over
current_buffer. */
- int end_charpos;
+ EMACS_INT end_charpos;
/* C string to iterate over. Non-null means get characters from
this string, otherwise characters are read from current_buffer
/* Start and end of a visible region; -1 if the region is not
visible in the window. */
- int region_beg_charpos, region_end_charpos;
+ EMACS_INT region_beg_charpos, region_end_charpos;
/* Position at which redisplay end trigger functions should be run. */
- int redisplay_end_trigger_charpos;
+ EMACS_INT redisplay_end_trigger_charpos;
/* 1 means multibyte characters are enabled. */
unsigned multibyte_p : 1;
{
Lisp_Object string;
int string_nchars;
- int end_charpos;
- int stop_charpos;
+ EMACS_INT end_charpos;
+ EMACS_INT stop_charpos;
struct composition_it cmp_it;
int face_id;
unsigned string_from_display_prop_p : 1;
unsigned display_ellipsis_p : 1;
unsigned avoid_cursor_p : 1;
+ enum line_wrap_method line_wrap;
/* 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;
- enum line_wrap_method line_wrap;
-
/* 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;
composition. */
struct composition_it cmp_it;
- /* The character to display, possibly translated to multibyte
- if unibyte_display_via_language_environment is set. This
- is set after produce_glyphs has been called. */
+ /* The character to display, possibly translated to multibyte if
+ multibyte_p is zero or unibyte_display_via_language_environment
+ is set. This is set after get_next_display_element has been
+ called. If we are setting it->C directly before calling
+ PRODUCE_GLYPHS, this should be set beforehand too. */
int char_to_display;
/* If what == IT_IMAGE, the id of the image to display. */
/* 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;
&& ((IT)->c == '\n' \
|| ((IT)->c == '\r' && (IT)->selective)))
-/* Call produce_glyphs or produce_glyphs_hook, if set. Shortcut to
- avoid the function call overhead. */
+/* Call produce_glyphs or FRAME_RIF->produce_glyphs, if set. Shortcut
+ to avoid the function call overhead. */
#define PRODUCE_GLYPHS(IT) \
do { \
int face_at_buffer_position P_ ((struct window *w, EMACS_INT pos,
EMACS_INT region_beg, EMACS_INT region_end,
EMACS_INT *endptr, EMACS_INT limit,
- int mouse));
+ int mouse, int base_face_id));
int face_for_overlay_string P_ ((struct window *w, EMACS_INT pos,
EMACS_INT region_beg, EMACS_INT region_end,
EMACS_INT *endptr, EMACS_INT limit,
RES_TYPE_FLOAT,
RES_TYPE_BOOLEAN,
RES_TYPE_STRING,
- RES_TYPE_SYMBOL
+ RES_TYPE_SYMBOL,
+ RES_TYPE_BOOLEAN_NUMBER
};
extern Lisp_Object x_get_arg P_ ((Display_Info *, Lisp_Object,