color.c (793B)
1 /* Copyright (c) 2004 Russ Cox, see README for licence details */ 2 #include <stdio.h> 3 #include <signal.h> 4 #include <X11/X.h> 5 #include <X11/Xlib.h> 6 #include <X11/Xutil.h> 7 #include "dat.h" 8 #include "fns.h" 9 10 unsigned long 11 colorpixel(Display *dpy, ScreenInfo *s, int depth, unsigned long rgb, unsigned long def) 12 { 13 int r, g, b; 14 15 r = rgb>>16; 16 g = (rgb>>8)&0xFF; 17 b = rgb&0xFF; 18 19 switch(depth){ 20 case 1: 21 case 2: 22 case 4: 23 case 8: 24 default: 25 /* not going to waste color map entries */ 26 return def; 27 case 15: 28 r >>= 3; 29 g >>= 3; 30 b >>= 3; 31 return (r<<10) | (g<<5) | b; 32 case 16: 33 r >>= 3; 34 g >>= 2; 35 b >>= 3; 36 return (r<<11) | (g<<5) | b; 37 case 24: 38 case 32: 39 /* try to find byte order */ 40 if(s->vis->red_mask & 0xff) 41 return (r) | (g<<8) | (b<<16); /* OK on Sun */ 42 return rgb; 43 } 44 }