void xf_Pointer_New(rdpContext* context, rdpPointer* pointer) { #ifdef WITH_XCURSOR XcursorImage ci; xfContext* xfc = (xfContext*) context; xf_lock_x11(xfc, FALSE); ZeroMemory(&ci, sizeof(ci)); ci.version = XCURSOR_IMAGE_VERSION; ci.size = sizeof(ci); ci.width = pointer->width; ci.height = pointer->height; ci.xhot = pointer->xPos; ci.yhot = pointer->yPos; ci.pixels = (XcursorPixel*) calloc(1, ci.width * ci.height * 4); if (!ci.pixels) return; if ((pointer->andMaskData != 0) && (pointer->xorMaskData != 0)) { freerdp_alpha_cursor_convert((BYTE*) (ci.pixels), pointer->xorMaskData, pointer->andMaskData, pointer->width, pointer->height, pointer->xorBpp, xfc->clrconv); } ((xfPointer*) pointer)->cursor = XcursorImageLoadCursor(xfc->display, &ci); free(ci.pixels); xf_unlock_x11(xfc, FALSE); #endif }
void xf_pointer_new(rdpUpdate* update, xfPointer* pointer) { xfInfo* xfi; XcursorImage ci; rdpPointer* _pointer; xfi = GET_XFI(update); _pointer = (rdpPointer*) &pointer->pointer; memset(&ci, 0, sizeof(ci)); ci.version = XCURSOR_IMAGE_VERSION; ci.size = sizeof(ci); ci.width = _pointer->width; ci.height = _pointer->height; ci.xhot = _pointer->xPos; ci.yhot = _pointer->yPos; ci.pixels = (XcursorPixel*) malloc(ci.width * ci.height * 4); memset(ci.pixels, 0, ci.width * ci.height * 4); if ((_pointer->andMaskData != 0) && (_pointer->xorMaskData != 0)) { freerdp_alpha_cursor_convert((uint8*) (ci.pixels), _pointer->xorMaskData, _pointer->andMaskData, _pointer->width, _pointer->height, _pointer->xorBpp, xfi->clrconv); } if (_pointer->xorBpp > 24) { freerdp_image_swap_color_order((uint8*) ci.pixels, ci.width, ci.height); } pointer->cursor = XcursorImageLoadCursor(xfi->display, &ci); xfree(ci.pixels); }
void rf_Pointer_New(rdpContext* context, rdpPointer* pointer) { rfContext* rfi = (rfContext*) context; GdkPixbuf *pixbuf; guchar* pixbuf_data; pixbuf_data = g_malloc(pointer->width * pointer->height * 4); if ((pointer->andMaskData != 0) && (pointer->xorMaskData != 0)) { freerdp_alpha_cursor_convert(pixbuf_data, pointer->xorMaskData, pointer->andMaskData, pointer->width, pointer->height, pointer->xorBpp, rfi->clrconv); } pixbuf = gdk_pixbuf_new_from_data(pixbuf_data, GDK_COLORSPACE_RGB, TRUE, 8, pointer->width, pointer->height, (pointer->width * 4), (GdkPixbufDestroyNotify) g_free, NULL); ((rfPointer*) pointer)->cursor = gdk_cursor_new_from_pixbuf(rfi->display, pixbuf, pointer->xPos, pointer->yPos); }
void df_Pointer_New(rdpContext* context, rdpPointer* pointer) { dfInfo* dfi; DFBResult result; dfPointer* df_pointer; DFBSurfaceDescription dsc; dfi = ((dfContext*) context)->dfi; df_pointer = (dfPointer*) pointer; dsc.flags = DSDESC_CAPS | DSDESC_WIDTH | DSDESC_HEIGHT | DSDESC_PIXELFORMAT; dsc.caps = DSCAPS_SYSTEMONLY; dsc.width = pointer->width; dsc.height = pointer->height; dsc.pixelformat = DSPF_ARGB; result = dfi->dfb->CreateSurface(dfi->dfb, &dsc, &(df_pointer->surface)); if (result == DFB_OK) { int pitch; uint8* point = NULL; df_pointer->xhot = pointer->xPos; df_pointer->yhot = pointer->yPos; result = df_pointer->surface->Lock(df_pointer->surface, DSLF_WRITE, (void**) &point, &pitch); if (result != DFB_OK) { DirectFBErrorFatal("Error while creating pointer surface", result); return; } if ((pointer->andMaskData != 0) && (pointer->xorMaskData != 0)) { freerdp_alpha_cursor_convert(point, pointer->xorMaskData, pointer->andMaskData, pointer->width, pointer->height, pointer->xorBpp, dfi->clrconv); } if (pointer->xorBpp > 24) { freerdp_image_swap_color_order(point, pointer->width, pointer->height); } df_pointer->surface->Unlock(df_pointer->surface); } }
void xf_Pointer_New(rdpContext* context, rdpPointer* pointer) { XcursorImage ci; xfInfo* xfi = ((xfContext*) context)->xfi; memset(&ci, 0, sizeof(ci)); ci.version = XCURSOR_IMAGE_VERSION; ci.size = sizeof(ci); ci.width = pointer->width; ci.height = pointer->height; ci.xhot = pointer->xPos; ci.yhot = pointer->yPos; ci.pixels = (XcursorPixel*) xzalloc(ci.width * ci.height * 4); if ((pointer->andMaskData != 0) && (pointer->xorMaskData != 0)) { freerdp_alpha_cursor_convert((uint8*) (ci.pixels), pointer->xorMaskData, pointer->andMaskData, pointer->width, pointer->height, pointer->xorBpp, xfi->clrconv); } ((xfPointer*) pointer)->cursor = XcursorImageLoadCursor(xfi->display, &ci); xfree(ci.pixels); }
void guac_rdp_pointer_new(rdpContext* context, rdpPointer* pointer) { guac_client* client = ((rdp_freerdp_context*) context)->client; guac_socket* socket = client->socket; /* Allocate data for image */ unsigned char* data = (unsigned char*) malloc(pointer->width * pointer->height * 4); /* Allocate layer */ guac_layer* buffer = guac_client_alloc_buffer(client); cairo_surface_t* surface; /* Convert to alpha cursor if mask data present */ if (pointer->andMaskData && pointer->xorMaskData) freerdp_alpha_cursor_convert(data, pointer->xorMaskData, pointer->andMaskData, pointer->width, pointer->height, pointer->xorBpp, ((rdp_freerdp_context*) context)->clrconv); /* Create surface from image data */ surface = cairo_image_surface_create_for_data( data, CAIRO_FORMAT_ARGB32, pointer->width, pointer->height, 4*pointer->width); /* Send surface to buffer */ guac_protocol_send_png(socket, GUAC_COMP_SRC, buffer, 0, 0, surface); /* Free surface */ cairo_surface_destroy(surface); free(data); /* Remember buffer */ ((guac_rdp_pointer*) pointer)->layer = buffer; }