1. xemacs
  2. oo-browser

Source

oo-browser / tree-x / dbl.h

/* ----------------------------------------------------------------------------
 *     Double buffering code
 * ----------------------------------------------------------------------------
 */

#include <stdio.h>
#include <X11/Xlib.h>

#define DBL_MAX_SURFACES 2
#define DBL_MIN_PLANES   2
#define DBL_MAX_PLANES   6
#define DBL_MAX_COLORS   (1 << (DBL_MAX_PLANES >> 1))

typedef struct _surface {
    int	         mask;          /* mask to use this surface           */
    int	       offset;          /* offset within colormap             */
    int	   num_colors;          /* number of colors in color array    */
    XColor   color[1];          /* the actual color array             */
} Surface;

typedef struct _doublebuffer {
    Display     *display;       /* X display for windows and pixmaps  */
    Screen      *screen;	/* X screen                           */
    Window	 window;	/* X window for this double buffer    */

    int		 width;		/* width of window                    */
    int          height;	/* height of window                   */

    Pixmap	 frame;	        /* pixmap for frame buffer            */
    Pixmap       backing;       /* pixmap for backing store           */
    Drawable     drawable;      /* copy of window/pixmap we draw in   */

    GC		 gc;		/* GC used to draw the drawable       */
    Visual      *visual;	/* X visual                           */
    Colormap     colormap;	/* X colormap identifier              */
    int          depth;	        /* depth of screen in planes          */
    int          num_planes;    /* number of planes used              */

/* surface information is used to do double buffering                 */

   int       num_surfaces;
   int       current_surface;
   Surface  *surface[DBL_MAX_SURFACES];

/* we need to remember which pixels and planes we allocated           */

   int           mask;
   unsigned long pixels[DBL_MAX_COLORS];
   unsigned long planes[DBL_MAX_PLANES];

/* the pixel values one should use when drawing to the viewports      */

   int       num_colors;
   int       colors[DBL_MAX_COLORS];
} DoubleBuffer;


void		DBLend_frame(DoubleBuffer *db, short init);
void		DBLbegin_frame (DoubleBuffer *db);
void		DBLdelete_double_buffer(DoubleBuffer *db);
unsigned long	DBLinq_background(DoubleBuffer *db);

DoubleBuffer *
DBLcreate_double_buffer (Display *display,
			 Window   window,
			 int      backing_store,
			 XColor  *colors,
			 int      num_colors);