Doxygen Source Code Documentation
display.h File Reference
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <X11/X.h>
#include <X11/Intrinsic.h>
#include <X11/Shell.h>
#include <X11/cursorfont.h>
#include <Xm/Xm.h>
#include <Xm/MwmUtil.h>
#include <Xm/DialogS.h>
#include <Xm/PushB.h>
#include "mrilib.h"
Go to the source code of this file.
Data Structures | |
struct | DC_colordef |
struct | MCW_DC |
struct | MCW_DCOV |
Defines | |
#define | CLIP_INTEN(i) (((i)<256) ? (256) : ((i)>65280) ? (65280) : (i)) |
#define | BYTE_TO_INTEN(b) (CLIP_INTEN((b)<<8)) |
#define | INTEN_TO_BYTE(i) ((i)>>8) |
#define | BRIGHTNESS(r, g, b) (0.299*(r)+0.587*(g)+0.114*(b)) |
#define | XCOL_BRIGHTNESS(xc) BRIGHTNESS((xc).red,(xc).green,(xc).blue) |
#define | XCOL_REDNESS(xc) (0.299*(xc).red - MAX(0.587*(xc).green,0.114*(xc).blue )) |
#define | XCOL_GREENNESS(xc) (0.587*(xc).green - MAX(0.299*(xc).red ,0.114*(xc).blue )) |
#define | XCOL_BLUENESS(xc) (0.114*(xc).blue - MAX(0.299*(xc).red ,0.587*(xc).green)) |
#define | XCOL_YELLOWNESS(xc) (0.299*(xc).red+0.587*(xc).green-0.114*(xc).blue) |
#define | MAP_XY(x, wx, wn) (((wn)*(x))/(wx)) |
#define | RGB_TO_TCINT(dc, r, g, b) |
#define | FREE_DC_colordef(cd) |
#define | MAX_COLORS 256 |
#define | DCOV_REDBYTE(dc, i) ((dc)->ovc->r_ov[i]) |
#define | DCOV_GREENBYTE(dc, i) ((dc)->ovc->g_ov[i]) |
#define | DCOV_BLUEBYTE(dc, i) ((dc)->ovc->b_ov[i]) |
#define | DCOV_BRIGHTNESS(dc, i) ((dc)->ovc->bright_ov[i]) |
#define | DC_REDBYTE(dc, i) ((dc)->r_im[i]) |
#define | DC_GREENBYTE(dc, i) ((dc)->g_im[i]) |
#define | DC_BLUEBYTE(dc, i) ((dc)->b_im[i]) |
#define | DC_text_width(dc, str) XTextWidth((dc)->myFontStruct,(str),strlen((str))) |
#define | DC_solid_line(ddcc) DC_linestyle((ddcc),LineSolid) |
#define | DC_dashed_line(ddcc) DC_linestyle((ddcc),LineOnOffDash) |
Functions | |
void | DC_yokify (Widget, MCW_DC *) |
MCW_DC * | MCW_new_DC (Widget, int, int, char *c[], char *l[], double, int) |
void | DC_init_im_gry (MCW_DC *) |
void | DC_init_im_col (MCW_DC *) |
void | DC_init_ov_col (MCW_DC *) |
int | DC_add_overlay_color (MCW_DC *, char *, char *) |
int | DC_find_overlay_color (MCW_DC *, char *) |
int | DC_find_closest_overlay_color (MCW_DC *, char *) |
void | load_tmp_colors (int, XColor c[]) |
void | DC_palette_rotate (MCW_DC *, int) |
void | DC_palette_swap (MCW_DC *) |
void | DC_palette_bright (MCW_DC *, int) |
void | DC_palette_squeeze (MCW_DC *, int) |
void | DC_palette_restore (MCW_DC *, double) |
void | DC_gray_change (MCW_DC *, int) |
void | DC_color_bright (MCW_DC *, int) |
void | DC_gray_contrast (MCW_DC *, int) |
void | DC_color_squeeze (MCW_DC *, int) |
void | DC_gray_conbrio (MCW_DC *, int) |
void | DC_palette_setgray (MCW_DC *) |
void | DC_palette_setcolor (MCW_DC *) |
Boolean | MCW_check_iconsize (int, int, MCW_DC *) |
XColor * | DCpix_to_XColor (MCW_DC *, Pixel, int) |
void | DC_fg_color (MCW_DC *, int) |
void | DC_bg_color (MCW_DC *, int) |
void | DC_fg_colortext (MCW_DC *, char *) |
void | DC_linewidth (MCW_DC *, int) |
void | DC_fg_colorpix (MCW_DC *, Pixel) |
void | DC_linestyle (MCW_DC *, int) |
void | OVC_mostest (MCW_DCOV *) |
void | DC_set_image_colors (MCW_DC *) |
void | reload_DC_colordef (MCW_DC *) |
Pixel | DC_rgb_to_pixel (MCW_DC *, byte, byte, byte) |
void | DC_pixel_to_rgb (MCW_DC *, Pixel, byte *, byte *, byte *) |
Pixel | DC_rgb_to_ovpix (MCW_DC *, byte, byte, byte) |
void | DC_rgb_to_ovrgb (MCW_DC *, int, int *, int, byte *, byte *, byte *) |
int | DC_parse_color (MCW_DC *, char *, float *, float *, float *) |
rgbyte | DC_spectrum_AJJ (double, double) |
rgbyte | DC_spectrum_ZSS (double, double) |
Variables | |
MCW_DC * | first_dc |
char * | tfont_hopefuls [] |
Define Documentation
|
Definition at line 48 of file display.h. Referenced by DC_add_overlay_color(), DC_rgb_to_ovrgb(), and DC_set_image_colors(). |
|
Definition at line 45 of file display.h. Referenced by DC_init_im_col(), DC_init_im_gry(), and DCpix_to_XColor(). |
|
Definition at line 44 of file display.h. Referenced by DC_color_bright(), DC_gray_change(), DC_gray_conbrio(), and DC_gray_contrast(). |
|
Definition at line 184 of file display.h. Referenced by ISQ_index_to_rgb(). |
|
Definition at line 255 of file display.h. Referenced by plot_graphs(). |
|
Definition at line 183 of file display.h. Referenced by ISQ_index_to_rgb(). |
|
Definition at line 182 of file display.h. Referenced by ISQ_index_to_rgb(). |
|
Definition at line 254 of file display.h. Referenced by plot_graphs(). |
|
Definition at line 201 of file display.h. Referenced by redraw_graph(), and text_graphs(). |
|
Definition at line 123 of file display.h. Referenced by AFNI_brick_to_mri(), AFNI_vnlist_func_overlay(), DC_add_overlay_color(), DC_rgb_to_ovpix(), DC_rgb_to_ovrgb(), ISQ_index_to_rgb(), ISQ_process_mri(), map_v2s_results(), MCW_pbar_to_mri(), and REND_init_cmap(). |
|
|
|
Definition at line 122 of file display.h. Referenced by AFNI_brick_to_mri(), AFNI_vnlist_func_overlay(), DC_add_overlay_color(), DC_rgb_to_ovpix(), DC_rgb_to_ovrgb(), ISQ_index_to_rgb(), ISQ_process_mri(), map_v2s_results(), MCW_pbar_to_mri(), and REND_init_cmap(). |
|
Definition at line 121 of file display.h. Referenced by AFNI_brick_to_mri(), AFNI_vnlist_func_overlay(), DC_add_overlay_color(), DC_rgb_to_ovpix(), DC_rgb_to_ovrgb(), ISQ_index_to_rgb(), ISQ_process_mri(), map_v2s_results(), MCW_pbar_to_mri(), and REND_init_cmap(). |
|
Value: do{ if( (cd) != NULL ){ \ if( (cd)->rr != NULL ){ \ free((cd)->rr) ; free((cd)->gg) ; free((cd)->bb) ; } \ free((cd)) ; (cd) = NULL ; } } while(0) Definition at line 92 of file display.h. Referenced by DC_add_overlay_color(), and reload_DC_colordef(). |
|
Definition at line 46 of file display.h. Referenced by DC_add_overlay_color(), DC_set_image_colors(), ISQ_saver_CB(), and XImage_to_mri(). |
|
Definition at line 58 of file display.h. Referenced by resize_XImage(). |
|
|
|
Value: ( ((((dc)->visual_redshift <0) \ ? ((r)<<(-(dc)->visual_redshift) ) \ : ((r)>> (dc)->visual_redshift) ) & (dc)->visual_redmask ) \ | \ ((((dc)->visual_greenshift<0) \ ? ((g)<<(-(dc)->visual_greenshift)) \ : ((g)>> (dc)->visual_greenshift)) & (dc)->visual_greenmask) \ | \ ((((dc)->visual_blueshift <0) \ ? ((b)<<(-(dc)->visual_blueshift) ) \ : ((b)>> (dc)->visual_blueshift) ) & (dc)->visual_bluemask ) ) |
|
Definition at line 53 of file display.h. Referenced by OVC_mostest(). |
|
Definition at line 49 of file display.h. Referenced by OVC_mostest(). |
|
Definition at line 52 of file display.h. Referenced by OVC_mostest(). |
|
Definition at line 51 of file display.h. Referenced by OVC_mostest(). |
|
Definition at line 54 of file display.h. Referenced by OVC_mostest(). |
Function Documentation
|
Definition at line 620 of file display.c. References MCW_DCOV::b_ov, MCW_DCOV::bright_ov, BRIGHTNESS, MCW_DC::cdef, MCW_DC::colormap, DCOV_BLUEBYTE, DCOV_GREENBYTE, DCOV_REDBYTE, MCW_DC::display, ENTRY, FREE_DC_colordef, MCW_DCOV::g_ov, INTEN_TO_BYTE, MCW_DCOV::label_ov, myXtFree, name, MCW_DCOV::name_ov, MCW_DCOV::ncol_ov, nplmsk, MCW_DC::ovc, MCW_DCOV::pix_ov, plane_masks, MCW_DCOV::r_ov, RETURN, MCW_DC::visual_class, and MCW_DCOV::xcol_ov. Referenced by AFNI_drive_add_overlay_color(), AFNI_process_setup(), and MCW_new_DC().
00621 { 00622 int ii , ok , newcol ; 00623 Pixel newpix ; 00624 XColor cell ; 00625 00626 ENTRY("DC_add_overlay_color") ; 00627 00628 if( name == NULL || strlen(name) == 0 ) RETURN(-1) ; /* error */ 00629 if( label == NULL ) label = name ; 00630 00631 /** see if label is already in the table **/ 00632 00633 for( ii=1 ; ii < dc->ovc->ncol_ov ; ii++ ) 00634 if( strcmp(label,dc->ovc->label_ov[ii]) == 0 ) break ; 00635 00636 newcol = (ii == dc->ovc->ncol_ov) ; /** need a new color cell? **/ 00637 if( ii == dc->ovc->ncol_ov ){ /** Yes **/ 00638 unsigned int nplmsk = 0 ; 00639 unsigned long plane_masks[1] ; 00640 00641 if( ii >= MAX_COLORS ) RETURN(-1) ; /* too many overlay colors! */ 00642 00643 if( dc->visual_class == PseudoColor ){ /* 22 Aug 1998 */ 00644 ok = XAllocColorCells( dc->display , dc->colormap , 00645 True , plane_masks , nplmsk , &newpix , 1 ) ; 00646 if( !ok ) RETURN(-1) ; /* couldn't get a new cell */ 00647 cell.pixel = newpix ; 00648 } 00649 00650 } else { /** Reusing an old cell **/ 00651 00652 if( strcmp(name,dc->ovc->name_ov[ii]) == 0 ) RETURN(ii) ; /* no change! */ 00653 00654 if( dc->visual_class == PseudoColor ) /* 22 Aug 1998 */ 00655 cell.pixel = dc->ovc->pix_ov[ii] ; 00656 else if( dc->visual_class == TrueColor ) 00657 XFreeColors( dc->display, dc->colormap, dc->ovc->pix_ov+ii, 1, 0 ) ; 00658 } 00659 00660 ok = XParseColor( dc->display , dc->colormap , name, &cell ) ; 00661 if( !ok ) RETURN(-1) ; 00662 00663 if( newcol ){ /** made a new cell **/ 00664 dc->ovc->ncol_ov++ ; 00665 } else { /** free old cell stuff **/ 00666 myXtFree( dc->ovc->name_ov[ii] ) ; 00667 myXtFree( dc->ovc->label_ov[ii] ) ; 00668 } 00669 00670 if( dc->visual_class == PseudoColor ) /* 22 Aug 1998 */ 00671 XStoreColor( dc->display , dc->colormap , &cell ) ; 00672 else if( dc->visual_class == TrueColor ) 00673 XAllocColor( dc->display , dc->colormap , &cell ) ; 00674 00675 dc->ovc->xcol_ov[ii] = cell ; /* save cell info */ 00676 dc->ovc->pix_ov[ii] = cell.pixel ; 00677 dc->ovc->name_ov[ii] = XtNewString(name) ; 00678 dc->ovc->label_ov[ii] = XtNewString(label) ; 00679 00680 dc->ovc->r_ov[ii] = INTEN_TO_BYTE(cell.red) ; /* 06 Mar 2001 */ 00681 dc->ovc->g_ov[ii] = INTEN_TO_BYTE(cell.green) ; 00682 dc->ovc->b_ov[ii] = INTEN_TO_BYTE(cell.blue) ; 00683 00684 if( dc->visual_class == PseudoColor ) /* 11 Feb 1999: */ 00685 FREE_DC_colordef(dc->cdef) ; /* will need to be recomputed */ 00686 00687 dc->ovc->bright_ov[ii] = BRIGHTNESS( DCOV_REDBYTE(dc,ii) , /* 20 Dec 1999 */ 00688 DCOV_GREENBYTE(dc,ii) , 00689 DCOV_BLUEBYTE(dc,ii) ) ; 00690 RETURN(ii) ; 00691 } |
|
Definition at line 1010 of file display.c. References MCW_DC::display, MCW_DC::myGC, MCW_DC::ovc, and MCW_DCOV::pix_ov.
01011 {
01012 XSetBackground( dc->display , dc->myGC , dc->ovc->pix_ov[nov] ) ;
01013 return ;
01014 }
|
|
Definition at line 836 of file display.c. References c, CLIP_INTEN, DC_set_image_colors(), i, nc, MCW_DC::ncol_im, xc, and MCW_DC::xcol_im. Referenced by DC_palette_bright().
00837 { 00838 register int i ; 00839 double c ; 00840 int nc = dc->ncol_im ; 00841 XColor * xc = dc->xcol_im ; 00842 00843 c = 1.0 - 0.005 * (double) dlev ; 00844 00845 for( i=0 ; i < nc ; i++ ){ 00846 xc[i].red = CLIP_INTEN( c * xc[i].red ) ; 00847 xc[i].green = CLIP_INTEN( c * xc[i].green ) ; 00848 xc[i].blue = CLIP_INTEN( c * xc[i].blue ) ; 00849 } 00850 DC_set_image_colors( dc ) ; /* 22 Aug 1998 */ 00851 return ; 00852 } |
|
Definition at line 886 of file display.c. Referenced by DC_palette_squeeze().
00887 { 00888 return ; /* not implemented */ 00889 } |
|
Definition at line 1004 of file display.c. References MCW_DC::display, MCW_DC::myGC, MCW_DC::ovc, and MCW_DCOV::pix_ov. Referenced by draw_grids(), erase_fdw(), GRA_redraw_overlay(), plot_graphs(), redraw_graph(), and text_graphs().
01005 {
01006 XSetForeground( dc->display , dc->myGC , dc->ovc->pix_ov[nov] ) ;
01007 return ;
01008 }
|
|
Definition at line 1016 of file display.c. References MCW_DC::display, and MCW_DC::myGC. Referenced by drawGraf(), GRAF_drawing_EV(), ISQ_button2_EV(), and redraw_MCW_pasgraf().
01017 {
01018 XSetForeground( dc->display , dc->myGC , pix ) ;
01019 return ;
01020 }
|
|
Definition at line 1022 of file display.c. References any_col, MCW_DC::colormap, MCW_DC::display, MCW_DC::myGC, and rgb_col.
01023 { 01024 XColor any_col , rgb_col ; 01025 01026 if( ! XAllocNamedColor( dc->display , dc->colormap , 01027 cname , &any_col, &rgb_col ) ){ 01028 01029 fprintf(stderr,"\n** XAllocNamedColor problem: %s **\n",cname ) ; 01030 } else { 01031 XSetForeground( dc->display , dc->myGC , any_col.pixel ) ; 01032 } 01033 return ; 01034 } |
|
Definition at line 706 of file display.c. References abs, MCW_DCOV::b_ov, DC_find_overlay_color(), DC_parse_color(), MCW_DCOV::g_ov, MCW_DCOV::ncol_ov, MCW_DC::ovc, and MCW_DCOV::r_ov. Referenced by AFNI_make_surface_widgets(), AFNI_make_widgets(), and AFNI_update_surface_widgets().
00707 { 00708 float rr,gg,bb ; int b_rr,b_gg,b_bb ; 00709 int ii , jj; 00710 00711 if( dc == NULL || cname == NULL || *cname == '\0' ) return -1 ; 00712 00713 ii = DC_find_overlay_color( dc , cname ) ; 00714 if( ii >= 0 ) return ii ; 00715 00716 ii = DC_parse_color( dc, cname, &rr,&gg,&bb ) ; 00717 if( ii ) return -1 ; 00718 00719 b_rr = (int)(255.9*rr) ; 00720 b_gg = (int)(255.9*gg) ; 00721 b_bb = (int)(255.9*bb) ; 00722 00723 jj = 0 ; rr = 9999999.9 ; 00724 for( ii=0 ; ii < dc->ovc->ncol_ov ; ii++ ){ 00725 gg = abs(b_rr-(int)dc->ovc->r_ov[ii]) 00726 +abs(b_gg-(int)dc->ovc->g_ov[ii]) 00727 +abs(b_bb-(int)dc->ovc->b_ov[ii]) ; 00728 if( gg < rr ){ jj = ii ; rr = gg ; } 00729 } 00730 00731 return jj ; 00732 } |
|
free old cell stuff * Definition at line 695 of file display.c. References MCW_DCOV::label_ov, MCW_DCOV::ncol_ov, and MCW_DC::ovc. Referenced by AFNI_drive_open_window(), AFNI_drive_set_pbar_all(), AFNI_process_setup(), AFNI_startup_layout_CB(), DC_find_closest_overlay_color(), open_MCW_imseq(), and TTRR_load_file().
|
|
Definition at line 856 of file display.c. References abs, CLIP_INTEN, DC_set_image_colors(), i, nc, MCW_DC::ncol_im, MCW_DC::use_xcol_im, xc, MCW_DC::xgry_im, and MCW_DC::xint_im. Referenced by DC_palette_bright(), and ISQ_drawing_EV().
00857 { 00858 register int i, k, delta ; 00859 int nc = dc->ncol_im ; 00860 XColor * xc = dc->xgry_im ; 00861 int * in = dc->xint_im ; 00862 00863 if( dc->use_xcol_im ) return ; 00864 00865 delta = dlev * abs( (in[nc-1] - in[0]) / nc ) ; 00866 00867 for( i=0 ; i < nc ; i++ ){ 00868 k = in[i] += delta ; 00869 xc[i].red = xc[i].green = xc[i].blue = CLIP_INTEN(k) ; 00870 } 00871 DC_set_image_colors( dc ) ; /* 22 Aug 1998 */ 00872 return ; 00873 } |
|
Definition at line 915 of file display.c. References abs, CLIP_INTEN, DC_set_image_colors(), i, nc, MCW_DC::ncol_im, MCW_DC::use_xcol_im, xc, MCW_DC::xgry_im, and MCW_DC::xint_im. Referenced by ISQ_drawing_EV().
00916 { 00917 register int i, k, bdelta,cdelta ; 00918 int nc = dc->ncol_im ; 00919 XColor * xc = dc->xgry_im ; 00920 int * in = dc->xint_im ; 00921 00922 if( dc->use_xcol_im ) return ; 00923 00924 bdelta = dlev * abs(in[nc-1] - in[0]) / nc ; 00925 cdelta = dlev * (abs(in[nc-1] - in[0]) >> 6) / nc ; 00926 if( cdelta == 0 ) cdelta = dlev ; 00927 00928 for( i=0 ; i < nc ; i++ ){ 00929 k = in[i] += i * cdelta - bdelta ; 00930 xc[i].red = xc[i].green = xc[i].blue = CLIP_INTEN(k) ; 00931 } 00932 DC_set_image_colors( dc ) ; 00933 return ; 00934 } |
|
Definition at line 893 of file display.c. References abs, CLIP_INTEN, DC_set_image_colors(), i, nc, MCW_DC::ncol_im, MCW_DC::use_xcol_im, xc, MCW_DC::xgry_im, and MCW_DC::xint_im. Referenced by DC_palette_squeeze().
00894 { 00895 register int i, k, delta ; 00896 int nc = dc->ncol_im ; 00897 XColor * xc = dc->xgry_im ; 00898 int * in = dc->xint_im ; 00899 00900 if( dc->use_xcol_im ) return ; 00901 00902 delta = dlev * (abs(in[nc-1] - in[0]) >> 6) / nc ; 00903 if( delta == 0 ) delta = dlev ; 00904 00905 for( i=0 ; i < nc ; i++ ){ 00906 k = in[i] += i * delta ; 00907 xc[i].red = xc[i].green = xc[i].blue = CLIP_INTEN(k) ; 00908 } 00909 DC_set_image_colors( dc ) ; /* 22 Aug 1998 */ 00910 return ; 00911 } |
|
Definition at line 535 of file display.c. References a2, BYTE_TO_INTEN, c, gamm, MCW_DC::gamma, i, MIN, mypow(), nc, MCW_DC::ncol_im, MCW_DC::pix_im, r, sb, MCW_DC::visual_class, and MCW_DC::xcol_im. Referenced by DC_palette_restore(), and MCW_new_DC().
00536 { 00537 double da, an, c, s, sb, cb, ak, ab , a1,a2 , gamm ; 00538 int i, r, g, b , nc ; 00539 00540 a1 = 0.0 ; /* range of spectrum -- hardwired for now */ 00541 a2 = 240.0 ; 00542 00543 nc = dc->ncol_im ; 00544 gamm = dc->gamma ; 00545 00546 ak = 105.; s = 150.; c = s/60.; 00547 ab = 65.; sb = 190.; cb = s/60.; 00548 00549 an = a1; da = (a2 - a1)/nc ; an = an-da+360.; 00550 00551 for( i=0 ; i < nc ; i++ ){ 00552 00553 an += da; an = fmod(an,360.); 00554 00555 if((an >= 0) && (an < 120.)) { 00556 r = 255.*mypow((ak + MIN(s,(120. - an)*c))/255., gamm) +.5; 00557 g = 255.*mypow((ak + MIN(s,an*c))/255., gamm) +.5; 00558 b = 0; 00559 } else if((an >= 120.) && (an < 240.)) { 00560 r = 0; 00561 g = 255.*mypow((ak + MIN(s ,(240. - an)*c))/255., gamm) +.5; 00562 b = 255.*mypow((ab + MIN(sb,(an - 120.)*cb))/255., gamm) +.5; 00563 } else if(an >= 240.) { 00564 r = 255.*mypow((ak + MIN(s,(an - 240.)*c))/255., gamm) +.5; 00565 g = 0; 00566 b = 255.*mypow((ak + MIN(s,(360. - an)*c))/255., gamm) +.5; 00567 } 00568 dc->xcol_im[i].red = BYTE_TO_INTEN(r) ; 00569 dc->xcol_im[i].green = BYTE_TO_INTEN(g) ; 00570 dc->xcol_im[i].blue = BYTE_TO_INTEN(b) ; 00571 dc->xcol_im[i].flags = DoRed|DoGreen|DoBlue; 00572 00573 if( dc->visual_class == PseudoColor ) /* 22 Aug 1998 */ 00574 dc->xcol_im[i].pixel = dc->pix_im[i]; 00575 } 00576 return ; 00577 } |
|
Definition at line 393 of file display.c. References a, BYTE_TO_INTEN, gamm, MCW_DC::gamma, getenv(), i, nc, MCW_DC::ncol_im, MCW_DC::pix_im, strtod(), MCW_DC::visual_class, MCW_DC::xgry_im, and MCW_DC::xint_im. Referenced by DC_palette_restore(), and MCW_new_DC().
00394 { 00395 int i, k, m, nc ; 00396 float a , gamm , b ; 00397 00398 char * env ; /* 11 Apr 2000 */ 00399 float atop=255.0 , abot=55.0 ; 00400 00401 #if 0 00402 env = getenv("AFNI_GRAYSCALE_TOP") ; 00403 if( env != NULL ){ 00404 float val = strtod(env,NULL) ; 00405 if( val <= 255.0 && val >= 100.0 ) atop = val ; 00406 } 00407 #endif 00408 00409 env = getenv("AFNI_GRAYSCALE_BOT") ; 00410 if( env != NULL ){ 00411 float val = strtod(env,NULL) ; 00412 if( val < atop && val >= 0.0 ) abot = val ; 00413 } 00414 00415 nc = dc->ncol_im ; 00416 gamm = dc->gamma ; 00417 a = (atop-abot) / nc ; 00418 00419 for (i=0; i < nc ; i++) { 00420 b = log( (a*i+abot)/255.0 ) ; /* The code that used to be here */ 00421 b = exp( gamm * b ) ; /* (using pow) was replaced due */ 00422 k = (int)( 255.0 * b + 0.5 ) ; /* to some bug in gcc on Linux. */ 00423 00424 m = BYTE_TO_INTEN(k) ; 00425 00426 dc->xint_im[i] = m ; 00427 dc->xgry_im[i].red = m ; 00428 dc->xgry_im[i].green = m ; 00429 dc->xgry_im[i].blue = m ; 00430 dc->xgry_im[i].flags = DoRed|DoGreen|DoBlue; 00431 00432 if( dc->visual_class == PseudoColor ) /* 22 Aug 1998 */ 00433 dc->xgry_im[i].pixel = dc->pix_im[i]; 00434 } 00435 00436 return ; 00437 } |
|
|
|
Definition at line 1048 of file display.c. References MCW_DC::display, and MCW_DC::myGC.
01049 {
01050 XGCValues gcv ;
01051 gcv.line_style = lw ;
01052 XChangeGC( dc->display , dc->myGC , GCLineStyle , &gcv ) ;
01053 return ;
01054 }
|
|
Definition at line 1036 of file display.c. References MCW_DC::display, and MCW_DC::myGC. Referenced by draw_grids(), drawGraf(), erase_fdw(), GRA_overlay_circle(), ISQ_button2_EV(), plot_graphs(), and redraw_graph().
01037 { 01038 XGCValues gcv ; 01039 01040 if( lw >= 0 ){ 01041 gcv.line_width = lw ; 01042 gcv.join_style = JoinBevel ; 01043 XChangeGC( dc->display , dc->myGC , GCLineWidth | GCJoinStyle , &gcv ) ; 01044 } 01045 return ; 01046 } |
|
Definition at line 827 of file display.c. References DC_color_bright(), DC_gray_change(), and MCW_DC::use_xcol_im. Referenced by ISQ_arrow_CB().
00828 { 00829 if( dc->use_xcol_im ) DC_color_bright( dc , dd ) ; 00830 else DC_gray_change( dc , -2*dd ) ; 00831 return; 00832 } |
|
Definition at line 371 of file display.c. References DC_init_im_col(), DC_init_im_gry(), DC_set_image_colors(), MCW_DC::gamma, and MCW_DC::gamma_init. Referenced by ISQ_arrow_CB(), and ISQ_but_cnorm_CB().
00372 { 00373 dc->gamma = (new_gamma > 0 ) ? new_gamma : dc->gamma_init ; 00374 DC_init_im_col( dc ) ; 00375 DC_init_im_gry( dc ) ; 00376 DC_set_image_colors( dc ) ; /* 22 Aug 1998 */ 00377 } |
|
Definition at line 758 of file display.c. References DC_set_image_colors(), i, load_tmp_colors(), nc, MCW_DC::ncol_im, tmp1, tmp2, tmp3, tmpi, MCW_DC::use_xcol_im, xc, MCW_DC::xcol_im, MCW_DC::xgry_im, and MCW_DC::xint_im. Referenced by ISQ_arrow_CB().
00759 { 00760 register int i , j , nc , k ; 00761 XColor * xc ; 00762 00763 nc = dc->ncol_im ; 00764 00765 if( dc->use_xcol_im ){ 00766 xc = & ( dc->xcol_im[0] ) ; /* choose active palette */ 00767 k = -kk ; /* direction of rotation */ 00768 } else { 00769 xc = & ( dc->xgry_im[0] ) ; 00770 k = -kk ; 00771 } 00772 00773 load_tmp_colors( nc , xc ) ; /* store RGB values in tmp? */ 00774 00775 for( i=0 ; i < nc ; i++ ){ 00776 j = (i+nc+k) % nc ; 00777 00778 xc[i].red = tmp1[j] ; 00779 xc[i].green = tmp2[j] ; 00780 xc[i].blue = tmp3[j] ; 00781 } 00782 00783 if( ! dc->use_xcol_im ){ /* rotate xint_im as well for graymap */ 00784 for( i=0 ; i < nc ; i++ ) tmpi[i] = dc->xint_im[i] ; 00785 for( i=0 ; i < nc ; i++ ) dc->xint_im[i] = tmpi[(i+nc+k)%nc] ; 00786 } 00787 00788 DC_set_image_colors( dc ) ; /* 22 Aug 1998 */ 00789 return ; 00790 } |
|
Definition at line 360 of file display.c. References DC_set_image_colors(), and MCW_DC::use_xcol_im. Referenced by ISQ_but_color_CB().
00361 { 00362 dc->use_xcol_im = True ; 00363 DC_set_image_colors( dc ) ; /* 22 Aug 1998 */ 00364 return ; 00365 } |
|
07 Aug 1998: get more information about the visual * Definition at line 349 of file display.c. References DC_set_image_colors(), and MCW_DC::use_xcol_im. Referenced by ISQ_but_color_CB().
00350 { 00351 dc->use_xcol_im = False ; 00352 DC_set_image_colors( dc ) ; /* 22 Aug 1998 */ 00353 return ; 00354 } |
|
Definition at line 877 of file display.c. References DC_color_squeeze(), DC_gray_contrast(), and MCW_DC::use_xcol_im. Referenced by ISQ_arrow_CB().
00878 { 00879 if( dc->use_xcol_im ) DC_color_squeeze( dc , dd ) ; 00880 else DC_gray_contrast( dc , -2*dd ) ; 00881 return; 00882 } |
|
Definition at line 794 of file display.c. References DC_set_image_colors(), i, load_tmp_colors(), nc, MCW_DC::ncol_im, tmp1, tmp2, tmp3, tmpi, MCW_DC::use_xcol_im, xc, MCW_DC::xcol_im, MCW_DC::xgry_im, and MCW_DC::xint_im. Referenced by ISQ_but_cswap_CB().
00795 { 00796 register int i, k , nc ; 00797 XColor * xc ; 00798 00799 nc = dc->ncol_im ; 00800 k = nc - 1 ; 00801 00802 if( dc->use_xcol_im ){ 00803 xc = & ( dc->xcol_im[0] ) ; 00804 } else { 00805 xc = & ( dc->xgry_im[0] ) ; 00806 } 00807 00808 load_tmp_colors( nc , xc ) ; 00809 00810 for(i=0; i < nc ; i++) { 00811 xc[i].red = tmp1[k-i]; 00812 xc[i].green = tmp2[k-i]; 00813 xc[i].blue = tmp3[k-i]; 00814 } 00815 00816 if( ! dc->use_xcol_im ){ /* swap xint_im as well for graymap */ 00817 for( i=0 ; i < nc ; i++ ) tmpi[i] = dc->xint_im[i] ; 00818 for( i=0 ; i < nc ; i++ ) dc->xint_im[i] = tmpi[k-i] ; 00819 } 00820 00821 DC_set_image_colors( dc ) ; /* 22 Aug 1998 */ 00822 return ; 00823 } |
|
Definition at line 1578 of file display.c. References rgbyte::b, MCW_DC::colormap, DC_spectrum_AJJ(), MCW_DC::display, rgbyte::g, and rgbyte::r. Referenced by AFNI_brick_to_mri(), DC_find_closest_overlay_color(), ISQ_getmemplot(), ISQ_plot_label(), PBAR_define_bigmap(), and PBAR_read_bigmap().
01579 { 01580 XColor cell ; int ok ; 01581 01582 if( str == NULL || *str == '\0' ) return 1 ; 01583 01584 if( strncmp(str,"AJJ:",4) == 0 ){ /* 07 Feb 2003 */ 01585 float ang=-6666.0 ; 01586 sscanf(str+4,"%f",&ang) ; 01587 if( ang != -6666.0 ){ 01588 rgbyte col = DC_spectrum_AJJ( ang , 0.8 ) ; 01589 *rr = col.r / 255.0 ; 01590 *gg = col.g / 255.0 ; 01591 *bb = col.b / 255.0 ; 01592 return 0 ; 01593 } 01594 return 1 ; 01595 } 01596 01597 ok = XParseColor( dc->display , dc->colormap , str, &cell ) ; 01598 if( ok ){ 01599 *rr = cell.red / 65535.0 ; 01600 *gg = cell.green / 65535.0 ; 01601 *bb = cell.blue / 65535.0 ; 01602 return 0 ; 01603 } 01604 return 1 ; 01605 } |
|
Definition at line 1531 of file display.c. References DC_colordef::bb, DC_colordef::bbmask, DC_colordef::bbshift, MCW_DC::cdef, DC_colordef::classKRH, DC_colordef::gg, DC_colordef::ggmask, DC_colordef::ggshift, r, reload_DC_colordef(), DC_colordef::rr, DC_colordef::rrmask, DC_colordef::rrshift, and DC_colordef::whpix. Referenced by DCpix_to_XColor(), ISQ_make_image(), and ISQ_make_montage().
01533 { 01534 DC_colordef * cd = dc->cdef ; 01535 01536 if( cd == NULL ){ reload_DC_colordef(dc) ; cd = dc->cdef ; } 01537 01538 switch( cd->classKRH ){ 01539 01540 /*--- TrueColor case: unmake color by appropriate bit twiddling ---*/ 01541 01542 case TrueColor:{ 01543 unsigned long r , g , b ; 01544 01545 if( ppp == 0 ){ *rr = *bb = *gg = 0 ; return ; } /* common cases */ 01546 if( ppp == cd->whpix ){ *rr = *bb = *gg = 255 ; return ; } 01547 01548 r = ppp & cd->rrmask ; 01549 *rr = (cd->rrshift<0) ? (r>>(-cd->rrshift)) : (r<<cd->rrshift) ; 01550 01551 g = ppp & cd->ggmask ; 01552 *gg = (cd->ggshift<0) ? (g>>(-cd->ggshift)) : (g<<cd->ggshift) ; 01553 01554 b = ppp & cd->bbmask ; 01555 *bb = (cd->bbshift<0) ? (b>>(-cd->bbshift)) : (b<<cd->bbshift) ; 01556 01557 return ; 01558 } 01559 01560 /*--- PseudoColor case: extract from colormap ---*/ 01561 01562 case PseudoColor:{ 01563 int ii = (int) ppp ; 01564 *rr = cd->rr[ii] ; *gg = cd->gg[ii] ; *bb = cd->bb[ii] ; return ; 01565 } 01566 } 01567 01568 return ; 01569 } |
|
Definition at line 1438 of file display.c. References abs, DC_rgb_to_pixel(), DCOV_BLUEBYTE, DCOV_GREENBYTE, DCOV_REDBYTE, MCW_DCOV::ncol_ov, MCW_DC::ovc, and MCW_DCOV::pix_ov.
01439 { 01440 static MCW_DC * dcold=NULL ; 01441 static Pixel pold=0 ; 01442 static int rold=0,gold=0,bold=0 ; 01443 int ii , rdif,gdif,bdif,dif , ibest,dbest ; 01444 01445 if( rr == gg && rr == bb ) return DC_rgb_to_pixel(dc,rr,gg,bb) ; 01446 01447 if( dc == NULL || dc->ovc == NULL || dc->ovc->ncol_ov == 0 ) return 0 ; 01448 01449 if( dc == dcold ){ /* check if we just saw this */ 01450 rdif = rold - rr ; 01451 gdif = gold - gg ; 01452 bdif = bold - bb ; 01453 dif = RW*abs(rdif)+GW*abs(gdif)+BW*abs(bdif) ; 01454 if( dif <= RGBSUM ) return pold ; 01455 } 01456 01457 rold = rr ; gold = gg ; bold = bb ; dcold = dc ; /* remember for next time */ 01458 01459 rdif = DCOV_REDBYTE(dc,0) - rr ; 01460 gdif = DCOV_GREENBYTE(dc,0) - gg ; 01461 bdif = DCOV_BLUEBYTE(dc,0) - bb ; 01462 dif = RW*abs(rdif)+GW*abs(gdif)+BW*abs(bdif) ; 01463 if( dif <= RGBSUM ){ pold = dc->ovc->pix_ov[0] ; return pold ; } 01464 01465 ibest = 0 ; dbest = dif ; 01466 for( ii=1 ; ii < dc->ovc->ncol_ov ; ii++ ){ 01467 rdif = DCOV_REDBYTE(dc,ii) - rr ; 01468 gdif = DCOV_GREENBYTE(dc,ii) - gg ; 01469 bdif = DCOV_BLUEBYTE(dc,ii) - bb ; 01470 dif = RW*abs(rdif)+GW*abs(gdif)+BW*abs(bdif) ; 01471 if( dif <= RGBSUM ){ pold = dc->ovc->pix_ov[ii] ; return pold ; } 01472 if( dif < dbest ){ ibest = ii ; dbest = dif ; } 01473 } 01474 pold = dc->ovc->pix_ov[ibest] ; return pold ; 01475 } |
|
Definition at line 1481 of file display.c. References abs, MCW_DCOV::bright_ov, BRIGHTNESS, DCOV_BLUEBYTE, DCOV_GREENBYTE, DCOV_REDBYTE, MCW_DCOV::ncol_ov, and MCW_DC::ovc. Referenced by RCREND_draw_CB(), and REND_draw_CB().
01483 { 01484 int jj,jtop,ii , rdif,gdif,bdif,dif , ibest,dbest ; 01485 byte rr=*rrin , gg=*ggin , bb=*bbin , mm , rt,gt,bt , rtbest,gtbest,btbest; 01486 float brig , fac ; 01487 01488 if( rr == gg && rr == bb ) return ; /* if grayscale, is OK */ 01489 01490 if( dc == NULL || dc->ovc == NULL || dc->ovc->ncol_ov == 0 ) return ; 01491 01492 /* start with the gray color with the same brightness */ 01493 01494 brig = BRIGHTNESS(rr,gg,bb) ; mm = (byte)(brig + 0.499) ; 01495 dbest = RW*abs(mm-rr)+GW*abs(mm-gg)+BW*abs(mm-bb) ; /* diff from gray */ 01496 if( dbest <= RGBSUM ){ 01497 *rrin = *ggin = *bbin = mm ; return ; 01498 } 01499 ibest = 0 ; rtbest = gtbest = btbest = mm ; 01500 01501 /* now check the colors in the list given, or the entire set if no list */ 01502 01503 jtop = (nlist > 0) ? nlist : dc->ovc->ncol_ov ; 01504 for( jj=0 ; jj < jtop ; jj++ ){ 01505 ii = (nlist > 0) ? list[jj] : jj ; 01506 if( ii <= 0 || ii >= dc->ovc->ncol_ov || dc->ovc->bright_ov[ii] <= 0.0 ) continue ; 01507 01508 rt = DCOV_REDBYTE(dc,ii) ; gt = DCOV_GREENBYTE(dc,ii) ; bt = DCOV_BLUEBYTE(dc,ii) ; 01509 if( shade ){ 01510 fac = brig / dc->ovc->bright_ov[ii] ; 01511 rt = (byte)( fac*rt + 0.499 ) ; 01512 gt = (byte)( fac*gt + 0.499 ) ; 01513 bt = (byte)( fac*bt + 0.499 ) ; 01514 } 01515 dif = RW*abs(rt-rr)+GW*abs(gt-gg)+BW*abs(bt-bb) ; 01516 if( dif <= RGBSUM ){ 01517 *rrin = rt ; *ggin = gt ; *bbin = bt ; return ; 01518 } 01519 if( dif < dbest ){ 01520 ibest = ii ; dbest = dif ; rtbest = rt ; gtbest = gt ; btbest = bt ; 01521 } 01522 } 01523 01524 *rrin = rtbest ; *ggin = gtbest ; *bbin = btbest ; return ; 01525 } |
|
Definition at line 1344 of file display.c. References abs, DC_colordef::bb, DC_colordef::bbmask, DC_colordef::bbshift, MCW_DC::cdef, DC_colordef::classKRH, DC_colordef::gg, DC_colordef::ggmask, DC_colordef::ggshift, DC_colordef::nblack, DC_colordef::ncolors, DC_colordef::nwhite, r, reload_DC_colordef(), DC_colordef::rr, DC_colordef::rrmask, DC_colordef::rrshift, and DC_colordef::whpix. Referenced by DC_rgb_to_ovpix(), and rgb_to_XImage_clever().
01345 { 01346 static MCW_DC * dcold=NULL ; 01347 DC_colordef * cd = dc->cdef ; 01348 01349 if( cd == NULL ){ reload_DC_colordef(dc) ; cd = dc->cdef ; } 01350 01351 switch( cd->classKRH ){ 01352 01353 /*--- TrueColor case: make color by appropriate bit twiddling ---*/ 01354 01355 case TrueColor:{ 01356 static unsigned long pold=0 ; 01357 static byte rold=0 , gold=0 , bold=0 ; 01358 unsigned long r , g , b ; 01359 01360 if( rr == 0 && gg == 0 && bb == 0 ) return 0 ; /* common */ 01361 if( rr == 255 && gg == 255 && bb == 255 ) return cd->whpix ; /* cases */ 01362 01363 if( dc == dcold && rr == rold && gg == gold && bb == bold ) /* Remembrance of Things Past? */ 01364 return (Pixel) pold ; 01365 01366 rold = rr ; gold = gg ; bold = bb ; dcold = dc ; /* OK, remember for next time */ 01367 01368 r = (cd->rrshift<0) ? (rr<<(-cd->rrshift)) 01369 : (rr>>cd->rrshift) ; r = r & cd->rrmask ; 01370 01371 g = (cd->ggshift<0) ? (gg<<(-cd->ggshift)) 01372 : (gg>>cd->ggshift) ; g = g & cd->ggmask ; 01373 01374 b = (cd->bbshift<0) ? (bb<<(-cd->bbshift)) 01375 : (bb>>cd->bbshift) ; b = b & cd->bbmask ; 01376 01377 pold = r | g | b ; /* assemble color from components */ 01378 return (Pixel) pold ; 01379 } 01380 01381 /*--- PseudoColor case: find closest match in colormap. 01382 Red, green, and blue are weighted according 01383 to their importance to the human visual system. ---*/ 01384 01385 case PseudoColor:{ 01386 01387 #define RW 2 /* the weights alluded to above */ 01388 #define GW 4 01389 #define BW 1 01390 #define RGBSUM 4 /* max allowed difference */ 01391 01392 static int iold=0 , rold=0,gold=0,bold=0 ; 01393 int ii , rdif,gdif,bdif,dif , ibest,dbest ; 01394 01395 if( cd->nblack >= 0 && rr == 0 && gg == 0 && bb == 0 ) /* deal with */ 01396 return (Pixel) cd->nblack ; /* 2 special */ 01397 /* and common */ 01398 if( cd->nwhite >= 0 && rr == 255 && gg == 255 && bb == 255 ) /* cases */ 01399 return (Pixel) cd->nwhite ; 01400 01401 if( dc == dcold ){ 01402 rdif = rold - rr ; 01403 gdif = gold - gg ; 01404 bdif = bold - bb ; dif = RW*abs(rdif)+GW*abs(gdif)+BW*abs(bdif) ; 01405 if( dif <= RGBSUM ) return (Pixel) iold ; /* Remembrance of Things Past? */ 01406 } 01407 01408 rold = rr ; gold = gg ; bold = bb ; dcold = dc ; /* No? Remember for next time. */ 01409 01410 rdif = cd->rr[0] - rr ; 01411 gdif = cd->gg[0] - gg ; 01412 bdif = cd->bb[0] - bb ; dif = RW*abs(rdif)+GW*abs(gdif)+BW*abs(bdif) ; 01413 if( dif <= RGBSUM ){ iold = 0 ; return 0 ; } 01414 01415 ibest = 0 ; dbest = dif ; 01416 for( ii=1 ; ii < cd->ncolors ; ii++ ){ 01417 rdif = cd->rr[ii] - rr ; 01418 gdif = cd->gg[ii] - gg ; 01419 bdif = cd->bb[ii] - bb ; dif = RW*abs(rdif)+GW*abs(gdif)+BW*abs(bdif) ; 01420 if( dif <= RGBSUM ){ iold = ii ; return (Pixel) ii ; } 01421 if( dif < dbest ){ ibest = ii ; dbest = dif ; } 01422 } 01423 iold = ibest ; return (Pixel) ibest ; 01424 } 01425 } 01426 01427 /*--- Illegal case! ---*/ 01428 01429 return 0 ; /* always valid (but useless) */ 01430 } |
|
Definition at line 1125 of file display.c. References MCW_DC::b_im, BRIGHTNESS, MCW_DC::cdef, MCW_DC::colormap, MCW_DC::display, MCW_DC::g_im, INTEN_TO_BYTE, nc, MCW_DC::ncol_im, MCW_DC::pix_im, MCW_DC::pix_im_ready, MCW_DC::r_im, reload_DC_colordef(), MCW_DC::use_xcol_im, MCW_DC::visual_class, xc, MCW_DC::xcol_im, and MCW_DC::xgry_im. Referenced by DC_color_bright(), DC_gray_change(), DC_gray_conbrio(), DC_gray_contrast(), DC_palette_restore(), DC_palette_rotate(), DC_palette_setcolor(), DC_palette_setgray(), DC_palette_swap(), and MCW_new_DC().
01126 { 01127 int ii , nc ; 01128 XColor * xc ; 01129 01130 nc = dc->ncol_im ; 01131 xc = (dc->use_xcol_im) ? (dc->xcol_im) : (dc->xgry_im) ; 01132 01133 if( dc->visual_class == PseudoColor ){ /* actually change colormap */ 01134 01135 XStoreColors( dc->display , dc->colormap , xc , nc ) ; 01136 01137 #if 0 01138 if( dc->cdef != NULL ) reload_DC_colordef( dc ) ; /* 11 Feb 1999 */ 01139 #else 01140 /* FREE_DC_colordef(dc->cdef) ; */ 01141 #endif 01142 01143 } else if( dc->visual_class == TrueColor ){ /* change internal pixel array */ 01144 01145 for( ii=0 ; ii < nc ; ii++ ){ 01146 if( dc->pix_im_ready ) 01147 XFreeColors( dc->display, dc->colormap, dc->pix_im+ii, 1, 0 ) ; 01148 01149 XAllocColor( dc->display , dc->colormap , xc+ii ) ; 01150 dc->pix_im[ii] = xc[ii].pixel ; 01151 } 01152 dc->pix_im_ready = 1 ; 01153 01154 } 01155 01156 /* 06 Mar 2001: save RGB of colors into arrays for quick use later */ 01157 01158 for( ii=0 ; ii < nc ; ii++ ){ 01159 dc->r_im[ii] = INTEN_TO_BYTE( xc[ii].red ) ; 01160 dc->g_im[ii] = INTEN_TO_BYTE( xc[ii].green ) ; 01161 dc->b_im[ii] = INTEN_TO_BYTE( xc[ii].blue ) ; 01162 #if 0 01163 dc->gray_im[ii] = BRIGHTNESS( dc->r_im[ii] , dc->g_im[ii] , dc->b_im[ii] ) ; 01164 #endif 01165 } 01166 01167 return ; 01168 } |
|
Return a color from the spectrum. Input "an" is between 0 and 360. Adapted from Andrzej Jesmanowicz. -- 30 Jan 2003 - RWCox. ------------------------------------------------------------------------ Definition at line 487 of file display.c. References rgbyte::b, c, color, rgbyte::g, gamm, MAX, MIN, mypow(), rgbyte::r, r, and sb. Referenced by DC_parse_color(), and PBAR_add_bigmap().
00488 { 00489 int r,g,b , m ; 00490 double ak,ab,s,c,sb,cb ; 00491 rgbyte color ; 00492 00493 if( gamm <= 0.0 ) gamm = 1.0 ; 00494 00495 #if 0 00496 ak = 105.; s = 255.0-ak; c = s /60.; /* AJ's choices */ 00497 ab = 65.; sb = 255.0-ab; cb = sb/60.; 00498 #else 00499 ak = 5.; s = 255.0-ak; c = s /60.; /* RWC's choices */ 00500 ab = 5.; sb = 255.0-ab; cb = sb/60.; 00501 #endif 00502 00503 while( an < 0.0 ) an += 360.0 ; 00504 while( an > 360.0 ) an -= 360.0 ; 00505 00506 if( an < 120. ){ 00507 r = 255.*mypow((ak + MIN(s,(120. - an)*c))/255., gamm) +.5; 00508 g = 255.*mypow((ak + MIN(s,an*c))/255., gamm) +.5; 00509 m = MAX(r,g) ; 00510 b = 0; 00511 } else if( an < 240. ){ 00512 r = 0; 00513 g = 255.*mypow((ak + MIN(s ,(240. - an)*c ))/255., gamm) +.5; 00514 b = 255.*mypow((ab + MIN(sb,(an - 120.)*cb))/255., gamm) +.5; 00515 m = MAX(g,b) ; 00516 } else { 00517 r = 255.*mypow((ak + MIN(s,(an - 240.)*c ))/255., gamm) +.5; 00518 g = 0; 00519 b = 255.*mypow((ab + MIN(s,(360. - an)*cb))/255., gamm) +.5; 00520 m = MAX(r,b) ; 00521 } 00522 00523 #if 0 00524 if( m < 255 ){ s = 255.0/m ; r *= s ; g *= s ; b *= s ; } 00525 #endif 00526 00527 color.r = r ; color.g = g ; color.b = b ; return color ; 00528 } |
|
Return a color from the spectrum. Input "an" is between 0 and 360. Adapted from Ziad Saad. -- 01 Feb 2003 - RWCox. ------------------------------------------------------------------------ Definition at line 444 of file display.c. References rgbyte::b, color, rgbyte::g, gamm, MAX, mypow(), rgbyte::r, and r. Referenced by PBAR_add_bigmap().
00445 { 00446 int r,g,b , m ; 00447 rgbyte color ; 00448 00449 if( gamm <= 0.0 ) gamm = 1.0 ; 00450 00451 while( an < 0.0 ) an += 360.0 ; 00452 while( an > 360.0 ) an -= 360.0 ; 00453 00454 an = an / 90.0 ; 00455 00456 if( an <= 1.0 ){ 00457 r = 255.*mypow(1.0-an,gamm)+0.5 ; 00458 g = 255.*mypow(0.5*an,gamm)+0.5 ; 00459 b = 255.*mypow(an ,gamm)+0.5 ; 00460 } else if( an <= 2.0 ){ 00461 r = 0 ; 00462 g = 255.*mypow(0.5*an,gamm)+0.5 ; 00463 b = 255.*mypow(2.0-an,gamm)+0.5 ; 00464 } else if( an <= 3.0 ){ 00465 r = 255.*mypow(an-2.0,gamm)+0.5 ; 00466 g = 255 ; 00467 b = 0 ; 00468 } else { 00469 r = 255 ; 00470 g = 255.*mypow(4.0-an,gamm)+0.5 ; 00471 b = 0 ; 00472 } 00473 00474 #if 0 00475 m = MAX(r,g) ; m = MAX(m,b) ; 00476 if( m < 255 ){ float s=255.0/m; r *= s; g *= s; b *= s; } 00477 #endif 00478 00479 color.r = r ; color.g = g ; color.b = b ; return color ; 00480 } |
|
Definition at line 1174 of file display.c. References MCW_DC::colormap, MCW_DC::depth, MCW_DC::screen, and MCW_DC::visual. Referenced by AFNI_make_surface_widgets(), DRAW_make_widgets(), ISQ_but_disp_CB(), ISQ_montage_CB(), new_MCW_grapher(), NOTES_make_widgets(), NUD_make_widgets(), open_MCW_imseq(), PLUG_setup_widgets(), RCREND_make_widgets(), REND_make_widgets(), TAG_make_widgets(), and TTRR_setup_widgets().
01175 { 01176 if( w == NULL || dc == NULL || !XtIsWidget(w) ) return ; 01177 01178 XtVaSetValues( w , 01179 XmNvisual , dc->visual , 01180 XmNcolormap , dc->colormap , 01181 XmNdepth , dc->depth , 01182 XmNscreen , dc->screen , 01183 XmNbackground , 0 , 01184 XmNborderColor , 0 , 01185 NULL ) ; 01186 return ; 01187 } |
|
elementary checks * Definition at line 974 of file display.c. References BYTE_TO_INTEN, DC_pixel_to_rgb(), MCW_DC::ncol_im, MCW_DCOV::ncol_ov, MCW_DC::ovc, MCW_DC::pix_im, MCW_DCOV::pix_ov, MCW_DC::use_xcol_im, xc, MCW_DC::xcol_im, MCW_DCOV::xcol_ov, and MCW_DC::xgry_im. Referenced by XImage_to_mri().
00975 { 00976 XColor * ulc , * ovc ; 00977 int ii ; 00978 00979 if( use_cmap ){ /* 11 Feb 1999 */ 00980 static XColor xc ; 00981 byte rr,gg,bb ; 00982 00983 DC_pixel_to_rgb( dc , pp , &rr,&gg,&bb ) ; 00984 xc.red = BYTE_TO_INTEN(rr) ; 00985 xc.green = BYTE_TO_INTEN(gg) ; 00986 xc.blue = BYTE_TO_INTEN(bb) ; 00987 return &xc ; 00988 } 00989 00990 ulc = (dc->use_xcol_im) ? dc->xcol_im : dc->xgry_im ; 00991 ovc = dc->ovc->xcol_ov ; 00992 00993 for( ii=0 ; ii < dc->ncol_im ; ii++ ) 00994 if( pp == dc->pix_im[ii] ) return (ulc+ii) ; 00995 00996 for( ii=0 ; ii < dc->ovc->ncol_ov ; ii++ ) 00997 if( pp == dc->ovc->pix_ov[ii] ) return (ovc+ii) ; 00998 00999 return ulc ; /* not found, but must return something */ 01000 } |
|
Referenced by DC_palette_rotate(), and DC_palette_swap(). |
|
Definition at line 938 of file display.c. References MCW_DC::display, and MCW_DC::screen.
00939 { 00940 int ii ; 00941 Boolean good ; 00942 int nsl = 0 ; 00943 XIconSize * xsl = NULL ; 00944 00945 /** elementary checks **/ 00946 00947 if( width < 1 || height < 1 ) return False ; 00948 00949 XGetIconSizes( dc->display , RootWindowOfScreen(dc->screen) , &xsl , &nsl ) ; 00950 00951 if( xsl == NULL || nsl < 1 ) return True ; 00952 00953 good = False ; 00954 00955 for( ii=0 ; ii < nsl ; ii++ ){ 00956 00957 if( width >= xsl[ii].min_width && width <= xsl[ii].max_width && 00958 height >= xsl[ii].min_height && height <= xsl[ii].max_height && 00959 00960 (width - xsl[ii].min_width ) % xsl[ii].width_inc == 0 && 00961 (height - xsl[ii].min_height) % xsl[ii].height_inc == 0 ) { good = True ; break ; } 00962 } 00963 00964 XFree(xsl) ; 00965 return good ; 00966 } |
|
Definition at line 80 of file display.c. References MCW_DC::appcontext, MCW_DC::aux, MCW_DCOV::b_ov, MCW_DCOV::bright_ov, MCW_DC::cdef, MCW_DC::colormap, DC_add_overlay_color(), DC_init_im_col(), DC_init_im_gry(), DC_set_image_colors(), MCW_DC::default_colormap, MCW_DC::depth, MCW_DC::display, MCW_DC::does_backingstore, MCW_DC::does_saveunders, ENTRY, MCW_DCOV::g_ov, MCW_DC::gamma, MCW_DC::gamma_init, MCW_DC::height, highbit(), MCW_DCOV::label_ov, mfinfo, MCW_DC::myFontStruct, MCW_DC::myGC, myXtNew, MCW_DCOV::name_ov, ncol, MCW_DC::ncol_im, MCW_DCOV::ncol_ov, nplmsk, MCW_DC::origGC, MCW_DC::ovc, OVC_mostest(), MCW_DC::parent, MCW_DC::parent_widget, MCW_DC::pix_im, MCW_DC::pix_im_ready, MCW_DCOV::pix_ov, MCW_DCOV::pixov_brightest, MCW_DCOV::pixov_darkest, plane_masks, MCW_DC::planes, MCW_DCOV::r_ov, reload_DC_colordef(), RETURN, MCW_DC::screen, MCW_DC::screen_num, setup_byper(), MCW_DC::use_xcol_im, MCW_DC::visual, MCW_DC::visual_bluemask, MCW_DC::visual_blueshift, MCW_DC::visual_class, MCW_DC::visual_greenmask, MCW_DC::visual_greenshift, MCW_DC::visual_id, MCW_DC::visual_info, MCW_DC::visual_redmask, MCW_DC::visual_redshift, MCW_DC::width, x11_vcl, MCW_DCOV::xcol_ov, and MCW_DC::xgry_im. Referenced by ISQ_snapfile(), main(), SNAP_make_dc(), and T3D_create_widgets().
00083 { 00084 MCW_DC * dc ; 00085 int ok , ii , new_ovc ; 00086 unsigned int nplmsk = 0 ; /* dummy arguments for XAllocColorCells */ 00087 unsigned long plane_masks[1] ; 00088 00089 ENTRY("MCW_new_DC") ; 00090 00091 if( ncol < 4 || novr < 0 || ncol > MAX_COLORS || novr > MAX_COLORS ){ 00092 fprintf(stderr,"\n*** MCW_new_DC: ILLEGAL number of colors: %d %d\n",ncol,novr) ; 00093 ncol = 4 ; novr = 0 ; 00094 } 00095 00096 dc = myXtNew(MCW_DC) ; 00097 00098 dc->appcontext = XtWidgetToApplicationContext( wid ) ; 00099 dc->display = XtDisplay( wid ) ; 00100 dc->screen = XtScreen( wid ) ; 00101 dc->screen_num = XScreenNumberOfScreen( dc->screen ) ; 00102 dc->visual = DefaultVisualOfScreen( dc->screen ) ; 00103 dc->origGC = DefaultGCOfScreen( dc->screen ) ; 00104 dc->planes = PlanesOfScreen( dc->screen ) ; 00105 dc->depth = DefaultDepthOfScreen( dc->screen ) ; 00106 00107 dc->cdef = NULL ; /* 11 Feb 1999: will be loaded later */ 00108 00109 setup_byper(dc) ; /* 23 Aug 1998 */ 00110 00111 dc->default_colormap = DefaultColormapOfScreen( dc->screen ) ; /* 01 Sep 1998 */ 00112 00113 dc->colormap = DefaultColormapOfScreen( dc->screen ) ; /* may be changed later */ 00114 00115 dc->parent_widget = wid ; /* 06 Oct 1996 */ 00116 00117 dc->does_backingstore = DoesBackingStore(dc->screen) ; /* 27 Feb 2001 */ 00118 dc->does_saveunders = DoesSaveUnders(dc->screen) ; 00119 00120 /** 07 Aug 1998: get more information about the visual **/ 00121 00122 { XVisualInfo vinfo , * vinfo_list ; 00123 int count ; 00124 00125 dc->visual_id = XVisualIDFromVisual( dc->visual ) ; 00126 vinfo.visualid = dc->visual_id ; 00127 vinfo_list = XGetVisualInfo(dc->display,VisualIDMask,&vinfo,&count) ; 00128 if( count > 0 && vinfo_list != NULL ){ 00129 dc->visual_info = vinfo_list ; 00130 dc->visual_redmask = dc->visual_info->red_mask ; 00131 dc->visual_greenmask = dc->visual_info->green_mask ; 00132 dc->visual_bluemask = dc->visual_info->blue_mask ; 00133 dc->visual_redshift = 7 - highbit(dc->visual_redmask) ; 00134 dc->visual_greenshift = 7 - highbit(dc->visual_greenmask) ; 00135 dc->visual_blueshift = 7 - highbit(dc->visual_bluemask) ; 00136 #if defined(__cplusplus) || defined(c_plusplus) 00137 dc->visual_class = dc->visual_info->c_class ; 00138 #else 00139 dc->visual_class = dc->visual_info->class ; 00140 #endif 00141 if( dc->visual_class != PseudoColor && 00142 dc->visual_class != TrueColor ){ 00143 00144 fprintf(stderr,"\n\n" 00145 " ** The default X11 visual type on your computer is set to %s.\n" 00146 " ** AFNI programs only work with PseudoColor or TrueColor visuals.\n" 00147 " ** You must have your superuser modify your system's setup.\a\n" , 00148 x11_vcl[dc->visual_class] ) ; 00149 00150 dc->visual_class = PseudoColor ; /* let the program fail later */ 00151 } 00152 00153 #if 0 00154 if( dc->visual_class == TrueColor ){ /* removed 28 Oct 1999 */ 00155 static int done = 0 ; 00156 if( !done ) 00157 fprintf(stderr, 00158 "\n" 00159 " ** The default X11 visual type on your computer is %d bit TrueColor.\n" 00160 " ** Support for this is experimental. AFNI was developed to use 4..12\n" 00161 " ** bit PseudoColor visuals for image display -- RW Cox, 22 Aug 1998.\n" , 00162 dc->depth ) ; 00163 done = 1 ; 00164 } 00165 #endif 00166 00167 #if 0 00168 fprintf(stderr,"\n" 00169 "DC: redmask=%lx greenmask=%lx bluemask=%lx\n" 00170 " redshift=%d greenshift=%d blueshift=%d\n" 00171 " class=%d=%s depth=%d\n", 00172 dc->visual_redmask , dc->visual_greenmask , dc->visual_bluemask , 00173 dc->visual_redshift , dc->visual_greenshift , dc->visual_blueshift , 00174 dc->visual_class , x11_vcl[dc->visual_class] , dc->depth ) ; 00175 #endif 00176 00177 } else { /* should never occur! */ 00178 dc->visual_info = NULL ; 00179 dc->visual_class = PseudoColor ; /* we hope */ 00180 } 00181 } 00182 00183 #if 0 00184 { long reqmax ; 00185 reqmax = XMaxRequestSize(dc->display) ; 00186 printf("max X11 request size = %d\n",reqmax) ; 00187 } 00188 #endif 00189 00190 #define DEPTH_BOT 4 00191 #define DEPTH_TOP 32 00192 00193 if( dc->depth < DEPTH_BOT || dc->depth > DEPTH_TOP ){ 00194 fprintf(stderr,"\n\n" 00195 " ** Your X11 display is set to %d bitplanes for image display.\n" 00196 " ** AFNI programs can only deal with between %d and %d bitplanes.\n" 00197 " ** You must have your superuser modify your system's setup.\a\n" , 00198 dc->depth , DEPTH_BOT , DEPTH_TOP ) ; 00199 exit(1) ; 00200 } 00201 00202 dc->width = WidthOfScreen( dc->screen ) ; 00203 dc->height = HeightOfScreen( dc->screen ) ; 00204 00205 dc->ncol_im = ncol ; 00206 dc->gamma = dc->gamma_init = gam ; 00207 00208 if( dc->visual_class == PseudoColor ){ /* 22 Aug 1998 */ 00209 00210 if( newcmap ){ /* 14 Sep 1998 */ 00211 int ncold , cc ; 00212 XColor xcold ; 00213 00214 /* make a new colormap */ 00215 00216 dc->colormap = XCreateColormap( dc->display , RootWindowOfScreen(dc->screen) , 00217 dc->visual , AllocNone ) ; 00218 00219 /* allocate some colors from the old one (to reduce flashing) */ 00220 00221 #define NREUSE 9 00222 ncold = dc->visual_info->colormap_size ; 00223 if( ncold > NREUSE ) ncold = NREUSE ; 00224 for( cc=0 ; cc < ncold ; cc++ ){ 00225 xcold.pixel = cc ; 00226 XQueryColors( dc->display , dc->default_colormap , &xcold , 1 ) ; 00227 XAllocColor( dc->display , dc->colormap , &xcold ) ; 00228 } 00229 } 00230 00231 ok = XAllocColorCells( dc->display , dc->colormap , 00232 True , plane_masks , nplmsk , 00233 dc->pix_im , dc->ncol_im ) ; 00234 00235 if( ! ok ){ 00236 fprintf(stderr, 00237 "\a\n** XAllocColorCells fails for %d colors\n",dc->ncol_im) ; 00238 fprintf(stderr, 00239 "\n** try the -ncolor option to reduce # of colors\n"); 00240 exit(1) ; 00241 } 00242 00243 dc->pix_im_ready = 1 ; 00244 } else if( dc->visual_class == TrueColor ){ 00245 dc->pix_im_ready = 0 ; 00246 } 00247 00248 DC_init_im_col( dc ) ; 00249 DC_init_im_gry( dc ) ; 00250 00251 dc->use_xcol_im = False ; 00252 DC_set_image_colors( dc ) ; /* 22 Aug 1998: replaces XStoreColors */ 00253 00254 /* set up overlay colors from list of names 00255 (since the XImage routines use negative indices 00256 to indicate overlays, the 0th overlay color is not used) */ 00257 00258 /* Dec 1997: put all overlay stuff into a single place */ 00259 00260 new_ovc = 0 ; 00261 if( only_ovc == NULL ){ only_ovc = myXtNew(MCW_DCOV) ; new_ovc = 1 ; } 00262 dc->ovc = only_ovc ; 00263 00264 if( new_ovc ){ 00265 only_ovc->xcol_ov[0] = dc->xgry_im[0] ; 00266 only_ovc->pix_ov[0] = dc->pix_im[0] ; 00267 only_ovc->name_ov[0] = XtNewString("none") ; 00268 only_ovc->label_ov[0] = only_ovc->name_ov[0] ; 00269 only_ovc->ncol_ov = 1 ; 00270 00271 only_ovc->bright_ov[0] = 0.0 ; /* 20 Dec 1999 */ 00272 00273 dc->ovc->r_ov[0] = 0 ; /* 04 Mar 2002 */ 00274 dc->ovc->g_ov[0] = 0 ; 00275 dc->ovc->b_ov[0] = 0 ; 00276 } 00277 00278 for( ii=0 ; ii < novr ; ii++ ){ 00279 00280 ok = DC_add_overlay_color( dc , covr[ii] , lovr[ii] ) ; 00281 00282 if( ok < 0 ) 00283 fprintf(stderr, 00284 "\n*** can't get X11 colormap entry for overlay color %s" , lovr[ii] ) ; 00285 #ifdef DISPLAY_DEBUG 00286 else { 00287 printf("\n*** overlay color %s has pixel %d at index %d" , 00288 dc->ovc->name_ov[ok] , (int)dc->ovc->pix_ov[ok] , ok ) ; 00289 fflush(stdout) ; 00290 } 00291 #endif 00292 } 00293 OVC_mostest( dc->ovc ) ; 00294 00295 /*-- May 1996: create new GC for use with text and graphics --*/ 00296 00297 { XGCValues gcv; 00298 int ifont ; 00299 XFontStruct * mfinfo = NULL ; 00300 char * xdef ; 00301 00302 gcv.function = GXcopy ; 00303 dc->myGC = XCreateGC( dc->display, 00304 RootWindowOfScreen(dc->screen) , 00305 GCFunction , &gcv ) ; 00306 00307 xdef = XGetDefault(dc->display,"AFNI","gfont") ; 00308 if( xdef != NULL ) 00309 mfinfo = XLoadQueryFont(dc->display,xdef) ; 00310 00311 if( mfinfo == NULL ){ 00312 for( ifont=0 ; tfont_hopefuls[ifont] != NULL ; ifont++ ){ 00313 mfinfo = XLoadQueryFont(dc->display, tfont_hopefuls[ifont]) ; 00314 if( mfinfo != NULL ) break ; 00315 } 00316 } 00317 if( mfinfo == NULL ){ 00318 fprintf(stderr, 00319 "\n*** Cannot load any text fonts in display.c ***\n" ) ; 00320 } else { 00321 XSetFont( dc->display , dc->myGC , mfinfo->fid ) ; 00322 } 00323 XSetForeground(dc->display , dc->myGC , dc->ovc->pixov_darkest ) ; 00324 XSetBackground(dc->display , dc->myGC , dc->ovc->pixov_brightest ) ; 00325 dc->myFontStruct = mfinfo ; 00326 } 00327 00328 dc->parent = dc->aux = NULL ; 00329 00330 #ifdef DISPLAY_DEBUG 00331 printf("\n") ; 00332 #endif 00333 00334 #if 0 00335 reload_DC_colordef( dc ) ; /* 11 Feb 1999 */ 00336 #else 00337 dc->cdef = NULL ; 00338 #endif 00339 00340 if( first_dc == NULL ) first_dc = dc ; /* 26 Jun 2003 */ 00341 00342 RETURN(dc) ; 00343 } |
|
Definition at line 1061 of file display.c. References MCW_DCOV::ncol_ov, MCW_DCOV::ov_bluest, MCW_DCOV::ov_brightest, MCW_DCOV::ov_darkest, MCW_DCOV::ov_greenest, MCW_DCOV::ov_reddest, MCW_DCOV::ov_yellowest, MCW_DCOV::pix_ov, MCW_DCOV::pixov_bluest, MCW_DCOV::pixov_brightest, MCW_DCOV::pixov_darkest, MCW_DCOV::pixov_greenest, MCW_DCOV::pixov_reddest, MCW_DCOV::pixov_yellowest, XCOL_BLUENESS, XCOL_BRIGHTNESS, XCOL_GREENNESS, MCW_DCOV::xcol_ov, XCOL_REDNESS, and XCOL_YELLOWNESS. Referenced by AFNI_drive_add_overlay_color(), AFNI_process_setup(), and MCW_new_DC().
01062 { 01063 float bright_inten , dark_inten , red_inten , green_inten , blue_inten , inten ; 01064 int bright_ii , dark_ii , red_ii , green_ii , blue_ii ; 01065 float yellow_inten ; 01066 int yellow_ii ; 01067 int ii ; 01068 01069 if( ovc == NULL || ovc->ncol_ov < 2 ) return ; 01070 01071 bright_inten = dark_inten = XCOL_BRIGHTNESS( ovc->xcol_ov[1] ) ; 01072 bright_ii = dark_ii = 1 ; 01073 01074 red_inten = XCOL_REDNESS ( ovc->xcol_ov[1] ) ; /* June 1997 */ 01075 green_inten = XCOL_GREENNESS( ovc->xcol_ov[1] ) ; 01076 blue_inten = XCOL_BLUENESS ( ovc->xcol_ov[1] ) ; 01077 red_ii = green_ii = blue_ii = 1 ; 01078 01079 yellow_ii = 1 ; 01080 yellow_inten = XCOL_YELLOWNESS( ovc->xcol_ov[1] ) ; /* 28 Jan 2004 */ 01081 01082 for( ii=2 ; ii < ovc->ncol_ov ; ii++ ){ 01083 inten = XCOL_BRIGHTNESS( ovc->xcol_ov[ii] ) ; 01084 if( inten > bright_inten ){ 01085 bright_inten = inten ; bright_ii = ii ; 01086 } else if( inten < dark_inten ){ 01087 dark_inten = inten ; dark_ii = ii ; 01088 } 01089 01090 inten = XCOL_REDNESS( ovc->xcol_ov[ii] ) ; 01091 if( inten > red_inten ){ 01092 red_inten = inten ; red_ii = ii ; 01093 } 01094 01095 inten = XCOL_GREENNESS( ovc->xcol_ov[ii] ) ; 01096 if( inten > green_inten ){ 01097 green_inten = inten ; green_ii = ii ; 01098 } 01099 01100 inten = XCOL_BLUENESS( ovc->xcol_ov[ii] ) ; 01101 if( inten > blue_inten ){ 01102 blue_inten = inten ; blue_ii = ii ; 01103 } 01104 01105 inten = XCOL_YELLOWNESS( ovc->xcol_ov[ii] ) ; 01106 if( inten > yellow_inten ){ 01107 yellow_inten = inten ; yellow_ii = ii ; 01108 } 01109 } 01110 ovc->ov_brightest = bright_ii ; ovc->pixov_brightest = ovc->pix_ov[bright_ii] ; 01111 ovc->ov_darkest = dark_ii ; ovc->pixov_darkest = ovc->pix_ov[dark_ii] ; 01112 ovc->ov_reddest = red_ii ; ovc->pixov_reddest = ovc->pix_ov[red_ii] ; 01113 ovc->ov_greenest = green_ii ; ovc->pixov_greenest = ovc->pix_ov[green_ii] ; 01114 ovc->ov_bluest = blue_ii ; ovc->pixov_bluest = ovc->pix_ov[blue_ii] ; 01115 ovc->ov_yellowest = yellow_ii ; ovc->pixov_yellowest = ovc->pix_ov[yellow_ii] ; 01116 } |
|
Definition at line 1193 of file display.c. References DC_colordef::bb, DC_colordef::bbmask, DC_colordef::bbshift, MCW_DC::cdef, DC_colordef::classKRH, MCW_DC::colormap, DC_colordef::depth, MCW_DC::display, ENTRY, free, FREE_DC_colordef, DC_colordef::gg, DC_colordef::ggmask, DC_colordef::ggshift, highbit(), malloc, DC_colordef::nblack, DC_colordef::ncolors, DC_colordef::nwhite, r, DC_colordef::rr, DC_colordef::rrmask, DC_colordef::rrshift, MCW_DC::visual_info, DC_colordef::whpix, and x11_vcl. Referenced by AFNI_splashup(), DC_pixel_to_rgb(), DC_rgb_to_pixel(), DC_set_image_colors(), ISQ_save_jpeg(), ISQ_saver_CB(), MCW_new_DC(), and tc_rgb_to_pixel().
01194 { 01195 XVisualInfo * vin ; 01196 DC_colordef * cd ; /* will be the output */ 01197 01198 ENTRY("reload_DC_colordef") ; 01199 01200 /*--- sanity check ---*/ 01201 01202 if( dc == NULL || dc->visual_info == NULL ){ 01203 fprintf(stderr,"reload_DC_colordef: entry values are NULL\n") ; 01204 EXRETURN ; 01205 } 01206 01207 vin = dc->visual_info ; 01208 01209 /*--- PseudoColor case ---*/ 01210 01211 #if defined(__cplusplus) || defined(c_plusplus) 01212 if( vin->c_class == PseudoColor ){ 01213 #else 01214 if( vin->class == PseudoColor ){ 01215 #endif 01216 01217 int iz , count , ii ; 01218 XColor * xcol ; 01219 01220 /* create output */ 01221 01222 cd = (DC_colordef *) malloc( sizeof(DC_colordef) ) ; 01223 cd->classKRH = PseudoColor ; 01224 cd->depth = vin->depth ; 01225 01226 /* get all the colors in the colormap */ 01227 01228 count = vin->colormap_size ; 01229 xcol = (XColor *) malloc( sizeof(XColor) * count ) ; 01230 for( ii=0 ; ii < count ; ii++ ) xcol[ii].pixel = ii ; 01231 01232 XQueryColors( dc->display , dc->colormap , xcol , count ) ; 01233 01234 /* store them in the output, truncated to 8 bit resolution */ 01235 01236 cd->ncolors = count ; 01237 cd->rr = (byte *) malloc( count ) ; 01238 cd->gg = (byte *) malloc( count ) ; 01239 cd->bb = (byte *) malloc( count ) ; 01240 01241 for( ii=0 ; ii < count ; ii++ ){ 01242 cd->rr[ii] = xcol[ii].red >> 8 ; 01243 cd->gg[ii] = xcol[ii].green >> 8 ; 01244 cd->bb[ii] = xcol[ii].blue >> 8 ; 01245 } 01246 01247 /* find a pure white color, if any */ 01248 01249 for( iz=0 ; iz < count ; iz++ ) 01250 if( cd->rr[iz] == 255 && cd->gg[iz] == 255 && cd->bb[iz] == 255 ) break ; 01251 01252 cd->nwhite = (iz < count) ? iz : -1 ; 01253 01254 /* find first all zero color; discard others at end of colormap */ 01255 01256 for( iz=0 ; iz < count ; iz++ ) 01257 if( cd->rr[iz] == 0 && cd->gg[iz] == 0 && cd->bb[iz] == 0 ) break ; 01258 01259 cd->nblack = (iz < count) ? iz : -1 ; 01260 01261 if( iz < count-1 ){ /* if found one before the end */ 01262 01263 for( ii=count-1 ; ii > iz ; ii-- ) /* scan backwards */ 01264 if( cd->rr[ii] != 0 || cd->gg[ii] != 0 || cd->bb[ii] != 0 ) break ; 01265 01266 count = ii+1 ; /* number of colors left */ 01267 01268 if( count == 1 ){ /* colormap is all black?! */ 01269 free(xcol) ; FREE_DC_colordef(cd) ; 01270 fprintf(stderr,"reload_DC_colordef: colormap is all black?\n") ; 01271 EXRETURN ; 01272 } 01273 01274 cd->ncolors = count ; 01275 } 01276 01277 FREE_DC_colordef(dc->cdef) ; /* if already present, kill it */ 01278 01279 free(xcol) ; dc->cdef = cd ; EXRETURN ; 01280 } 01281 01282 /*--- TrueColor case ---*/ 01283 01284 #if defined(__cplusplus) || defined(c_plusplus) 01285 if( vin->c_class == TrueColor ){ 01286 #else 01287 if( vin->class == TrueColor ){ 01288 #endif 01289 01290 unsigned long r , g , b ; 01291 byte rr, gg, bb ; 01292 01293 /* create output */ 01294 01295 cd = (DC_colordef *) malloc( sizeof(DC_colordef) ) ; 01296 cd->classKRH = TrueColor ; 01297 cd->depth = vin->depth ; 01298 01299 cd->rrmask = vin->red_mask ; /* bit masks for color */ 01300 cd->ggmask = vin->green_mask ; /* storage inside pixel */ 01301 cd->bbmask = vin->blue_mask ; 01302 cd->rrshift = 7 - highbit(cd->rrmask) ; /* shift puts high bit of */ 01303 cd->ggshift = 7 - highbit(cd->ggmask) ; /* a color byte into place */ 01304 cd->bbshift = 7 - highbit(cd->bbmask) ; /* +shift == >> ; - == << */ 01305 01306 /* compute the all white pixel as a common case */ 01307 01308 rr = gg = bb = 255 ; 01309 01310 r = (cd->rrshift<0) ? (rr<<(-cd->rrshift)) 01311 : (rr>>cd->rrshift) ; r = r & cd->rrmask ; 01312 01313 g = (cd->ggshift<0) ? (gg<<(-cd->ggshift)) 01314 : (gg>>cd->ggshift) ; g = g & cd->ggmask ; 01315 01316 b = (cd->bbshift<0) ? (bb<<(-cd->bbshift)) 01317 : (bb>>cd->bbshift) ; b = b & cd->bbmask ; 01318 01319 cd->whpix = r | g | b ; 01320 01321 cd->rr = cd->gg = cd->bb = NULL ; /* not used */ 01322 01323 FREE_DC_colordef(dc->cdef) ; /* if already present, kill it */ 01324 01325 dc->cdef = cd ; EXRETURN ; 01326 } 01327 01328 /*--- Illegal Visual class! [do nothing]---*/ 01329 01330 #if defined(__cplusplus) || defined(c_plusplus) 01331 fprintf(stderr,"reload_DC_colordef: illegal Visual class %s\n", 01332 x11_vcl[vin->c_class] ) ; 01333 #else 01334 fprintf(stderr,"reload_DC_colordef: illegal Visual class %s\n", 01335 x11_vcl[vin->class] ) ; 01336 #endif 01337 EXRETURN ; 01338 } |
Variable Documentation
|
|
|
Initial value: { "-adobe-courier-medium-r-normal--12-120-75-75-m-70-iso8859-1" , "-misc-fixed-medium-r-normal--13-100-100-100-c-70-iso8859-1" , "lucidasanstypewriter-10" , "7x14" , "6x13" , "fixed" , NULL } |