Throughout the file, delete all USE_FONT_BACKEND
[bpt/emacs.git] / src / dispextern.h
index e89d0d7..88373c7 100644 (file)
@@ -1,6 +1,7 @@
 /* Interface definitions for display code.
    Copyright (C) 1985, 1993, 1994, 1997, 1998, 1999, 2000, 2001, 2002,
-                 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+                 2003, 2004, 2005, 2006, 2007, 2008
+                 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -350,13 +351,16 @@ struct glyph
      glyphs above or below it.  */
   unsigned overlaps_vertically_p : 1;
 
-  /* 1 means glyph is a padding glyph.  Padding glyphs are used for
-     characters whose visual shape consists of more than one glyph
-     (e.g. Asian characters).  All but the first glyph of such a glyph
-     sequence have the padding_p flag set.  Only used for terminal
-     frames, and there only to minimize code changes.  A better way
-     would probably be to use the width field of glyphs to express
-     padding. */
+  /* For terminal frames, 1 means glyph is a padding glyph.  Padding
+     glyphs are used for characters whose visual shape consists of
+     more than one glyph (e.g. Asian characters).  All but the first
+     glyph of such a glyph sequence have the padding_p flag set.  This
+     flag is used only to minimize code changes.  A better way would
+     probably be to use the width field of glyphs to express padding.
+
+     For graphic frames, 1 means the pixel width of the glyph in a
+     font is 0, but 1-pixel is padded on displaying for correct cursor
+     displaying.  The member `pixel_width' above is set to 1.  */
   unsigned padding_p : 1;
 
   /* 1 means the actual glyph is not available, draw a box instead.
@@ -414,7 +418,7 @@ struct glyph
 /* Is GLYPH a space?  */
 
 #define CHAR_GLYPH_SPACE_P(GLYPH) \
-     (GLYPH_FROM_CHAR_GLYPH ((GLYPH)) == SPACEGLYPH)
+  ((GLYPH).u.ch == SPACEGLYPH && (GLYPH).face_id == DEFAULT_FACE_ID)
 
 /* Are glyph slices of glyphs *X and *Y equal */
 
@@ -461,18 +465,25 @@ struct glyph
 
 #define SET_CHAR_GLYPH_FROM_GLYPH(GLYPH, FROM)                 \
      SET_CHAR_GLYPH ((GLYPH),                                  \
-                    FAST_GLYPH_CHAR ((FROM)),                  \
-                    FAST_GLYPH_FACE ((FROM)),                  \
+                    GLYPH_CHAR ((FROM)),                       \
+                    GLYPH_FACE ((FROM)),                       \
                     0)
 
 /* Construct a glyph code from a character glyph GLYPH.  If the
    character is multibyte, return -1 as we can't use glyph table for a
    multibyte character.  */
 
-#define GLYPH_FROM_CHAR_GLYPH(GLYPH)                           \
-  ((GLYPH).u.ch < 256                                          \
-   ? ((GLYPH).u.ch | ((GLYPH).face_id << CHARACTERBITS))       \
-   : -1)
+#define SET_GLYPH_FROM_CHAR_GLYPH(G, GLYPH)                    \
+  do                                                           \
+    {                                                          \
+      if ((GLYPH).u.ch < 256)                                  \
+       SET_GLYPH ((G), (GLYPH).u.ch, ((GLYPH).face_id));       \
+      else                                                     \
+       SET_GLYPH ((G), -1, 0);                                 \
+    }                                                          \
+  while (0)
+
+#define GLYPH_INVALID_P(GLYPH) (GLYPH_CHAR (GLYPH) < 0)
 
 /* Is GLYPH a padding glyph?  */
 
@@ -1196,6 +1207,11 @@ struct glyph_string
      respectively.  */
   unsigned for_overlaps : 3;
 
+  /* 1 means that all glyphs in this glyph string has the flag
+     padding_p set, and thus must be drawn one by one to have 1-pixel
+     width even though the logical width in the font is zero.  */
+  unsigned padding_p : 1;
+
   /* The GC to use for drawing this glyph string.  */
 #if defined(HAVE_X_WINDOWS) || defined(MAC_OS)
   GC gc;
