Path: utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!ames!lll-lcc!lll-winken!uunet!mcvax!inria!lri!chatty From: chatty@lri.lri.fr (Stephane Chatty) Newsgroups: comp.windows.x Subject: Pixmaps modified when used as stipples. Message-ID: <374@lri.lri.fr> Date: 1 Apr 89 13:08:03 GMT Sender: chatty@lri.lri.fr Lines: 89 Our X server modifies the pixmaps used as stipples in a GC when they do not have the 'best size'. We work on a SUN3/60, and our server is MIT's X11r3 with fixes 1-8, Purdue and Purdue+ patches, and was compiled with gcc-1.33. The 'best size' for stipples is 32x32, and when we use a 16x16 bitmap for filling a rectangle on another pixmap, in FillStippled mode, our bitmap is changed into a 32x16 one! Is it a feature of X that stipples are not kept, or is it a bug of our server ? Here is a little program which shows that behaviour. As it is hard to get info from a Pixmap, we test them by making cursors in a sample window. We could as well have used a XCopyPlane. --------------------------------------------------------------------------- #include #define arrow_width 16 #define arrow_height 16 static char arrow_bits[] = { 0xff, 0xff, 0x1f, 0xf8, 0xdf, 0xfb, 0xdf, 0xfb, 0xdf, 0xfb, 0xdf, 0xfb, 0xdf, 0xfb, 0xdf, 0xfb, 0xc3, 0xc3, 0xfb, 0xdf, 0xf7, 0xef, 0xef, 0xf7, 0xdf, 0xfb, 0xbf, 0xfd, 0x7f, 0xfe, 0xff, 0xff}; main () { Display* dpy; int scn; GC gc; Pixmap source = 0; Pixmap result; Window test_window; Colormap cmap; XColor WHITE, BLACK, c; Cursor test_cursor; dpy = XOpenDisplay (0); scn = DefaultScreen (dpy); /* What we need for testing pixmaps : */ cmap = DefaultColormap (dpy, scn); XAllocNamedColor (dpy, cmap, "white", &WHITE, &c); XAllocNamedColor (dpy, cmap, "black", &BLACK, &c); test_window = XCreateSimpleWindow (dpy, RootWindow (dpy, scn), 50, 1, 50, 50, 2, BlackPixel (dpy, scn), WhitePixel (dpy, scn)); XMapWindow (dpy, test_window); XFlush (dpy); /* The graphic context */ gc = XCreateGC (dpy, RootWindow (dpy, scn), 0, 0); XSetFillStyle (dpy, gc, FillStippled); /* Load a pixmap from data, and call it 'source' */ source = XCreateBitmapFromData (dpy, RootWindow (dpy, scn), arrow_bits, arrow_width, arrow_height); /* Create another pixmap from scratch */ result = XCreatePixmap (dpy, RootWindow (dpy, scn), arrow_width, arrow_height, 1); /* Use 'source' as a stipple for drawing */ XSetStipple (dpy, gc, source); /* A simple test for a pixmap : use it as a cursor */ test_cursor = XCreatePixmapCursor (dpy, source, source, &BLACK, &WHITE, 0, 0); XDefineCursor (dpy, test_window, test_cursor); XFlush (dpy); getchar (); /*Draw in 'result', using 'source' as a stipple */ XFillRectangle (dpy, result, gc, 0, 0, arrow_width, arrow_height); /* Check 'source' again : it has been modified !! */ test_cursor = XCreatePixmapCursor (dpy, source, source, &BLACK, &WHITE, 0, 0); XDefineCursor (dpy, test_window, test_cursor); XFlush (dpy); getchar (); } ------------------------------------------------------------------------------- Stephane CHATTY chatty@frlri61.bitnet, chatty@lri.lri.fr