int Init_X (int swidth, int sheight) { XGCValues vals; Colormap TheColormap; XColor TheColor; int i; Dv = 1 ; TheWidth = swidth ; TheHeight = sheight ; TheDisplay = XOpenDisplay("\0"); TheRootWindow = DefaultRootWindow(TheDisplay); TheScreenNumber = DefaultScreen(TheDisplay); TheDepth = DefaultDepth(TheDisplay, TheScreenNumber); if (TheDepth != 24) { printf("24 bit color not supported.\n") ; printf("Color function not likely to work.\n") ; return 0 ; } /////////////////////////////////////////////////////////////////// int maxwidth,maxheight ; maxwidth = XDisplayWidth(TheDisplay,TheScreenNumber) ; maxheight = XDisplayHeight(TheDisplay,TheScreenNumber) ; if ((swidth > maxwidth) || (sheight > maxheight)) { printf("Requested dimensions of %dx%d exceeds max possible of %dx%d.\n", swidth,sheight,maxwidth,maxheight) ; printf("Drawing to buffer only.\n") ; Dv = 0 ; } /////////////////////////////////////////////////////////////////// if (Dv) { TheWindow = XCreateSimpleWindow(TheDisplay, TheRootWindow, 0, 0, TheWidth, TheHeight, 0, 0, 0); if (!TheWindow) return 0 ; } ThePixmap = XCreatePixmap(TheDisplay, TheRootWindow, TheWidth, TheHeight, TheDepth); if (!ThePixmap) return 0 ; TheDrawable = ThePixmap; if (Dv) { XMapWindow(TheDisplay, TheWindow); XSelectInput(TheDisplay, TheWindow, ExposureMask | StructureNotifyMask | PointerMotionMask | ButtonPressMask | KeyPressMask ); } if (Dv) { vals.graphics_exposures = 0; // False TheWindowContext = XCreateGC(TheDisplay, TheWindow, GCGraphicsExposures, &vals); if (!TheWindowContext) return 0; } ThePixmapContext = XCreateGC(TheDisplay, ThePixmap, 0, 0); if (!ThePixmapContext) return 0; TheColormap = DefaultColormap(TheDisplay, TheScreenNumber); TheFontInfo = XLoadQueryFont(TheDisplay, TheFont) ; // XSetFont(TheDisplay, TheWindowContext, TheFontInfo->fid) ; XSetFont(TheDisplay, ThePixmapContext, TheFontInfo->fid) ; if (Dv) { XClearArea(TheDisplay, TheWindow, 0,0,0,0,True); } // most people expect a white piece of paper // with a black pencil Set_Color_Rgb_X (255,255,255) ; // white Clear_Buffer_X() ; // otherwise you can inherit garbage // from the parent window Copy_Buffer_X() ; if (Dv) { XFlush(TheDisplay); } Set_Color_Rgb_X (0,0,0) ; // black pencil return 1 ; }
int Init_X (int swidth, int sheight) { XGCValues vals; Colormap TheColormap; XColor TheColor; int i; TheWidth = swidth ; TheHeight = sheight ; TheDisplay = XOpenDisplay("\0"); TheRootWindow = DefaultRootWindow(TheDisplay); TheScreenNumber = DefaultScreen(TheDisplay); TheDepth = DefaultDepth(TheDisplay, TheScreenNumber); if (TheDepth != 24) { printf("24 bit color not supported.\n") ; printf("Color function not likely to work.\n") ; } TheWindow = XCreateSimpleWindow(TheDisplay, TheRootWindow, 0, 0, TheWidth, TheHeight, 0, 0, 0); if (!TheWindow) return 0 ; ThePixmap = XCreatePixmap(TheDisplay, TheRootWindow, TheWidth, TheHeight, TheDepth); if (!ThePixmap) return 0 ; TheDrawable = ThePixmap; XMapWindow(TheDisplay, TheWindow); XSelectInput(TheDisplay, TheWindow, ExposureMask | StructureNotifyMask | PointerMotionMask | ButtonPressMask | KeyPressMask ); /* TheWindowContext = XCreateGC(TheDisplay, TheWindow, 0, 0); // this is a bad idea ... see test t02.c for an example // of what can happen to the behavior of the event handler, // int Handle_Events_X(int *px, int *py) // if you do this, you'll get runaway calls to Handle_Events // with the default condition being met and this produces // a great deal of tearing in the animation of t02.c */ /* also a bad idea...same behavior as above vals.graphics_exposures = 1; // True */ // so this is what you want : vals.graphics_exposures = 0; // False TheWindowContext = XCreateGC(TheDisplay, TheWindow, GCGraphicsExposures, &vals); if (!TheWindowContext) return 0; ThePixmapContext = XCreateGC(TheDisplay, ThePixmap, 0, 0); if (!ThePixmapContext) return 0; TheColormap = DefaultColormap(TheDisplay, TheScreenNumber); for(i = 0; i < 256; i++) { TheColor.green = TheColor.blue = TheColor.red = (i << 8) | i; TheColor.flags = DoRed | DoGreen | DoBlue; XAllocColor(TheDisplay, TheColormap, &TheColor); Grays[i] = TheColor.pixel; } TheFontInfo = XLoadQueryFont(TheDisplay, TheFont) ; XSetFont(TheDisplay, TheWindowContext, TheFontInfo->fid) ; // XClearWindow(TheDisplay, TheWindow); // XClearArea(TheDisplay, TheWindow, 0,0,0,0,False); // same as above XClearArea(TheDisplay, TheWindow, 0,0,0,0,True); // Does the boolean matter here? // most people expect a white piece of paper // with a black pencil Set_Color_Rgb_X (255,255,255) ; // white Clear_Buffer_X() ; // otherwise you can inherit garbage // from the parent window // Set_Color_Rgb_X (255,0,255) ; // purple // Fill_Rectangle_X(10,10,50,80) ; // above was just a test Copy_Buffer_X() ; XFlush(TheDisplay); // XSync(TheDisplay, False) ; // seems unnecessary Set_Color_Rgb_X (0,0,0) ; // black pencil return 1 ; }