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); }
void wf_gdi_line_to(wfContext* wfc, LINE_TO_ORDER* line_to) { HPEN pen; HPEN org_pen; int x, y, w, h; UINT32 pen_color; pen_color = freerdp_color_convert_bgr(line_to->penColor, wfc->srcBpp, wfc->dstBpp, wfc->clrconv); pen = CreatePen(line_to->penStyle, line_to->penWidth, pen_color); wf_set_rop2(wfc->drawing->hdc, line_to->bRop2); org_pen = (HPEN) SelectObject(wfc->drawing->hdc, pen); MoveToEx(wfc->drawing->hdc, line_to->nXStart, line_to->nYStart, NULL); LineTo(wfc->drawing->hdc, line_to->nXEnd, line_to->nYEnd); x = (line_to->nXStart < line_to->nXEnd) ? line_to->nXStart : line_to->nXEnd; y = (line_to->nYStart < line_to->nYEnd) ? line_to->nYStart : line_to->nYEnd; w = (line_to->nXStart < line_to->nXEnd) ? (line_to->nXEnd - line_to->nXStart) : (line_to->nXStart - line_to->nXEnd); h = (line_to->nYStart < line_to->nYEnd) ? (line_to->nYEnd - line_to->nYStart) : (line_to->nYStart - line_to->nYEnd); if (wfc->drawing == wfc->primary) wf_invalidate_region(wfc, x, y, w, h); SelectObject(wfc->drawing->hdc, org_pen); DeleteObject(pen); }
void wf_gdi_polyline(rdpContext* context, POLYLINE_ORDER* polyline) { int i; POINT* pts; int org_rop2; HPEN hpen; HPEN org_hpen; uint32 pen_color; wfInfo* wfi = ((wfContext*) context)->wfi; pen_color = freerdp_color_convert_bgr(polyline->penColor, wfi->srcBpp, wfi->dstBpp, wfi->clrconv); hpen = CreatePen(0, 1, pen_color); org_rop2 = wf_set_rop2(wfi->drawing->hdc, polyline->bRop2); org_hpen = (HPEN) SelectObject(wfi->drawing->hdc, hpen); if (polyline->numPoints > 0) { pts = (POINT*) xmalloc(sizeof(POINT) * polyline->numPoints); for (i = 0; i < (int) polyline->numPoints; i++) { pts[i].x = polyline->points[i].x; pts[i].y = polyline->points[i].y; if (wfi->drawing == wfi->primary) wf_invalidate_region(wfi, pts[i].x, pts[i].y, pts[i].x + 1, pts[i].y + 1); } Polyline(wfi->drawing->hdc, pts, polyline->numPoints); xfree(pts); } SelectObject(wfi->drawing->hdc, org_hpen); wf_set_rop2(wfi->drawing->hdc, org_rop2); DeleteObject(hpen); }