Blame libfreerdp/core/orders.h

Packit 1fb8d4
/**
Packit 1fb8d4
 * FreeRDP: A Remote Desktop Protocol Implementation
Packit 1fb8d4
 * Drawing Orders
Packit 1fb8d4
 *
Packit 1fb8d4
 * Copyright 2011 Marc-Andre Moreau <marcandre.moreau@gmail.com>
Packit 1fb8d4
 * Copyright 2016 Armin Novak <armin.novak@thincast.com>
Packit 1fb8d4
 * Copyright 2016 Thincast Technologies GmbH
Packit 1fb8d4
 *
Packit 1fb8d4
 * Licensed under the Apache License, Version 2.0 (the "License");
Packit 1fb8d4
 * you may not use this file except in compliance with the License.
Packit 1fb8d4
 * You may obtain a copy of the License at
Packit 1fb8d4
 *
Packit 1fb8d4
 *     http://www.apache.org/licenses/LICENSE-2.0
Packit 1fb8d4
 *
Packit 1fb8d4
 * Unless required by applicable law or agreed to in writing, software
Packit 1fb8d4
 * distributed under the License is distributed on an "AS IS" BASIS,
Packit 1fb8d4
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Packit 1fb8d4
 * See the License for the specific language governing permissions and
Packit 1fb8d4
 * limitations under the License.
Packit 1fb8d4
 */
