/*-------------------------------------------------------------------------
Return an array of XColor that define the colormap for the given
window. This only works for PseudoColor visuals..
---------------------------------------------------------------------------*/
void xxx_get_colormap( Display * display , Window w , XColor ** xcar , int * ncar )
{
Status sss ;
XWindowAttributes xwat ;
XColor * xcol ;
VisualID vid ;
XVisualInfo vinfo , * vin ;
int count , ii ;
sss = XGetWindowAttributes( display , w , &xwat ) ;
if( sss == 0 ){ *xcar = NULL ; *ncar = 0 ; return ; }
vinfo.visualid = vid = XVisualIDFromVisual(xwat.visual) ;
vin = XGetVisualInfo( display , VisualIDMask , &vinfo , &count ) ;
if( count == 0 || vin == NULL ){ *xcar = NULL ; *ncar = 0 ; return ; }
#if defined(__cplusplus) || defined(c_plusplus)
if( vin->c_class != PseudoColor ){ XFree(vin) ; *xcar = NULL ; *ncar = 0 ; return ; }
#else
if( vin->class != PseudoColor ){ XFree(vin) ; *xcar = NULL ; *ncar = 0 ; return ; }
#endif
count = vin->colormap_size ;
xcol = (XColor *) malloc( sizefo(XColor) * count ) ;
for( ii=0 ; ii < count ; ii++ ) xcol[ii].pixel = (Pixel) ii ;
XQueryColors( display , xwat.colormap , xcol , count ) ;
fprintf(stderr,"xxx_get_colormap: found %d colors:\n",count) ;
for( ii=0 ; ii < count ; ii++ )
fprintf(stderr," %3d: r = %x g = %x b = %x\n" ,
ii , (int)xcol[ii].red , (int)xcol[ii].green , (int)xcol[ii].blue ) ;
*xcar = xcol ; *ncar = count ; XFree(vin) ; return ;
}
syntax highlighted by Code2HTML, v. 0.9.1