Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FreeRDP/FreeRDP-old.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc-André Moreau <marcandre.moreau@gmail.com>2011-06-25 01:44:42 +0400
committerMarc-André Moreau <marcandre.moreau@gmail.com>2011-06-25 01:44:42 +0400
commita34a6dba01f97fc5aaaecc38af2b7d5eb447afcf (patch)
tree42532e25d353f1278b287f415e70e8890c347de2
parent2d4f04e72ed0d061975b7f615073dd0d94ae938b (diff)
libfreerdp-gdi: fix RemoteFX blitting with multiple update rectangles in decode.c
-rw-r--r--libfreerdp-gdi/decode.c20
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);