tmwalden@bbn.com (Tim M. Walden) (01/08/91)
I have created a xmDrawingAreaWidgetClass widget and am trying to install a
colormap into it. The procedure I am using works on an 8-bit-deep display
(Sun 3/60 running X11R4) but dies on a 4-bit-deep display (Cetia running X11R3).
I am setting up the colormap as follows:
load_colormap(window)
int window;
{
extern MAP_WINDOW maps[NUM_WINDOWS];
Display *dpy = XtDisplay(maps[window].canvas);
Colormap default_colormap;
Colormap my_colormap;
XColor Colors[NUM_COLORS];
int i;
int red[NUM_COLORS],
green[NUM_COLORS],
blue[NUM_COLORS];
extern Widget toplevel;
int colors[NUM_COLORS];
red[BLACK] = 0; green[BLACK] = 0; blue[BLACK] = 0;
red[WHITE] = 255; green[WHITE] = 255; blue[WHITE] = 255;
red[VIOLETRED] = 208; green[VIOLETRED] = 32; blue[VIOLETRED] = 144;
red[YELLOW] = 255; green[YELLOW] = 255; blue[YELLOW] = 0;
red[DARK_BLUE] = 0; green[DARK_BLUE] = 0; blue[DARK_BLUE] = 128;
red[RED] = 255; green[RED] = 0; blue[RED] = 0;
red[NAVY] = 0; green[NAVY] = 0; blue[NAVY] = 128;
red[GRAY_25] = 77; green[GRAY_25] = 77; blue[GRAY_25] = 77;
red[ORANGE] = 255; green[ORANGE] = 165; blue[ORANGE] = 0;
red[GRAY_75] = 191; green[GRAY_75] = 191; blue[GRAY_75] = 191;
red[BACKGROUND] = 0; green[BACKGROUND] = 0; blue[BACKGROUND] = 0;
red[GREEN] = 0; green[GREEN] = 255; blue[GREEN] = 0;
red[DARKGREEN] = 0; green[DARKGREEN] = 100; blue[DARKGREEN] = 0;
red[PURPLE] = 160; green[PURPLE] = 32; blue[PURPLE] = 240;
red[BLUE] = 0; green[BLUE] = 0; blue[BLUE] = 255;
red[MAGENTA] = 207; green[MAGENTA] = 0; blue[MAGENTA] = 255;
default_colormap = DefaultColormap(dpy, DefaultScreen(dpy));
for( i = 0; i < NUM_COLORS; i++ ) {
Colors[i].pixel = i;
Colors[i].flags = DoRed|DoGreen|DoBlue;
}
XQueryColors(dpy, default_colormap, Colors, NUM_COLORS);
XAllocColorCells(dpy, default_colormap, False, plane_masks,
0, colors, NUM_COLORS);
for( i = 0; i < NUM_COLORS; i++ ) {
Colors[i].pixel = colors[i];
Colors[i].red = red[i] * 256;
Colors[i].green = green[i] * 256;
Colors[i].blue = blue[i] * 256;
}
XStoreColors(dpy, default_colormap, Colors, NUM_COLORS);
maps[window].colormap = (unsigned long *) malloc(NUM_COLORS * sizeof(long));
for (i = 0; i < NUM_COLORS; i++ )
maps[window].colormap[i] = Colors[i].pixel;
}
This routine completes without a problem but the system later dies upon the
first time I try to do something to the Drawing Area. The error message is:
X Protocol error: BadAccess, attempt to access private resource denied
Major opcode of failed request: 89 (X_StoreColors)
Minor opcode of failed request: 0
Resource id in failed request: 0x181a
Serial number of failed request: 602
Current serial number in output stream: 912
I have also tried this with a StaticColor and PseudoColor visual. They both
die the same death. Any help in this matter is greatly appreciated. Response
via email is preferred.
Tim Walden
BBN Inc.
tmwalden@bbn.com