|
|
@ -377,30 +377,12 @@ rdpCopyArea(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
|
|
|
|
|
|
|
|
|
|
|
|
if (pSrc->type == DRAWABLE_WINDOW)
|
|
|
|
if (pSrc->type == DRAWABLE_WINDOW)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
rdpup_check_dirty_screen(&g_screenPriv);
|
|
|
|
pSrcWnd = (WindowPtr)pSrc;
|
|
|
|
|
|
|
|
|
|
|
|
if (pDst->type == DRAWABLE_WINDOW)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
pDstWnd = (WindowPtr)pDst;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (pDstWnd->viewable)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
can_do_screen_blt = pGC->alu == GXcopy;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (can_do_screen_blt)
|
|
|
|
if (pSrcWnd->viewable)
|
|
|
|
{
|
|
|
|
|
|
|
|
return rdpCopyAreaWndToWnd(pSrcWnd, pDstWnd, pGC,
|
|
|
|
|
|
|
|
srcx, srcy, w, h, dstx, dsty);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else if (pDst->type == DRAWABLE_PIXMAP)
|
|
|
|
|
|
|
|
{
|
|
|
|
{
|
|
|
|
pDstPixmap = (PixmapPtr)pDst;
|
|
|
|
rdpup_check_dirty_screen(&g_screenPriv);
|
|
|
|
pDstPriv = GETPIXPRIV(pDstPixmap);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (XRDP_IS_OS(pDstPriv))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if (pDst->type == DRAWABLE_WINDOW)
|
|
|
|
if (pDst->type == DRAWABLE_WINDOW)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
pDstWnd = (WindowPtr)pDst;
|
|
|
|
pDstWnd = (WindowPtr)pDst;
|
|
|
@ -442,6 +424,12 @@ rdpCopyArea(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
|
|
|
|
pSrcPriv = GETPIXPRIV(pSrcPixmap);
|
|
|
|
pSrcPriv = GETPIXPRIV(pSrcPixmap);
|
|
|
|
|
|
|
|
|
|
|
|
if (XRDP_IS_OS(pSrcPriv))
|
|
|
|
if (XRDP_IS_OS(pSrcPriv))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if (pDst->type == DRAWABLE_WINDOW)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
pDstWnd = (WindowPtr)pDst;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (pDstWnd->viewable)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
rdpup_check_dirty_screen(&g_screenPriv);
|
|
|
|
rdpup_check_dirty_screen(&g_screenPriv);
|
|
|
|
rdpup_check_dirty(pSrcPixmap, pSrcPriv);
|
|
|
|
rdpup_check_dirty(pSrcPixmap, pSrcPriv);
|
|
|
@ -449,6 +437,26 @@ rdpCopyArea(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
|
|
|
|
srcx, srcy, w, h, dstx, dsty);
|
|
|
|
srcx, srcy, w, h, dstx, dsty);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
else if (pDst->type == DRAWABLE_PIXMAP)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
pDstPixmap = (PixmapPtr)pDst;
|
|
|
|
|
|
|
|
pDstPriv = GETPIXPRIV(pDstPixmap);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (XRDP_IS_OS(pDstPriv))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if (g_can_do_pix_to_pix)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
rdpup_check_dirty(pSrcPixmap, pSrcPriv);
|
|
|
|
|
|
|
|
rdpup_check_dirty(pDstPixmap, pDstPriv);
|
|
|
|
|
|
|
|
return rdpCopyAreaPixmapToPixmap(pSrcPixmap, pSrcPriv,
|
|
|
|
|
|
|
|
pDstPixmap, pDstPriv,
|
|
|
|
|
|
|
|
pGC, srcx, srcy, w, h,
|
|
|
|
|
|
|
|
dstx, dsty);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* do original call */
|
|
|
|
/* do original call */
|
|
|
|
rv = rdpCopyAreaOrg(pSrc, pDst, pGC, srcx, srcy, w, h, dstx, dsty);
|
|
|
|
rv = rdpCopyAreaOrg(pSrc, pDst, pGC, srcx, srcy, w, h, dstx, dsty);
|
|
|
@ -485,26 +493,6 @@ rdpCopyArea(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else
|
|
|
|
{
|
|
|
|
|
|
|
|
post_process = 1;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (g_do_dirty_os)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
LLOGLN(10, ("rdpCopyArea: gettig dirty"));
|
|
|
|
|
|
|
|
pDstPriv->is_dirty = 1;
|
|
|
|
|
|
|
|
pDirtyPriv = pDstPriv;
|
|
|
|
|
|
|
|
dirty_type = RDI_IMGLL;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
rdpup_switch_os_surface(pDstPriv->rdpindex);
|
|
|
|
|
|
|
|
reset_surface = 1;
|
|
|
|
|
|
|
|
rdpup_get_pixmap_image_rect(pDstPixmap, &id);
|
|
|
|
|
|
|
|
got_id = 1;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (pDst->type == DRAWABLE_WINDOW)
|
|
|
|
if (pDst->type == DRAWABLE_WINDOW)
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -528,6 +516,7 @@ rdpCopyArea(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (!post_process)
|
|
|
|
if (!post_process)
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -614,5 +603,4 @@ rdpCopyArea(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return rv;
|
|
|
|
return rv;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|