static HBRUSH wf_create_brush(wfContext* wfc, rdpBrush* brush, UINT32 color, UINT32 bpp) { UINT32 i; HBRUSH br; LOGBRUSH lbr; BYTE* cdata; BYTE ipattern[8]; HBITMAP pattern = NULL; lbr.lbStyle = brush->style; if (lbr.lbStyle == BS_DIBPATTERN || lbr.lbStyle == BS_DIBPATTERN8X8 || lbr.lbStyle == BS_DIBPATTERNPT) lbr.lbColor = DIB_RGB_COLORS; else lbr.lbColor = color; if (lbr.lbStyle == BS_PATTERN || lbr.lbStyle == BS_PATTERN8X8) { if (brush->bpp > 1) { UINT32 format = gdi_get_pixel_format(bpp); pattern = wf_create_dib(wfc, 8, 8, format, brush->data, NULL); lbr.lbHatch = (ULONG_PTR) pattern; } else { for (i = 0; i != 8; i++) ipattern[7 - i] = brush->data[i]; cdata = wf_glyph_convert(wfc, 8, 8, ipattern); pattern = CreateBitmap(8, 8, 1, 1, cdata); lbr.lbHatch = (ULONG_PTR) pattern; free(cdata); } } else if (lbr.lbStyle == BS_HATCHED) { lbr.lbHatch = brush->hatch; } else { lbr.lbHatch = 0; } br = CreateBrushIndirect(&lbr); SetBrushOrgEx(wfc->drawing->hdc, brush->x, brush->y, NULL); if (pattern != NULL) DeleteObject(pattern); return br; }
HBRUSH wf_create_brush(wfInfo * wfi, rdpBrush* brush, uint32 color, int bpp) { int i; HBRUSH br; LOGBRUSH lbr; uint8* cdata; uint8 ipattern[8]; HBITMAP pattern = NULL; lbr.lbStyle = brush->style; if (lbr.lbStyle == BS_DIBPATTERN || lbr.lbStyle == BS_DIBPATTERN8X8 || lbr.lbStyle == BS_DIBPATTERNPT) lbr.lbColor = DIB_RGB_COLORS; else lbr.lbColor = color; if (lbr.lbStyle == BS_PATTERN || lbr.lbStyle == BS_PATTERN8X8) { if (brush->bpp > 1) { pattern = wf_create_dib(wfi, 8, 8, bpp, brush->data, NULL); lbr.lbHatch = (ULONG_PTR) pattern; } else { for (i = 0; i != 8; i++) ipattern[7 - i] = brush->data[i]; cdata = wf_glyph_convert(wfi, 8, 8, ipattern); pattern = CreateBitmap(8, 8, 1, 1, cdata); lbr.lbHatch = (ULONG_PTR) pattern; free(cdata); } } else if (lbr.lbStyle == BS_HATCHED) { lbr.lbHatch = brush->hatch; } else { lbr.lbHatch = 0; } br = CreateBrushIndirect(&lbr); SetBrushOrgEx(wfi->drawing->hdc, brush->x, brush->y, NULL); if (pattern != NULL) DeleteObject(pattern); return br; }
static RD_HGLYPH l_ui_create_glyph(struct rdp_inst * inst, int width, int height, uint8 * data) { wfInfo * wfi; uint8 * cdata; HDC hdc; struct wf_bitmap * bm; wfi = GET_WFI(inst); hdc = GetDC(NULL); bm = (struct wf_bitmap *) malloc(sizeof(struct wf_bitmap)); bm->hdc = CreateCompatibleDC(hdc); cdata = wf_glyph_convert(wfi, width, height, data); bm->bitmap = CreateBitmap(width, height, 1, 1, cdata); bm->org_bitmap = (HBITMAP)SelectObject(bm->hdc, bm->bitmap); free(cdata); ReleaseDC(NULL, hdc); return (RD_HGLYPH)bm; }
static HBRUSH wf_create_brush(wfInfo * wfi, RD_BRUSH * brush, int color, int bpp) { HBRUSH br; LOGBRUSH lbr; HBITMAP pattern = NULL; uint8 * cdata; int i; uint8 ipattern[8]; // Style lbr.lbStyle = brush->style; // Color if (lbr.lbStyle == BS_DIBPATTERN || lbr.lbStyle == BS_DIBPATTERN8X8 || lbr.lbStyle == BS_DIBPATTERNPT) { lbr.lbColor = DIB_RGB_COLORS; } else { lbr.lbColor = color; } // Hatch if (lbr.lbStyle == BS_PATTERN || lbr.lbStyle == BS_PATTERN8X8) { if (brush->bd == 0) /* rdp4 brush */ { for (i = 0; i != 8; i++) { ipattern[7 - i] = brush->pattern[i]; } cdata = wf_glyph_convert(wfi, 8, 8, ipattern); pattern = CreateBitmap(8, 8, 1, 1, cdata); lbr.lbHatch = (ULONG_PTR)pattern; free(cdata); } else if (brush->bd->color_code > 1) /* > 1 bpp */ { pattern = wf_create_dib(wfi, 8, 8, bpp, 1, brush->bd->data); lbr.lbHatch = (ULONG_PTR)pattern; } else { cdata = wf_glyph_convert(wfi, 8, 8, brush->bd->data); pattern = CreateBitmap(8, 8, 1, 1, cdata); lbr.lbHatch = (ULONG_PTR)pattern; free(cdata); } } else if (lbr.lbStyle == BS_HATCHED) { lbr.lbHatch = brush->pattern[0]; } else { lbr.lbHatch = 0; } br = CreateBrushIndirect(&lbr); SetBrushOrgEx(wfi->drw->hdc, brush->xorigin, brush->yorigin, NULL); if (pattern != NULL) { DeleteObject(pattern); } return br; }