Title: | "OSF/Motif" is a trademark |
Notice: | MOTIF kit note in 7.* |
Moderator: | GOOEY::GRASS |
Created: | Mon Aug 07 1989 |
Last Modified: | Thu Jun 05 1997 |
Last Successful Update: | Fri Jun 06 1997 |
Number of topics: | 5973 |
Total number of notes: | 24620 |
Hello! I have a X11 question rather than Motif: How can I use a 256-entry r/w colormap in TrueColor? I know there are apps that do this (SoftWindows and xv). I tried to use the following code, but it keeps crashing with BadMatch: Any help would be appreciated. Amit #include <malloc.h> #include <stdio.h> #include <X11/Xlib.h> #include <X11/Xutil.h> void main(void) { Display *disp; Colormap cmap; Window win; XVisualInfo vinfo[100]; XSetWindowAttributes attr; Status stat; disp = XOpenDisplay("doronx:0.0"); stat = XMatchVisualInfo(disp,0,8,PseudoColor,vinfo); if(stat==0) { XCloseDisplay(disp); exit(0); } XSync(disp,False); win = XCreateWindow(disp, DefaultRootWindow(disp), 0,0,100,76, /* x,y,w,h */ 0, /* border */ 8, /* depth */ InputOutput, /* input class */ vinfo[0].visual, /* pseudocolor visual */ 0L,NULL); /* attribs */ XSync(disp,False); if(win==0) { XCloseDisplay(disp); exit(0); } cmap = XCreateColormap(disp,DefaultRootWindow(disp), vinfo[0].visual,AllocAll); if(cmap == 0) { XCloseDisplay(disp); exit(0); } XSync(disp,False); XSetWindowColormap(disp,win,cmap); /* Main thing */ XSync(disp,False); XDestroyWindow(disp,win); XCloseDisplay(disp); }
T.R | Title | User | Personal Name | Date | Lines |
---|---|---|---|---|---|
5961.1 | I figured it out, so I decided to put it here. | TAV02::AMIT | Amit Margalit | Mon May 05 1997 04:14 | 71 |
Hi! Re: .0 I was getting BadMatch because when a window is a different depth than its parent, it must be created with a matching colormap AND a border_pixel value. I was creating the colormap after the window which is wrong. Here is a correct version: #include <malloc.h> #include <stdio.h> #include <X11/Xlib.h> #include <X11/Xutil.h> void main(void) { Display *disp; Colormap cmap; Window win; XVisualInfo vinfo[10]; XSetWindowAttributes attr; Status stat; int i; XColor xclr[256]; disp = XOpenDisplay("doronx:0.0"); stat = XMatchVisualInfo(disp,0,8,PseudoColor,vinfo); if(stat==0) { XCloseDisplay(disp); exit(0); } cmap=XCreateColormap(disp,DefaultRootWindow(disp),vinfo[0].visual,AllocAll); if(cmap == 0) { XCloseDisplay(disp); exit(0); } for(i=0;i<256;i++) { xclr[i].red=i*256; xclr[i].green=i*128; xclr[i].blue=~(i*256); xclr[i].flags=DoRed|DoGreen|DoBlue; xclr[i].pixel=i; } XStoreColors(disp,cmap,xclr,256); attr.border_pixel=BlackPixel(disp,0); attr.colormap=cmap; win = XCreateWindow(disp, DefaultRootWindow(disp), 0,0,100,76, /* x,y,w,h */ 0,8, /* border,depth */ InputOutput, /* input class */ vinfo[0].visual, /* pseudocolor visual */ CWBorderPixel|CWColormap,&attr); /* attribs */ if(win==0) { XCloseDisplay(disp); exit(0); } XMapWindow(disp,win); /* whop! we're on screen! */ XSync(disp,False); scanf("%d",&i); /* just to wait until you press something */ XDestroyWindow(disp,win); /* that's all folks! */ XCloseDisplay(disp); } |