parent
9fce1f5580
commit
69c726a9cf
145
src/color.c
145
src/color.c
|
@ -46,7 +46,7 @@ __imlib_BestVisual(Display *d, int screen, int *depth_return)
|
||||||
{
|
{
|
||||||
for (i = 0; i < num; i++)
|
for (i = 0; i < num; i++)
|
||||||
{
|
{
|
||||||
if ((xvir[i].depth == 8) &&
|
if ((xvir[i].depth > 1) &&
|
||||||
(xvir[i].depth >= maxd) &&
|
(xvir[i].depth >= maxd) &&
|
||||||
(xvi.class == PseudoColor))
|
(xvi.class == PseudoColor))
|
||||||
{
|
{
|
||||||
|
@ -63,62 +63,70 @@ __imlib_BestVisual(Display *d, int screen, int *depth_return)
|
||||||
XFree(xvir);
|
XFree(xvir);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
printf("%x\n", v->visualid);
|
||||||
if (depth_return)
|
if (depth_return)
|
||||||
*depth_return = maxd;
|
*depth_return = maxd;
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
DATA8 *
|
DATA8 *
|
||||||
__imlib_AllocColorTable(Display *d, Colormap cmap, DATA8 *type_return)
|
__imlib_AllocColorTable(Display *d, Colormap cmap, DATA8 *type_return, Visual *v)
|
||||||
{
|
{
|
||||||
DATA8 *color_lut = NULL;
|
DATA8 *color_lut = NULL;
|
||||||
|
|
||||||
if ((_max_colors >= 256) && (color_lut = __imlib_AllocColors332(d, cmap)))
|
if (v->bits_per_rgb > 1)
|
||||||
|
{
|
||||||
|
if ((_max_colors >= 256) && (color_lut = __imlib_AllocColors332(d, cmap, v)))
|
||||||
{
|
{
|
||||||
*type_return = _pal_type;
|
*type_return = _pal_type;
|
||||||
return color_lut;
|
return color_lut;
|
||||||
}
|
}
|
||||||
if ((_max_colors >= 216) && (color_lut = __imlib_AllocColors666(d, cmap)))
|
if ((_max_colors >= 216) && (color_lut = __imlib_AllocColors666(d, cmap, v)))
|
||||||
{
|
{
|
||||||
*type_return = _pal_type;
|
*type_return = _pal_type;
|
||||||
return color_lut;
|
return color_lut;
|
||||||
}
|
}
|
||||||
if ((_max_colors >= 128) && (color_lut = __imlib_AllocColors232(d, cmap)))
|
if ((_max_colors >= 128) && (color_lut = __imlib_AllocColors232(d, cmap, v)))
|
||||||
{
|
{
|
||||||
*type_return = _pal_type;
|
*type_return = _pal_type;
|
||||||
return color_lut;
|
return color_lut;
|
||||||
}
|
}
|
||||||
if ((_max_colors >= 64) && (color_lut = __imlib_AllocColors222(d, cmap)))
|
if ((_max_colors >= 64) && (color_lut = __imlib_AllocColors222(d, cmap, v)))
|
||||||
{
|
{
|
||||||
*type_return = _pal_type;
|
*type_return = _pal_type;
|
||||||
return color_lut;
|
return color_lut;
|
||||||
}
|
}
|
||||||
if ((_max_colors >= 32) && (color_lut = __imlib_AllocColors221(d, cmap)))
|
if ((_max_colors >= 32) && (color_lut = __imlib_AllocColors221(d, cmap, v)))
|
||||||
{
|
{
|
||||||
*type_return = _pal_type;
|
*type_return = _pal_type;
|
||||||
return color_lut;
|
return color_lut;
|
||||||
}
|
}
|
||||||
if ((_max_colors >= 16) && (color_lut = __imlib_AllocColors121(d, cmap)))
|
if ((_max_colors >= 16) && (color_lut = __imlib_AllocColors121(d, cmap, v)))
|
||||||
{
|
{
|
||||||
*type_return = _pal_type;
|
*type_return = _pal_type;
|
||||||
return color_lut;
|
return color_lut;
|
||||||
}
|
}
|
||||||
if ((_max_colors >= 8) && (color_lut = __imlib_AllocColors111(d, cmap)))
|
}
|
||||||
|
if ((_max_colors >= 8) && (color_lut = __imlib_AllocColors111(d, cmap, v)))
|
||||||
{
|
{
|
||||||
*type_return = _pal_type;
|
*type_return = _pal_type;
|
||||||
return color_lut;
|
return color_lut;
|
||||||
}
|
}
|
||||||
color_lut = __imlib_AllocColors1(d, cmap);
|
color_lut = __imlib_AllocColors1(d, cmap, v);
|
||||||
*type_return = _pal_type;
|
*type_return = _pal_type;
|
||||||
return color_lut;
|
return color_lut;
|
||||||
}
|
}
|
||||||
|
|
||||||
DATA8 *
|
DATA8 *
|
||||||
__imlib_AllocColors332(Display *d, Colormap cmap)
|
__imlib_AllocColors332(Display *d, Colormap cmap, Visual *v)
|
||||||
{
|
{
|
||||||
int r, g, b, i = 0;
|
int r, g, b, i;
|
||||||
DATA8 *color_lut;
|
DATA8 *color_lut;
|
||||||
|
int sig_mask = 0;
|
||||||
|
|
||||||
|
for (i = 0; i < v->bits_per_rgb; i++) sig_mask |= (0x1 << i);
|
||||||
|
sig_mask <<= (16 - v->bits_per_rgb);
|
||||||
|
i = 0;
|
||||||
color_lut = malloc(256 * sizeof(DATA8));
|
color_lut = malloc(256 * sizeof(DATA8));
|
||||||
for (r = 0; r < 8; r++)
|
for (r = 0; r < 8; r++)
|
||||||
{
|
{
|
||||||
|
@ -127,7 +135,9 @@ __imlib_AllocColors332(Display *d, Colormap cmap)
|
||||||
for (b = 0; b < 4; b++)
|
for (b = 0; b < 4; b++)
|
||||||
{
|
{
|
||||||
XColor xcl;
|
XColor xcl;
|
||||||
|
XColor xcl_in;
|
||||||
int val;
|
int val;
|
||||||
|
Status ret;
|
||||||
|
|
||||||
val = (r << 6) | (r << 3) | (r);
|
val = (r << 6) | (r << 3) | (r);
|
||||||
xcl.red = (unsigned short)((val << 7) | (val >> 2));
|
xcl.red = (unsigned short)((val << 7) | (val >> 2));
|
||||||
|
@ -135,7 +145,12 @@ __imlib_AllocColors332(Display *d, Colormap cmap)
|
||||||
xcl.green = (unsigned short)((val << 7) | (val >> 2));
|
xcl.green = (unsigned short)((val << 7) | (val >> 2));
|
||||||
val = (b << 6) | (b << 4) | (b << 2) | (b);
|
val = (b << 6) | (b << 4) | (b << 2) | (b);
|
||||||
xcl.blue = (unsigned short)((val << 8) | (val));
|
xcl.blue = (unsigned short)((val << 8) | (val));
|
||||||
if (!XAllocColor(d, cmap, &xcl))
|
xcl_in = xcl;
|
||||||
|
ret = XAllocColor(d, cmap, &xcl);
|
||||||
|
if ((ret == Success) ||
|
||||||
|
((xcl_in.red & sig_mask) != (xcl.red & sig_mask)) ||
|
||||||
|
((xcl_in.green & sig_mask) != (xcl.green & sig_mask)) ||
|
||||||
|
((xcl_in.blue & sig_mask) != (xcl.blue & sig_mask)))
|
||||||
{
|
{
|
||||||
unsigned long pixels[256];
|
unsigned long pixels[256];
|
||||||
int j;
|
int j;
|
||||||
|
@ -159,11 +174,15 @@ __imlib_AllocColors332(Display *d, Colormap cmap)
|
||||||
}
|
}
|
||||||
|
|
||||||
DATA8 *
|
DATA8 *
|
||||||
__imlib_AllocColors666(Display *d, Colormap cmap)
|
__imlib_AllocColors666(Display *d, Colormap cmap, Visual *v)
|
||||||
{
|
{
|
||||||
int r, g, b, i = 0;
|
int r, g, b, i;
|
||||||
DATA8 *color_lut;
|
DATA8 *color_lut;
|
||||||
|
int sig_mask = 0;
|
||||||
|
|
||||||
|
for (i = 0; i < v->bits_per_rgb; i++) sig_mask |= (0x1 << i);
|
||||||
|
sig_mask <<= (16 - v->bits_per_rgb);
|
||||||
|
i = 0;
|
||||||
color_lut = malloc(256 * sizeof(DATA8));
|
color_lut = malloc(256 * sizeof(DATA8));
|
||||||
for (r = 0; r < 6; r++)
|
for (r = 0; r < 6; r++)
|
||||||
{
|
{
|
||||||
|
@ -172,7 +191,9 @@ __imlib_AllocColors666(Display *d, Colormap cmap)
|
||||||
for (b = 0; b < 6; b++)
|
for (b = 0; b < 6; b++)
|
||||||
{
|
{
|
||||||
XColor xcl;
|
XColor xcl;
|
||||||
|
XColor xcl_in;
|
||||||
int val;
|
int val;
|
||||||
|
Status ret;
|
||||||
|
|
||||||
val = (int)((((double)r) / 5.0) * 65535);
|
val = (int)((((double)r) / 5.0) * 65535);
|
||||||
xcl.red = (unsigned short)(val);
|
xcl.red = (unsigned short)(val);
|
||||||
|
@ -180,7 +201,12 @@ __imlib_AllocColors666(Display *d, Colormap cmap)
|
||||||
xcl.green = (unsigned short)(val);
|
xcl.green = (unsigned short)(val);
|
||||||
val = (int)((((double)b) / 5.0) * 65535);
|
val = (int)((((double)b) / 5.0) * 65535);
|
||||||
xcl.blue = (unsigned short)(val);
|
xcl.blue = (unsigned short)(val);
|
||||||
if (!XAllocColor(d, cmap, &xcl))
|
xcl_in = xcl;
|
||||||
|
ret = XAllocColor(d, cmap, &xcl);
|
||||||
|
if ((ret == Success) ||
|
||||||
|
((xcl_in.red & sig_mask) != (xcl.red & sig_mask)) ||
|
||||||
|
((xcl_in.green & sig_mask) != (xcl.green & sig_mask)) ||
|
||||||
|
((xcl_in.blue & sig_mask) != (xcl.blue & sig_mask)))
|
||||||
{
|
{
|
||||||
unsigned long pixels[256];
|
unsigned long pixels[256];
|
||||||
int j;
|
int j;
|
||||||
|
@ -204,11 +230,15 @@ __imlib_AllocColors666(Display *d, Colormap cmap)
|
||||||
}
|
}
|
||||||
|
|
||||||
DATA8 *
|
DATA8 *
|
||||||
__imlib_AllocColors232(Display *d, Colormap cmap)
|
__imlib_AllocColors232(Display *d, Colormap cmap, Visual *v)
|
||||||
{
|
{
|
||||||
int r, g, b, i = 0;
|
int r, g, b, i;
|
||||||
DATA8 *color_lut;
|
DATA8 *color_lut;
|
||||||
|
int sig_mask = 0;
|
||||||
|
|
||||||
|
for (i = 0; i < v->bits_per_rgb; i++) sig_mask |= (0x1 << i);
|
||||||
|
sig_mask <<= (16 - v->bits_per_rgb);
|
||||||
|
i = 0;
|
||||||
color_lut = malloc(128 * sizeof(DATA8));
|
color_lut = malloc(128 * sizeof(DATA8));
|
||||||
for (r = 0; r < 4; r++)
|
for (r = 0; r < 4; r++)
|
||||||
{
|
{
|
||||||
|
@ -217,7 +247,9 @@ __imlib_AllocColors232(Display *d, Colormap cmap)
|
||||||
for (b = 0; b < 4; b++)
|
for (b = 0; b < 4; b++)
|
||||||
{
|
{
|
||||||
XColor xcl;
|
XColor xcl;
|
||||||
|
XColor xcl_in;
|
||||||
int val;
|
int val;
|
||||||
|
Status ret;
|
||||||
|
|
||||||
val = (r << 6) | (r << 4) | (r << 2) | (r);
|
val = (r << 6) | (r << 4) | (r << 2) | (r);
|
||||||
xcl.red = (unsigned short)((val << 8) | (val));
|
xcl.red = (unsigned short)((val << 8) | (val));
|
||||||
|
@ -225,7 +257,12 @@ __imlib_AllocColors232(Display *d, Colormap cmap)
|
||||||
xcl.green = (unsigned short)((val << 7) | (val >> 2));
|
xcl.green = (unsigned short)((val << 7) | (val >> 2));
|
||||||
val = (b << 6) | (b << 4) | (b << 2) | (b);
|
val = (b << 6) | (b << 4) | (b << 2) | (b);
|
||||||
xcl.blue = (unsigned short)((val << 8) | (val));
|
xcl.blue = (unsigned short)((val << 8) | (val));
|
||||||
if (!XAllocColor(d, cmap, &xcl))
|
xcl_in = xcl;
|
||||||
|
ret = XAllocColor(d, cmap, &xcl);
|
||||||
|
if ((ret == Success) ||
|
||||||
|
((xcl_in.red & sig_mask) != (xcl.red & sig_mask)) ||
|
||||||
|
((xcl_in.green & sig_mask) != (xcl.green & sig_mask)) ||
|
||||||
|
((xcl_in.blue & sig_mask) != (xcl.blue & sig_mask)))
|
||||||
{
|
{
|
||||||
unsigned long pixels[256];
|
unsigned long pixels[256];
|
||||||
int j;
|
int j;
|
||||||
|
@ -249,11 +286,15 @@ __imlib_AllocColors232(Display *d, Colormap cmap)
|
||||||
}
|
}
|
||||||
|
|
||||||
DATA8 *
|
DATA8 *
|
||||||
__imlib_AllocColors222(Display *d, Colormap cmap)
|
__imlib_AllocColors222(Display *d, Colormap cmap, Visual *v)
|
||||||
{
|
{
|
||||||
int r, g, b, i = 0;
|
int r, g, b, i;
|
||||||
DATA8 *color_lut;
|
DATA8 *color_lut;
|
||||||
|
int sig_mask = 0;
|
||||||
|
|
||||||
|
for (i = 0; i < v->bits_per_rgb; i++) sig_mask |= (0x1 << i);
|
||||||
|
sig_mask <<= (16 - v->bits_per_rgb);
|
||||||
|
i = 0;
|
||||||
color_lut = malloc(64 * sizeof(DATA8));
|
color_lut = malloc(64 * sizeof(DATA8));
|
||||||
for (r = 0; r < 4; r++)
|
for (r = 0; r < 4; r++)
|
||||||
{
|
{
|
||||||
|
@ -262,7 +303,9 @@ __imlib_AllocColors222(Display *d, Colormap cmap)
|
||||||
for (b = 0; b < 4; b++)
|
for (b = 0; b < 4; b++)
|
||||||
{
|
{
|
||||||
XColor xcl;
|
XColor xcl;
|
||||||
|
XColor xcl_in;
|
||||||
int val;
|
int val;
|
||||||
|
Status ret;
|
||||||
|
|
||||||
val = (r << 6) | (r << 4) | (r << 2) | (r);
|
val = (r << 6) | (r << 4) | (r << 2) | (r);
|
||||||
xcl.red = (unsigned short)((val << 8) | (val));
|
xcl.red = (unsigned short)((val << 8) | (val));
|
||||||
|
@ -270,7 +313,12 @@ __imlib_AllocColors222(Display *d, Colormap cmap)
|
||||||
xcl.green = (unsigned short)((val << 8) | (val));
|
xcl.green = (unsigned short)((val << 8) | (val));
|
||||||
val = (b << 6) | (b << 4) | (b << 2) | (b);
|
val = (b << 6) | (b << 4) | (b << 2) | (b);
|
||||||
xcl.blue = (unsigned short)((val << 8) | (val));
|
xcl.blue = (unsigned short)((val << 8) | (val));
|
||||||
if (!XAllocColor(d, cmap, &xcl))
|
xcl_in = xcl;
|
||||||
|
ret = XAllocColor(d, cmap, &xcl);
|
||||||
|
if ((ret == Success) ||
|
||||||
|
((xcl_in.red & sig_mask) != (xcl.red & sig_mask)) ||
|
||||||
|
((xcl_in.green & sig_mask) != (xcl.green & sig_mask)) ||
|
||||||
|
((xcl_in.blue & sig_mask) != (xcl.blue & sig_mask)))
|
||||||
{
|
{
|
||||||
unsigned long pixels[256];
|
unsigned long pixels[256];
|
||||||
int j;
|
int j;
|
||||||
|
@ -294,11 +342,15 @@ __imlib_AllocColors222(Display *d, Colormap cmap)
|
||||||
}
|
}
|
||||||
|
|
||||||
DATA8 *
|
DATA8 *
|
||||||
__imlib_AllocColors221(Display *d, Colormap cmap)
|
__imlib_AllocColors221(Display *d, Colormap cmap, Visual *v)
|
||||||
{
|
{
|
||||||
int r, g, b, i = 0;
|
int r, g, b, i;
|
||||||
DATA8 *color_lut;
|
DATA8 *color_lut;
|
||||||
|
int sig_mask = 0;
|
||||||
|
|
||||||
|
for (i = 0; i < v->bits_per_rgb; i++) sig_mask |= (0x1 << i);
|
||||||
|
sig_mask <<= (16 - v->bits_per_rgb);
|
||||||
|
i = 0;
|
||||||
color_lut = malloc(32 * sizeof(DATA8));
|
color_lut = malloc(32 * sizeof(DATA8));
|
||||||
for (r = 0; r < 4; r++)
|
for (r = 0; r < 4; r++)
|
||||||
{
|
{
|
||||||
|
@ -307,7 +359,9 @@ __imlib_AllocColors221(Display *d, Colormap cmap)
|
||||||
for (b = 0; b < 2; b++)
|
for (b = 0; b < 2; b++)
|
||||||
{
|
{
|
||||||
XColor xcl;
|
XColor xcl;
|
||||||
|
XColor xcl_in;
|
||||||
int val;
|
int val;
|
||||||
|
Status ret;
|
||||||
|
|
||||||
val = (r << 6) | (r << 4) | (r << 2) | (r);
|
val = (r << 6) | (r << 4) | (r << 2) | (r);
|
||||||
xcl.red = (unsigned short)((val << 8) | (val));
|
xcl.red = (unsigned short)((val << 8) | (val));
|
||||||
|
@ -315,7 +369,12 @@ __imlib_AllocColors221(Display *d, Colormap cmap)
|
||||||
xcl.green = (unsigned short)((val << 8) | (val));
|
xcl.green = (unsigned short)((val << 8) | (val));
|
||||||
val = (b << 7) | (b << 6) | (b << 5) | (b << 4) | (b << 3) | (b << 2) | (b << 1) | (b);
|
val = (b << 7) | (b << 6) | (b << 5) | (b << 4) | (b << 3) | (b << 2) | (b << 1) | (b);
|
||||||
xcl.blue = (unsigned short)((val << 8) | (val));
|
xcl.blue = (unsigned short)((val << 8) | (val));
|
||||||
if (!XAllocColor(d, cmap, &xcl))
|
xcl_in = xcl;
|
||||||
|
ret = XAllocColor(d, cmap, &xcl);
|
||||||
|
if ((ret == Success) ||
|
||||||
|
((xcl_in.red & sig_mask) != (xcl.red & sig_mask)) ||
|
||||||
|
((xcl_in.green & sig_mask) != (xcl.green & sig_mask)) ||
|
||||||
|
((xcl_in.blue & sig_mask) != (xcl.blue & sig_mask)))
|
||||||
{
|
{
|
||||||
unsigned long pixels[256];
|
unsigned long pixels[256];
|
||||||
int j;
|
int j;
|
||||||
|
@ -339,11 +398,15 @@ __imlib_AllocColors221(Display *d, Colormap cmap)
|
||||||
}
|
}
|
||||||
|
|
||||||
DATA8 *
|
DATA8 *
|
||||||
__imlib_AllocColors121(Display *d, Colormap cmap)
|
__imlib_AllocColors121(Display *d, Colormap cmap, Visual *v)
|
||||||
{
|
{
|
||||||
int r, g, b, i = 0;
|
int r, g, b, i;
|
||||||
DATA8 *color_lut;
|
DATA8 *color_lut;
|
||||||
|
int sig_mask = 0;
|
||||||
|
|
||||||
|
for (i = 0; i < v->bits_per_rgb; i++) sig_mask |= (0x1 << i);
|
||||||
|
sig_mask <<= (16 - v->bits_per_rgb);
|
||||||
|
i = 0;
|
||||||
color_lut = malloc(16 * sizeof(DATA8));
|
color_lut = malloc(16 * sizeof(DATA8));
|
||||||
for (r = 0; r < 2; r++)
|
for (r = 0; r < 2; r++)
|
||||||
{
|
{
|
||||||
|
@ -352,7 +415,9 @@ __imlib_AllocColors121(Display *d, Colormap cmap)
|
||||||
for (b = 0; b < 2; b++)
|
for (b = 0; b < 2; b++)
|
||||||
{
|
{
|
||||||
XColor xcl;
|
XColor xcl;
|
||||||
|
XColor xcl_in;
|
||||||
int val;
|
int val;
|
||||||
|
Status ret;
|
||||||
|
|
||||||
val = (r << 7) | (r << 6) | (r << 5) | (r << 4) | (r << 3) | (r << 2) | (r << 1) | (r);
|
val = (r << 7) | (r << 6) | (r << 5) | (r << 4) | (r << 3) | (r << 2) | (r << 1) | (r);
|
||||||
xcl.red = (unsigned short)((val << 8) | (val));
|
xcl.red = (unsigned short)((val << 8) | (val));
|
||||||
|
@ -360,7 +425,12 @@ __imlib_AllocColors121(Display *d, Colormap cmap)
|
||||||
xcl.green = (unsigned short)((val << 8) | (val));
|
xcl.green = (unsigned short)((val << 8) | (val));
|
||||||
val = (b << 7) | (b << 6) | (b << 5) | (b << 4) | (b << 3) | (b << 2) | (b << 1) | (b);
|
val = (b << 7) | (b << 6) | (b << 5) | (b << 4) | (b << 3) | (b << 2) | (b << 1) | (b);
|
||||||
xcl.blue = (unsigned short)((val << 8) | (val));
|
xcl.blue = (unsigned short)((val << 8) | (val));
|
||||||
if (!XAllocColor(d, cmap, &xcl))
|
xcl_in = xcl;
|
||||||
|
ret = XAllocColor(d, cmap, &xcl);
|
||||||
|
if ((ret == Success) ||
|
||||||
|
((xcl_in.red & sig_mask) != (xcl.red & sig_mask)) ||
|
||||||
|
((xcl_in.green & sig_mask) != (xcl.green & sig_mask)) ||
|
||||||
|
((xcl_in.blue & sig_mask) != (xcl.blue & sig_mask)))
|
||||||
{
|
{
|
||||||
unsigned long pixels[256];
|
unsigned long pixels[256];
|
||||||
int j;
|
int j;
|
||||||
|
@ -384,11 +454,15 @@ __imlib_AllocColors121(Display *d, Colormap cmap)
|
||||||
}
|
}
|
||||||
|
|
||||||
DATA8 *
|
DATA8 *
|
||||||
__imlib_AllocColors111(Display *d, Colormap cmap)
|
__imlib_AllocColors111(Display *d, Colormap cmap, Visual *v)
|
||||||
{
|
{
|
||||||
int r, g, b, i = 0;
|
int r, g, b, i ;
|
||||||
DATA8 *color_lut;
|
DATA8 *color_lut;
|
||||||
|
int sig_mask = 0;
|
||||||
|
|
||||||
|
for (i = 0; i < v->bits_per_rgb; i++) sig_mask |= (0x1 << i);
|
||||||
|
sig_mask <<= (16 - v->bits_per_rgb);
|
||||||
|
i = 0;
|
||||||
color_lut = malloc(8 * sizeof(DATA8));
|
color_lut = malloc(8 * sizeof(DATA8));
|
||||||
for (r = 0; r < 2; r++)
|
for (r = 0; r < 2; r++)
|
||||||
{
|
{
|
||||||
|
@ -397,7 +471,9 @@ __imlib_AllocColors111(Display *d, Colormap cmap)
|
||||||
for (b = 0; b < 2; b++)
|
for (b = 0; b < 2; b++)
|
||||||
{
|
{
|
||||||
XColor xcl;
|
XColor xcl;
|
||||||
|
XColor xcl_in;
|
||||||
int val;
|
int val;
|
||||||
|
Status ret;
|
||||||
|
|
||||||
val = (r << 7) | (r << 6) | (r << 5) | (r << 4) | (r << 3) | (r << 2) | (r << 1) | (r);
|
val = (r << 7) | (r << 6) | (r << 5) | (r << 4) | (r << 3) | (r << 2) | (r << 1) | (r);
|
||||||
xcl.red = (unsigned short)((val << 8) | (val));
|
xcl.red = (unsigned short)((val << 8) | (val));
|
||||||
|
@ -405,7 +481,12 @@ __imlib_AllocColors111(Display *d, Colormap cmap)
|
||||||
xcl.green = (unsigned short)((val << 8) | (val));
|
xcl.green = (unsigned short)((val << 8) | (val));
|
||||||
val = (b << 7) | (b << 6) | (b << 5) | (b << 4) | (b << 3) | (b << 2) | (b << 1) | (b);
|
val = (b << 7) | (b << 6) | (b << 5) | (b << 4) | (b << 3) | (b << 2) | (b << 1) | (b);
|
||||||
xcl.blue = (unsigned short)((val << 8) | (val));
|
xcl.blue = (unsigned short)((val << 8) | (val));
|
||||||
if (!XAllocColor(d, cmap, &xcl))
|
xcl_in = xcl;
|
||||||
|
ret = XAllocColor(d, cmap, &xcl);
|
||||||
|
if ((ret == Success) ||
|
||||||
|
((xcl_in.red & sig_mask) != (xcl.red & sig_mask)) ||
|
||||||
|
((xcl_in.green & sig_mask) != (xcl.green & sig_mask)) ||
|
||||||
|
((xcl_in.blue & sig_mask) != (xcl.blue & sig_mask)))
|
||||||
{
|
{
|
||||||
unsigned long pixels[256];
|
unsigned long pixels[256];
|
||||||
int j;
|
int j;
|
||||||
|
@ -429,7 +510,7 @@ __imlib_AllocColors111(Display *d, Colormap cmap)
|
||||||
}
|
}
|
||||||
|
|
||||||
DATA8 *
|
DATA8 *
|
||||||
__imlib_AllocColors1(Display *d, Colormap cmap)
|
__imlib_AllocColors1(Display *d, Colormap cmap, Visual *v)
|
||||||
{
|
{
|
||||||
XColor xcl;
|
XColor xcl;
|
||||||
DATA8 *color_lut;
|
DATA8 *color_lut;
|
||||||
|
|
18
src/color.h
18
src/color.h
|
@ -4,13 +4,13 @@ extern DATA16 _max_colors;
|
||||||
|
|
||||||
int __imlib_XActualDepth(Display *d, Visual *v);
|
int __imlib_XActualDepth(Display *d, Visual *v);
|
||||||
Visual *__imlib_BestVisual(Display *d, int screen, int *depth_return);
|
Visual *__imlib_BestVisual(Display *d, int screen, int *depth_return);
|
||||||
DATA8 * __imlib_AllocColorTable(Display *d, Colormap cmap, DATA8 *type_return);
|
DATA8 * __imlib_AllocColorTable(Display *d, Colormap cmap, DATA8 *type_return, Visual *v);
|
||||||
DATA8 * __imlib_AllocColors332(Display *d, Colormap cmap);
|
DATA8 * __imlib_AllocColors332(Display *d, Colormap cmap, Visual *v);
|
||||||
DATA8 * __imlib_AllocColors666(Display *d, Colormap cmap);
|
DATA8 * __imlib_AllocColors666(Display *d, Colormap cmap, Visual *v);
|
||||||
DATA8 * __imlib_AllocColors232(Display *d, Colormap cmap);
|
DATA8 * __imlib_AllocColors232(Display *d, Colormap cmap, Visual *v);
|
||||||
DATA8 * __imlib_AllocColors222(Display *d, Colormap cmap);
|
DATA8 * __imlib_AllocColors222(Display *d, Colormap cmap, Visual *v);
|
||||||
DATA8 * __imlib_AllocColors221(Display *d, Colormap cmap);
|
DATA8 * __imlib_AllocColors221(Display *d, Colormap cmap, Visual *v);
|
||||||
DATA8 * __imlib_AllocColors121(Display *d, Colormap cmap);
|
DATA8 * __imlib_AllocColors121(Display *d, Colormap cmap, Visual *v);
|
||||||
DATA8 * __imlib_AllocColors111(Display *d, Colormap cmap);
|
DATA8 * __imlib_AllocColors111(Display *d, Colormap cmap, Visual *v);
|
||||||
DATA8 * __imlib_AllocColors1(Display *d, Colormap cmap);
|
DATA8 * __imlib_AllocColors1(Display *d, Colormap cmap, Visual *v);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -156,7 +156,7 @@ __imlib_NewContext(Display *d, Visual *v, Colormap c, int depth)
|
||||||
|
|
||||||
if (depth <= 8)
|
if (depth <= 8)
|
||||||
{
|
{
|
||||||
ct->palette = __imlib_AllocColorTable(d, c, &(ct->palette_type));
|
ct->palette = __imlib_AllocColorTable(d, c, &(ct->palette_type), v);
|
||||||
ct->r_dither = malloc(sizeof(DATA8) * 8 * 8 * 256);
|
ct->r_dither = malloc(sizeof(DATA8) * 8 * 8 * 256);
|
||||||
ct->g_dither = malloc(sizeof(DATA8) * 8 * 8 * 256);
|
ct->g_dither = malloc(sizeof(DATA8) * 8 * 8 * 256);
|
||||||
ct->b_dither = malloc(sizeof(DATA8) * 8 * 8 * 256);
|
ct->b_dither = malloc(sizeof(DATA8) * 8 * 8 * 256);
|
||||||
|
|
34
src/rend.c
34
src/rend.c
|
@ -19,12 +19,42 @@
|
||||||
|
|
||||||
void
|
void
|
||||||
__imlib_generic_render(DATA32 *src, int jump, int w, int h, int dx, int dy,
|
__imlib_generic_render(DATA32 *src, int jump, int w, int h, int dx, int dy,
|
||||||
XImage *xim, Visual *v)
|
XImage *xim, Visual *v, Context *ct)
|
||||||
{
|
{
|
||||||
unsigned int x, y, r, g, b, val, hh;
|
unsigned int x, y, r, g, b, val, hh;
|
||||||
unsigned int rmask, gmask, bmask;
|
unsigned int rmask, gmask, bmask;
|
||||||
int i, rshift, gshift, bshift;
|
int i, rshift, gshift, bshift;
|
||||||
|
const DATA8 _dither_88[8][8] =
|
||||||
|
{
|
||||||
|
{ 0, 32, 8, 40, 2, 34, 10, 42 },
|
||||||
|
{ 48, 16, 56, 24, 50, 18, 58, 26 },
|
||||||
|
{ 12, 44, 4, 36, 14, 46, 6, 38 },
|
||||||
|
{ 60, 28, 52, 20, 62, 30, 54, 22 },
|
||||||
|
{ 3, 35, 11, 43, 1, 33, 9, 41 },
|
||||||
|
{ 51, 19, 59, 27, 49, 17, 57, 25 },
|
||||||
|
{ 15, 47, 7, 39, 13, 45, 5, 37 },
|
||||||
|
{ 63, 31, 55, 23, 61, 29, 53, 21 }
|
||||||
|
};
|
||||||
|
|
||||||
|
if (xim->depth == 1)
|
||||||
|
{
|
||||||
|
hh = dy + h;
|
||||||
|
for (y = dy; y < hh; y++)
|
||||||
|
{
|
||||||
|
for (x = dx; x < w; x++)
|
||||||
|
{
|
||||||
|
r = R_VAL(src);
|
||||||
|
g = G_VAL(src);
|
||||||
|
b = B_VAL(src);
|
||||||
|
val = (R_VAL(src) + G_VAL(src) + B_VAL(src)) / 12;
|
||||||
|
if (val > _dither_88[x & 0x3][y & 0x3]) val = ct->palette[1];
|
||||||
|
else val = ct->palette[0];
|
||||||
|
XPutPixel(xim, x, y, val);
|
||||||
|
src++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
rmask = xim->red_mask;
|
rmask = xim->red_mask;
|
||||||
gmask = xim->green_mask;
|
gmask = xim->green_mask;
|
||||||
bmask = xim->blue_mask;
|
bmask = xim->blue_mask;
|
||||||
|
@ -290,7 +320,7 @@ __imlib_RenderImage(Display *d, ImlibImage *im,
|
||||||
((DATA8 *)xim->data) + (y * (xim->bytes_per_line)),
|
((DATA8 *)xim->data) + (y * (xim->bytes_per_line)),
|
||||||
xim->bytes_per_line, dw, hh, dx, dy + y);
|
xim->bytes_per_line, dw, hh, dx, dy + y);
|
||||||
else
|
else
|
||||||
__imlib_generic_render(pointer, jump, dw, hh, 0, y, xim, v);
|
__imlib_generic_render(pointer, jump, dw, hh, 0, y, xim, v, ct);
|
||||||
if (m)
|
if (m)
|
||||||
masker(pointer, jump,
|
masker(pointer, jump,
|
||||||
((DATA8 *)mxim->data) + (y * (mxim->bytes_per_line)),
|
((DATA8 *)mxim->data) + (y * (mxim->bytes_per_line)),
|
||||||
|
|
|
@ -1166,7 +1166,7 @@ static DATA8 _dither_a1[8 * 8 * 256];
|
||||||
#define RGB111_RSHIFT >> 21
|
#define RGB111_RSHIFT >> 21
|
||||||
#define RGB111_BMASK & 0x01
|
#define RGB111_BMASK & 0x01
|
||||||
#define RGB111_GMASK & 0x02
|
#define RGB111_GMASK & 0x02
|
||||||
#define RGB111_RMASK & 0x30
|
#define RGB111_RMASK & 0x04
|
||||||
|
|
||||||
#define WRITE1_RGBA_RGB111(src, dest) \
|
#define WRITE1_RGBA_RGB111(src, dest) \
|
||||||
*dest = _dither_color_lut[((*src RGB111_BSHIFT) RGB111_BMASK) | \
|
*dest = _dither_color_lut[((*src RGB111_BSHIFT) RGB111_BMASK) | \
|
||||||
|
@ -1529,7 +1529,7 @@ __imlib_RGBA_init(void *rd, void *gd, void *bd, int depth, DATA8 palette_type)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 8:
|
default:
|
||||||
rd8 = (DATA8 *)rd;
|
rd8 = (DATA8 *)rd;
|
||||||
gd8 = (DATA8 *)gd;
|
gd8 = (DATA8 *)gd;
|
||||||
bd8 = (DATA8 *)bd;
|
bd8 = (DATA8 *)bd;
|
||||||
|
@ -1775,8 +1775,6 @@ __imlib_RGBA_init(void *rd, void *gd, void *bd, int depth, DATA8 palette_type)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3892,7 +3890,6 @@ __imlib_GetRGBAFunction(int depth,
|
||||||
return __imlib_RGBA_to_RGB666_fast;
|
return __imlib_RGBA_to_RGB666_fast;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
printf("Imlib2: unknown depth %i\n", depth);
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue