25#include <winpr/wlog.h> 
   27#include <freerdp/api.h> 
   28#include <freerdp/types.h> 
   30#include <freerdp/log.h> 
   31#include <freerdp/codec/color.h> 
   32#include <freerdp/codec/region.h> 
   34#include <freerdp/client/rdpgfx.h> 
   35#include <freerdp/client/geometry.h> 
   36#include <freerdp/client/video.h> 
   41#define GDI_R2_BLACK 0x01        
   42#define GDI_R2_NOTMERGEPEN 0x02  
   43#define GDI_R2_MASKNOTPEN 0x03   
   44#define GDI_R2_NOTCOPYPEN 0x04   
   45#define GDI_R2_MASKPENNOT 0x05   
   46#define GDI_R2_NOT 0x06          
   47#define GDI_R2_XORPEN 0x07       
   48#define GDI_R2_NOTMASKPEN 0x08   
   49#define GDI_R2_MASKPEN 0x09      
   50#define GDI_R2_NOTXORPEN 0x0A    
   51#define GDI_R2_NOP 0x0B          
   52#define GDI_R2_MERGENOTPEN 0x0C  
   53#define GDI_R2_COPYPEN 0x0D      
   54#define GDI_R2_MERGEPENNOT 0x0E  
   55#define GDI_R2_MERGEPEN 0x0F     
   56#define GDI_R2_WHITE 0x10        
   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 
  318#define GDI_BS_SOLID 0x00 
  319#define GDI_BS_NULL 0x01 
  320#define GDI_BS_HATCHED 0x02 
  321#define GDI_BS_PATTERN 0x03 
  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 
  332#define GDI_PS_SOLID 0x00 
  333#define GDI_PS_DASH 0x01 
  334#define GDI_PS_NULL 0x05 
  337#define GDI_OPAQUE 0x00000001 
  338#define GDI_TRANSPARENT 0x00000002 
  341#define GDI_FILL_ALTERNATE 0x01 
  342#define GDI_FILL_WINDING 0x02 
  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 
  354#define NULLREGION 0x01 
  355#define SIMPLEREGION 0x02 
  356#define COMPLEXREGION 0x03 
  412    const gdiPalette* palette;
 
 
  507    UINT32 bitmap_stride;
 
  508    BYTE* primary_buffer;
 
  516    UINT16 outputSurfaceId;
 
  518    RdpgfxClientContext* gfx;
 
  519    VideoClientContext* video;
 
  520    GeometryClientContext* geometry;
 
 
  526  FREERDP_API DWORD gdi_rop3_code(BYTE code);
 
  527  FREERDP_API 
const char* gdi_rop3_code_string(BYTE code);
 
  528  FREERDP_API 
const char* gdi_rop3_string(DWORD rop);
 
  530  FREERDP_API UINT32 gdi_get_pixel_format(UINT32 bitsPerPixel);
 
  531  FREERDP_API BOOL gdi_decode_color(rdpGdi* gdi, UINT32 srcColor, UINT32* color, UINT32* format);
 
  532  FREERDP_API BOOL gdi_resize(rdpGdi* gdi, UINT32 width, UINT32 height);
 
  533  FREERDP_API BOOL gdi_resize_ex(rdpGdi* gdi, UINT32 width, UINT32 height, UINT32 stride,
 
  534                                 UINT32 format, BYTE* buffer, 
void (*pfree)(
void*));
 
  535  FREERDP_API BOOL gdi_init(freerdp* instance, UINT32 format);
 
  536  FREERDP_API BOOL gdi_init_ex(freerdp* instance, UINT32 format, UINT32 stride, BYTE* buffer,
 
  537                               void (*pfree)(
void*));
 
  538  FREERDP_API 
void gdi_free(freerdp* instance);
 
  540  FREERDP_API BOOL gdi_send_suppress_output(rdpGdi* gdi, BOOL suppress);