From b1fa9f3841c62e37547b0b807bc25cf1a57a8615 Mon Sep 17 00:00:00 2001 From: kgv Date: Thu, 7 Mar 2013 13:30:09 +0400 Subject: [PATCH] 0023792: 3D viewer window content is blended with Linux desktop Eliminate tabulation symbols Prefer 24-bit visual over 32-bit --- src/Xw/Xw_def_colormap.cxx | 2222 ++++++++++++++++-------------------- 1 file changed, 1011 insertions(+), 1211 deletions(-) diff --git a/src/Xw/Xw_def_colormap.cxx b/src/Xw/Xw_def_colormap.cxx index d5ae96a9a3..64a3970d6e 100755 --- a/src/Xw/Xw_def_colormap.cxx +++ b/src/Xw/Xw_def_colormap.cxx @@ -16,113 +16,73 @@ // and conditions governing the rights and limitations under the License. #ifdef HAVE_CONFIG_H -# include + #include #endif -#define CTS17988 /*GG_240697 -// Ne pas chercher a ajuster la profondeur du visual -// recherche en TrueColor par rapport aux MultiBuffers disponibles -*/ - -#define GG250997 /* -// Pour le 2D et plans overlay prendre de -// preference une colormap existante afin -// d'eviter des pb d'installation sur la nouvelle -// colormap. -*/ - -#define TEST /*051297 -// Ameliorer la recuperation de la colormap OVERLAY lorsque -// celle ci est invalide voir ligne 925-928 -*/ - -#define PURIFY /*GG+STT 110199 -// Avoid memory leak -*/ - -#define IMP040100 /*GG_040100 Overlay planes are not usable -// when the alone installed colormap is used -// by the default root visual. -*/ - #include -#ifdef HAVE_CONFIG_H -# include -#endif -#if (!defined (CTS17988)) && defined(HAVE_X11_EXTENSIONS_MULTIBUF_H) -# include -#endif - #include - /* ifdef then trace on */ -#ifdef TRACE -#define TRACE_DEF_COLORMAP -#define TRACE_CLOSE_COLORMAP -#define TRACE_SET_COLORMAP_MAPPING -#endif - /* XW_EXT_COLORMAP* Xw_def_colormap(adisplay,pclass,ncolor,basemap,mapping): XW_EXT_DISPLAY *adisplay Extended Display structure - Xw_TypeOfVisual pclass Visual Class,must be one of : + Xw_TypeOfVisual pclass Visual Class,must be one of : - Xw_TOV_STATICGRAY, - Xw_TOV_GRAYSCALE, - Xw_TOV_STATICCOLOR, - Xw_TOV_PSEUDOCOLOR, - Xw_TOV_TRUECOLOR, - Xw_TOV_DIRECTCOLOR, - Xw_TOV_DEFAULT, - Xw_TOV_PREFERRED_PSEUDOCOLOR, - Xw_TOV_PREFERRED_TRUECOLOR, - Xw_TOV_PREFERRED_OVERLAY, - Xw_TOV_OVERLAY + Xw_TOV_STATICGRAY, + Xw_TOV_GRAYSCALE, + Xw_TOV_STATICCOLOR, + Xw_TOV_PSEUDOCOLOR, + Xw_TOV_TRUECOLOR, + Xw_TOV_DIRECTCOLOR, + Xw_TOV_DEFAULT, + Xw_TOV_PREFERRED_PSEUDOCOLOR, + Xw_TOV_PREFERRED_TRUECOLOR, + Xw_TOV_PREFERRED_OVERLAY, + Xw_TOV_OVERLAY - int ncolor Maximum Number of color to be allocated - Aspect_Handle basemap User Colormap (Can be NULL) - Xw_TypeOfMapping Colormap mapping ,must be ONE of + int ncolor Maximum Number of color to be allocated + Aspect_Handle basemap User Colormap (Can be NULL) + Xw_TypeOfMapping Colormap mapping ,must be ONE of - XW_TOM_HARDRAMP, - XW_TOM_SIMPLERAMP, - XW_TOM_BESTRAMP, - XW_TOM_COLORCUBE, - XW_TOM_READONLY + XW_TOM_HARDRAMP, + XW_TOM_SIMPLERAMP, + XW_TOM_BESTRAMP, + XW_TOM_COLORCUBE, + XW_TOM_READONLY - Create a colormap extension with a colormap ID - compatible with the visual class required + Create a colormap extension with a colormap ID + compatible with the visual class required allocate the max color cells in the colormap as if possible - depending of the actual Standard Colormap size. - NOTE than the resulting color number must be less than - the required color number depending of the System color number used . - See Xw_get_colormap_info for more Informations + depending of the actual Standard Colormap size. + NOTE than the resulting color number must be less than + the required color number depending of the System color number used . + See Xw_get_colormap_info for more Informations - NOTE than if ncolor <= 0 this allocates the Maximum color - number in the colormap . + NOTE than if ncolor <= 0 this allocates the Maximum color + number in the colormap . - Returns Colormap extension address if successuful - Returns NULL if Bad Allocation - or BadVisual class - or Bad resulting Color Number + Returns Colormap extension address if successuful + Returns NULL if Bad Allocation + or BadVisual class + or Bad resulting Color Number STATUS Xw_close_colormap(acolormap): - XW_EXT_COLORMAP* acolormap Extended Colormap address + XW_EXT_COLORMAP* acolormap Extended Colormap address - Destroy The specified Extended Colormap + Destroy The specified Extended Colormap - Returns SUCCESS if successuful - Returns ERROR if Bad Extended Colormap + Returns SUCCESS if successuful + Returns ERROR if Bad Extended Colormap STATUS Xw_set_colormap_mapping(acolormap,mode) - XW_EXT_COLORMAP* acolormap Extended Colormap address + XW_EXT_COLORMAP* acolormap Extended Colormap address Xw_TypeOfMapping mode - Update the specified ColorMap in the requested Color Mapping + Update the specified ColorMap in the requested Color Mapping - Returns SUCCESS if successuful - Returns ERROR if Bad Extended Colormap + Returns SUCCESS if successuful + Returns ERROR if Bad Extended Colormap */ #define MAXGRAY 13 @@ -135,22 +95,13 @@ static int TrueColorMinDepth = 12 ; static int OverlayColorMinDepth = 4 ; static int MaxGray = MAXGRAY ; static int MaxColorCube = MAXCOLORCUBE ; -static int EnableSunOverlay = False; +static int EnableSunOverlay = False; static char svalue[80] ; -static Atom DefaultAtom = 0 ; +static Atom DefaultAtom = 0 ; static const char *XW_RGB_BEST_MAP = "Xw_RGB_BEST_MAP" ; -#ifdef XW_PROTOTYPE void* Xw_def_colormap (void* adisplay,Xw_TypeOfVisual pclass, - int ncolor,Aspect_Handle basemap,Xw_TypeOfMapping mapping) -#else -void* Xw_def_colormap (adisplay,pclass,ncolor,basemap,mapping) -void *adisplay ; -Xw_TypeOfVisual pclass ; -int ncolor ; -Aspect_Handle basemap ; -Xw_TypeOfMapping mapping ; -#endif /*XW_PROTOTYPE*/ + int ncolor,Aspect_Handle basemap,Xw_TypeOfMapping mapping) { XW_EXT_DISPLAY *pdisplay = (XW_EXT_DISPLAY*)adisplay ; XW_EXT_COLORMAP *pcolormap = NULL ; @@ -165,59 +116,59 @@ unsigned long backpixel = 0; } if( Xw_get_env("Xw_USE_DEFAULTS",svalue,sizeof(svalue)) ){ - if( strlen(svalue) ) { - UseDefaults = svalue[0] ; - } - printf( " Xw_USE_DEFAULTS is '%c'\n",UseDefaults) ; + if( strlen(svalue) ) { + UseDefaults = svalue[0] ; + } + printf( " Xw_USE_DEFAULTS is '%c'\n",UseDefaults) ; } if( Xw_get_env("Xw_SET_COLOR_CUBE",svalue,sizeof(svalue)) ){ - if( strlen(svalue) ) { - SetColorCube = svalue[0] ; - } - printf( " Xw_SET_COLOR_CUBE is '%c'\n",SetColorCube) ; + if( strlen(svalue) ) { + SetColorCube = svalue[0] ; + } + printf( " Xw_SET_COLOR_CUBE is '%c'\n",SetColorCube) ; } if( Xw_get_env("Xw_MIN_COLORS",svalue,sizeof(svalue)) ){ - if( strlen(svalue) ) { - sscanf(svalue,"%d",&MinColors) ; - } - printf( " Xw_MIN_COLORS is %d\n",MinColors) ; + if( strlen(svalue) ) { + sscanf(svalue,"%d",&MinColors) ; + } + printf( " Xw_MIN_COLORS is %d\n",MinColors) ; } if( Xw_get_env("Xw_FRE_COLORS",svalue,sizeof(svalue)) ){ - if( strlen(svalue) ) { - sscanf(svalue,"%d",&FreColors) ; - } - printf( " Xw_FRE_COLORS is %d\n",FreColors) ; + if( strlen(svalue) ) { + sscanf(svalue,"%d",&FreColors) ; + } + printf( " Xw_FRE_COLORS is %d\n",FreColors) ; } if( pdisplay->server == XW_SERVER_IS_HP ) TrueColorMinDepth = 8; if( Xw_get_env("Xw_SET_TRUE_COLOR_MIN_DEPTH",svalue,sizeof(svalue)) ){ - if( strlen(svalue) ) { - sscanf(svalue,"%d",&TrueColorMinDepth) ; - } - printf( " Xw_SET_TRUE_COLOR_MIN_DEPTH is %d\n",TrueColorMinDepth) ; + if( strlen(svalue) ) { + sscanf(svalue,"%d",&TrueColorMinDepth) ; + } + printf( " Xw_SET_TRUE_COLOR_MIN_DEPTH is %d\n",TrueColorMinDepth) ; } if( Xw_get_env("Xw_SET_OVERLAY_COLOR_MIN_DEPTH",svalue,sizeof(svalue)) ){ - if( strlen(svalue) ) { - sscanf(svalue,"%d",&OverlayColorMinDepth) ; - } - printf( " Xw_SET_OVERLAY_COLOR_MIN_DEPTH is %d\n",OverlayColorMinDepth) ; + if( strlen(svalue) ) { + sscanf(svalue,"%d",&OverlayColorMinDepth) ; + } + printf( " Xw_SET_OVERLAY_COLOR_MIN_DEPTH is %d\n",OverlayColorMinDepth) ; } if( Xw_get_env("Xw_MAX_GRAY",svalue,sizeof(svalue)) ){ - if( strlen(svalue) ) { - sscanf(svalue,"%d",&MaxGray) ; - } - printf( " Xw_MAX_GRAY is %d\n",MaxGray) ; + if( strlen(svalue) ) { + sscanf(svalue,"%d",&MaxGray) ; + } + printf( " Xw_MAX_GRAY is %d\n",MaxGray) ; } if( Xw_get_env("Xw_MAX_COLORCUBE",svalue,sizeof(svalue)) ){ - if( strlen(svalue) ) { - sscanf(svalue,"%d",&MaxColorCube) ; - } - printf( " Xw_MAX_COLORCUBE is %d\n",MaxColorCube) ; + if( strlen(svalue) ) { + sscanf(svalue,"%d",&MaxColorCube) ; + } + printf( " Xw_MAX_COLORCUBE is %d\n",MaxColorCube) ; } if( Xw_get_env("Xw_ENABLE_SUNOVERLAY",svalue,sizeof(svalue)) ){ - if( svalue[0] == 'Y' ) EnableSunOverlay = True; - else EnableSunOverlay = False; + if( svalue[0] == 'Y' ) EnableSunOverlay = True; + else EnableSunOverlay = False; - printf( " Xw_ENABLE_SUNOVERLAY is %d\n",EnableSunOverlay) ; + printf( " Xw_ENABLE_SUNOVERLAY is %d\n",EnableSunOverlay) ; } if( UseDefaults == 'P' ) pclass = Xw_TOV_PREFERRED_PSEUDOCOLOR ; @@ -228,11 +179,11 @@ unsigned long backpixel = 0; if( pclass == Xw_TOV_OVERLAY ) { ginfo = Xw_get_overlay_visual_info(pdisplay, - Xw_TOV_PSEUDOCOLOR,&backpixel) ; + Xw_TOV_PSEUDOCOLOR,&backpixel) ; if( !ginfo ) return (NULL) ; } else if( pclass == Xw_TOV_PREFERRED_OVERLAY ) { ginfo = Xw_get_overlay_visual_info(pdisplay, - Xw_TOV_PSEUDOCOLOR,&backpixel) ; + Xw_TOV_PSEUDOCOLOR,&backpixel) ; if( !ginfo ) pclass = Xw_TOV_PREFERRED_PSEUDOCOLOR; } @@ -242,8 +193,8 @@ unsigned long backpixel = 0; if( !ginfo ) return (NULL) ; - if( !(pcolormap = Xw_add_colormap_structure(sizeof(XW_EXT_COLORMAP))) ) - return (NULL) ; + if( !(pcolormap = Xw_add_colormap_structure(sizeof(XW_EXT_COLORMAP))) ) + return (NULL) ; pcolormap->connexion = pdisplay ; pcolormap->visual = ginfo->visual ; pcolormap->backpixel = backpixel ; @@ -256,315 +207,282 @@ RESTART : } else { cclass = _CCLASS; } - + switch ( cclass ) { - case TrueColor : - acolor = MAXCOLOR ; - pcolormap->maxucolor = acolor ; - pcolormap->maxhcolor = _CVISUAL->map_entries * - _CVISUAL->map_entries * - _CVISUAL->map_entries ; - pcolormap->info.base_pixel = 0 ; + case TrueColor : + acolor = MAXCOLOR ; + pcolormap->maxucolor = acolor ; + pcolormap->maxhcolor = _CVISUAL->map_entries * + _CVISUAL->map_entries * + _CVISUAL->map_entries ; + pcolormap->info.base_pixel = 0 ; if( (_DCLASS == TrueColor) && (UseDefaults == 'Y' || UseDefaults == 'P') ) { basemap = _CCOLORMAP ; } else if( UseDefaults == 'N' ) { basemap = 0 ; - } + } - if( basemap ) { - _CINFO.colormap = basemap ; - } + if( basemap ) { + _CINFO.colormap = basemap ; + } - _CINFO.killid = 0 ; - _CINFO.visualid = _CVISUAL->visualid ; - if( !_CINFO.colormap ) { - _CINFO.killid = getpid(); - _CINFO.colormap = XCreateColormap(_CDISPLAY,_CROOT, - _CVISUAL,AllocNone) ; - } - break ; + _CINFO.killid = 0 ; + _CINFO.visualid = _CVISUAL->visualid ; + if( !_CINFO.colormap ) { + _CINFO.killid = getpid(); + _CINFO.colormap = XCreateColormap(_CDISPLAY,_CROOT, + _CVISUAL,AllocNone) ; + } + break ; - case PseudoColor : - { - unsigned long stdpixels[MAXCOLOR] ; - unsigned long usrpixels[MAXCOLOR] ; + case PseudoColor : + { + unsigned long stdpixels[MAXCOLOR] ; + unsigned long usrpixels[MAXCOLOR] ; - if( ncolor ) { - acolor = ncolor+1 ; - } else { - acolor = MAXCOLOR ; - } - mcolor = 0 ; - fcolor = 0 ; + if( ncolor ) { + acolor = ncolor+1 ; + } else { + acolor = MAXCOLOR ; + } + mcolor = 0 ; + fcolor = 0 ; - acolor = min(_CVISUAL->map_entries,acolor); - pcolormap->maxhcolor = min(_CVISUAL->map_entries,MAXCOLOR) ; + acolor = min(_CVISUAL->map_entries,acolor); + pcolormap->maxhcolor = min(_CVISUAL->map_entries,MAXCOLOR) ; - _CINFO.colormap = 0 ; - _CINFO.base_pixel = 0 ; - _CINFO.red_max = _CINFO.green_max = _CINFO.blue_max = 0 ; - _CINFO.killid = 1 ; - _CINFO.visualid = _CVISUAL->visualid ; + _CINFO.colormap = 0 ; + _CINFO.base_pixel = 0 ; + _CINFO.red_max = _CINFO.green_max = _CINFO.blue_max = 0 ; + _CINFO.killid = 1 ; + _CINFO.visualid = _CVISUAL->visualid ; if( (_DCLASS == PseudoColor) && (UseDefaults == 'Y' || UseDefaults == 'P') ) { basemap = _CCOLORMAP ; } else if( UseDefaults == 'N' ) { basemap = 0 ; - } + } - if( basemap ) { - _CINFO.colormap = basemap ; - } + if( basemap ) { + _CINFO.colormap = basemap ; + } - if( !_CINFO.colormap ) { /* Create colormap */ - _CINFO.colormap = XCreateColormap(_CDISPLAY,_CROOT, - _CVISUAL,AllocNone) ; - usrpixels[0] = 0 ; - if( !_CINFO.colormap ) { - /*ERROR*Colormap creation failed*/ - Xw_set_error(2,"Xw_def_colormap",NULL) ; - Xw_del_colormap_structure(pcolormap) ; - return (NULL) ; - } - } - /* Allocate colors */ - usrpixels[0] = 0; - while ( acolor && !XAllocColorCells(_CDISPLAY, - _CINFO.colormap,True,NULL,0,usrpixels,acolor) ) { - --acolor ; - } - /* Verify if COLORS are Contigues */ - for( i=j=1,n=b=d=0 ; i n ) { /* Take the largest hole */ - b = d ; - n = j ; - } - d = i ; - j = 1 ; - } - } - if( j > n ) { - b = d ; - n = j ; - } - /* Verify FREE Space for other applications */ - if( basemap ) { - j = pcolormap->maxhcolor - (usrpixels[n-1]+1) ; - if( b+j < fcolor ) { /* Let Free space as specified */ - j = fcolor - (b+j) ; - b += j ; n -= j ; - } - if( n < mcolor ) { /* Too few Colors */ - XFreeColors(_CDISPLAY,_CINFO.colormap,usrpixels,acolor,0); - basemap = 0 ; - goto RESTART ; - } - } - - if( mapping == Xw_TOM_BESTRAMP ) { - /* Base pixel must be EVEN */ - if( usrpixels[b] & 1 ) { - b++ ; --n ; - } - } + if( !_CINFO.colormap ) { /* Create colormap */ + _CINFO.colormap = XCreateColormap(_CDISPLAY,_CROOT, + _CVISUAL,AllocNone) ; + usrpixels[0] = 0 ; + if( !_CINFO.colormap ) { + /*ERROR*Colormap creation failed*/ + Xw_set_error(2,"Xw_def_colormap",NULL) ; + Xw_del_colormap_structure(pcolormap) ; + return (NULL) ; + } + } + /* Allocate colors */ + usrpixels[0] = 0; + while ( acolor && !XAllocColorCells(_CDISPLAY, + _CINFO.colormap,True,NULL,0,usrpixels,acolor) ) { + --acolor ; + } + /* Verify if COLORS are Contigues */ + for( i=j=1,n=b=d=0 ; i n ) { /* Take the largest hole */ + b = d ; + n = j ; + } + d = i ; + j = 1 ; + } + } + if( j > n ) { + b = d ; + n = j ; + } + /* Verify FREE Space for other applications */ + if( basemap ) { + j = pcolormap->maxhcolor - (usrpixels[n-1]+1) ; + if( b+j < fcolor ) { /* Let Free space as specified */ + j = fcolor - (b+j) ; + b += j ; n -= j ; + } + if( n < mcolor ) { /* Too few Colors */ + XFreeColors(_CDISPLAY,_CINFO.colormap,usrpixels,acolor,0); + basemap = 0 ; + goto RESTART ; + } + } - if( n < acolor ) { - /* Allocate ONLY %d contiguous colors */ - if( b ) { - XFreeColors(_CDISPLAY,_CINFO.colormap,usrpixels,b,0) ; - } - if( b+n < acolor ) { - XFreeColors(_CDISPLAY,_CINFO.colormap, - &usrpixels[b+n],acolor-b-n,0) ; - } - for( i=0 ; imaxucolor = acolor ; + if( n < acolor ) { + /* Allocate ONLY %d contiguous colors */ + if( b ) { + XFreeColors(_CDISPLAY,_CINFO.colormap,usrpixels,b,0) ; + } + if( b+n < acolor ) { + XFreeColors(_CDISPLAY,_CINFO.colormap, + &usrpixels[b+n],acolor-b-n,0) ; + } + for( i=0 ; imaxhcolor ; - XColor color ; + _CINFO.base_pixel = usrpixels[0] ; + pcolormap->maxucolor = acolor ; - color.flags = DoRed | DoGreen | DoBlue ; - while ( scolor && !XAllocColorCells(_CDISPLAY, - _CCOLORMAP,True,NULL,0,stdpixels,scolor) ) --scolor ; + if( (_CINFO.colormap != _CCOLORMAP) && + ((MinCmapsOfScreen(_CSCREEN) < 1) || + (MaxCmapsOfScreen(_CSCREEN) == 1)) ) { + /* Get the First usable color in DEFAULT colormap */ + int scolor = pcolormap->maxhcolor ; + XColor color ; - XFreeColors(_CDISPLAY,_CCOLORMAP,stdpixels,scolor,0) ; + color.flags = DoRed | DoGreen | DoBlue ; + while ( scolor && !XAllocColorCells(_CDISPLAY, + _CCOLORMAP,True,NULL,0,stdpixels,scolor) ) --scolor ; - for( i=0 ; imaxhcolor ; i++ ) { - color.pixel = _CINFO.base_pixel + i ; - XQueryColor(_CDISPLAY,_CCOLORMAP,&color) ; - XStoreColor(_CDISPLAY,_CINFO.colormap,&color) ; - } + XFreeColors(_CDISPLAY,_CCOLORMAP,stdpixels,scolor,0) ; - if( scolor >= mcolor ) { - pcolormap->maxucolor = scolor ; - _CINFO.base_pixel = stdpixels[0] ; - } - - } - acolor = pcolormap->maxucolor ; - } - break ; + for( i=0 ; imaxhcolor ; i++ ) { + color.pixel = _CINFO.base_pixel + i ; + XQueryColor(_CDISPLAY,_CCOLORMAP,&color) ; + XStoreColor(_CDISPLAY,_CINFO.colormap,&color) ; + } - case StaticColor : - { -// unsigned long usrpixel ; + if( scolor >= mcolor ) { + pcolormap->maxucolor = scolor ; + _CINFO.base_pixel = stdpixels[0] ; + } + + } + acolor = pcolormap->maxucolor ; + } + break ; + + case StaticColor : + { +// unsigned long usrpixel ; if( (_DCLASS == PseudoColor) && (_CCLASS == PseudoColor) && (UseDefaults == 'Y' || UseDefaults == 'P') ) { basemap = _CCOLORMAP ; } else if( UseDefaults == 'N' ) { basemap = 0 ; - } - _CINFO.visualid = _CVISUAL->visualid ; - _CINFO.red_max = _CINFO.green_max = _CINFO.blue_max = 0 ; - _CINFO.red_mult = _CINFO.green_mult = _CINFO.blue_mult = 0 ; - _CINFO.killid = 0 ; - if( basemap ) { - _CINFO.colormap = basemap ; - } + } + _CINFO.visualid = _CVISUAL->visualid ; + _CINFO.red_max = _CINFO.green_max = _CINFO.blue_max = 0 ; + _CINFO.red_mult = _CINFO.green_mult = _CINFO.blue_mult = 0 ; + _CINFO.killid = 0 ; + if( basemap ) { + _CINFO.colormap = basemap ; + } - if( !_CINFO.colormap ) { /* Create colormap */ - _CINFO.colormap = XCreateColormap(_CDISPLAY,_CROOT, - _CVISUAL,AllocNone) ; - if( !_CINFO.colormap ) { - /*ERROR*Colormap creation failed*/ - Xw_set_error(2,"Xw_def_colormap",NULL) ; - Xw_del_colormap_structure(pcolormap) ; - return (NULL) ; - } - } - _CINFO.base_pixel = 0 ; - acolor = (ncolor > 0) ? ncolor : MAXCOLOR ; - if( _CCLASS != TrueColor ) { - pcolormap->maxhcolor = min(_CVISUAL->map_entries,MAXCOLOR) ; - } else { - pcolormap->maxhcolor = _CVISUAL->map_entries * - _CVISUAL->map_entries * - _CVISUAL->map_entries ; - } - pcolormap->maxucolor = min(acolor,pcolormap->maxhcolor); - } - break ; + if( !_CINFO.colormap ) { /* Create colormap */ + _CINFO.colormap = XCreateColormap(_CDISPLAY,_CROOT, + _CVISUAL,AllocNone) ; + if( !_CINFO.colormap ) { + /*ERROR*Colormap creation failed*/ + Xw_set_error(2,"Xw_def_colormap",NULL) ; + Xw_del_colormap_structure(pcolormap) ; + return (NULL) ; + } + } + _CINFO.base_pixel = 0 ; + acolor = (ncolor > 0) ? ncolor : MAXCOLOR ; + if( _CCLASS != TrueColor ) { + pcolormap->maxhcolor = min(_CVISUAL->map_entries,MAXCOLOR) ; + } else { + pcolormap->maxhcolor = _CVISUAL->map_entries * + _CVISUAL->map_entries * + _CVISUAL->map_entries ; + } + pcolormap->maxucolor = min(acolor,pcolormap->maxhcolor); + } + break ; - case StaticGray : - case GrayScale : - case DirectColor : - /*ERROR*Unimplemented Visual class*/ - Xw_set_error(5,"Xw_def_colormap",&pclass) ; - return (NULL) ; + case StaticGray : + case GrayScale : + case DirectColor : + /*ERROR*Unimplemented Visual class*/ + Xw_set_error(5,"Xw_def_colormap",&pclass) ; + return (NULL) ; } Xw_set_colormap_mapping(pcolormap,mapping) ; Xw_def_highlight_color(pcolormap,1.,1.,1.) ; -#ifdef TRACE_DEF_COLORMAP -if( Xw_get_trace() ) { - printf(" %lx = Xw_def_colormap(%lx,%d,%d)\n", - (long ) pcolormap,(long ) adisplay,pclass,acolor) ; -} -#endif - return (pcolormap); } static XW_EXT_COLORMAP *PcolormapList =NULL ; -#ifdef XW_PROTOTYPE +//! Create and Insert one Extended colormap structure in the +//! EXtended colormap List +//! returns Extended colormap address if successful +//! or NULL if Bad Allocation XW_EXT_COLORMAP* Xw_add_colormap_structure(int size) -#else -XW_EXT_COLORMAP* Xw_add_colormap_structure(size) -int size ; -#endif /*XW_PROTOTYPE*/ -/* - Create and Insert one Extended colormap structure in the - EXtended colormap List - - returns Extended colormap address if successful - or NULL if Bad Allocation -*/ { XW_EXT_COLORMAP *pcolormap = (XW_EXT_COLORMAP*) Xw_malloc(size) ; //int i ; if( pcolormap ) { - pcolormap->type = COLORMAP_TYPE ; + pcolormap->type = COLORMAP_TYPE ; pcolormap->link = PcolormapList ; PcolormapList = pcolormap ; - pcolormap->connexion = NULL ; - pcolormap->visual = NULL ; - pcolormap->maxcolor = 0 ; - pcolormap->maxhcolor = 0 ; - pcolormap->maxucolor = 0 ; - pcolormap->maxwindow = 0 ; - pcolormap->mapping = (Xw_TypeOfMapping)-1 ; - pcolormap->highpixel = 0 ; - pcolormap->backpixel = 0 ; - pcolormap->info.base_pixel = 0 ; - pcolormap->info.red_max = 0 ; - pcolormap->info.red_mult = 0 ; - pcolormap->info.green_max = 0 ; - pcolormap->info.green_mult = 0 ; - pcolormap->info.blue_max = 0 ; - pcolormap->info.blue_mult = 0 ; - pcolormap->info.colormap = 0 ; - pcolormap->ginfo.base_pixel = 0 ; - pcolormap->ginfo.red_max = 0 ; - pcolormap->ginfo.red_mult = 0 ; - pcolormap->ginfo.green_max = 0 ; - pcolormap->ginfo.green_mult = 0 ; - pcolormap->ginfo.blue_max = 0 ; - pcolormap->ginfo.blue_mult = 0 ; - pcolormap->ginfo.colormap = 0 ; + pcolormap->connexion = NULL ; + pcolormap->visual = NULL ; + pcolormap->maxcolor = 0 ; + pcolormap->maxhcolor = 0 ; + pcolormap->maxucolor = 0 ; + pcolormap->maxwindow = 0 ; + pcolormap->mapping = (Xw_TypeOfMapping)-1 ; + pcolormap->highpixel = 0 ; + pcolormap->backpixel = 0 ; + pcolormap->info.base_pixel = 0 ; + pcolormap->info.red_max = 0 ; + pcolormap->info.red_mult = 0 ; + pcolormap->info.green_max = 0 ; + pcolormap->info.green_mult = 0 ; + pcolormap->info.blue_max = 0 ; + pcolormap->info.blue_mult = 0 ; + pcolormap->info.colormap = 0 ; + pcolormap->ginfo.base_pixel = 0 ; + pcolormap->ginfo.red_max = 0 ; + pcolormap->ginfo.red_mult = 0 ; + pcolormap->ginfo.green_max = 0 ; + pcolormap->ginfo.green_mult = 0 ; + pcolormap->ginfo.blue_max = 0 ; + pcolormap->ginfo.blue_mult = 0 ; + pcolormap->ginfo.colormap = 0 ; } else { - /*ERROR*EXT_COLORMAP allocation failed*/ - Xw_set_error(6,"Xw_add_colormap_structure",NULL) ; + /*ERROR*EXT_COLORMAP allocation failed*/ + Xw_set_error(6,"Xw_add_colormap_structure",NULL) ; } return (pcolormap) ; } -#ifdef XW_PROTOTYPE +//! Get the NEXT ColorMap structure from the List +//! returns Extended colormap address if successful +//! or NULL if No MORE Colormap is found XW_EXT_COLORMAP* Xw_get_colormap_structure(XW_EXT_COLORMAP* pcolormap) -#else -XW_EXT_COLORMAP* Xw_get_colormap_structure(pcolormap) -XW_EXT_COLORMAP *pcolormap ; -#endif /*XW_PROTOTYPE*/ -/* - Get the NEXT ColorMap structure from the List - - returns Extended colormap address if successful - or NULL if No MORE Colormap is found -*/ { - if( pcolormap ) return (XW_EXT_COLORMAP*)pcolormap->link ; - else return (PcolormapList) ; + if( pcolormap ) return (XW_EXT_COLORMAP*)pcolormap->link ; + else return (PcolormapList) ; } -#ifdef XW_PROTOTYPE XW_STATUS Xw_close_colormap(void* acolormap) -#else -XW_STATUS Xw_close_colormap(acolormap) -void *acolormap; -#endif /*XW_PROTOTYPE*/ { XW_EXT_COLORMAP *pcolormap = (XW_EXT_COLORMAP*)acolormap ; XW_STATUS status ; @@ -577,28 +495,14 @@ XW_STATUS status ; status = Xw_del_colormap_structure(pcolormap) ; -#ifdef TRACE_CLOSE_COLORMAP -if( Xw_get_trace() ) { - printf(" %d = Xw_close_colormap(%lx)\n",status,(long ) pcolormap) ; -} -#endif - return (status) ; } -#ifdef XW_PROTOTYPE +//! Remove the Extended colormap address from the Extended List and +//! Free the Extended Colormap +//! returns ERROR if the colormap address is not Found in the list +//! returns SUCCESS if successful XW_STATUS Xw_del_colormap_structure(XW_EXT_COLORMAP* pcolormap) -#else -XW_STATUS Xw_del_colormap_structure(pcolormap) -XW_EXT_COLORMAP *pcolormap; -#endif /*XW_PROTOTYPE*/ -/* - Remove the Extended colormap address from the Extended List and - Free the Extended Colormap - - returns ERROR if the colormap address is not Found in the list - returns SUCCESS if successful -*/ { XW_EXT_COLORMAP *fcolormap; //int i ; @@ -608,28 +512,28 @@ XW_EXT_COLORMAP *fcolormap; if( pcolormap->maxwindow ) { return (XW_ERROR) ; } else { - if( (_CINFO.killid == (unsigned int ) getpid()) && _CINFO.colormap ) { - if( _CINFO.colormap != _CCOLORMAP ) { + if( (_CINFO.killid == (unsigned int ) getpid()) && _CINFO.colormap ) { + if( _CINFO.colormap != _CCOLORMAP ) { XFreeColormap(_CDISPLAY,_CINFO.colormap) ; - for( fcolormap = PcolormapList ; fcolormap ; - fcolormap = (XW_EXT_COLORMAP*)fcolormap->link ) { - if( (fcolormap != pcolormap) && - (fcolormap->info.colormap == _CINFO.colormap) ) { - fcolormap->info.colormap = 0 ; - } + for( fcolormap = PcolormapList ; fcolormap ; + fcolormap = (XW_EXT_COLORMAP*)fcolormap->link ) { + if( (fcolormap != pcolormap) && + (fcolormap->info.colormap == _CINFO.colormap) ) { + fcolormap->info.colormap = 0 ; + } } - _CINFO.colormap = 0; - } - DefaultAtom = XInternAtom(_CDISPLAY,XW_RGB_BEST_MAP,True) ; - if( DefaultAtom ) { - XDeleteProperty(_CDISPLAY,_CROOT,DefaultAtom); - } - } + _CINFO.colormap = 0; + } + DefaultAtom = XInternAtom(_CDISPLAY,XW_RGB_BEST_MAP,True) ; + if( DefaultAtom ) { + XDeleteProperty(_CDISPLAY,_CROOT,DefaultAtom); + } + } if( pcolormap == PcolormapList ) { PcolormapList = (XW_EXT_COLORMAP*)pcolormap->link ; } else { - for( fcolormap = PcolormapList ; fcolormap ; - fcolormap = (XW_EXT_COLORMAP*)fcolormap->link ) { + for( fcolormap = PcolormapList ; fcolormap ; + fcolormap = (XW_EXT_COLORMAP*)fcolormap->link ) { if( fcolormap->link == pcolormap ) { fcolormap->link = pcolormap->link ; break ; @@ -641,27 +545,18 @@ XW_EXT_COLORMAP *fcolormap; return (XW_SUCCESS) ; } -#ifdef XW_PROTOTYPE +//! Set MAPPING Colormap mode +//! if mapping is SIMPLERAMP all color cells access is done +//! across the PIXEL index array . +//! if mapping is BESTRAMP all color cells access is done +//! across the PIXEL index array and an HIGHLIGHT plane is created . +//! if mapping is HARDRAMP all color cells access is done +//! directly (Make becarefull !!) +//! if mapping is COLORCUBE all color cells access is done +//! across a ColorCube PIXEL index array . +//! if mapping is READONLY all color cells access is done +//! across a readonly PIXEL index array without color allocation. XW_STATUS Xw_set_colormap_mapping(void* acolormap,Xw_TypeOfMapping mode) -#else -XW_STATUS Xw_set_colormap_mapping(acolormap,mode) -void *acolormap ; -Xw_TypeOfMapping mode ; -#endif /*XW_PROTOTYPE*/ -/* - Set MAPPING Colormap mode - - if mapping is SIMPLERAMP all color cells access is done - across the PIXEL index array . - if mapping is BESTRAMP all color cells access is done - across the PIXEL index array and an HIGHLIGHT plane is created . - if mapping is HARDRAMP all color cells access is done - directly (Make becarefull !!) - if mapping is COLORCUBE all color cells access is done - across a ColorCube PIXEL index array . - if mapping is READONLY all color cells access is done - across a readonly PIXEL index array without color allocation. -*/ { XW_EXT_COLORMAP *pcolormap = (XW_EXT_COLORMAP*)acolormap ; int status,cstatus,gstatus ; @@ -688,296 +583,293 @@ int nmap; case Xw_TOV_TRUECOLOR : switch (mode) { - case Xw_TOM_SIMPLERAMP : - case Xw_TOM_READONLY : - pcolormap->maxcolor = pcolormap->maxucolor ; - pcolormap->highpixel = AllPlanes ; - switch (pcolormap->mapping) { - case Xw_TOM_READONLY : - case Xw_TOM_BESTRAMP : - case Xw_TOM_HARDRAMP : - case Xw_TOM_COLORCUBE : - break ; - default : - for( i=0 ; idefine[i] = FREECOLOR ; - pcolormap->pixels[i] = 0 ; - } - } - break ; - case Xw_TOM_BESTRAMP : - pcolormap->maxcolor = pcolormap->maxucolor ; - pcolormap->highpixel = AllPlanes ; - switch (pcolormap->mapping) { - case Xw_TOM_READONLY : - case Xw_TOM_SIMPLERAMP : - case Xw_TOM_HARDRAMP : - case Xw_TOM_COLORCUBE : - break ; - default : - for( i=0 ; idefine[i] = FREECOLOR ; - pcolormap->pixels[i] = 0 ; - } - } - break ; - case Xw_TOM_HARDRAMP : - pcolormap->maxcolor = pcolormap->maxucolor ; - pcolormap->highpixel = AllPlanes ; - switch (pcolormap->mapping) { - case Xw_TOM_READONLY : - case Xw_TOM_SIMPLERAMP : - case Xw_TOM_BESTRAMP : - case Xw_TOM_COLORCUBE : - break ; - default : - for( i=0 ; idefine[i] = FREECOLOR ; - pcolormap->pixels[i] = 0 ; - } - } - break ; - case Xw_TOM_COLORCUBE : - pcolormap->maxcolor = pcolormap->maxucolor ; - pcolormap->highpixel = AllPlanes ; - switch (pcolormap->mapping) { - case Xw_TOM_READONLY : - case Xw_TOM_SIMPLERAMP : - case Xw_TOM_BESTRAMP : - case Xw_TOM_HARDRAMP : - default : - for( i=0 ; idefine[i] = FREECOLOR ; - pcolormap->pixels[i] = 0 ; - } - nccolor = pcolormap->maxhcolor; - if( nccolor > 0 ) { - _CINFO.red_max = _CVISUAL->red_mask; - _CINFO.red_mult = 1; - while ( !(_CINFO.red_max & 0x01) ) { - _CINFO.red_max >>= 1; - _CINFO.red_mult <<= 1; - } - _CINFO.green_max = _CVISUAL->green_mask; - _CINFO.green_mult = 1; - while ( !(_CINFO.green_max & 0x01) ) { - _CINFO.green_max >>= 1; - _CINFO.green_mult <<= 1; - } - _CINFO.blue_max = _CVISUAL->blue_mask; - _CINFO.blue_mult = 1; - while ( !(_CINFO.blue_max & 0x01) ) { - _CINFO.blue_max >>= 1; - _CINFO.blue_mult <<= 1; - } - status = XmuCreateColormap(_CDISPLAY,&_CINFO); - } - ngcolor = _CVISUAL->red_mask + 1; - if( ngcolor > 0 ) { - _CGINFO.colormap = _CINFO.colormap; - _CGINFO.base_pixel = _CINFO.base_pixel; - _CGINFO.visualid = _CINFO.visualid; - _CGINFO.killid = getpid(); - _CGINFO.red_max = _CVISUAL->red_mask; - _CGINFO.red_mult = 1; - while ( !(_CGINFO.red_max & 0x01) ) { - _CGINFO.red_max >>= 1; - _CGINFO.red_mult <<= 1; - } - _CGINFO.green_max = _CVISUAL->green_mask; - _CGINFO.green_mult = 1; - while ( !(_CGINFO.green_max & 0x01) ) { - _CGINFO.green_max >>= 1; - _CGINFO.green_mult <<= 1; - } - _CGINFO.blue_max = _CVISUAL->blue_mask; - _CGINFO.blue_mult = 1; - while ( !(_CGINFO.blue_max & 0x01) ) { - _CGINFO.blue_max >>= 1; - _CGINFO.blue_mult <<= 1; - } - _CGINFO.red_mult |= _CGINFO.green_mult | _CGINFO.blue_mult; + case Xw_TOM_SIMPLERAMP : + case Xw_TOM_READONLY : + pcolormap->maxcolor = pcolormap->maxucolor ; + pcolormap->highpixel = AllPlanes ; + switch (pcolormap->mapping) { + case Xw_TOM_READONLY : + case Xw_TOM_BESTRAMP : + case Xw_TOM_HARDRAMP : + case Xw_TOM_COLORCUBE : + break ; + default : + for( i=0 ; idefine[i] = FREECOLOR ; + pcolormap->pixels[i] = 0 ; + } + } + break ; + case Xw_TOM_BESTRAMP : + pcolormap->maxcolor = pcolormap->maxucolor ; + pcolormap->highpixel = AllPlanes ; + switch (pcolormap->mapping) { + case Xw_TOM_READONLY : + case Xw_TOM_SIMPLERAMP : + case Xw_TOM_HARDRAMP : + case Xw_TOM_COLORCUBE : + break ; + default : + for( i=0 ; idefine[i] = FREECOLOR ; + pcolormap->pixels[i] = 0 ; + } + } + break ; + case Xw_TOM_HARDRAMP : + pcolormap->maxcolor = pcolormap->maxucolor ; + pcolormap->highpixel = AllPlanes ; + switch (pcolormap->mapping) { + case Xw_TOM_READONLY : + case Xw_TOM_SIMPLERAMP : + case Xw_TOM_BESTRAMP : + case Xw_TOM_COLORCUBE : + break ; + default : + for( i=0 ; idefine[i] = FREECOLOR ; + pcolormap->pixels[i] = 0 ; + } + } + break ; + case Xw_TOM_COLORCUBE : + pcolormap->maxcolor = pcolormap->maxucolor ; + pcolormap->highpixel = AllPlanes ; + switch (pcolormap->mapping) { + case Xw_TOM_READONLY : + case Xw_TOM_SIMPLERAMP : + case Xw_TOM_BESTRAMP : + case Xw_TOM_HARDRAMP : + default : + for( i=0 ; idefine[i] = FREECOLOR ; + pcolormap->pixels[i] = 0 ; + } + nccolor = pcolormap->maxhcolor; + if( nccolor > 0 ) { + _CINFO.red_max = _CVISUAL->red_mask; + _CINFO.red_mult = 1; + while ( !(_CINFO.red_max & 0x01) ) { + _CINFO.red_max >>= 1; + _CINFO.red_mult <<= 1; + } + _CINFO.green_max = _CVISUAL->green_mask; + _CINFO.green_mult = 1; + while ( !(_CINFO.green_max & 0x01) ) { + _CINFO.green_max >>= 1; + _CINFO.green_mult <<= 1; + } + _CINFO.blue_max = _CVISUAL->blue_mask; + _CINFO.blue_mult = 1; + while ( !(_CINFO.blue_max & 0x01) ) { + _CINFO.blue_max >>= 1; + _CINFO.blue_mult <<= 1; + } + status = XmuCreateColormap(_CDISPLAY,&_CINFO); + } + ngcolor = _CVISUAL->red_mask + 1; + if( ngcolor > 0 ) { + _CGINFO.colormap = _CINFO.colormap; + _CGINFO.base_pixel = _CINFO.base_pixel; + _CGINFO.visualid = _CINFO.visualid; + _CGINFO.killid = getpid(); + _CGINFO.red_max = _CVISUAL->red_mask; + _CGINFO.red_mult = 1; + while ( !(_CGINFO.red_max & 0x01) ) { + _CGINFO.red_max >>= 1; + _CGINFO.red_mult <<= 1; + } + _CGINFO.green_max = _CVISUAL->green_mask; + _CGINFO.green_mult = 1; + while ( !(_CGINFO.green_max & 0x01) ) { + _CGINFO.green_max >>= 1; + _CGINFO.green_mult <<= 1; + } + _CGINFO.blue_max = _CVISUAL->blue_mask; + _CGINFO.blue_mult = 1; + while ( !(_CGINFO.blue_max & 0x01) ) { + _CGINFO.blue_max >>= 1; + _CGINFO.blue_mult <<= 1; + } + _CGINFO.red_mult |= _CGINFO.green_mult | _CGINFO.blue_mult; _CGINFO.green_max = 0; _CGINFO.green_mult = 1; _CGINFO.blue_max = 0; _CGINFO.blue_mult = 1; - status = XmuCreateColormap(_CDISPLAY,&_CGINFO); - } - } - break ; + status = XmuCreateColormap(_CDISPLAY,&_CGINFO); + } + } + break ; } break ; case Xw_TOV_STATICCOLOR : switch (mode) { - case Xw_TOM_SIMPLERAMP : - case Xw_TOM_READONLY : - pcolormap->maxcolor = pcolormap->maxucolor ; - pcolormap->highpixel = _CINFO.base_pixel+1 ; - switch (pcolormap->mapping) { - case Xw_TOM_READONLY : - case Xw_TOM_BESTRAMP : - case Xw_TOM_HARDRAMP : - case Xw_TOM_COLORCUBE : - break ; - default : - for( i=0 ; idefine[i] = FREECOLOR ; - pcolormap->pixels[i] = 0 ; - } - } - break ; - case Xw_TOM_BESTRAMP : - pcolormap->maxcolor = pcolormap->maxucolor ; - pcolormap->highpixel = _CINFO.base_pixel+1 ; - switch (pcolormap->mapping) { - case Xw_TOM_READONLY : - case Xw_TOM_SIMPLERAMP : - case Xw_TOM_HARDRAMP : - case Xw_TOM_COLORCUBE : - break ; - default : - for( i=0 ; idefine[i] = FREECOLOR ; - pcolormap->pixels[i] = 0 ; - } - } - break ; - case Xw_TOM_HARDRAMP : - pcolormap->maxcolor = pcolormap->maxucolor ; - pcolormap->highpixel = _CINFO.base_pixel+1 ; - switch (pcolormap->mapping) { - case Xw_TOM_READONLY : - case Xw_TOM_SIMPLERAMP : - case Xw_TOM_BESTRAMP : - case Xw_TOM_COLORCUBE : - break ; - default : - for( i=0 ; idefine[i] = FREECOLOR ; - pcolormap->pixels[i] = 0 ; - } - } - break ; - case Xw_TOM_COLORCUBE : - pcolormap->maxcolor = pcolormap->maxucolor ; - pcolormap->highpixel = _CINFO.base_pixel+1 ; - switch (pcolormap->mapping) { - case Xw_TOM_HARDRAMP : - for( i=0 ; imaxucolor ; i++ ) { - pcolormap->define[i] = define[_CINFO.base_pixel+i] ; - pcolormap->pixels[i] = pixels[_CINFO.base_pixel+i] ; - } - break ; - case Xw_TOM_SIMPLERAMP : - case Xw_TOM_READONLY : - case Xw_TOM_BESTRAMP : - default : - for( i=0 ; idefine[i] = FREECOLOR ; - pcolormap->pixels[i] = 0 ; - } - color.flags = DoRed | DoGreen | DoBlue ; - size = (int)(pow((double)pcolormap->maxucolor, - (double)1./3.)+0.1); - for( ; size > 0 ; --size ) { - nccolor = size*size*size ; - if( (nccolor <= pcolormap->maxucolor) && (nccolor <= MaxColorCube) ) break ; - } - _CINFO.red_max = size-1 ; _CINFO.red_mult = 1 ; - _CINFO.green_max = size-1 ; _CINFO.green_mult = size ; - _CINFO.blue_max = size-1 ; _CINFO.blue_mult = size*size ; - for( iu=n=0 ; iu<=_CINFO.blue_max ; iu++ ) { + case Xw_TOM_SIMPLERAMP : + case Xw_TOM_READONLY : + pcolormap->maxcolor = pcolormap->maxucolor ; + pcolormap->highpixel = _CINFO.base_pixel+1 ; + switch (pcolormap->mapping) { + case Xw_TOM_READONLY : + case Xw_TOM_BESTRAMP : + case Xw_TOM_HARDRAMP : + case Xw_TOM_COLORCUBE : + break ; + default : + for( i=0 ; idefine[i] = FREECOLOR ; + pcolormap->pixels[i] = 0 ; + } + } + break ; + case Xw_TOM_BESTRAMP : + pcolormap->maxcolor = pcolormap->maxucolor ; + pcolormap->highpixel = _CINFO.base_pixel+1 ; + switch (pcolormap->mapping) { + case Xw_TOM_READONLY : + case Xw_TOM_SIMPLERAMP : + case Xw_TOM_HARDRAMP : + case Xw_TOM_COLORCUBE : + break ; + default : + for( i=0 ; idefine[i] = FREECOLOR ; + pcolormap->pixels[i] = 0 ; + } + } + break ; + case Xw_TOM_HARDRAMP : + pcolormap->maxcolor = pcolormap->maxucolor ; + pcolormap->highpixel = _CINFO.base_pixel+1 ; + switch (pcolormap->mapping) { + case Xw_TOM_READONLY : + case Xw_TOM_SIMPLERAMP : + case Xw_TOM_BESTRAMP : + case Xw_TOM_COLORCUBE : + break ; + default : + for( i=0 ; idefine[i] = FREECOLOR ; + pcolormap->pixels[i] = 0 ; + } + } + break ; + case Xw_TOM_COLORCUBE : + pcolormap->maxcolor = pcolormap->maxucolor ; + pcolormap->highpixel = _CINFO.base_pixel+1 ; + switch (pcolormap->mapping) { + case Xw_TOM_HARDRAMP : + for( i=0 ; imaxucolor ; i++ ) { + pcolormap->define[i] = define[_CINFO.base_pixel+i] ; + pcolormap->pixels[i] = pixels[_CINFO.base_pixel+i] ; + } + break ; + case Xw_TOM_SIMPLERAMP : + case Xw_TOM_READONLY : + case Xw_TOM_BESTRAMP : + default : + for( i=0 ; idefine[i] = FREECOLOR ; + pcolormap->pixels[i] = 0 ; + } + color.flags = DoRed | DoGreen | DoBlue ; + size = (int)(pow((double)pcolormap->maxucolor, + (double)1./3.)+0.1); + for( ; size > 0 ; --size ) { + nccolor = size*size*size ; + if( (nccolor <= pcolormap->maxucolor) && (nccolor <= MaxColorCube) ) break ; + } + _CINFO.red_max = size-1 ; _CINFO.red_mult = 1 ; + _CINFO.green_max = size-1 ; _CINFO.green_mult = size ; + _CINFO.blue_max = size-1 ; _CINFO.blue_mult = size*size ; + for( iu=n=0 ; iu<=_CINFO.blue_max ; iu++ ) { blue = (_CINFO.blue_max > 0) ? - (0xFFFF*iu)/_CINFO.blue_max : 0xFFFF ; + (0xFFFF*iu)/_CINFO.blue_max : 0xFFFF ; for( ju=0 ; ju<=_CINFO.green_max ; ju++ ) { green = (_CINFO.green_max > 0) ? - (0xFFFF*ju)/_CINFO.green_max : 0xFFFF ; + (0xFFFF*ju)/_CINFO.green_max : 0xFFFF ; for( ku=0 ; ku<=_CINFO.red_max ; ku++,n++ ) { red = (_CINFO.red_max > 0) ? - (0xFFFF*ku)/_CINFO.red_max : 0xFFFF ; - color.red = red ; - color.green = green ; - color.blue = blue ; - XAllocColor(_CDISPLAY,_CINFO.colormap,&color) ; + (0xFFFF*ku)/_CINFO.red_max : 0xFFFF ; + color.red = red ; + color.green = green ; + color.blue = blue ; + XAllocColor(_CDISPLAY,_CINFO.colormap,&color) ; pcolormap->define[n] = SYSTEMCOLOR ; pcolormap->pixels[n] = color.pixel ; } } - } - } - break ; + } + } + break ; } break ; case Xw_TOV_PSEUDOCOLOR : switch (mode) { - case Xw_TOM_SIMPLERAMP : - case Xw_TOM_READONLY : - pcolormap->maxcolor = pcolormap->maxucolor ; - pcolormap->highpixel = _CINFO.base_pixel+1 ; - switch (pcolormap->mapping) { - case Xw_TOM_BESTRAMP : - for( i=j=0 ; imaxucolor ; i++,j += 2 ) { - if( j >= pcolormap->maxucolor ) j = 1 ; - pcolormap->define[j] = define[i] ; - pcolormap->pixels[j] = pixels[i] ; - } - break ; - case Xw_TOM_HARDRAMP : - for( i=0 ; imaxucolor ; i++ ) { - pcolormap->define[i] = define[_CINFO.base_pixel+i] ; - pcolormap->pixels[i] = pixels[_CINFO.base_pixel+i] ; - } - break ; - case Xw_TOM_COLORCUBE : - case Xw_TOM_READONLY : - break ; - default : - for( i=0 ; imaxucolor ; i++ ) { - pcolormap->pixels[i] = _CINFO.base_pixel + i ; - pcolormap->define[i] = FREECOLOR ; - } - } -#ifdef GG250997 - if( mode == Xw_TOM_READONLY ) { + case Xw_TOM_SIMPLERAMP : + case Xw_TOM_READONLY : + pcolormap->maxcolor = pcolormap->maxucolor ; + pcolormap->highpixel = _CINFO.base_pixel+1 ; + switch (pcolormap->mapping) { + case Xw_TOM_BESTRAMP : + for( i=j=0 ; imaxucolor ; i++,j += 2 ) { + if( j >= pcolormap->maxucolor ) j = 1 ; + pcolormap->define[j] = define[i] ; + pcolormap->pixels[j] = pixels[i] ; + } + break ; + case Xw_TOM_HARDRAMP : + for( i=0 ; imaxucolor ; i++ ) { + pcolormap->define[i] = define[_CINFO.base_pixel+i] ; + pcolormap->pixels[i] = pixels[_CINFO.base_pixel+i] ; + } + break ; + case Xw_TOM_COLORCUBE : + case Xw_TOM_READONLY : + break ; + default : + for( i=0 ; imaxucolor ; i++ ) { + pcolormap->pixels[i] = _CINFO.base_pixel + i ; + pcolormap->define[i] = FREECOLOR ; + } + } + + if( mode == Xw_TOM_READONLY ) { if( !DefaultAtom ) DefaultAtom = XInternAtom(_CDISPLAY, XW_RGB_BEST_MAP,True) ; if( DefaultAtom ) { status = XGetRGBColormaps(_CDISPLAY,_CROOT, - &pinfo,&nmap,DefaultAtom); + &pinfo,&nmap,DefaultAtom); } else status = False ; - if( status ) { - status = False; + if( status ) { + status = False; for( i=0 ; icolormap,&color); - if( !Xw_get_trace() ) Xw_set_synchronize(_CDISPLAY,False) ; - serror = Xw_get_error(&error,&gravity); - if( status && (error < 1000) ) { -#else - if( XAllocColor(_CDISPLAY,cinfo->colormap,&color) ) { -#endif + } + if( cinfo ) { +// XColor color; + int error,gravity; +// unsigned long pixel; + color.red = color.green = color.blue = 0xFFFF; + + char *serror; + Xw_print_error(); + if( !Xw_get_trace() ) Xw_set_synchronize(_CDISPLAY,True) ; + status = XAllocColor(_CDISPLAY,cinfo->colormap,&color); + if( !Xw_get_trace() ) Xw_set_synchronize(_CDISPLAY,False) ; + serror = Xw_get_error(&error,&gravity); + if( status && (error < 1000) ) { if( _CINFO.colormap != cinfo->colormap ) { if( _CINFO.colormap && (_CINFO.colormap != _CCOLORMAP) ) { XFreeColormap(_CDISPLAY,_CINFO.colormap) ; } - } + } _CINFO.colormap = cinfo->colormap; _CINFO.red_max = cinfo->red_max; _CINFO.red_mult = cinfo->red_mult; @@ -988,19 +880,19 @@ int nmap; _CINFO.base_pixel = cinfo->base_pixel; _CINFO.visualid = cinfo->visualid; _CINFO.killid = cinfo->killid ; - status = True; - } else { - if( Xw_get_trace() ) - printf(" Xw_set_colormap_mapping.BAD registered COLORMAP 0x%lx\n",cinfo->colormap); -#ifdef TEST - status = False; - Xw_print_error(); -#endif - } - } - } + status = True; + } else { + if( Xw_get_trace() ) + printf(" Xw_set_colormap_mapping.BAD registered COLORMAP 0x%lx\n",cinfo->colormap); - if( !status ) { + status = False; + Xw_print_error(); + + } + } + } + + if( !status ) { if( !pinfo ) { nmap = 1; pinfo = (XStandardColormap*) @@ -1023,292 +915,292 @@ int nmap; cinfo->green_mult = _CINFO.green_mult; cinfo->blue_mult = _CINFO.blue_mult; - if( !DefaultAtom ) DefaultAtom = XInternAtom(_CDISPLAY, - XW_RGB_BEST_MAP,False) ; + if( !DefaultAtom ) DefaultAtom = XInternAtom(_CDISPLAY, + XW_RGB_BEST_MAP,False) ; XSetRGBColormaps(_CDISPLAY,_CROOT,pinfo,nmap,DefaultAtom) ; - } - if( pinfo ) XFree(pinfo); + } + if( pinfo ) XFree(pinfo); XInstallColormap(_CDISPLAY,_CINFO.colormap); - } -#endif - break ; + } - case Xw_TOM_BESTRAMP : - pcolormap->maxcolor = pcolormap->maxucolor ; - pcolormap->highpixel = _CINFO.base_pixel+1 ; - switch (pcolormap->mapping) { - case Xw_TOM_SIMPLERAMP : - for( i=j=0 ; imaxucolor ; i++,j += 2 ) { - if( j >= pcolormap->maxucolor ) j = 1 ; - pcolormap->define[i] = define[j] ; - pcolormap->pixels[i] = pixels[j] ; - } - break ; - case Xw_TOM_HARDRAMP : - for( i=j=0 ; imaxucolor ; i++,j += 2 ) { - if( j >= pcolormap->maxucolor ) j = 1 ; - pcolormap->define[i] = define[_CINFO.base_pixel+j] ; - pcolormap->pixels[i] = pixels[_CINFO.base_pixel+j] ; - } - break ; - case Xw_TOM_COLORCUBE : - case Xw_TOM_READONLY : - break ; - default : - for( i=j=0 ; imaxucolor ; i++,j += 2 ) { - if( j >= pcolormap->maxucolor ) j = 1 ; - pcolormap->pixels[i] = _CINFO.base_pixel + j ; - pcolormap->define[i] = FREECOLOR ; - } - } - break ; + break ; - case Xw_TOM_HARDRAMP : - pcolormap->maxcolor = pcolormap->maxhcolor ; - pcolormap->highpixel = _CINFO.base_pixel+1 ; - switch (pcolormap->mapping) { - case Xw_TOM_COLORCUBE : - case Xw_TOM_READONLY : - case Xw_TOM_SIMPLERAMP : - for( i=0 ; imaxucolor ; i++ ) { - pcolormap->define[_CINFO.base_pixel+i] = define[i] ; - pcolormap->pixels[_CINFO.base_pixel+i] = pixels[i] ; - } - for( iu=0 ; iu<_CINFO.base_pixel ; iu++ ) { - pcolormap->define[iu] = SYSTEMCOLOR ; - pcolormap->pixels[iu] = iu ; - } - for( i=_CINFO.base_pixel+pcolormap->maxucolor ; - imaxhcolor ; i++ ) { - pcolormap->define[i] = SYSTEMCOLOR ; - pcolormap->pixels[i] = i ; - } - break ; - case Xw_TOM_BESTRAMP : - for( i=j=0 ; imaxucolor ; i++,j += 2 ) { - if( j >= pcolormap->maxucolor ) j = 1 ; - pcolormap->define[_CINFO.base_pixel+j] = define[i] ; - pcolormap->pixels[_CINFO.base_pixel+j] = pixels[i] ; - } - for( iu=0 ; iu<_CINFO.base_pixel ; iu++ ) { - pcolormap->define[iu] = SYSTEMCOLOR ; - pcolormap->pixels[iu] = iu ; - } - for( i=_CINFO.base_pixel+pcolormap->maxucolor ; - imaxhcolor ; i++ ) { - pcolormap->define[i] = SYSTEMCOLOR ; - pcolormap->pixels[i] = i ; - } - break ; - default : - for( i=0 ; imaxucolor ; i++ ) { - pcolormap->pixels[i] = i ; - pcolormap->define[i] = SYSTEMCOLOR ; - } - } - break ; + case Xw_TOM_BESTRAMP : + pcolormap->maxcolor = pcolormap->maxucolor ; + pcolormap->highpixel = _CINFO.base_pixel+1 ; + switch (pcolormap->mapping) { + case Xw_TOM_SIMPLERAMP : + for( i=j=0 ; imaxucolor ; i++,j += 2 ) { + if( j >= pcolormap->maxucolor ) j = 1 ; + pcolormap->define[i] = define[j] ; + pcolormap->pixels[i] = pixels[j] ; + } + break ; + case Xw_TOM_HARDRAMP : + for( i=j=0 ; imaxucolor ; i++,j += 2 ) { + if( j >= pcolormap->maxucolor ) j = 1 ; + pcolormap->define[i] = define[_CINFO.base_pixel+j] ; + pcolormap->pixels[i] = pixels[_CINFO.base_pixel+j] ; + } + break ; + case Xw_TOM_COLORCUBE : + case Xw_TOM_READONLY : + break ; + default : + for( i=j=0 ; imaxucolor ; i++,j += 2 ) { + if( j >= pcolormap->maxucolor ) j = 1 ; + pcolormap->pixels[i] = _CINFO.base_pixel + j ; + pcolormap->define[i] = FREECOLOR ; + } + } + break ; - case Xw_TOM_COLORCUBE : - pcolormap->maxcolor = pcolormap->maxucolor ; - switch (pcolormap->mapping) { - case Xw_TOM_HARDRAMP : - for( i=0 ; imaxucolor ; i++ ) { - pcolormap->define[i] = define[_CINFO.base_pixel+i] ; - pcolormap->pixels[i] = pixels[_CINFO.base_pixel+i] ; - } - break ; - case Xw_TOM_SIMPLERAMP : - case Xw_TOM_READONLY : - case Xw_TOM_BESTRAMP : - default : - for( i=0 ; imaxucolor ; i++ ) { - pcolormap->pixels[i] = _CINFO.base_pixel + i ; - pcolormap->define[i] = FREECOLOR ; - } + case Xw_TOM_HARDRAMP : + pcolormap->maxcolor = pcolormap->maxhcolor ; + pcolormap->highpixel = _CINFO.base_pixel+1 ; + switch (pcolormap->mapping) { + case Xw_TOM_COLORCUBE : + case Xw_TOM_READONLY : + case Xw_TOM_SIMPLERAMP : + for( i=0 ; imaxucolor ; i++ ) { + pcolormap->define[_CINFO.base_pixel+i] = define[i] ; + pcolormap->pixels[_CINFO.base_pixel+i] = pixels[i] ; + } + for( iu=0 ; iu<_CINFO.base_pixel ; iu++ ) { + pcolormap->define[iu] = SYSTEMCOLOR ; + pcolormap->pixels[iu] = iu ; + } + for( i=_CINFO.base_pixel+pcolormap->maxucolor ; + imaxhcolor ; i++ ) { + pcolormap->define[i] = SYSTEMCOLOR ; + pcolormap->pixels[i] = i ; + } + break ; + case Xw_TOM_BESTRAMP : + for( i=j=0 ; imaxucolor ; i++,j += 2 ) { + if( j >= pcolormap->maxucolor ) j = 1 ; + pcolormap->define[_CINFO.base_pixel+j] = define[i] ; + pcolormap->pixels[_CINFO.base_pixel+j] = pixels[i] ; + } + for( iu=0 ; iu<_CINFO.base_pixel ; iu++ ) { + pcolormap->define[iu] = SYSTEMCOLOR ; + pcolormap->pixels[iu] = iu ; + } + for( i=_CINFO.base_pixel+pcolormap->maxucolor ; + imaxhcolor ; i++ ) { + pcolormap->define[i] = SYSTEMCOLOR ; + pcolormap->pixels[i] = i ; + } + break ; + default : + for( i=0 ; imaxucolor ; i++ ) { + pcolormap->pixels[i] = i ; + pcolormap->define[i] = SYSTEMCOLOR ; + } + } + break ; + + case Xw_TOM_COLORCUBE : + pcolormap->maxcolor = pcolormap->maxucolor ; + switch (pcolormap->mapping) { + case Xw_TOM_HARDRAMP : + for( i=0 ; imaxucolor ; i++ ) { + pcolormap->define[i] = define[_CINFO.base_pixel+i] ; + pcolormap->pixels[i] = pixels[_CINFO.base_pixel+i] ; + } + break ; + case Xw_TOM_SIMPLERAMP : + case Xw_TOM_READONLY : + case Xw_TOM_BESTRAMP : + default : + for( i=0 ; imaxucolor ; i++ ) { + pcolormap->pixels[i] = _CINFO.base_pixel + i ; + pcolormap->define[i] = FREECOLOR ; + } if( SetColorCube != 'Y' ) status = False ; - else status = True ; + else status = True ; - ngcolor = 0; - cstatus = gstatus = False; + ngcolor = 0; + cstatus = gstatus = False; if( status ) { - if( !DefaultAtom ) DefaultAtom = XInternAtom(_CDISPLAY, - XW_RGB_BEST_MAP,True) ; - if( DefaultAtom ) { - status = XGetRGBColormaps(_CDISPLAY,_CROOT, + if( !DefaultAtom ) DefaultAtom = XInternAtom(_CDISPLAY, + XW_RGB_BEST_MAP,True) ; + if( DefaultAtom ) { + status = XGetRGBColormaps(_CDISPLAY,_CROOT, &pinfo,&nmap,DefaultAtom); - } else status = False ; + } else status = False ; - if( status ) { - XColor color1,color2 ; - for( i=0 ; i 0) && - (pinfo[i].green_max > 0) && - (pinfo[i].blue_max > 0) ) cinfo = &pinfo[i]; - else - if( (pinfo[i].red_max > 0) && - (pinfo[i].green_max == 0) && - (pinfo[i].blue_max == 0) ) cginfo = &pinfo[i]; - } - } + if( status ) { + XColor color1,color2 ; + for( i=0 ; i 0) && + (pinfo[i].green_max > 0) && + (pinfo[i].blue_max > 0) ) cinfo = &pinfo[i]; + else + if( (pinfo[i].red_max > 0) && + (pinfo[i].green_max == 0) && + (pinfo[i].blue_max == 0) ) cginfo = &pinfo[i]; + } + } - if( cinfo && cginfo ) { - nccolor = (cinfo->red_max+1)* - (cinfo->green_max+1)* - (cinfo->blue_max+1) ; - ngcolor = cginfo->red_max+1; - ncolor = nccolor + ngcolor; - size = (int)(pow((double)pcolormap->maxucolor,(double)1./3.)); - if( (ncolor <= pcolormap->maxhcolor) && - (ncolor >= size*size*size) ) { - Colormap colormap = _CINFO.colormap; - unsigned long base_pixel = _CINFO.base_pixel; - color1.pixel = cinfo->base_pixel ; - XQueryColor(_CDISPLAY,cinfo->colormap,&color1) ; - color2.pixel = cinfo->base_pixel + nccolor - 1 ; - XQueryColor(_CDISPLAY,cinfo->colormap,&color2) ; - if( !color1.red && !color1.green && !color1.blue && - color2.red > 0xFE00 && - color2.green > 0xFE00 && - color2.blue > 0xFE00 ) { - _CINFO.colormap = cinfo->colormap; - _CINFO.red_max = cinfo->red_max; - _CINFO.red_mult = cinfo->red_mult; - _CINFO.green_max = cinfo->green_max; - _CINFO.green_mult = cinfo->green_mult; - _CINFO.blue_max = cinfo->blue_max; - _CINFO.blue_mult = cinfo->blue_mult; - _CINFO.base_pixel = cinfo->base_pixel; - _CINFO.visualid = cinfo->visualid; - _CINFO.killid = cinfo->killid ; - cstatus = True; - } + if( cinfo && cginfo ) { + nccolor = (cinfo->red_max+1)* + (cinfo->green_max+1)* + (cinfo->blue_max+1) ; + ngcolor = cginfo->red_max+1; + ncolor = nccolor + ngcolor; + size = (int)(pow((double)pcolormap->maxucolor,(double)1./3.)); + if( (ncolor <= pcolormap->maxhcolor) && + (ncolor >= size*size*size) ) { + Colormap colormap = _CINFO.colormap; + unsigned long base_pixel = _CINFO.base_pixel; + color1.pixel = cinfo->base_pixel ; + XQueryColor(_CDISPLAY,cinfo->colormap,&color1) ; + color2.pixel = cinfo->base_pixel + nccolor - 1 ; + XQueryColor(_CDISPLAY,cinfo->colormap,&color2) ; + if( !color1.red && !color1.green && !color1.blue && + color2.red > 0xFE00 && + color2.green > 0xFE00 && + color2.blue > 0xFE00 ) { + _CINFO.colormap = cinfo->colormap; + _CINFO.red_max = cinfo->red_max; + _CINFO.red_mult = cinfo->red_mult; + _CINFO.green_max = cinfo->green_max; + _CINFO.green_mult = cinfo->green_mult; + _CINFO.blue_max = cinfo->blue_max; + _CINFO.blue_mult = cinfo->blue_mult; + _CINFO.base_pixel = cinfo->base_pixel; + _CINFO.visualid = cinfo->visualid; + _CINFO.killid = cinfo->killid ; + cstatus = True; + } - if( cstatus && (ngcolor > 0) && - (cinfo->colormap == cginfo->colormap) && - (cginfo->base_pixel == (cinfo->base_pixel + nccolor)) ) { - color1.pixel = cginfo->base_pixel ; - XQueryColor(_CDISPLAY,cginfo->colormap,&color1) ; - color2.pixel = cginfo->base_pixel + ngcolor - 1 ; - XQueryColor(_CDISPLAY,cginfo->colormap,&color2) ; - if( !color1.red && !color1.green && !color1.blue && - color2.red > 0xFE00 && - color2.green > 0xFE00 && - color2.blue > 0xFE00 ) { - _CGINFO.colormap = cginfo->colormap; - _CGINFO.red_max = cginfo->red_max; - _CGINFO.red_mult = cginfo->red_mult; - _CGINFO.green_max = cginfo->green_max; - _CGINFO.green_mult = cginfo->green_mult; - _CGINFO.blue_max = cginfo->blue_max; - _CGINFO.blue_mult = cginfo->blue_mult; - _CGINFO.base_pixel = cginfo->base_pixel; - _CGINFO.visualid = cginfo->visualid; - _CGINFO.killid = cginfo->killid ; - gstatus = True ; - /* FREE out of range colors */ - if( colormap != cinfo->colormap ) { - if( colormap && (colormap != _CCOLORMAP) ) { - XFreeColormap(_CDISPLAY,colormap) ; - } - } else { - unsigned long lpixel = cginfo->base_pixel+ngcolor-1; - for( i=0 ; imaxucolor ; i++ ) { - pixel = base_pixel + i; - if( (pixel < cinfo->base_pixel) || - (pixel > lpixel) ) { - XFreeColors(_CDISPLAY,colormap,&pixel,1,0); - } - } - XFlush(_CDISPLAY); - } - } - } - } - } - } + if( cstatus && (ngcolor > 0) && + (cinfo->colormap == cginfo->colormap) && + (cginfo->base_pixel == (cinfo->base_pixel + nccolor)) ) { + color1.pixel = cginfo->base_pixel ; + XQueryColor(_CDISPLAY,cginfo->colormap,&color1) ; + color2.pixel = cginfo->base_pixel + ngcolor - 1 ; + XQueryColor(_CDISPLAY,cginfo->colormap,&color2) ; + if( !color1.red && !color1.green && !color1.blue && + color2.red > 0xFE00 && + color2.green > 0xFE00 && + color2.blue > 0xFE00 ) { + _CGINFO.colormap = cginfo->colormap; + _CGINFO.red_max = cginfo->red_max; + _CGINFO.red_mult = cginfo->red_mult; + _CGINFO.green_max = cginfo->green_max; + _CGINFO.green_mult = cginfo->green_mult; + _CGINFO.blue_max = cginfo->blue_max; + _CGINFO.blue_mult = cginfo->blue_mult; + _CGINFO.base_pixel = cginfo->base_pixel; + _CGINFO.visualid = cginfo->visualid; + _CGINFO.killid = cginfo->killid ; + gstatus = True ; + /* FREE out of range colors */ + if( colormap != cinfo->colormap ) { + if( colormap && (colormap != _CCOLORMAP) ) { + XFreeColormap(_CDISPLAY,colormap) ; + } + } else { + unsigned long lpixel = cginfo->base_pixel+ngcolor-1; + for( i=0 ; imaxucolor ; i++ ) { + pixel = base_pixel + i; + if( (pixel < cinfo->base_pixel) || + (pixel > lpixel) ) { + XFreeColors(_CDISPLAY,colormap,&pixel,1,0); + } + } + XFlush(_CDISPLAY); + } + } + } + } + } + } } - if( !cstatus ) { /* Allocate READ-ONLY color-cube */ -// Atom RgbDefaultAtom = 0 ; - size = (int)(pow((double)MaxColorCube,(double)1./3.)+0.1); + if( !cstatus ) { /* Allocate READ-ONLY color-cube */ +// Atom RgbDefaultAtom = 0 ; + size = (int)(pow((double)MaxColorCube,(double)1./3.)+0.1); - if( pcolormap->maxucolor > 0 ) { - XFreeColors(_CDISPLAY,_CINFO.colormap, - pcolormap->pixels,pcolormap->maxucolor,0); - pcolormap->maxucolor = 0; - } - _CINFO.visualid = _CVISUAL->visualid ; - _CINFO.killid = getpid(); - for( ; size>0 ; --size ) { - _CINFO.base_pixel = 0; - _CINFO.red_max = size-1; - _CINFO.green_max = size-1; - _CINFO.blue_max = size-1; - _CINFO.red_mult = 1; - _CINFO.green_mult = size; - _CINFO.blue_mult = size*size; - if( XmuCreateColormap(_CDISPLAY,&_CINFO) ) break; - } - nccolor = size*size*size ; - } + if( pcolormap->maxucolor > 0 ) { + XFreeColors(_CDISPLAY,_CINFO.colormap, + pcolormap->pixels,pcolormap->maxucolor,0); + pcolormap->maxucolor = 0; + } + _CINFO.visualid = _CVISUAL->visualid ; + _CINFO.killid = getpid(); + for( ; size>0 ; --size ) { + _CINFO.base_pixel = 0; + _CINFO.red_max = size-1; + _CINFO.green_max = size-1; + _CINFO.blue_max = size-1; + _CINFO.red_mult = 1; + _CINFO.green_mult = size; + _CINFO.blue_mult = size*size; + if( XmuCreateColormap(_CDISPLAY,&_CINFO) ) break; + } + nccolor = size*size*size ; + } - if( !gstatus ) { /* Allocate READ-ONLY gray-ramp */ -// Atom GrayDefaultAtom = 0 ; - if( pcolormap->maxucolor > 0 ) { - XFreeColors(_CDISPLAY,_CINFO.colormap, - pcolormap->pixels,pcolormap->maxucolor,0); - pcolormap->maxucolor = 0; - } - ngcolor = MaxGray ; - _CGINFO.colormap = _CINFO.colormap; - _CGINFO.visualid = _CVISUAL->visualid ; - _CGINFO.killid = getpid(); - size = ngcolor; - for( ; size>0 ; size -= 2 ) { + if( !gstatus ) { /* Allocate READ-ONLY gray-ramp */ +// Atom GrayDefaultAtom = 0 ; + if( pcolormap->maxucolor > 0 ) { + XFreeColors(_CDISPLAY,_CINFO.colormap, + pcolormap->pixels,pcolormap->maxucolor,0); + pcolormap->maxucolor = 0; + } + ngcolor = MaxGray ; + _CGINFO.colormap = _CINFO.colormap; + _CGINFO.visualid = _CVISUAL->visualid ; + _CGINFO.killid = getpid(); + size = ngcolor; + for( ; size>0 ; size -= 2 ) { _CGINFO.base_pixel = 0; - _CGINFO.red_max = size-1; - _CGINFO.green_max = 0; - _CGINFO.blue_max = 0; - _CGINFO.red_mult = 1; - _CGINFO.green_mult = 1; - _CGINFO.blue_mult = 1; - if( XmuCreateColormap(_CDISPLAY,&_CGINFO) ) break; - } - ngcolor = size ; - } - XInstallColormap(_CDISPLAY,_CINFO.colormap); - ncolor = nccolor + ngcolor; - pcolormap->maxucolor = ncolor; - pcolormap->maxcolor = ncolor; - for( i=0 ; imaxucolor = ncolor; + pcolormap->maxcolor = ncolor; + for( i=0 ; idefine[i] = SYSTEMCOLOR ; - pcolormap->pixels[i] = _CINFO.base_pixel + i; - } + pcolormap->pixels[i] = _CINFO.base_pixel + i; + } if( !cstatus || !gstatus ) { - if( !pinfo ) { - nmap = 2; - pinfo = (XStandardColormap*) - malloc(2*sizeof(XStandardColormap)); - cinfo = &pinfo[0]; - cginfo = &pinfo[1]; - } else if( !cinfo || !cginfo ) { - if( !cinfo ) nmap++; - if( !cginfo ) nmap++; - pinfo = (XStandardColormap*) realloc((char*)pinfo, - nmap*sizeof(XStandardColormap)); - i = nmap-1; - if( !cginfo ) { - cginfo = &pinfo[i]; --i; - } - if( !cinfo ) { - cinfo = &pinfo[i]; --i; - } - } - cinfo->colormap = _CINFO.colormap; - cinfo->visualid = _CINFO.visualid; - cinfo->killid = getpid(); + if( !pinfo ) { + nmap = 2; + pinfo = (XStandardColormap*) + malloc(2*sizeof(XStandardColormap)); + cinfo = &pinfo[0]; + cginfo = &pinfo[1]; + } else if( !cinfo || !cginfo ) { + if( !cinfo ) nmap++; + if( !cginfo ) nmap++; + pinfo = (XStandardColormap*) realloc((char*)pinfo, + nmap*sizeof(XStandardColormap)); + i = nmap-1; + if( !cginfo ) { + cginfo = &pinfo[i]; --i; + } + if( !cinfo ) { + cinfo = &pinfo[i]; --i; + } + } + cinfo->colormap = _CINFO.colormap; + cinfo->visualid = _CINFO.visualid; + cinfo->killid = getpid(); cinfo->base_pixel = _CINFO.base_pixel; cinfo->red_max = _CINFO.red_max; cinfo->green_max = _CINFO.green_max; @@ -1317,9 +1209,9 @@ int nmap; cinfo->green_mult = _CINFO.green_mult; cinfo->blue_mult = _CINFO.blue_mult; - cginfo->colormap = _CGINFO.colormap; - cginfo->visualid = _CGINFO.visualid; - cginfo->killid = getpid(); + cginfo->colormap = _CGINFO.colormap; + cginfo->visualid = _CGINFO.visualid; + cginfo->killid = getpid(); cginfo->base_pixel = _CGINFO.base_pixel; cginfo->red_max = _CGINFO.red_max; cginfo->green_max = _CGINFO.green_max; @@ -1328,66 +1220,42 @@ int nmap; cginfo->green_mult = _CGINFO.green_mult; cginfo->blue_mult = _CGINFO.blue_mult; - switch (SetColorCube) { - case 'N' : -#ifdef TRACE_SET_COLORMAP_MAPPING - if( Xw_get_trace() ) printf( - " Xw_SET_COLOR_CUBE(%ld,%ld,%ld,%ld),(%ld,%ld,%ld,%ld)\n", - _CINFO.base_pixel,_CINFO.red_max, - _CINFO.green_max,_CINFO.blue_max, - _CGINFO.base_pixel,_CGINFO.red_max, - _CGINFO.green_max,_CGINFO.blue_max) ; -#endif - break ; - case 'Y' : - if( !DefaultAtom ) - DefaultAtom = XInternAtom(_CDISPLAY, - XW_RGB_BEST_MAP,False) ; + switch (SetColorCube) { + case 'N' : + break ; + case 'Y' : + if( !DefaultAtom ) + DefaultAtom = XInternAtom(_CDISPLAY, + XW_RGB_BEST_MAP,False) ; XSetRGBColormaps(_CDISPLAY,_CROOT, pinfo,nmap,DefaultAtom) ; -#ifdef TRACE_SET_COLORMAP_MAPPING - if( Xw_get_trace() ) printf( - " Xw_SET_STANDARD_COLOR_CUBE(%ld,%ld,%ld,%ld),(%ld,%ld,%ld,%ld)\n", - _CINFO.base_pixel,_CINFO.red_max, - _CINFO.green_max,_CINFO.blue_max, - _CGINFO.base_pixel,_CGINFO.red_max, - _CGINFO.green_max,_CGINFO.blue_max) ; -#endif - break ; - case 'T' : - if( !DefaultAtom ) - DefaultAtom = XInternAtom(_CDISPLAY, - XW_RGB_BEST_MAP,False) ; + break ; + case 'T' : + if( !DefaultAtom ) + DefaultAtom = XInternAtom(_CDISPLAY, + XW_RGB_BEST_MAP,False) ; XSetRGBColormaps(_CDISPLAY,_CROOT, pinfo,nmap,DefaultAtom) ; - XSetCloseDownMode(_CDISPLAY,RetainTemporary) ; -#ifdef TRACE_SET_COLORMAP_MAPPING - if( Xw_get_trace() ) printf( - " Xw_SET_TEMPORARY_COLOR_CUBE(%ld,%ld,%ld,%ld),(%ld,%ld,%ld,%ld)\n", - _CINFO.base_pixel,_CINFO.red_max, - _CINFO.green_max,_CINFO.blue_max, - _CGINFO.base_pixel,_CGINFO.red_max, - _CGINFO.green_max,_CGINFO.blue_max) ; -#endif - break ; - case 'P' : - if( !DefaultAtom ) - DefaultAtom = XInternAtom(_CDISPLAY, - XW_RGB_BEST_MAP,False) ; + XSetCloseDownMode(_CDISPLAY,RetainTemporary) ; + break ; + case 'P' : + if( !DefaultAtom ) + DefaultAtom = XInternAtom(_CDISPLAY, + XW_RGB_BEST_MAP,False) ; XSetRGBColormaps(_CDISPLAY,_CROOT, pinfo,nmap,DefaultAtom) ; - XSetCloseDownMode(_CDISPLAY,RetainPermanent) ; - if( Xw_get_trace() ) printf( - " Xw_SET_PERMANENT_COLOR_CUBE(%ld,%ld,%ld,%ld),(%ld,%ld,%ld,%ld)\n", - _CINFO.base_pixel,_CINFO.red_max, - _CINFO.green_max,_CINFO.blue_max, - _CGINFO.base_pixel,_CGINFO.red_max, - _CGINFO.green_max,_CGINFO.blue_max) ; - } - } - } - if( pinfo ) XFree(pinfo); - pcolormap->highpixel = pcolormap->pixels[pcolormap->maxcolor-1] ; + XSetCloseDownMode(_CDISPLAY,RetainPermanent) ; + if( Xw_get_trace() ) printf( + " Xw_SET_PERMANENT_COLOR_CUBE(%ld,%ld,%ld,%ld),(%ld,%ld,%ld,%ld)\n", + _CINFO.base_pixel,_CINFO.red_max, + _CINFO.green_max,_CINFO.blue_max, + _CGINFO.base_pixel,_CGINFO.red_max, + _CGINFO.green_max,_CGINFO.blue_max) ; + } + } + } + if( pinfo ) XFree(pinfo); + pcolormap->highpixel = pcolormap->pixels[pcolormap->maxcolor-1] ; } } @@ -1395,32 +1263,22 @@ int nmap; XFlush(_CDISPLAY) ; -#ifdef TRACE_SET_COLORMAP_MAPPING -if( Xw_get_trace() ) { - printf(" Xw_set_color_mapping(%lx,%d)\n",(long ) pcolormap,mode) ; -} -#endif - return (XW_SUCCESS) ; } -#ifdef XW_PROTOTYPE -XVisualInfo* Xw_get_visual_info(XW_EXT_DISPLAY* pdisplay,Xw_TypeOfVisual pclass) -#else -XVisualInfo* Xw_get_visual_info(pdisplay,pclass) -XW_EXT_DISPLAY *pdisplay ; -Xw_TypeOfVisual pclass ; -#endif /*XW_PROTOTYPE*/ -/* - Return the visual Information matching with the specified class - or NULL if class is not founded on this Display . -*/ +//! Return the visual Information matching with the specified class +//! or NULL if class is not founded on this Display. +XVisualInfo* Xw_get_visual_info (XW_EXT_DISPLAY* pdisplay, + Xw_TypeOfVisual pclass) { -Xw_TypeOfVisual class1 = pclass,class2 = Xw_TOV_DEFAULT ; -XVisualInfo *vinfo = NULL,*ginfo = NULL,info1,info2 ; -int i,ninfo; -long mask1 = 0,mask2 = 0; -unsigned long backpixel; + Xw_TypeOfVisual class1 = pclass; + Xw_TypeOfVisual class2 = Xw_TOV_DEFAULT; + XVisualInfo* vinfo = NULL; + XVisualInfo* ginfo = NULL; + XVisualInfo info1, info2; + int i, ninfo; + long mask1 = 0,mask2 = 0; + unsigned long backpixel; switch (class1) { case Xw_TOV_DEFAULT : @@ -1428,14 +1286,14 @@ unsigned long backpixel; break ; case Xw_TOV_PSEUDOCOLOR : class1 = Xw_TOV_PSEUDOCOLOR ; - mask1 |= VisualColormapSizeMask; - info1.colormap_size = 256; + mask1 |= VisualColormapSizeMask; + info1.colormap_size = 256; break ; case Xw_TOV_PREFERRED_PSEUDOCOLOR : if( MaxCmapsOfScreen(_DSCREEN) > 1 ) { class1 = Xw_TOV_PSEUDOCOLOR ; - mask1 |= VisualColormapSizeMask; - info1.colormap_size = 256; + mask1 |= VisualColormapSizeMask; + info1.colormap_size = 256; class2 = Xw_TOV_TRUECOLOR ; } else { class1 = (Xw_TypeOfVisual) _DCLASS ; @@ -1445,217 +1303,159 @@ unsigned long backpixel; class1 = Xw_TOV_TRUECOLOR ; break ; case Xw_TOV_OVERLAY : - ginfo = Xw_get_overlay_visual_info(pdisplay, - Xw_TOV_PSEUDOCOLOR,&backpixel); - return ginfo; + ginfo = Xw_get_overlay_visual_info(pdisplay, + Xw_TOV_PSEUDOCOLOR,&backpixel); + return ginfo; case Xw_TOV_PREFERRED_TRUECOLOR : -#ifdef OLD - if( MaxCmapsOfScreen(_DSCREEN) > 1 ) { - class1 = Xw_TOV_TRUECOLOR ; - class2 = Xw_TOV_PSEUDOCOLOR ; - mask2 |= VisualColormapSizeMask; - info2.colormap_size = 256; - } else { - class1 = _DCLASS ; - } -#else class1 = Xw_TOV_TRUECOLOR ; class2 = Xw_TOV_PSEUDOCOLOR ; - mask2 |= VisualColormapSizeMask; - info2.colormap_size = 256; -#endif - break ; + mask2 |= VisualColormapSizeMask; + info2.colormap_size = 256; + break; case Xw_TOV_PREFERRED_OVERLAY : class1 = Xw_TOV_PSEUDOCOLOR ; - mask1 |= VisualColormapSizeMask; - info1.colormap_size = 256; - ginfo = Xw_get_overlay_visual_info(pdisplay, - Xw_TOV_PSEUDOCOLOR,&backpixel); - if( ginfo ) return ginfo; + mask1 |= VisualColormapSizeMask; + info1.colormap_size = 256; + ginfo = Xw_get_overlay_visual_info(pdisplay, + Xw_TOV_PSEUDOCOLOR,&backpixel); + if( ginfo ) return ginfo; break ; - default: + default: break ; } - if( !ginfo ) { -#if (!defined (CTS17988)) && defined(HAVE_X11_EXTENSIONS_MULTIBUF_H) - XmbufBufferInfo *pmono = NULL,*pstereo = NULL; - int nmono=0,nstereo=0; -#endif - -#if (!defined (CTS17988)) && defined(HAVE_X11_EXTENSIONS_MULTIBUF_H) - XmbufGetScreenInfo(_DDISPLAY, _DROOT, &nmono, &pmono, - &nstereo, &pstereo); -#endif -#if defined(__cplusplus) || defined(c_plusplus) - info1.c_class = class1 ; -#else - info1.class = class1 ; -#endif - info1.screen = DefaultScreen(_DDISPLAY) ; + if (ginfo == NULL) + { + info1.c_class = class1; + info1.screen = DefaultScreen(_DDISPLAY); mask1 |= VisualClassMask | VisualScreenMask ; vinfo = XGetVisualInfo(_DDISPLAY,mask1,&info1,&ninfo) ; - if( ninfo ) { - ginfo = vinfo ; - for( i=1 ; i ginfo->depth) || - (vinfo[i].visualid == _DVISUAL->visualid) ) { -#if (!defined (CTS17988)) && defined(HAVE_X11_EXTENSIONS_MULTIBUF_H) - if( pmono ) { - for( j=0 ; j 1)) ) { - ginfo = &vinfo[i]; - break; - } - } - } else -#endif - ginfo = &vinfo[i]; - } + if (ninfo > 0) + { + ginfo = vinfo; + for (i = 1; i < ninfo; i++) + { + if ((vinfo[i].depth > ginfo->depth && !(vinfo[i].depth == 32 && ginfo->depth == 24)) + || (vinfo[i].depth == 24 && ginfo->depth == 32) // prefer 24-bit depth over 32-bit - we do not need blend window content with desktop (see CR23792) + || (vinfo[i].visualid == _DVISUAL->visualid)) + { + ginfo = &vinfo[i]; + } + } + if ((ginfo->depth < TrueColorMinDepth) + && (class1 == Xw_TOV_TRUECOLOR)) + { + XFree ((char* )vinfo); + ginfo = vinfo = NULL; } - if( (ginfo->depth < TrueColorMinDepth) && - (class1 == Xw_TOV_TRUECOLOR) ) { - XFree((char*)vinfo) ; - ginfo = vinfo = NULL ; - } } - if( !ginfo && (class2 != Xw_TOV_DEFAULT) ) { -#if defined(__cplusplus) || defined(c_plusplus) - info2.c_class = class2 ; -#else - info2.class = class2 ; -#endif - info2.screen = DefaultScreen(_DDISPLAY) ; - mask2 |= VisualClassMask | VisualScreenMask ; - vinfo = XGetVisualInfo(_DDISPLAY,mask2,&info2,&ninfo) ; - if( ninfo ) { + if (ginfo == NULL && (class2 != Xw_TOV_DEFAULT)) + { + info2.c_class = class2; + + info2.screen = DefaultScreen(_DDISPLAY); + mask2 |= VisualClassMask | VisualScreenMask; + vinfo = XGetVisualInfo(_DDISPLAY,mask2,&info2,&ninfo); + if (ninfo > 0) + { ginfo = vinfo ; - for( i=1 ; i ginfo->depth ) { -#if (!defined (CTS17988)) && defined(HAVE_X11_EXTENSIONS_MULTIBUF_H) - if( pmono ) { - for( j=0 ; j 1)) ) { - ginfo = &vinfo[i]; - break; - } - } - } else -#endif - ginfo = &vinfo[i]; - } + for (i = 1; i < ninfo; i++) + { + if ((vinfo[i].depth > ginfo->depth && !(vinfo[i].depth == 32 && ginfo->depth == 24)) + || (vinfo[i].depth == 24 && ginfo->depth == 32)) // prefer 24-bit depth over 32-bit) + { + ginfo = &vinfo[i]; + } + } + if ((ginfo->depth < TrueColorMinDepth) + && (class2 == Xw_TOV_TRUECOLOR)) + { + XFree((char*)vinfo); + ginfo = vinfo = NULL; } - if( (ginfo->depth < TrueColorMinDepth) && - (class2 == Xw_TOV_TRUECOLOR) ) { - XFree((char*)vinfo) ; - ginfo = vinfo = NULL ; - } } } -#if (!defined (CTS17988)) && defined(HAVE_X11_EXTENSIONS_MULTIBUF_H) - if( pmono ) XFree(pmono); - if( pstereo ) XFree(pstereo); -#endif } - if( ginfo ) { + if( ginfo ) { info1.visualid = ginfo->visualid ; info1.screen = ginfo->screen ; mask1 = VisualIDMask | VisualScreenMask ; ginfo = XGetVisualInfo(_DDISPLAY,mask1,&info1,&ninfo) ; - } else { + } else { /*ERROR*Unmatchable Visual class*/ Xw_set_error(67,"Xw_get_visual_info",&pclass) ; - } + } - if( vinfo ) XFree((char*)vinfo) ; + if( vinfo ) XFree((char*)vinfo) ; return (ginfo) ; } -#ifdef XW_PROTOTYPE +//! Return the Overlay visual Information matching with the specified class +//! or NULL if the overlay class is not founded on this Display. XVisualInfo* Xw_get_overlay_visual_info(XW_EXT_DISPLAY* pdisplay,Xw_TypeOfVisual /*pclass*/,unsigned long *backpixel) -#else -XVisualInfo* Xw_get_overlay_visual_info(pdisplay,pclass,backpixel) -XW_EXT_DISPLAY *pdisplay ; -Xw_TypeOfVisual pclass ; -unsigned long *backpixel; -#endif /*XW_PROTOTYPE*/ -/* - Return the Overlay visual Information matching with the specified class - or NULL if the overlay class is not founded on this Display . -*/ { XVisualInfo *vinfo = NULL,*ginfo = NULL,tinfo ; int ninfo; Atom oatom = XInternAtom(_DDISPLAY, "SERVER_OVERLAY_VISUALS", True); *backpixel = 0; - if( oatom ) { - unsigned long nitem,left; - int aformat; - Status status; - union { - unsigned char *string; - XOverlayVisualInfo *oinfo; - } prop; - Atom aatom; - status = XGetWindowProperty(_DDISPLAY, _DROOT, + if( oatom ) { + unsigned long nitem,left; + int aformat; + Status status; + union { + unsigned char *string; + XOverlayVisualInfo *oinfo; + } prop; + Atom aatom; + status = XGetWindowProperty(_DDISPLAY, _DROOT, oatom, 0, 100, False, AnyPropertyType, &aatom, &aformat, &nitem, &left, &prop.string); - nitem /= 4; + nitem /= 4; if( (status == Success) && (aformat == 32) && (nitem > 0) ) { - int i,depth = OverlayColorMinDepth,layer = 1; - for( i=0 ; (unsigned int ) i < nitem ; i++ ) { - if( prop.oinfo[i].layer < layer || - prop.oinfo[i].transparent_type == 0 ) continue; - tinfo.visualid = prop.oinfo[i].overlay_visual; - vinfo = XGetVisualInfo(_DDISPLAY,VisualIDMask,&tinfo,&ninfo); - if( vinfo && (vinfo->depth >= depth) ) { - *backpixel = prop.oinfo[i].value; - layer = prop.oinfo[i].layer; - depth = vinfo->depth; - ginfo = vinfo; - } else if( vinfo ) { - XFree(vinfo) ; vinfo = NULL; - } - } - } -#ifdef PURIFY - if( prop.string && (status == Success) ) Xw_free(prop.string); -#endif - } else if( (pdisplay->server == XW_SERVER_IS_SUN) && EnableSunOverlay ) { - int mOptCode,fEvent,fError; - if( XQueryExtension(_DDISPLAY,"SUN_OVL",&mOptCode,&fEvent,&fError) ) { - tinfo.visualid = 0x2a; /* Overlay visual for SUN/ULTRA */ - vinfo = XGetVisualInfo(_DDISPLAY,VisualIDMask,&tinfo,&ninfo); - if( vinfo && (vinfo->colormap_size == 224) ) { - ginfo = vinfo; - *backpixel = 225; - } else if( vinfo ) { - XFree(vinfo) ; vinfo = NULL; - } - } - } + int i,depth = OverlayColorMinDepth,layer = 1; + for( i=0 ; (unsigned int ) i < nitem ; i++ ) { + if( prop.oinfo[i].layer < layer || + prop.oinfo[i].transparent_type == 0 ) continue; + tinfo.visualid = prop.oinfo[i].overlay_visual; + vinfo = XGetVisualInfo(_DDISPLAY,VisualIDMask,&tinfo,&ninfo); + if( vinfo && (vinfo->depth >= depth) ) { + *backpixel = prop.oinfo[i].value; + layer = prop.oinfo[i].layer; + depth = vinfo->depth; + ginfo = vinfo; + } else if( vinfo ) { + XFree(vinfo) ; vinfo = NULL; + } + } + } -#ifdef IMP040100 - if( ginfo && MaxCmapsOfScreen(_DSCREEN) < 2 && - ginfo->visualid != _DVISUAL->visualid && -#if defined(__cplusplus) || defined(c_plusplus) - ginfo->c_class == _DCLASS ) -#else - ginfo->class == _DCLASS ) -#endif - { - XFree(ginfo); ginfo = NULL; + if( prop.string && (status == Success) ) Xw_free(prop.string); + + } else if( (pdisplay->server == XW_SERVER_IS_SUN) && EnableSunOverlay ) { + int mOptCode,fEvent,fError; + if( XQueryExtension(_DDISPLAY,"SUN_OVL",&mOptCode,&fEvent,&fError) ) { + tinfo.visualid = 0x2a; /* Overlay visual for SUN/ULTRA */ + vinfo = XGetVisualInfo(_DDISPLAY,VisualIDMask,&tinfo,&ninfo); + if( vinfo && (vinfo->colormap_size == 224) ) { + ginfo = vinfo; + *backpixel = 225; + } else if( vinfo ) { + XFree(vinfo) ; vinfo = NULL; + } + } } -#endif - return ginfo; + + if( ginfo && MaxCmapsOfScreen(_DSCREEN) < 2 && + ginfo->visualid != _DVISUAL->visualid && + ginfo->c_class == _DCLASS ) + { + XFree(ginfo); ginfo = NULL; + } + return ginfo; }