/* * Copyright 1988 by Evans & Sutherland Computer Corporation, * Salt Lake City, Utah * Portions Copyright 1989 by the Massachusetts Institute of Technology * Cambridge, Massachusetts * * Copyright 1992 Claude Lecommandeur. */ /********************************************************************** * * $XConsortium: gc.c,v 1.22 91/01/09 17:13:12 rws Exp $ * * Open the fonts and create the GCs * * 31-Mar-88 Tom LaStrange Initial Version. * * Do the necessary modification to be integrated in ctwm. * Can no longer be used for the standard twm. * * 22-April-92 Claude Lecommandeur. * * **********************************************************************/ #include "ctwm.h" #include #include "gram.tab.h" #include "screen.h" #include "gc.h" /*********************************************************************** * * Procedure: * CreateGCs - open fonts and create all the needed GC's. I only * want to do this once, hence the first_time flag. * *********************************************************************** */ void CreateGCs(void) { static ScreenInfo *prevScr = NULL; XGCValues gcv; unsigned long gcm; static unsigned char greypattern [] = {0x0f, 0x05, 0x0f, 0x0a}; Pixmap greypixmap; static char dashlist [2] = {1, 1}; if(!Scr->FirstTime || prevScr == Scr) { return; } prevScr = Scr; /* create GC's */ gcm = 0; gcm |= GCFunction; gcv.function = GXxor; gcm |= GCLineWidth; gcv.line_width = 0; gcm |= GCForeground; gcv.foreground = Scr->XORvalue; gcm |= GCSubwindowMode; gcv.subwindow_mode = IncludeInferiors; Scr->DrawGC = XCreateGC(dpy, Scr->Root, gcm, &gcv); gcm = 0; gcm |= GCForeground; gcv.foreground = Scr->MenuC.fore; gcm |= GCBackground; gcv.background = Scr->MenuC.back; Scr->MenuGC = XCreateGC(dpy, Scr->Root, gcm, &gcv); gcm = 0; gcm |= GCPlaneMask; gcv.plane_mask = AllPlanes; /* * Prevent GraphicsExpose and NoExpose events. We'd only get NoExpose * events anyway; they cause BadWindow errors from XGetWindowAttributes * call in FindScreenInfo (events.c) (since drawable is a pixmap). */ gcm |= GCGraphicsExposures; gcv.graphics_exposures = False; gcm |= GCLineWidth; gcv.line_width = 0; Scr->NormalGC = XCreateGC(dpy, Scr->Root, gcm, &gcv); greypixmap = XCreatePixmapFromBitmapData(dpy, Scr->Root, (char *) greypattern, 4, 4, 1, 0, 1); if(Scr->Monochrome != COLOR) { gcm = 0; gcm |= GCStipple; gcv.stipple = greypixmap; gcm |= GCFillStyle; gcv.fill_style = FillOpaqueStippled; gcm |= GCForeground; gcv.foreground = Scr->Black; gcm |= GCBackground; gcv.background = Scr->White; Scr->BorderGC = XCreateGC(dpy, Scr->Root, gcm, &gcv); XSetDashes(dpy, Scr->BorderGC, 1, dashlist, 2); } else if(Scr->BeNiceToColormap) { gcm = 0; gcm |= GCLineStyle; gcv.line_style = LineDoubleDash; Scr->BorderGC = XCreateGC(dpy, Scr->Root, gcm, &gcv); XSetDashes(dpy, Scr->BorderGC, 0, dashlist, 2); } else { Scr->BorderGC = XCreateGC(dpy, Scr->Root, 0, NULL); } }