cscg24-guacamole

CSCG 2024 Challenge 'Guacamole Mashup'
git clone https://git.sinitax.com/sinitax/cscg24-guacamole
Log | Files | Refs | sfeed.txt

gdi.h (14733B)


      1/**
      2 * FreeRDP: A Remote Desktop Protocol Implementation
      3 * GDI Library
      4 *
      5 * Copyright 2010-2011 Marc-Andre Moreau <marcandre.moreau@gmail.com>
      6 * Copyright 2016 Armin Novak <armin.novak@thincast.com>
      7 * Copyright 2016 Thincast Technologies GmbH
      8 *
      9 * Licensed under the Apache License, Version 2.0 (the "License");
     10 * you may not use this file except in compliance with the License.
     11 * You may obtain a copy of the License at
     12 *
     13 *     http://www.apache.org/licenses/LICENSE-2.0
     14 *
     15 * Unless required by applicable law or agreed to in writing, software
     16 * distributed under the License is distributed on an "AS IS" BASIS,
     17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     18 * See the License for the specific language governing permissions and
     19 * limitations under the License.
     20 */
     21
     22#ifndef FREERDP_GDI_H
     23#define FREERDP_GDI_H
     24
     25#include <winpr/wlog.h>
     26
     27#include <freerdp/api.h>
     28#include <freerdp/log.h>
     29#include <freerdp/freerdp.h>
     30#include <freerdp/cache/cache.h>
     31#include <freerdp/codec/color.h>
     32#include <freerdp/codec/region.h>
     33
     34#include <freerdp/client/rdpgfx.h>
     35#include <freerdp/client/geometry.h>
     36#include <freerdp/client/video.h>
     37
     38/* For more information, see [MS-RDPEGDI] */
     39
     40/* Binary Raster Operations (ROP2) */
     41#define GDI_R2_BLACK 0x01       /* D = 0 */
     42#define GDI_R2_NOTMERGEPEN 0x02 /* D = ~(D | P) */
     43#define GDI_R2_MASKNOTPEN 0x03  /* D = D & ~P */
     44#define GDI_R2_NOTCOPYPEN 0x04  /* D = ~P */
     45#define GDI_R2_MASKPENNOT 0x05  /* D = P & ~D */
     46#define GDI_R2_NOT 0x06         /* D = ~D */
     47#define GDI_R2_XORPEN 0x07      /* D = D ^ P */
     48#define GDI_R2_NOTMASKPEN 0x08  /* D = ~(D & P) */
     49#define GDI_R2_MASKPEN 0x09     /* D = D & P */
     50#define GDI_R2_NOTXORPEN 0x0A   /* D = ~(D ^ P) */
     51#define GDI_R2_NOP 0x0B         /* D = D */
     52#define GDI_R2_MERGENOTPEN 0x0C /* D = D | ~P */
     53#define GDI_R2_COPYPEN 0x0D     /* D = P */
     54#define GDI_R2_MERGEPENNOT 0x0E /* D = P | ~D */
     55#define GDI_R2_MERGEPEN 0x0F    /* D = P | D */
     56#define GDI_R2_WHITE 0x10       /* D = 1 */
     57
     58/* Ternary Raster Operations (ROP3) */
     59#define GDI_BLACKNESS 0x00000042
     60#define GDI_DPSoon 0x00010289
     61#define GDI_DPSona 0x00020C89
     62#define GDI_PSon 0x000300AA
     63#define GDI_SDPona 0x00040C88
     64#define GDI_DPon 0x000500A9
     65#define GDI_PDSxnon 0x00060865
     66#define GDI_PDSaon 0x000702C5
     67#define GDI_SDPnaa 0x00080F08
     68#define GDI_PDSxon 0x00090245
     69#define GDI_DPna 0x000A0329
     70#define GDI_PSDnaon 0x000B0B2A
     71#define GDI_SPna 0x000C0324
     72#define GDI_PDSnaon 0x000D0B25
     73#define GDI_PDSonon 0x000E08A5
     74#define GDI_Pn 0x000F0001
     75#define GDI_PDSona 0x00100C85
     76#define GDI_NOTSRCERASE 0x001100A6
     77#define GDI_SDPxnon 0x00120868
     78#define GDI_SDPaon 0x001302C8
     79#define GDI_DPSxnon 0x00140869
     80#define GDI_DPSaon 0x001502C9
     81#define GDI_PSDPSanaxx 0x00165CCA
     82#define GDI_SSPxDSxaxn 0x00171D54
     83#define GDI_SPxPDxa 0x00180D59
     84#define GDI_SDPSanaxn 0x00191CC8
     85#define GDI_PDSPaox 0x001A06C5
     86#define GDI_SDPSxaxn 0x001B0768
     87#define GDI_PSDPaox 0x001C06CA
     88#define GDI_DSPDxaxn 0x001D0766
     89#define GDI_PDSox 0x001E01A5
     90#define GDI_PDSoan 0x001F0385
     91#define GDI_DPSnaa 0x00200F09
     92#define GDI_SDPxon 0x00210248
     93#define GDI_DSna 0x00220326
     94#define GDI_SPDnaon 0x00230B24
     95#define GDI_SPxDSxa 0x00240D55
     96#define GDI_PDSPanaxn 0x00251CC5
     97#define GDI_SDPSaox 0x002606C8
     98#define GDI_SDPSxnox 0x00271868
     99#define GDI_DPSxa 0x00280369
    100#define GDI_PSDPSaoxxn 0x002916CA
    101#define GDI_DPSana 0x002A0CC9
    102#define GDI_SSPxPDxaxn 0x002B1D58
    103#define GDI_SPDSoax 0x002C0784
    104#define GDI_PSDnox 0x002D060A
    105#define GDI_PSDPxox 0x002E064A
    106#define GDI_PSDnoan 0x002F0E2A
    107#define GDI_PSna 0x0030032A
    108#define GDI_SDPnaon 0x00310B28
    109#define GDI_SDPSoox 0x00320688
    110#define GDI_NOTSRCCOPY 0x00330008
    111#define GDI_SPDSaox 0x003406C4
    112#define GDI_SPDSxnox 0x00351864
    113#define GDI_SDPox 0x003601A8
    114#define GDI_SDPoan 0x00370388
    115#define GDI_PSDPoax 0x0038078A
    116#define GDI_SPDnox 0x00390604
    117#define GDI_SPDSxox 0x003A0644
    118#define GDI_SPDnoan 0x003B0E24
    119#define GDI_PSx 0x003C004A
    120#define GDI_SPDSonox 0x003D18A4
    121#define GDI_SPDSnaox 0x003E1B24
    122#define GDI_PSan 0x003F00EA
    123#define GDI_PSDnaa 0x00400F0A
    124#define GDI_DPSxon 0x00410249
    125#define GDI_SDxPDxa 0x00420D5D
    126#define GDI_SPDSanaxn 0x00431CC4
    127#define GDI_SRCERASE 0x00440328
    128#define GDI_DPSnaon 0x00450B29
    129#define GDI_DSPDaox 0x004606C6
    130#define GDI_PSDPxaxn 0x0047076A
    131#define GDI_SDPxa 0x00480368
    132#define GDI_PDSPDaoxxn 0x004916C5
    133#define GDI_DPSDoax 0x004A0789
    134#define GDI_PDSnox 0x004B0605
    135#define GDI_SDPana 0x004C0CC8
    136#define GDI_SSPxDSxoxn 0x004D1954
    137#define GDI_PDSPxox 0x004E0645
    138#define GDI_PDSnoan 0x004F0E25
    139#define GDI_PDna 0x00500325
    140#define GDI_DSPnaon 0x00510B26
    141#define GDI_DPSDaox 0x005206C9
    142#define GDI_SPDSxaxn 0x00530764
    143#define GDI_DPSonon 0x005408A9
    144#define GDI_DSTINVERT 0x00550009
    145#define GDI_DPSox 0x005601A9
    146#define GDI_DPSoan 0x00570389
    147#define GDI_PDSPoax 0x00580785
    148#define GDI_DPSnox 0x00590609
    149#define GDI_PATINVERT 0x005A0049
    150#define GDI_DPSDonox 0x005B18A9
    151#define GDI_DPSDxox 0x005C0649
    152#define GDI_DPSnoan 0x005D0E29
    153#define GDI_DPSDnaox 0x005E1B29
    154#define GDI_DPan 0x005F00E9
    155#define GDI_PDSxa 0x00600365
    156#define GDI_DSPDSaoxxn 0x006116C6
    157#define GDI_DSPDoax 0x00620786
    158#define GDI_SDPnox 0x00630608
    159#define GDI_SDPSoax 0x00640788
    160#define GDI_DSPnox 0x00650606
    161#define GDI_SRCINVERT 0x00660046
    162#define GDI_SDPSonox 0x006718A8
    163#define GDI_DSPDSonoxxn 0x006858A6
    164#define GDI_PDSxxn 0x00690145
    165#define GDI_DPSax 0x006A01E9
    166#define GDI_PSDPSoaxxn 0x006B178A
    167#define GDI_SDPax 0x006C01E8
    168#define GDI_PDSPDoaxxn 0x006D1785
    169#define GDI_SDPSnoax 0x006E1E28
    170#define GDI_PDSxnan 0x006F0C65
    171#define GDI_PDSana 0x00700CC5
    172#define GDI_SSDxPDxaxn 0x00711D5C
    173#define GDI_SDPSxox 0x00720648
    174#define GDI_SDPnoan 0x00730E28
    175#define GDI_DSPDxox 0x00740646
    176#define GDI_DSPnoan 0x00750E26
    177#define GDI_SDPSnaox 0x00761B28
    178#define GDI_DSan 0x007700E6
    179#define GDI_PDSax 0x007801E5
    180#define GDI_DSPDSoaxxn 0x00791786
    181#define GDI_DPSDnoax 0x007A1E29
    182#define GDI_SDPxnan 0x007B0C68
    183#define GDI_SPDSnoax 0x007C1E24
    184#define GDI_DPSxnan 0x007D0C69
    185#define GDI_SPxDSxo 0x007E0955
    186#define GDI_DPSaan 0x007F03C9
    187#define GDI_DPSaa 0x008003E9
    188#define GDI_SPxDSxon 0x00810975
    189#define GDI_DPSxna 0x00820C49
    190#define GDI_SPDSnoaxn 0x00831E04
    191#define GDI_SDPxna 0x00840C48
    192#define GDI_PDSPnoaxn 0x00851E05
    193#define GDI_DSPDSoaxx 0x008617A6
    194#define GDI_PDSaxn 0x008701C5
    195#define GDI_SRCAND 0x008800C6
    196#define GDI_SDPSnaoxn 0x00891B08
    197#define GDI_DSPnoa 0x008A0E06
    198#define GDI_DSPDxoxn 0x008B0666
    199#define GDI_SDPnoa 0x008C0E08
    200#define GDI_SDPSxoxn 0x008D0668
    201#define GDI_SSDxPDxax 0x008E1D7C
    202#define GDI_PDSanan 0x008F0CE5
    203#define GDI_PDSxna 0x00900C45
    204#define GDI_SDPSnoaxn 0x00911E08
    205#define GDI_DPSDPoaxx 0x009217A9
    206#define GDI_SPDaxn 0x009301C4
    207#define GDI_PSDPSoaxx 0x009417AA
    208#define GDI_DPSaxn 0x009501C9
    209#define GDI_DPSxx 0x00960169
    210#define GDI_PSDPSonoxx 0x0097588A
    211#define GDI_SDPSonoxn 0x00981888
    212#define GDI_DSxn 0x00990066
    213#define GDI_DPSnax 0x009A0709
    214#define GDI_SDPSoaxn 0x009B07A8
    215#define GDI_SPDnax 0x009C0704
    216#define GDI_DSPDoaxn 0x009D07A6
    217#define GDI_DSPDSaoxx 0x009E16E6
    218#define GDI_PDSxan 0x009F0345
    219#define GDI_DPa 0x00A000C9
    220#define GDI_PDSPnaoxn 0x00A11B05
    221#define GDI_DPSnoa 0x00A20E09
    222#define GDI_DPSDxoxn 0x00A30669
    223#define GDI_PDSPonoxn 0x00A41885
    224#define GDI_PDxn 0x00A50065
    225#define GDI_DSPnax 0x00A60706
    226#define GDI_PDSPoaxn 0x00A707A5
    227#define GDI_DPSoa 0x00A803A9
    228#define GDI_DPSoxn 0x00A90189
    229#define GDI_DSTCOPY 0x00AA0029
    230#define GDI_DPSono 0x00AB0889
    231#define GDI_SPDSxax 0x00AC0744
    232#define GDI_DPSDaoxn 0x00AD06E9
    233#define GDI_DSPnao 0x00AE0B06
    234#define GDI_DPno 0x00AF0229
    235#define GDI_PDSnoa 0x00B00E05
    236#define GDI_PDSPxoxn 0x00B10665
    237#define GDI_SSPxDSxox 0x00B21974
    238#define GDI_SDPanan 0x00B30CE8
    239#define GDI_PSDnax 0x00B4070A
    240#define GDI_DPSDoaxn 0x00B507A9
    241#define GDI_DPSDPaoxx 0x00B616E9
    242#define GDI_SDPxan 0x00B70348
    243#define GDI_PSDPxax 0x00B8074A
    244#define GDI_DSPDaoxn 0x00B906E6
    245#define GDI_DPSnao 0x00BA0B09
    246#define GDI_MERGEPAINT 0x00BB0226
    247#define GDI_SPDSanax 0x00BC1CE4
    248#define GDI_SDxPDxan 0x00BD0D7D
    249#define GDI_DPSxo 0x00BE0269
    250#define GDI_DPSano 0x00BF08C9
    251#define GDI_MERGECOPY 0x00C000CA
    252#define GDI_SPDSnaoxn 0x00C11B04
    253#define GDI_SPDSonoxn 0x00C21884
    254#define GDI_PSxn 0x00C3006A
    255#define GDI_SPDnoa 0x00C40E04
    256#define GDI_SPDSxoxn 0x00C50664
    257#define GDI_SDPnax 0x00C60708
    258#define GDI_PSDPoaxn 0x00C707AA
    259#define GDI_SDPoa 0x00C803A8
    260#define GDI_SPDoxn 0x00C90184
    261#define GDI_DPSDxax 0x00CA0749
    262#define GDI_SPDSaoxn 0x00CB06E4
    263#define GDI_SRCCOPY 0x00CC0020
    264#define GDI_SDPono 0x00CD0888
    265#define GDI_SDPnao 0x00CE0B08
    266#define GDI_SPno 0x00CF0224
    267#define GDI_PSDnoa 0x00D00E0A
    268#define GDI_PSDPxoxn 0x00D1066A
    269#define GDI_PDSnax 0x00D20705
    270#define GDI_SPDSoaxn 0x00D307A4
    271#define GDI_SSPxPDxax 0x00D41D78
    272#define GDI_DPSanan 0x00D50CE9
    273#define GDI_PSDPSaoxx 0x00D616EA
    274#define GDI_DPSxan 0x00D70349
    275#define GDI_PDSPxax 0x00D80745
    276#define GDI_SDPSaoxn 0x00D906E8
    277#define GDI_DPSDanax 0x00DA1CE9
    278#define GDI_SPxDSxan 0x00DB0D75
    279#define GDI_SPDnao 0x00DC0B04
    280#define GDI_SDno 0x00DD0228
    281#define GDI_SDPxo 0x00DE0268
    282#define GDI_SDPano 0x00DF08C8
    283#define GDI_PDSoa 0x00E003A5
    284#define GDI_PDSoxn 0x00E10185
    285#define GDI_DSPDxax 0x00E20746
    286#define GDI_PSDPaoxn 0x00E306EA
    287#define GDI_SDPSxax 0x00E40748
    288#define GDI_PDSPaoxn 0x00E506E5
    289#define GDI_SDPSanax 0x00E61CE8
    290#define GDI_SPxPDxan 0x00E70D79
    291#define GDI_SSPxDSxax 0x00E81D74
    292#define GDI_DSPDSanaxxn 0x00E95CE6
    293#define GDI_DPSao 0x00EA02E9
    294#define GDI_DPSxno 0x00EB0849
    295#define GDI_SDPao 0x00EC02E8
    296#define GDI_SDPxno 0x00ED0848
    297#define GDI_SRCPAINT 0x00EE0086
    298#define GDI_SDPnoo 0x00EF0A08
    299#define GDI_PATCOPY 0x00F00021
    300#define GDI_PDSono 0x00F10885
    301#define GDI_PDSnao 0x00F20B05
    302#define GDI_PSno 0x00F3022A
    303#define GDI_PSDnao 0x00F40B0A
    304#define GDI_PDno 0x00F50225
    305#define GDI_PDSxo 0x00F60265
    306#define GDI_PDSano 0x00F708C5
    307#define GDI_PDSao 0x00F802E5
    308#define GDI_PDSxno 0x00F90845
    309#define GDI_DPo 0x00FA0089
    310#define GDI_PATPAINT 0x00FB0A09
    311#define GDI_PSo 0x00FC008A
    312#define GDI_PSDnoo 0x00FD0A0A
    313#define GDI_DPSoo 0x00FE02A9
    314#define GDI_WHITENESS 0x00FF0062
    315#define GDI_GLYPH_ORDER 0xFFFFFFFF
    316
    317/* Brush Styles */
    318#define GDI_BS_SOLID 0x00
    319#define GDI_BS_NULL 0x01
    320#define GDI_BS_HATCHED 0x02
    321#define GDI_BS_PATTERN 0x03
    322
    323/* Hatch Patterns */
    324#define GDI_HS_HORIZONTAL 0x00
    325#define GDI_HS_VERTICAL 0x01
    326#define GDI_HS_FDIAGONAL 0x02
    327#define GDI_HS_BDIAGONAL 0x03
    328#define GDI_HS_CROSS 0x04
    329#define GDI_HS_DIAGCROSS 0x05
    330
    331/* Pen Styles */
    332#define GDI_PS_SOLID 0x00
    333#define GDI_PS_DASH 0x01
    334#define GDI_PS_NULL 0x05
    335
    336/* Background Modes */
    337#define GDI_OPAQUE 0x00000001
    338#define GDI_TRANSPARENT 0x00000002
    339
    340/* Fill Modes */
    341#define GDI_FILL_ALTERNATE 0x01
    342#define GDI_FILL_WINDING 0x02
    343
    344/* GDI Object Types */
    345#define GDIOBJECT_BITMAP 0x00
    346#define GDIOBJECT_PEN 0x01
    347#define GDIOBJECT_PALETTE 0x02
    348#define GDIOBJECT_BRUSH 0x03
    349#define GDIOBJECT_RECT 0x04
    350#define GDIOBJECT_REGION 0x05
    351
    352/* Region return values */
    353#ifndef NULLREGION
    354#define NULLREGION 0x01
    355#define SIMPLEREGION 0x02
    356#define COMPLEXREGION 0x03
    357#endif
    358
    359struct _GDIOBJECT
    360{
    361	BYTE objectType;
    362};
    363typedef struct _GDIOBJECT GDIOBJECT;
    364typedef GDIOBJECT* HGDIOBJECT;
    365
    366struct _GDI_RECT
    367{
    368	BYTE objectType;
    369	INT32 left;
    370	INT32 top;
    371	INT32 right;
    372	INT32 bottom;
    373};
    374typedef struct _GDI_RECT GDI_RECT;
    375typedef GDI_RECT* HGDI_RECT;
    376
    377struct _GDI_RGN
    378{
    379	BYTE objectType;
    380	INT32 x;   /* left */
    381	INT32 y;   /* top */
    382	INT32 w;   /* width */
    383	INT32 h;   /* height */
    384	BOOL null; /* null region */
    385};
    386typedef struct _GDI_RGN GDI_RGN;
    387typedef GDI_RGN* HGDI_RGN;
    388
    389struct _GDI_BITMAP
    390{
    391	BYTE objectType;
    392	UINT32 format;
    393	INT32 width;
    394	INT32 height;
    395	UINT32 scanline;
    396	BYTE* data;
    397	void (*free)(void*);
    398};
    399typedef struct _GDI_BITMAP GDI_BITMAP;
    400typedef GDI_BITMAP* HGDI_BITMAP;
    401
    402struct _GDI_PEN
    403{
    404	BYTE objectType;
    405	UINT32 style;
    406	INT32 width;
    407	INT32 posX;
    408	INT32 posY;
    409	UINT32 color;
    410	UINT32 format;
    411	const gdiPalette* palette;
    412};
    413typedef struct _GDI_PEN GDI_PEN;
    414typedef GDI_PEN* HGDI_PEN;
    415
    416struct _GDI_PALETTEENTRY
    417{
    418	BYTE red;
    419	BYTE green;
    420	BYTE blue;
    421};
    422typedef struct _GDI_PALETTEENTRY GDI_PALETTEENTRY;
    423
    424struct _GDI_PALETTE
    425{
    426	UINT16 count;
    427	GDI_PALETTEENTRY* entries;
    428};
    429typedef struct _GDI_PALETTE GDI_PALETTE;
    430typedef GDI_PALETTE* HGDI_PALETTE;
    431
    432struct _GDI_POINT
    433{
    434	INT32 x;
    435	INT32 y;
    436};
    437typedef struct _GDI_POINT GDI_POINT;
    438typedef GDI_POINT* HGDI_POINT;
    439
    440struct _GDI_BRUSH
    441{
    442	BYTE objectType;
    443	int style;
    444	HGDI_BITMAP pattern;
    445	UINT32 color;
    446	INT32 nXOrg;
    447	INT32 nYOrg;
    448};
    449typedef struct _GDI_BRUSH GDI_BRUSH;
    450typedef GDI_BRUSH* HGDI_BRUSH;
    451
    452struct _GDI_WND
    453{
    454	UINT32 count;
    455	INT32 ninvalid;
    456	HGDI_RGN invalid;
    457	HGDI_RGN cinvalid;
    458};
    459typedef struct _GDI_WND GDI_WND;
    460typedef GDI_WND* HGDI_WND;
    461
    462struct _GDI_DC
    463{
    464	HGDIOBJECT selectedObject;
    465	UINT32 format;
    466	UINT32 bkColor;
    467	UINT32 textColor;
    468	HGDI_BRUSH brush;
    469	HGDI_RGN clip;
    470	HGDI_PEN pen;
    471	HGDI_WND hwnd;
    472	INT32 drawMode;
    473	INT32 bkMode;
    474};
    475typedef struct _GDI_DC GDI_DC;
    476typedef GDI_DC* HGDI_DC;
    477
    478struct gdi_bitmap
    479{
    480	rdpBitmap _p;
    481
    482	HGDI_DC hdc;
    483	HGDI_BITMAP bitmap;
    484	HGDI_BITMAP org_bitmap;
    485};
    486typedef struct gdi_bitmap gdiBitmap;
    487
    488struct gdi_glyph
    489{
    490	rdpBitmap _p;
    491
    492	HGDI_DC hdc;
    493	HGDI_BITMAP bitmap;
    494	HGDI_BITMAP org_bitmap;
    495};
    496typedef struct gdi_glyph gdiGlyph;
    497
    498struct rdp_gdi
    499{
    500	rdpContext* context;
    501
    502	INT32 width;
    503	INT32 height;
    504	UINT32 stride;
    505	UINT32 dstFormat;
    506	UINT32 cursor_x;
    507	UINT32 cursor_y;
    508
    509	HGDI_DC hdc;
    510	gdiBitmap* primary;
    511	gdiBitmap* drawing;
    512	UINT32 bitmap_size;
    513	UINT32 bitmap_stride;
    514	BYTE* primary_buffer;
    515	gdiPalette palette;
    516	gdiBitmap* image;
    517	void (*free)(void*);
    518
    519	BOOL inGfxFrame;
    520#if !defined(DEFINE_NO_DEPRECATED)
    521	WINPR_DEPRECATED(BOOL graphicsReset); /* deprecated, remove with FreeRDP v3 */
    522#endif
    523	BOOL suppressOutput;
    524	UINT16 outputSurfaceId;
    525	RdpgfxClientContext* gfx;
    526	VideoClientContext* video;
    527	GeometryClientContext* geometry;
    528
    529	wLog* log;
    530	UINT32 frameId;
    531};
    532
    533#ifdef __cplusplus
    534extern "C"
    535{
    536#endif
    537
    538	FREERDP_API DWORD gdi_rop3_code(BYTE code);
    539	FREERDP_API const char* gdi_rop3_code_string(BYTE code);
    540	FREERDP_API const char* gdi_rop3_string(DWORD rop);
    541
    542	FREERDP_API UINT32 gdi_get_pixel_format(UINT32 bitsPerPixel);
    543	FREERDP_API BOOL gdi_decode_color(rdpGdi* gdi, const UINT32 srcColor, UINT32* color,
    544	                                  UINT32* format);
    545	FREERDP_API BOOL gdi_resize(rdpGdi* gdi, UINT32 width, UINT32 height);
    546	FREERDP_API BOOL gdi_resize_ex(rdpGdi* gdi, UINT32 width, UINT32 height, UINT32 stride,
    547	                               UINT32 format, BYTE* buffer, void (*pfree)(void*));
    548	FREERDP_API BOOL gdi_init(freerdp* instance, UINT32 format);
    549	FREERDP_API BOOL gdi_init_ex(freerdp* instance, UINT32 format, UINT32 stride, BYTE* buffer,
    550	                             void (*pfree)(void*));
    551	FREERDP_API void gdi_free(freerdp* instance);
    552
    553	FREERDP_API BOOL gdi_send_suppress_output(rdpGdi* gdi, BOOL suppress);
    554
    555#ifdef __cplusplus
    556}
    557#endif
    558
    559#endif /* FREERDP_GDI_H */