/*
 * disp_fonts.c -- displays a collection of fonts in a canvas.
 */
#include <X11/X.h>
#include <X11/Xlib.h>
#include <xview/xview.h>
#include <xview/canvas.h>
#include <xview/font.h>
#include <xview/xv_xrect.h>

#ifdef SVR4
#define srandom( SEED )     srand( SEED )
#define random( SEED )      rand( SEED )
#endif

GC      gc;
char *font_names[] =
{
    "courier", "courier-bold", "courier-16", "courier-oblique-19",
    "lucidasans", "lucidasans-bold", "lucidasans-9", "lucidasans-italic",
    "palatino-roman", "palatino-bold-14", "palatino-roman-7", "palatino-italic",
    "times-bold", "times-roman", "times-roman-10", "times-italic-14",
    "charter-black", "charter-black-13", "charter-black-italic",
    "helvetica-20", "gillsans", "gillsans-bold", "gillsans-bolditalic",
    "newcenturyschlbk-roman", "newcenturyschlbk-bold-15",
    "rockwell", "rockwell-italic-16", "symbol", "symbol-16",
    "symbol-19", "bookman-demi", "bookman-light-19",
    "avantgarde-book", "avantgarde-demi", "avantgarde-demioblique"
};
Xv_Font fonts[sizeof(font_names) / sizeof(char *)];

main(argc, argv)
int      argc;
char    *argv[];
{
    Display     *dpy;
    Frame       frame;
    Canvas      canvas;
    XGCValues   gcvalues;
    Xv_Font     font;
    int         i;
    void        my_repaint_proc();

    xv_init(XV_INIT_ARGC_PTR_ARGV, &argc, argv, NULL);

    frame = (Frame)xv_create(XV_NULL, FRAME,
                             FRAME_LABEL,            argv[0],
                             FRAME_SHOW_FOOTER,      TRUE,
                             NULL);

    canvas = (Canvas)xv_create(frame, CANVAS,
                               XV_WIDTH,               500,
                               XV_HEIGHT,              300,
                               CANVAS_X_PAINT_WINDOW,  TRUE,
                               CANVAS_REPAINT_PROC,    my_repaint_proc,
                               NULL);

    window_fit(frame);

    dpy = (Display *)xv_get(frame, XV_DISPLAY);

    for(i = 0; i < sizeof font_names / sizeof(char *); i++)
        fonts[i] = (Xv_Font)xv_find(frame, FONT,
                                    FONT_NAME, font_names[i],
                                    NULL);

    gcvalues.foreground = BlackPixel(dpy, DefaultScreen(dpy));
    gcvalues.background = WhitePixel(dpy, DefaultScreen(dpy));
    gcvalues.graphics_exposures = False;
    gc = XCreateGC(dpy, RootWindow(dpy, DefaultScreen(dpy)),
                   GCForeground | GCBackground | GCGraphicsExposures, &gcvalues);

    srandom(time(0));
    xv_main_loop(frame);
}

void
my_repaint_proc(canvas, pw, dpy, xwin, xrects)
Canvas canvas;
Xv_Window pw;
Display *dpy;
Window xwin;
Xv_xrectlist *xrects;
{
    int i, x, y;
    int width = (int)xv_get(canvas, XV_WIDTH);
    int height = (int)xv_get(canvas, XV_HEIGHT);
    XFontStruct *fi;

    for(i = 0; i < sizeof font_names / sizeof(char *); i++)
        if(fonts[i])
        {
            x = random() % width - 70;
            y = random() % height - 20;
            fi = (XFontStruct *)xv_get(fonts[i], FONT_INFO);
            XSetFont(dpy, gc, fi->fid);
            XDrawString(dpy, xwin, gc, x, y,
                        font_names[i], strlen(font_names[i]));
            /* "Hello World", 11); */
        }
}
