static Parameter<int> x11size("x11size", "X11 window size", 500, 100, 10, 10000);
-static unsigned long colour_pixel(Display *display, Colormap cmap,
- const char *name) {
+GC X11Output::gc(const char *colour_name) {
+ XGCValues gcvalues;
XColor colour;
Status st;
- st= XAllocNamedColor(display,cmap,name,&colour,&colour);
+
+ st= XAllocNamedColor(display,cmap,colour_name,&colour,&colour);
if (!st) {
- cerr << "cannot allocate colour " << name << ", quitting\n";
+ cerr << "cannot allocate colour " << colour_name << ", quitting\n";
exit(1);
}
- return colour.pixel;
+
+ gcvalues.foreground= gcvalues.background= colour.pixel;
+ return XCreateGC(display,window,GCForeground|GCBackground,&gcvalues);
}
X11Output::X11Output() {
- XGCValues gcvalues;
-
display= XOpenDisplay(0);
window= XCreateSimpleWindow(display,
DefaultRootWindow(display),
0,0, x11size,x11size, 0,0,0);
+ cmap= DefaultColormap(display,DefaultScreen(display));
- Colormap cmap= DefaultColormap(display,DefaultScreen(display));
- black= colour_pixel(display,cmap,"black");
- white= colour_pixel(display,cmap,"white");
-
- gcvalues.foreground= gcvalues.background= black;
- fabric= XCreateGC(display,window,GCForeground|GCBackground,&gcvalues);
-
- gcvalues.foreground= gcvalues.background= white;
-
- mesh= XCreateGC(display,window,GCForeground|GCBackground,&gcvalues);
+ black= gc("black");
+ white= gc("white");
+ blue= gc("blue");
+ red= gc("red");
XSelectInput(display,window,0);
XMapWindow(display,window);
}
void X11Output::drawcell(const Point* list, int n, Colour colour) {
- GC fill;
- bool draw;
+ GC fill, draw;
XPoint xp[n+1];
for (int i=0; i<n; i++) {
xp[i].y= (int)((-here.y+1.0)*(x11size*0.5));
}
switch (colour) {
- case grid: fill= fabric; draw= true; break;
- case solidblack: fill= fabric; draw= false; break;
- case solidwhite: fill= mesh; draw= false; break;
+ case grid: fill= black; draw= white; break;
+ case solidblack: fill= red; draw= 0; break;
+ case solidwhite: fill= blue; draw= 0; break;
default: abort();
}
XFillPolygon(display,window,fill,xp,n,Nonconvex,CoordModeOrigin);
if (draw) {
xp[n]= xp[0];
- XDrawLines(display,window,mesh,xp,n+1,CoordModeOrigin);
+ XDrawLines(display,window,draw,xp,n+1,CoordModeOrigin);
}
}