Cygwin/X: Fix for mis-aligned icon data creates bad background masks (#4491)
fd.o bugzilla #4491 Transparent icon backgrounds appear with black stripes as mask data is incorrectly aligned. Modified the icon DDB bitmap data alignment to 16 bits Signed-off-by: Jon TURNEY <jon.turney@dronecode.org.uk>
This commit is contained in:
parent
91f73b79b7
commit
bf65523ab0
|
@ -83,8 +83,8 @@ winScaleXBitmapToWindows (int iconSize,
|
||||||
if (pixmap->drawable.depth == 15)
|
if (pixmap->drawable.depth == 15)
|
||||||
effXDepth = 16;
|
effXDepth = 16;
|
||||||
|
|
||||||
/* Need 32-bit aligned rows */
|
/* Need 16-bit aligned rows for DDBitmaps */
|
||||||
stride = ((iconSize * effBPP + 31) & (~31)) / 8;
|
stride = ((iconSize * effBPP + 15) & (~15)) / 8;
|
||||||
xStride = PixmapBytePad (pixmap->drawable.width, pixmap->drawable.depth);
|
xStride = PixmapBytePad (pixmap->drawable.width, pixmap->drawable.depth);
|
||||||
if (stride == 0 || xStride == 0)
|
if (stride == 0 || xStride == 0)
|
||||||
{
|
{
|
||||||
|
@ -296,11 +296,11 @@ winXIconToHICON (WindowPtr pWin, int iconSize)
|
||||||
else
|
else
|
||||||
effBPP = bpp;
|
effBPP = bpp;
|
||||||
|
|
||||||
/* Need 32-bit aligned rows */
|
/* Need 16-bit aligned rows for DDBitmaps */
|
||||||
stride = ((iconSize * effBPP + 31) & (~31)) / 8;
|
stride = ((iconSize * effBPP + 15) & (~15)) / 8;
|
||||||
|
|
||||||
/* Mask is 1-bit deep */
|
/* Mask is 1-bit deep */
|
||||||
maskStride = ((iconSize * 1 + 31) & (~31)) / 8;
|
maskStride = ((iconSize * 1 + 15) & (~15)) / 8;
|
||||||
|
|
||||||
image = malloc (stride * iconSize);
|
image = malloc (stride * iconSize);
|
||||||
imageMask = malloc (stride * iconSize);
|
imageMask = malloc (stride * iconSize);
|
||||||
|
|
Loading…
Reference in New Issue