Merge branch 'master' into svc

Conflicts:
	client/DirectFB/dfreerdp.c
This commit is contained in:
Vic Lee 2011-08-03 14:16:44 +08:00
commit d0c0bca997
6 changed files with 1303 additions and 649 deletions

View File

@ -223,8 +223,6 @@ int dfreerdp_run(freerdp* instance)
memset(rfds, 0, sizeof(rfds)); memset(rfds, 0, sizeof(rfds));
memset(wfds, 0, sizeof(wfds)); memset(wfds, 0, sizeof(wfds));
printf("DirectFB Run\n");
chanman = GET_CHANMAN(instance); chanman = GET_CHANMAN(instance);
instance->Connect(instance); instance->Connect(instance);

View File

@ -64,6 +64,8 @@ typedef struct
/* Orders Updates */ /* Orders Updates */
/* Primary Drawing Orders */
typedef struct typedef struct
{ {
uint8 orderType; uint8 orderType;
@ -115,40 +117,6 @@ typedef struct
sint16 nYSrc; sint16 nYSrc;
} SCRBLT_ORDER; } SCRBLT_ORDER;
typedef struct
{
sint16 srcLeft;
sint16 srcTop;
sint16 srcRight;
sint16 srcBottom;
uint16 bitmapId;
} DRAW_NINE_GRID_ORDER;
typedef struct
{
sint16 srcLeft;
sint16 srcTop;
sint16 srcRight;
sint16 srcBottom;
uint16 bitmapId;
uint8 nDeltaEntries;
uint8* codeDeltaList;
} MULTI_DRAW_NINE_GRID_ORDER;
typedef struct
{
uint16 backMode;
sint16 nXStart;
sint16 nYStart;
sint16 nXEnd;
sint16 nYEnd;
uint32 backColor;
uint8 bRop2;
uint8 penStyle;
uint8 penWidth;
uint32 penColor;
} LINE_TO_ORDER;
typedef struct typedef struct
{ {
sint16 nLeftRect; sint16 nLeftRect;
@ -160,46 +128,12 @@ typedef struct
typedef struct typedef struct
{ {
uint32 savedBitmapPosition; sint16 srcLeft;
sint16 nLeftRect; sint16 srcTop;
sint16 nTopRect; sint16 srcRight;
sint16 nRightRect; sint16 srcBottom;
sint16 nBottomRect; uint16 bitmapId;
uint8 operation; } DRAW_NINE_GRID_ORDER;
} SAVE_BITMAP_ORDER;
typedef struct
{
uint16 cacheId;
sint16 nLeftRect;
sint16 nTopRect;
sint16 nWidth;
sint16 nHeight;
uint8 bRop;
sint16 nXSrc;
sint16 nYSrc;
uint16 cacheIndex;
} MEMBLT_ORDER;
typedef struct
{
uint16 cacheId;
sint16 nLeftRect;
sint16 nTopRect;
sint16 nWidth;
sint16 nHeight;
uint8 bRop;
sint16 nXSrc;
sint16 nYSrc;
uint32 backColor;
uint32 foreColor;
uint8 brushOrgX;
uint8 brushOrgY;
uint8 brushStyle;
uint8 brushHatch;
uint8 brushExtra[7];
uint16 cacheIndex;
} MEM3BLT_ORDER;
typedef struct typedef struct
{ {
@ -254,6 +188,84 @@ typedef struct
uint8* codeDeltaList; uint8* codeDeltaList;
} MULTI_OPAQUE_RECT_ORDER; } MULTI_OPAQUE_RECT_ORDER;
typedef struct
{
sint16 srcLeft;
sint16 srcTop;
sint16 srcRight;
sint16 srcBottom;
uint16 bitmapId;
uint8 nDeltaEntries;
uint8* codeDeltaList;
} MULTI_DRAW_NINE_GRID_ORDER;
typedef struct
{
uint16 backMode;
sint16 nXStart;
sint16 nYStart;
sint16 nXEnd;
sint16 nYEnd;
uint32 backColor;
uint8 bRop2;
uint8 penStyle;
uint8 penWidth;
uint32 penColor;
} LINE_TO_ORDER;
typedef struct
{
sint16 xStart;
sint16 yStart;
uint8 bRop2;
uint32 penColor;
uint8 nDeltaEntries;
uint8* codeDeltaList;
} POLYLINE_ORDER;
typedef struct
{
uint16 cacheId;
sint16 nLeftRect;
sint16 nTopRect;
sint16 nWidth;
sint16 nHeight;
uint8 bRop;
sint16 nXSrc;
sint16 nYSrc;
uint16 cacheIndex;
} MEMBLT_ORDER;
typedef struct
{
uint16 cacheId;
sint16 nLeftRect;
sint16 nTopRect;
sint16 nWidth;
sint16 nHeight;
uint8 bRop;
sint16 nXSrc;
sint16 nYSrc;
uint32 backColor;
uint32 foreColor;
uint8 brushOrgX;
uint8 brushOrgY;
uint8 brushStyle;
uint8 brushHatch;
uint8 brushExtra[7];
uint16 cacheIndex;
} MEM3BLT_ORDER;
typedef struct
{
uint32 savedBitmapPosition;
sint16 nLeftRect;
sint16 nTopRect;
sint16 nRightRect;
sint16 nBottomRect;
uint8 operation;
} SAVE_BITMAP_ORDER;
typedef struct typedef struct
{ {
uint8 cacheId; uint8 cacheId;
@ -273,6 +285,51 @@ typedef struct
uint8* data; uint8* data;
} FAST_INDEX_ORDER; } FAST_INDEX_ORDER;
typedef struct
{
uint8 cacheId;
uint16 fDrawing;
uint32 backColor;
uint32 foreColor;
sint16 bkLeft;
sint16 bkTop;
sint16 bkRight;
sint16 bkBottom;
sint16 opLeft;
sint16 opTop;
sint16 opRight;
sint16 opBottom;
uint16 x;
uint16 y;
uint8* data;
} FAST_GLYPH_ORDER;
typedef struct
{
uint8 cacheId;
uint8 flAccel;
uint8 ulCharInc;
uint8 fOpRedundant;
uint32 backColor;
uint32 foreColor;
sint16 bkLeft;
sint16 bkTop;
sint16 bkRight;
sint16 bkBottom;
sint16 opLeft;
sint16 opTop;
sint16 opRight;
sint16 opBottom;
uint8 brushOrgX;
uint8 brushOrgY;
uint8 brushStyle;
uint8 brushHatch;
uint8 brushExtra[7];
sint16 x;
sint16 y;
uint8* data;
} GLYPH_INDEX_ORDER;
typedef struct typedef struct
{ {
sint16 xStart; sint16 xStart;
@ -301,35 +358,6 @@ typedef struct
uint8* codeDeltaList; uint8* codeDeltaList;
} POLYGON_CB_ORDER; } POLYGON_CB_ORDER;
typedef struct
{
sint16 xStart;
sint16 yStart;
uint8 bRop2;
uint32 penColor;
uint8 nDeltaEntries;
uint8* codeDeltaList;
} POLYLINE_ORDER;
typedef struct
{
uint8 cacheId;
uint16 fDrawing;
uint32 backColor;
uint32 foreColor;
sint16 bkLeft;
sint16 bkTop;
sint16 bkRight;
sint16 bkBottom;
sint16 opLeft;
sint16 opTop;
sint16 opRight;
sint16 opBottom;
uint16 x;
uint16 y;
uint8* data;
} FAST_GLYPH_ORDER;
typedef struct typedef struct
{ {
sint16 leftRect; sint16 leftRect;
@ -358,31 +386,252 @@ typedef struct
uint8 brushExtra[7]; uint8 brushExtra[7];
} ELLIPSE_CB_ORDER; } ELLIPSE_CB_ORDER;
/* Secondary Drawing Orders */
typedef struct typedef struct
{ {
uint8 cacheId; uint8 cacheId;
uint8 flAccel; uint8 bitmapBpp;
uint8 ulCharInc; uint8 bitmapWidth;
uint8 fOpRedundant; uint8 bitmapHeight;
uint32 backColor; uint16 bitmapLength;
uint32 foreColor; uint16 cacheIndex;
sint16 bkLeft; uint8 bitmapComprHdr[8];
sint16 bkTop; uint8* bitmapDataStream;
sint16 bkRight; } CACHE_BITMAP_ORDER;
sint16 bkBottom;
sint16 opLeft; typedef struct
sint16 opTop; {
sint16 opRight; uint8 cacheId;
sint16 opBottom; uint16 flags;
uint8 brushOrgX; uint32 key1;
uint8 brushOrgY; uint32 key2;
uint8 brushStyle; uint8 bitmapBpp;
uint8 brushHatch; uint8 bitmapWidth;
uint8 brushExtra[7]; uint8 bitmapHeight;
uint16 bitmapLength;
uint16 cacheIndex;
uint8 bitmapComprHdr[8];
uint8* bitmapDataStream;
} CACHE_BITMAP_V2_ORDER;
typedef struct
{
uint8 cacheId;
uint8 bpp;
uint16 flags;
uint16 cacheIndex;
uint32 key1;
uint32 key2;
uint8* bitmapData;
} CACHE_BITMAP_V3_ORDER;
typedef struct
{
uint8 cacheIndex;
uint16 numberColors;
uint32* colorTable;
} CACHE_COLOR_TABLE_ORDER;
typedef struct
{
uint16 cacheIndex;
uint16 x;
uint16 y;
uint16 cx;
uint16 cy;
uint8* aj;
} GLYPH_DATA;
typedef struct
{
uint8 cacheId;
uint8 cGlyphs;
GLYPH_DATA* glyphData;
uint8* unicodeCharacters;
} CACHE_GLYPH_ORDER;
typedef struct
{
uint8 cacheIndex;
sint16 x; sint16 x;
sint16 y; sint16 y;
uint8* data; uint16 cx;
} GLYPH_INDEX_ORDER; uint16 cy;
uint8* aj;
} GLYPH_DATA_V2;
typedef struct
{
uint8 cacheId;
uint8 flags;
uint8 cGlyphs;
GLYPH_DATA_V2* glyphData;
uint8* unicodeCharacters;
} CACHE_GLYPH_V2_ORDER;
typedef struct
{
uint8 cacheEntry;
uint8 iBitmapFormat;
uint8 cx;
uint8 cy;
uint8 style;
uint8 iBytes;
uint8* brushData;
} CACHE_BRUSH_ORDER;
/* Alternate Secondary Drawing Orders */
typedef struct
{
uint16 cIndices;
uint16* indices;
} OFFSCREEN_DELETE_LIST;
typedef struct
{
uint16 offscreenBitmapId;
uint16 cx;
uint16 cy;
OFFSCREEN_DELETE_LIST deleteList;
} CREATE_OFFSCREEN_BITMAP_ORDER;
typedef struct
{
uint16 bitmapId;
} SWITCH_SURFACE_ORDER;
typedef struct
{
uint32 flFlags;
uint16 ulLeftWidth;
uint16 ulRightWidth;
uint16 ulTopHeight;
uint16 ulBottomHeight;
uint32 crTransparent;
} NINE_GRID_BITMAP_INFO;
typedef struct
{
uint8 bitmapBpp;
uint16 bitmapId;
uint16 cx;
uint16 cy;
NINE_GRID_BITMAP_INFO nineGridInfo;
} CREATE_NINE_GRID_BITMAP_ORDER;
typedef struct
{
uint32 action;
} FRAME_MARKER_ORDER;
typedef struct
{
uint8 bitmapFlags;
uint8 bitmapBpp;
uint16 bitmapType;
uint16 bitmapWidth;
uint16 bitmapHeight;
uint32 bitmapSize;
uint16 bitmapBlockSize;
uint8* bitmapBlock;
} STREAM_BITMAP_FIRST_ORDER;
typedef struct
{
uint8 bitmapFlags;
uint16 bitmapType;
uint16 bitmapBlockSize;
uint8* bitmapBlock;
} STREAM_BITMAP_NEXT_ORDER;
typedef struct
{
uint16 cbSize;
uint32 cbTotalSize;
uint32 cbTotalEmfSize;
uint8* emfRecords;
} DRAW_GDIPLUS_FIRST_ORDER;
typedef struct
{
uint16 cbSize;
uint8* emfRecords;
} DRAW_GDIPLUS_NEXT_ORDER;
typedef struct
{
uint16 cbSize;
uint32 cbTotalSize;
uint32 cbTotalEmfSize;
uint8* emfRecords;
} DRAW_GDIPLUS_END_ORDER;
typedef struct
{
uint8 flags;
uint16 cacheType;
uint16 cacheIndex;
uint16 cbSize;
uint32 cbTotalSize;
uint8* emfRecords;
} DRAW_GDIPLUS_CACHE_FIRST_ORDER;
typedef struct
{
uint8 flags;
uint16 cacheType;
uint16 cacheIndex;
uint16 cbSize;
uint8* emfRecords;
} DRAW_GDIPLUS_CACHE_NEXT_ORDER;
typedef struct
{
uint8 flags;
uint16 cacheType;
uint16 cacheIndex;
uint16 cbSize;
uint32 cbTotalSize;
uint8* emfRecords;
} DRAW_GDIPLUS_CACHE_END_ORDER;
/* Constants */
#define CACHED_BRUSH 0x80
#define BMF_1BPP 0x1
#define BMF_8BPP 0x3
#define BMF_16BPP 0x4
#define BMF_24BPP 0x5
#define BMF_32BPP 0x6
#define BS_SOLID 0x00
#define BS_NULL 0x01
#define BS_HATCHED 0x02
#define BS_PATTERN 0x03
#define HS_HORIZONTAL 0x00
#define HS_VERTICAL 0x01
#define HS_FDIAGONAL 0x02
#define HS_BDIAGONAL 0x03
#define HS_CROSS 0x04
#define HS_DIAGCROSS 0x05
#define DSDNG_STRETCH 0x00000001
#define DSDNG_TILE 0x00000002
#define DSDNG_PERPIXELALPHA 0x00000004
#define DSDNG_TRANSPARENT 0x00000008
#define DSDNG_MUSTFLIP 0x00000010
#define DSDNG_TRUESIZE 0x00000020
#define FRAME_START 0x00000000
#define FRAME_END 0x00000001
#define STREAM_BITMAP_END 0x01
#define STREAM_BITMAP_COMPRESSED 0x02
#define STREAM_BITMAP_V2 0x04
/* Update Interface */ /* Update Interface */
@ -394,28 +643,50 @@ typedef void (*pcSetBounds)(rdpUpdate* update, BOUNDS* bounds);
typedef void (*pcSynchronize)(rdpUpdate* update); typedef void (*pcSynchronize)(rdpUpdate* update);
typedef void (*pcBitmap)(rdpUpdate* update, BITMAP_UPDATE* bitmap); typedef void (*pcBitmap)(rdpUpdate* update, BITMAP_UPDATE* bitmap);
typedef void (*pcPalette)(rdpUpdate* update, PALETTE_UPDATE* palette); typedef void (*pcPalette)(rdpUpdate* update, PALETTE_UPDATE* palette);
typedef void (*pcDstBlt)(rdpUpdate* update, DSTBLT_ORDER* dstblt); typedef void (*pcDstBlt)(rdpUpdate* update, DSTBLT_ORDER* dstblt);
typedef void (*pcPatBlt)(rdpUpdate* update, PATBLT_ORDER* patblt); typedef void (*pcPatBlt)(rdpUpdate* update, PATBLT_ORDER* patblt);
typedef void (*pcScrBlt)(rdpUpdate* update, SCRBLT_ORDER* scrblt); typedef void (*pcScrBlt)(rdpUpdate* update, SCRBLT_ORDER* scrblt);
typedef void (*pcDrawNineGrid)(rdpUpdate* update, DRAW_NINE_GRID_ORDER* draw_nine_grid);
typedef void (*pcMultiDrawNineGrid)(rdpUpdate* update, MULTI_DRAW_NINE_GRID_ORDER* multi_draw_nine_grid);
typedef void (*pcLineTo)(rdpUpdate* update, LINE_TO_ORDER* line_to);
typedef void (*pcOpaqueRect)(rdpUpdate* update, OPAQUE_RECT_ORDER* opaque_rect); typedef void (*pcOpaqueRect)(rdpUpdate* update, OPAQUE_RECT_ORDER* opaque_rect);
typedef void (*pcSaveBitmap)(rdpUpdate* update, SAVE_BITMAP_ORDER* save_bitmap); typedef void (*pcDrawNineGrid)(rdpUpdate* update, DRAW_NINE_GRID_ORDER* draw_nine_grid);
typedef void (*pcMemBlt)(rdpUpdate* update, MEMBLT_ORDER* memblt);
typedef void (*pcMem3Blt)(rdpUpdate* update, MEM3BLT_ORDER* memblt);
typedef void (*pcMultiDstBlt)(rdpUpdate* update, MULTI_DSTBLT_ORDER* multi_dstblt); typedef void (*pcMultiDstBlt)(rdpUpdate* update, MULTI_DSTBLT_ORDER* multi_dstblt);
typedef void (*pcMultiPatBlt)(rdpUpdate* update, MULTI_PATBLT_ORDER* multi_patblt); typedef void (*pcMultiPatBlt)(rdpUpdate* update, MULTI_PATBLT_ORDER* multi_patblt);
typedef void (*pcMultiScrBlt)(rdpUpdate* update, MULTI_SCRBLT_ORDER* multi_scrblt); typedef void (*pcMultiScrBlt)(rdpUpdate* update, MULTI_SCRBLT_ORDER* multi_scrblt);
typedef void (*pcMultiOpaqueRect)(rdpUpdate* update, MULTI_OPAQUE_RECT_ORDER* multi_opaque_rect); typedef void (*pcMultiOpaqueRect)(rdpUpdate* update, MULTI_OPAQUE_RECT_ORDER* multi_opaque_rect);
typedef void (*pcMultiDrawNineGrid)(rdpUpdate* update, MULTI_DRAW_NINE_GRID_ORDER* multi_draw_nine_grid);
typedef void (*pcLineTo)(rdpUpdate* update, LINE_TO_ORDER* line_to);
typedef void (*pcPolyline)(rdpUpdate* update, POLYLINE_ORDER* polyline);
typedef void (*pcMemBlt)(rdpUpdate* update, MEMBLT_ORDER* memblt);
typedef void (*pcMem3Blt)(rdpUpdate* update, MEM3BLT_ORDER* memblt);
typedef void (*pcSaveBitmap)(rdpUpdate* update, SAVE_BITMAP_ORDER* save_bitmap);
typedef void (*pcFastIndex)(rdpUpdate* update, FAST_INDEX_ORDER* fast_index); typedef void (*pcFastIndex)(rdpUpdate* update, FAST_INDEX_ORDER* fast_index);
typedef void (*pcFastGlyph)(rdpUpdate* update, FAST_GLYPH_ORDER* fast_glyph);
typedef void (*pcGlyphIndex)(rdpUpdate* update, GLYPH_INDEX_ORDER* glyph_index);
typedef void (*pcPolygonSC)(rdpUpdate* update, POLYGON_SC_ORDER* polygon_sc); typedef void (*pcPolygonSC)(rdpUpdate* update, POLYGON_SC_ORDER* polygon_sc);
typedef void (*pcPolygonCB)(rdpUpdate* update, POLYGON_CB_ORDER* polygon_cb); typedef void (*pcPolygonCB)(rdpUpdate* update, POLYGON_CB_ORDER* polygon_cb);
typedef void (*pcPolyline)(rdpUpdate* update, POLYLINE_ORDER* polyline);
typedef void (*pcFastGlyph)(rdpUpdate* update, FAST_GLYPH_ORDER* fast_glyph);
typedef void (*pcEllipseSC)(rdpUpdate* update, ELLIPSE_SC_ORDER* ellipse_sc); typedef void (*pcEllipseSC)(rdpUpdate* update, ELLIPSE_SC_ORDER* ellipse_sc);
typedef void (*pcEllipseCB)(rdpUpdate* update, ELLIPSE_CB_ORDER* ellipse_cb); typedef void (*pcEllipseCB)(rdpUpdate* update, ELLIPSE_CB_ORDER* ellipse_cb);
typedef void (*pcGlyphIndex)(rdpUpdate* update, GLYPH_INDEX_ORDER* glyph_index);
typedef void (*pcCacheBitmap)(rdpUpdate* update, CACHE_BITMAP_ORDER* cache_bitmap_order);
typedef void (*pcCacheBitmapV2)(rdpUpdate* update, CACHE_BITMAP_V2_ORDER* cache_bitmap_v2_order);
typedef void (*pcCacheBitmapV3)(rdpUpdate* update, CACHE_BITMAP_V3_ORDER* cache_bitmap_v3_order);
typedef void (*pcCacheColorTable)(rdpUpdate* update, CACHE_COLOR_TABLE_ORDER* cache_color_table_order);
typedef void (*pcCacheGlyph)(rdpUpdate* update, CACHE_GLYPH_ORDER* cache_glyph_order);
typedef void (*pcCacheGlyphV2)(rdpUpdate* update, CACHE_GLYPH_V2_ORDER* cache_glyph_v2_order);
typedef void (*pcCacheBrush)(rdpUpdate* update, CACHE_BRUSH_ORDER* cache_brush_order);
typedef void (*pcCreateOffscreenBitmap)(rdpUpdate* update, CREATE_OFFSCREEN_BITMAP_ORDER* create_offscreen_bitmap);
typedef void (*pcSwitchSurface)(rdpUpdate* update, SWITCH_SURFACE_ORDER* switch_surface);
typedef void (*pcCreateNineGridBitmap)(rdpUpdate* update, CREATE_NINE_GRID_BITMAP_ORDER* create_nine_grid_bitmap);
typedef void (*pcFrameMarker)(rdpUpdate* update, FRAME_MARKER_ORDER* frame_marker);
typedef void (*pcStreamBitmapFirst)(rdpUpdate* update, STREAM_BITMAP_FIRST_ORDER* stream_bitmap_first);
typedef void (*pcStreamBitmapNext)(rdpUpdate* update, STREAM_BITMAP_FIRST_ORDER* stream_bitmap_next);
typedef void (*pcDrawGdiPlusFirst)(rdpUpdate* update, DRAW_GDIPLUS_FIRST_ORDER* draw_gdiplus_first);
typedef void (*pcDrawGdiPlusNext)(rdpUpdate* update, DRAW_GDIPLUS_NEXT_ORDER* draw_gdiplus_next);
typedef void (*pcDrawGdiPlusEnd)(rdpUpdate* update, DRAW_GDIPLUS_END_ORDER* draw_gdiplus_end);
typedef void (*pcDrawGdiPlusCacheFirst)(rdpUpdate* update, DRAW_GDIPLUS_CACHE_FIRST_ORDER* draw_gdiplus_cache_first);
typedef void (*pcDrawGdiPlusCacheNext)(rdpUpdate* update, DRAW_GDIPLUS_CACHE_NEXT_ORDER* draw_gdiplus_cache_next);
typedef void (*pcDrawGdiPlusCacheEnd)(rdpUpdate* update, DRAW_GDIPLUS_CACHE_END_ORDER* draw_gdiplus_cache_end);
struct rdp_update struct rdp_update
{ {
@ -430,54 +701,99 @@ struct rdp_update
pcSynchronize Synchronize; pcSynchronize Synchronize;
pcBitmap Bitmap; pcBitmap Bitmap;
pcPalette Palette; pcPalette Palette;
pcDstBlt DstBlt; pcDstBlt DstBlt;
pcPatBlt PatBlt; pcPatBlt PatBlt;
pcScrBlt ScrBlt; pcScrBlt ScrBlt;
pcDrawNineGrid DrawNineGrid;
pcMultiDrawNineGrid MultiDrawNineGrid;
pcLineTo LineTo;
pcOpaqueRect OpaqueRect; pcOpaqueRect OpaqueRect;
pcSaveBitmap SaveBitmap; pcDrawNineGrid DrawNineGrid;
pcMemBlt MemBlt;
pcMem3Blt Mem3Blt;
pcMultiDstBlt MultiDstBlt; pcMultiDstBlt MultiDstBlt;
pcMultiPatBlt MultiPatBlt; pcMultiPatBlt MultiPatBlt;
pcMultiScrBlt MultiScrBlt; pcMultiScrBlt MultiScrBlt;
pcMultiOpaqueRect MultiOpaqueRect; pcMultiOpaqueRect MultiOpaqueRect;
pcMultiDrawNineGrid MultiDrawNineGrid;
pcLineTo LineTo;
pcPolyline Polyline;
pcMemBlt MemBlt;
pcMem3Blt Mem3Blt;
pcSaveBitmap SaveBitmap;
pcFastIndex FastIndex; pcFastIndex FastIndex;
pcFastGlyph FastGlyph;
pcGlyphIndex GlyphIndex;
pcPolygonSC PolygonSC; pcPolygonSC PolygonSC;
pcPolygonCB PolygonCB; pcPolygonCB PolygonCB;
pcPolyline Polyline;
pcFastGlyph FastGlyph;
pcEllipseSC EllipseSC; pcEllipseSC EllipseSC;
pcEllipseCB EllipseCB; pcEllipseCB EllipseCB;
pcGlyphIndex GlyphIndex;
boolean glyph_v2;
pcCacheBitmap CacheBitmap;
pcCacheBitmapV2 CacheBitmapV2;
pcCacheBitmapV3 CacheBitmapV3;
pcCacheColorTable CacheColorTable;
pcCacheGlyph CacheGlyph;
pcCacheGlyphV2 CacheGlyphV2;
pcCacheBrush CacheBrush;
pcCreateOffscreenBitmap CreateOffscreenBitmap;
pcSwitchSurface SwitchSurface;
pcCreateNineGridBitmap CreateNineGridBitmap;
pcFrameMarker FrameMarker;
pcStreamBitmapFirst StreamBitmapFirst;
pcStreamBitmapNext StreamBitmapNext;
pcDrawGdiPlusFirst DrawGdiPlusFirst;
pcDrawGdiPlusNext DrawGdiPlusNext;
pcDrawGdiPlusEnd DrawGdiPlusEnd;
pcDrawGdiPlusCacheFirst DrawGdiPlusCacheFirst;
pcDrawGdiPlusCacheNext DrawGdiPlusCacheNext;
pcDrawGdiPlusCacheEnd DrawGdiPlusCacheEnd;
BITMAP_UPDATE bitmap_update; BITMAP_UPDATE bitmap_update;
PALETTE_UPDATE palette_update; PALETTE_UPDATE palette_update;
ORDER_INFO order_info; ORDER_INFO order_info;
DSTBLT_ORDER dstblt; DSTBLT_ORDER dstblt;
PATBLT_ORDER patblt; PATBLT_ORDER patblt;
SCRBLT_ORDER scrblt; SCRBLT_ORDER scrblt;
DRAW_NINE_GRID_ORDER draw_nine_grid;
MULTI_DRAW_NINE_GRID_ORDER multi_draw_nine_grid;
LINE_TO_ORDER line_to;
OPAQUE_RECT_ORDER opaque_rect; OPAQUE_RECT_ORDER opaque_rect;
SAVE_BITMAP_ORDER save_bitmap; DRAW_NINE_GRID_ORDER draw_nine_grid;
MEMBLT_ORDER memblt;
MEM3BLT_ORDER mem3blt;
MULTI_DSTBLT_ORDER multi_dstblt; MULTI_DSTBLT_ORDER multi_dstblt;
MULTI_PATBLT_ORDER multi_patblt; MULTI_PATBLT_ORDER multi_patblt;
MULTI_SCRBLT_ORDER multi_scrblt; MULTI_SCRBLT_ORDER multi_scrblt;
MULTI_OPAQUE_RECT_ORDER multi_opaque_rect; MULTI_OPAQUE_RECT_ORDER multi_opaque_rect;
MULTI_DRAW_NINE_GRID_ORDER multi_draw_nine_grid;
LINE_TO_ORDER line_to;
POLYLINE_ORDER polyline;
MEMBLT_ORDER memblt;
MEM3BLT_ORDER mem3blt;
SAVE_BITMAP_ORDER save_bitmap;
FAST_INDEX_ORDER fast_index; FAST_INDEX_ORDER fast_index;
FAST_GLYPH_ORDER fast_glyph;
GLYPH_INDEX_ORDER glyph_index;
POLYGON_SC_ORDER polygon_sc; POLYGON_SC_ORDER polygon_sc;
POLYGON_CB_ORDER polygon_cb; POLYGON_CB_ORDER polygon_cb;
POLYLINE_ORDER polyline;
FAST_GLYPH_ORDER fast_glyph;
ELLIPSE_SC_ORDER ellipse_sc; ELLIPSE_SC_ORDER ellipse_sc;
ELLIPSE_CB_ORDER ellipse_cb; ELLIPSE_CB_ORDER ellipse_cb;
GLYPH_INDEX_ORDER glyph_index;
CACHE_BITMAP_ORDER cache_bitmap_order;
CACHE_BITMAP_V2_ORDER cache_bitmap_v2_order;
CACHE_BITMAP_V3_ORDER cache_bitmap_v3_order;
CACHE_COLOR_TABLE_ORDER cache_color_table_order;
CACHE_GLYPH_ORDER cache_glyph_order;
CACHE_GLYPH_V2_ORDER cache_glyph_v2_order;
CACHE_BRUSH_ORDER cache_brush_order;
CREATE_OFFSCREEN_BITMAP_ORDER create_offscreen_bitmap;
SWITCH_SURFACE_ORDER switch_surface;
CREATE_NINE_GRID_BITMAP_ORDER create_nine_grid_bitmap;
FRAME_MARKER_ORDER frame_marker;
STREAM_BITMAP_FIRST_ORDER stream_bitmap_first;
STREAM_BITMAP_FIRST_ORDER stream_bitmap_next;
DRAW_GDIPLUS_CACHE_FIRST_ORDER draw_gdiplus_cache_first;
DRAW_GDIPLUS_CACHE_NEXT_ORDER draw_gdiplus_cache_next;
DRAW_GDIPLUS_CACHE_END_ORDER draw_gdiplus_cache_end;
DRAW_GDIPLUS_FIRST_ORDER draw_gdiplus_first;
DRAW_GDIPLUS_NEXT_ORDER draw_gdiplus_next;
DRAW_GDIPLUS_END_ORDER draw_gdiplus_end;
}; };
#endif /* __UPDATE_API_H */ #endif /* __UPDATE_API_H */

File diff suppressed because it is too large Load Diff

View File

@ -70,6 +70,25 @@
#define ORDER_FIELD_22 0x200000 #define ORDER_FIELD_22 0x200000
#define ORDER_FIELD_23 0x400000 #define ORDER_FIELD_23 0x400000
/* Bitmap Cache Flags */
#define CBR2_8BPP 0x3
#define CBR2_16BPP 0x4
#define CBR2_24BPP 0x5
#define CBR2_32BPP 0x6
#define CBR2_HEIGHT_SAME_AS_WIDTH 0x01
#define CBR2_PERSISTENT_KEY_PRESENT 0x02
#define CBR2_NO_BITMAP_COMPRESSION_HDR 0x08
#define CBR2_DO_NOT_CACHE 0x10
#define CBR23_8BPP 0x3
#define CBR23_16BPP 0x4
#define CBR23_24BPP 0x5
#define CBR23_32BPP 0x6
#define CBR3_IGNORABLE_FLAG 0x08
#define CBR3_DO_NOT_CACHE 0x10
/* Order Classes */ /* Order Classes */
#define ORDER_PRIMARY_CLASS 0x01 #define ORDER_PRIMARY_CLASS 0x01
#define ORDER_SECONDARY_CLASS 0x03 #define ORDER_SECONDARY_CLASS 0x03
@ -160,7 +179,7 @@
/* Alternate Secondary Drawing Orders */ /* Alternate Secondary Drawing Orders */
#define ORDER_TYPE_SWITCH_SURFACE 0x00 #define ORDER_TYPE_SWITCH_SURFACE 0x00
#define ORDER_TYPE_CREATE_OFFSCR_BITMAP 0x01 #define ORDER_TYPE_CREATE_OFFSCREEN_BITMAP 0x01
#define ORDER_TYPE_STREAM_BITMAP_FIRST 0x02 #define ORDER_TYPE_STREAM_BITMAP_FIRST 0x02
#define ORDER_TYPE_STREAM_BITMAP_NEXT 0x03 #define ORDER_TYPE_STREAM_BITMAP_NEXT 0x03
#define ORDER_TYPE_CREATE_NINE_GRID_BITMAP 0x04 #define ORDER_TYPE_CREATE_NINE_GRID_BITMAP 0x04

View File

@ -92,7 +92,7 @@ void update_read_bitmap_data(STREAM* s, BITMAP_DATA* bitmap_data)
bitmap_data->length, bitmap_data->bpp, bitmap_data->bpp); bitmap_data->length, bitmap_data->bpp, bitmap_data->bpp);
if (status != True) if (status != True)
printf("bitmap decompression failed\n"); printf("bitmap decompression failed, bpp:%d\n", bitmap_data->bpp);
} }
void update_read_bitmap(rdpUpdate* update, STREAM* s, BITMAP_UPDATE* bitmap_update) void update_read_bitmap(rdpUpdate* update, STREAM* s, BITMAP_UPDATE* bitmap_update)
@ -151,7 +151,8 @@ void update_recv(rdpUpdate* update, STREAM* s)
stream_read_uint16(s, updateType); /* updateType (2 bytes) */ stream_read_uint16(s, updateType); /* updateType (2 bytes) */
//printf("%s Update Data PDU\n", UPDATE_TYPE_STRINGS[updateType]); if (updateType != UPDATE_TYPE_BITMAP)
printf("%s Update Data PDU\n", UPDATE_TYPE_STRINGS[updateType]);
IFCALL(update->BeginPaint, update); IFCALL(update->BeginPaint, update);

