Fixed X11 cursor decoding.

This commit is contained in:
Armin Novak
2016-09-09 08:58:26 +02:00
committed by Armin Novak
parent 83c6a7942d
commit 4e11883f27

View File

@@ -167,15 +167,18 @@ static BOOL xf_Bitmap_SetSurface(rdpContext* context, rdpBitmap* bitmap,
/* Pointer Class */
static BOOL xf_Pointer_New(rdpContext* context, rdpPointer* pointer)
{
#ifdef WITH_XCURSOR
UINT32 CursorFormat = PIXEL_FORMAT_RGBA32;
rdpGdi* gdi;
size_t size;
XcursorImage ci;
xfContext* xfc = (xfContext*) context;
xfPointer* xpointer = (xfPointer*)pointer;
if (!context || !pointer || !context->gdi)
return FALSE;
gdi = context->gdi;
#ifdef WITH_XCURSOR
XcursorImage ci;
xfContext* xfc = (xfContext*) context;
xf_lock_x11(xfc, FALSE);
ZeroMemory(&ci, sizeof(ci));
ci.version = XCURSOR_IMAGE_VERSION;
@@ -184,28 +187,27 @@ static BOOL xf_Pointer_New(rdpContext* context, rdpPointer* pointer)
ci.height = pointer->height;
ci.xhot = pointer->xPos;
ci.yhot = pointer->yPos;
if (!(ci.pixels = (XcursorPixel*) calloc(ci.height,
ci.width * GetBytesPerPixel(gdi->dstFormat))))
size = ci.height * ci.width * GetBytesPerPixel(CursorFormat);
if (!(ci.pixels = (XcursorPixel*) _aligned_malloc(size, 16)))
{
xf_unlock_x11(xfc, FALSE);
return FALSE;
}
if (freerdp_image_copy_from_pointer_data(
(BYTE*) ci.pixels, gdi->dstFormat,
(BYTE*) ci.pixels, CursorFormat,
0, 0, 0, pointer->width, pointer->height,
pointer->xorMaskData, pointer->lengthXorMask,
pointer->andMaskData, pointer->lengthAndMask,
pointer->xorBpp, &context->gdi->palette) < 0)
{
free(ci.pixels);
_aligned_free(ci.pixels);
xf_unlock_x11(xfc, FALSE);
return FALSE;
}
((xfPointer*) pointer)->cursor = XcursorImageLoadCursor(xfc->display, &ci);
free(ci.pixels);
xpointer->cursor = XcursorImageLoadCursor(xfc->display, &ci);
_aligned_free(ci.pixels);
xf_unlock_x11(xfc, FALSE);
#endif
return TRUE;