/* examples/canvas/xi.c */ #include #define XMAX 180 #define YMAX 220 He_node *princ, *canvas; XImage *xi; void init_xi () { int x, y; /* Création */ xi = HeCreateXi (XMAX, YMAX); if (xi == NULL) return; /* Calcul */ for (y = 0; y < YMAX; y++) for (x = 0; x < XMAX; x++) { Uchar R = x, G = 255-x, B = y; HeSetXiPixel (xi, y*XMAX+x, R, G, B); } } void canvas_repaint_proc (He_node *hn, Window win) { int i, j; /* Affichage multiple instantané */ for (i = 0; i <= HeGetWidth (hn)/XMAX; i++) for (j = 0; j <= HeGetHeight(hn)/YMAX; j++) HePutXi (win, he_gc, xi, i*XMAX, j*YMAX); } int main (int argc, char *argv[]) { HeInit (&argc, &argv); princ = HeCreateFrame(); HeSetFrameLabel (princ, "XImage"); canvas = HeCreateCanvas (princ); HeSetCanvasRepaintProc (canvas, canvas_repaint_proc); HeSetWidth (canvas, 500); HeSetHeight (canvas, 500); init_xi(); HeFit (princ); return HeMainLoop (princ); }