X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/6eab3936c71951e304f13b69ad2e835ddaf9f2f4..e8a28b295fabbc249c5123b58fcf2beb82f08da2:/src/dispextern.h diff --git a/src/dispextern.h b/src/dispextern.h index 329572eda2..e83b7c7fc8 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 @@ -1794,13 +1811,19 @@ struct face_cache bool_bf menu_face_changed_p : 1; }; +/* Return a pointer to the cached face with ID on frame F. */ + +#define FACE_FROM_ID(F, ID) \ + (eassert (UNSIGNED_CMP (ID, <, FRAME_FACE_CACHE (F)->used)), \ + FRAME_FACE_CACHE (F)->faces_by_id[ID]) + /* Return a pointer to the face with ID on frame F, or null if such a face doesn't exist. */ -#define FACE_FROM_ID(F, ID) \ - (UNSIGNED_CMP (ID, <, FRAME_FACE_CACHE (F)->used) \ - ? FRAME_FACE_CACHE (F)->faces_by_id[ID] \ - : NULL) +#define FACE_OPT_FROM_ID(F, ID) \ + (UNSIGNED_CMP (ID, <, FRAME_FACE_CACHE (F)->used) \ + ? FACE_FROM_ID (F, ID) \ + : NULL) #ifdef HAVE_WINDOW_SYSTEM @@ -1956,8 +1979,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 */ @@ -2095,7 +2118,10 @@ enum display_element_type IT_TRUNCATION, /* Continuation glyphs. See the comment for IT_TRUNCATION. */ - IT_CONTINUATION + IT_CONTINUATION, + + /* Xwidget. */ + IT_XWIDGET }; @@ -2159,6 +2185,7 @@ enum it_method { GET_FROM_C_STRING, GET_FROM_IMAGE, GET_FROM_STRETCH, + GET_FROM_XWIDGET, NUM_IT_METHODS }; @@ -2372,14 +2399,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. */ @@ -2504,6 +2531,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 +2971,10 @@ struct image /* Pixmaps of the image. */ Pixmap pixmap, mask; +#ifdef USE_CAIRO + void *cr_data; + void *cr_data2; +#endif #ifdef HAVE_X_WINDOWS /* X images of the image, corresponding to the above Pixmaps. Non-NULL means it and its Pixmap counterpart may be out of sync @@ -3054,13 +3088,19 @@ struct image_cache }; +/* A pointer to the image with id ID on frame F. */ + +#define IMAGE_FROM_ID(F, ID) \ + (eassert (UNSIGNED_CMP (ID, <, FRAME_IMAGE_CACHE (F)->used)), \ + FRAME_IMAGE_CACHE (F)->images[ID]) + /* Value is a pointer to the image with id ID on frame F, or null if no image with that id exists. */ -#define IMAGE_FROM_ID(F, ID) \ - (((ID) >= 0 && (ID) < (FRAME_IMAGE_CACHE (F)->used)) \ - ? FRAME_IMAGE_CACHE (F)->images[ID] \ - : NULL) +#define IMAGE_OPT_FROM_ID(F, ID) \ + (UNSIGNED_CMP (ID, <, FRAME_IMAGE_CACHE (F)->used) \ + ? IMAGE_FROM_ID (F, ID) \ + : NULL) /* Size of bucket vector of image caches. Should be prime. */ @@ -3235,6 +3275,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 @@ -3302,6 +3345,9 @@ bool update_window_fringes (struct window *, bool); void w32_init_fringe (struct redisplay_interface *); void w32_reset_fringes (void); #endif +#ifdef USE_CAIRO +void x_cr_init_fringe (struct redisplay_interface *); +#endif extern unsigned row_hash (struct glyph_row *); @@ -3358,7 +3404,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. */