Beispiel #1
0
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);
}
Beispiel #2
0
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);
}
Beispiel #3
0
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);
}
Beispiel #4
0
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);
	}
}
Beispiel #5
0
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);
}
Beispiel #6
0
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);
}
Beispiel #7
0
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);
}
Beispiel #8
0
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;
}