diff options
author | Marc-André Moreau <marcandre.moreau@gmail.com> | 2011-06-25 01:44:42 +0400 |
---|---|---|
committer | Marc-André Moreau <marcandre.moreau@gmail.com> | 2011-06-25 01:44:42 +0400 |
commit | a34a6dba01f97fc5aaaecc38af2b7d5eb447afcf (patch) | |
tree | 42532e25d353f1278b287f415e70e8890c347de2 | |
parent | 2d4f04e72ed0d061975b7f615073dd0d94ae938b (diff) |
libfreerdp-gdi: fix RemoteFX blitting with multiple update rectangles in decode.c
-rw-r--r-- | libfreerdp-gdi/decode.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/libfreerdp-gdi/decode.c b/libfreerdp-gdi/decode.c index 1c1ad75..5d6a8a0 100644 --- a/libfreerdp-gdi/decode.c +++ b/libfreerdp-gdi/decode.c @@ -32,7 +32,8 @@ int gdi_decode_bitmap_data_ex(GDI *gdi, uint16 x, uint16 y, uint8 * data, int size) { - int i, tx, ty; + int i, j; + int tx, ty; uint8* bitmapData; uint32 bitmapDataLength; RFX_MESSAGE * message; @@ -58,9 +59,22 @@ int gdi_decode_bitmap_data_ex(GDI *gdi, uint16 x, uint16 y, uint8 * data, int si data = message->tiles[i]->data; gdi_image_convert(data, gdi->tile->bitmap->data, 64, 64, 32, 32, gdi->clrconv); - gdi_BitBlt(gdi->primary->hdc, tx, ty, 64, 64, gdi->tile->hdc, 0, 0, GDI_SRCCOPY); - gdi_InvalidateRegion(gdi->primary->hdc, tx, ty, 64, 64); + for (j = 0; j < message->num_rects; j++) + { + gdi_SetClipRgn(gdi->primary->hdc, + message->rects[j].x, message->rects[j].y, + message->rects[j].width, message->rects[j].height); + + gdi_BitBlt(gdi->primary->hdc, tx, ty, 64, 64, gdi->tile->hdc, 0, 0, GDI_SRCCOPY); + } + } + + for (i = 0; i < message->num_rects; i++) + { + gdi_InvalidateRegion(gdi->primary->hdc, + message->rects[i].x, message->rects[i].y, + message->rects[i].width, message->rects[i].height); } rfx_message_free(gdi->rfx_context, message); |