7 #include "parameter.hh"
9 static Parameter<int> x11size("x11size", "X11 window size", 500, 100, 10, 10000);
11 static unsigned long colour_pixel(Display *display, Colormap cmap,
15 st= XAllocNamedColor(display,cmap,name,&colour,&colour);
17 cerr << "cannot allocate colour " << name << ", quitting\n";
23 X11Output::X11Output() {
26 display= XOpenDisplay(0);
27 window= XCreateSimpleWindow(display,
28 DefaultRootWindow(display),
29 0,0, x11size,x11size, 0,0,0);
31 Colormap cmap= DefaultColormap(display,DefaultScreen(display));
32 black= colour_pixel(display,cmap,"black");
33 white= colour_pixel(display,cmap,"white");
35 gcvalues.foreground= gcvalues.background= black;
36 fabric= XCreateGC(display,window,GCForeground|GCBackground,&gcvalues);
38 gcvalues.foreground= gcvalues.background= white;
40 mesh= XCreateGC(display,window,GCForeground|GCBackground,&gcvalues);
42 XSelectInput(display,window,0);
43 XMapWindow(display,window);
47 void X11Output::startimage() {
48 XClearWindow(display,window);
51 void X11Output::endimage() {
55 X11Output::~X11Output() {
56 XCloseDisplay(display);
59 void X11Output::drawcell(const Point* list, int n, Colour colour) {
64 for (int i=0; i<n; i++) {
65 Onscreen here= Onscreen(list[i]);
66 xp[i].x= (int)((here.x+1.0)*(x11size*0.5));
67 xp[i].y= (int)((-here.y+1.0)*(x11size*0.5));
70 case grid: fill= fabric; draw= true; break;
71 case solidblack: fill= fabric; draw= false; break;
72 case solidwhite: fill= mesh; draw= false; break;
75 XFillPolygon(display,window,fill,xp,n,Nonconvex,CoordModeOrigin);
78 XDrawLines(display,window,mesh,xp,n+1,CoordModeOrigin);