int gdi_SolidFill(RdpgfxClientContext* context, RDPGFX_SOLID_FILL_PDU* solidFill) { UINT16 index; UINT32 color; BYTE a, r, g, b; int nWidth, nHeight; RDPGFX_RECT16* rect; gdiGfxSurface* surface; RECTANGLE_16 invalidRect; rdpGdi* gdi = (rdpGdi*) context->custom; surface = (gdiGfxSurface*) context->GetSurfaceData(context, solidFill->surfaceId); if (!surface) return -1; b = solidFill->fillPixel.B; g = solidFill->fillPixel.G; r = solidFill->fillPixel.R; a = solidFill->fillPixel.XA; if (!gdi->invert) color = ARGB32(a, r, g, b); else color = ABGR32(a, r, g, b); for (index = 0; index < solidFill->fillRectCount; index++) { rect = &(solidFill->fillRects[index]); nWidth = rect->right - rect->left; nHeight = rect->bottom - rect->top; invalidRect.left = rect->left; invalidRect.top = rect->top; invalidRect.right = rect->right; invalidRect.bottom = rect->bottom; freerdp_image_fill(surface->data, surface->format, surface->scanline, rect->left, rect->top, nWidth, nHeight, color); region16_union_rect(&(gdi->invalidRegion), &(gdi->invalidRegion), &invalidRect); } if (!gdi->inGfxFrame) gdi_OutputUpdate(gdi); return 1; }
/** * Function description * * @return 0 on success, otherwise a Win32 error code */ static UINT xf_SolidFill(RdpgfxClientContext* context, RDPGFX_SOLID_FILL_PDU* solidFill) { UINT16 index; UINT32 color; BYTE a, r, g, b; int nWidth, nHeight; RECTANGLE_16* rect; xfGfxSurface* surface; RECTANGLE_16 invalidRect; xfContext* xfc = (xfContext*) context->custom; surface = (xfGfxSurface*) context->GetSurfaceData(context, solidFill->surfaceId); if (!surface) return ERROR_INTERNAL_ERROR; b = solidFill->fillPixel.B; g = solidFill->fillPixel.G; r = solidFill->fillPixel.R; a = solidFill->fillPixel.XA; color = ARGB32(a, r, g, b); for (index = 0; index < solidFill->fillRectCount; index++) { rect = &(solidFill->fillRects[index]); nWidth = rect->right - rect->left; nHeight = rect->bottom - rect->top; invalidRect.left = rect->left; invalidRect.top = rect->top; invalidRect.right = rect->right; invalidRect.bottom = rect->bottom; freerdp_image_fill(surface->data, surface->format, surface->scanline, rect->left, rect->top, nWidth, nHeight, color); region16_union_rect(&surface->invalidRegion, &surface->invalidRegion, &invalidRect); } if (!xfc->inGfxFrame) xf_UpdateSurfaces(xfc); return CHANNEL_RC_OK; }
uint32 gdi_get_color_32bpp(HGDI_DC hdc, GDI_COLOR color) { uint32 color32; uint8 a, r, g, b; a = 0xFF; GetRGB32(r, g, b, color); if (hdc->invert) { color32 = ABGR32(a, r, g, b); } else { color32 = ARGB32(a, r, g, b); } return color32; }