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-26 22:57:45 +0400
committerMarc-André Moreau <marcandre.moreau@gmail.com>2011-06-26 22:57:45 +0400
commit3862f5fa79cc0de21550ad654521512322c3d8e8 (patch)
tree04f96fcd83d1512e1141ecff6794583b1f355d01
parent0cc43444c1817861f480b9ce030da7ef17104762 (diff)
libfreerdp-gdi: fix update regions with RDSH in decode.c
-rw-r--r--libfreerdp-gdi/decode.c53
1 files changed, 36 insertions, 17 deletions
diff --git a/libfreerdp-gdi/decode.c b/libfreerdp-gdi/decode.c
index 5d6a8a0..9f3f4c0 100644
--- a/libfreerdp-gdi/decode.c
+++ b/libfreerdp-gdi/decode.c
@@ -51,30 +51,49 @@ int gdi_decode_bitmap_data_ex(GDI *gdi, uint16 x, uint16 y, uint8 * data, int si
/* decode bitmap data */
message = rfx_process_message((RFX_CONTEXT *) gdi->rfx_context, bitmapData, bitmapDataLength);
- /* blit each tile */
- for (i = 0; i < message->num_tiles; i++)
+ if (message->num_rects > 1) /* RDVH */
{
- tx = message->tiles[i]->x + x;
- ty = message->tiles[i]->y + y;
- data = message->tiles[i]->data;
+ /* blit each tile */
+ for (i = 0; i < message->num_tiles; i++)
+ {
+ tx = message->tiles[i]->x + x;
+ ty = message->tiles[i]->y + y;
+ data = message->tiles[i]->data;
- gdi_image_convert(data, gdi->tile->bitmap->data, 64, 64, 32, 32, gdi->clrconv);
+ gdi_image_convert(data, gdi->tile->bitmap->data, 64, 64, 32, 32, gdi->clrconv);
- 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);
+ 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);
+ gdi_BitBlt(gdi->primary->hdc, tx, ty, 64, 64, gdi->tile->hdc, 0, 0, GDI_SRCCOPY);
+ }
}
- }
- for (i = 0; i < message->num_rects; i++)
+ 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);
+ }
+ }
+ else /* RDSH */
{
- gdi_InvalidateRegion(gdi->primary->hdc,
- message->rects[i].x, message->rects[i].y,
- message->rects[i].width, message->rects[i].height);
+ /* blit each tile */
+ for (i = 0; i < message->num_tiles; i++)
+ {
+ tx = message->tiles[i]->x + x;
+ ty = message->tiles[i]->y + y;
+ 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);
+ }
}
rfx_message_free(gdi->rfx_context, message);