X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/dddcc0e78452f2186c132823a33a174d2596ba33..3eca9a03816f95da0030665223c0b5262f223ba7:/src/dispextern.h diff --git a/src/dispextern.h b/src/dispextern.h index b9db3f808b..7035872402 100644 --- a/src/dispextern.h +++ b/src/dispextern.h @@ -1,13 +1,13 @@ /* Interface definitions for display code. -Copyright (C) 1985, 1993-1994, 1997-2015 Free Software Foundation, Inc. +Copyright (C) 1985, 1993-1994, 1997-2016 Free Software Foundation, Inc. This file is part of GNU Emacs. GNU Emacs is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. +the Free Software Foundation, either version 3 of the License, or (at +your option) any later version. GNU Emacs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -347,7 +347,10 @@ enum glyph_type IMAGE_GLYPH, /* Glyph is a space of fractional width and/or height. */ - STRETCH_GLYPH + STRETCH_GLYPH, + + /* Glyph is an external widget drawn by the GUI toolkit. */ + XWIDGET_GLYPH }; @@ -499,6 +502,11 @@ struct glyph /* Image ID for image glyphs (type == IMAGE_GLYPH). */ int img_id; +#ifdef HAVE_XWIDGETS + /* Xwidget reference (type == XWIDGET_GLYPH). */ + struct xwidget *xwidget; +#endif + /* Sub-structure for type == STRETCH_GLYPH. */ struct { @@ -1350,6 +1358,9 @@ struct glyph_string /* Image, if any. */ struct image *img; + /* Xwidget. */ + struct xwidget *xwidget; + /* Slice */ struct glyph_slice slice; @@ -1526,6 +1537,12 @@ struct glyph_string + (FRAME_LINE_HEIGHT ((F)) > FONT_HEIGHT ((FONT)))) / 2 \ - (FONT_DESCENT (FRAME_FONT (F)) - FRAME_BASELINE_OFFSET (F))) +/* A heuristic test for fonts that claim they need a preposterously + large vertical space. The heuristics is in the factor of 3. We + ignore the ascent and descent values reported by such fonts, and + instead go by the values reported for individual glyphs. */ +#define FONT_TOO_HIGH(ft) ((ft)->ascent + (ft)->descent > 3*(ft)->pixel_size) + /*********************************************************************** Faces @@ -1810,8 +1827,10 @@ struct face_cache ((FACE) == (FACE)->ascii_face) /* Return the id of the realized face on frame F that is like the face - with id ID but is suitable for displaying character CHAR. - This macro is only meaningful for multibyte character CHAR. */ + FACE, but is suitable for displaying character CHAR at buffer or + string position POS. OBJECT is the string object, or nil for + buffer. This macro is only meaningful for multibyte character + CHAR. */ #define FACE_FOR_CHAR(F, FACE, CHAR, POS, OBJECT) \ face_for_char ((F), (FACE), (CHAR), (POS), (OBJECT)) @@ -1954,8 +1973,8 @@ struct bidi_it { resolving weak and neutral types */ bidi_type_t type_after_wn; /* bidi type after overrides and Wn */ bidi_type_t orig_type; /* original bidi type, as found in the buffer */ - char resolved_level; /* final resolved level of this character */ - char isolate_level; /* count of isolate initiators unmatched by PDI */ + signed char resolved_level; /* final resolved level of this character */ + signed char isolate_level; /* count of isolate initiators unmatched by PDI */ ptrdiff_t invalid_levels; /* how many PDFs to ignore */ ptrdiff_t invalid_isolates; /* how many PDIs to ignore */ struct bidi_saved_info prev; /* info about previous character */ @@ -2093,7 +2112,10 @@ enum display_element_type IT_TRUNCATION, /* Continuation glyphs. See the comment for IT_TRUNCATION. */ - IT_CONTINUATION + IT_CONTINUATION, + + /* Xwidget. */ + IT_XWIDGET }; @@ -2157,6 +2179,7 @@ enum it_method { GET_FROM_C_STRING, GET_FROM_IMAGE, GET_FROM_STRETCH, + GET_FROM_XWIDGET, NUM_IT_METHODS }; @@ -2370,14 +2393,14 @@ struct it struct it_slice slice; ptrdiff_t image_id; } image; - /* method == GET_FROM_COMPOSITION */ - struct { - Lisp_Object object; - } comp; /* method == GET_FROM_STRETCH */ struct { Lisp_Object object; } stretch; + /* method == GET_FROM_XWIDGET */ + struct { + Lisp_Object object; + } xwidget; } u; /* Current text and display positions. */ @@ -2502,6 +2525,9 @@ struct it /* If what == IT_IMAGE, the id of the image to display. */ ptrdiff_t image_id; + /* If what == IT_XWIDGET. */ + struct xwidget *xwidget; + /* Values from `slice' property. */ struct it_slice slice; @@ -2941,6 +2967,7 @@ struct image #ifdef USE_CAIRO void *cr_data; + void *cr_data2; #endif #ifdef HAVE_X_WINDOWS /* X images of the image, corresponding to the above Pixmaps. @@ -3236,6 +3263,9 @@ extern ptrdiff_t compute_display_string_end (ptrdiff_t, struct bidi_string_data *); extern void produce_stretch_glyph (struct it *); extern int merge_glyphless_glyph_face (struct it *); +extern void forget_escape_and_glyphless_faces (void); + +extern void get_font_ascent_descent (struct font *, int *, int *); #ifdef HAVE_WINDOW_SYSTEM @@ -3362,7 +3392,6 @@ void unrequest_sigio (void); bool tabs_safe_p (int); void init_baud_rate (int); void init_sigio (int); -void ignore_sigio (void); /* Defined in xfaces.c. */