Blame libfreerdp/core/orders.h

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