View File

@ -1101,6 +1101,72 @@ void gdi_set_bounds(rdpUpdate* update, BOUNDS* bounds)
} }
} }
void gdi_dstblt(rdpUpdate* update, DSTBLT_ORDER* dstblt)
{
GDI* gdi = GET_GDI(update);
gdi_BitBlt(gdi->drawing->hdc, dstblt->nLeftRect, dstblt->nTopRect,
dstblt->nWidth, dstblt->nHeight, NULL, 0, 0, gdi_rop3_code(dstblt->bRop));
}
void gdi_patblt(rdpUpdate* update, PATBLT_ORDER* patblt)
{
HGDI_BRUSH originalBrush;
GDI* gdi = GET_GDI(update);
if (patblt->brushStyle & CACHED_BRUSH)
{
/* obtain brush from cache */
}
patblt->brushStyle &= 0x7F;
if (patblt->brushStyle == BS_SOLID)
{
uint32 color;
originalBrush = gdi->drawing->hdc->brush;
color = gdi_color_convert(patblt->foreColor, gdi->srcBpp, 32, gdi->clrconv);
gdi->drawing->hdc->brush = gdi_CreateSolidBrush(color);
gdi_PatBlt(gdi->drawing->hdc, patblt->nLeftRect, patblt->nTopRect,
patblt->nWidth, patblt->nHeight, gdi_rop3_code(patblt->bRop));
gdi_DeleteObject((HGDIOBJECT) gdi->drawing->hdc->brush);
gdi->drawing->hdc->brush = originalBrush;
}
else if (patblt->brushStyle == BS_PATTERN)
{
uint8* data;
HGDI_BITMAP hBmp;
data = (uint8*) &patblt->brushHatch;
data = gdi_mono_image_convert(data, 8, 8, gdi->srcBpp, gdi->dstBpp,
patblt->backColor, patblt->foreColor, gdi->clrconv);
hBmp = gdi_CreateBitmap(8, 8, gdi->drawing->hdc->bitsPerPixel, data);
originalBrush = gdi->drawing->hdc->brush;
gdi->drawing->hdc->brush = gdi_CreatePatternBrush(hBmp);
gdi_PatBlt(gdi->drawing->hdc, patblt->nLeftRect, patblt->nTopRect,
patblt->nWidth, patblt->nHeight, gdi_rop3_code(patblt->bRop));
gdi_DeleteObject((HGDIOBJECT) gdi->drawing->hdc->brush);
gdi->drawing->hdc->brush = originalBrush;
}
}
void gdi_scrblt(rdpUpdate* update, SCRBLT_ORDER* scrblt)
{
GDI* gdi = GET_GDI(update);
gdi_BitBlt(gdi->drawing->hdc, scrblt->nLeftRect, scrblt->nTopRect,
scrblt->nWidth, scrblt->nHeight, gdi->primary->hdc,
scrblt->nXSrc, scrblt->nYSrc, gdi_rop3_code(scrblt->bRop));
}
void gdi_opaque_rect(rdpUpdate* update, OPAQUE_RECT_ORDER* opaque_rect) void gdi_opaque_rect(rdpUpdate* update, OPAQUE_RECT_ORDER* opaque_rect)
{ {
GDI_RECT rect; GDI_RECT rect;
@ -1119,6 +1185,11 @@ void gdi_opaque_rect(rdpUpdate* update, OPAQUE_RECT_ORDER* opaque_rect)
gdi_DeleteObject((HGDIOBJECT) hBrush); gdi_DeleteObject((HGDIOBJECT) hBrush);
} }
void gdi_multi_opaque_rect(rdpUpdate* update, MULTI_OPAQUE_RECT_ORDER* multi_opaque_rect)
{
}
/** /**
* Register GDI callbacks with libfreerdp. * Register GDI callbacks with libfreerdp.
* @param inst current instance * @param inst current instance
@ -1130,28 +1201,28 @@ void gdi_register_update_callbacks(rdpUpdate* update)
update->Bitmap = gdi_bitmap_update; update->Bitmap = gdi_bitmap_update;
update->Palette = gdi_palette_update; update->Palette = gdi_palette_update;
update->SetBounds = gdi_set_bounds; update->SetBounds = gdi_set_bounds;
update->DstBlt = NULL; update->DstBlt = gdi_dstblt;
update->PatBlt = NULL; update->PatBlt = gdi_patblt;
update->ScrBlt = NULL; update->ScrBlt = gdi_scrblt;
update->DrawNineGrid = NULL;
update->MultiDrawNineGrid = NULL;
update->LineTo = NULL;
update->OpaqueRect = gdi_opaque_rect; update->OpaqueRect = gdi_opaque_rect;
update->SaveBitmap = NULL; update->DrawNineGrid = NULL;
update->MemBlt = NULL;
update->Mem3Blt = NULL;
update->MultiDstBlt = NULL; update->MultiDstBlt = NULL;
update->MultiPatBlt = NULL; update->MultiPatBlt = NULL;
update->MultiScrBlt = NULL; update->MultiScrBlt = NULL;
update->MultiOpaqueRect = NULL; update->MultiOpaqueRect = gdi_multi_opaque_rect;
update->MultiDrawNineGrid = NULL;
update->LineTo = NULL;
update->Polyline = NULL;
update->MemBlt = NULL;
update->Mem3Blt = NULL;
update->SaveBitmap = NULL;
update->FastIndex = NULL; update->FastIndex = NULL;
update->FastGlyph = NULL;
update->GlyphIndex = NULL;
update->PolygonSC = NULL; update->PolygonSC = NULL;
update->PolygonCB = NULL; update->PolygonCB = NULL;
update->Polyline = NULL;
update->FastGlyph = NULL;
update->EllipseSC = NULL; update->EllipseSC = NULL;
update->EllipseCB = NULL; update->EllipseCB = NULL;
update->GlyphIndex = NULL;
} }
/** /**