43 #include <freerdp/codec/color.h> 44 #include <freerdp/codec/bitmap.h> 45 #include <winpr/memory.h> 61 XSetFunction(rfi->
display, rfi->gc, GXcopy);
62 pixmap = XCreatePixmap(rfi->
display, rfi->drawable, bitmap->width, bitmap->height, rfi->depth);
64 if (bitmap->data != NULL) {
65 data = freerdp_image_convert(bitmap->data, NULL,
66 bitmap->width, bitmap->height, rfi->
srcBpp, rfi->
bpp, rfi->clrconv);
68 if (bitmap->ephemeral != TRUE) {
70 ZPixmap, 0, (
char*)data, bitmap->width, bitmap->height, rfi->
scanline_pad, 0);
72 XPutImage(rfi->
display, pixmap, rfi->gc, image, 0, 0, 0, 0, bitmap->width, bitmap->height);
75 if (data != bitmap->data) && (data != NULL)
78 if (data != bitmap->data) && (data != NULL)
85 ((
rfBitmap*)bitmap)->pixmap = pixmap;
96 printf(
"rf_Bitmap_Free\n");
98 if (((
rfBitmap*)bitmap)->pixmap != 0)
105 TRACE_CALL(__func__);
111 printf(
"rf_Bitmap_Paint\n");
113 width = bitmap->right - bitmap->left + 1;
114 height = bitmap->bottom - bitmap->top + 1;
116 XSetFunction(rfi->
display, rfi->gc, GXcopy);
119 ZPixmap, 0, (
char*)bitmap->data, bitmap->width, bitmap->height, rfi->
scanline_pad, 0);
121 XPutImage(rfi->
display, rfi->primary, rfi->gc,
122 image, 0, 0, bitmap->left, bitmap->top, width, height);
135 const BYTE* data, UINT32 width, UINT32 height, UINT32 bpp, UINT32 length, BOOL compressed, UINT32 codec_id)
137 TRACE_CALL(__func__);
141 printf(
"rf_Bitmap_Decompress\n");
143 size = width * height * (bpp + 7) / 8;
145 if (bitmap->data == NULL)
146 bitmap->data = (UINT8*)xmalloc(size);
148 bitmap->data = (UINT8*)xrealloc(bitmap->data, size);
153 status = bitmap_decompress(data, bitmap->data, width, height, length, bpp, bpp);
155 if (status != TRUE) {
156 printf(
"Bitmap Decompression Failed\n");
159 freerdp_image_flip(data, bitmap->data, width, height, bpp);
162 bitmap->compressed = FALSE;
163 bitmap->length = size;
171 TRACE_CALL(__func__);
176 rfi->drawing = rfi->primary;
178 rfi->drawing = ((
rfBitmap*)bitmap)->pixmap;
187 TRACE_CALL(__func__);
191 if ((pointer->andMaskData != 0) && (pointer->xorMaskData != 0)) {
194 ui->
cursor.context = context;
204 TRACE_CALL(__func__);
208 if (G_IS_OBJECT(((
rfPointer*)pointer)->cursor))
212 ui->
cursor.context = context;
221 TRACE_CALL(__func__);
236 TRACE_CALL(__func__);
249 TRACE_CALL(__func__);
262 TRACE_CALL(__func__);
278 TRACE_CALL(__func__);
288 scanline = (glyph->cx + 7) / 8;
290 rf_glyph->
pixmap = XCreatePixmap(rfi->
display, rfi->drawing, glyph->cx, glyph->cy, 1);
293 ZPixmap, 0, (
char*)glyph->aj, glyph->cx, glyph->cy, 8, scanline);
295 image->byte_order = MSBFirst;
296 image->bitmap_bit_order = MSBFirst;
299 XPutImage(rfi->
display, rf_glyph->
pixmap, rfi->gc_mono, image, 0, 0, 0, 0, glyph->cx, glyph->cy);
307 TRACE_CALL(__func__);
311 if (((
rfGlyph*)glyph)->pixmap != 0)
316 static BOOL
rf_Glyph_Draw(rdpContext* context,
const rdpGlyph* glyph, INT32 x,
317 INT32 y, INT32 w, INT32 h, INT32 sx, INT32 sy,
320 TRACE_CALL(__func__);
328 XSetTSOrigin(rfi->
display, rfi->gc, x, y);
329 XFillRectangle(rfi->
display, rfi->drawing, rfi->gc, x, y, glyph->cx, glyph->cy);
330 XSetStipple(rfi->
display, rfi->gc, rfi->bitmap_mono);
336 INT32 width, INT32 height, UINT32 bgcolor,
337 UINT32 fgcolor, BOOL fOpRedundant)
339 TRACE_CALL(__func__);
343 bgcolor = (rfi->clrconv->invert) ?
344 freerdp_color_convert_var_bgr(bgcolor, rfi->
srcBpp, 32, rfi->clrconv) :
345 freerdp_color_convert_var_rgb(bgcolor, rfi->
srcBpp, 32, rfi->clrconv);
347 fgcolor = (rfi->clrconv->invert) ?
348 freerdp_color_convert_var_bgr(fgcolor, rfi->
srcBpp, 32, rfi->clrconv) :
349 freerdp_color_convert_var_rgb(fgcolor, rfi->
srcBpp, 32, rfi->clrconv);
351 XSetFunction(rfi->
display, rfi->gc, GXcopy);
352 XSetFillStyle(rfi->
display, rfi->gc, FillSolid);
353 XSetForeground(rfi->
display, rfi->gc, fgcolor);
354 XFillRectangle(rfi->
display, rfi->drawing, rfi->gc, x, y, width, height);
356 XSetForeground(rfi->
display, rfi->gc, bgcolor);
357 XSetBackground(rfi->
display, rfi->gc, fgcolor);
358 XSetFillStyle(rfi->
display, rfi->gc, FillStippled);
364 INT32 width, INT32 height,
365 UINT32 bgcolor, UINT32 fgcolor)
367 TRACE_CALL(__func__);
371 if (rfi->drawing == rfi->primary) {
383 TRACE_CALL(__func__);
388 bitmap = (rdpBitmap*)malloc(
sizeof(rdpBitmap));
389 ZeroMemory(bitmap,
sizeof(rdpBitmap));
398 graphics_register_bitmap(graphics, bitmap);
401 pointer = (rdpPointer*)malloc(
sizeof(rdpPointer));
402 ZeroMemory(pointer,
sizeof(rdpPointer));
413 graphics_register_pointer(graphics, pointer);
417 glyph = (rdpGlyph*)malloc(
sizeof(rdpGlyph));
418 ZeroMemory(glyph,
sizeof(rdpGlyph));
428 graphics_register_glyph(graphics, glyph);
void rf_Glyph_Free(rdpContext *context, rdpGlyph *glyph)
BOOL rf_Glyph_New(rdpContext *context, const rdpGlyph *glyph)
BOOL rf_Bitmap_New(rdpContext *context, rdpBitmap *bitmap)
BOOL rf_Pointer_New(rdpContext *context, rdpPointer *pointer)
BOOL rf_Pointer_SetPosition(rdpContext *context, UINT32 x, UINT32 y)
void rf_Pointer_Free(rdpContext *context, rdpPointer *pointer)
struct rf_bitmap rfBitmap
BOOL rf_Bitmap_Decompress(rdpContext *context, rdpBitmap *bitmap, const BYTE *data, UINT32 width, UINT32 height, UINT32 bpp, UINT32 length, BOOL compressed, UINT32 codec_id)
void rf_register_graphics(rdpGraphics *graphics)
struct rf_pointer rfPointer
RemminaProtocolWidget * protocol_widget
BOOL rf_Bitmap_SetSurface(rdpContext *context, rdpBitmap *bitmap, BOOL primary)
BOOL rf_Pointer_Set(rdpContext *context, const rdpPointer *pointer)
static BOOL rf_Glyph_EndDraw(rdpContext *context, INT32 x, INT32 y, INT32 width, INT32 height, UINT32 bgcolor, UINT32 fgcolor)
int remmina_rdp_event_queue_ui_sync_retint(RemminaProtocolWidget *gp, RemminaPluginRdpUiObject *ui)
static BOOL rf_Glyph_BeginDraw(rdpContext *context, INT32 x, INT32 y, INT32 width, INT32 height, UINT32 bgcolor, UINT32 fgcolor, BOOL fOpRedundant)
BOOL rf_Bitmap_Paint(rdpContext *context, rdpBitmap *bitmap)
BOOL rf_Pointer_SetNull(rdpContext *context)
BOOL rf_Pointer_SetDefault(rdpContext *context)
struct remmina_plugin_rdp_ui_object::@48::@51 cursor
struct remmina_plugin_rdp_ui_object::@48::@56 pos
static BOOL rf_Glyph_Draw(rdpContext *context, const rdpGlyph *glyph, INT32 x, INT32 y, INT32 w, INT32 h, INT32 sx, INT32 sy, BOOL fOpRedundant)
void rf_Bitmap_Free(rdpContext *context, rdpBitmap *bitmap)
RemminaPluginRdpUiType type