/* Copyright (c) 2004 Russ Cox, see README for licence details */ #include #include #include #include #include #include "dat.h" #include "fns.h" unsigned long colorpixel(Display *dpy, ScreenInfo *s, int depth, unsigned long rgb, unsigned long def) { int r, g, b; r = rgb>>16; g = (rgb>>8)&0xFF; b = rgb&0xFF; switch(depth){ case 1: case 2: case 4: case 8: default: /* not going to waste color map entries */ return def; case 15: r >>= 3; g >>= 3; b >>= 3; return (r<<10) | (g<<5) | b; case 16: r >>= 3; g >>= 2; b >>= 3; return (r<<11) | (g<<5) | b; case 24: case 32: /* try to find byte order */ if(s->vis->red_mask & 0xff) return (r) | (g<<8) | (b<<16); /* OK on Sun */ return rgb; } }