@@ -1221,13 +1237,11 @@ struct glyph_string
      *clip_tail, not including their overhangs.  */
   struct glyph_string *clip_head, *clip_tail;
 
-#ifdef USE_FONT_BACKEND
   /* The current clipping areas.  */
   NativeRectangle clip[2];
 
   /* Number of clipping areas. */
   int num_clips;
-#endif /* USE_FONT_BACKEND */
 
   struct glyph_string *next, *prev;
 };
@@ -1485,9 +1499,7 @@ struct face
      reallocated.  */
   int font_info_id;
 
-#ifdef USE_FONT_BACKEND
   struct font_info *font_info;
-#endif /* USE_FONT_BACKEND */
 
   /* Fontset ID if for this face's fontset.  Non-ASCII faces derived
      from the same ASCII face have the same fontset.  */
@@ -1572,10 +1584,8 @@ struct face
      attributes except the font.  */
   struct face *ascii_face;
 
-#ifdef USE_FONT_BACKEND
   /* Extra member that a font-driver uses privately.  */
   void *extra;
-#endif /* USE_FONT_BACKEND */
 };
 
 
@@ -1820,6 +1830,9 @@ struct it_slice
   Lisp_Object height;
 };
 
+/* Input sources for fetching characters or data to display.
+   The input source is found in the `method' field.  */
+
 enum it_method {
   GET_FROM_BUFFER = 0,
   GET_FROM_DISPLAY_VECTOR,
@@ -1921,20 +1934,27 @@ struct it
      position in overlay strings etc.  */
   struct display_pos current;
 
+  /* Total number of overlay strings to process.  This can be >
+     OVERLAY_STRING_CHUNK_SIZE.  */
+  int n_overlay_strings;
+
   /* Vector of overlays to process.  Overlay strings are processed
      OVERLAY_STRING_CHUNK_SIZE at a time.  */
 #define OVERLAY_STRING_CHUNK_SIZE 16
   Lisp_Object overlay_strings[OVERLAY_STRING_CHUNK_SIZE];
 
-  /* Total number of overlay strings to process.  This can be >
-     OVERLAY_STRING_CHUNK_SIZE.  */
-  int n_overlay_strings;
+  /* For each overlay string, the overlay it came from.  */
+  Lisp_Object string_overlays[OVERLAY_STRING_CHUNK_SIZE];
 
   /* If non-nil, a Lisp string being processed.  If
      current.overlay_string_index >= 0, this is an overlay string from
      pos.  */
   Lisp_Object string;
 
+  /* If non-nil, we are processing a string that came
+     from a `display' property given by an overlay.  */
+  Lisp_Object from_overlay;
+
   /* Stack of saved values.  New entries are pushed when we begin to
      process an overlay string or a string from a `glyph' property.
      Entries are popped when we return to deliver display elements
@@ -1970,6 +1990,7 @@ struct it
     /* current text and display positions.  */
     struct text_pos position;
     struct display_pos current;
+    Lisp_Object from_overlay;
     enum glyph_row_area area;
     enum it_method method;
     unsigned multibyte_p : 1;
@@ -1986,13 +2007,6 @@ struct it
   /* Stack pointer.  */
   int sp;
 
-  /* Setting of buffer-local variable selective-display-ellipsis.  */
-  unsigned selective_display_ellipsis_p : 1;
-
-  /* 1 means control characters are translated into the form `^C'
-     where the `^' can be replaced by a display table entry.  */
-  unsigned ctl_arrow_p : 1;
-
   /* -1 means selective display hides everything between a \r and the
      next newline; > 0 means hide lines indented more than that value.  */
   int selective;
@@ -2004,6 +2018,16 @@ struct it
   /* Face to use.  */
   int face_id;
 
+  /* Setting of buffer-local variable selective-display-ellipsis.  */
+  unsigned selective_display_ellipsis_p : 1;
+
+  /* 1 means control characters are translated into the form `^C'
+     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;
 
@@ -2083,9 +2107,6 @@ struct it
   Lisp_Object object;
   struct text_pos position;
 
-  /* 1 means lines are truncated.  */
-  unsigned truncate_lines_p : 1;
-
   /* Number of columns per \t.  */
   short tab_width;
 
@@ -2481,6 +2502,11 @@ struct image
   /* Lisp specification of this image.  */
   Lisp_Object spec;
 
+  /* List of "references" followed to build the image.
+     Typically will just contain the name of the image file.
+     Used to allow fine-grained cache flushing.  */
+  Lisp_Object dependencies;
+
   /* Relief to draw around the image.  */
   int relief;
 
@@ -2541,8 +2567,8 @@ struct image_cache
    no image with that id exists.  */
 
 #define IMAGE_FROM_ID(F, ID)                                   \
-     (((ID) >= 0 && (ID) < (FRAME_X_IMAGE_CACHE (F)->used))    \
-      ? FRAME_X_IMAGE_CACHE (F)->images[ID]                    \
+     (((ID) >= 0 && (ID) < (FRAME_IMAGE_CACHE (F)->used))      \
+      ? FRAME_IMAGE_CACHE (F)->images[ID]                      \
       : NULL)
 
 /* Size of bucket vector of image caches.  Should be prime.  */
@@ -2780,7 +2806,7 @@ int draw_window_fringes P_ ((struct window *, int));
 int update_window_fringes P_ ((struct window *, int));
 void compute_fringe_widths P_ ((struct frame *, int));
 
-#ifdef WINDOWS_NT
+#ifdef WINDOWSNT
 void w32_init_fringe P_ ((struct redisplay_interface *));
 void w32_reset_fringes P_ ((void));
 #endif
@@ -2812,9 +2838,8 @@ extern Lisp_Object x_find_image_file P_ ((Lisp_Object));
 void x_kill_gs_process P_ ((Pixmap, struct frame *));
 struct image_cache *make_image_cache P_ ((void));
 void free_image_cache P_ ((struct frame *));
-void clear_image_cache P_ ((struct frame *, int));
-void forall_images_in_image_cache P_ ((struct frame *,
-                                      void (*) P_ ((struct image *))));
+void clear_image_caches P_ ((Lisp_Object));
+void mark_image_cache P_ ((struct image_cache *));
 int valid_image_p P_ ((Lisp_Object));
 void prepare_image_for_display P_ ((struct frame *, struct image *));
 int lookup_image P_ ((struct frame *, Lisp_Object));
@@ -2864,10 +2889,18 @@ int lookup_derived_face P_ ((struct frame *, Lisp_Object, int, int));
 void init_frame_faces P_ ((struct frame *));
 void free_frame_faces P_ ((struct frame *));
 void recompute_basic_faces P_ ((struct frame *));
-int face_at_buffer_position P_ ((struct window *, int, int, int, int *,
-                                int, int));
-int face_at_string_position P_ ((struct window *, Lisp_Object, int, int, int,
-                                int, int *, enum face_id, int));
+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 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,
+                                int mouse, Lisp_Object overlay));
+int face_at_string_position P_ ((struct window *w, Lisp_Object string,
+                                EMACS_INT pos, EMACS_INT bufpos,
+                                EMACS_INT region_beg, EMACS_INT region_end,
+                                EMACS_INT *endptr, enum face_id, int mouse));
 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));
@@ -2991,7 +3024,7 @@ void bitch_at_user P_ ((void));
 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));
+void spec_glyph_lookup_face P_ ((struct window *, GLYPH *));
 
 /* Defined in terminal.c */
 
@@ -3024,7 +3057,7 @@ extern void calculate_costs P_ ((struct frame *));
 extern void produce_glyphs P_ ((struct it *));
 extern void produce_special_glyphs P_ ((struct it *, enum display_element_type));
 extern int tty_capable_p P_ ((struct tty_display_info *, unsigned, unsigned long, unsigned long));
-extern void set_tty_color_mode P_ ((struct frame *, Lisp_Object));
+extern void set_tty_color_mode (struct tty_display_info *, struct frame *);
 extern struct terminal *get_tty_terminal P_ ((Lisp_Object, int));
 extern struct terminal *get_named_tty P_ ((char *));
 EXFUN (Ftty_type, 1);