Packit 1fb8d4
Packit 1fb8d4
#ifndef FREERDP_LIB_CORE_ORDERS_H
Packit 1fb8d4
#define FREERDP_LIB_CORE_ORDERS_H
Packit 1fb8d4
Packit 1fb8d4
#include "rdp.h"
Packit 1fb8d4
Packit 1fb8d4
#include <freerdp/types.h>
Packit 1fb8d4
#include <freerdp/update.h>
Packit 1fb8d4
#include <freerdp/api.h>
Packit 1fb8d4
Packit 1fb8d4
#include <winpr/stream.h>
Packit 1fb8d4
Packit 1fb8d4
/* Order Control Flags */
Packit 1fb8d4
#define ORDER_STANDARD				0x01
Packit 1fb8d4
#define ORDER_SECONDARY				0x02
Packit 1fb8d4
#define ORDER_BOUNDS				0x04
Packit 1fb8d4
#define ORDER_TYPE_CHANGE			0x08
Packit 1fb8d4
#define ORDER_DELTA_COORDINATES			0x10
Packit 1fb8d4
#define ORDER_ZERO_BOUNDS_DELTAS		0x20
Packit 1fb8d4
#define ORDER_ZERO_FIELD_BYTE_BIT0		0x40
Packit 1fb8d4
#define ORDER_ZERO_FIELD_BYTE_BIT1		0x80
Packit 1fb8d4
Packit 1fb8d4
/* Bound Field Flags */
Packit 1fb8d4
#define BOUND_LEFT				0x01
Packit 1fb8d4
#define BOUND_TOP				0x02
Packit 1fb8d4
#define BOUND_RIGHT				0x04
Packit 1fb8d4
#define BOUND_BOTTOM				0x08
Packit 1fb8d4
#define BOUND_DELTA_LEFT			0x10
Packit 1fb8d4
#define BOUND_DELTA_TOP				0x20
Packit 1fb8d4
#define BOUND_DELTA_RIGHT			0x40
Packit 1fb8d4
#define BOUND_DELTA_BOTTOM			0x80
Packit 1fb8d4
Packit 1fb8d4
/* Field Presence Flags */
Packit 1fb8d4
#define ORDER_FIELD_01				0x000001
Packit 1fb8d4
#define ORDER_FIELD_02				0x000002
Packit 1fb8d4
#define ORDER_FIELD_03				0x000004
Packit 1fb8d4
#define ORDER_FIELD_04				0x000008
Packit 1fb8d4
#define ORDER_FIELD_05				0x000010
Packit 1fb8d4
#define ORDER_FIELD_06				0x000020
Packit 1fb8d4
#define ORDER_FIELD_07				0x000040
Packit 1fb8d4
#define ORDER_FIELD_08				0x000080
Packit 1fb8d4
#define ORDER_FIELD_09				0x000100
Packit 1fb8d4
#define ORDER_FIELD_10				0x000200
Packit 1fb8d4
#define ORDER_FIELD_11				0x000400
Packit 1fb8d4
#define ORDER_FIELD_12				0x000800
Packit 1fb8d4
#define ORDER_FIELD_13				0x001000
Packit 1fb8d4
#define ORDER_FIELD_14				0x002000
Packit 1fb8d4
#define ORDER_FIELD_15				0x004000
Packit 1fb8d4
#define ORDER_FIELD_16				0x008000
Packit 1fb8d4
#define ORDER_FIELD_17				0x010000
Packit 1fb8d4
#define ORDER_FIELD_18				0x020000
Packit 1fb8d4
#define ORDER_FIELD_19				0x040000
Packit 1fb8d4
#define ORDER_FIELD_20				0x080000
Packit 1fb8d4
#define ORDER_FIELD_21				0x100000
Packit 1fb8d4
#define ORDER_FIELD_22				0x200000
Packit 1fb8d4
#define ORDER_FIELD_23				0x400000
Packit 1fb8d4
Packit 1fb8d4
/* Bitmap Cache Flags */
Packit 1fb8d4
#define CBR2_8BPP			0x3
Packit 1fb8d4
#define CBR2_16BPP			0x4
Packit 1fb8d4
#define CBR2_24BPP			0x5
Packit 1fb8d4
#define CBR2_32BPP			0x6
Packit 1fb8d4
Packit 1fb8d4
#define CBR23_8BPP			0x3
Packit 1fb8d4
#define CBR23_16BPP			0x4
Packit 1fb8d4
#define CBR23_24BPP			0x5
Packit 1fb8d4
#define CBR23_32BPP			0x6
Packit 1fb8d4
Packit 1fb8d4
#define CBR3_IGNORABLE_FLAG		0x08
Packit 1fb8d4
#define CBR3_DO_NOT_CACHE		0x10
Packit 1fb8d4
Packit 1fb8d4
/* Primary Drawing Orders */
Packit 1fb8d4
#define ORDER_TYPE_DSTBLT			0x00
Packit 1fb8d4
#define ORDER_TYPE_PATBLT			0x01
Packit 1fb8d4
#define ORDER_TYPE_SCRBLT			0x02
Packit 1fb8d4
#define ORDER_TYPE_DRAW_NINE_GRID		0x07
Packit 1fb8d4
#define ORDER_TYPE_MULTI_DRAW_NINE_GRID		0x08
Packit 1fb8d4
#define ORDER_TYPE_LINE_TO			0x09
Packit 1fb8d4
#define ORDER_TYPE_OPAQUE_RECT			0x0A
Packit 1fb8d4
#define ORDER_TYPE_SAVE_BITMAP			0x0B
Packit 1fb8d4
#define ORDER_TYPE_MEMBLT			0x0D
Packit 1fb8d4
#define ORDER_TYPE_MEM3BLT			0x0E
Packit 1fb8d4
#define ORDER_TYPE_MULTI_DSTBLT			0x0F
Packit 1fb8d4
#define ORDER_TYPE_MULTI_PATBLT			0x10
Packit 1fb8d4
#define ORDER_TYPE_MULTI_SCRBLT			0x11
Packit 1fb8d4
#define ORDER_TYPE_MULTI_OPAQUE_RECT		0x12
Packit 1fb8d4
#define ORDER_TYPE_FAST_INDEX			0x13
Packit 1fb8d4
#define ORDER_TYPE_POLYGON_SC			0x14
Packit 1fb8d4
#define ORDER_TYPE_POLYGON_CB			0x15
Packit 1fb8d4
#define ORDER_TYPE_POLYLINE			0x16
Packit 1fb8d4
#define ORDER_TYPE_FAST_GLYPH			0x18
Packit 1fb8d4
#define ORDER_TYPE_ELLIPSE_SC			0x19
Packit 1fb8d4
#define ORDER_TYPE_ELLIPSE_CB			0x1A
Packit 1fb8d4
#define ORDER_TYPE_GLYPH_INDEX			0x1B
Packit 1fb8d4
Packit 1fb8d4
/* Primary Drawing Orders Fields */
Packit 1fb8d4
#define DSTBLT_ORDER_FIELDS			5
Packit 1fb8d4
#define PATBLT_ORDER_FIELDS			12
Packit 1fb8d4
#define SCRBLT_ORDER_FIELDS			7
Packit 1fb8d4
#define DRAW_NINE_GRID_ORDER_FIELDS		5
Packit 1fb8d4
#define MULTI_DRAW_NINE_GRID_ORDER_FIELDS	7
Packit 1fb8d4
#define LINE_TO_ORDER_FIELDS			10
Packit 1fb8d4
#define OPAQUE_RECT_ORDER_FIELDS		7
Packit 1fb8d4
#define SAVE_BITMAP_ORDER_FIELDS		6
Packit 1fb8d4
#define MEMBLT_ORDER_FIELDS			9
Packit 1fb8d4
#define MEM3BLT_ORDER_FIELDS			16
Packit 1fb8d4
#define MULTI_DSTBLT_ORDER_FIELDS		7
Packit 1fb8d4
#define MULTI_PATBLT_ORDER_FIELDS		14
Packit 1fb8d4
#define MULTI_SCRBLT_ORDER_FIELDS		9
Packit 1fb8d4
#define MULTI_OPAQUE_RECT_ORDER_FIELDS		9
Packit 1fb8d4
#define FAST_INDEX_ORDER_FIELDS			15
Packit 1fb8d4
#define POLYGON_SC_ORDER_FIELDS			7
Packit 1fb8d4
#define POLYGON_CB_ORDER_FIELDS			13
Packit 1fb8d4
#define POLYLINE_ORDER_FIELDS			7
Packit 1fb8d4
#define FAST_GLYPH_ORDER_FIELDS			15
Packit 1fb8d4
#define ELLIPSE_SC_ORDER_FIELDS			7
Packit 1fb8d4
#define ELLIPSE_CB_ORDER_FIELDS			13
Packit 1fb8d4
#define GLYPH_INDEX_ORDER_FIELDS		22
Packit 1fb8d4
Packit 1fb8d4
/* Primary Drawing Orders Field Bytes */
Packit 1fb8d4
#define DSTBLT_ORDER_FIELD_BYTES		1
Packit 1fb8d4
#define PATBLT_ORDER_FIELD_BYTES		2
Packit 1fb8d4
#define SCRBLT_ORDER_FIELD_BYTES		1
Packit 1fb8d4
#define DRAW_NINE_GRID_ORDER_FIELD_BYTES	1
Packit 1fb8d4
#define MULTI_DRAW_NINE_GRID_ORDER_FIELD_BYTES	1
Packit 1fb8d4
#define LINE_TO_ORDER_FIELD_BYTES		2
Packit 1fb8d4
#define OPAQUE_RECT_ORDER_FIELD_BYTES		1
Packit 1fb8d4
#define SAVE_BITMAP_ORDER_FIELD_BYTES		1
Packit 1fb8d4
#define MEMBLT_ORDER_FIELD_BYTES		2
Packit 1fb8d4
#define MEM3BLT_ORDER_FIELD_BYTES		3
Packit 1fb8d4
#define MULTI_DSTBLT_ORDER_FIELD_BYTES		1
Packit 1fb8d4
#define MULTI_PATBLT_ORDER_FIELD_BYTES		2
Packit 1fb8d4
#define MULTI_SCRBLT_ORDER_FIELD_BYTES		2
Packit 1fb8d4
#define MULTI_OPAQUE_RECT_ORDER_FIELD_BYTES	2
Packit 1fb8d4
#define FAST_INDEX_ORDER_FIELD_BYTES		2
Packit 1fb8d4
#define POLYGON_SC_ORDER_FIELD_BYTES		1
Packit 1fb8d4
#define POLYGON_CB_ORDER_FIELD_BYTES		2
Packit 1fb8d4
#define POLYLINE_ORDER_FIELD_BYTES		1
Packit 1fb8d4
#define FAST_GLYPH_ORDER_FIELD_BYTES		2
Packit 1fb8d4
#define ELLIPSE_SC_ORDER_FIELD_BYTES		1
Packit 1fb8d4
#define ELLIPSE_CB_ORDER_FIELD_BYTES		2
Packit 1fb8d4
#define GLYPH_INDEX_ORDER_FIELD_BYTES		3
Packit 1fb8d4
Packit 1fb8d4
/* Secondary Drawing Orders */
Packit 1fb8d4
#define ORDER_TYPE_BITMAP_UNCOMPRESSED		0x00
Packit 1fb8d4
#define ORDER_TYPE_CACHE_COLOR_TABLE		0x01
Packit 1fb8d4
#define ORDER_TYPE_CACHE_BITMAP_COMPRESSED	0x02
Packit 1fb8d4
#define ORDER_TYPE_CACHE_GLYPH			0x03
Packit 1fb8d4
#define ORDER_TYPE_BITMAP_UNCOMPRESSED_V2	0x04
Packit 1fb8d4
#define ORDER_TYPE_BITMAP_COMPRESSED_V2		0x05
Packit 1fb8d4
#define ORDER_TYPE_CACHE_BRUSH			0x07
Packit 1fb8d4
#define ORDER_TYPE_BITMAP_COMPRESSED_V3		0x08
Packit 1fb8d4
Packit 1fb8d4
/* Alternate Secondary Drawing Orders */
Packit 1fb8d4
#define ORDER_TYPE_SWITCH_SURFACE		0x00
Packit 1fb8d4
#define ORDER_TYPE_CREATE_OFFSCREEN_BITMAP	0x01
Packit 1fb8d4
#define ORDER_TYPE_STREAM_BITMAP_FIRST		0x02
Packit 1fb8d4
#define ORDER_TYPE_STREAM_BITMAP_NEXT		0x03
Packit 1fb8d4
#define ORDER_TYPE_CREATE_NINE_GRID_BITMAP	0x04
Packit 1fb8d4
#define ORDER_TYPE_GDIPLUS_FIRST		0x05
Packit 1fb8d4
#define ORDER_TYPE_GDIPLUS_NEXT			0x06
Packit 1fb8d4
#define ORDER_TYPE_GDIPLUS_END			0x07
Packit 1fb8d4
#define ORDER_TYPE_GDIPLUS_CACHE_FIRST		0x08
Packit 1fb8d4
#define ORDER_TYPE_GDIPLUS_CACHE_NEXT		0x09
Packit 1fb8d4
#define ORDER_TYPE_GDIPLUS_CACHE_END		0x0A
Packit 1fb8d4
#define ORDER_TYPE_WINDOW			0x0B
Packit 1fb8d4
#define ORDER_TYPE_COMPDESK_FIRST		0x0C
Packit 1fb8d4
#define ORDER_TYPE_FRAME_MARKER			0x0D
Packit 1fb8d4
Packit 1fb8d4
#define CG_GLYPH_UNICODE_PRESENT		0x0010
Packit 1fb8d4
Packit 1fb8d4
FREERDP_LOCAL extern const BYTE PRIMARY_DRAWING_ORDER_FIELD_BYTES[];
Packit 1fb8d4
Packit 1fb8d4
FREERDP_LOCAL BOOL update_recv_order(rdpUpdate* update, wStream* s);
Packit 1fb8d4
Packit 1fb8d4
FREERDP_LOCAL BOOL update_write_field_flags(wStream* s, UINT32 fieldFlags,
Packit 1fb8d4
        BYTE flags,
Packit 1fb8d4
        BYTE fieldBytes);
