void wf_gdi_patblt(wfContext* wfc, PATBLT_ORDER* patblt) { HBRUSH brush; HBRUSH org_brush; int org_bkmode; UINT32 fgcolor; UINT32 bgcolor; COLORREF org_bkcolor; COLORREF org_textcolor; fgcolor = freerdp_color_convert_bgr(patblt->foreColor, wfc->srcBpp, wfc->dstBpp, wfc->clrconv); bgcolor = freerdp_color_convert_bgr(patblt->backColor, wfc->srcBpp, wfc->dstBpp, wfc->clrconv); brush = wf_create_brush(wfc, &patblt->brush, fgcolor, wfc->srcBpp); org_bkmode = SetBkMode(wfc->drawing->hdc, OPAQUE); org_bkcolor = SetBkColor(wfc->drawing->hdc, bgcolor); org_textcolor = SetTextColor(wfc->drawing->hdc, fgcolor); org_brush = (HBRUSH)SelectObject(wfc->drawing->hdc, brush); PatBlt(wfc->drawing->hdc, patblt->nLeftRect, patblt->nTopRect, patblt->nWidth, patblt->nHeight, gdi_rop3_code(patblt->bRop)); SelectObject(wfc->drawing->hdc, org_brush); DeleteObject(brush); SetBkMode(wfc->drawing->hdc, org_bkmode); SetBkColor(wfc->drawing->hdc, org_bkcolor); SetTextColor(wfc->drawing->hdc, org_textcolor); if (wfc->drawing == wfc->primary) wf_invalidate_region(wfc, patblt->nLeftRect, patblt->nTopRect, patblt->nWidth, patblt->nHeight); }
static void l_ui_patblt(struct rdp_inst * inst, uint8 opcode, int x, int y, int cx, int cy, RD_BRUSH * brush, int bgcolor, int fgcolor) { wfInfo * wfi; HBRUSH br; HBRUSH org_br; int org_bkmode; COLORREF org_bkcolor; COLORREF org_textcolor; wfi = GET_WFI(inst); //printf("ui_patblt: style %d x %d y %d cx %d cy %d\n", brush->style, x, y, cx, cy); bgcolor = wf_color_convert(wfi, bgcolor, inst->settings->server_depth); fgcolor = wf_color_convert(wfi, fgcolor, inst->settings->server_depth); br = wf_create_brush(wfi, brush, fgcolor, inst->settings->server_depth); org_bkmode = SetBkMode(wfi->drw->hdc, OPAQUE); org_bkcolor = SetBkColor(wfi->drw->hdc, bgcolor); org_textcolor = SetTextColor(wfi->drw->hdc, fgcolor); org_br = (HBRUSH)SelectObject(wfi->drw->hdc, br); PatBlt(wfi->drw->hdc, x, y, cx, cy, rop3_code_table[opcode]); SelectObject(wfi->drw->hdc, org_br); DeleteObject(br); SetBkMode(wfi->drw->hdc, org_bkmode); SetBkColor(wfi->drw->hdc, org_bkcolor); SetTextColor(wfi->drw->hdc, org_textcolor); if (wfi->drw == wfi->backstore) { wf_invalidate_region(wfi, x, y, x + cx, y + cy); } }
static BOOL wf_gdi_patblt(rdpContext* context, PATBLT_ORDER* patblt) { HBRUSH brush; HBRUSH org_brush; int org_bkmode; UINT32 fgcolor; UINT32 bgcolor; COLORREF org_bkcolor; COLORREF org_textcolor; BOOL rc; wfContext* wfc = (wfContext*)context; if (!context || !patblt) return FALSE; if (!wf_decode_color(wfc, patblt->foreColor, &fgcolor, NULL)) return FALSE; if (!wf_decode_color(wfc, patblt->backColor, &bgcolor, NULL)) return FALSE; brush = wf_create_brush(wfc, &patblt->brush, fgcolor, context->settings->ColorDepth); org_bkmode = SetBkMode(wfc->drawing->hdc, OPAQUE); org_bkcolor = SetBkColor(wfc->drawing->hdc, bgcolor); org_textcolor = SetTextColor(wfc->drawing->hdc, fgcolor); org_brush = (HBRUSH)SelectObject(wfc->drawing->hdc, brush); rc = PatBlt(wfc->drawing->hdc, patblt->nLeftRect, patblt->nTopRect, patblt->nWidth, patblt->nHeight, gdi_rop3_code(patblt->bRop)); SelectObject(wfc->drawing->hdc, org_brush); DeleteObject(brush); SetBkMode(wfc->drawing->hdc, org_bkmode); SetBkColor(wfc->drawing->hdc, org_bkcolor); SetTextColor(wfc->drawing->hdc, org_textcolor); if (wfc->drawing == wfc->primary) wf_invalidate_region(wfc, patblt->nLeftRect, patblt->nTopRect, patblt->nWidth, patblt->nHeight); return rc; }