Esempio n. 1
0
static BOOL wl_post_connect(freerdp* instance)
{
	rdpGdi* gdi;
	UwacWindow* window;
	wlfContext* context;

	if (!gdi_init(instance, PIXEL_FORMAT_BGRA32))
		return FALSE;

	gdi = instance->context->gdi;

	if (!gdi)
		return FALSE;

	context = (wlfContext*) instance->context;
	context->window = window = UwacCreateWindowShm(context->display, gdi->width,
	                           gdi->height, WL_SHM_FORMAT_XRGB8888);

	if (!window)
		return FALSE;

	UwacWindowSetFullscreenState(window, NULL, instance->context->settings->Fullscreen);
	UwacWindowSetTitle(window, "FreeRDP");
	UwacWindowSetOpaqueRegion(context->window, 0, 0, gdi->width, gdi->height);
	instance->update->BeginPaint = wl_begin_paint;
	instance->update->EndPaint = wl_end_paint;
	memcpy(UwacWindowGetDrawingBuffer(context->window), gdi->primary_buffer,
	       gdi->width * gdi->height * 4);
	UwacWindowAddDamage(context->window, 0, 0, gdi->width, gdi->height);
	context->haveDamage = TRUE;
	freerdp_keyboard_init(instance->context->settings->KeyboardLayout);
	return wl_update_content(context);
}
Esempio n. 2
0
static BOOL wl_post_connect(freerdp* instance)
{
	rdpGdi* gdi;
	UwacWindow* window;
	wlfContext* context;

	if (!gdi_init(instance, CLRCONV_ALPHA | CLRBUF_32BPP, NULL))
		return FALSE;

	gdi = instance->context->gdi;
	if (!gdi)
		return FALSE;

	context = (wlfContext*) instance->context;
	context->window = window = UwacCreateWindowShm(context->display, gdi->width, gdi->height, WL_SHM_FORMAT_XRGB8888);
	if (!window)
		return FALSE;

	UwacWindowSetTitle(window, "FreeRDP");

	instance->update->BeginPaint = wl_begin_paint;
	instance->update->EndPaint = wl_end_paint;

	if (freerdp_channels_post_connect(instance->context->channels, instance) < 0)
		return FALSE;


	memcpy(UwacWindowGetDrawingBuffer(context->window), gdi->primary_buffer, gdi->width * gdi->height * 4);
	UwacWindowAddDamage(context->window, 0, 0, gdi->width, gdi->height);
	context->haveDamage = TRUE;
	return wl_update_content(context);
}
Esempio n. 3
0
static BOOL wl_end_paint(rdpContext* context)
{
	rdpGdi* gdi;
	char* data;
	wlfContext* context_w;
	INT32 x, y;
	UINT32 w, h;
	int i;
	gdi = context->gdi;

	if (gdi->primary->hdc->hwnd->invalid->null)
		return TRUE;

	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;
	context_w = (wlfContext*) context;
	data = UwacWindowGetDrawingBuffer(context_w->window);

	if (!data)
		return FALSE;

	for (i = 0; i < h; i++)
	{
		memcpy(data + ((i + y) * (gdi->width * GetBytesPerPixel(
		                              gdi->dstFormat))) + x * GetBytesPerPixel(gdi->dstFormat),
		       gdi->primary_buffer + ((i + y) * (gdi->width * GetBytesPerPixel(
		                                  gdi->dstFormat))) + x * GetBytesPerPixel(gdi->dstFormat),
		       w * GetBytesPerPixel(gdi->dstFormat));
	}

	if (UwacWindowAddDamage(context_w->window, x, y, w, h) != UWAC_SUCCESS)
		return FALSE;

	context_w->haveDamage = TRUE;
	return wl_update_content(context_w);
}