Packit 1fb8d4
Packit 1fb8d4
FREERDP_LOCAL BOOL update_write_bounds(wStream* s, ORDER_INFO* orderInfo);
Packit 1fb8d4
Packit 1fb8d4
FREERDP_LOCAL int update_approximate_dstblt_order(ORDER_INFO* orderInfo,
Packit 1fb8d4
        const DSTBLT_ORDER* dstblt);
Packit 1fb8d4
FREERDP_LOCAL BOOL update_write_dstblt_order(wStream* s, ORDER_INFO* orderInfo,
Packit 1fb8d4
        const DSTBLT_ORDER* dstblt);
Packit 1fb8d4
Packit 1fb8d4
FREERDP_LOCAL int update_approximate_patblt_order(ORDER_INFO* orderInfo,
Packit 1fb8d4
        PATBLT_ORDER* patblt);
Packit 1fb8d4
FREERDP_LOCAL BOOL update_write_patblt_order(wStream* s, ORDER_INFO* orderInfo,
Packit 1fb8d4
        PATBLT_ORDER* patblt);
Packit 1fb8d4
Packit 1fb8d4
FREERDP_LOCAL int update_approximate_scrblt_order(ORDER_INFO* orderInfo,
Packit 1fb8d4
        const SCRBLT_ORDER* scrblt);
