28 #elif defined(__APPLE__) 73 for (i = 0, m = 1; m; i++, m<<=1)
if (
fl_visual->red_mask & m)
break;
74 for (j = i; m; j++, m<<=1)
if (!(
fl_visual->red_mask & m))
break;
76 fl_redmask = (j-i >= 8) ? 0xFF : 0xFF-(255>>(j-i));
78 for (i = 0, m = 1; m; i++, m<<=1)
if (
fl_visual->green_mask & m)
break;
79 for (j = i; m; j++, m<<=1)
if (!(
fl_visual->green_mask & m))
break;
83 for (i = 0, m = 1; m; i++, m<<=1)
if (
fl_visual->blue_mask & m)
break;
84 for (j = i; m; j++, m<<=1)
if (!(
fl_visual->blue_mask & m))
break;
86 fl_bluemask = (j-i >= 8) ? 0xFF : 0xFF-(255>>(j-i));
108 Colormap fl_overlay_colormap;
109 XVisualInfo* fl_overlay_visual;
110 ulong fl_transparent_pixel;
115 # define fl_overlay 0 119 if (i & 0xffffff00) {
120 unsigned rgb = (unsigned)i;
161 fl_cmap[i] = (r<<24)|(g<<16)|(
b<<8);
186 while (m&mask) {m>>=1;
color>>=1;}
193 return (
color&mask) | ( (~mask)&(mask>>1) );
204 if (i & 0xffffff00) {
205 return fl_xpixel((i >> 24) & 255, (i >> 16) & 255, (i >> 8) & 255);
219 if (
fl_overlay) colormap = fl_overlay_colormap;
else 236 static XColor* ac[2];
241 static XColor *allcolors;
242 static int numcolors;
251 xcol.red = r<<8; xcol.green = g<<8; xcol.blue =
b<<8;
252 if (XAllocColor(
fl_display, colormap, &xcol)) {
254 xmap.
r = xcol.red>>8;
255 xmap.
g = xcol.green>>8;
256 xmap.
b = xcol.blue>>8;
257 return xmap.
pixel = xcol.pixel;
264 if (
fl_overlay) numcolors = fl_overlay_visual->colormap_size;
else 267 if (!allcolors) allcolors =
new XColor[numcolors];
268 for (
int p = numcolors;
p--;) allcolors[
p].pixel =
p;
269 XQueryColors(
fl_display, colormap, allcolors, numcolors);
273 int mindist = 0x7FFFFFFF;
274 unsigned int bestmatch = 0;
275 for (
unsigned int n = numcolors; n--;) {
277 if (
fl_overlay && n == fl_transparent_pixel)
continue;
279 XColor &a = allcolors[n];
281 t = int(r)-int(a.red>>8); d = t*t;
282 t = int(g)-int(a.green>>8); d += t*t;
283 t = int(
b)-int(a.blue>>8); d += t*t;
284 if (d <= mindist) {bestmatch = n; mindist = d;}
286 XColor &
p = allcolors[bestmatch];
302 xmap.
pixel = bestmatch;
321 if (
fl_xmap[overlay][i].mapped) {
324 Colormap colormap = overlay ? fl_overlay_colormap :
fl_colormap;
328 if (
fl_xmap[overlay][i].mapped == 1)
350 #endif // end of X-specific code 360 if (i & 0xffffff00)
return (i);
370 ((
unsigned)red<<24)+((
unsigned)green<<16)+((
unsigned)blue<<8));
383 if (i & 0xffffff00) c = (unsigned)i;
387 green =
uchar(c>>16);
407 if (color1 & 0xffffff00) rgb1 = color1;
408 else rgb1 =
fl_cmap[color1 & 255];
410 if (color2 & 0xffffff00) rgb2 = color2;
411 else rgb2 =
fl_cmap[color2 & 255];
413 r = (
uchar)(((
uchar)(rgb1>>24))*weight + ((
uchar)(rgb2>>24))*(1-weight));
414 g = (
uchar)(((
uchar)(rgb1>>16))*weight + ((
uchar)(rgb2>>16))*(1-weight));
441 if (fg & 0xffffff00) c1 = (unsigned)fg;
444 if (bg & 0xffffff00) c2 = (unsigned)bg;
448 l1 = ((c1 >> 24) * 30 + ((c1 >> 16) & 255) * 59 + ((c1 >> 8) & 255) * 11) / 100;
449 l2 = ((c2 >> 24) * 30 + ((c2 >> 16) & 255) * 59 + ((c2 >> 8) & 255) * 11) / 100;
452 if ((l1 - l2) > 99)
return fg;
453 else if ((l2 - l1) > 99)
return fg;