| /* Copyright (c) 2004 Russ Cox, see README for licence details */ |
| #include <stdio.h> |
| #include <signal.h> |
| #include <X11/X.h> |
| #include <X11/Xlib.h> |
| #include <X11/Xutil.h> |
| #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; |
| } |
| } |
| |