Packit 1fb8d4
FREERDP_LOCAL BOOL update_write_scrblt_order(wStream* s, ORDER_INFO* orderInfo,
Packit 1fb8d4
        const SCRBLT_ORDER* scrblt);
Packit 1fb8d4
Packit 1fb8d4
FREERDP_LOCAL int update_approximate_opaque_rect_order(ORDER_INFO* orderInfo,
Packit 1fb8d4
        const OPAQUE_RECT_ORDER* opaque_rect);
Packit 1fb8d4
FREERDP_LOCAL BOOL update_write_opaque_rect_order(wStream* s,
Packit 1fb8d4
        ORDER_INFO* orderInfo,
Packit 1fb8d4
        const OPAQUE_RECT_ORDER* opaque_rect);
Packit 1fb8d4
Packit 1fb8d4
FREERDP_LOCAL int update_approximate_line_to_order(ORDER_INFO* orderInfo,
Packit 1fb8d4
        const LINE_TO_ORDER* line_to);
Packit 1fb8d4
FREERDP_LOCAL BOOL update_write_line_to_order(wStream* s, ORDER_INFO* orderInfo,
Packit 1fb8d4
        const LINE_TO_ORDER* line_to);
Packit 1fb8d4
Packit 1fb8d4
FREERDP_LOCAL int update_approximate_memblt_order(ORDER_INFO* orderInfo,
Packit 1fb8d4
        const MEMBLT_ORDER* memblt);
