#include #include #include #include #include #ifdef HAVE_FCNTL_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #include #include "alloc.h" #include "drawinfo.h" #include "prefs.h" #include "screen.h" #include "libami.h" #ifdef AMIGAOS #include extern struct Library *XLibBase; #endif extern Display *dpy; extern char *progname; char *iconcolorname[256]; int iconcolormask; static char *sysiconcolorname[]={ "#aaaaaa", "#000000", "#ffffff", "#6688bb", "#ee4444", "#55dd55", "#0044dd", "#ee9e00" }; static char *magicwbcolorname[]={ "#aaaaaa", "#000000", "#ffffff", "#6688bb", "#999999", "#bbbbbb", "#bbaa99", "#ffbbaa" }; static char *schwartziconcolorname[]={ "#aaa0aa", "#000000", "#ffffff", "#5b78f5", "#999099", "#bbb0bb", "#bbaa99", "#ffbbaa", "#d922f1", "#915a46", "#3e3e41", "#6e6973", "#ff1919", "#ffff00", "#727d92", "#00c800" }; Pixmap image_to_pixmap_scr(Scrn *scr, struct Image *im, int width, int height, struct ColorStore *cs) { return image_to_pixmap(dpy, scr->back, scr->gc, scr->dri.dri_Pens[BACKGROUNDPEN], scr->iconcolor, iconcolormask, im, width, height, cs); } void load_do(const char *filename, struct IconPixmaps *ip) { struct DiskObject *dobj; #ifdef AMIGAOS char fn[256]; strncpy(fn, prefs.icondir, sizeof(fn)-1); fn[sizeof(fn)-1]='\0'; AddPart(fn,filename,sizeof(fn)); #else int rl=strlen(filename)+strlen(prefs.icondir)+2; #ifdef HAVE_ALLOCA char *fn=alloca(rl); #else char fn[1024]; #endif sprintf(fn, "%s/%s", prefs.icondir, filename); #endif fn[strlen(fn)-5]=0; if((dobj=GetDiskObject(fn))) { ip->pm=image_to_pixmap_scr(scr, (struct Image *)dobj->do_Gadget.GadgetRender, dobj->do_Gadget.Width, dobj->do_Gadget.Height, &ip->cs); ip->pm2=image_to_pixmap_scr(scr, (struct Image *)dobj->do_Gadget.SelectRender, dobj->do_Gadget.Width, dobj->do_Gadget.Height, &ip->cs2); FreeDiskObject(dobj); } else ip->pm=ip->pm2=None; } void init_iconpalette() { extern Status myXAllocNamedColor(Display *, Colormap, char *, XColor *, XColor *); XColor scrp, xact; char *name; int i; for(i=0; i<=iconcolormask; i++) { if(!myXAllocNamedColor(dpy, scr->cmap, name = iconcolorname[i], &scrp, &xact)) { fprintf(stderr, "%s: cannot allocate color %s\n", progname, name); exit(1); } scr->iconcolor[i]=scrp.pixel; scr->iconcolorsallocated=i+1; } } void set_mwb_palette() { iconcolormask=7; memcpy(iconcolorname, magicwbcolorname, sizeof(magicwbcolorname)); } void set_sys_palette() { iconcolormask=7; memcpy(iconcolorname, sysiconcolorname, sizeof(sysiconcolorname)); } void set_schwartz_palette() { iconcolormask=15; memcpy(iconcolorname, schwartziconcolorname, sizeof(schwartziconcolorname)); } #ifndef HAVE_STRDUP /* defined in gram.y */ extern char *strdup(char *); #endif static int custom_palette_from_file(char *fn, int ignorenofile) { FILE *file; int rows, cols, pixels, pixel; int format, mv; if(!(file=fopen(fn, "r"))) { if(!ignorenofile) perror(fn); return 0; } if(4!=fscanf(file, "P%d %d %d %d", &format, &cols, &rows, &mv) || (format!=3 && format!=6)) { fprintf(stderr, "%s: bad magic number - not a ppm file\n", fn); fclose(file); return 0; } if(format==6) getc(file); pixels = rows*cols; if(pixels>256) pixels = 256; for(pixel=0; pixel