📄 color.c
字号:
for (j=0;j<theColorMaps[i]->size;j++) { if (i == 0 && theColorMaps[0]->colors[j].name == NULL) break; if (nColors >= MaxNColors) Errorf("BuildColormap() : Sorry too many colors allocated (max is %d)",MaxNColors); red[nColors] = theColorMaps[i]->colors[j].red; green[nColors] = theColorMaps[i]->colors[j].green; blue[nColors] = theColorMaps[i]->colors[j].blue; theColorMaps[i]->colors[j].index = nColors; nColors++; } ncm--; } } } else { last = 0; for (i=0;i<ColorMapNMax;i++) { if (ncm == 0) break; if (theColorMaps[i] != NULL) { for (j=0;j<theColorMaps[i]->size;j++) { if (i == 0 && theColorMaps[0]->colors[j].name == NULL) break; theColorMaps[i]->colors[j].index = MaxNColors; for (k=0;k<last;k++) { if (red[k] == theColorMaps[i]->colors[j].red && green[k] == theColorMaps[i]->colors[j].green && blue[k] == theColorMaps[i]->colors[j].blue) { theColorMaps[i]->colors[j].index = k; break; } } if (theColorMaps[i]->colors[j].index == MaxNColors) { if (nColors >= MaxNColors) Errorf("BuildColormap() : Sorry too many colors allocated (max is %d)",MaxNColors); red[nColors] = theColorMaps[i]->colors[j].red; green[nColors] = theColorMaps[i]->colors[j].green; blue[nColors] = theColorMaps[i]->colors[j].blue; theColorMaps[i]->colors[j].index = nColors; nColors++; } if (i == 0) last = nColors; } ncm--; last = nColors; } } } /* Build the colormap */ nAllocColors = WSetColormap(red,green,blue,pixels,nColors,flagShared,mouseMode); ncm = nColorMaps+1; for (i=0;i<128;i++) { if (ncm == 0) break; if (theColorMaps[i] != NULL) { for (j=0;j<theColorMaps[i]->size;j++) { if (i == 0 && theColorMaps[0]->colors[j].name == NULL) break; theColorMaps[i]->colors[j].pixel = pixels[theColorMaps[i]->colors[j].index]; } ncm--; } } /* Refresh the windows ???? *//* if (theWindowsHT && flagRefresh) { for (r = 0; r<theWindowsHT->nRows;r++) { for (e = theWindowsHT->rows[r]; e != NULL; e = e->next) { DrawWholeGObject((GOBJECT) e, YES); } } } */ return(nAllocColors); }/* * Init */void ColorsInit(void){ int i; unsigned short r1,g1,b1,r2,g2,b2; nColorMaps = 0; for (i=0;i<128;i++) theColorMaps[i] = NULL; WBgColor(&r1,&g1,&b1); WFgColor(&r2,&g2,&b2); CGetColorMap(NULL,256); DefineNamedColorRGB("bgDefault",r1,g1,b1); DefineNamedColorRGB("fgDefault",r2,g2,b2); bgColor = 0; fgColor = 1; mColor = 1; theMouseMode = Mouse1Color; colorMapCur = CGetColorMap("bw",2); DefineColorRGB(colorMapCur,0,r1,g1,b1); DefineColorRGB(colorMapCur,1,r2,g2,b2); BuildColormap(YES,theMouseMode);}/* * Setting background/foreground/mouse colors */void C_SetColor(char **argv){ char *action; unsigned long color; while (1) { if (*argv == NULL) break; argv = ParseArgv(argv,tWORD,&action,-1); if (!strcmp(action,"-bg")) { argv = ParseArgv(argv,tCOLOR,&color,-1); bgColor = color; } else if (!strcmp(action,"-fg")) { argv = ParseArgv(argv,tCOLOR,&color,-1); fgColor = color; } else if (!strcmp(action,"-mouse")) { if (ParseColor_(*argv,0,&color)) { mColor = color; theMouseMode = Mouse1Color; } else theMouseMode = MouseInverse; BuildColormap(YES,theMouseMode); } } NoMoreArgs(argv); }/* * The main command for managing new colors */void C_Color(char **argv){ char *action,*mode,*name; LWFLOAT x1,x2,x3; char flagRGB,flagMap; int index,cm,i; char flagInverse; unsigned long color; LISTV lv,lv1; argv = ParseArgv(argv,tWORD,&action,-1); flagMap = NO; flagRGB = NO; /* 'nnew' action */ if (!strcmp(action,"nnew")) { argv = ParseArgv(argv,tSTR,&name,tWORD,&mode,tFLOAT,&x1,tFLOAT,&x2,tFLOAT,&x3,0); if (!IsValidSymbol(name)) Errorf("Invalid color name '%s'",name); if (!strcmp(mode,"rgb")) flagRGB = YES; else if (!strcmp(mode,"hsv")) flagRGB = NO; else ErrorUsage(); if (flagRGB) DefineNamedColorRGB(name,x1,x2,x3); else DefineNamedColorHSV(name,x1,x2,x3); } /* 'inew' action */ else if (!strcmp(action,"inew")) { ParseArgv(argv,tSTR_,NULL,&name,-1); if (name != NULL) { if (*name == '_') Errorf("You cannot create a new color in an inversed color map."); cm = GetColorMap(name); if (cm == -1) name = NULL; else argv++; } if (name = NULL) { if (theColorMaps[colorMapCur&ColorMapMask] == NULL) Errorf("Sorry current color map is not defined"); name = theColorMaps[colorMapCur&ColorMapMask]->name; cm = GetColorMap(name); } if (cm == -1) Errorf("Unknown Color Map '%s'",name); argv = ParseArgv(argv,tINT,&index,tWORD,&mode,tFLOAT,&x1,tFLOAT,&x2,tFLOAT,&x3,0); if (!strcmp(mode,"rgb")) flagRGB = YES; else if (!strcmp(mode,"hsv")) flagRGB = NO; else ErrorUsage(); if (flagRGB) DefineColorRGB(cm,index,x1,x2,x3); else DefineColorHSV(cm,index,x1,x2,x3); } /* 'ilist' action */ else if (!strcmp(action,"ilist")) { flagInverse = NO; if (ParseInt_(*argv,0,&index) || *argv == NULL) { cm = colorMapCur; } else { ParseColorMapInt(*argv,&cm); argv++; } argv = ParseArgv(argv,tINT_,-1,&index,0); lv = TNewListv(); SetResultValue(lv); if (index == -1) { if (!(cm&ColorMapInverseMask)) { cm = cm &ColorMapMask; for (i=0;i<theColorMaps[cm]->size;i++) { lv1 = TNewListv(); AppendInt2Listv(lv1,theColorMaps[cm]->colors[i].red); AppendInt2Listv(lv1,theColorMaps[cm]->colors[i].green); AppendInt2Listv(lv1,theColorMaps[cm]->colors[i].blue); AppendValue2Listv(lv, (VALUE) lv1); } } else { cm = cm &ColorMapMask; for (i=theColorMaps[cm]->size-1; i>= 0;i--) { lv1 = TNewListv(); AppendInt2Listv(lv1,theColorMaps[cm]->colors[i].red); AppendInt2Listv(lv1,theColorMaps[cm]->colors[i].green); AppendInt2Listv(lv1,theColorMaps[cm]->colors[i].blue); AppendValue2Listv(lv, (VALUE) lv1); } } } else if (index < 0 || index >= theColorMaps[cm &ColorMapMask]->size) Errorf("Bad color index '%d'",index); else if (!(cm&ColorMapInverseMask)) { cm = cm &ColorMapMask; AppendInt2Listv(lv,theColorMaps[cm]->colors[index].red); AppendInt2Listv(lv,theColorMaps[cm]->colors[index].green); AppendInt2Listv(lv,theColorMaps[cm]->colors[index].blue); } else { cm = cm &ColorMapMask; index = theColorMaps[cm]->size-1-index; AppendInt2Listv(lv,theColorMaps[cm]->colors[index].red); AppendInt2Listv(lv,theColorMaps[cm]->colors[index].green); AppendInt2Listv(lv,theColorMaps[cm]->colors[index].blue); } } /* 'nlist' action */ else if (!strcmp(action,"nlist")) { argv = ParseArgv(argv,tSTR_,"*",&name,0); lv = TNewListv(); SetResultValue(lv); for (i=0;i<theColorMaps[0]->size;i++) { if (theColorMaps[0]->colors[i].name == NULL) break; if (MatchStr(theColorMaps[0]->colors[i].name,name)) { lv1 = TNewListv(); AppendStr2Listv(lv1,theColorMaps[0]->colors[i].name); AppendInt2Listv(lv1,theColorMaps[0]->colors[i].red); AppendInt2Listv(lv1,theColorMaps[0]->colors[i].green); AppendInt2Listv(lv1,theColorMaps[0]->colors[i].blue); AppendValue2Listv(lv, (VALUE) lv1); } } } /* 'animate' action */ else if (!strcmp(action,"animate")) { argv = ParseArgv(argv,tCOLOR,&color,tWORD,&mode,tFLOAT,&x1,tFLOAT,&x2,tFLOAT,&x3,0); if (!strcmp(mode,"rgb")) flagRGB = YES; else if (!strcmp(mode,"hsv")) flagRGB = NO; else ErrorUsage(); if (!flagRGB) HSVToRGB_(&x1,&x2,&x3); WAnimateColor(color,(short unsigned) x1,(short unsigned) x2,(short unsigned) x3); } /* 'nb' action */ else if (!strcmp(action,"nb")) { NoMoreArgs(argv); SetResultInt(WNumOfColors()); } /* 'install' action */ else if (!strcmp(action,"install")) { NoMoreArgs(argv); flagMap = YES; } else Errorf("Unknown action '%s'",action); if (flagMap) SetResultInt(BuildColormap(YES,theMouseMode));}/* * The main command for managing new colors */void C_ColorMap(char **argv){ char *action,*name; int size,cm,n,i; LISTV lv; argv = ParseArgv(argv,tWORD,&action,-1); /* 'new' action */ if (!strcmp(action,"new")) { argv = ParseArgv(argv,tSTR_,NULL,&name,tINT,&size,0); if (name == NULL) { if (theColorMaps[colorMapCur&ColorMapMask] == NULL) Errorf("Sorry current color map is not defined"); name = theColorMaps[colorMapCur&ColorMapMask]->name; } else { if (!IsValidSymbol(name)) Errorf("Invalid colormap name '%s'",name); } CGetColorMap(name,size); } /* 'current' action */ else if (!strcmp(action,"current")) { argv = ParseArgv(argv,tSTR_,NULL,&name,0); if (name == NULL) { if (colorMapCur&ColorMapInverseMask && theColorMaps[colorMapCur&ColorMapMask] != NULL) SetResultf("_%s",theColorMaps[colorMapCur&ColorMapMask]->name); else if (theColorMaps[colorMapCur] != NULL) SetResultStr(theColorMaps[colorMapCur]->name); else SetResultStr("None"); } else { ParseColorMapInt(name,&cm); colorMapCur = cm; } } /* 'delete' action */ else if (!strcmp(action,"delete")) { argv = ParseArgv(argv,tSTR_,NULL,&name,0); if (name == NULL) { if (theColorMaps[colorMapCur&ColorMapMask] != NULL) name = theColorMaps[colorMapCur&ColorMapMask]->name; else Errorf("Sorry current color map is not defined"); } DeleteColorMap(name); } /* 'size' action */ else if (!strcmp(action,"size")) { argv = ParseArgv(argv,tSTR_,NULL,&name,0); if (name == NULL) { if (theColorMaps[colorMapCur&ColorMapMask] != NULL) name = theColorMaps[colorMapCur&ColorMapMask]->name; else Errorf("Sorry current color map is not defined"); } if (*name == '_') name++; cm = GetColorMap(name); if (cm == -1) Errorf("Unknown color map '%s'",name); SetResultInt(theColorMaps[cm]->size); } /* list action */ else if (!strcmp(action,"list")) { argv = ParseArgv(argv,tSTR_,"*",&name,0); n = nColorMaps; lv = TNewListv(); SetResultValue(lv); for (i=1;i<ColorMapNMax;i++) { if (n == 0) break; if (theColorMaps[i] != NULL && MatchStr(theColorMaps[i]->name,name)) { AppendStr2Listv(lv,theColorMaps[i]->name); n--; } } } else Errorf("Unknown action '%s'",action);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -