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_line_to(rdpContext* context, const LINE_TO_ORDER* line_to) { HPEN pen; HPEN org_pen; int x, y, w, h; UINT32 pen_color; wfContext* wfc = (wfContext*)context; if (!context || !line_to) return FALSE; if (!wf_decode_color(wfc, line_to->penColor, &pen_color, NULL)) return FALSE; 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); return TRUE; }
void wf_gdi_multi_opaque_rect(wfContext* wfc, MULTI_OPAQUE_RECT_ORDER* multi_opaque_rect) { int i; RECT rect; HBRUSH brush; UINT32 brush_color; DELTA_RECT* rectangle; for (i = 1; i < (int) multi_opaque_rect->numRectangles + 1; i++) { rectangle = &multi_opaque_rect->rectangles[i]; brush_color = freerdp_color_convert_var_bgr(multi_opaque_rect->color, wfc->srcBpp, wfc->dstBpp, wfc->clrconv); rect.left = rectangle->left; rect.top = rectangle->top; rect.right = rectangle->left + rectangle->width; rect.bottom = rectangle->top + rectangle->height; brush = CreateSolidBrush(brush_color); FillRect(wfc->drawing->hdc, &rect, brush); if (wfc->drawing == wfc->primary) wf_invalidate_region(wfc, rect.left, rect.top, rect.right - rect.left + 1, rect.bottom - rect.top + 1); DeleteObject(brush); } }
static void l_ui_line(struct rdp_inst * inst, uint8 opcode, int startx, int starty, int endx, int endy, RD_PEN * pen) { wfInfo * wfi; HPEN hpen; HPEN org_hpen; int color; int org_rop2; wfi = GET_WFI(inst); //printf("ui_line opcode %d startx %d starty %d endx %d endy %d\n", opcode, startx, starty, endx, endy); color = wf_color_convert(wfi, pen->color, inst->settings->server_depth); hpen = CreatePen(pen->style, pen->width, color); org_rop2 = SetROP2(wfi->drw->hdc, opcode + 1); org_hpen = (HPEN)SelectObject(wfi->drw->hdc, hpen); MoveToEx(wfi->drw->hdc, startx, starty, NULL); LineTo(wfi->drw->hdc, endx, endy); SelectObject(wfi->drw->hdc, org_hpen); SetROP2 (wfi->drw->hdc, org_rop2); DeleteObject(hpen); if (wfi->drw == wfi->backstore) { wf_invalidate_region(wfi, min(startx, endx), min(starty, endy), max(startx, endx), max(starty, endy)); } }
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); }
static BOOL wf_gdi_opaque_rect(rdpContext* context, const OPAQUE_RECT_ORDER* opaque_rect) { RECT rect; HBRUSH brush; UINT32 brush_color; wfContext* wfc = (wfContext*)context; if (!context || !opaque_rect) return FALSE; if (!wf_decode_color(wfc, opaque_rect->color, &brush_color, NULL)) return FALSE; rect.left = opaque_rect->nLeftRect; rect.top = opaque_rect->nTopRect; rect.right = opaque_rect->nLeftRect + opaque_rect->nWidth; rect.bottom = opaque_rect->nTopRect + opaque_rect->nHeight; brush = CreateSolidBrush(brush_color); FillRect(wfc->drawing->hdc, &rect, brush); DeleteObject(brush); if (wfc->drawing == wfc->primary) wf_invalidate_region(wfc, rect.left, rect.top, rect.right - rect.left + 1, rect.bottom - rect.top + 1); return TRUE; }
static BOOL wf_gdi_multi_opaque_rect(rdpContext* context, const MULTI_OPAQUE_RECT_ORDER* multi_opaque_rect) { UINT32 i; RECT rect; HBRUSH brush; UINT32 brush_color; wfContext* wfc = (wfContext*)context; if (!context || !multi_opaque_rect) return FALSE; if (!wf_decode_color(wfc, multi_opaque_rect->color, &brush_color, NULL)) return FALSE; for (i = 0; i < multi_opaque_rect->numRectangles; i++) { const DELTA_RECT* rectangle = &multi_opaque_rect->rectangles[i]; rect.left = rectangle->left; rect.top = rectangle->top; rect.right = rectangle->left + rectangle->width; rect.bottom = rectangle->top + rectangle->height; brush = CreateSolidBrush(brush_color); FillRect(wfc->drawing->hdc, &rect, brush); if (wfc->drawing == wfc->primary) wf_invalidate_region(wfc, rect.left, rect.top, rect.right - rect.left + 1, rect.bottom - rect.top + 1); DeleteObject(brush); } return TRUE; }
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_dstblt(wfContext* wfc, DSTBLT_ORDER* dstblt) { BitBlt(wfc->drawing->hdc, dstblt->nLeftRect, dstblt->nTopRect, dstblt->nWidth, dstblt->nHeight, NULL, 0, 0, gdi_rop3_code(dstblt->bRop)); wf_invalidate_region(wfc, dstblt->nLeftRect, dstblt->nTopRect, dstblt->nWidth, dstblt->nHeight); }
void wf_gdi_scrblt(wfContext* wfc, SCRBLT_ORDER* scrblt) { BitBlt(wfc->drawing->hdc, scrblt->nLeftRect, scrblt->nTopRect, scrblt->nWidth, scrblt->nHeight, wfc->primary->hdc, scrblt->nXSrc, scrblt->nYSrc, gdi_rop3_code(scrblt->bRop)); wf_invalidate_region(wfc, scrblt->nLeftRect, scrblt->nTopRect, scrblt->nWidth, scrblt->nHeight); }
void wf_gdi_dstblt(rdpContext* context, DSTBLT_ORDER* dstblt) { wfInfo* wfi = ((wfContext*) context)->wfi; BitBlt(wfi->drawing->hdc, dstblt->nLeftRect, dstblt->nTopRect, dstblt->nWidth, dstblt->nHeight, NULL, 0, 0, gdi_rop3_code(dstblt->bRop)); wf_invalidate_region(wfi, dstblt->nLeftRect, dstblt->nTopRect, dstblt->nWidth, dstblt->nHeight); }
static void l_ui_destblt(struct rdp_inst * inst, uint8 opcode, int x, int y, int cx, int cy) { wfInfo * wfi = GET_WFI(inst); BitBlt(wfi->drw->hdc, x, y, cx, cy, NULL, 0, 0, rop3_code_table[opcode]); if (wfi->drw == wfi->backstore) { wf_invalidate_region(wfi, x, y, x + cx, y + cy); } }
void wf_gdi_scrblt(rdpContext* context, SCRBLT_ORDER* scrblt) { wfInfo* wfi = ((wfContext*) context)->wfi; BitBlt(wfi->drawing->hdc, scrblt->nLeftRect, scrblt->nTopRect, scrblt->nWidth, scrblt->nHeight, wfi->primary->hdc, scrblt->nXSrc, scrblt->nYSrc, gdi_rop3_code(scrblt->bRop)); wf_invalidate_region(wfi, scrblt->nLeftRect, scrblt->nTopRect, scrblt->nWidth, scrblt->nHeight); }
static void l_ui_screenblt(struct rdp_inst * inst, uint8 opcode, int x, int y, int cx, int cy, int srcx, int srcy) { wfInfo * wfi = GET_WFI(inst); //printf("ui_screenblt: opcode %d x %d y %d cx %d cy %d srcx %d srcy %d \n", opcode, x, y, cx, cy, srcx, srcy); BitBlt(wfi->drw->hdc, x, y, cx, cy, wfi->backstore->hdc, srcx, srcy, rop3_code_table[opcode]); /* The source surface is always the primary drawing surface */ if (wfi->drw == wfi->backstore) { wf_invalidate_region(wfi, x, y, x + cx, y + cy); } }
void wf_Bitmap_Paint(wfContext* wfc, rdpBitmap* bitmap) { int width, height; wfBitmap* wf_bitmap = (wfBitmap*) bitmap; width = bitmap->right - bitmap->left + 1; height = bitmap->bottom - bitmap->top + 1; BitBlt(wfc->primary->hdc, bitmap->left, bitmap->top, width, height, wf_bitmap->hdc, 0, 0, SRCCOPY); wf_invalidate_region(wfc, bitmap->left, bitmap->top, width, height); }
void wf_gdi_memblt(wfContext* wfc, MEMBLT_ORDER* memblt) { wfBitmap* bitmap; bitmap = (wfBitmap*) memblt->bitmap; BitBlt(wfc->drawing->hdc, memblt->nLeftRect, memblt->nTopRect, memblt->nWidth, memblt->nHeight, bitmap->hdc, memblt->nXSrc, memblt->nYSrc, gdi_rop3_code(memblt->bRop)); if (wfc->drawing == wfc->primary) wf_invalidate_region(wfc, memblt->nLeftRect, memblt->nTopRect, memblt->nWidth, memblt->nHeight); }
static void l_ui_paint_bitmap(struct rdp_inst * inst, int x, int y, int cx, int cy, int width, int height, uint8 * data) { wfInfo * wfi; struct wf_bitmap * bm; wfi = GET_WFI(inst); //printf("ui_paint_bitmap x %d y %d cx %d cy %d width %d height %d\n", x, y, cx, cy, width, height); bm = (struct wf_bitmap *) l_ui_create_bitmap(inst, width, height, data); BitBlt(wfi->backstore->hdc, x, y, cx, cy, bm->hdc, 0, 0, SRCCOPY); wf_bitmap_free(bm); wf_invalidate_region(wfi, x, y, x + cx, y + cy); }
static BOOL wf_gdi_polyline(rdpContext* context, const POLYLINE_ORDER* polyline) { int org_rop2; HPEN hpen; HPEN org_hpen; UINT32 pen_color; wfContext* wfc = (wfContext*)context; if (!context || !polyline) return FALSE; if (!wf_decode_color(wfc, polyline->penColor, &pen_color, NULL)) return FALSE; hpen = CreatePen(0, 1, pen_color); org_rop2 = wf_set_rop2(wfc->drawing->hdc, polyline->bRop2); org_hpen = (HPEN) SelectObject(wfc->drawing->hdc, hpen); if (polyline->numDeltaEntries > 0) { POINT* pts; POINT temp; int numPoints; int i; numPoints = polyline->numDeltaEntries + 1; pts = (POINT*) malloc(sizeof(POINT) * numPoints); pts[0].x = temp.x = polyline->xStart; pts[0].y = temp.y = polyline->yStart; for (i = 0; i < (int) polyline->numDeltaEntries; i++) { temp.x += polyline->points[i].x; temp.y += polyline->points[i].y; pts[i + 1].x = temp.x; pts[i + 1].y = temp.y; } if (wfc->drawing == wfc->primary) wf_invalidate_region(wfc, wfc->client_x, wfc->client_y, wfc->client_width, wfc->client_height); Polyline(wfc->drawing->hdc, pts, numPoints); free(pts); } SelectObject(wfc->drawing->hdc, org_hpen); wf_set_rop2(wfc->drawing->hdc, org_rop2); DeleteObject(hpen); return TRUE; }
void wf_Bitmap_Paint(rdpContext* context, rdpBitmap* bitmap) { int width, height; wfBitmap* wf_bitmap = (wfBitmap*) bitmap; wfInfo* wfi = ((wfContext*) context)->wfi; width = bitmap->right - bitmap->left + 1; height = bitmap->bottom - bitmap->top + 1; BitBlt(wfi->primary->hdc, bitmap->left, bitmap->top, width, height, wf_bitmap->hdc, 0, 0, GDI_SRCCOPY); wf_invalidate_region(wfi, bitmap->left, bitmap->top, width, height); }
static BOOL wf_gdi_dstblt(rdpContext* context, const DSTBLT_ORDER* dstblt) { wfContext* wfc = (wfContext*)context; if (!context || !dstblt) return FALSE; if (!BitBlt(wfc->drawing->hdc, dstblt->nLeftRect, dstblt->nTopRect, dstblt->nWidth, dstblt->nHeight, NULL, 0, 0, gdi_rop3_code(dstblt->bRop))) return FALSE; wf_invalidate_region(wfc, dstblt->nLeftRect, dstblt->nTopRect, dstblt->nWidth, dstblt->nHeight); return TRUE; }
static void l_ui_draw_glyph(struct rdp_inst * inst, int x, int y, int cx, int cy, RD_HGLYPH glyph) { wfInfo * wfi; struct wf_bitmap * bm; wfi = GET_WFI(inst); bm = (struct wf_bitmap *) glyph; BitBlt(wfi->drw->hdc, x, y, cx, cy, bm->hdc, 0, 0, 0x00E20746); /* DSPDxax */ if (wfi->drw == wfi->backstore) { wf_invalidate_region(wfi, x, y, x + cx, y + cy); } }
static void l_ui_memblt(struct rdp_inst * inst, uint8 opcode, int x, int y, int cx, int cy, RD_HBITMAP src, int srcx, int srcy) { wfInfo * wfi; struct wf_bitmap * bm; wfi = GET_WFI(inst); bm = (struct wf_bitmap *) src; //printf("ui_memblt %i %i %i %i %i %i %i\n", x, y, cx, cy, srcx, srcy, opcode); BitBlt(wfi->drw->hdc, x, y, cx, cy, bm->hdc, srcx, srcy, rop3_code_table[opcode]); if (wfi->drw == wfi->backstore) { wf_invalidate_region(wfi, x, y, x + cx, y + cy); } }
static BOOL wf_gdi_scrblt(rdpContext* context, const SCRBLT_ORDER* scrblt) { wfContext* wfc = (wfContext*)context; if (!context || !scrblt || !wfc->drawing) return FALSE; if (!BitBlt(wfc->drawing->hdc, scrblt->nLeftRect, scrblt->nTopRect, scrblt->nWidth, scrblt->nHeight, wfc->primary->hdc, scrblt->nXSrc, scrblt->nYSrc, gdi_rop3_code(scrblt->bRop))) return FALSE; wf_invalidate_region(wfc, scrblt->nLeftRect, scrblt->nTopRect, scrblt->nWidth, scrblt->nHeight); return TRUE; }
static BOOL wf_Bitmap_Paint(rdpContext* context, rdpBitmap* bitmap) { BOOL rc; UINT32 width, height; wfContext* wfc = (wfContext*)context; wfBitmap* wf_bitmap = (wfBitmap*) bitmap; if (!context || !bitmap) return FALSE; width = bitmap->right - bitmap->left + 1; height = bitmap->bottom - bitmap->top + 1; rc = BitBlt(wfc->primary->hdc, bitmap->left, bitmap->top, width, height, wf_bitmap->hdc, 0, 0, SRCCOPY); wf_invalidate_region(wfc, bitmap->left, bitmap->top, width, height); return rc; }
static void l_ui_polyline(struct rdp_inst * inst, uint8 opcode, RD_POINT * points, int npoints, RD_PEN * pen) { wfInfo * wfi; HPEN hpen; HPEN org_hpen; int color; int org_rop2; int i; POINT * ps; wfi = GET_WFI(inst); //printf("ui_polyline opcode %d npoints %d\n", opcode, npoints); color = wf_color_convert(wfi, pen->color, inst->settings->server_depth); hpen = CreatePen(pen->style, pen->width, color); org_rop2 = SetROP2(wfi->drw->hdc, opcode + 1); org_hpen = (HPEN)SelectObject(wfi->drw->hdc, hpen); if (npoints > 0) { ps = (POINT *) malloc(sizeof(POINT) * npoints); for (i = 0; i < npoints; i++) { //printf("ui_polyline point %d %d %d\n", i, points[i].x, points[i].y); if (i == 0) { ps[i].x = points[i].x; ps[i].y = points[i].y; } else { ps[i].x = ps[i - 1].x + points[i].x; ps[i].y = ps[i - 1].y + points[i].y; } if (wfi->drw == wfi->backstore) { wf_invalidate_region(wfi, ps[i].x, ps[i].y, ps[i].x + 1, ps[i].y + 1); } } Polyline(wfi->drw->hdc, ps, npoints); } SelectObject(wfi->drw->hdc, org_hpen); SetROP2 (wfi->drw->hdc, org_rop2); DeleteObject(hpen); }
void wf_gdi_opaque_rect(wfContext* wfc, OPAQUE_RECT_ORDER* opaque_rect) { RECT rect; HBRUSH brush; UINT32 brush_color; brush_color = freerdp_color_convert_var_bgr(opaque_rect->color, wfc->srcBpp, wfc->dstBpp, wfc->clrconv); rect.left = opaque_rect->nLeftRect; rect.top = opaque_rect->nTopRect; rect.right = opaque_rect->nLeftRect + opaque_rect->nWidth; rect.bottom = opaque_rect->nTopRect + opaque_rect->nHeight; brush = CreateSolidBrush(brush_color); FillRect(wfc->drawing->hdc, &rect, brush); DeleteObject(brush); if (wfc->drawing == wfc->primary) wf_invalidate_region(wfc, rect.left, rect.top, rect.right - rect.left + 1, rect.bottom - rect.top + 1); }
void wf_gdi_polyline(wfContext* wfc, POLYLINE_ORDER* polyline) { int i; POINT* pts; int org_rop2; HPEN hpen; HPEN org_hpen; UINT32 pen_color; pen_color = freerdp_color_convert_var_bgr(polyline->penColor, wfc->srcBpp, wfc->dstBpp, wfc->clrconv); hpen = CreatePen(0, 1, pen_color); org_rop2 = wf_set_rop2(wfc->drawing->hdc, polyline->bRop2); org_hpen = (HPEN) SelectObject(wfc->drawing->hdc, hpen); if (polyline->numPoints > 0) { POINT temp; temp.x = polyline->xStart; temp.y = polyline->yStart; pts = (POINT*) malloc(sizeof(POINT) * polyline->numPoints); for (i = 0; i < (int) polyline->numPoints; i++) { temp.x += polyline->points[i].x; temp.y += polyline->points[i].y; pts[i].x = temp.x; pts[i].y = temp.y; if (wfc->drawing == wfc->primary) wf_invalidate_region(wfc, pts[i].x, pts[i].y, pts[i].x + 1, pts[i].y + 1); } Polyline(wfc->drawing->hdc, pts, polyline->numPoints); free(pts); } SelectObject(wfc->drawing->hdc, org_hpen); wf_set_rop2(wfc->drawing->hdc, org_rop2); DeleteObject(hpen); }
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; }
static void l_ui_rect(struct rdp_inst * inst, int x, int y, int cx, int cy, int color) { wfInfo * wfi; RECT rect; HBRUSH brush; wfi = GET_WFI(inst); color = wf_color_convert(wfi, color, inst->settings->server_depth); //printf("ui_rect %i %i %i %i %i\n", x, y, cx, cy, color); rect.left = x; rect.top = y; rect.right = x + cx; rect.bottom = y + cy; brush = CreateSolidBrush(color); FillRect(wfi->drw->hdc, &rect, brush); DeleteObject(brush); if (wfi->drw == wfi->backstore) { wf_invalidate_region(wfi, rect.left, rect.top, rect.right, rect.bottom); } }
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); }