plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

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 }