wschmidt@cs.tamu.edu (William M Schmidt) (04/07/91)
I have an application that needs a gray level colormap and I'm having some problems creating one. To see if one is available I use: int status; XStandardcolormap gray-info; Colormap gray_colormap; XColor *grays; ... status = XGetStandardColormap(display, window, &gray_info, XA_RGB_GRAY_MAP); if ( !status ) ... code to install the colormap. No problem. else { gray_colormap = XCreateColormap(display, window, visual, AllocAll); grays = (XColor *)calloc(ncolors, sizeof(XColor)); for ( i = 0; i < ncolors; i++ ) { grays[i].pixel = (unsigned long) i; intensity = (65536 / (1 << depth) ) * i - 1; grays[i].red = grays[i].green = grays[i].blue = intensity; grays[i].flags = DoRed | DoGreen | DoBlue; } XStoreColors(display, gray_colormap, grays, ncolors); gray_info.colormap = gray_colormap; XSetStandardColormap(display, root_window, &gray_info, XA_RGB_GRAY_MAP); XSetWindowColormap(display, root_window, gray_colormap); } ... My problem is that I thought that even if the standard colormap didn't exist, i.e. gray_info.colormap = 0 after the XGetStandardColormap() that the other fields in gray_info would be filled. This doesn't seem to be happening. How do I determine *_max, *_mult and the base_pixel values? Using 2^depth for red_max and setting red_mult = 1 and base pixel = 0 doens't work. By the way, before I do this I check that visual is a dynamic visual. What am I missing? Bill