Packit 1fb8d4
FREERDP_LOCAL BOOL update_write_memblt_order(wStream* s, ORDER_INFO* orderInfo,
Packit 1fb8d4
        const MEMBLT_ORDER* memblt);
Packit 1fb8d4
Packit 1fb8d4
FREERDP_LOCAL int update_approximate_glyph_index_order(ORDER_INFO* orderInfo,
Packit 1fb8d4
        const GLYPH_INDEX_ORDER* glyph_index);
Packit 1fb8d4
FREERDP_LOCAL BOOL update_write_glyph_index_order(wStream* s,
Packit 1fb8d4
        ORDER_INFO* orderInfo,
Packit 1fb8d4
        GLYPH_INDEX_ORDER* glyph_index);
Packit 1fb8d4
Packit 1fb8d4
FREERDP_LOCAL int update_approximate_cache_bitmap_order(
Packit 1fb8d4
    const CACHE_BITMAP_ORDER* cache_bitmap,
Packit 1fb8d4
    BOOL compressed, UINT16* flags);
Packit 1fb8d4
FREERDP_LOCAL BOOL update_write_cache_bitmap_order(wStream* s,
Packit 1fb8d4
        const CACHE_BITMAP_ORDER* cache_bitmap_order,
Packit 1fb8d4
        BOOL compressed, UINT16* flags);
Packit 1fb8d4
Packit 1fb8d4
FREERDP_LOCAL int update_approximate_cache_bitmap_v2_order(
Packit 1fb8d4
    CACHE_BITMAP_V2_ORDER* cache_bitmap_v2,
Packit 1fb8d4
    BOOL compressed, UINT16* flags);
Packit 1fb8d4
FREERDP_LOCAL BOOL update_write_cache_bitmap_v2_order(wStream* s,
Packit 1fb8d4
        CACHE_BITMAP_V2_ORDER* cache_bitmap_v2_order,
Packit 1fb8d4
        BOOL compressed, UINT16* flags);
