Beispiel #1
0
void xf_hw_end_paint(rdpUpdate* update)
{
	xfInfo* xfi;
	sint32 x, y;
	uint32 w, h;

	xfi = GET_XFI(update);

	if (xfi->remote_app)
	{
		if (xfi->hdc->hwnd->invalid->null)
			return;

		x = xfi->hdc->hwnd->invalid->x;
		y = xfi->hdc->hwnd->invalid->y;
		w = xfi->hdc->hwnd->invalid->w;
		h = xfi->hdc->hwnd->invalid->h;

		xf_rail_paint(xfi, update->rail, x, y, x + w - 1, y + h - 1);
	}
}
Beispiel #2
0
void xf_hw_end_paint(rdpContext* context)
{
	xfInfo* xfi;
	INT32 x, y;
	UINT32 w, h;

	xfi = ((xfContext*) context)->xfi;

	if (xfi->remote_app)
	{
		if (xfi->hdc->hwnd->invalid->null)
			return;

		x = xfi->hdc->hwnd->invalid->x;
		y = xfi->hdc->hwnd->invalid->y;
		w = xfi->hdc->hwnd->invalid->w;
		h = xfi->hdc->hwnd->invalid->h;

		xf_rail_paint(xfi, context->rail, x, y, x + w - 1, y + h - 1);
	}
}
Beispiel #3
0
BOOL xf_hw_end_paint(rdpContext* context)
{
	INT32 x, y;
	UINT32 w, h;
	xfContext* xfc = (xfContext*) context;

	if (!xfc->remote_app)
	{
		if (!xfc->complex_regions)
		{
			if (xfc->hdc->hwnd->invalid->null)
				return TRUE;

			x = xfc->hdc->hwnd->invalid->x;
			y = xfc->hdc->hwnd->invalid->y;
			w = xfc->hdc->hwnd->invalid->w;
			h = xfc->hdc->hwnd->invalid->h;

			xf_lock_x11(xfc, FALSE);

			xf_draw_screen(xfc, x, y, w, h);

			xf_unlock_x11(xfc, FALSE);
		}
		else
		{
			int i;
			int ninvalid;
			HGDI_RGN cinvalid;

			if (xfc->hdc->hwnd->ninvalid < 1)
				return TRUE;

			ninvalid = xfc->hdc->hwnd->ninvalid;
			cinvalid = xfc->hdc->hwnd->cinvalid;

			xf_lock_x11(xfc, FALSE);

			for (i = 0; i < ninvalid; i++)
			{
				x = cinvalid[i].x;
				y = cinvalid[i].y;
				w = cinvalid[i].w;
				h = cinvalid[i].h;

				xf_draw_screen(xfc, x, y, w, h);
			}

			XFlush(xfc->display);

			xf_unlock_x11(xfc, FALSE);
		}
	}
	else
	{
		if (xfc->hdc->hwnd->invalid->null)
			return TRUE;

		x = xfc->hdc->hwnd->invalid->x;
		y = xfc->hdc->hwnd->invalid->y;
		w = xfc->hdc->hwnd->invalid->w;
		h = xfc->hdc->hwnd->invalid->h;

		xf_lock_x11(xfc, FALSE);

		xf_rail_paint(xfc, x, y, x + w, y + h);

		xf_unlock_x11(xfc, FALSE);
	}
	return TRUE;
}
Beispiel #4
0
BOOL xf_sw_end_paint(rdpContext* context)
{
	int i;
	INT32 x, y;
	UINT32 w, h;
	int ninvalid;
	HGDI_RGN cinvalid;
	xfContext* xfc = (xfContext*) context;
	rdpGdi* gdi = context->gdi;

	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;

	ninvalid = gdi->primary->hdc->hwnd->ninvalid;
	cinvalid = gdi->primary->hdc->hwnd->cinvalid;

	if (!xfc->remote_app)
	{
		if (!xfc->complex_regions)
		{
			if (gdi->primary->hdc->hwnd->invalid->null)
				return TRUE;

			xf_lock_x11(xfc, FALSE);

			XPutImage(xfc->display, xfc->primary, xfc->gc, xfc->image, x, y, x, y, w, h);

			xf_draw_screen(xfc, x, y, w, h);

			xf_unlock_x11(xfc, FALSE);
		}
		else
		{
			if (gdi->primary->hdc->hwnd->ninvalid < 1)
				return TRUE;

			xf_lock_x11(xfc, FALSE);

			for (i = 0; i < ninvalid; i++)
			{
				x = cinvalid[i].x;
				y = cinvalid[i].y;
				w = cinvalid[i].w;
				h = cinvalid[i].h;

				XPutImage(xfc->display, xfc->primary, xfc->gc, xfc->image, x, y, x, y, w, h);

				xf_draw_screen(xfc, x, y, w, h);
			}

			XFlush(xfc->display);

			xf_unlock_x11(xfc, FALSE);
		}
	}
	else
	{
		if (gdi->primary->hdc->hwnd->invalid->null)
			return TRUE;

		xf_lock_x11(xfc, FALSE);

		xf_rail_paint(xfc, x, y, x + w, y + h);

		xf_unlock_x11(xfc, FALSE);
	}
	return TRUE;
}
Beispiel #5
0
void xf_sw_end_paint(rdpContext* context)
{
	rdpGdi* gdi;
	xfInfo* xfi;
	INT32 x, y;
	UINT32 w, h;

	xfi = ((xfContext*) context)->xfi;
	gdi = context->gdi;

	if (xfi->remote_app != TRUE)
	{
		if (xfi->complex_regions != TRUE)
		{
			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;

			XPutImage(xfi->display, xfi->primary, xfi->gc, xfi->image, x, y, x, y, w, h);
			XCopyArea(xfi->display, xfi->primary, xfi->window->handle, xfi->gc, x, y, w, h, x, y);
		}
		else
		{
			int i;
			int ninvalid;
			HGDI_RGN cinvalid;

			if (gdi->primary->hdc->hwnd->ninvalid < 1)
				return;

			ninvalid = gdi->primary->hdc->hwnd->ninvalid;
			cinvalid = gdi->primary->hdc->hwnd->cinvalid;

			for (i = 0; i < ninvalid; i++)
			{
				x = cinvalid[i].x;
				y = cinvalid[i].y;
				w = cinvalid[i].w;
				h = cinvalid[i].h;

				XPutImage(xfi->display, xfi->primary, xfi->gc, xfi->image, x, y, x, y, w, h);
				XCopyArea(xfi->display, xfi->primary, xfi->window->handle, xfi->gc, x, y, w, h, x, y);
			}

			XFlush(xfi->display);
		}
	}
	else
	{
		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;

		xf_rail_paint(xfi, context->rail, x, y, x + w - 1, y + h - 1);
	}
}
Beispiel #6
0
void xf_hw_end_paint(rdpContext *context)
{
	INT32 x, y;
	UINT32 w, h;
	xfContext *xfc = (xfContext *) context;
	if(!xfc->remote_app)
	{
		if(!xfc->complex_regions)
		{
			if(xfc->hdc->hwnd->invalid->null)
				return;
			x = xfc->hdc->hwnd->invalid->x;
			y = xfc->hdc->hwnd->invalid->y;
			w = xfc->hdc->hwnd->invalid->w;
			h = xfc->hdc->hwnd->invalid->h;
			xf_lock_x11(xfc, FALSE);
			if((xfc->settings->ScalingFactor != 1.0) || (xfc->offset_x) || (xfc->offset_y))
			{
				xf_draw_screen_scaled(xfc, x, y, w, h, TRUE);
			}
			else
			{
				XCopyArea(xfc->display, xfc->primary, xfc->drawable, xfc->gc, x, y, w, h, x, y);
			}
			xf_unlock_x11(xfc, FALSE);
		}
		else
		{
			int i;
			int ninvalid;
			HGDI_RGN cinvalid;
			if(xfc->hdc->hwnd->ninvalid < 1)
				return;
			ninvalid = xfc->hdc->hwnd->ninvalid;
			cinvalid = xfc->hdc->hwnd->cinvalid;
			xf_lock_x11(xfc, FALSE);
			for(i = 0; i < ninvalid; i++)
			{
				x = cinvalid[i].x;
				y = cinvalid[i].y;
				w = cinvalid[i].w;
				h = cinvalid[i].h;
				if((xfc->settings->ScalingFactor != 1.0) || (xfc->offset_x) || (xfc->offset_y))
				{
					xf_draw_screen_scaled(xfc, x, y, w, h, TRUE);
				}
				else
				{
					XCopyArea(xfc->display, xfc->primary, xfc->drawable, xfc->gc, x, y, w, h, x, y);
				}
			}
			XFlush(xfc->display);
			xf_unlock_x11(xfc, FALSE);
		}
	}
	else
	{
		if(xfc->hdc->hwnd->invalid->null)
			return;
		x = xfc->hdc->hwnd->invalid->x;
		y = xfc->hdc->hwnd->invalid->y;
		w = xfc->hdc->hwnd->invalid->w;
		h = xfc->hdc->hwnd->invalid->h;
		xf_lock_x11(xfc, FALSE);
		xf_rail_paint(xfc, context->rail, x, y, x + w - 1, y + h - 1);
		xf_unlock_x11(xfc, FALSE);
	}
}
Beispiel #7
0
static UINT xf_OutputUpdate(xfContext* xfc, xfGfxSurface* surface)
{
	UINT rc = ERROR_INTERNAL_ERROR;
	UINT32 surfaceX, surfaceY;
	RECTANGLE_16 surfaceRect;
	rdpGdi* gdi;
	UINT32 nbRects, x;
	const RECTANGLE_16* rects;
	gdi = xfc->context.gdi;
	surfaceX = surface->gdi.outputOriginX;
	surfaceY = surface->gdi.outputOriginY;
	surfaceRect.left = 0;
	surfaceRect.top = 0;
	surfaceRect.right = surface->gdi.width;
	surfaceRect.bottom = surface->gdi.height;
	XSetClipMask(xfc->display, xfc->gc, None);
	XSetFunction(xfc->display, xfc->gc, GXcopy);
	XSetFillStyle(xfc->display, xfc->gc, FillSolid);
	region16_intersect_rect(&(surface->gdi.invalidRegion),
	                        &(surface->gdi.invalidRegion), &surfaceRect);

	if (!(rects = region16_rects(&surface->gdi.invalidRegion, &nbRects)))
		return CHANNEL_RC_OK;

	for (x = 0; x < nbRects; x++)
	{
		const UINT32 nXSrc = rects[x].left;
		const UINT32 nYSrc = rects[x].top;
		const UINT32 width = rects[x].right - nXSrc;
		const UINT32 height = rects[x].bottom - nYSrc;
		const UINT32 nXDst = surfaceX + nXSrc;
		const UINT32 nYDst = surfaceY + nYSrc;

		if (surface->stage)
		{
			if (!freerdp_image_copy(surface->stage, gdi->dstFormat,
			                        surface->stageScanline, nXSrc, nYSrc,
			                        width, height,
			                        surface->gdi.data, surface->gdi.format,
			                        surface->gdi.scanline, nXSrc, nYSrc,
			                        NULL, FREERDP_FLIP_NONE))
				goto fail;
		}

		if (xfc->remote_app)
		{
			XPutImage(xfc->display, xfc->primary, xfc->gc,
			          surface->image, nXSrc, nYSrc,
			          nXDst, nYDst, width, height);
			xf_lock_x11(xfc, FALSE);
			xf_rail_paint(xfc, nXDst, nYDst, nXDst + width, nYDst + height);
			xf_unlock_x11(xfc, FALSE);
		}
		else
#ifdef WITH_XRENDER
			if (xfc->context.settings->SmartSizing
			    || xfc->context.settings->MultiTouchGestures)
			{
				XPutImage(xfc->display, xfc->primary, xfc->gc, surface->image,
				          nXSrc, nYSrc, nXDst, nYDst, width, height);
				xf_draw_screen(xfc, nXDst, nYDst, width, height);
			}
			else
#endif
			{
				XPutImage(xfc->display, xfc->drawable, xfc->gc,
				          surface->image, nXSrc, nYSrc,
				          nXDst, nYDst, width, height);
			}
	}

	rc = CHANNEL_RC_OK;
fail:
	region16_clear(&surface->gdi.invalidRegion);
	XSetClipMask(xfc->display, xfc->gc, None);
	XSync(xfc->display, False);
	return rc;
}
Beispiel #8
0
void xf_sw_end_paint(rdpUpdate* update)
{
	GDI* gdi;
	xfInfo* xfi;
	sint32 x, y;
	uint32 w, h;

	gdi = GET_GDI(update);
	xfi = GET_XFI(update);

	if (xfi->remote_app != True)
	{
		if (xfi->complex_regions != True)
		{
			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;

			XPutImage(xfi->display, xfi->primary, xfi->gc, xfi->image, x, y, x, y, w, h);
			XCopyArea(xfi->display, xfi->primary, xfi->window->handle, xfi->gc, x, y, w, h, x, y);
		}
		else
		{
			int i;
			int ninvalid;
			HGDI_RGN cinvalid;

			if (gdi->primary->hdc->hwnd->ninvalid < 1)
				return;

			ninvalid = gdi->primary->hdc->hwnd->ninvalid;
			cinvalid = gdi->primary->hdc->hwnd->cinvalid;

			for (i = 0; i < ninvalid; i++)
			{
				x = cinvalid[i].x;
				y = cinvalid[i].y;
				w = cinvalid[i].w;
				h = cinvalid[i].h;

				XPutImage(xfi->display, xfi->primary, xfi->gc, xfi->image, x, y, x, y, w, h);
				XCopyArea(xfi->display, xfi->primary, xfi->window->handle, xfi->gc, x, y, w, h, x, y);
			}

			XFlush(xfi->display);
		}
	}
	else
	{
		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;

		xf_rail_paint(xfi, update->rail, x, y, x + w - 1, y + h - 1);
	}
}
Beispiel #9
0
void xf_hw_end_paint(rdpContext* context)
{
	xfInfo* xfi;
	INT32 x, y;
	UINT32 w, h;

	xfi = ((xfContext*) context)->xfi;

	if (!xfi->remote_app)
	{
		if (!xfi->complex_regions)
		{
			if (xfi->hdc->hwnd->invalid->null)
				return;

			x = xfi->hdc->hwnd->invalid->x;
			y = xfi->hdc->hwnd->invalid->y;
			w = xfi->hdc->hwnd->invalid->w;
			h = xfi->hdc->hwnd->invalid->h;

			xf_lock_x11(xfi, FALSE);

			XCopyArea(xfi->display, xfi->primary, xfi->drawable, xfi->gc, x, y, w, h, x, y);

			xf_unlock_x11(xfi, FALSE);
		}
		else
		{
			int i;
			int ninvalid;
			HGDI_RGN cinvalid;

			if (xfi->hdc->hwnd->ninvalid < 1)
				return;

			ninvalid = xfi->hdc->hwnd->ninvalid;
			cinvalid = xfi->hdc->hwnd->cinvalid;

			xf_lock_x11(xfi, FALSE);

			for (i = 0; i < ninvalid; i++)
			{
				x = cinvalid[i].x;
				y = cinvalid[i].y;
				w = cinvalid[i].w;
				h = cinvalid[i].h;

				XCopyArea(xfi->display, xfi->primary, xfi->drawable, xfi->gc, x, y, w, h, x, y);
			}

			XFlush(xfi->display);

			xf_unlock_x11(xfi, FALSE);
		}
	}
	else
	{
		if (xfi->hdc->hwnd->invalid->null)
			return;

		x = xfi->hdc->hwnd->invalid->x;
		y = xfi->hdc->hwnd->invalid->y;
		w = xfi->hdc->hwnd->invalid->w;
		h = xfi->hdc->hwnd->invalid->h;

		xf_lock_x11(xfi, FALSE);

		xf_rail_paint(xfi, context->rail, x, y, x + w - 1, y + h - 1);

		xf_unlock_x11(xfi, FALSE);
	}
}