> > This is reproducible using desktop icons on Windows XP. > > These drawing are sent for the icons on the desktop. > To get an extends.x1 >= 32 you have to move an icon out of the > screen on the right side. Set the icon size to 72 as the icon has Here is "left side", not left. > to be out of the screen quite a lot. > Disable the grid alignment on the desktop and move an icon out of > the screen. Select and unselect the icon. > Using "/ 32" the icon will have a white background instead of a > transparent one. > Using a "/ 8" the icon is rendered correctly. > > Signed-off-by: Frediano Ziglio <fziglio@xxxxxxxxxx> > --- > common/canvas_base.c | 12 ++++++++++-- > 1 file changed, 10 insertions(+), 2 deletions(-) > > diff --git a/common/canvas_base.c b/common/canvas_base.c > index 42f0eea..f0f6bbf 100644 > --- a/common/canvas_base.c > +++ b/common/canvas_base.c > @@ -1941,8 +1941,16 @@ static void canvas_mask_pixman(CanvasBase *canvas, > /* round down X to even 32 pixels (i.e. uint32_t) */ > extents.x1 = extents.x1 & ~(0x1f); > > - mask_data_src = (uint8_t *)mask_data + mask_stride * extents.y1 + > extents.x1 / 32; > - mask_data = SPICE_UNALIGNED_CAST(uint32_t *, mask_data_src); > + /* mask_data_src is surely aligned to 4 bytes: > + * - pixman requires mask_data (pixman_image_get_data) to be > + * aligned to 4 bytes; > + * - pixman requires mask_stride (pixman_image_get_stride) to be > + * multiple of 4; > + * - extents.x1 is multiple of 32 (see previous line) so > + * extents.x1 / 8 is multiple of 4. > + */ > + mask_data_src = (uint8_t *)mask_data + mask_stride * extents.y1 + > extents.x1 / 8; > + mask_data = SPICE_ALIGNED_CAST(uint32_t *, mask_data_src); > > mask_x -= extents.x1; > mask_y -= extents.y1; Frediano _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel