void rf_end_paint(rdpContext* context) { INT32 x, y; UINT32 w, h; rdpGdi* gdi; rfContext* rfi; RemminaProtocolWidget* gp; RemminaPluginRdpUiObject* ui; gdi = context->gdi; rfi = (rfContext*) context; gp = rfi->protocol_widget; if (gdi->primary->hdc->hwnd->invalid->null) return; x = gdi->primary->hdc->hwnd->invalid->x; y = gdi->primary->hdc->hwnd->invalid->y; w = gdi->primary->hdc->hwnd->invalid->w; h = gdi->primary->hdc->hwnd->invalid->h; ui = g_new0(RemminaPluginRdpUiObject, 1); ui->type = REMMINA_RDP_UI_UPDATE_REGION; ui->region.x = x; ui->region.y = y; ui->region.width = w; ui->region.height = h; rf_queue_ui(rfi->protocol_widget, ui); }
void remmina_rdp_cliprdr_process_monitor_ready(RemminaProtocolWidget* gp, RDP_CB_MONITOR_READY_EVENT* event) { RemminaPluginRdpUiObject* ui; ui = g_new0(RemminaPluginRdpUiObject, 1); ui->type = REMMINA_RDP_UI_CLIPBOARD; ui->clipboard.type = REMMINA_RDP_UI_CLIPBOARD_FORMATLIST; rf_queue_ui(gp, ui); }
void remmina_rdp_cliprdr_process_data_request(RemminaProtocolWidget* gp, RDP_CB_DATA_REQUEST_EVENT* event) { RemminaPluginRdpUiObject* ui; ui = g_new0(RemminaPluginRdpUiObject, 1); ui->type = REMMINA_RDP_UI_CLIPBOARD; ui->clipboard.type = REMMINA_RDP_UI_CLIPBOARD_GET_DATA; ui->clipboard.format = event->format; rf_queue_ui(gp, ui); }
static void rf_gdi_surface_bits(rdpContext* context, SURFACE_BITS_COMMAND* surface_bits_command) { UINT8* bitmap; RFX_MESSAGE* message; RemminaPluginRdpUiObject* ui; rfContext* rfi = (rfContext*) context; if (surface_bits_command->codecID == RDP_CODEC_ID_REMOTEFX && rfi->rfx_context) { message = rfx_process_message(rfi->rfx_context, surface_bits_command->bitmapData, surface_bits_command->bitmapDataLength); ui = g_new0(RemminaPluginRdpUiObject, 1); ui->type = REMMINA_RDP_UI_RFX; ui->rfx.left = surface_bits_command->destLeft; ui->rfx.top = surface_bits_command->destTop; ui->rfx.message = message; rf_queue_ui(rfi->protocol_widget, ui); } else if (surface_bits_command->codecID == RDP_CODEC_ID_NONE) { bitmap = (UINT8*) calloc(1, surface_bits_command->width * surface_bits_command->height * 4); freerdp_image_flip(surface_bits_command->bitmapData, bitmap, surface_bits_command->width, surface_bits_command->height, 32); ui = g_new0(RemminaPluginRdpUiObject, 1); ui->type = REMMINA_RDP_UI_NOCODEC; ui->nocodec.left = surface_bits_command->destLeft; ui->nocodec.top = surface_bits_command->destTop; ui->nocodec.width = surface_bits_command->width; ui->nocodec.height = surface_bits_command->height; ui->nocodec.bitmap = bitmap; rf_queue_ui(rfi->protocol_widget, ui); } else { printf("Unsupported codecID %d\n", surface_bits_command->codecID); } }
void rf_Pointer_SetDefault(rdpContext* context) { rfContext* rfi = (rfContext*) context; RemminaPluginRdpUiObject* ui; ui = g_new0(RemminaPluginRdpUiObject, 1); ui->type = REMMINA_RDP_UI_UPDATE_CURSOR; ui->cursor.cursor = NULL; rf_queue_ui(rfi->protocol_widget, ui); }
void rf_Pointer_SetNull(rdpContext* context) { rfContext* rfi = (rfContext*) context; GdkCursor* nullcursor = NULL; RemminaPluginRdpUiObject* ui; nullcursor = gdk_cursor_new(GDK_BLANK_CURSOR); ui = g_new0(RemminaPluginRdpUiObject, 1); ui->type = REMMINA_RDP_UI_UPDATE_CURSOR; ui->cursor.cursor = nullcursor; rf_queue_ui(rfi->protocol_widget, ui); }
void remmina_rdp_cliprdr_process_format_list(RemminaProtocolWidget* gp, RDP_CB_FORMAT_LIST_EVENT* event) { RemminaPluginRdpUiObject* ui; int i; GtkTargetList* list = gtk_target_list_new (NULL, 0); for (i = 0; i < event->num_formats; i++) { if (event->formats[i] == CB_FORMAT_UNICODETEXT) { GdkAtom atom = gdk_atom_intern("UTF8_STRING", TRUE); gtk_target_list_add(list, atom, 0, CB_FORMAT_UNICODETEXT); } if (event->formats[i] == CB_FORMAT_TEXT) { GdkAtom atom = gdk_atom_intern("TEXT", TRUE); gtk_target_list_add(list, atom, 0, CB_FORMAT_TEXT); } if (event->formats[i] == CB_FORMAT_DIB) { GdkAtom atom = gdk_atom_intern("image/bmp", TRUE); gtk_target_list_add(list, atom, 0, CB_FORMAT_DIB); } if (event->formats[i] == CB_FORMAT_JPEG) { GdkAtom atom = gdk_atom_intern("image/jpeg", TRUE); gtk_target_list_add(list, atom, 0, CB_FORMAT_JPEG); } if (event->formats[i] == CB_FORMAT_PNG) { GdkAtom atom = gdk_atom_intern("image/png", TRUE); gtk_target_list_add(list, atom, 0, CB_FORMAT_PNG); } } ui = g_new0(RemminaPluginRdpUiObject, 1); ui->type = REMMINA_RDP_UI_CLIPBOARD; ui->clipboard.type = REMMINA_RDP_UI_CLIPBOARD_SET_DATA; ui->clipboard.targetlist = list; rf_queue_ui(gp, ui); }
static BOOL remmina_rdp_post_connect(freerdp* instance) { rfContext* rfi; RemminaProtocolWidget* gp; RemminaPluginRdpUiObject* ui; rdpGdi* gdi; UINT32 flags; rfi = (rfContext*) instance->context; gp = rfi->protocol_widget; rfi->width = rfi->settings->DesktopWidth; rfi->height = rfi->settings->DesktopHeight; rfi->srcBpp = rfi->settings->ColorDepth; if (rfi->settings->RemoteFxCodec == FALSE) rfi->sw_gdi = TRUE; rf_register_graphics(instance->context->graphics); flags = CLRCONV_ALPHA; if (rfi->bpp == 32) { flags |= CLRBUF_32BPP; rfi->cairo_format = CAIRO_FORMAT_ARGB32; } else if (rfi->bpp == 24) { flags |= CLRBUF_24BPP; rfi->cairo_format = CAIRO_FORMAT_RGB24; } else { flags |= CLRBUF_16BPP; rfi->cairo_format = CAIRO_FORMAT_RGB16_565; } gdi_init(instance, flags, NULL); gdi = instance->context->gdi; rfi->primary_buffer = gdi->primary_buffer; rfi->hdc = gdi_GetDC(); rfi->hdc->bitsPerPixel = rfi->bpp; rfi->hdc->bytesPerPixel = rfi->bpp / 8; rfi->hdc->hwnd = (HGDI_WND) malloc(sizeof(GDI_WND)); rfi->hdc->hwnd->invalid = gdi_CreateRectRgn(0, 0, 0, 0); rfi->hdc->hwnd->invalid->null = 1; rfi->hdc->hwnd->count = 32; rfi->hdc->hwnd->cinvalid = (HGDI_RGN) malloc(sizeof(GDI_RGN) * rfi->hdc->hwnd->count); rfi->hdc->hwnd->ninvalid = 0; pointer_cache_register_callbacks(instance->update); /* if (rfi->sw_gdi != true) { glyph_cache_register_callbacks(instance->update); brush_cache_register_callbacks(instance->update); bitmap_cache_register_callbacks(instance->update); offscreen_cache_register_callbacks(instance->update); palette_cache_register_callbacks(instance->update); } */ instance->update->BeginPaint = rf_begin_paint; instance->update->EndPaint = rf_end_paint; instance->update->DesktopResize = rf_desktop_resize; freerdp_channels_post_connect(rfi->channels, instance); remmina_plugin_service->protocol_plugin_emit_signal(gp, "connect"); ui = g_new0(RemminaPluginRdpUiObject, 1); ui->type = REMMINA_RDP_UI_CONNECTED; rf_queue_ui(gp, ui); return True; }