/*
 * FIG : Facility for Interactive Generation of figures
 * Copyright (c) 1985-1988 by Supoj Sutanthavibul
 * Parts Copyright (c) 1989-2007 by Brian V. Smith
 * Parts Copyright (c) 1991 by Paul King
 *
 * Any party obtaining a copy of these files is granted, free of charge, a
 * full and unrestricted irrevocable, world-wide, paid up, royalty-free,
 * nonexclusive right and license to deal in this software and documentation
 * files (the "Software"), including without limitation the rights to use,
 * copy, modify, merge, publish distribute, sublicense and/or sell copies of
 * the Software, and to permit persons who receive copies from any such
 * party to do so, with the only requirement being that the above copyright
 * and this permission notice remain intact.
 *
 */

extern void	redisplay_canvas(void);
extern Boolean	request_redraw;		/* set in redisplay_region if called when
					   preview_in_progress is true */
extern void	clearcounts(void);		/* clear object counters for each depth */
extern void	clearallcounts(void);	/* clear all object counters for each depth */

/*
 * Support for rendering based on correct object depth.	 A simple depth based
 * caching scheme; anything more will require major surgery on the object
 * data structures that will percolate throughout program.
 *
 * One ``counts'' structure for each object type at each nesting depth from 0
 * to MAX_DEPTH - 1.  We track both the number of objects per type per depth,
 * as well as the number of objects drawn so far per type per depth to cut
 * down on search loop overhead.
 */

struct counts {
    unsigned	    num_arcs;		/* # arcs at this depth */
    unsigned	    num_lines;		/* # lines at this depth */
    unsigned	    num_ellipses;	/* # ellipses at this depth */
    unsigned	    num_splines;	/* # splines at this depth */
    unsigned	    num_texts;		/* # texts at this depth */
    unsigned	    cnt_arcs;		/* count of arcs drawn at this depth */
    unsigned	    cnt_lines;		/* count of lines drawn at this depth */
    unsigned	    cnt_ellipses;	/* count of ellipses drawn at this
					 * depth */
    unsigned	    cnt_splines;	/* count of splines drawn at this depth */
    unsigned	    cnt_texts;		/* count of texts drawn at this depth */
};

extern struct counts	counts[], saved_counts[];
extern void redisplay_arc (F_arc *a);
extern void redisplay_arcs (F_arc *a1, F_arc *a2);
extern void redisplay_compound (F_compound *c);
extern void redisplay_compoundobject (F_compound *compounds, int depth);
extern void redisplay_compounds (F_compound *c1, F_compound *c2);
extern void redisplay_ellipse (F_ellipse *e);
extern void redisplay_ellipses (F_ellipse *e1, F_ellipse *e2);
extern void redisplay_line (F_line *l);
extern void redisplay_lines (F_line *l1, F_line *l2);
extern void redisplay_objects (F_compound *active_objects);
extern void redisplay_pageborder (void);
extern void redisplay_spline (F_spline *s);
extern void redisplay_splines (F_spline *s1, F_spline *s2);
extern void redisplay_text (F_text *t);
extern void redisplay_texts (F_text *t1, F_text *t2);
extern void redisplay_zoomed_region (int xmin, int ymin, int xmax, int ymax);
extern void update_pageborder (void);

extern void redisplay_region (int xmin, int ymin, int xmax, int ymax);
extern void redisplay_regions (int xmin1, int ymin1, int xmax1, int ymax1, int xmin2, int ymin2, int xmax2, int ymax2);
