[PATCH] winex11: Fix off-by-one error in color value scaling
Alex Henrie
alexhenrie24 at gmail.com
Mon Nov 11 23:04:23 CST 2019
Signed-off-by: Alex Henrie <alexhenrie24 at gmail.com>
---
For 0 to map to 0 and 255 to map to 65535, the value must be multiplied
by 257, not 256. The incorrect factor would cause the color #FFFFFF to
become #FEFEFE.
---
dlls/winex11.drv/palette.c | 30 +++++++++++++++---------------
1 file changed, 15 insertions(+), 15 deletions(-)
diff --git a/dlls/winex11.drv/palette.c b/dlls/winex11.drv/palette.c
index 25bdb5f2bf..6cc6a0fe34 100644
--- a/dlls/winex11.drv/palette.c
+++ b/dlls/winex11.drv/palette.c
@@ -293,19 +293,19 @@ static BOOL X11DRV_PALETTE_BuildPrivateMap( const PALETTEENTRY *sys_pal_template
{
if( i < NB_RESERVED_COLORS/2 )
{
- color.red = sys_pal_template[i].peRed * 65535 / 255;
- color.green = sys_pal_template[i].peGreen * 65535 / 255;
- color.blue = sys_pal_template[i].peBlue * 65535 / 255;
- COLOR_sysPal[i] = sys_pal_template[i];
+ color.red = sys_pal_template[i].peRed * (65535 / 255);
+ color.green = sys_pal_template[i].peGreen * (65535 / 255);
+ color.blue = sys_pal_template[i].peBlue * (65535 / 255);
+ COLOR_sysPal[i] = sys_pal_template[i];
COLOR_sysPal[i].peFlags |= PC_SYS_USED;
}
else if( i >= palette_size - NB_RESERVED_COLORS/2 )
{
- int j = NB_RESERVED_COLORS + i - palette_size;
- color.red = sys_pal_template[j].peRed * 65535 / 255;
- color.green = sys_pal_template[j].peGreen * 65535 / 255;
- color.blue = sys_pal_template[j].peBlue * 65535 / 255;
- COLOR_sysPal[i] = sys_pal_template[j];
+ int j = NB_RESERVED_COLORS + i - palette_size;
+ color.red = sys_pal_template[j].peRed * (65535 / 255);
+ color.green = sys_pal_template[j].peGreen * (65535 / 255);
+ color.blue = sys_pal_template[j].peBlue * (65535 / 255);
+ COLOR_sysPal[i] = sys_pal_template[j];
COLOR_sysPal[i].peFlags |= PC_SYS_USED;
}
@@ -633,9 +633,9 @@ static void X11DRV_PALETTE_FillDefaultColors( const PALETTEENTRY *sys_pal_templa
{
XColor color;
color.pixel = (X11DRV_PALETTE_PaletteToXPixel)? X11DRV_PALETTE_PaletteToXPixel[idx] : idx;
- color.red = COLOR_sysPal[idx].peRed << 8;
- color.green = COLOR_sysPal[idx].peGreen << 8;
- color.blue = COLOR_sysPal[idx].peBlue << 8;
+ color.red = COLOR_sysPal[idx].peRed * (65535 / 255);
+ color.green = COLOR_sysPal[idx].peGreen * (65535 / 255);
+ color.blue = COLOR_sysPal[idx].peBlue * (65535 / 255);
color.flags = DoRed | DoGreen | DoBlue;
XStoreColor(gdi_display, default_colormap, &color);
}
@@ -1156,9 +1156,9 @@ UINT CDECL X11DRV_RealizePalette( PHYSDEV dev, HPALETTE hpal, BOOL primary )
X11DRV_PALETTE_firstFree = X11DRV_PALETTE_freeList[index];
color.pixel = (X11DRV_PALETTE_PaletteToXPixel) ? X11DRV_PALETTE_PaletteToXPixel[index] : index;
- color.red = entries[i].peRed << 8;
- color.green = entries[i].peGreen << 8;
- color.blue = entries[i].peBlue << 8;
+ color.red = entries[i].peRed * (65535 / 255);
+ color.green = entries[i].peGreen * (65535 / 255);
+ color.blue = entries[i].peBlue * (65535 / 255);
color.flags = DoRed | DoGreen | DoBlue;
XStoreColor(gdi_display, default_colormap, &color);
--
2.24.0
More information about the wine-devel
mailing list