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); } }
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); } }
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; }
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; }
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); } }
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); } }
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; }
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); } }
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); } }