Packit 1fb8d4
Packit 1fb8d4
FREERDP_LOCAL int update_approximate_cache_bitmap_v3_order(
Packit 1fb8d4
    CACHE_BITMAP_V3_ORDER* cache_bitmap_v3,
Packit 1fb8d4
    UINT16* flags);
Packit 1fb8d4
FREERDP_LOCAL BOOL update_write_cache_bitmap_v3_order(wStream* s,
Packit 1fb8d4
        CACHE_BITMAP_V3_ORDER* cache_bitmap_v3_order,
Packit 1fb8d4
        UINT16* flags);
Packit 1fb8d4
Packit 1fb8d4
FREERDP_LOCAL int update_approximate_cache_color_table_order(
Packit 1fb8d4
    const CACHE_COLOR_TABLE_ORDER* cache_color_table,
Packit 1fb8d4
    UINT16* flags);
Packit 1fb8d4
FREERDP_LOCAL BOOL update_write_cache_color_table_order(wStream* s,
Packit 1fb8d4
        const CACHE_COLOR_TABLE_ORDER* cache_color_table_order,
Packit 1fb8d4
        UINT16* flags);
Packit 1fb8d4
Packit 1fb8d4
FREERDP_LOCAL int update_approximate_cache_glyph_order(const CACHE_GLYPH_ORDER*
Packit 1fb8d4
        cache_glyph,
Packit 1fb8d4
        UINT16* flags);
Packit 1fb8d4
FREERDP_LOCAL BOOL update_write_cache_glyph_order(wStream* s,
Packit 1fb8d4
        const CACHE_GLYPH_ORDER* cache_glyph_order,
Packit 1fb8d4
        UINT16* flags);
Packit 1fb8d4
Packit 1fb8d4
FREERDP_LOCAL int update_approximate_cache_glyph_v2_order(
Packit 1fb8d4
    const CACHE_GLYPH_V2_ORDER* cache_glyph_v2,
Packit 1fb8d4
    UINT16* flags);
Packit 1fb8d4
FREERDP_LOCAL BOOL update_write_cache_glyph_v2_order(
Packit 1fb8d4
    wStream* s,
Packit 1fb8d4
    const CACHE_GLYPH_V2_ORDER* cache_glyph_v2,
Packit 1fb8d4
    UINT16* flags);
Packit 1fb8d4
Packit 1fb8d4
FREERDP_LOCAL int update_approximate_cache_brush_order(
Packit 1fb8d4
    const CACHE_BRUSH_ORDER* cache_brush,
Packit 1fb8d4
    UINT16* flags);
Packit 1fb8d4
FREERDP_LOCAL BOOL update_write_cache_brush_order(
Packit 1fb8d4
    wStream* s,
Packit 1fb8d4
    const CACHE_BRUSH_ORDER* cache_brush_order,
Packit 1fb8d4
    UINT16* flags);
Packit 1fb8d4
Packit 1fb8d4
FREERDP_LOCAL int update_approximate_create_offscreen_bitmap_order(
Packit 1fb8d4
    const CREATE_OFFSCREEN_BITMAP_ORDER* create_offscreen_bitmap);
Packit 1fb8d4
FREERDP_LOCAL BOOL update_write_create_offscreen_bitmap_order(
Packit 1fb8d4
    wStream* s,
Packit 1fb8d4
    const CREATE_OFFSCREEN_BITMAP_ORDER* create_offscreen_bitmap);
Packit 1fb8d4
Packit 1fb8d4
FREERDP_LOCAL int update_approximate_switch_surface_order(
Packit 1fb8d4
    const SWITCH_SURFACE_ORDER* switch_surface);
Packit 1fb8d4
FREERDP_LOCAL BOOL update_write_switch_surface_order(
Packit 1fb8d4
    wStream* s,
Packit 1fb8d4
    const SWITCH_SURFACE_ORDER* switch_surface);
Packit 1fb8d4
Packit 1fb8d4
#endif /* FREERDP_LIB_CORE_ORDERS_H */