/*
 *  xv_simple_color.c
 *    This simple application demonstrates the use of color in XView.
 *    A colormap segment is created using named colors. The default view
 *    of a text subwindow, and a canvas share the colormap segment. The
 *    colors in the colormap segment are displayed in the canvas.
 */
#include  <stdio.h>
#include  <xview/xview.h>
#include  <xview/textsw.h>
#include  <xview/canvas.h>
#include  <xview/cms.h>

/* color definitions */
#define WHITE                                   0
#define RED                                     1
#define GREEN                                   2
#define BLUE                                    3
#define NUM_COLORS                              4

main(argc, argv)
int         argc;
char        *argv[];
{
    Frame                       frame;
    Textsw                      text;
    Canvas                      canvas;
    Cms             cms;
    void                    canvas_repaint_proc();

    xv_init(XV_INIT_ARGS, argc, argv, 0);

    frame = xv_create(0, FRAME,
                      WIN_HEIGHT, 500,
                      WIN_WIDTH, 500,
                      0);

    /* Create the colormap segment */
    cms = xv_create(0, CMS,
                    CMS_SIZE, NUM_COLORS,
                    CMS_NAMED_COLORS,
                    "white",
                    "red",
                    "green",
                    "blue",
                    NULL,
                    0);

    /* Create the text subwindow and the canvas */
    text = xv_create(frame, TEXTSW,
                     WIN_HEIGHT, 300,
                     WIN_WIDTH, 500,
                     OPENWIN_VIEW_ATTRS,
                     WIN_CMS, cms,
                     0,
                     0);

    /*
     * Simply name the colormap segment to be used since it has
     * already been created.
     */
    canvas = xv_create(frame, CANVAS,
                       WIN_HEIGHT, 200,
                       WIN_WIDTH,  500,
                       XV_X, 0,
                       XV_Y, 300,
                       WIN_CMS, cms,
                       CANVAS_REPAINT_PROC, canvas_repaint_proc,
                       0,
                       0);

    xv_main_loop(frame);
}

/*
 *              canvas_repaint_proc()
 *      Called to repaint the canvas window.  Display the colors in the
 *      colormap segment associated with the canvas.
 */
void
canvas_repaint_proc(canvas, paint_window, repaint_area)
Canvas      canvas;
Xv_window   paint_window;
Rectlist    *repaint_area;
{
    xv_rop(paint_window, 10, 10, 50, 50, PIX_SRC | PIX_COLOR(WHITE),
           NULL, 0, 0);
    xv_rop(paint_window, 70, 10, 50, 50, PIX_SRC | PIX_COLOR(RED), NULL,
           0, 0);
    xv_rop(paint_window, 130, 10, 50, 50, PIX_SRC | PIX_COLOR(GREEN),
           NULL, 0, 0);
    xv_rop(paint_window, 190, 10, 50, 50, PIX_SRC | PIX_COLOR(BLUE),
           NULL, 0, 0);

}

