secondary.h (5221B)
1/** 2 * FreeRDP: A Remote Desktop Protocol Implementation 3 * Secondary Drawing Orders Interface API 4 * 5 * Copyright 2011 Marc-Andre Moreau <marcandre.moreau@gmail.com> 6 * 7 * Licensed under the Apache License, Version 2.0 (the "License"); 8 * you may not use this file except in compliance with the License. 9 * You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, software 14 * distributed under the License is distributed on an "AS IS" BASIS, 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 * See the License for the specific language governing permissions and 17 * limitations under the License. 18 */ 19 20#ifndef FREERDP_UPDATE_SECONDARY_H 21#define FREERDP_UPDATE_SECONDARY_H 22 23#include <freerdp/types.h> 24#include <freerdp/primary.h> 25 26#define GLYPH_FRAGMENT_NOP 0x00 27#define GLYPH_FRAGMENT_USE 0xFE 28#define GLYPH_FRAGMENT_ADD 0xFF 29 30#define CBR2_HEIGHT_SAME_AS_WIDTH 0x01 31#define CBR2_PERSISTENT_KEY_PRESENT 0x02 32#define CBR2_NO_BITMAP_COMPRESSION_HDR 0x08 33#define CBR2_DO_NOT_CACHE 0x10 34 35#define SCREEN_BITMAP_SURFACE 0xFFFF 36#define BITMAP_CACHE_WAITING_LIST_INDEX 0x7FFF 37 38#define CACHED_BRUSH 0x80 39 40#define BMF_1BPP 0x1 41#define BMF_8BPP 0x3 42#define BMF_16BPP 0x4 43#define BMF_24BPP 0x5 44#define BMF_32BPP 0x6 45 46#ifndef _WIN32 47#define BS_SOLID 0x00 48#define BS_NULL 0x01 49#define BS_HATCHED 0x02 50#define BS_PATTERN 0x03 51#endif 52 53#ifndef _WIN32 54#define HS_HORIZONTAL 0x00 55#define HS_VERTICAL 0x01 56#define HS_FDIAGONAL 0x02 57#define HS_BDIAGONAL 0x03 58#define HS_CROSS 0x04 59#define HS_DIAGCROSS 0x05 60#endif 61 62#define SO_FLAG_DEFAULT_PLACEMENT 0x01 63#define SO_HORIZONTAL 0x02 64#define SO_VERTICAL 0x04 65#define SO_REVERSED 0x08 66#define SO_ZERO_BEARINGS 0x10 67#define SO_CHAR_INC_EQUAL_BM_BASE 0x20 68#define SO_MAXEXT_EQUAL_BM_SIDE 0x40 69 70struct _CACHE_BITMAP_ORDER 71{ 72 UINT32 cacheId; 73 UINT32 bitmapBpp; 74 UINT32 bitmapWidth; 75 UINT32 bitmapHeight; 76 UINT32 bitmapLength; 77 UINT32 cacheIndex; 78 BOOL compressed; 79 BYTE bitmapComprHdr[8]; 80 BYTE* bitmapDataStream; 81}; 82typedef struct _CACHE_BITMAP_ORDER CACHE_BITMAP_ORDER; 83 84struct _CACHE_BITMAP_V2_ORDER 85{ 86 UINT32 cacheId; 87 UINT32 flags; 88 UINT32 key1; 89 UINT32 key2; 90 UINT32 bitmapBpp; 91 UINT32 bitmapWidth; 92 UINT32 bitmapHeight; 93 UINT32 bitmapLength; 94 UINT32 cacheIndex; 95 BOOL compressed; 96 UINT32 cbCompFirstRowSize; 97 UINT32 cbCompMainBodySize; 98 UINT32 cbScanWidth; 99 UINT32 cbUncompressedSize; 100 BYTE* bitmapDataStream; 101}; 102typedef struct _CACHE_BITMAP_V2_ORDER CACHE_BITMAP_V2_ORDER; 103 104struct _BITMAP_DATA_EX 105{ 106 UINT32 bpp; 107 UINT32 codecID; 108 UINT32 width; 109 UINT32 height; 110 UINT32 length; 111 BYTE* data; 112}; 113typedef struct _BITMAP_DATA_EX BITMAP_DATA_EX; 114 115struct _CACHE_BITMAP_V3_ORDER 116{ 117 UINT32 cacheId; 118 UINT32 bpp; 119 UINT32 flags; 120 UINT32 cacheIndex; 121 UINT32 key1; 122 UINT32 key2; 123 BITMAP_DATA_EX bitmapData; 124}; 125typedef struct _CACHE_BITMAP_V3_ORDER CACHE_BITMAP_V3_ORDER; 126 127struct _CACHE_COLOR_TABLE_ORDER 128{ 129 UINT32 cacheIndex; 130 UINT32 numberColors; 131 UINT32 colorTable[256]; 132}; 133typedef struct _CACHE_COLOR_TABLE_ORDER CACHE_COLOR_TABLE_ORDER; 134 135struct _CACHE_GLYPH_ORDER 136{ 137 UINT32 cacheId; 138 UINT32 cGlyphs; 139 GLYPH_DATA glyphData[256]; 140 WCHAR* unicodeCharacters; 141}; 142typedef struct _CACHE_GLYPH_ORDER CACHE_GLYPH_ORDER; 143 144struct _CACHE_GLYPH_V2_ORDER 145{ 146 UINT32 cacheId; 147 UINT32 flags; 148 UINT32 cGlyphs; 149 GLYPH_DATA_V2 glyphData[256]; 150 WCHAR* unicodeCharacters; 151}; 152typedef struct _CACHE_GLYPH_V2_ORDER CACHE_GLYPH_V2_ORDER; 153 154struct _CACHE_BRUSH_ORDER 155{ 156 UINT32 index; 157 UINT32 bpp; 158 UINT32 cx; 159 UINT32 cy; 160 UINT32 style; 161 UINT32 length; 162 BYTE data[256]; 163}; 164typedef struct _CACHE_BRUSH_ORDER CACHE_BRUSH_ORDER; 165 166typedef BOOL (*pCacheBitmap)(rdpContext* context, const CACHE_BITMAP_ORDER* cache_bitmap_order); 167typedef BOOL (*pCacheBitmapV2)(rdpContext* context, CACHE_BITMAP_V2_ORDER* cache_bitmap_v2_order); 168typedef BOOL (*pCacheBitmapV3)(rdpContext* context, CACHE_BITMAP_V3_ORDER* cache_bitmap_v3_order); 169typedef BOOL (*pCacheColorTable)(rdpContext* context, 170 const CACHE_COLOR_TABLE_ORDER* cache_color_table_order); 171typedef BOOL (*pCacheGlyph)(rdpContext* context, const CACHE_GLYPH_ORDER* cache_glyph_order); 172typedef BOOL (*pCacheGlyphV2)(rdpContext* context, 173 const CACHE_GLYPH_V2_ORDER* cache_glyph_v2_order); 174typedef BOOL (*pCacheBrush)(rdpContext* context, const CACHE_BRUSH_ORDER* cache_brush_order); 175typedef BOOL (*pCacheOrderInfo)(rdpContext* context, UINT16 orderLength, UINT16 extraFlags, 176 UINT8 orderType, const char* orderName); 177 178struct rdp_secondary_update 179{ 180 rdpContext* context; /* 0 */ 181 UINT32 paddingA[16 - 1]; /* 1 */ 182 183 pCacheBitmap CacheBitmap; /* 16 */ 184 pCacheBitmapV2 CacheBitmapV2; /* 17 */ 185 pCacheBitmapV3 CacheBitmapV3; /* 18 */ 186 pCacheColorTable CacheColorTable; /* 19 */ 187 pCacheGlyph CacheGlyph; /* 20 */ 188 pCacheGlyphV2 CacheGlyphV2; /* 21 */ 189 pCacheBrush CacheBrush; /* 22 */ 190 /* Statistics callback */ 191 pCacheOrderInfo CacheOrderInfo; /* 23 */ 192 UINT32 paddingE[32 - 24]; /* 24 */ 193 194 /* internal */ 195 196 BOOL glyph_v2; 197}; 198typedef struct rdp_secondary_update rdpSecondaryUpdate; 199 200#endif /* FREERDP_UPDATE_SECONDARY_H */