From eb00a68db65008097316cb4e30212f22dbf2a3c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Moreau?= Date: Wed, 14 Sep 2011 15:09:49 -0400 Subject: [PATCH] libfreerdp-gdi: fix clipping regions for no-codec bitmaps --- libfreerdp-gdi/gdi.c | 65 +++++++++----------------------------------- 1 file changed, 13 insertions(+), 52 deletions(-) diff --git a/libfreerdp-gdi/gdi.c b/libfreerdp-gdi/gdi.c index 7d0df6bd1..61c111f02 100644 --- a/libfreerdp-gdi/gdi.c +++ b/libfreerdp-gdi/gdi.c @@ -788,70 +788,31 @@ void gdi_surface_bits(rdpUpdate* update, SURFACE_BITS_COMMAND* surface_bits_comm DEBUG_GDI("num_rects %d num_tiles %d", message->num_rects, message->num_tiles); - if (message->num_rects > 1) /* RDVH */ + /* blit each tile */ + for (i = 0; i < message->num_tiles; i++) { - /* blit each tile */ - for (i = 0; i < message->num_tiles; i++) - { - tx = message->tiles[i]->x + surface_bits_command->destLeft; - ty = message->tiles[i]->y + surface_bits_command->destTop; + tx = message->tiles[i]->x + surface_bits_command->destLeft; + ty = message->tiles[i]->y + surface_bits_command->destTop; - freerdp_image_convert(message->tiles[i]->data, gdi->tile->bitmap->data, 64, 64, 32, 32, gdi->clrconv); + freerdp_image_convert(message->tiles[i]->data, gdi->tile->bitmap->data, 64, 64, 32, 32, gdi->clrconv); #ifdef DUMP_REMOTEFX_TILES - sprintf(tile_bitmap, "/tmp/rfx/tile_%d.bmp", tilenum++); - freerdp_bitmap_write(tile_bitmap, gdi->tile->bitmap->data, 64, 64, 32); + sprintf(tile_bitmap, "/tmp/rfx/tile_%d.bmp", tilenum++); + freerdp_bitmap_write(tile_bitmap, gdi->tile->bitmap->data, 64, 64, 32); #endif - for (j = 0; j < message->num_rects; j++) - { - gdi_SetClipRgn(gdi->primary->hdc, - surface_bits_command->destLeft + message->rects[j].x, - surface_bits_command->destTop + 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++) + for (j = 0; j < message->num_rects; j++) { - gdi_InvalidateRegion(gdi->primary->hdc, - surface_bits_command->destLeft + message->rects[i].x, - surface_bits_command->destTop + message->rects[i].y, - message->rects[i].width, message->rects[i].height); - } - } - else if (message->num_rects == 1) /* RDSH */ - { - gdi_SetClipRgn(gdi->primary->hdc, - surface_bits_command->destLeft + message->rects[0].x, - surface_bits_command->destTop + message->rects[0].y, - message->rects[0].width, message->rects[0].height); - - /* blit each tile */ - for (i = 0; i < message->num_tiles; i++) - { - tx = message->tiles[i]->x + surface_bits_command->destLeft; - ty = message->tiles[i]->y + surface_bits_command->destTop; - - freerdp_image_convert(message->tiles[i]->data, gdi->tile->bitmap->data, 64, 64, 32, 32, gdi->clrconv); - -#ifdef DUMP_REMOTEFX_TILES - sprintf(tile_bitmap, "/tmp/rfx/tile_%d.bmp", tilenum++); - freerdp_bitmap_write(tile_bitmap, gdi->tile->bitmap->data, 64, 64, 32); -#endif + gdi_SetClipRgn(gdi->primary->hdc, + surface_bits_command->destLeft + message->rects[j].x, + surface_bits_command->destTop + 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_InvalidateRegion(gdi->primary->hdc, - surface_bits_command->destLeft + message->rects[0].x, - surface_bits_command->destTop + message->rects[0].y, - message->rects[0].width, message->rects[0].height); } + gdi_SetNullClipRgn(gdi->primary->hdc); rfx_message_free(context, message); stream_detach(s);