[comp.windows.x] How to create a palette

slg3x@cc.usu.edu (04/09/91)

Hi X-folks, 

Could you take a look my portion of codes? I can not draw the color I want; I
just got all "white" color. Did I make some mistake in somewhere? I wonder I 
didn't create a correct colormap. I used the following method to create pallete
(colormap). Does it has anything wrong? Please mail to me directly. Thanks in
advance.

Kchen

kchen@nit.cs.usu.edu
--------------------------------------------------------------------------- 
  vTemplate.screen = myscreen;
  vTemplate.colormap_size = 256;
  vTemplate.depth = 8;
  visualList = XGetVisualInfo (mydisplay, VisualScreenMask | VisualDepthMask,
                                &vTemplate, &visualsMatched);
  if ((visualsMatched == 0) && (visualList != NULL))
  {
      printf("FATAL ERROR\n");
      exit(0);
  }

  /*
    Set up window attributes
  */
  attributes.background_pixel = mybackground;
  attribute_mask              = CWBackPixel | CWBorderPixel |
                                CWEventMask;
  /*
    colormap creation
  */
  colormap1 = XCreateColormap (mydisplay, RootWindow(mydisplay, myscreen),
                               visualList[0].visual, AllocNone);

  /* allocate four colors in palette and each color has 65 indexes */
  if (XAllocColorCells(mydisplay, colormap1, True, NULL, 0, cells, 256))
  {
     /* pink */
     color[0].red = 62207; color[0].green = 9; color[0].blue = 8351;
     color[0].flags = DoRed | DoGreen | DoBlue;
     for (i = 0; i < 65; i++)
     {
         color[i].pixel = cells[i];
         color[i].red -= 971.984375;
         color[i].green -= 0.140625;
         color[i].blue -= 130.484375;
         color[i].flags = DoRed | DoGreen | DoBlue;

     }
     ...
     ...
     ...
     color[193].red = 2047; color[193].green = 65535; color[193].blue = 17477;
     color[193].flags = DoRed | DoGreen | DoBlue;
     for (i = 193; i < 256; i++)
     {
        color[i].pixel = cells[i];
        color[i].red -=  31.984375;
        color[i].green -= 1023.9844;
        color[i].blue -= 273.078125;
        color[i].flags = DoRed | DoGreen | DoBlue;
      }
      XStoreColors(mydisplay, colormap1, color, 256);*/
      XSetWindowColormap(mydisplay, mywindow, colormap1);
      XFree(visualList);
  }
  else
     printf("Warnning: Couldn't allocate color cells\n");
  ...
  ...
  ..
  /* test what's the color looking */.
  for (i = 0; i < 256; i++)
  {
      XSetForeground(mydisplay, mygc, color[i].pixel);
      for (k = 0; k < 3; k++)
          for (j = 0; j < 256; j++)
              XDrawPoint(mydisplay, mywindow, mygc, m+k, j);
      m += 3;
  }