Refix Sun bug #6685465: Xephyr uses wrong or bad colortable in 8-bit mode
<http://bugs.opensolaris.org/view_bug.do?bug_id=6685465> This is a refix of the previous fix for CR 6685465. In the first fix I was shifting the colors to match the mask by the bits_per_rgb amount in the visual structure. That field has nothing to do with the # of bits to shift by. I should just instead shift the bits to match the mask.
This commit is contained in:
parent
d5f9a131a2
commit
416685c295
|
@ -578,14 +578,14 @@ hostx_get_visual_masks (EphyrScreenInfo screen,
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
hostx_calculate_color_shift(unsigned long mask,
|
hostx_calculate_color_shift(unsigned long mask)
|
||||||
int bits_per_rgb)
|
|
||||||
{
|
{
|
||||||
int shift = 0;
|
int shift = 1;
|
||||||
while(mask) {
|
/* count # of bits in mask */
|
||||||
mask = mask >> bits_per_rgb;
|
while (mask=(mask>>1)) shift++;
|
||||||
if (mask) shift += bits_per_rgb;
|
/* cmap entry is an unsigned char so adjust it by size of that */
|
||||||
}
|
shift = shift - sizeof(unsigned char) * 8;
|
||||||
|
if (shift < 0) shift = 0;
|
||||||
return shift;
|
return shift;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -601,12 +601,9 @@ hostx_set_cmap_entry(unsigned char idx,
|
||||||
static int first_time = 1;
|
static int first_time = 1;
|
||||||
if (first_time) {
|
if (first_time) {
|
||||||
first_time = 0;
|
first_time = 0;
|
||||||
rshift = hostx_calculate_color_shift(HostX.visual->red_mask,
|
rshift = hostx_calculate_color_shift(HostX.visual->red_mask);
|
||||||
HostX.visual->bits_per_rgb);
|
gshift = hostx_calculate_color_shift(HostX.visual->green_mask);
|
||||||
gshift = hostx_calculate_color_shift(HostX.visual->green_mask,
|
bshift = hostx_calculate_color_shift(HostX.visual->blue_mask);
|
||||||
HostX.visual->bits_per_rgb);
|
|
||||||
bshift = hostx_calculate_color_shift(HostX.visual->blue_mask,
|
|
||||||
HostX.visual->bits_per_rgb);
|
|
||||||
}
|
}
|
||||||
HostX.cmap[idx] = ((r << rshift) & HostX.visual->red_mask) |
|
HostX.cmap[idx] = ((r << rshift) & HostX.visual->red_mask) |
|
||||||
((g << gshift) & HostX.visual->green_mask) |
|
((g << gshift) & HostX.visual->green_mask) |
|
||||||
|
|
Loading…
Reference in New Issue