Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/Remmina/Remmina.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/rdp/rdp_graphics.c')
-rw-r--r--plugins/rdp/rdp_graphics.c316
1 files changed, 20 insertions, 296 deletions
diff --git a/plugins/rdp/rdp_graphics.c b/plugins/rdp/rdp_graphics.c
index 68e64c12c..b97f30e1a 100644
--- a/plugins/rdp/rdp_graphics.c
+++ b/plugins/rdp/rdp_graphics.c
@@ -47,142 +47,14 @@
//#define RF_BITMAP
//#define RF_GLYPH
-/* Bitmap Class */
-
-BOOL rf_Bitmap_New(rdpContext* context, rdpBitmap* bitmap)
-{
- TRACE_CALL(__func__);
-#ifdef RF_BITMAP
- UINT8* data;
- Pixmap pixmap;
- XImage* image;
- rfContext* rfi = (rfContext*)context;
-
- XSetFunction(rfi->display, rfi->gc, GXcopy);
- pixmap = XCreatePixmap(rfi->display, rfi->drawable, bitmap->width, bitmap->height, rfi->depth);
-
- if (bitmap->data != NULL) {
- data = freerdp_image_convert(bitmap->data, NULL,
- bitmap->width, bitmap->height, rfi->srcBpp, rfi->bpp, rfi->clrconv);
-
- if (bitmap->ephemeral != TRUE) {
- image = XCreateImage(rfi->display, rfi->visual, rfi->depth,
- ZPixmap, 0, (char*)data, bitmap->width, bitmap->height, rfi->scanline_pad, 0);
-
- XPutImage(rfi->display, pixmap, rfi->gc, image, 0, 0, 0, 0, bitmap->width, bitmap->height);
- XFree(image);
-
- if (data != bitmap->data) && (data != NULL)
- free(data);
- }else {
- if (data != bitmap->data) && (data != NULL)
- free(bitmap->data);
-
- bitmap->data = data;
- }
- }
-
- ((rfBitmap*)bitmap)->pixmap = pixmap;
-#endif
- return TRUE;
-}
-
-void rf_Bitmap_Free(rdpContext* context, rdpBitmap* bitmap)
-{
- TRACE_CALL(__func__);
-#ifdef RF_BITMAP
- rfContext* rfi = (rfContext*)context;
-
- printf("rf_Bitmap_Free\n");
-
- if (((rfBitmap*)bitmap)->pixmap != 0)
- XFreePixmap(rfi->display, ((rfBitmap*)bitmap)->pixmap);
-#endif
-}
-
-BOOL rf_Bitmap_Paint(rdpContext* context, rdpBitmap* bitmap)
-{
- TRACE_CALL(__func__);
-#ifdef RF_BITMAP
- XImage* image;
- int width, height;
- rfContext* rfi = (rfContext*)context;
-
- printf("rf_Bitmap_Paint\n");
-
- width = bitmap->right - bitmap->left + 1;
- height = bitmap->bottom - bitmap->top + 1;
-
- XSetFunction(rfi->display, rfi->gc, GXcopy);
-
- image = XCreateImage(rfi->display, rfi->visual, rfi->depth,
- ZPixmap, 0, (char*)bitmap->data, bitmap->width, bitmap->height, rfi->scanline_pad, 0);
-
- XPutImage(rfi->display, rfi->primary, rfi->gc,
- image, 0, 0, bitmap->left, bitmap->top, width, height);
-
- XFree(image);
-
- //XCopyArea(rfi->display, rfi->primary, rfi->drawable, rfi->gc,
- // bitmap->left, bitmap->top, width, height, bitmap->left, bitmap->top);
-
- //gdi_InvalidateRegion(rfi->hdc, bitmap->left, bitmap->top, width, height);
-#endif
- return FALSE;
-}
-
-BOOL rf_Bitmap_Decompress(rdpContext* context, rdpBitmap* bitmap,
- const BYTE* data, UINT32 width, UINT32 height, UINT32 bpp, UINT32 length, BOOL compressed, UINT32 codec_id)
-{
- TRACE_CALL(__func__);
-#ifdef RF_BITMAP
- UINT16 size;
-
- printf("rf_Bitmap_Decompress\n");
-
- size = width * height * (bpp + 7) / 8;
-
- if (bitmap->data == NULL)
- bitmap->data = (UINT8*)xmalloc(size);
- else
- bitmap->data = (UINT8*)xrealloc(bitmap->data, size);
-
- if (compressed) {
- BOOL status;
-
- status = bitmap_decompress(data, bitmap->data, width, height, length, bpp, bpp);
-
- if (status != TRUE) {
- printf("Bitmap Decompression Failed\n");
- }
- }else {
- freerdp_image_flip(data, bitmap->data, width, height, bpp);
- }
-
- bitmap->compressed = FALSE;
- bitmap->length = size;
- bitmap->bpp = bpp;
-#endif
- return TRUE;
-}
-
-BOOL rf_Bitmap_SetSurface(rdpContext* context, rdpBitmap* bitmap, BOOL primary)
-{
- TRACE_CALL(__func__);
-#ifdef RF_BITMAP
- rfContext* rfi = (rfContext*)context;
-
- if (primary)
- rfi->drawing = rfi->primary;
- else
- rfi->drawing = ((rfBitmap*)bitmap)->pixmap;
-#endif
- return TRUE;
-}
-
/* Pointer Class */
+#if FREERDP_VERSION_MAJOR < 3
+#define CONST_ARG const
+#else
+#define CONST_ARG
+#endif
-BOOL rf_Pointer_New(rdpContext* context, rdpPointer* pointer)
+static BOOL rf_Pointer_New(rdpContext* context, rdpPointer* pointer)
{
TRACE_CALL(__func__);
RemminaPluginRdpUiObject* ui;
@@ -199,7 +71,7 @@ BOOL rf_Pointer_New(rdpContext* context, rdpPointer* pointer)
return FALSE;
}
-void rf_Pointer_Free(rdpContext* context, rdpPointer* pointer)
+static void rf_Pointer_Free(rdpContext* context, rdpPointer* pointer)
{
TRACE_CALL(__func__);
RemminaPluginRdpUiObject* ui;
@@ -216,7 +88,7 @@ void rf_Pointer_Free(rdpContext* context, rdpPointer* pointer)
}
}
-BOOL rf_Pointer_Set(rdpContext* context, const rdpPointer* pointer)
+static BOOL rf_Pointer_Set(rdpContext* context, CONST_ARG rdpPointer* pointer)
{
TRACE_CALL(__func__);
RemminaPluginRdpUiObject* ui;
@@ -231,7 +103,7 @@ BOOL rf_Pointer_Set(rdpContext* context, const rdpPointer* pointer)
}
-BOOL rf_Pointer_SetNull(rdpContext* context)
+static BOOL rf_Pointer_SetNull(rdpContext* context)
{
TRACE_CALL(__func__);
RemminaPluginRdpUiObject* ui;
@@ -244,7 +116,7 @@ BOOL rf_Pointer_SetNull(rdpContext* context)
return remmina_rdp_event_queue_ui_sync_retint(rfi->protocol_widget, ui) ? TRUE : FALSE;
}
-BOOL rf_Pointer_SetDefault(rdpContext* context)
+static BOOL rf_Pointer_SetDefault(rdpContext* context)
{
TRACE_CALL(__func__);
RemminaPluginRdpUiObject* ui;
@@ -257,7 +129,7 @@ BOOL rf_Pointer_SetDefault(rdpContext* context)
return remmina_rdp_event_queue_ui_sync_retint(rfi->protocol_widget, ui) ? TRUE : FALSE;
}
-BOOL rf_Pointer_SetPosition(rdpContext* context, UINT32 x, UINT32 y)
+static BOOL rf_Pointer_SetPosition(rdpContext* context, UINT32 x, UINT32 y)
{
TRACE_CALL(__func__);
RemminaPluginRdpUiObject* ui;
@@ -271,169 +143,21 @@ BOOL rf_Pointer_SetPosition(rdpContext* context, UINT32 x, UINT32 y)
return remmina_rdp_event_queue_ui_sync_retint(rfi->protocol_widget, ui) ? TRUE : FALSE;
}
-/* Glyph Class */
-
-BOOL rf_Glyph_New(rdpContext* context, const rdpGlyph* glyph)
-{
- TRACE_CALL(__func__);
-#ifdef RF_GLYPH
- int scanline;
- XImage* image;
- rfContext* rfi;
- rfGlyph* rf_glyph;
-
- rf_glyph = (rfGlyph*)glyph;
- rfi = (rfContext*)context;
-
- scanline = (glyph->cx + 7) / 8;
-
- rf_glyph->pixmap = XCreatePixmap(rfi->display, rfi->drawing, glyph->cx, glyph->cy, 1);
-
- image = XCreateImage(rfi->display, rfi->visual, 1,
- ZPixmap, 0, (char*)glyph->aj, glyph->cx, glyph->cy, 8, scanline);
-
- image->byte_order = MSBFirst;
- image->bitmap_bit_order = MSBFirst;
-
- XInitImage(image);
- XPutImage(rfi->display, rf_glyph->pixmap, rfi->gc_mono, image, 0, 0, 0, 0, glyph->cx, glyph->cy);
- XFree(image);
-#endif
- return TRUE;
-}
-
-void rf_Glyph_Free(rdpContext* context, rdpGlyph* glyph)
-{
- TRACE_CALL(__func__);
-#ifdef RF_GLYPH
- rfContext* rfi = (rfContext*)context;
-
- if (((rfGlyph*)glyph)->pixmap != 0)
- XFreePixmap(rfi->display, ((rfGlyph*)glyph)->pixmap);
-#endif
-}
-
-static BOOL rf_Glyph_Draw(rdpContext* context, const rdpGlyph* glyph, INT32 x,
- INT32 y, INT32 w, INT32 h, INT32 sx, INT32 sy,
- BOOL fOpRedundant)
-{
- TRACE_CALL(__func__);
-#ifdef RF_GLYPH
- rfGlyph* rf_glyph;
- rfContext* rfi = (rfContext*)context;
-
- rf_glyph = (rfGlyph*)glyph;
-
- XSetStipple(rfi->display, rfi->gc, rf_glyph->pixmap);
- XSetTSOrigin(rfi->display, rfi->gc, x, y);
- XFillRectangle(rfi->display, rfi->drawing, rfi->gc, x, y, glyph->cx, glyph->cy);
- XSetStipple(rfi->display, rfi->gc, rfi->bitmap_mono);
-#endif
- return TRUE;
-}
-
-static BOOL rf_Glyph_BeginDraw(rdpContext* context, INT32 x, INT32 y,
- INT32 width, INT32 height, UINT32 bgcolor,
- UINT32 fgcolor, BOOL fOpRedundant)
-{
- TRACE_CALL(__func__);
-#ifdef RF_GLYPH
- rfContext* rfi = (rfContext*)context;
-
- bgcolor = (rfi->clrconv->invert) ?
- freerdp_color_convert_var_bgr(bgcolor, rfi->srcBpp, 32, rfi->clrconv) :
- freerdp_color_convert_var_rgb(bgcolor, rfi->srcBpp, 32, rfi->clrconv);
-
- fgcolor = (rfi->clrconv->invert) ?
- freerdp_color_convert_var_bgr(fgcolor, rfi->srcBpp, 32, rfi->clrconv) :
- freerdp_color_convert_var_rgb(fgcolor, rfi->srcBpp, 32, rfi->clrconv);
-
- XSetFunction(rfi->display, rfi->gc, GXcopy);
- XSetFillStyle(rfi->display, rfi->gc, FillSolid);
- XSetForeground(rfi->display, rfi->gc, fgcolor);
- XFillRectangle(rfi->display, rfi->drawing, rfi->gc, x, y, width, height);
-
- XSetForeground(rfi->display, rfi->gc, bgcolor);
- XSetBackground(rfi->display, rfi->gc, fgcolor);
- XSetFillStyle(rfi->display, rfi->gc, FillStippled);
-#endif
- return TRUE;
-}
-
-static BOOL rf_Glyph_EndDraw(rdpContext* context, INT32 x, INT32 y,
- INT32 width, INT32 height,
- UINT32 bgcolor, UINT32 fgcolor)
-{
- TRACE_CALL(__func__);
-#ifdef RF_GLYPH
- rfContext* rfi = (rfContext*)context;
-
- if (rfi->drawing == rfi->primary) {
- //XCopyArea(rfi->display, rfi->primary, rfi->drawable, rfi->gc, x, y, width, height, x, y);
- //gdi_InvalidateRegion(rfi->hdc, x, y, width, height);
- }
-#endif
- return TRUE;
-}
-
/* Graphics Module */
void rf_register_graphics(rdpGraphics* graphics)
{
TRACE_CALL(__func__);
- rdpBitmap* bitmap;
- rdpPointer* pointer;
- rdpGlyph* glyph;
-
- bitmap = (rdpBitmap*)malloc(sizeof(rdpBitmap));
- ZeroMemory(bitmap, sizeof(rdpBitmap));
-#ifdef RF_BITMAP
- bitmap->size = sizeof(rfBitmap);
-#else
- bitmap->size = 0;
-#endif
-
- bitmap->New = rf_Bitmap_New;
- bitmap->Free = rf_Bitmap_Free;
- bitmap->Paint = rf_Bitmap_Paint;
- bitmap->Decompress = rf_Bitmap_Decompress;
- bitmap->SetSurface = rf_Bitmap_SetSurface;
-
- graphics_register_bitmap(graphics, bitmap);
- free(bitmap);
-
- pointer = (rdpPointer*)malloc(sizeof(rdpPointer));
- ZeroMemory(pointer, sizeof(rdpPointer));
-
- pointer->size = sizeof(rfPointer);
-
- pointer->New = rf_Pointer_New;
- pointer->Free = rf_Pointer_Free;
- pointer->Set = rf_Pointer_Set;
- pointer->SetNull = rf_Pointer_SetNull;
- pointer->SetDefault = rf_Pointer_SetDefault;
- pointer->SetPosition = rf_Pointer_SetPosition;
-
- graphics_register_pointer(graphics, pointer);
-
- free(pointer);
-
- glyph = (rdpGlyph*)malloc(sizeof(rdpGlyph));
- ZeroMemory(glyph, sizeof(rdpGlyph));
-
-#ifdef RF_GLYPH
- glyph->size = sizeof(rfGlyph);
-#else
- glyph->size = 0;
-#endif
+ rdpPointer pointer={0};
- glyph->New = rf_Glyph_New;
- glyph->Free = rf_Glyph_Free;
- glyph->Draw = rf_Glyph_Draw;
- glyph->BeginDraw = rf_Glyph_BeginDraw;
- glyph->EndDraw = rf_Glyph_EndDraw;
+ pointer.size = sizeof(rfPointer);
- graphics_register_glyph(graphics, glyph);
+ pointer.New = rf_Pointer_New;
+ pointer.Free = rf_Pointer_Free;
+ pointer.Set = rf_Pointer_Set;
+ pointer.SetNull = rf_Pointer_SetNull;
+ pointer.SetDefault = rf_Pointer_SetDefault;
+ pointer.SetPosition = rf_Pointer_SetPosition;
- free(glyph);
+ graphics_register_pointer(graphics, &pointer);
}