// Licensed under the Apache License, Version 2.0 // or the MIT license // , at your option. // All files in the project carrying such notice may not be copied, modified, or distributed // except according to those terms. //! GDI procedure declarations, constant definitions and macros use ctypes::{c_char, c_int, c_long, c_short, c_ushort, c_void}; use shared::basetsd::{UINT16, UINT32, UINT64, ULONG_PTR}; use shared::minwindef::{ BOOL, BYTE, DWORD, FLOAT, HGLOBAL, HMETAFILE, HMODULE, HRGN, INT, LOBYTE, LPARAM, LPBYTE, LPDWORD, LPINT, LPVOID, LPWORD, MAX_PATH, PFLOAT, PROC, UINT, ULONG, USHORT, WORD, }; use shared::windef::{ COLORREF, HBITMAP, HBRUSH, HCOLORSPACE, HDC, HENHMETAFILE, HFONT, HGDIOBJ, HGLRC, HPALETTE, HPEN, HWND, LPPOINT, LPRECT, LPSIZE, POINT, POINTL, POINTS, RECT, RECTL, SIZEL, }; use um::winnt::{ CHAR, HANDLE, LONG, LPCSTR, LPCWSTR, LPSTR, LPWSTR, LUID, PSTR, PVOID, SHORT, VOID, WCHAR, }; pub const R2_BLACK: c_int = 1; pub const R2_NOTMERGEPEN: c_int = 2; pub const R2_MASKNOTPEN: c_int = 3; pub const R2_NOTCOPYPEN: c_int = 4; pub const R2_MASKPENNOT: c_int = 5; pub const R2_NOT: c_int = 6; pub const R2_XORPEN: c_int = 7; pub const R2_NOTMASKPEN: c_int = 8; pub const R2_MASKPEN: c_int = 9; pub const R2_NOTXORPEN: c_int = 10; pub const R2_NOP: c_int = 11; pub const R2_MERGENOTPEN: c_int = 12; pub const R2_COPYPEN: c_int = 13; pub const R2_MERGEPENNOT: c_int = 14; pub const R2_MERGEPEN: c_int = 15; pub const R2_WHITE: c_int = 16; pub const R2_LAST: c_int = 16; pub const SRCCOPY: DWORD = 0x00CC0020; pub const SRCPAINT: DWORD = 0x00EE0086; pub const SRCAND: DWORD = 0x008800C6; pub const SRCINVERT: DWORD = 0x00660046; pub const SRCERASE: DWORD = 0x00440328; pub const NOTSRCCOPY: DWORD = 0x00330008; pub const NOTSRCERASE: DWORD = 0x001100A6; pub const MERGECOPY: DWORD = 0x00C000CA; pub const MERGEPAINT: DWORD = 0x00BB0226; pub const PATCOPY: DWORD = 0x00F00021; pub const PATPAINT: DWORD = 0x00FB0A09; pub const PATINVERT: DWORD = 0x005A0049; pub const DSTINVERT: DWORD = 0x00550009; pub const BLACKNESS: DWORD = 0x00000042; pub const WHITENESS: DWORD = 0x00FF0062; pub const NOMIRRORBITMAP: DWORD = 0x80000000; pub const CAPTUREBLT: DWORD = 0x40000000; #[inline] pub fn MAKEROP4(fore: DWORD, back: DWORD) -> DWORD { ((back << 8) & 0xFF000000) | fore } pub const GDI_ERROR: ULONG = 0xFFFFFFFF; pub const HGDI_ERROR: HANDLE = -1isize as HANDLE; pub const ERROR: c_int = 0; pub const NULLREGION: c_int = 1; pub const SIMPLEREGION: c_int = 2; pub const COMPLEXREGION: c_int = 3; pub const RGN_ERROR: c_int = ERROR; pub const RGN_AND: c_int = 1; pub const RGN_OR: c_int = 2; pub const RGN_XOR: c_int = 3; pub const RGN_DIFF: c_int = 4; pub const RGN_COPY: c_int = 5; pub const RGN_MIN: c_int = RGN_AND; pub const RGN_MAX: c_int = RGN_COPY; pub const BLACKONWHITE: c_int = 1; pub const WHITEONBLACK: c_int = 2; pub const COLORONCOLOR: c_int = 3; pub const HALFTONE: c_int = 4; pub const MAXSTRETCHBLTMODE: c_int = 4; pub const STRETCH_ANDSCANS: c_int = BLACKONWHITE; pub const STRETCH_ORSCANS: c_int = WHITEONBLACK; pub const STRETCH_DELETESCANS: c_int = COLORONCOLOR; pub const STRETCH_HALFTONE: c_int = HALFTONE; pub const ALTERNATE: c_int = 1; pub const WINDING: c_int = 2; pub const POLYFILL_LAST: c_int = 2; pub const LAYOUT_RTL: DWORD = 0x00000001; pub const LAYOUT_BTT: DWORD = 0x00000002; pub const LAYOUT_VBH: DWORD = 0x00000004; pub const LAYOUT_ORIENTATIONMASK: DWORD = LAYOUT_RTL | LAYOUT_BTT | LAYOUT_VBH; pub const LAYOUT_BITMAPORIENTATIONPRESERVED: DWORD = 0x00000008; pub const TA_NOUPDATECP: UINT = 0; pub const TA_UPDATECP: UINT = 1; pub const TA_LEFT: UINT = 0; pub const TA_RIGHT: UINT = 2; pub const TA_CENTER: UINT = 6; pub const TA_TOP: UINT = 0; pub const TA_BOTTOM: UINT = 8; pub const TA_BASELINE: UINT = 24; pub const TA_RTLREADING: UINT = 256; pub const TA_MASK: UINT = TA_BASELINE + TA_CENTER + TA_UPDATECP + TA_RTLREADING; pub const VTA_BASELINE: UINT = TA_BASELINE; pub const VTA_LEFT: UINT = TA_BOTTOM; pub const VTA_RIGHT: UINT = TA_TOP; pub const VTA_CENTER: UINT = TA_CENTER; pub const VTA_BOTTOM: UINT = TA_RIGHT; pub const VTA_TOP: UINT = TA_LEFT; pub const ETO_OPAQUE: UINT = 0x0002; pub const ETO_CLIPPED: UINT = 0x0004; pub const ETO_GLYPH_INDEX: UINT = 0x0010; pub const ETO_RTLREADING: UINT = 0x0080; pub const ETO_NUMERICSLOCAL: UINT = 0x0400; pub const ETO_NUMERICSLATIN: UINT = 0x0800; pub const ETO_IGNORELANGUAGE: UINT = 0x1000; pub const ETO_PDY: UINT = 0x2000; pub const ETO_REVERSE_INDEX_MAP: UINT = 0x10000; pub const ASPECT_FILTERING: UINT = 0x0001; pub const DCB_RESET: UINT = 0x0001; pub const DCB_ACCUMULATE: UINT = 0x0002; pub const DCB_DIRTY: UINT = DCB_ACCUMULATE; pub const DCB_SET: UINT = DCB_RESET | DCB_ACCUMULATE; pub const DCB_ENABLE: UINT = 0x0004; pub const DCB_DISABLE: UINT = 0x0008; pub const META_SETBKCOLOR: WORD = 0x0201; pub const META_SETBKMODE: WORD = 0x0102; pub const META_SETMAPMODE: WORD = 0x0103; pub const META_SETROP2: WORD = 0x0104; pub const META_SETRELABS: WORD = 0x0105; pub const META_SETPOLYFILLMODE: WORD = 0x0106; pub const META_SETSTRETCHBLTMODE: WORD = 0x0107; pub const META_SETTEXTCHAREXTRA: WORD = 0x0108; pub const META_SETTEXTCOLOR: WORD = 0x0209; pub const META_SETTEXTJUSTIFICATION: WORD = 0x020A; pub const META_SETWINDOWORG: WORD = 0x020B; pub const META_SETWINDOWEXT: WORD = 0x020C; pub const META_SETVIEWPORTORG: WORD = 0x020D; pub const META_SETVIEWPORTEXT: WORD = 0x020E; pub const META_OFFSETWINDOWORG: WORD = 0x020F; pub const META_SCALEWINDOWEXT: WORD = 0x0410; pub const META_OFFSETVIEWPORTORG: WORD = 0x0211; pub const META_SCALEVIEWPORTEXT: WORD = 0x0412; pub const META_LINETO: WORD = 0x0213; pub const META_MOVETO: WORD = 0x0214; pub const META_EXCLUDECLIPRECT: WORD = 0x0415; pub const META_INTERSECTCLIPRECT: WORD = 0x0416; pub const META_ARC: WORD = 0x0817; pub const META_ELLIPSE: WORD = 0x0418; pub const META_FLOODFILL: WORD = 0x0419; pub const META_PIE: WORD = 0x081A; pub const META_RECTANGLE: WORD = 0x041B; pub const META_ROUNDRECT: WORD = 0x061C; pub const META_PATBLT: WORD = 0x061D; pub const META_SAVEDC: WORD = 0x001E; pub const META_SETPIXEL: WORD = 0x041F; pub const META_OFFSETCLIPRGN: WORD = 0x0220; pub const META_TEXTOUT: WORD = 0x0521; pub const META_BITBLT: WORD = 0x0922; pub const META_STRETCHBLT: WORD = 0x0B23; pub const META_POLYGON: WORD = 0x0324; pub const META_POLYLINE: WORD = 0x0325; pub const META_ESCAPE: WORD = 0x0626; pub const META_RESTOREDC: WORD = 0x0127; pub const META_FILLREGION: WORD = 0x0228; pub const META_FRAMEREGION: WORD = 0x0429; pub const META_INVERTREGION: WORD = 0x012A; pub const META_PAINTREGION: WORD = 0x012B; pub const META_SELECTCLIPREGION: WORD = 0x012C; pub const META_SELECTOBJECT: WORD = 0x012D; pub const META_SETTEXTALIGN: WORD = 0x012E; pub const META_CHORD: WORD = 0x0830; pub const META_SETMAPPERFLAGS: WORD = 0x0231; pub const META_EXTTEXTOUT: WORD = 0x0a32; pub const META_SETDIBTODEV: WORD = 0x0d33; pub const META_SELECTPALETTE: WORD = 0x0234; pub const META_REALIZEPALETTE: WORD = 0x0035; pub const META_ANIMATEPALETTE: WORD = 0x0436; pub const META_SETPALENTRIES: WORD = 0x0037; pub const META_POLYPOLYGON: WORD = 0x0538; pub const META_RESIZEPALETTE: WORD = 0x0139; pub const META_DIBBITBLT: WORD = 0x0940; pub const META_DIBSTRETCHBLT: WORD = 0x0b41; pub const META_DIBCREATEPATTERNBRUSH: WORD = 0x0142; pub const META_STRETCHDIB: WORD = 0x0f43; pub const META_EXTFLOODFILL: WORD = 0x0548; pub const META_SETLAYOUT: WORD = 0x0149; pub const META_DELETEOBJECT: WORD = 0x01f0; pub const META_CREATEPALETTE: WORD = 0x00f7; pub const META_CREATEPATTERNBRUSH: WORD = 0x01F9; pub const META_CREATEPENINDIRECT: WORD = 0x02FA; pub const META_CREATEFONTINDIRECT: WORD = 0x02FB; pub const META_CREATEBRUSHINDIRECT: WORD = 0x02FC; pub const META_CREATEREGION: WORD = 0x06FF; STRUCT!{struct DRAWPATRECT { ptPosition: POINT, ptSize: POINT, wStyle: WORD, wPattern: WORD, }} pub type PDRAWPATRECT = *mut DRAWPATRECT; pub const NEWFRAME: c_int = 1; pub const ABORTDOC: c_int = 2; pub const NEXTBAND: c_int = 3; pub const SETCOLORTABLE: c_int = 4; pub const GETCOLORTABLE: c_int = 5; pub const FLUSHOUTPUT: c_int = 6; pub const DRAFTMODE: c_int = 7; pub const QUERYESCSUPPORT: c_int = 8; pub const SETABORTPROC: c_int = 9; pub const STARTDOC: c_int = 10; pub const ENDDOC: c_int = 11; pub const GETPHYSPAGESIZE: c_int = 12; pub const GETPRINTINGOFFSET: c_int = 13; pub const GETSCALINGFACTOR: c_int = 14; pub const MFCOMMENT: c_int = 15; pub const GETPENWIDTH: c_int = 16; pub const SETCOPYCOUNT: c_int = 17; pub const SELECTPAPERSOURCE: c_int = 18; pub const DEVICEDATA: c_int = 19; pub const PASSTHROUGH: c_int = 19; pub const GETTECHNOLGY: c_int = 20; pub const GETTECHNOLOGY: c_int = 20; pub const SETLINECAP: c_int = 21; pub const SETLINEJOIN: c_int = 22; pub const SETMITERLIMIT: c_int = 23; pub const BANDINFO: c_int = 24; pub const DRAWPATTERNRECT: c_int = 25; pub const GETVECTORPENSIZE: c_int = 26; pub const GETVECTORBRUSHSIZE: c_int = 27; pub const ENABLEDUPLEX: c_int = 28; pub const GETSETPAPERBINS: c_int = 29; pub const GETSETPRINTORIENT: c_int = 30; pub const ENUMPAPERBINS: c_int = 31; pub const SETDIBSCALING: c_int = 32; pub const EPSPRINTING: c_int = 33; pub const ENUMPAPERMETRICS: c_int = 34; pub const GETSETPAPERMETRICS: c_int = 35; pub const POSTSCRIPT_DATA: c_int = 37; pub const POSTSCRIPT_IGNORE: c_int = 38; pub const MOUSETRAILS: c_int = 39; pub const GETDEVICEUNITS: c_int = 42; pub const GETEXTENDEDTEXTMETRICS: c_int = 256; pub const GETEXTENTTABLE: c_int = 257; pub const GETPAIRKERNTABLE: c_int = 258; pub const GETTRACKKERNTABLE: c_int = 259; pub const EXTTEXTOUT: c_int = 512; pub const GETFACENAME: c_int = 513; pub const DOWNLOADFACE: c_int = 514; pub const ENABLERELATIVEWIDTHS: c_int = 768; pub const ENABLEPAIRKERNING: c_int = 769; pub const SETKERNTRACK: c_int = 770; pub const SETALLJUSTVALUES: c_int = 771; pub const SETCHARSET: c_int = 772; pub const STRETCHBLT: c_int = 2048; pub const METAFILE_DRIVER: c_int = 2049; pub const GETSETSCREENPARAMS: c_int = 3072; pub const QUERYDIBSUPPORT: c_int = 3073; pub const BEGIN_PATH: c_int = 4096; pub const CLIP_TO_PATH: c_int = 4097; pub const END_PATH: c_int = 4098; pub const EXT_DEVICE_CAPS: c_int = 4099; pub const RESTORE_CTM: c_int = 4100; pub const SAVE_CTM: c_int = 4101; pub const SET_ARC_DIRECTION: c_int = 4102; pub const SET_BACKGROUND_COLOR: c_int = 4103; pub const SET_POLY_MODE: c_int = 4104; pub const SET_SCREEN_ANGLE: c_int = 4105; pub const SET_SPREAD: c_int = 4106; pub const TRANSFORM_CTM: c_int = 4107; pub const SET_CLIP_BOX: c_int = 4108; pub const SET_BOUNDS: c_int = 4109; pub const SET_MIRROR_MODE: c_int = 4110; pub const OPENCHANNEL: c_int = 4110; pub const DOWNLOADHEADER: c_int = 4111; pub const CLOSECHANNEL: c_int = 4112; pub const POSTSCRIPT_PASSTHROUGH: c_int = 4115; pub const ENCAPSULATED_POSTSCRIPT: c_int = 4116; pub const POSTSCRIPT_IDENTIFY: c_int = 4117; pub const POSTSCRIPT_INJECTION: c_int = 4118; pub const CHECKJPEGFORMAT: c_int = 4119; pub const CHECKPNGFORMAT: c_int = 4120; pub const GET_PS_FEATURESETTING: c_int = 4121; pub const GDIPLUS_TS_QUERYVER: c_int = 4122; pub const GDIPLUS_TS_RECORD: c_int = 4123; pub const MILCORE_TS_QUERYVER_RESULT_FALSE: c_int = 0x0; pub const MILCORE_TS_QUERYVER_RESULT_TRUE: c_int = 0x7FFFFFFF; pub const SPCLPASSTHROUGH2: c_int = 4568; pub const PSIDENT_GDICENTRIC: c_int = 0; pub const PSIDENT_PSCENTRIC: c_int = 1; STRUCT!{struct PSINJECTDATA { DataBytes: DWORD, InjectionPoint: WORD, PageNumber: WORD, }} pub type PPSINJECTDATA = *mut PSINJECTDATA; pub const PSINJECT_BEGINSTREAM: WORD = 1; pub const PSINJECT_PSADOBE: WORD = 2; pub const PSINJECT_PAGESATEND: WORD = 3; pub const PSINJECT_PAGES: WORD = 4; pub const PSINJECT_DOCNEEDEDRES: WORD = 5; pub const PSINJECT_DOCSUPPLIEDRES: WORD = 6; pub const PSINJECT_PAGEORDER: WORD = 7; pub const PSINJECT_ORIENTATION: WORD = 8; pub const PSINJECT_BOUNDINGBOX: WORD = 9; pub const PSINJECT_DOCUMENTPROCESSCOLORS: WORD = 10; pub const PSINJECT_COMMENTS: WORD = 11; pub const PSINJECT_BEGINDEFAULTS: WORD = 12; pub const PSINJECT_ENDDEFAULTS: WORD = 13; pub const PSINJECT_BEGINPROLOG: WORD = 14; pub const PSINJECT_ENDPROLOG: WORD = 15; pub const PSINJECT_BEGINSETUP: WORD = 16; pub const PSINJECT_ENDSETUP: WORD = 17; pub const PSINJECT_TRAILER: WORD = 18; pub const PSINJECT_EOF: WORD = 19; pub const PSINJECT_ENDSTREAM: WORD = 20; pub const PSINJECT_DOCUMENTPROCESSCOLORSATEND: WORD = 21; pub const PSINJECT_PAGENUMBER: WORD = 100; pub const PSINJECT_BEGINPAGESETUP: WORD = 101; pub const PSINJECT_ENDPAGESETUP: WORD = 102; pub const PSINJECT_PAGETRAILER: WORD = 103; pub const PSINJECT_PLATECOLOR: WORD = 104; pub const PSINJECT_SHOWPAGE: WORD = 105; pub const PSINJECT_PAGEBBOX: WORD = 106; pub const PSINJECT_ENDPAGECOMMENTS: WORD = 107; pub const PSINJECT_VMSAVE: WORD = 200; pub const PSINJECT_VMRESTORE: WORD = 201; pub const PSINJECT_DLFONT: DWORD = 0xdddddddd; pub const FEATURESETTING_NUP: WORD = 0; pub const FEATURESETTING_OUTPUT: WORD = 1; pub const FEATURESETTING_PSLEVEL: WORD = 2; pub const FEATURESETTING_CUSTPAPER: WORD = 3; pub const FEATURESETTING_MIRROR: WORD = 4; pub const FEATURESETTING_NEGATIVE: WORD = 5; pub const FEATURESETTING_PROTOCOL: WORD = 6; pub const FEATURESETTING_PRIVATE_BEGIN: WORD = 0x1000; pub const FEATURESETTING_PRIVATE_END: WORD = 0x1FFF; STRUCT!{struct PSFEATURE_OUTPUT { bPageIndependent: BOOL, bSetPageDevice: BOOL, }} pub type PPSFEATURE_OUTPUT = *mut PSFEATURE_OUTPUT; STRUCT!{struct PSFEATURE_CUSTPAPER { lOrientation: LONG, lWidth: LONG, lHeight: LONG, lWidthOffset: LONG, lHeightOffset: LONG, }} pub type PPSFEATURE_CUSTPAPER = *mut PSFEATURE_CUSTPAPER; pub const PSPROTOCOL_ASCII: c_int = 0; pub const PSPROTOCOL_BCP: c_int = 1; pub const PSPROTOCOL_TBCP: c_int = 2; pub const PSPROTOCOL_BINARY: c_int = 3; pub const QDI_SETDIBITS: c_int = 1; pub const QDI_GETDIBITS: c_int = 2; pub const QDI_DIBTOSCREEN: c_int = 4; pub const QDI_STRETCHDIB: c_int = 8; pub const SP_NOTREPORTED: c_int = 0x4000; pub const SP_ERROR: c_int = -1; pub const SP_APPABORT: c_int = -2; pub const SP_USERABORT: c_int = -3; pub const SP_OUTOFDISK: c_int = -4; pub const SP_OUTOFMEMORY: c_int = -5; pub const PR_JOBSTATUS: c_int = 0x0000; pub const OBJ_PEN: UINT = 1; pub const OBJ_BRUSH: UINT = 2; pub const OBJ_DC: UINT = 3; pub const OBJ_METADC: UINT = 4; pub const OBJ_PAL: UINT = 5; pub const OBJ_FONT: UINT = 6; pub const OBJ_BITMAP: UINT = 7; pub const OBJ_REGION: UINT = 8; pub const OBJ_METAFILE: UINT = 9; pub const OBJ_MEMDC: UINT = 10; pub const OBJ_EXTPEN: UINT = 11; pub const OBJ_ENHMETADC: UINT = 12; pub const OBJ_ENHMETAFILE: UINT = 13; pub const OBJ_COLORSPACE: UINT = 14; pub const GDI_OBJ_LAST: UINT = OBJ_COLORSPACE; pub const MWT_IDENTITY: c_int = 1; pub const MWT_LEFTMULTIPLY: c_int = 2; pub const MWT_RIGHTMULTIPLY: c_int = 3; pub const MWT_MIN: c_int = MWT_IDENTITY; pub const MWT_MAX: c_int = MWT_RIGHTMULTIPLY; STRUCT!{struct XFORM { eM11: FLOAT, eM12: FLOAT, eM21: FLOAT, eM22: FLOAT, eDx: FLOAT, eDy: FLOAT, }} pub type PXFORM = *mut XFORM; pub type LPXFORM = *mut XFORM; STRUCT!{struct BITMAP { bmType: LONG, bmWidth: LONG, bmHeight: LONG, bmWidthBytes: LONG, bmPlanes: WORD, bmBitsPixel: WORD, bmBits: LPVOID, }} pub type PBITMAP = *mut BITMAP; pub type NPBITMAP = *mut BITMAP; pub type LPBITMAP = *mut BITMAP; STRUCT!{#[debug] struct RGBTRIPLE { rgbtBlue: BYTE, rgbtGreen: BYTE, rgbtRed: BYTE, }} pub type PRGBTRIPLE = *mut RGBTRIPLE; pub type NPRGBTRIPLE = *mut RGBTRIPLE; pub type LPRGBTRIPLE = *mut RGBTRIPLE; STRUCT!{#[debug] struct RGBQUAD { rgbBlue: BYTE, rgbGreen: BYTE, rgbRed: BYTE, rgbReserved: BYTE, }} pub type LPRGBQUAD = *mut RGBQUAD; pub const CS_ENABLE: DWORD = 0x00000001; pub const CS_DISABLE: DWORD = 0x00000002; pub const CS_DELETE_TRANSFORM: DWORD = 0x00000003; pub const LCS_SIGNATURE: DWORD = 0x5053_4F43; // 'PSOC' pub const LCS_sRGB: LCSCSTYPE = 0x7352_4742; // 'sRGB' pub const LCS_WINDOWS_COLOR_SPACE: LCSCSTYPE = 0x5769_6E20; // 'Win ' pub type LCSCSTYPE = LONG; pub const LCS_CALIBRATED_RGB: LCSCSTYPE = 0x00000000; pub type LCSGAMUTMATCH = LONG; pub const LCS_GM_BUSINESS: LCSGAMUTMATCH = 0x00000001; pub const LCS_GM_GRAPHICS: LCSGAMUTMATCH = 0x00000002; pub const LCS_GM_IMAGES: LCSGAMUTMATCH = 0x00000004; pub const LCS_GM_ABS_COLORIMETRIC: LCSGAMUTMATCH = 0x00000008; pub const CM_OUT_OF_GAMUT: BYTE = 255; pub const CM_IN_GAMUT: BYTE = 0; pub const ICM_ADDPROFILE: UINT = 1; pub const ICM_DELETEPROFILE: UINT = 2; pub const ICM_QUERYPROFILE: UINT = 3; pub const ICM_SETDEFAULTPROFILE: UINT = 4; pub const ICM_REGISTERICMATCHER: UINT = 5; pub const ICM_UNREGISTERICMATCHER: UINT = 6; pub const ICM_QUERYMATCH: UINT = 7; #[inline] pub fn GetKValue(cmyk: COLORREF) -> BYTE { cmyk as BYTE } #[inline] pub fn GetYValue(cmyk: COLORREF) -> BYTE { (cmyk >> 8) as BYTE } #[inline] pub fn GetMValue(cmyk: COLORREF) -> BYTE { (cmyk >> 16) as BYTE } #[inline] pub fn GetCValue(cmyk: COLORREF) -> BYTE { (cmyk >> 24) as BYTE } #[inline] pub fn CMYK(c: BYTE, m: BYTE, y: BYTE, k: BYTE) -> COLORREF { (k as COLORREF) | ((y as COLORREF) << 8) | ((m as COLORREF) << 16) | ((c as COLORREF) << 24) } pub type FXPT16DOT16 = c_long; pub type LPFXPT16DOT16 = *mut c_long; pub type FXPT2DOT30 = c_long; pub type LPFXPT2DOT30 = *mut c_long; STRUCT!{#[debug] struct CIEXYZ { ciexyzX: FXPT2DOT30, ciexyzY: FXPT2DOT30, ciexyzZ: FXPT2DOT30, }} pub type LPCIEXYZ = *mut CIEXYZ; STRUCT!{#[debug] struct CIEXYZTRIPLE { ciexyzRed: CIEXYZ, ciexyzGreen: CIEXYZ, ciexyzBlue: CIEXYZ, }} pub type LPCIEXYZTRIPLE = *mut CIEXYZTRIPLE; STRUCT!{struct LOGCOLORSPACEA { lcsSignature: DWORD, lcsVersion: DWORD, lcsSize: DWORD, lcsCSType: LCSCSTYPE, lcsIntent: LCSGAMUTMATCH, lcsEndpoints: CIEXYZTRIPLE, lcsGammaRed: DWORD, lcsGammaGreen: DWORD, lcsGammaBlue: DWORD, lcsFilename: [CHAR; MAX_PATH], }} pub type LPLOGCOLORSPACEA = *mut LOGCOLORSPACEA; STRUCT!{struct LOGCOLORSPACEW { lcsSignature: DWORD, lcsVersion: DWORD, lcsSize: DWORD, lcsCSType: LCSCSTYPE, lcsIntent: LCSGAMUTMATCH, lcsEndpoints: CIEXYZTRIPLE, lcsGammaRed: DWORD, lcsGammaGreen: DWORD, lcsGammaBlue: DWORD, lcsFilename: [WCHAR; MAX_PATH], }} pub type LPLOGCOLORSPACEW = *mut LOGCOLORSPACEW; STRUCT!{#[debug] struct BITMAPCOREHEADER { bcSize: DWORD, bcWidth: WORD, bcHeight: WORD, bcPlanes: WORD, bcBitCount: WORD, }} pub type LPBITMAPCOREHEADER = *mut BITMAPCOREHEADER; pub type PBITMAPCOREHEADER = *mut BITMAPCOREHEADER; STRUCT!{#[debug] struct BITMAPINFOHEADER { biSize: DWORD, biWidth: LONG, biHeight: LONG, biPlanes: WORD, biBitCount: WORD, biCompression: DWORD, biSizeImage: DWORD, biXPelsPerMeter: LONG, biYPelsPerMeter: LONG, biClrUsed: DWORD, biClrImportant: DWORD, }} pub type LPBITMAPINFOHEADER = *mut BITMAPINFOHEADER; pub type PBITMAPINFOHEADER = *mut BITMAPINFOHEADER; STRUCT!{#[debug] struct BITMAPV4HEADER { bV4Size: DWORD, bV4Width: LONG, bV4Height: LONG, bV4Planes: WORD, bV4BitCount: WORD, bV4V4Compression: DWORD, bV4SizeImage: DWORD, bV4XPelsPerMeter: LONG, bV4YPelsPerMeter: LONG, bV4ClrUsed: DWORD, bV4ClrImportant: DWORD, bV4RedMask: DWORD, bV4GreenMask: DWORD, bV4BlueMask: DWORD, bV4AlphaMask: DWORD, bV4CSType: DWORD, bV4Endpoints: CIEXYZTRIPLE, bV4GammaRed: DWORD, bV4GammaGreen: DWORD, bV4GammaBlue: DWORD, }} pub type LPBITMAPV4HEADER = *mut BITMAPV4HEADER; pub type PBITMAPV4HEADER = *mut BITMAPV4HEADER; STRUCT!{#[debug] struct BITMAPV5HEADER { bV5Size: DWORD, bV5Width: LONG, bV5Height: LONG, bV5Planes: WORD, bV5BitCount: WORD, bV5Compression: DWORD, bV5SizeImage: DWORD, bV5XPelsPerMeter: LONG, bV5YPelsPerMeter: LONG, bV5ClrUsed: DWORD, bV5ClrImportant: DWORD, bV5RedMask: DWORD, bV5GreenMask: DWORD, bV5BlueMask: DWORD, bV5AlphaMask: DWORD, bV5CSType: DWORD, bV5Endpoints: CIEXYZTRIPLE, bV5GammaRed: DWORD, bV5GammaGreen: DWORD, bV5GammaBlue: DWORD, bV5Intent: DWORD, bV5ProfileData: DWORD, bV5ProfileSize: DWORD, bV5Reserved: DWORD, }} pub type LPBITMAPV5HEADER = *mut BITMAPV5HEADER; pub type PBITMAPV5HEADER = *mut BITMAPV5HEADER; pub const PROFILE_LINKED: LONG = 0x4C49_4E4B; // 'LINK' pub const PROFILE_EMBEDDED: LONG = 0x4D42_4544; // 'MBED' pub const BI_RGB: DWORD = 0; pub const BI_RLE8: DWORD = 1; pub const BI_RLE4: DWORD = 2; pub const BI_BITFIELDS: DWORD = 3; pub const BI_JPEG: DWORD = 4; pub const BI_PNG: DWORD = 5; STRUCT!{#[debug] struct BITMAPINFO { bmiHeader: BITMAPINFOHEADER, bmiColors: [RGBQUAD; 1], }} pub type LPBITMAPINFO = *mut BITMAPINFO; pub type PBITMAPINFO = *mut BITMAPINFO; STRUCT!{#[debug] struct BITMAPCOREINFO { bmciHeader: BITMAPCOREHEADER, bmciColors: [RGBTRIPLE; 1], }} pub type LPBITMAPCOREINFO = *mut BITMAPCOREINFO; pub type PBITMAPCOREINFO = *mut BITMAPCOREINFO; STRUCT!{#[debug] #[repr(packed)] struct BITMAPFILEHEADER { bfType: WORD, bfSize: DWORD, bfReserved1: WORD, bfReserved2: WORD, bfOffBits: DWORD, }} pub type LPBITMAPFILEHEADER = *mut BITMAPFILEHEADER; pub type PBITMAPFILEHEADER = *mut BITMAPFILEHEADER; #[inline] pub fn MAKEPOINTS(l: DWORD) -> POINTS { unsafe { ::core::mem::transmute::(l) } } STRUCT!{#[debug] struct FONTSIGNATURE { fsUsb: [DWORD; 4], fsCsb: [DWORD; 2], }} pub type LPFONTSIGNATURE = *mut FONTSIGNATURE; pub type PFONTSIGNATURE = *mut FONTSIGNATURE; STRUCT!{#[debug] struct CHARSETINFO { ciCharset: UINT, ciACP: UINT, fs: FONTSIGNATURE, }} pub type PCHARSETINFO = *mut CHARSETINFO; pub type NPCHARSETINFO = *mut CHARSETINFO; pub type LPCHARSETINFO = *mut CHARSETINFO; pub const TCI_SRCCHARSET: c_int = 1; pub const TCI_SRCCODEPAGE: c_int = 2; pub const TCI_SRCFONTSIG: c_int = 3; pub const TCI_SRCLOCALE: c_int = 0x1000; STRUCT!{#[debug] struct LOCALESIGNATURE { lsUsb: [DWORD; 4], lsCsbDefault: [DWORD; 2], lsCsbSupported: [DWORD; 2], }} pub type PLOCALESIGNATURE = *mut LOCALESIGNATURE; pub type LPLOCALESIGNATURE = *mut LOCALESIGNATURE; STRUCT!{struct HANDLETABLE { objectHandle: [HGDIOBJ; 1], }} pub type LPHANDLETABLE = *mut HANDLETABLE; pub type PHANDLETABLE = *mut HANDLETABLE; STRUCT!{struct METARECORD { rdSize: DWORD, rdFunction: WORD, rdParm: [WORD; 1], }} pub type PMETARECORD = *mut METARECORD; pub type LPMETARECORD = *mut METARECORD; STRUCT!{struct METAFILEPICT { mm: LONG, xExt: LONG, yExt: LONG, hMF: HMETAFILE, }} pub type LPMETAFILEPICT = *mut METAFILEPICT; STRUCT!{struct METAHEADER { mtType: WORD, mtHeaderSize: WORD, mtVersion: WORD, mtSize: DWORD, mtNoObjects: WORD, mtMaxRecord: DWORD, mtNoParameters: WORD, }} pub type PMETAHEADER = *mut METAHEADER; pub type LPMETAHEADER = *mut METAHEADER; STRUCT!{struct ENHMETARECORD { iType: DWORD, nSize: DWORD, dParm: [DWORD; 1], }} pub type PENHMETARECORD = *mut ENHMETARECORD; pub type LPENHMETARECORD = *mut ENHMETARECORD; STRUCT!{struct ENHMETAHEADER { iType: DWORD, nSize: DWORD, rclBounds: RECTL, rclFrame: RECTL, dSignature: DWORD, nVersion: DWORD, nBytes: DWORD, nRecords: DWORD, nHandles: WORD, sReserved: WORD, nDescription: DWORD, offDescription: DWORD, nPalEntries: DWORD, szlDevice: SIZEL, szlMillimeters: SIZEL, cbPixelFormat: DWORD, offPixelFormat: DWORD, bOpenGL: DWORD, szlMicrometers: SIZEL, }} pub type PENHMETAHEADER = *mut ENHMETAHEADER; pub type LPENHMETAHEADER = *mut ENHMETAHEADER; pub const TMPF_FIXED_PITCH: BYTE = 0x01; pub const TMPF_VECTOR: BYTE = 0x02; pub const TMPF_DEVICE: BYTE = 0x08; pub const TMPF_TRUETYPE: BYTE = 0x04; // BCHAR STRUCT!{struct TEXTMETRICA { tmHeight: LONG, tmAscent: LONG, tmDescent: LONG, tmInternalLeading: LONG, tmExternalLeading: LONG, tmAveCharWidth: LONG, tmMaxCharWidth: LONG, tmWeight: LONG, tmOverhang: LONG, tmDigitizedAspectX: LONG, tmDigitizedAspectY: LONG, tmFirstChar: BYTE, tmLastChar: BYTE, tmDefaultChar: BYTE, tmBreakChar: BYTE, tmItalic: BYTE, tmUnderlined: BYTE, tmStruckOut: BYTE, tmPitchAndFamily: BYTE, tmCharSet: BYTE, }} pub type PTEXTMETRICA = *mut TEXTMETRICA; pub type NPTEXTMETRICA = *mut TEXTMETRICA; pub type LPTEXTMETRICA = *mut TEXTMETRICA; STRUCT!{struct TEXTMETRICW { tmHeight: LONG, tmAscent: LONG, tmDescent: LONG, tmInternalLeading: LONG, tmExternalLeading: LONG, tmAveCharWidth: LONG, tmMaxCharWidth: LONG, tmWeight: LONG, tmOverhang: LONG, tmDigitizedAspectX: LONG, tmDigitizedAspectY: LONG, tmFirstChar: WCHAR, tmLastChar: WCHAR, tmDefaultChar: WCHAR, tmBreakChar: WCHAR, tmItalic: BYTE, tmUnderlined: BYTE, tmStruckOut: BYTE, tmPitchAndFamily: BYTE, tmCharSet: BYTE, }} pub type PTEXTMETRICW = *mut TEXTMETRICW; pub type NPTEXTMETRICW = *mut TEXTMETRICW; pub type LPTEXTMETRICW = *mut TEXTMETRICW; pub const NTM_REGULAR: DWORD = 0x00000040; pub const NTM_BOLD: DWORD = 0x00000020; pub const NTM_ITALIC: DWORD = 0x00000001; pub const NTM_NONNEGATIVE_AC: DWORD = 0x00010000; pub const NTM_PS_OPENTYPE: DWORD = 0x00020000; pub const NTM_TT_OPENTYPE: DWORD = 0x00040000; pub const NTM_MULTIPLEMASTER: DWORD = 0x00080000; pub const NTM_TYPE1: DWORD = 0x00100000; pub const NTM_DSIG: DWORD = 0x00200000; STRUCT!{struct NEWTEXTMETRICA { tmHeight: LONG, tmAscent: LONG, tmDescent: LONG, tmInternalLeading: LONG, tmExternalLeading: LONG, tmAveCharWidth: LONG, tmMaxCharWidth: LONG, tmWeight: LONG, tmOverhang: LONG, tmDigitizedAspectX: LONG, tmDigitizedAspectY: LONG, tmFirstChar: BYTE, tmLastChar: BYTE, tmDefaultChar: BYTE, tmBreakChar: BYTE, tmItalic: BYTE, tmUnderlined: BYTE, tmStruckOut: BYTE, tmPitchAndFamily: BYTE, tmCharSet: BYTE, ntmFlags: DWORD, ntmSizeEM: UINT, ntmCellHeight: UINT, ntmAvgWidth: UINT, }} pub type PNEWTEXTMETRICA = *mut NEWTEXTMETRICA; pub type NPNEWTEXTMETRICA = *mut NEWTEXTMETRICA; pub type LPNEWTEXTMETRICA = *mut NEWTEXTMETRICA; STRUCT!{struct NEWTEXTMETRICW { tmHeight: LONG, tmAscent: LONG, tmDescent: LONG, tmInternalLeading: LONG, tmExternalLeading: LONG, tmAveCharWidth: LONG, tmMaxCharWidth: LONG, tmWeight: LONG, tmOverhang: LONG, tmDigitizedAspectX: LONG, tmDigitizedAspectY: LONG, tmFirstChar: WCHAR, tmLastChar: WCHAR, tmDefaultChar: WCHAR, tmBreakChar: WCHAR, tmItalic: BYTE, tmUnderlined: BYTE, tmStruckOut: BYTE, tmPitchAndFamily: BYTE, tmCharSet: BYTE, ntmFlags: DWORD, ntmSizeEM: UINT, ntmCellHeight: UINT, ntmAvgWidth: UINT, }} pub type PNEWTEXTMETRICW = *mut NEWTEXTMETRICW; pub type NPNEWTEXTMETRICW = *mut NEWTEXTMETRICW; pub type LPNEWTEXTMETRICW = *mut NEWTEXTMETRICW; STRUCT!{struct NEWTEXTMETRICEXA { ntmTm: NEWTEXTMETRICA, ntmFontSig: FONTSIGNATURE, }} STRUCT!{struct NEWTEXTMETRICEXW { ntmTm: NEWTEXTMETRICW, ntmFontSig: FONTSIGNATURE, }} STRUCT!{struct PELARRAY { paXCount: LONG, paYCount: LONG, paXExt: LONG, paYExt: LONG, paRGBs: BYTE, }} pub type PPELARRAY = *mut PELARRAY; pub type NPPELARRAY = *mut PELARRAY; pub type LPPELARRAY = *mut PELARRAY; STRUCT!{struct LOGBRUSH { lbStyle: UINT, lbColor: COLORREF, lbHatch: ULONG_PTR, }} pub type PLOGBRUSH = *mut LOGBRUSH; pub type NPLOGBRUSH = *mut LOGBRUSH; pub type LPLOGBRUSH = *mut LOGBRUSH; STRUCT!{struct LOGBRUSH32 { lbStyle: UINT, lbColor: COLORREF, lbHatch: ULONG, }} pub type PLOGBRUSH32 = *mut LOGBRUSH32; pub type NPLOGBRUSH32 = *mut LOGBRUSH32; pub type LPLOGBRUSH32 = *mut LOGBRUSH32; pub type PATTERN = LOGBRUSH; pub type PPATTERN = *mut PATTERN; pub type NPPATTERN = *mut PATTERN; pub type LPPATTERN = *mut PATTERN; STRUCT!{struct LOGPEN { lopnStyle: UINT, lopnWidth: POINT, lopnColor: COLORREF, }} pub type PLOGPEN = *mut LOGPEN; pub type NPLOGPEN = *mut LOGPEN; pub type LPLOGPEN = *mut LOGPEN; STRUCT!{struct EXTLOGPEN { elpPenStyle: DWORD, elpWidth: DWORD, elpBrushStyle: UINT, elpColor: COLORREF, elpHatch: ULONG_PTR, elpNumEntries: DWORD, elpStyleEntry: [DWORD; 1], }} pub type PEXTLOGPEN = *mut EXTLOGPEN; pub type NPEXTLOGPEN = *mut EXTLOGPEN; pub type LPEXTLOGPEN = *mut EXTLOGPEN; STRUCT!{struct EXTLOGPEN32 { elpPenStyle: DWORD, elpWidth: DWORD, elpBrushStyle: UINT, elpColor: COLORREF, elpHatch: ULONG, elpNumEntries: DWORD, elpStyleEntry: [DWORD; 1], }} pub type PEXTLOGPEN32 = *mut EXTLOGPEN32; pub type NPEXTLOGPEN32 = *mut EXTLOGPEN32; pub type LPEXTLOGPEN32 = *mut EXTLOGPEN32; STRUCT!{struct PALETTEENTRY { peRed: BYTE, peGreen: BYTE, peBlue: BYTE, peFlags: BYTE, }} pub type PPALETTEENTRY = *mut PALETTEENTRY; pub type LPPALETTEENTRY = *mut PALETTEENTRY; STRUCT!{struct LOGPALETTE { palVersion: WORD, palNumEntries: WORD, palPalEntry: [PALETTEENTRY; 1], }} pub type PLOGPALETTE = *mut LOGPALETTE; pub type NPLOGPALETTE = *mut LOGPALETTE; pub type LPLOGPALETTE = *mut LOGPALETTE; pub const LF_FACESIZE: usize = 32; STRUCT!{struct LOGFONTA { lfHeight: LONG, lfWidth: LONG, lfEscapement: LONG, lfOrientation: LONG, lfWeight: LONG, lfItalic: BYTE, lfUnderline: BYTE, lfStrikeOut: BYTE, lfCharSet: BYTE, lfOutPrecision: BYTE, lfClipPrecision: BYTE, lfQuality: BYTE, lfPitchAndFamily: BYTE, lfFaceName: [CHAR; LF_FACESIZE], }} pub type PLOGFONTA = *mut LOGFONTA; pub type NPLOGFONTA = *mut LOGFONTA; pub type LPLOGFONTA = *mut LOGFONTA; STRUCT!{struct LOGFONTW { lfHeight: LONG, lfWidth: LONG, lfEscapement: LONG, lfOrientation: LONG, lfWeight: LONG, lfItalic: BYTE, lfUnderline: BYTE, lfStrikeOut: BYTE, lfCharSet: BYTE, lfOutPrecision: BYTE, lfClipPrecision: BYTE, lfQuality: BYTE, lfPitchAndFamily: BYTE, lfFaceName: [WCHAR; LF_FACESIZE], }} pub type PLOGFONTW = *mut LOGFONTW; pub type NPLOGFONTW = *mut LOGFONTW; pub type LPLOGFONTW = *mut LOGFONTW; pub const LF_FULLFACESIZE: usize = 64; STRUCT!{struct ENUMLOGFONTA { elfLogFont: LOGFONTA, elfFullName: [BYTE; LF_FULLFACESIZE], elfStyle: [BYTE; LF_FACESIZE], }} pub type LPENUMLOGFONTA = *mut ENUMLOGFONTA; STRUCT!{struct ENUMLOGFONTW { elfLogFont: LOGFONTW, elfFullName: [WCHAR; LF_FULLFACESIZE], elfStyle: [WCHAR; LF_FACESIZE], }} pub type LPENUMLOGFONTW = *mut ENUMLOGFONTW; STRUCT!{struct ENUMLOGFONTEXA { elfLogFont: LOGFONTA, elfFullName: [BYTE; LF_FULLFACESIZE], elfStyle: [BYTE; LF_FACESIZE], elfScript: [BYTE; LF_FACESIZE], }} pub type LPENUMLOGFONTEXA = *mut ENUMLOGFONTEXA; STRUCT!{struct ENUMLOGFONTEXW { elfLogFont: LOGFONTW, elfFullName: [WCHAR; LF_FULLFACESIZE], elfStyle: [WCHAR; LF_FACESIZE], elfScript: [WCHAR; LF_FACESIZE], }} pub type LPENUMLOGFONTEXW = *mut ENUMLOGFONTEXW; pub const OUT_DEFAULT_PRECIS: DWORD = 0; pub const OUT_STRING_PRECIS: DWORD = 1; pub const OUT_CHARACTER_PRECIS: DWORD = 2; pub const OUT_STROKE_PRECIS: DWORD = 3; pub const OUT_TT_PRECIS: DWORD = 4; pub const OUT_DEVICE_PRECIS: DWORD = 5; pub const OUT_RASTER_PRECIS: DWORD = 6; pub const OUT_TT_ONLY_PRECIS: DWORD = 7; pub const OUT_OUTLINE_PRECIS: DWORD = 8; pub const OUT_SCREEN_OUTLINE_PRECIS: DWORD = 9; pub const OUT_PS_ONLY_PRECIS: DWORD = 10; pub const CLIP_DEFAULT_PRECIS: DWORD = 0; pub const CLIP_CHARACTER_PRECIS: DWORD = 1; pub const CLIP_STROKE_PRECIS: DWORD = 2; pub const CLIP_MASK: DWORD = 0xf; pub const CLIP_LH_ANGLES: DWORD = 1 << 4; pub const CLIP_TT_ALWAYS: DWORD = 2 << 4; pub const CLIP_DFA_DISABLE: DWORD = 4 << 4; pub const CLIP_EMBEDDED: DWORD = 8 << 4; pub const DEFAULT_QUALITY: DWORD = 0; pub const DRAFT_QUALITY: DWORD = 1; pub const PROOF_QUALITY: DWORD = 2; pub const NONANTIALIASED_QUALITY: DWORD = 3; pub const ANTIALIASED_QUALITY: DWORD = 4; pub const CLEARTYPE_QUALITY: DWORD = 5; pub const CLEARTYPE_NATURAL_QUALITY: DWORD = 6; pub const DEFAULT_PITCH: DWORD = 0; pub const FIXED_PITCH: DWORD = 1; pub const VARIABLE_PITCH: DWORD = 2; pub const MONO_FONT: DWORD = 8; pub const ANSI_CHARSET: DWORD = 0; pub const DEFAULT_CHARSET: DWORD = 1; pub const SYMBOL_CHARSET: DWORD = 2; pub const SHIFTJIS_CHARSET: DWORD = 128; pub const HANGEUL_CHARSET: DWORD = 129; pub const HANGUL_CHARSET: DWORD = 129; pub const GB2312_CHARSET: DWORD = 134; pub const CHINESEBIG5_CHARSET: DWORD = 136; pub const OEM_CHARSET: DWORD = 255; pub const JOHAB_CHARSET: DWORD = 130; pub const HEBREW_CHARSET: DWORD = 177; pub const ARABIC_CHARSET: DWORD = 178; pub const GREEK_CHARSET: DWORD = 161; pub const TURKISH_CHARSET: DWORD = 162; pub const VIETNAMESE_CHARSET: DWORD = 163; pub const THAI_CHARSET: DWORD = 222; pub const EASTEUROPE_CHARSET: DWORD = 238; pub const RUSSIAN_CHARSET: DWORD = 204; pub const MAC_CHARSET: DWORD = 77; pub const BALTIC_CHARSET: DWORD = 186; pub const FS_LATIN1: DWORD = 0x00000001; pub const FS_LATIN2: DWORD = 0x00000002; pub const FS_CYRILLIC: DWORD = 0x00000004; pub const FS_GREEK: DWORD = 0x00000008; pub const FS_TURKISH: DWORD = 0x00000010; pub const FS_HEBREW: DWORD = 0x00000020; pub const FS_ARABIC: DWORD = 0x00000040; pub const FS_BALTIC: DWORD = 0x00000080; pub const FS_VIETNAMESE: DWORD = 0x00000100; pub const FS_THAI: DWORD = 0x00010000; pub const FS_JISJAPAN: DWORD = 0x00020000; pub const FS_CHINESESIMP: DWORD = 0x00040000; pub const FS_WANSUNG: DWORD = 0x00080000; pub const FS_CHINESETRAD: DWORD = 0x00100000; pub const FS_JOHAB: DWORD = 0x00200000; pub const FS_SYMBOL: DWORD = 0x80000000; pub const FF_DONTCARE: DWORD = 0 << 4; pub const FF_ROMAN: DWORD = 1 << 4; pub const FF_SWISS: DWORD = 2 << 4; pub const FF_MODERN: DWORD = 3 << 4; pub const FF_SCRIPT: DWORD = 4 << 4; pub const FF_DECORATIVE: DWORD = 5 << 4; pub const FW_DONTCARE: c_int = 0; pub const FW_THIN: c_int = 100; pub const FW_EXTRALIGHT: c_int = 200; pub const FW_LIGHT: c_int = 300; pub const FW_NORMAL: c_int = 400; pub const FW_MEDIUM: c_int = 500; pub const FW_SEMIBOLD: c_int = 600; pub const FW_BOLD: c_int = 700; pub const FW_EXTRABOLD: c_int = 800; pub const FW_HEAVY: c_int = 900; pub const FW_ULTRALIGHT: c_int = FW_EXTRALIGHT; pub const FW_REGULAR: c_int = FW_NORMAL; pub const FW_DEMIBOLD: c_int = FW_SEMIBOLD; pub const FW_ULTRABOLD: c_int = FW_EXTRABOLD; pub const FW_BLACK: c_int = FW_HEAVY; pub const PANOSE_COUNT: DWORD = 10; pub const PAN_FAMILYTYPE_INDEX: DWORD = 0; pub const PAN_SERIFSTYLE_INDEX: DWORD = 1; pub const PAN_WEIGHT_INDEX: DWORD = 2; pub const PAN_PROPORTION_INDEX: DWORD = 3; pub const PAN_CONTRAST_INDEX: DWORD = 4; pub const PAN_STROKEVARIATION_INDEX: DWORD = 5; pub const PAN_ARMSTYLE_INDEX: DWORD = 6; pub const PAN_LETTERFORM_INDEX: DWORD = 7; pub const PAN_MIDLINE_INDEX: DWORD = 8; pub const PAN_XHEIGHT_INDEX: DWORD = 9; pub const PAN_CULTURE_LATIN: DWORD = 0; STRUCT!{struct PANOSE { bFamilyType: BYTE, bSerifStyle: BYTE, bWeight: BYTE, bProportion: BYTE, bContrast: BYTE, bStrokeVariation: BYTE, bArmStyle: BYTE, bLetterform: BYTE, bMidline: BYTE, bXHeight: BYTE, }} pub type LPPANOSE = *mut PANOSE; pub const PAN_ANY: BYTE = 0; pub const PAN_NO_FIT: BYTE = 1; pub const PAN_FAMILY_TEXT_DISPLAY: BYTE = 2; pub const PAN_FAMILY_SCRIPT: BYTE = 3; pub const PAN_FAMILY_DECORATIVE: BYTE = 4; pub const PAN_FAMILY_PICTORIAL: BYTE = 5; pub const PAN_SERIF_COVE: BYTE = 2; pub const PAN_SERIF_OBTUSE_COVE: BYTE = 3; pub const PAN_SERIF_SQUARE_COVE: BYTE = 4; pub const PAN_SERIF_OBTUSE_SQUARE_COVE: BYTE = 5; pub const PAN_SERIF_SQUARE: BYTE = 6; pub const PAN_SERIF_THIN: BYTE = 7; pub const PAN_SERIF_BONE: BYTE = 8; pub const PAN_SERIF_EXAGGERATED: BYTE = 9; pub const PAN_SERIF_TRIANGLE: BYTE = 10; pub const PAN_SERIF_NORMAL_SANS: BYTE = 11; pub const PAN_SERIF_OBTUSE_SANS: BYTE = 12; pub const PAN_SERIF_PERP_SANS: BYTE = 13; pub const PAN_SERIF_FLARED: BYTE = 14; pub const PAN_SERIF_ROUNDED: BYTE = 15; pub const PAN_WEIGHT_VERY_LIGHT: BYTE = 2; pub const PAN_WEIGHT_LIGHT: BYTE = 3; pub const PAN_WEIGHT_THIN: BYTE = 4; pub const PAN_WEIGHT_BOOK: BYTE = 5; pub const PAN_WEIGHT_MEDIUM: BYTE = 6; pub const PAN_WEIGHT_DEMI: BYTE = 7; pub const PAN_WEIGHT_BOLD: BYTE = 8; pub const PAN_WEIGHT_HEAVY: BYTE = 9; pub const PAN_WEIGHT_BLACK: BYTE = 10; pub const PAN_WEIGHT_NORD: BYTE = 11; pub const PAN_PROP_OLD_STYLE: BYTE = 2; pub const PAN_PROP_MODERN: BYTE = 3; pub const PAN_PROP_EVEN_WIDTH: BYTE = 4; pub const PAN_PROP_EXPANDED: BYTE = 5; pub const PAN_PROP_CONDENSED: BYTE = 6; pub const PAN_PROP_VERY_EXPANDED: BYTE = 7; pub const PAN_PROP_VERY_CONDENSED: BYTE = 8; pub const PAN_PROP_MONOSPACED: BYTE = 9; pub const PAN_CONTRAST_NONE: BYTE = 2; pub const PAN_CONTRAST_VERY_LOW: BYTE = 3; pub const PAN_CONTRAST_LOW: BYTE = 4; pub const PAN_CONTRAST_MEDIUM_LOW: BYTE = 5; pub const PAN_CONTRAST_MEDIUM: BYTE = 6; pub const PAN_CONTRAST_MEDIUM_HIGH: BYTE = 7; pub const PAN_CONTRAST_HIGH: BYTE = 8; pub const PAN_CONTRAST_VERY_HIGH: BYTE = 9; pub const PAN_STROKE_GRADUAL_DIAG: BYTE = 2; pub const PAN_STROKE_GRADUAL_TRAN: BYTE = 3; pub const PAN_STROKE_GRADUAL_VERT: BYTE = 4; pub const PAN_STROKE_GRADUAL_HORZ: BYTE = 5; pub const PAN_STROKE_RAPID_VERT: BYTE = 6; pub const PAN_STROKE_RAPID_HORZ: BYTE = 7; pub const PAN_STROKE_INSTANT_VERT: BYTE = 8; pub const PAN_STRAIGHT_ARMS_HORZ: BYTE = 2; pub const PAN_STRAIGHT_ARMS_WEDGE: BYTE = 3; pub const PAN_STRAIGHT_ARMS_VERT: BYTE = 4; pub const PAN_STRAIGHT_ARMS_SINGLE_SERIF: BYTE = 5; pub const PAN_STRAIGHT_ARMS_DOUBLE_SERIF: BYTE = 6; pub const PAN_BENT_ARMS_HORZ: BYTE = 7; pub const PAN_BENT_ARMS_WEDGE: BYTE = 8; pub const PAN_BENT_ARMS_VERT: BYTE = 9; pub const PAN_BENT_ARMS_SINGLE_SERIF: BYTE = 10; pub const PAN_BENT_ARMS_DOUBLE_SERIF: BYTE = 11; pub const PAN_LETT_NORMAL_CONTACT: BYTE = 2; pub const PAN_LETT_NORMAL_WEIGHTED: BYTE = 3; pub const PAN_LETT_NORMAL_BOXED: BYTE = 4; pub const PAN_LETT_NORMAL_FLATTENED: BYTE = 5; pub const PAN_LETT_NORMAL_ROUNDED: BYTE = 6; pub const PAN_LETT_NORMAL_OFF_CENTER: BYTE = 7; pub const PAN_LETT_NORMAL_SQUARE: BYTE = 8; pub const PAN_LETT_OBLIQUE_CONTACT: BYTE = 9; pub const PAN_LETT_OBLIQUE_WEIGHTED: BYTE = 10; pub const PAN_LETT_OBLIQUE_BOXED: BYTE = 11; pub const PAN_LETT_OBLIQUE_FLATTENED: BYTE = 12; pub const PAN_LETT_OBLIQUE_ROUNDED: BYTE = 13; pub const PAN_LETT_OBLIQUE_OFF_CENTER: BYTE = 14; pub const PAN_LETT_OBLIQUE_SQUARE: BYTE = 15; pub const PAN_MIDLINE_STANDARD_TRIMMED: BYTE = 2; pub const PAN_MIDLINE_STANDARD_POINTED: BYTE = 3; pub const PAN_MIDLINE_STANDARD_SERIFED: BYTE = 4; pub const PAN_MIDLINE_HIGH_TRIMMED: BYTE = 5; pub const PAN_MIDLINE_HIGH_POINTED: BYTE = 6; pub const PAN_MIDLINE_HIGH_SERIFED: BYTE = 7; pub const PAN_MIDLINE_CONSTANT_TRIMMED: BYTE = 8; pub const PAN_MIDLINE_CONSTANT_POINTED: BYTE = 9; pub const PAN_MIDLINE_CONSTANT_SERIFED: BYTE = 10; pub const PAN_MIDLINE_LOW_TRIMMED: BYTE = 11; pub const PAN_MIDLINE_LOW_POINTED: BYTE = 12; pub const PAN_MIDLINE_LOW_SERIFED: BYTE = 13; pub const PAN_XHEIGHT_CONSTANT_SMALL: BYTE = 2; pub const PAN_XHEIGHT_CONSTANT_STD: BYTE = 3; pub const PAN_XHEIGHT_CONSTANT_LARGE: BYTE = 4; pub const PAN_XHEIGHT_DUCKING_SMALL: BYTE = 5; pub const PAN_XHEIGHT_DUCKING_STD: BYTE = 6; pub const PAN_XHEIGHT_DUCKING_LARGE: BYTE = 7; pub const ELF_VENDOR_SIZE: usize = 4; STRUCT!{struct EXTLOGFONTA { elfLogFont: LOGFONTA, elfFullName: [BYTE; LF_FULLFACESIZE], elfStyle: [BYTE; LF_FACESIZE], elfVersion: DWORD, elfStyleSize: DWORD, elfMatch: DWORD, elfReserved: DWORD, elfVendorId: [BYTE; ELF_VENDOR_SIZE], elfCulture: DWORD, elfPanose: PANOSE, }} pub type PEXTLOGFONTA = *mut EXTLOGFONTA; pub type NPEXTLOGFONTA = *mut EXTLOGFONTA; pub type LPEXTLOGFONTA = *mut EXTLOGFONTA; STRUCT!{struct EXTLOGFONTW { elfLogFont: LOGFONTW, elfFullNam: [WCHAR; LF_FULLFACESIZE], elfStyle: [WCHAR; LF_FACESIZE], elfVersion: DWORD, elfStyleSize: DWORD, elfMatch: DWORD, elfReserved: DWORD, elfVendorId: [BYTE; ELF_VENDOR_SIZE], elfCulture: DWORD, elfPanose: PANOSE, }} pub type PEXTLOGFONTW = *mut EXTLOGFONTW; pub type NPEXTLOGFONTW = *mut EXTLOGFONTW; pub type LPEXTLOGFONTW = *mut EXTLOGFONTW; pub const ELF_VERSION: DWORD = 0; pub const ELF_CULTURE_LATIN: DWORD = 0; pub const RASTER_FONTTYPE: DWORD = 0x0001; pub const DEVICE_FONTTYPE: DWORD = 0x0002; pub const TRUETYPE_FONTTYPE: DWORD = 0x0004; #[inline] pub fn RGB(r: BYTE, g: BYTE, b: BYTE) -> COLORREF { r as COLORREF | ((g as COLORREF) << 8) | ((b as COLORREF) << 16) } #[inline] pub fn PALETTERGB(r: BYTE, g: BYTE, b: BYTE) -> COLORREF { 0x02000000 | RGB(r, g, b) } #[inline] pub fn PALETTEINDEX(i: WORD) -> COLORREF { 0x01000000 | i as DWORD } pub const PC_RESERVED: DWORD = 0x01; pub const PC_EXPLICIT: DWORD = 0x02; pub const PC_NOCOLLAPSE: DWORD = 0x04; #[inline] pub fn GetRValue(rgb: COLORREF) -> BYTE { LOBYTE(rgb as WORD) } #[inline] pub fn GetGValue(rgb: COLORREF) -> BYTE { LOBYTE((rgb as WORD) >> 8) } #[inline] pub fn GetBValue(rgb: COLORREF) -> BYTE { LOBYTE((rgb >> 16) as WORD) } pub const TRANSPARENT: DWORD = 1; pub const OPAQUE: DWORD = 2; pub const BKMODE_LAST: DWORD = 2; pub const GM_COMPATIBLE: DWORD = 1; pub const GM_ADVANCED: DWORD = 2; pub const GM_LAST: DWORD = 2; pub const PT_CLOSEFIGURE: DWORD = 0x01; pub const PT_LINETO: DWORD = 0x02; pub const PT_BEZIERTO: DWORD = 0x04; pub const PT_MOVETO: DWORD = 0x06; pub const MM_TEXT: DWORD = 1; pub const MM_LOMETRIC: DWORD = 2; pub const MM_HIMETRIC: DWORD = 3; pub const MM_LOENGLISH: DWORD = 4; pub const MM_HIENGLISH: DWORD = 5; pub const MM_TWIPS: DWORD = 6; pub const MM_ISOTROPIC: DWORD = 7; pub const MM_ANISOTROPIC: DWORD = 8; pub const MM_MIN: DWORD = MM_TEXT; pub const MM_MAX: DWORD = MM_ANISOTROPIC; pub const MM_MAX_FIXEDSCALE: DWORD = MM_TWIPS; pub const ABSOLUTE: DWORD = 1; pub const RELATIVE: DWORD = 2; pub const WHITE_BRUSH: DWORD = 0; pub const LTGRAY_BRUSH: DWORD = 1; pub const GRAY_BRUSH: DWORD = 2; pub const DKGRAY_BRUSH: DWORD = 3; pub const BLACK_BRUSH: DWORD = 4; pub const NULL_BRUSH: DWORD = 5; pub const HOLLOW_BRUSH: DWORD = NULL_BRUSH; pub const WHITE_PEN: DWORD = 6; pub const BLACK_PEN: DWORD = 7; pub const NULL_PEN: DWORD = 8; pub const OEM_FIXED_FONT: DWORD = 10; pub const ANSI_FIXED_FONT: DWORD = 11; pub const ANSI_VAR_FONT: DWORD = 12; pub const SYSTEM_FONT: DWORD = 13; pub const DEVICE_DEFAULT_FONT: DWORD = 14; pub const DEFAULT_PALETTE: DWORD = 15; pub const SYSTEM_FIXED_FONT: DWORD = 16; pub const DEFAULT_GUI_FONT: DWORD = 17; pub const DC_BRUSH: DWORD = 18; pub const DC_PEN: DWORD = 19; pub const STOCK_LAST: DWORD = 19; pub const CLR_INVALID: COLORREF = 0xFFFFFFFF; pub const BS_SOLID: DWORD = 0; pub const BS_NULL: DWORD = 1; pub const BS_HOLLOW: DWORD = BS_NULL; pub const BS_HATCHED: DWORD = 2; pub const BS_PATTERN: DWORD = 3; pub const BS_INDEXED: DWORD = 4; pub const BS_DIBPATTERN: DWORD = 5; pub const BS_DIBPATTERNPT: DWORD = 6; pub const BS_PATTERN8X8: DWORD = 7; pub const BS_DIBPATTERN8X8: DWORD = 8; pub const BS_MONOPATTERN: DWORD = 9; pub const HS_HORIZONTAL: DWORD = 0; pub const HS_VERTICAL: DWORD = 1; pub const HS_FDIAGONAL: DWORD = 2; pub const HS_BDIAGONAL: DWORD = 3; pub const HS_CROSS: DWORD = 4; pub const HS_DIAGCROSS: DWORD = 5; pub const HS_API_MAX: DWORD = 12; pub const PS_SOLID: DWORD = 0; pub const PS_DASH: DWORD = 1; pub const PS_DOT: DWORD = 2; pub const PS_DASHDOT: DWORD = 3; pub const PS_DASHDOTDOT: DWORD = 4; pub const PS_NULL: DWORD = 5; pub const PS_INSIDEFRAME: DWORD = 6; pub const PS_USERSTYLE: DWORD = 7; pub const PS_ALTERNATE: DWORD = 8; pub const PS_STYLE_MASK: DWORD = 0x0000000F; pub const PS_ENDCAP_ROUND: DWORD = 0x00000000; pub const PS_ENDCAP_SQUARE: DWORD = 0x00000100; pub const PS_ENDCAP_FLAT: DWORD = 0x00000200; pub const PS_ENDCAP_MASK: DWORD = 0x00000F00; pub const PS_JOIN_ROUND: DWORD = 0x00000000; pub const PS_JOIN_BEVEL: DWORD = 0x00001000; pub const PS_JOIN_MITER: DWORD = 0x00002000; pub const PS_JOIN_MASK: DWORD = 0x0000F000; pub const PS_COSMETIC: DWORD = 0x00000000; pub const PS_GEOMETRIC: DWORD = 0x00010000; pub const PS_TYPE_MASK: DWORD = 0x000F0000; pub const AD_COUNTERCLOCKWISE: DWORD = 1; pub const AD_CLOCKWISE: DWORD = 2; pub const DRIVERVERSION: c_int = 0; pub const TECHNOLOGY: c_int = 2; pub const HORZSIZE: c_int = 4; pub const VERTSIZE: c_int = 6; pub const HORZRES: c_int = 8; pub const VERTRES: c_int = 10; pub const BITSPIXEL: c_int = 12; pub const PLANES: c_int = 14; pub const NUMBRUSHES: c_int = 16; pub const NUMPENS: c_int = 18; pub const NUMMARKERS: c_int = 20; pub const NUMFONTS: c_int = 22; pub const NUMCOLORS: c_int = 24; pub const PDEVICESIZE: c_int = 26; pub const CURVECAPS: c_int = 28; pub const LINECAPS: c_int = 30; pub const POLYGONALCAPS: c_int = 32; pub const TEXTCAPS: c_int = 34; pub const CLIPCAPS: c_int = 36; pub const RASTERCAPS: c_int = 38; pub const ASPECTX: c_int = 40; pub const ASPECTY: c_int = 42; pub const ASPECTXY: c_int = 44; pub const LOGPIXELSX: c_int = 88; pub const LOGPIXELSY: c_int = 90; pub const SIZEPALETTE: c_int = 104; pub const NUMRESERVED: c_int = 106; pub const COLORRES: c_int = 108; pub const PHYSICALWIDTH: c_int = 110; pub const PHYSICALHEIGHT: c_int = 111; pub const PHYSICALOFFSETX: c_int = 112; pub const PHYSICALOFFSETY: c_int = 113; pub const SCALINGFACTORX: c_int = 114; pub const SCALINGFACTORY: c_int = 115; pub const VREFRESH: c_int = 116; pub const DESKTOPVERTRES: c_int = 117; pub const DESKTOPHORZRES: c_int = 118; pub const BLTALIGNMENT: c_int = 119; pub const SHADEBLENDCAPS: c_int = 120; pub const COLORMGMTCAPS: c_int = 121; pub const DT_PLOTTER: DWORD = 0; pub const DT_RASDISPLAY: DWORD = 1; pub const DT_RASPRINTER: DWORD = 2; pub const DT_RASCAMERA: DWORD = 3; pub const DT_CHARSTREAM: DWORD = 4; pub const DT_METAFILE: DWORD = 5; pub const DT_DISPFILE: DWORD = 6; pub const CC_NONE: DWORD = 0; pub const CC_CIRCLES: DWORD = 1; pub const CC_PIE: DWORD = 2; pub const CC_CHORD: DWORD = 4; pub const CC_ELLIPSES: DWORD = 8; pub const CC_WIDE: DWORD = 16; pub const CC_STYLED: DWORD = 32; pub const CC_WIDESTYLED: DWORD = 64; pub const CC_INTERIORS: DWORD = 128; pub const CC_ROUNDRECT: DWORD = 256; pub const LC_NONE: DWORD = 0; pub const LC_POLYLINE: DWORD = 2; pub const LC_MARKER: DWORD = 4; pub const LC_POLYMARKER: DWORD = 8; pub const LC_WIDE: DWORD = 16; pub const LC_STYLED: DWORD = 32; pub const LC_WIDESTYLED: DWORD = 64; pub const LC_INTERIORS: DWORD = 128; pub const PC_NONE: DWORD = 0; pub const PC_POLYGON: DWORD = 1; pub const PC_RECTANGLE: DWORD = 2; pub const PC_WINDPOLYGON: DWORD = 4; pub const PC_TRAPEZOID: DWORD = 4; pub const PC_SCANLINE: DWORD = 8; pub const PC_WIDE: DWORD = 16; pub const PC_STYLED: DWORD = 32; pub const PC_WIDESTYLED: DWORD = 64; pub const PC_INTERIORS: DWORD = 128; pub const PC_POLYPOLYGON: DWORD = 256; pub const PC_PATHS: DWORD = 512; pub const CP_NONE: DWORD = 0; pub const CP_RECTANGLE: DWORD = 1; pub const CP_REGION: DWORD = 2; pub const TC_OP_CHARACTER: DWORD = 0x00000001; pub const TC_OP_STROKE: DWORD = 0x00000002; pub const TC_CP_STROKE: DWORD = 0x00000004; pub const TC_CR_90: DWORD = 0x00000008; pub const TC_CR_ANY: DWORD = 0x00000010; pub const TC_SF_X_YINDEP: DWORD = 0x00000020; pub const TC_SA_DOUBLE: DWORD = 0x00000040; pub const TC_SA_INTEGER: DWORD = 0x00000080; pub const TC_SA_CONTIN: DWORD = 0x00000100; pub const TC_EA_DOUBLE: DWORD = 0x00000200; pub const TC_IA_ABLE: DWORD = 0x00000400; pub const TC_UA_ABLE: DWORD = 0x00000800; pub const TC_SO_ABLE: DWORD = 0x00001000; pub const TC_RA_ABLE: DWORD = 0x00002000; pub const TC_VA_ABLE: DWORD = 0x00004000; pub const TC_RESERVED: DWORD = 0x00008000; pub const TC_SCROLLBLT: DWORD = 0x00010000; pub const RC_BITBLT: DWORD = 1; pub const RC_BANDING: DWORD = 2; pub const RC_SCALING: DWORD = 4; pub const RC_BITMAP64: DWORD = 8; pub const RC_GDI20_OUTPUT: DWORD = 0x0010; pub const RC_GDI20_STATE: DWORD = 0x0020; pub const RC_SAVEBITMAP: DWORD = 0x0040; pub const RC_DI_BITMAP: DWORD = 0x0080; pub const RC_PALETTE: DWORD = 0x0100; pub const RC_DIBTODEV: DWORD = 0x0200; pub const RC_BIGFONT: DWORD = 0x0400; pub const RC_STRETCHBLT: DWORD = 0x0800; pub const RC_FLOODFILL: DWORD = 0x1000; pub const RC_STRETCHDIB: DWORD = 0x2000; pub const RC_OP_DX_OUTPUT: DWORD = 0x4000; pub const RC_DEVBITS: DWORD = 0x8000; pub const SB_NONE: DWORD = 0x00000000; pub const SB_CONST_ALPHA: DWORD = 0x00000001; pub const SB_PIXEL_ALPHA: DWORD = 0x00000002; pub const SB_PREMULT_ALPHA: DWORD = 0x00000004; pub const SB_GRAD_RECT: DWORD = 0x00000010; pub const SB_GRAD_TRI: DWORD = 0x00000020; pub const CM_NONE: DWORD = 0x00000000; pub const CM_DEVICE_ICM: DWORD = 0x00000001; pub const CM_GAMMA_RAMP: DWORD = 0x00000002; pub const CM_CMYK_COLOR: DWORD = 0x00000004; pub const DIB_RGB_COLORS: DWORD = 0; pub const DIB_PAL_COLORS: DWORD = 1; pub const SYSPAL_ERROR: DWORD = 0; pub const SYSPAL_STATIC: DWORD = 1; pub const SYSPAL_NOSTATIC: DWORD = 2; pub const SYSPAL_NOSTATIC256: DWORD = 3; pub const CBM_INIT: DWORD = 0x04; pub const FLOODFILLBORDER: DWORD = 0; pub const FLOODFILLSURFACE: DWORD = 1; pub const CCHDEVICENAME: usize = 32; pub const CCHFORMNAME: usize = 32; STRUCT!{struct DEVMODE_u1_s1 { dmOrientation: c_short, dmPaperSize: c_short, dmPaperLength: c_short, dmPaperWidth: c_short, dmScale: c_short, dmCopies: c_short, dmDefaultSource: c_short, dmPrintQuality: c_short, }} STRUCT!{struct DEVMODE_u1_s2 { dmPosition: POINTL, dmDisplayOrientation: DWORD, dmDisplayFixedOutput: DWORD, }} UNION!{union DEVMODE_u1 { [u32; 4], s1 s1_mut: DEVMODE_u1_s1, s2 s2_mut: DEVMODE_u1_s2, }} UNION!{union DEVMODE_u2 { [u32; 1], dmDisplayFlags dmDisplayFlags_mut: DWORD, dmNup dmNup_mut: DWORD, }} STRUCT!{struct DEVMODEA { dmDeviceName: [CHAR; CCHDEVICENAME], dmSpecVersion: WORD, dmDriverVersion: WORD, dmSize: WORD, dmDriverExtra: WORD, dmFields: DWORD, u1: DEVMODE_u1, dmColor: c_short, dmDuplex: c_short, dmYResolution: c_short, dmTTOption: c_short, dmCollate: c_short, dmFormName: [CHAR; CCHFORMNAME], dmLogPixels: WORD, dmBitsPerPel: DWORD, dmPelsWidth: DWORD, dmPelsHeight: DWORD, u2: DEVMODE_u2, dmDisplayFrequency: DWORD, dmICMMethod: DWORD, dmICMIntent: DWORD, dmMediaType: DWORD, dmDitherType: DWORD, dmReserved1: DWORD, dmReserved2: DWORD, dmPanningWidth: DWORD, dmPanningHeight: DWORD, }} pub type PDEVMODEA = *mut DEVMODEA; pub type NPDEVMODEA = *mut DEVMODEA; pub type LPDEVMODEA = *mut DEVMODEA; STRUCT!{struct DEVMODEW { dmDeviceName: [WCHAR; CCHDEVICENAME], dmSpecVersion: WORD, dmDriverVersion: WORD, dmSize: WORD, dmDriverExtra: WORD, dmFields: DWORD, u1: DEVMODE_u1, dmColor: c_short, dmDuplex: c_short, dmYResolution: c_short, dmTTOption: c_short, dmCollate: c_short, dmFormName: [WCHAR; CCHFORMNAME], dmLogPixels: WORD, dmBitsPerPel: DWORD, dmPelsWidth: DWORD, dmPelsHeight: DWORD, u2: DEVMODE_u2, dmDisplayFrequency: DWORD, dmICMMethod: DWORD, dmICMIntent: DWORD, dmMediaType: DWORD, dmDitherType: DWORD, dmReserved1: DWORD, dmReserved2: DWORD, dmPanningWidth: DWORD, dmPanningHeight: DWORD, }} pub type PDEVMODEW = *mut DEVMODEW; pub type NPDEVMODEW = *mut DEVMODEW; pub type LPDEVMODEW = *mut DEVMODEW; pub const DM_SPECVERSION: DWORD = 0x0401; pub const DM_ORIENTATION: DWORD = 0x00000001; pub const DM_PAPERSIZE: DWORD = 0x00000002; pub const DM_PAPERLENGTH: DWORD = 0x00000004; pub const DM_PAPERWIDTH: DWORD = 0x00000008; pub const DM_SCALE: DWORD = 0x00000010; pub const DM_POSITION: DWORD = 0x00000020; pub const DM_NUP: DWORD = 0x00000040; pub const DM_DISPLAYORIENTATION: DWORD = 0x00000080; pub const DM_COPIES: DWORD = 0x00000100; pub const DM_DEFAULTSOURCE: DWORD = 0x00000200; pub const DM_PRINTQUALITY: DWORD = 0x00000400; pub const DM_COLOR: DWORD = 0x00000800; pub const DM_DUPLEX: DWORD = 0x00001000; pub const DM_YRESOLUTION: DWORD = 0x00002000; pub const DM_TTOPTION: DWORD = 0x00004000; pub const DM_COLLATE: DWORD = 0x00008000; pub const DM_FORMNAME: DWORD = 0x00010000; pub const DM_LOGPIXELS: DWORD = 0x00020000; pub const DM_BITSPERPEL: DWORD = 0x00040000; pub const DM_PELSWIDTH: DWORD = 0x00080000; pub const DM_PELSHEIGHT: DWORD = 0x00100000; pub const DM_DISPLAYFLAGS: DWORD = 0x00200000; pub const DM_DISPLAYFREQUENCY: DWORD = 0x00400000; pub const DM_ICMMETHOD: DWORD = 0x00800000; pub const DM_ICMINTENT: DWORD = 0x01000000; pub const DM_MEDIATYPE: DWORD = 0x02000000; pub const DM_DITHERTYPE: DWORD = 0x04000000; pub const DM_PANNINGWIDTH: DWORD = 0x08000000; pub const DM_PANNINGHEIGHT: DWORD = 0x10000000; pub const DM_DISPLAYFIXEDOUTPUT: DWORD = 0x20000000; pub const DMORIENT_PORTRAIT: DWORD = 1; pub const DMORIENT_LANDSCAPE: DWORD = 2; pub const DMPAPER_FIRST: DWORD = DMPAPER_LETTER; pub const DMPAPER_LETTER: DWORD = 1; pub const DMPAPER_LETTERSMALL: DWORD = 2; pub const DMPAPER_TABLOID: DWORD = 3; pub const DMPAPER_LEDGER: DWORD = 4; pub const DMPAPER_LEGAL: DWORD = 5; pub const DMPAPER_STATEMENT: DWORD = 6; pub const DMPAPER_EXECUTIVE: DWORD = 7; pub const DMPAPER_A3: DWORD = 8; pub const DMPAPER_A4: DWORD = 9; pub const DMPAPER_A4SMALL: DWORD = 10; pub const DMPAPER_A5: DWORD = 11; pub const DMPAPER_B4: DWORD = 12; pub const DMPAPER_B5: DWORD = 13; pub const DMPAPER_FOLIO: DWORD = 14; pub const DMPAPER_QUARTO: DWORD = 15; pub const DMPAPER_10X14: DWORD = 16; pub const DMPAPER_11X17: DWORD = 17; pub const DMPAPER_NOTE: DWORD = 18; pub const DMPAPER_ENV_9: DWORD = 19; pub const DMPAPER_ENV_10: DWORD = 20; pub const DMPAPER_ENV_11: DWORD = 21; pub const DMPAPER_ENV_12: DWORD = 22; pub const DMPAPER_ENV_14: DWORD = 23; pub const DMPAPER_CSHEET: DWORD = 24; pub const DMPAPER_DSHEET: DWORD = 25; pub const DMPAPER_ESHEET: DWORD = 26; pub const DMPAPER_ENV_DL: DWORD = 27; pub const DMPAPER_ENV_C5: DWORD = 28; pub const DMPAPER_ENV_C3: DWORD = 29; pub const DMPAPER_ENV_C4: DWORD = 30; pub const DMPAPER_ENV_C6: DWORD = 31; pub const DMPAPER_ENV_C65: DWORD = 32; pub const DMPAPER_ENV_B4: DWORD = 33; pub const DMPAPER_ENV_B5: DWORD = 34; pub const DMPAPER_ENV_B6: DWORD = 35; pub const DMPAPER_ENV_ITALY: DWORD = 36; pub const DMPAPER_ENV_MONARCH: DWORD = 37; pub const DMPAPER_ENV_PERSONAL: DWORD = 38; pub const DMPAPER_FANFOLD_US: DWORD = 39; pub const DMPAPER_FANFOLD_STD_GERMAN: DWORD = 40; pub const DMPAPER_FANFOLD_LGL_GERMAN: DWORD = 41; pub const DMPAPER_ISO_B4: DWORD = 42; pub const DMPAPER_JAPANESE_POSTCARD: DWORD = 43; pub const DMPAPER_9X11: DWORD = 44; pub const DMPAPER_10X11: DWORD = 45; pub const DMPAPER_15X11: DWORD = 46; pub const DMPAPER_ENV_INVITE: DWORD = 47; pub const DMPAPER_RESERVED_48: DWORD = 48; pub const DMPAPER_RESERVED_49: DWORD = 49; pub const DMPAPER_LETTER_EXTRA: DWORD = 50; pub const DMPAPER_LEGAL_EXTRA: DWORD = 51; pub const DMPAPER_TABLOID_EXTRA: DWORD = 52; pub const DMPAPER_A4_EXTRA: DWORD = 53; pub const DMPAPER_LETTER_TRANSVERSE: DWORD = 54; pub const DMPAPER_A4_TRANSVERSE: DWORD = 55; pub const DMPAPER_LETTER_EXTRA_TRANSVERSE: DWORD = 56; pub const DMPAPER_A_PLUS: DWORD = 57; pub const DMPAPER_B_PLUS: DWORD = 58; pub const DMPAPER_LETTER_PLUS: DWORD = 59; pub const DMPAPER_A4_PLUS: DWORD = 60; pub const DMPAPER_A5_TRANSVERSE: DWORD = 61; pub const DMPAPER_B5_TRANSVERSE: DWORD = 62; pub const DMPAPER_A3_EXTRA: DWORD = 63; pub const DMPAPER_A5_EXTRA: DWORD = 64; pub const DMPAPER_B5_EXTRA: DWORD = 65; pub const DMPAPER_A2: DWORD = 66; pub const DMPAPER_A3_TRANSVERSE: DWORD = 67; pub const DMPAPER_A3_EXTRA_TRANSVERSE: DWORD = 68; pub const DMPAPER_DBL_JAPANESE_POSTCARD: DWORD = 69; pub const DMPAPER_A6: DWORD = 70; pub const DMPAPER_JENV_KAKU2: DWORD = 71; pub const DMPAPER_JENV_KAKU3: DWORD = 72; pub const DMPAPER_JENV_CHOU3: DWORD = 73; pub const DMPAPER_JENV_CHOU4: DWORD = 74; pub const DMPAPER_LETTER_ROTATED: DWORD = 75; pub const DMPAPER_A3_ROTATED: DWORD = 76; pub const DMPAPER_A4_ROTATED: DWORD = 77; pub const DMPAPER_A5_ROTATED: DWORD = 78; pub const DMPAPER_B4_JIS_ROTATED: DWORD = 79; pub const DMPAPER_B5_JIS_ROTATED: DWORD = 80; pub const DMPAPER_JAPANESE_POSTCARD_ROTATED: DWORD = 81; pub const DMPAPER_DBL_JAPANESE_POSTCARD_ROTATED: DWORD = 82; pub const DMPAPER_A6_ROTATED: DWORD = 83; pub const DMPAPER_JENV_KAKU2_ROTATED: DWORD = 84; pub const DMPAPER_JENV_KAKU3_ROTATED: DWORD = 85; pub const DMPAPER_JENV_CHOU3_ROTATED: DWORD = 86; pub const DMPAPER_JENV_CHOU4_ROTATED: DWORD = 87; pub const DMPAPER_B6_JIS: DWORD = 88; pub const DMPAPER_B6_JIS_ROTATED: DWORD = 89; pub const DMPAPER_12X11: DWORD = 90; pub const DMPAPER_JENV_YOU4: DWORD = 91; pub const DMPAPER_JENV_YOU4_ROTATED: DWORD = 92; pub const DMPAPER_P16K: DWORD = 93; pub const DMPAPER_P32K: DWORD = 94; pub const DMPAPER_P32KBIG: DWORD = 95; pub const DMPAPER_PENV_1: DWORD = 96; pub const DMPAPER_PENV_2: DWORD = 97; pub const DMPAPER_PENV_3: DWORD = 98; pub const DMPAPER_PENV_4: DWORD = 99; pub const DMPAPER_PENV_5: DWORD = 100; pub const DMPAPER_PENV_6: DWORD = 101; pub const DMPAPER_PENV_7: DWORD = 102; pub const DMPAPER_PENV_8: DWORD = 103; pub const DMPAPER_PENV_9: DWORD = 104; pub const DMPAPER_PENV_10: DWORD = 105; pub const DMPAPER_P16K_ROTATED: DWORD = 106; pub const DMPAPER_P32K_ROTATED: DWORD = 107; pub const DMPAPER_P32KBIG_ROTATED: DWORD = 108; pub const DMPAPER_PENV_1_ROTATED: DWORD = 109; pub const DMPAPER_PENV_2_ROTATED: DWORD = 110; pub const DMPAPER_PENV_3_ROTATED: DWORD = 111; pub const DMPAPER_PENV_4_ROTATED: DWORD = 112; pub const DMPAPER_PENV_5_ROTATED: DWORD = 113; pub const DMPAPER_PENV_6_ROTATED: DWORD = 114; pub const DMPAPER_PENV_7_ROTATED: DWORD = 115; pub const DMPAPER_PENV_8_ROTATED: DWORD = 116; pub const DMPAPER_PENV_9_ROTATED: DWORD = 117; pub const DMPAPER_PENV_10_ROTATED: DWORD = 118; pub const DMPAPER_LAST: DWORD = DMPAPER_PENV_10_ROTATED; pub const DMPAPER_USER: DWORD = 256; pub const DMBIN_FIRST: DWORD = DMBIN_UPPER; pub const DMBIN_UPPER: DWORD = 1; pub const DMBIN_ONLYONE: DWORD = 1; pub const DMBIN_LOWER: DWORD = 2; pub const DMBIN_MIDDLE: DWORD = 3; pub const DMBIN_MANUAL: DWORD = 4; pub const DMBIN_ENVELOPE: DWORD = 5; pub const DMBIN_ENVMANUAL: DWORD = 6; pub const DMBIN_AUTO: DWORD = 7; pub const DMBIN_TRACTOR: DWORD = 8; pub const DMBIN_SMALLFMT: DWORD = 9; pub const DMBIN_LARGEFMT: DWORD = 10; pub const DMBIN_LARGECAPACITY: DWORD = 11; pub const DMBIN_CASSETTE: DWORD = 14; pub const DMBIN_FORMSOURCE: DWORD = 15; pub const DMBIN_LAST: DWORD = DMBIN_FORMSOURCE; pub const DMBIN_USER: DWORD = 256; pub const DMRES_DRAFT: c_int = -1; pub const DMRES_LOW: c_int = -2; pub const DMRES_MEDIUM: c_int = -3; pub const DMRES_HIGH: c_int = -4; pub const DMCOLOR_MONOCHROME: DWORD = 1; pub const DMCOLOR_COLOR: DWORD = 2; pub const DMDUP_SIMPLEX: DWORD = 1; pub const DMDUP_VERTICAL: DWORD = 2; pub const DMDUP_HORIZONTAL: DWORD = 3; pub const DMTT_BITMAP: DWORD = 1; pub const DMTT_DOWNLOAD: DWORD = 2; pub const DMTT_SUBDEV: DWORD = 3; pub const DMTT_DOWNLOAD_OUTLINE: DWORD = 4; pub const DMCOLLATE_FALSE: DWORD = 0; pub const DMCOLLATE_TRUE: DWORD = 1; pub const DMDO_DEFAULT: DWORD = 0; pub const DMDO_90: DWORD = 1; pub const DMDO_180: DWORD = 2; pub const DMDO_270: DWORD = 3; pub const DMDFO_DEFAULT: DWORD = 0; pub const DMDFO_STRETCH: DWORD = 1; pub const DMDFO_CENTER: DWORD = 2; pub const DM_INTERLACED: DWORD = 0x00000002; pub const DMDISPLAYFLAGS_TEXTMODE: DWORD = 0x00000004; pub const DMNUP_SYSTEM: DWORD = 1; pub const DMNUP_ONEUP: DWORD = 2; pub const DMICMMETHOD_NONE: DWORD = 1; pub const DMICMMETHOD_SYSTEM: DWORD = 2; pub const DMICMMETHOD_DRIVER: DWORD = 3; pub const DMICMMETHOD_DEVICE: DWORD = 4; pub const DMICMMETHOD_USER: DWORD = 256; pub const DMICM_SATURATE: DWORD = 1; pub const DMICM_CONTRAST: DWORD = 2; pub const DMICM_COLORIMETRIC: DWORD = 3; pub const DMICM_ABS_COLORIMETRIC: DWORD = 4; pub const DMICM_USER: DWORD = 256; pub const DMMEDIA_STANDARD: DWORD = 1; pub const DMMEDIA_TRANSPARENCY: DWORD = 2; pub const DMMEDIA_GLOSSY: DWORD = 3; pub const DMMEDIA_USER: DWORD = 256; pub const DMDITHER_NONE: DWORD = 1; pub const DMDITHER_COARSE: DWORD = 2; pub const DMDITHER_FINE: DWORD = 3; pub const DMDITHER_LINEART: DWORD = 4; pub const DMDITHER_ERRORDIFFUSION: DWORD = 5; pub const DMDITHER_RESERVED6: DWORD = 6; pub const DMDITHER_RESERVED7: DWORD = 7; pub const DMDITHER_RESERVED8: DWORD = 8; pub const DMDITHER_RESERVED9: DWORD = 9; pub const DMDITHER_GRAYSCALE: DWORD = 10; pub const DMDITHER_USER: DWORD = 256; STRUCT!{struct DISPLAY_DEVICEA { cb: DWORD, DeviceName: [CHAR; 32], DeviceString: [CHAR; 128], StateFlags: DWORD, DeviceID: [CHAR; 128], DeviceKey: [CHAR; 128], }} pub type PDISPLAY_DEVICEA = *mut DISPLAY_DEVICEA; pub type LPDISPLAY_DEVICEA = *mut DISPLAY_DEVICEA; STRUCT!{struct DISPLAY_DEVICEW { cb: DWORD, DeviceName: [WCHAR; 32], DeviceString: [WCHAR; 128], StateFlags: DWORD, DeviceID: [WCHAR; 128], DeviceKey: [WCHAR; 128], }} pub type PDISPLAY_DEVICEW = *mut DISPLAY_DEVICEW; pub type LPDISPLAY_DEVICEW = *mut DISPLAY_DEVICEW; pub const DISPLAY_DEVICE_ATTACHED_TO_DESKTOP: DWORD = 0x00000001; pub const DISPLAY_DEVICE_MULTI_DRIVER: DWORD = 0x00000002; pub const DISPLAY_DEVICE_PRIMARY_DEVICE: DWORD = 0x00000004; pub const DISPLAY_DEVICE_MIRRORING_DRIVER: DWORD = 0x00000008; pub const DISPLAY_DEVICE_VGA_COMPATIBLE: DWORD = 0x00000010; pub const DISPLAY_DEVICE_REMOVABLE: DWORD = 0x00000020; pub const DISPLAY_DEVICE_ACC_DRIVER: DWORD = 0x00000040; pub const DISPLAY_DEVICE_MODESPRUNED: DWORD = 0x08000000; pub const DISPLAY_DEVICE_RDPUDD: DWORD = 0x01000000; pub const DISPLAY_DEVICE_REMOTE: DWORD = 0x04000000; pub const DISPLAY_DEVICE_DISCONNECT: DWORD = 0x02000000; pub const DISPLAY_DEVICE_TS_COMPATIBLE: DWORD = 0x00200000; pub const DISPLAY_DEVICE_UNSAFE_MODES_ON: DWORD = 0x00080000; pub const DISPLAY_DEVICE_ACTIVE: DWORD = 0x00000001; pub const DISPLAY_DEVICE_ATTACHED: DWORD = 0x00000002; pub const DISPLAYCONFIG_MAXPATH: usize = 1024; STRUCT!{struct DISPLAYCONFIG_RATIONAL { Numerator: UINT32, Denominator: UINT32, }} ENUM!{enum DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY { DISPLAYCONFIG_OUTPUT_TECHNOLOGY_OTHER = -1i32 as u32, DISPLAYCONFIG_OUTPUT_TECHNOLOGY_HD15 = 0, DISPLAYCONFIG_OUTPUT_TECHNOLOGY_SVIDEO = 1, DISPLAYCONFIG_OUTPUT_TECHNOLOGY_COMPOSITE_VIDEO = 2, DISPLAYCONFIG_OUTPUT_TECHNOLOGY_COMPONENT_VIDEO = 3, DISPLAYCONFIG_OUTPUT_TECHNOLOGY_DVI = 4, DISPLAYCONFIG_OUTPUT_TECHNOLOGY_HDMI = 5, DISPLAYCONFIG_OUTPUT_TECHNOLOGY_LVDS = 6, DISPLAYCONFIG_OUTPUT_TECHNOLOGY_D_JPN = 8, DISPLAYCONFIG_OUTPUT_TECHNOLOGY_SDI = 9, DISPLAYCONFIG_OUTPUT_TECHNOLOGY_DISPLAYPORT_EXTERNAL = 10, DISPLAYCONFIG_OUTPUT_TECHNOLOGY_DISPLAYPORT_EMBEDDED = 11, DISPLAYCONFIG_OUTPUT_TECHNOLOGY_UDI_EXTERNAL = 12, DISPLAYCONFIG_OUTPUT_TECHNOLOGY_UDI_EMBEDDED = 13, DISPLAYCONFIG_OUTPUT_TECHNOLOGY_SDTVDONGLE = 14, DISPLAYCONFIG_OUTPUT_TECHNOLOGY_MIRACAST = 15, DISPLAYCONFIG_OUTPUT_TECHNOLOGY_INDIRECT_WIRED = 16, DISPLAYCONFIG_OUTPUT_TECHNOLOGY_INTERNAL = 0x80000000, DISPLAYCONFIG_OUTPUT_TECHNOLOGY_FORCE_UINT32 = 0xFFFFFFFF, }} ENUM!{enum DISPLAYCONFIG_SCANLINE_ORDERING { DISPLAYCONFIG_SCANLINE_ORDERING_UNSPECIFIED = 0, DISPLAYCONFIG_SCANLINE_ORDERING_PROGRESSIVE = 1, DISPLAYCONFIG_SCANLINE_ORDERING_INTERLACED = 2, DISPLAYCONFIG_SCANLINE_ORDERING_INTERLACED_UPPERFIELDFIRST = DISPLAYCONFIG_SCANLINE_ORDERING_INTERLACED, DISPLAYCONFIG_SCANLINE_ORDERING_INTERLACED_LOWERFIELDFIRST = 3, DISPLAYCONFIG_SCANLINE_ORDERING_FORCE_UINT32 = 0xFFFFFFFF, }} STRUCT!{struct DISPLAYCONFIG_2DREGION { cx: UINT32, cy: UINT32, }} STRUCT!{struct DISPLAYCONFIG_VIDEO_SIGNAL_INFO_AdditionalSignalInfo { bitfield: UINT32, }} BITFIELD!{DISPLAYCONFIG_VIDEO_SIGNAL_INFO_AdditionalSignalInfo bitfield: UINT32 [ videoStandard set_videoStandard[0..16], vSyncFreqDivider set_vSyncFreqDivider[16..22], ]} UNION!{union DISPLAYCONFIG_VIDEO_SIGNAL_INFO_u { [u32; 1], AdditionalSignalInfo AdditionalSignalInfo_mut: DISPLAYCONFIG_VIDEO_SIGNAL_INFO_AdditionalSignalInfo, videoStandard videoStandard_mut: UINT32, }} STRUCT!{struct DISPLAYCONFIG_VIDEO_SIGNAL_INFO { pixelRate: UINT64, hSyncFreq: DISPLAYCONFIG_RATIONAL, vSyncFreq: DISPLAYCONFIG_RATIONAL, activeSize: DISPLAYCONFIG_2DREGION, totalSize: DISPLAYCONFIG_2DREGION, u: DISPLAYCONFIG_VIDEO_SIGNAL_INFO_u, scanLineOrdering: DISPLAYCONFIG_SCANLINE_ORDERING, }} ENUM!{enum DISPLAYCONFIG_SCALING { DISPLAYCONFIG_SCALING_IDENTITY = 1, DISPLAYCONFIG_SCALING_CENTERED = 2, DISPLAYCONFIG_SCALING_STRETCHED = 3, DISPLAYCONFIG_SCALING_ASPECTRATIOCENTEREDMAX = 4, DISPLAYCONFIG_SCALING_CUSTOM = 5, DISPLAYCONFIG_SCALING_PREFERRED = 128, DISPLAYCONFIG_SCALING_FORCE_UINT32 = 0xFFFFFFFF, }} ENUM!{enum DISPLAYCONFIG_ROTATION { DISPLAYCONFIG_ROTATION_IDENTITY = 1, DISPLAYCONFIG_ROTATION_ROTATE90 = 2, DISPLAYCONFIG_ROTATION_ROTATE180 = 3, DISPLAYCONFIG_ROTATION_ROTATE270 = 4, DISPLAYCONFIG_ROTATION_FORCE_UINT32 = 0xFFFFFFFF, }} ENUM!{enum DISPLAYCONFIG_MODE_INFO_TYPE { DISPLAYCONFIG_MODE_INFO_TYPE_SOURCE = 1, DISPLAYCONFIG_MODE_INFO_TYPE_TARGET = 2, DISPLAYCONFIG_MODE_INFO_TYPE_DESKTOP_IMAGE = 3, DISPLAYCONFIG_MODE_INFO_TYPE_FORCE_UINT32 = 0xFFFFFFFF, }} ENUM!{enum DISPLAYCONFIG_PIXELFORMAT { DISPLAYCONFIG_PIXELFORMAT_8BPP = 1, DISPLAYCONFIG_PIXELFORMAT_16BPP = 2, DISPLAYCONFIG_PIXELFORMAT_24BPP = 3, DISPLAYCONFIG_PIXELFORMAT_32BPP = 4, DISPLAYCONFIG_PIXELFORMAT_NONGDI = 5, DISPLAYCONFIG_PIXELFORMAT_FORCE_UINT32 = 0xffffffff, }} STRUCT!{struct DISPLAYCONFIG_SOURCE_MODE { width: UINT32, height: UINT32, pixelFormat: DISPLAYCONFIG_PIXELFORMAT, position: POINTL, }} STRUCT!{struct DISPLAYCONFIG_TARGET_MODE { targetVideoSignalInfo: DISPLAYCONFIG_VIDEO_SIGNAL_INFO, }} STRUCT!{struct DISPLAYCONFIG_DESKTOP_IMAGE_INFO { PathSourceSize: POINTL, DesktopImageRegion: RECTL, DesktopImageClip: RECTL, }} UNION!{union DISPLAYCONFIG_MODE_INFO_u { [u64; 6], targetMode targetMode_mut: DISPLAYCONFIG_TARGET_MODE, sourceMode sourceMode_mut: DISPLAYCONFIG_SOURCE_MODE, desktopImageInfo desktopImageInfo_mut: DISPLAYCONFIG_DESKTOP_IMAGE_INFO, }} STRUCT!{struct DISPLAYCONFIG_MODE_INFO { infoType: DISPLAYCONFIG_MODE_INFO_TYPE, id: UINT32, adapterId: LUID, u: DISPLAYCONFIG_MODE_INFO_u, }} pub const DISPLAYCONFIG_PATH_MODE_IDX_INVALID: DWORD = 0xffffffff; pub const DISPLAYCONFIG_PATH_TARGET_MODE_IDX_INVALID: DWORD = 0xffff; pub const DISPLAYCONFIG_PATH_DESKTOP_IMAGE_IDX_INVALID: DWORD = 0xffff; pub const DISPLAYCONFIG_PATH_SOURCE_MODE_IDX_INVALID: DWORD = 0xffff; pub const DISPLAYCONFIG_PATH_CLONE_GROUP_INVALID: DWORD = 0xffff; STRUCT!{struct DISPLAYCONFIG_PATH_SOURCE_INFO { adapterId: LUID, id: UINT32, modeInfoIdx: UINT32, statusFlags: UINT32, }} BITFIELD!{DISPLAYCONFIG_PATH_SOURCE_INFO modeInfoIdx: UINT32 [ cloneGroupId set_cloneGroupId[0..16], sourceModeInfoIdx set_sourceModeInfoIdx[16..32], ]} pub const DISPLAYCONFIG_SOURCE_IN_USE: DWORD = 0x00000001; STRUCT!{struct DISPLAYCONFIG_PATH_TARGET_INFO { adapterId: LUID, id: UINT32, modeInfoIdx: UINT32, outputTechnology: DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY, rotation: DISPLAYCONFIG_ROTATION, scaling: DISPLAYCONFIG_SCALING, refreshRate: DISPLAYCONFIG_RATIONAL, scanLineOrdering: DISPLAYCONFIG_SCANLINE_ORDERING, targetAvailable: BOOL, statusFlags: UINT32, }} BITFIELD!{DISPLAYCONFIG_PATH_TARGET_INFO modeInfoIdx: UINT32 [ desktopModeInfoIdx set_desktopModeInfoIdx[0..16], targetModeInfoIdx set_targetModeInfoIdx[16..32], ]} pub const DISPLAYCONFIG_TARGET_IN_USE: DWORD = 0x00000001; pub const DISPLAYCONFIG_TARGET_FORCIBLE: DWORD = 0x00000002; pub const DISPLAYCONFIG_TARGET_FORCED_AVAILABILITY_BOOT: DWORD = 0x00000004; pub const DISPLAYCONFIG_TARGET_FORCED_AVAILABILITY_PATH: DWORD = 0x00000008; pub const DISPLAYCONFIG_TARGET_FORCED_AVAILABILITY_SYSTEM: DWORD = 0x00000010; pub const DISPLAYCONFIG_TARGET_IS_HMD: DWORD = 0x00000020; STRUCT!{struct DISPLAYCONFIG_PATH_INFO { sourceInfo: DISPLAYCONFIG_PATH_SOURCE_INFO, targetInfo: DISPLAYCONFIG_PATH_TARGET_INFO, flags: UINT32, }} pub const DISPLAYCONFIG_PATH_ACTIVE: DWORD = 0x00000001; pub const DISPLAYCONFIG_PATH_PREFERRED_UNSCALED: DWORD = 0x00000004; pub const DISPLAYCONFIG_PATH_SUPPORT_VIRTUAL_MODE: DWORD = 0x00000008; pub const DISPLAYCONFIG_PATH_VALID_FLAGS: DWORD = 0x0000000D; ENUM!{enum DISPLAYCONFIG_TOPOLOGY_ID { DISPLAYCONFIG_TOPOLOGY_INTERNAL = 0x00000001, DISPLAYCONFIG_TOPOLOGY_CLONE = 0x00000002, DISPLAYCONFIG_TOPOLOGY_EXTEND = 0x00000004, DISPLAYCONFIG_TOPOLOGY_EXTERNAL = 0x00000008, DISPLAYCONFIG_TOPOLOGY_FORCE_UINT32 = 0xFFFFFFFF, }} ENUM!{enum DISPLAYCONFIG_DEVICE_INFO_TYPE { DISPLAYCONFIG_DEVICE_INFO_GET_SOURCE_NAME = 1, DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_NAME = 2, DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_PREFERRED_MODE = 3, DISPLAYCONFIG_DEVICE_INFO_GET_ADAPTER_NAME = 4, DISPLAYCONFIG_DEVICE_INFO_SET_TARGET_PERSISTENCE = 5, DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_BASE_TYPE = 6, DISPLAYCONFIG_DEVICE_INFO_GET_SUPPORT_VIRTUAL_RESOLUTION = 7, DISPLAYCONFIG_DEVICE_INFO_SET_SUPPORT_VIRTUAL_RESOLUTION = 8, DISPLAYCONFIG_DEVICE_INFO_GET_ADVANCED_COLOR_INFO = 9, DISPLAYCONFIG_DEVICE_INFO_SET_ADVANCED_COLOR_STATE = 10, DISPLAYCONFIG_DEVICE_INFO_FORCE_UINT32 = 0xFFFFFFFF, }} STRUCT!{struct DISPLAYCONFIG_DEVICE_INFO_HEADER { _type: DISPLAYCONFIG_DEVICE_INFO_TYPE, size: UINT32, adapterId: LUID, id: UINT32, }} STRUCT!{struct DISPLAYCONFIG_SOURCE_DEVICE_NAME { header: DISPLAYCONFIG_DEVICE_INFO_HEADER, viewGdiDeviceName: [WCHAR; CCHDEVICENAME], }} STRUCT!{struct DISPLAYCONFIG_TARGET_DEVICE_NAME_FLAGS { value: UINT32, }} BITFIELD!{DISPLAYCONFIG_TARGET_DEVICE_NAME_FLAGS value: UINT32 [ friendlyNameFromEdid set_friendlyNameFromEdid[0..1], friendlyNameForced set_friendlyNameForced[1..2], edidIdsValid set_edidIdsValid[2..3], ]} STRUCT!{struct DISPLAYCONFIG_TARGET_DEVICE_NAME { header: DISPLAYCONFIG_DEVICE_INFO_HEADER, flags: DISPLAYCONFIG_TARGET_DEVICE_NAME_FLAGS, outputTechnology: DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY, edidManufactureId: UINT16, edidProductCodeId: UINT16, connectorInstance: UINT32, monitorFriendlyDeviceName: [WCHAR; 64], monitorDevicePath: [WCHAR; 128], }} STRUCT!{struct DISPLAYCONFIG_TARGET_PREFERRED_MODE { header: DISPLAYCONFIG_DEVICE_INFO_HEADER, width: UINT32, height: UINT32, targetMode: DISPLAYCONFIG_TARGET_MODE, }} STRUCT!{struct DISPLAYCONFIG_ADAPTER_NAME { header: DISPLAYCONFIG_DEVICE_INFO_HEADER, adapterDevicePath: [WCHAR; 128], }} STRUCT!{struct DISPLAYCONFIG_TARGET_BASE_TYPE { header: DISPLAYCONFIG_DEVICE_INFO_HEADER, baseOutputTechnology: DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY, }} STRUCT!{struct DISPLAYCONFIG_SET_TARGET_PERSISTENCE { header: DISPLAYCONFIG_DEVICE_INFO_HEADER, value: UINT32, }} BITFIELD!{DISPLAYCONFIG_SET_TARGET_PERSISTENCE value: UINT32 [ bootPersistenceOn set_bootPersistenceOn[0..1], ]} STRUCT!{struct DISPLAYCONFIG_SUPPORT_VIRTUAL_RESOLUTION { header: DISPLAYCONFIG_DEVICE_INFO_HEADER, value: UINT32, }} BITFIELD!{DISPLAYCONFIG_SUPPORT_VIRTUAL_RESOLUTION value: UINT32 [ disableMonitorVirtualResolution set_disableMonitorVirtualResolution[0..1], ]} ENUM!{enum DISPLAYCONFIG_COLOR_ENCODING { DISPLAYCONFIG_COLOR_ENCODING_RGB = 0, DISPLAYCONFIG_COLOR_ENCODING_YCBCR444 = 1, DISPLAYCONFIG_COLOR_ENCODING_YCBCR422 = 2, DISPLAYCONFIG_COLOR_ENCODING_YCBCR420 = 3, DISPLAYCONFIG_COLOR_ENCODING_INTENSITY = 4, DISPLAYCONFIG_COLOR_ENCODING_FORCE_UINT32 = 0xFFFFFFFF, }} STRUCT!{struct DISPLAYCONFIG_GET_ADVANCED_COLOR_INFO { header: DISPLAYCONFIG_DEVICE_INFO_HEADER, value: UINT32, colorEncoding: DISPLAYCONFIG_COLOR_ENCODING, bitsPerColorChannel: UINT32, }} BITFIELD!{DISPLAYCONFIG_GET_ADVANCED_COLOR_INFO value: UINT32 [ advancedColorSupported set_advancedColorSupported[0..1], advancedColorEnabled set_advancedColorEnabled[1..2], reserved set_reserved[2..32], ]} STRUCT!{struct DISPLAYCONFIG_SET_ADVANCED_COLOR_STATE { header: DISPLAYCONFIG_DEVICE_INFO_HEADER, value: UINT32, }} BITFIELD!{DISPLAYCONFIG_SET_ADVANCED_COLOR_STATE value: UINT32 [ enableAdvancedColor set_enableAdvancedColor[0..1], reserved set_reserved[1..32], ]} pub const QDC_ALL_PATHS: DWORD = 0x00000001; pub const QDC_ONLY_ACTIVE_PATHS: DWORD = 0x00000002; pub const QDC_DATABASE_CURRENT: DWORD = 0x00000004; pub const QDC_VIRTUAL_MODE_AWARE: DWORD = 0x00000010; pub const QDC_INCLUDE_HMD: DWORD = 0x00000020; pub const SDC_TOPOLOGY_INTERNAL: DWORD = 0x00000001; pub const SDC_TOPOLOGY_CLONE: DWORD = 0x00000002; pub const SDC_TOPOLOGY_EXTEND: DWORD = 0x00000004; pub const SDC_TOPOLOGY_EXTERNAL: DWORD = 0x00000008; pub const SDC_TOPOLOGY_SUPPLIED: DWORD = 0x00000010; pub const SDC_USE_DATABASE_CURRENT: DWORD = SDC_TOPOLOGY_INTERNAL | SDC_TOPOLOGY_CLONE | SDC_TOPOLOGY_EXTEND | SDC_TOPOLOGY_EXTERNAL; pub const SDC_USE_SUPPLIED_DISPLAY_CONFIG: DWORD = 0x00000020; pub const SDC_VALIDATE: DWORD = 0x00000040; pub const SDC_APPLY: DWORD = 0x00000080; pub const SDC_NO_OPTIMIZATION: DWORD = 0x00000100; pub const SDC_SAVE_TO_DATABASE: DWORD = 0x00000200; pub const SDC_ALLOW_CHANGES: DWORD = 0x00000400; pub const SDC_PATH_PERSIST_IF_REQUIRED: DWORD = 0x00000800; pub const SDC_FORCE_MODE_ENUMERATION: DWORD = 0x00001000; pub const SDC_ALLOW_PATH_ORDER_CHANGES: DWORD = 0x00002000; pub const SDC_VIRTUAL_MODE_AWARE: DWORD = 0x00008000; pub const RDH_RECTANGLES: DWORD = 1; STRUCT!{struct RGNDATAHEADER { dwSize: DWORD, iType: DWORD, nCount: DWORD, nRgnSize: DWORD, rcBound: RECT, }} pub type PRGNDATAHEADER = *mut RGNDATAHEADER; STRUCT!{struct RGNDATA { rdh: RGNDATAHEADER, Buffer: [c_char; 1], }} pub type PRGNDATA = *mut RGNDATA; pub type NPRGNDATA = *mut RGNDATA; pub type LPRGNDATA = *mut RGNDATA; pub const SYSRGN: INT = 4; STRUCT!{struct ABC { abcA: c_int, abcB: UINT, abcC: c_int, }} pub type PABC = *mut ABC; pub type NPABC = *mut ABC; pub type LPABC = *mut ABC; STRUCT!{struct ABCFLOAT { abcfA: FLOAT, abcfB: FLOAT, abcfC: FLOAT, }} pub type PABCFLOAT = *mut ABCFLOAT; pub type NPABCFLOAT = *mut ABCFLOAT; pub type LPABCFLOAT = *mut ABCFLOAT; STRUCT!{struct OUTLINETEXTMETRICA { otmSize: UINT, otmTextMetrics: TEXTMETRICA, otmFiller: BYTE, otmPanoseNumber: PANOSE, otmfsSelection: UINT, otmfsType: UINT, otmsCharSlopeRise: c_int, otmsCharSlopeRun: c_int, otmItalicAngle: c_int, otmEMSquare: UINT, otmAscent: c_int, otmDescent: c_int, otmLineGap: UINT, otmsCapEmHeight: UINT, otmsXHeight: UINT, otmrcFontBox: RECT, otmMacAscent: c_int, otmMacDescent: c_int, otmMacLineGap: UINT, otmusMinimumPPEM: UINT, otmptSubscriptSize: POINT, otmptSubscriptOffset: POINT, otmptSuperscriptSize: POINT, otmptSuperscriptOffset: POINT, otmsStrikeoutSize: UINT, otmsStrikeoutPosition: c_int, otmsUnderscoreSize: c_int, otmsUnderscorePosition: c_int, otmpFamilyName: PSTR, otmpFaceName: PSTR, otmpStyleName: PSTR, otmpFullName: PSTR, }} pub type POUTLINETEXTMETRICA = *mut OUTLINETEXTMETRICA; pub type NPOUTLINETEXTMETRICA = *mut OUTLINETEXTMETRICA; pub type LPOUTLINETEXTMETRICA = *mut OUTLINETEXTMETRICA; STRUCT!{struct OUTLINETEXTMETRICW { otmSize: UINT, otmTextMetrics: TEXTMETRICW, otmFiller: BYTE, otmPanoseNumber: PANOSE, otmfsSelection: UINT, otmfsType: UINT, otmsCharSlopeRise: c_int, otmsCharSlopeRun: c_int, otmItalicAngle: c_int, otmEMSquare: UINT, otmAscent: c_int, otmDescent: c_int, otmLineGap: UINT, otmsCapEmHeight: UINT, otmsXHeight: UINT, otmrcFontBox: RECT, otmMacAscent: c_int, otmMacDescent: c_int, otmMacLineGap: UINT, otmusMinimumPPEM: UINT, otmptSubscriptSize: POINT, otmptSubscriptOffset: POINT, otmptSuperscriptSize: POINT, otmptSuperscriptOffset: POINT, otmsStrikeoutSize: UINT, otmsStrikeoutPosition: c_int, otmsUnderscoreSize: c_int, otmsUnderscorePosition: c_int, otmpFamilyName: PSTR, otmpFaceName: PSTR, otmpStyleName: PSTR, otmpFullName: PSTR, }} pub type POUTLINETEXTMETRICW = *mut OUTLINETEXTMETRICW; pub type NPOUTLINETEXTMETRICW = *mut OUTLINETEXTMETRICW; pub type LPOUTLINETEXTMETRICW = *mut OUTLINETEXTMETRICW; STRUCT!{struct POLYTEXTA { x: c_int, y: c_int, n: UINT, lpstr: LPCSTR, uiFlags: UINT, rcl: RECT, pdx: *mut c_int, }} pub type PPOLYTEXTA = *mut POLYTEXTA; pub type NPPOLYTEXTA = *mut POLYTEXTA; pub type LPPOLYTEXTA = *mut POLYTEXTA; STRUCT!{struct POLYTEXTW { x: c_int, y: c_int, n: UINT, lpstr: LPCWSTR, uiFlags: UINT, rcl: RECT, pdx: *mut c_int, }} pub type PPOLYTEXTW = *mut POLYTEXTW; pub type NPPOLYTEXTW = *mut POLYTEXTW; pub type LPPOLYTEXTW = *mut POLYTEXTW; STRUCT!{struct FIXED { fract: WORD, value: c_short, }} STRUCT!{struct MAT2 { eM11: FIXED, eM12: FIXED, eM21: FIXED, eM22: FIXED, }} pub type LPMAT2 = *mut MAT2; STRUCT!{struct GLYPHMETRICS { gmBlackBoxX: UINT, gmBlackBoxY: UINT, gmptGlyphOrigin: POINT, gmCellIncX: c_short, gmCellIncY: c_short, }} pub type LPGLYPHMETRICS = *mut GLYPHMETRICS; pub const GGO_METRICS: DWORD = 0; pub const GGO_BITMAP: DWORD = 1; pub const GGO_NATIVE: DWORD = 2; pub const GGO_BEZIER: DWORD = 3; pub const GGO_GRAY2_BITMAP: DWORD = 4; pub const GGO_GRAY4_BITMAP: DWORD = 5; pub const GGO_GRAY8_BITMAP: DWORD = 6; pub const GGO_GLYPH_INDEX: DWORD = 0x0080; pub const GGO_UNHINTED: DWORD = 0x0100; pub const TT_POLYGON_TYPE: DWORD = 24; pub const TT_PRIM_LINE: DWORD = 1; pub const TT_PRIM_QSPLINE: DWORD = 2; pub const TT_PRIM_CSPLINE: DWORD = 3; STRUCT!{struct POINTFX { x: FIXED, y: FIXED, }} pub type LPPOINTFX = *mut POINTFX; STRUCT!{struct TTPOLYCURVE { wType: WORD, cpfx: WORD, apfx: [POINTFX; 1], }} pub type LPTTPOLYCURVE = *mut TTPOLYCURVE; STRUCT!{struct TTPOLYGONHEADER { cb: DWORD, dwType: DWORD, pfxStart: POINTFX, }} pub type LPTTPOLYGONHEADER = *mut TTPOLYGONHEADER; pub const GCP_DBCS: DWORD = 0x0001; pub const GCP_REORDER: DWORD = 0x0002; pub const GCP_USEKERNING: DWORD = 0x0008; pub const GCP_GLYPHSHAPE: DWORD = 0x0010; pub const GCP_LIGATE: DWORD = 0x0020; pub const GCP_DIACRITIC: DWORD = 0x0100; pub const GCP_KASHIDA: DWORD = 0x0400; pub const GCP_ERROR: DWORD = 0x8000; pub const FLI_MASK: DWORD = 0x103B; pub const GCP_JUSTIFY: DWORD = 0x00010000; pub const FLI_GLYPHS: DWORD = 0x00040000; pub const GCP_CLASSIN: DWORD = 0x00080000; pub const GCP_MAXEXTENT: DWORD = 0x00100000; pub const GCP_JUSTIFYIN: DWORD = 0x00200000; pub const GCP_DISPLAYZWG: DWORD = 0x00400000; pub const GCP_SYMSWAPOFF: DWORD = 0x00800000; pub const GCP_NUMERICOVERRIDE: DWORD = 0x01000000; pub const GCP_NEUTRALOVERRIDE: DWORD = 0x02000000; pub const GCP_NUMERICSLATIN: DWORD = 0x04000000; pub const GCP_NUMERICSLOCAL: DWORD = 0x08000000; pub const GCPCLASS_LATIN: DWORD = 1; pub const GCPCLASS_HEBREW: DWORD = 2; pub const GCPCLASS_ARABIC: DWORD = 2; pub const GCPCLASS_NEUTRAL: DWORD = 3; pub const GCPCLASS_LOCALNUMBER: DWORD = 4; pub const GCPCLASS_LATINNUMBER: DWORD = 5; pub const GCPCLASS_LATINNUMERICTERMINATOR: DWORD = 6; pub const GCPCLASS_LATINNUMERICSEPARATOR: DWORD = 7; pub const GCPCLASS_NUMERICSEPARATOR: DWORD = 8; pub const GCPCLASS_PREBOUNDLTR: DWORD = 0x80; pub const GCPCLASS_PREBOUNDRTL: DWORD = 0x40; pub const GCPCLASS_POSTBOUNDLTR: DWORD = 0x20; pub const GCPCLASS_POSTBOUNDRTL: DWORD = 0x10; pub const GCPGLYPH_LINKBEFORE: DWORD = 0x8000; pub const GCPGLYPH_LINKAFTER: DWORD = 0x4000; STRUCT!{struct GCP_RESULTSA { lStructSize: DWORD, lpOutString: LPSTR, lpOrder: *mut UINT, lpDx: *mut c_int, lpCaretPos: *mut c_int, lpClass: LPSTR, lpGlyphs: LPWSTR, nGlyphs: UINT, nMaxFit: c_int, }} pub type LPGCP_RESULTSA = *mut GCP_RESULTSA; STRUCT!{struct GCP_RESULTSW { lStructSize: DWORD, lpOutString: LPWSTR, lpOrder: *mut UINT, lpDx: *mut c_int, lpCaretPos: *mut c_int, lpClass: LPSTR, lpGlyphs: LPWSTR, nGlyphs: UINT, nMaxFit: c_int, }} pub type LPGCP_RESULTSW = *mut GCP_RESULTSW; STRUCT!{struct RASTERIZER_STATUS { nSize: c_short, wFlags: c_short, nLanguageID: c_short, }} pub type LPRASTERIZER_STATUS = *mut RASTERIZER_STATUS; pub const TT_AVAILABLE: DWORD = 0x0001; pub const TT_ENABLED: DWORD = 0x0002; STRUCT!{struct PIXELFORMATDESCRIPTOR { nSize: WORD, nVersion: WORD, dwFlags: DWORD, iPixelType: BYTE, cColorBits: BYTE, cRedBits: BYTE, cRedShift: BYTE, cGreenBits: BYTE, cGreenShift: BYTE, cBlueBits: BYTE, cBlueShift: BYTE, cAlphaBits: BYTE, cAlphaShift: BYTE, cAccumBits: BYTE, cAccumRedBits: BYTE, cAccumGreenBits: BYTE, cAccumBlueBits: BYTE, cAccumAlphaBits: BYTE, cDepthBits: BYTE, cStencilBits: BYTE, cAuxBuffers: BYTE, iLayerType: BYTE, bReserved: BYTE, dwLayerMask: DWORD, dwVisibleMask: DWORD, dwDamageMask: DWORD, }} pub type PPIXELFORMATDESCRIPTOR = *mut PIXELFORMATDESCRIPTOR; pub type LPPIXELFORMATDESCRIPTOR = *mut PIXELFORMATDESCRIPTOR; pub const PFD_TYPE_RGBA: BYTE = 0; pub const PFD_TYPE_COLORINDEX: BYTE = 1; pub const PFD_MAIN_PLANE: BYTE = 0; pub const PFD_OVERLAY_PLANE: BYTE = 1; pub const PFD_UNDERLAY_PLANE: BYTE = -1i8 as u8; pub const PFD_DOUBLEBUFFER: DWORD = 0x00000001; pub const PFD_STEREO: DWORD = 0x00000002; pub const PFD_DRAW_TO_WINDOW: DWORD = 0x00000004; pub const PFD_DRAW_TO_BITMAP: DWORD = 0x00000008; pub const PFD_SUPPORT_GDI: DWORD = 0x00000010; pub const PFD_SUPPORT_OPENGL: DWORD = 0x00000020; pub const PFD_GENERIC_FORMAT: DWORD = 0x00000040; pub const PFD_NEED_PALETTE: DWORD = 0x00000080; pub const PFD_NEED_SYSTEM_PALETTE: DWORD = 0x00000100; pub const PFD_SWAP_EXCHANGE: DWORD = 0x00000200; pub const PFD_SWAP_COPY: DWORD = 0x00000400; pub const PFD_SWAP_LAYER_BUFFERS: DWORD = 0x00000800; pub const PFD_GENERIC_ACCELERATED: DWORD = 0x00001000; pub const PFD_SUPPORT_DIRECTDRAW: DWORD = 0x00002000; pub const PFD_DIRECT3D_ACCELERATED: DWORD = 0x00004000; pub const PFD_SUPPORT_COMPOSITION: DWORD = 0x00008000; pub const PFD_DEPTH_DONTCARE: DWORD = 0x20000000; pub const PFD_DOUBLEBUFFER_DONTCARE: DWORD = 0x40000000; pub const PFD_STEREO_DONTCARE: DWORD = 0x80000000; FN!{stdcall OLDFONTENUMPROCA( *const LOGFONTA, *const TEXTMETRICA, DWORD, LPARAM, ) -> c_int} FN!{stdcall OLDFONTENUMPROCW( *const LOGFONTW, *const TEXTMETRICW, DWORD, LPARAM, ) -> c_int} pub type FONTENUMPROCA = OLDFONTENUMPROCA; pub type FONTENUMPROCW = OLDFONTENUMPROCW; FN!{stdcall GOBJENUMPROC( LPVOID, LPARAM, ) -> c_int} FN!{stdcall LINEDDAPROC( c_int, c_int, LPARAM, ) -> ()} extern "system" { pub fn AddFontResourceA( _: LPCSTR, ) -> c_int; pub fn AddFontResourceW( _: LPCWSTR, ) -> c_int; pub fn AnimatePalette( hPal: HPALETTE, iStartIndex: UINT, cEntries: UINT, ppe: *const PALETTEENTRY, ) -> BOOL; pub fn Arc( hdc: HDC, x1: c_int, y1: c_int, x2: c_int, y2: c_int, x3: c_int, y3: c_int, x4: c_int, y4: c_int, ) -> BOOL; pub fn BitBlt( hdc: HDC, x: c_int, y: c_int, cx: c_int, cy: c_int, hdcSrc: HDC, x1: c_int, y1: c_int, rop: DWORD, ) -> BOOL; pub fn CancelDC( hdc: HDC, ) -> BOOL; pub fn Chord( hdc: HDC, x1: c_int, y1: c_int, x2: c_int, y2: c_int, x3: c_int, y3: c_int, x4: c_int, y4: c_int, ) -> BOOL; pub fn ChoosePixelFormat( hdc: HDC, ppfd: *const PIXELFORMATDESCRIPTOR, ) -> c_int; pub fn CloseMetaFile( hdc: HDC, ) -> HMETAFILE; pub fn CombineRgn( hrgnDst: HRGN, hrgnSrc1: HRGN, hrgnSrc2: HRGN, iMode: c_int, ) -> c_int; pub fn CopyMetaFileA( _: HMETAFILE, _: LPCSTR, ) -> HMETAFILE; pub fn CopyMetaFileW( _: HMETAFILE, _: LPCWSTR, ) -> HMETAFILE; pub fn CreateBitmap( nWidth: c_int, nHeight: c_int, nPlanes: UINT, nBitCount: UINT, lpBits: *const c_void, ) -> HBITMAP; pub fn CreateBitmapIndirect( pbm: *const BITMAP, ) -> HBITMAP; pub fn CreateBrushIndirect( plbrush: *const LOGBRUSH, ) -> HBRUSH; pub fn CreateCompatibleBitmap( hdc: HDC, cx: c_int, cy: c_int, ) -> HBITMAP; pub fn CreateDiscardableBitmap( hdc: HDC, cx: c_int, cy: c_int, ) -> HBITMAP; pub fn CreateCompatibleDC( hdc: HDC, ) -> HDC; pub fn CreateDCA( pwszDriver: LPCSTR, pwszDevice: LPCSTR, pszPort: LPCSTR, pdm: *const DEVMODEA, ) -> HDC; pub fn CreateDCW( pwszDriver: LPCWSTR, pwszDevice: LPCWSTR, pszPort: LPCWSTR, pdm: *const DEVMODEW, ) -> HDC; pub fn CreateDIBitmap( hdc: HDC, pbmih: *const BITMAPINFOHEADER, flInit: DWORD, pjBits: *const c_void, pbmi: *const BITMAPINFO, iUsage: UINT, ) -> HBITMAP; pub fn CreateDIBPatternBrush( h: HGLOBAL, iUsage: UINT, ) -> HBRUSH; pub fn CreateDIBPatternBrushPt( lpPackedDIB: *const c_void, iUsage: UINT, ) -> HBRUSH; pub fn CreateEllipticRgn( x1: c_int, y1: c_int, x2: c_int, y2: c_int, ) -> HRGN; pub fn CreateEllipticRgnIndirect( lprect: *const RECT, ) -> HRGN; pub fn CreateFontIndirectA( lplf: *const LOGFONTA, ) -> HFONT; pub fn CreateFontIndirectW( lplf: *const LOGFONTW, ) -> HFONT; pub fn CreateFontA( cHeight: c_int, cWidth: c_int, cEscapement: c_int, cOrientation: c_int, cWeight: c_int, bItalic: DWORD, bUnderline: DWORD, bStrikeOut: DWORD, iCharSet: DWORD, iOutPrecision: DWORD, iClipPrecision: DWORD, iQuality: DWORD, iPitchAndFamily: DWORD, pszFaceName: LPCSTR, ) -> HFONT; pub fn CreateFontW( cHeight: c_int, cWidth: c_int, cEscapement: c_int, cOrientation: c_int, cWeight: c_int, bItalic: DWORD, bUnderline: DWORD, bStrikeOut: DWORD, iCharSet: DWORD, iOutPrecision: DWORD, iClipPrecision: DWORD, iQuality: DWORD, iPitchAndFamily: DWORD, pszFaceName: LPCWSTR, ) -> HFONT; pub fn CreateHatchBrush( iHatch: c_int, color: COLORREF, ) -> HBRUSH; pub fn CreateICA( pszDriver: LPCSTR, pszDevice: LPCSTR, pszPort: LPCSTR, pdm: *const DEVMODEA, ) -> HDC; pub fn CreateICW( pszDriver: LPCWSTR, pszDevice: LPCWSTR, pszPort: LPCWSTR, pdm: *const DEVMODEW, ) -> HDC; pub fn CreateMetaFileA( pszFile: LPCSTR, ) -> HDC; pub fn CreateMetaFileW( pszFile: LPCWSTR, ) -> HDC; pub fn CreatePalette( plpal: *const LOGPALETTE, ) -> HPALETTE; pub fn CreatePen( iStyle: c_int, cWidth: c_int, color: COLORREF, ) -> HPEN; pub fn CreatePenIndirect( plpen: *const LOGPEN, ) -> HPEN; pub fn CreatePolyPolygonRgn( pptl: *const POINT, pc: *const INT, cPoly: c_int, iMode: c_int, ) -> HRGN; pub fn CreatePatternBrush( hbm: HBITMAP, ) -> HBRUSH; pub fn CreateRectRgn( x1: c_int, y1: c_int, x2: c_int, y2: c_int, ) -> HRGN; pub fn CreateRectRgnIndirect( lprect: *const RECT, ) -> HRGN; pub fn CreateRoundRectRgn( x1: c_int, y1: c_int, x2: c_int, y2: c_int, w: c_int, h: c_int, ) -> HRGN; pub fn CreateScalableFontResourceA( fdwHidden: DWORD, lpszFont: LPCSTR, lpszFile: LPCSTR, lpszPath: LPCSTR, ) -> BOOL; pub fn CreateScalableFontResourceW( fdwHidden: DWORD, lpszFont: LPCWSTR, lpszFile: LPCWSTR, lpszPath: LPCWSTR, ) -> BOOL; pub fn CreateSolidBrush( color: COLORREF, ) -> HBRUSH; pub fn DeleteDC( hdc: HDC, ) -> BOOL; pub fn DeleteMetaFile( hmf: HMETAFILE, ) -> BOOL; pub fn DeleteObject( ho: HGDIOBJ, ) -> BOOL; pub fn DescribePixelFormat( hdc: HDC, iPixelFormat: c_int, nBytes: UINT, ppfd: LPPIXELFORMATDESCRIPTOR, ) -> c_int; } FN!{stdcall LPFNDEVMODE( HWND, HMODULE, LPDEVMODEA, LPSTR, LPSTR, LPDEVMODEA, LPSTR, UINT, ) -> UINT} FN!{stdcall LPFNDEVCAPS( LPSTR, LPSTR, UINT, LPSTR, LPDEVMODEA, ) -> DWORD} pub const DM_UPDATE: DWORD = 1; pub const DM_COPY: DWORD = 2; pub const DM_PROMPT: DWORD = 4; pub const DM_MODIFY: DWORD = 8; pub const DM_IN_BUFFER: DWORD = DM_MODIFY; pub const DM_IN_PROMPT: DWORD = DM_PROMPT; pub const DM_OUT_BUFFER: DWORD = DM_COPY; pub const DM_OUT_DEFAULT: DWORD = DM_UPDATE; pub const DC_FIELDS: WORD = 1; pub const DC_PAPERS: WORD = 2; pub const DC_PAPERSIZE: WORD = 3; pub const DC_MINEXTENT: WORD = 4; pub const DC_MAXEXTENT: WORD = 5; pub const DC_BINS: WORD = 6; pub const DC_DUPLEX: WORD = 7; pub const DC_SIZE: WORD = 8; pub const DC_EXTRA: WORD = 9; pub const DC_VERSION: WORD = 10; pub const DC_DRIVER: WORD = 11; pub const DC_BINNAMES: WORD = 12; pub const DC_ENUMRESOLUTIONS: WORD = 13; pub const DC_FILEDEPENDENCIES: WORD = 14; pub const DC_TRUETYPE: WORD = 15; pub const DC_PAPERNAMES: WORD = 16; pub const DC_ORIENTATION: WORD = 17; pub const DC_COPIES: WORD = 18; pub const DC_BINADJUST: WORD = 19; pub const DC_EMF_COMPLIANT: WORD = 20; pub const DC_DATATYPE_PRODUCED: WORD = 21; pub const DC_COLLATE: WORD = 22; pub const DC_MANUFACTURER: WORD = 23; pub const DC_MODEL: WORD = 24; pub const DC_PERSONALITY: WORD = 25; pub const DC_PRINTRATE: WORD = 26; pub const DC_PRINTRATEUNIT: WORD = 27; pub const PRINTRATEUNIT_PPM: WORD = 1; pub const PRINTRATEUNIT_CPS: WORD = 2; pub const PRINTRATEUNIT_LPM: WORD = 3; pub const PRINTRATEUNIT_IPM: WORD = 4; pub const DC_PRINTERMEM: WORD = 28; pub const DC_MEDIAREADY: WORD = 29; pub const DC_STAPLE: WORD = 30; pub const DC_PRINTRATEPPM: WORD = 31; pub const DC_COLORDEVICE: WORD = 32; pub const DC_NUP: WORD = 33; pub const DC_MEDIATYPENAMES: WORD = 34; pub const DC_MEDIATYPES: WORD = 35; pub const DCTT_BITMAP: DWORD = 0x0000001; pub const DCTT_DOWNLOAD: DWORD = 0x0000002; pub const DCTT_SUBDEV: DWORD = 0x0000004; pub const DCTT_DOWNLOAD_OUTLINE: DWORD = 0x0000008; pub const DCBA_FACEUPNONE: DWORD = 0x0000; pub const DCBA_FACEUPCENTER: DWORD = 0x0001; pub const DCBA_FACEUPLEFT: DWORD = 0x0002; pub const DCBA_FACEUPRIGHT: DWORD = 0x0003; pub const DCBA_FACEDOWNNONE: DWORD = 0x0100; pub const DCBA_FACEDOWNCENTER: DWORD = 0x0101; pub const DCBA_FACEDOWNLEFT: DWORD = 0x0102; pub const DCBA_FACEDOWNRIGHT: DWORD = 0x0103; extern "system" { pub fn DeviceCapabilitiesA( pDevice: LPCSTR, pPort: LPCSTR, fwCapability: WORD, pOutput: LPSTR, pDevMode: *const DEVMODEA, ) -> c_int; pub fn DeviceCapabilitiesW( pDevice: LPCWSTR, pPort: LPCWSTR, fwCapability: WORD, pOutput: LPWSTR, pDevMode: *const DEVMODEW, ) -> c_int; pub fn DrawEscape( hdc: HDC, iEscape: c_int, cjIn: c_int, lpIn: LPCSTR, ) -> c_int; pub fn Ellipse( hdc: HDC, left: c_int, top: c_int, right: c_int, bottom: c_int, ) -> BOOL; pub fn EnumFontFamiliesExA( hdc: HDC, lpLogfont: LPLOGFONTA, lpProc: FONTENUMPROCA, lParam: LPARAM, dwFlags: DWORD, ) -> c_int; pub fn EnumFontFamiliesExW( hdc: HDC, lpLogfont: LPLOGFONTW, lpProc: FONTENUMPROCW, lParam: LPARAM, dwFlags: DWORD, ) -> c_int; pub fn EnumFontFamiliesA( hdc: HDC, lpLogfont: LPCSTR, lpProc: FONTENUMPROCA, lParam: LPARAM, ) -> c_int; pub fn EnumFontFamiliesW( hdc: HDC, lpLogfont: LPCWSTR, lpProc: FONTENUMPROCW, lParam: LPARAM, ) -> c_int; pub fn EnumFontsA( hdc: HDC, lpLogfont: LPCSTR, lpProc: FONTENUMPROCA, lParam: LPARAM, ) -> c_int; pub fn EnumFontsW( hdc: HDC, lpLogfont: LPCWSTR, lpProc: FONTENUMPROCW, lParam: LPARAM, ) -> c_int; pub fn EnumObjects( hdc: HDC, nType: c_int, lpFunc: GOBJENUMPROC, lParam: LPARAM, ) -> c_int; pub fn EqualRgn( hrgn1: HRGN, hrgn2: HRGN, ) -> BOOL; pub fn Escape( hdc: HDC, iEscape: c_int, cjIn: c_int, pvIn: LPCSTR, pvOut: LPVOID, ) -> c_int; pub fn ExtEscape( hdc: HDC, iEscape: c_int, cjInput: c_int, lpInData: LPCSTR, cjOutput: c_int, lpOutData: LPSTR, ) -> c_int; pub fn ExcludeClipRect( hdc: HDC, left: c_int, top: c_int, right: c_int, bottom: c_int, ) -> c_int; pub fn ExtCreateRegion( lpx: *const XFORM, nCount: DWORD, lpData: *const RGNDATA, ) -> HRGN; pub fn ExtFloodFill( hdc: HDC, x: c_int, y: c_int, color: COLORREF, utype: UINT, ) -> BOOL; pub fn FillRgn( hdc: HDC, hrgn: HRGN, hbr: HBRUSH, ) -> BOOL; pub fn FloodFill( hdc: HDC, x: c_int, y: c_int, color: COLORREF, ) -> BOOL; pub fn FrameRgn( hdc: HDC, hrgn: HRGN, hbr: HBRUSH, w: c_int, h: c_int, ) -> BOOL; pub fn GetROP2( hdc: HDC, ) -> c_int; pub fn GetAspectRatioFilterEx( hdc: HDC, lpsize: LPSIZE, ) -> BOOL; pub fn GetBkColor( hdc: HDC, ) -> COLORREF; pub fn GetDCBrushColor( hdc: HDC, ) -> COLORREF; pub fn GetDCPenColor( hdc: HDC, ) -> COLORREF; pub fn GetBkMode( hdc: HDC, ) -> c_int; pub fn GetBitmapBits( hbit: HBITMAP, cb: LONG, lpvBits: LPVOID, ) -> LONG; pub fn GetBitmapDimensionEx( hbit: HBITMAP, lpsize: LPSIZE, ) -> BOOL; pub fn GetBoundsRect( hdc: HDC, lprect: LPRECT, flags: UINT, ) -> UINT; pub fn GetBrushOrgEx( hdc: HDC, lppt: LPPOINT, ) -> BOOL; pub fn GetCharWidthA( hdc: HDC, iFirst: UINT, iLast: UINT, lpBuffer: LPINT, ) -> BOOL; pub fn GetCharWidthW( hdc: HDC, iFirst: UINT, iLast: UINT, lpBuffer: LPINT, ) -> BOOL; pub fn GetCharWidth32A( hdc: HDC, iFirst: UINT, iLast: UINT, lpBuffer: LPINT, ) -> BOOL; pub fn GetCharWidth32W( hdc: HDC, iFirst: UINT, iLast: UINT, lpBuffer: LPINT, ) -> BOOL; pub fn GetCharWidthFloatA( hdc: HDC, iFirst: UINT, iLast: UINT, lpBuffer: PFLOAT, ) -> BOOL; pub fn GetCharWidthFloatW( hdc: HDC, iFirst: UINT, iLast: UINT, lpBuffer: PFLOAT, ) -> BOOL; pub fn GetCharABCWidthsA( hdc: HDC, wFirst: UINT, wLast: UINT, lpABC: LPABC, ) -> BOOL; pub fn GetCharABCWidthsW( hdc: HDC, wFirst: UINT, wLast: UINT, lpABC: LPABC, ) -> BOOL; pub fn GetCharABCWidthsFloatA( hdc: HDC, iFirst: UINT, iLast: UINT, lpABC: LPABCFLOAT, ) -> BOOL; pub fn GetCharABCWidthsFloatW( hdc: HDC, iFirst: UINT, iLast: UINT, lpABC: LPABCFLOAT, ) -> BOOL; pub fn GetClipBox( hdc: HDC, lprect: LPRECT, ) -> c_int; pub fn GetClipRgn( hdc: HDC, hrgn: HRGN, ) -> c_int; pub fn GetMetaRgn( hdc: HDC, hrgn: HRGN, ) -> c_int; pub fn GetCurrentObject( hdc: HDC, tp: UINT, ) -> HGDIOBJ; pub fn GetCurrentPositionEx( hdc: HDC, lppt: LPPOINT, ) -> BOOL; pub fn GetDeviceCaps( hdc: HDC, nIndex: c_int, ) -> c_int; pub fn GetDIBits( hdc: HDC, hbm: HBITMAP, start: UINT, cLines: UINT, lpvBits: LPVOID, lpbmi: LPBITMAPINFO, usage: UINT, ) -> c_int; pub fn GetFontData( hdc: HDC, dwTable: DWORD, dwOffset: DWORD, pvBuffer: PVOID, cjBuffer: DWORD, ) -> DWORD; pub fn GetGlyphOutlineA( hdc: HDC, uChar: UINT, fuFormat: UINT, lpgm: LPGLYPHMETRICS, cjBuffer: DWORD, pvBuffer: LPVOID, lpmat2: *const MAT2, ) -> DWORD; pub fn GetGlyphOutlineW( hdc: HDC, uChar: UINT, fuFormat: UINT, lpgm: LPGLYPHMETRICS, cjBuffer: DWORD, pvBuffer: LPVOID, lpmat2: *const MAT2, ) -> DWORD; pub fn GetGraphicsMode( hdc: HDC, ) -> c_int; pub fn GetMapMode( hdc: HDC, ) -> c_int; pub fn GetMetaFileBitsEx( hMF: HMETAFILE, cbBuffer: UINT, lpData: LPVOID, ) -> UINT; pub fn GetMetaFileA( lpName: LPCSTR, ) -> HMETAFILE; pub fn GetMetaFileW( lpName: LPCWSTR, ) -> HMETAFILE; pub fn GetNearestColor( hdc: HDC, color: COLORREF, ) -> COLORREF; pub fn GetNearestPaletteIndex( h: HPALETTE, color: COLORREF, ) -> UINT; pub fn GetObjectType( h: HGDIOBJ, ) -> DWORD; pub fn GetOutlineTextMetricsA( hdc: HDC, cjCopy: UINT, potm: LPOUTLINETEXTMETRICA, ) -> UINT; pub fn GetOutlineTextMetricsW( hdc: HDC, cjCopy: UINT, potm: LPOUTLINETEXTMETRICW, ) -> UINT; pub fn GetPaletteEntries( hpal: HPALETTE, iStart: UINT, cEntries: UINT, pPalEntries: LPPALETTEENTRY, ) -> UINT; pub fn GetPixel( hdc: HDC, x: c_int, y: c_int, ) -> COLORREF; pub fn GetPixelFormat( hdc: HDC, ) -> c_int; pub fn GetPolyFillMode( hdc: HDC, ) -> c_int; pub fn GetRasterizerCaps( lpraststat: LPRASTERIZER_STATUS, cjBytes: UINT, ) -> BOOL; pub fn GetRandomRgn ( hdc: HDC, hrgn: HRGN, i: INT, ) -> c_int; pub fn GetRegionData( hrgn: HRGN, nCount: DWORD, lpRgnData: LPRGNDATA, ) -> DWORD; pub fn GetRgnBox( hrgn: HRGN, lprc: LPRECT, ) -> c_int; pub fn GetStockObject( i: c_int, ) -> HGDIOBJ; pub fn GetStretchBltMode( hdc: HDC, ) -> c_int; pub fn GetSystemPaletteEntries( hdc: HDC, iStart: UINT, cEntries: UINT, pPalEntries: LPPALETTEENTRY, ) -> UINT; pub fn GetSystemPaletteUse( hdc: HDC, ) -> UINT; pub fn GetTextCharacterExtra( hdc: HDC, ) -> c_int; pub fn GetTextAlign( hdc: HDC, ) -> UINT; pub fn GetTextColor( hdc: HDC, ) -> COLORREF; pub fn GetTextExtentPointA( hdc: HDC, lpString: LPCSTR, c: c_int, lpsz: LPSIZE, ) -> BOOL; pub fn GetTextExtentPointW( hdc: HDC, lpString: LPCWSTR, c: c_int, lpsz: LPSIZE, ) -> BOOL; pub fn GetTextExtentPoint32A( hdc: HDC, lpString: LPCSTR, c: c_int, psizl: LPSIZE, ) -> BOOL; pub fn GetTextExtentPoint32W( hdc: HDC, lpString: LPCWSTR, c: c_int, psizl: LPSIZE, ) -> BOOL; pub fn GetTextExtentExPointA( hdc: HDC, lpszString: LPCSTR, cchString: c_int, nMaxExtent: c_int, lpnFit: LPINT, lpnDx: LPINT, lpSize: LPSIZE, ) -> BOOL; pub fn GetTextExtentExPointW( hdc: HDC, lpszString: LPCWSTR, cchString: c_int, nMaxExtent: c_int, lpnFit: LPINT, lpnDx: LPINT, lpSize: LPSIZE, ) -> BOOL; pub fn GetTextCharset( hdc: HDC, ) -> c_int; pub fn GetTextCharsetInfo( hdc: HDC, lpSig: LPFONTSIGNATURE, dwFlags: DWORD, ) -> c_int; pub fn TranslateCharsetInfo( lpSrc: *const DWORD, lpCs: LPCHARSETINFO, dwFlags: DWORD, ) -> BOOL; pub fn GetFontLanguageInfo( hdc: HDC, ) -> DWORD; pub fn GetCharacterPlacementA( hdc: HDC, lpString: LPCSTR, nCount: c_int, nMexExtent: c_int, lpResults: LPGCP_RESULTSA, dwFlags: DWORD, ) -> DWORD; pub fn GetCharacterPlacementW( hdc: HDC, lpString: LPCWSTR, nCount: c_int, nMexExtent: c_int, lpResults: LPGCP_RESULTSW, dwFlags: DWORD, ) -> DWORD; } STRUCT!{struct WCRANGE { wcLow: WCHAR, cGlyphs: USHORT, }} pub type PWCRANGE = *mut WCRANGE; pub type LPWCRANGE = *mut WCRANGE; STRUCT!{struct GLYPHSET { cbThis: DWORD, flAccel: DWORD, cGlyphsSupported: DWORD, cRanges: DWORD, ranges: [WCRANGE;1], }} pub type PGLYPHSET = *mut GLYPHSET; pub type LPGLYPHSET = *mut GLYPHSET; pub const GS_8BIT_INDICES: DWORD = 0x00000001; pub const GGI_MARK_NONEXISTING_GLYPHS: DWORD = 0x0001; extern "system" { pub fn GetFontUnicodeRanges( hdc: HDC, lpgs: LPGLYPHSET, ) -> DWORD; pub fn GetGlyphIndicesA( hdc: HDC, lpstr: LPCSTR, c: c_int, pgi: LPWORD, fl: DWORD, ) -> DWORD; pub fn GetGlyphIndicesW( hdc: HDC, lpstr: LPCWSTR, c: c_int, pgi: LPWORD, fl: DWORD, ) -> DWORD; pub fn GetTextExtentPointI( hdc: HDC, pgiIn: LPWORD, cgi: c_int, psize: LPSIZE, ) -> BOOL; pub fn GetTextExtentExPointI( hdc: HDC, lpwszString: LPWORD, cwchString: c_int, nMaxExtent: c_int, lpnFit: LPINT, lpnDx: LPINT, lpSize: LPSIZE, ) -> BOOL; pub fn GetCharWidthI( hdc: HDC, giFirst: UINT, cgi: UINT, pgi: LPWORD, piWidths: LPINT, ) -> BOOL; pub fn GetCharABCWidthsI( hdc: HDC, giFirst: UINT, cgi: UINT, pgi: LPWORD, pabc: LPABC, ) -> BOOL; } pub const STAMP_DESIGNVECTOR: DWORD = 0x8000000 + 0x64 + (0x76 << 8); pub const STAMP_AXESLIST: DWORD = 0x8000000 + 0x61 + (0x6c << 8); pub const STAMP_TRUETYPE_VARIATION: DWORD = 0x8000000 + 0x74 + (0x76 << 8); pub const MM_MAX_NUMAXES: usize = 16; STRUCT!{struct DESIGNVECTOR { dvReserved: DWORD, dvNumAxes: DWORD, dvValues: [LONG; MM_MAX_NUMAXES], }} pub type PDESIGNVECTOR = *mut DESIGNVECTOR; pub type LPDESIGNVECTOR = *mut DESIGNVECTOR; extern "system" { pub fn AddFontResourceExA( lpszFilename: LPCSTR, fl: DWORD, pdv: PVOID, ) -> c_int; pub fn AddFontResourceExW( lpszFilename: LPCWSTR, fl: DWORD, pdv: PVOID, ) -> c_int; pub fn RemoveFontResourceExA( name: LPCSTR, fl: DWORD, pdv: PVOID, ) -> BOOL; pub fn RemoveFontResourceExW( name: LPCWSTR, fl: DWORD, pdv: PVOID, ) -> BOOL; pub fn AddFontMemResourceEx( pbFont: PVOID, cbSize: DWORD, pdv: PVOID, pcFonts: *mut DWORD, ) -> HANDLE; pub fn RemoveFontMemResourceEx( h: HANDLE, ) -> BOOL; } pub const FR_PRIVATE: DWORD = 0x10; pub const FR_NOT_ENUM: DWORD = 0x20; pub const MM_MAX_AXES_NAMELEN: usize = 16; STRUCT!{struct AXISINFOA { axMinValue: LONG, axMaxValue: LONG, axAxisName: [BYTE; MM_MAX_AXES_NAMELEN], }} pub type PAXISINFOA = *mut AXISINFOA; pub type LPAXISINFOA = *mut AXISINFOA; STRUCT!{struct AXISINFOW { axMinValue: LONG, axMaxValue: LONG, axAxisName: [WCHAR; MM_MAX_AXES_NAMELEN], }} pub type PAXISINFOW = *mut AXISINFOW; pub type LPAXISINFOW = *mut AXISINFOW; STRUCT!{struct AXESLISTA { axlReserved: DWORD, axlNumAxes: DWORD, axlAxisInfo: [AXISINFOA; MM_MAX_AXES_NAMELEN], }} pub type PAXESLISTA = *mut AXESLISTA; pub type LPAXESLISTA = *mut AXESLISTA; STRUCT!{struct AXESLISTW { axlReserved: DWORD, axlNumAxes: DWORD, axlAxisInfo: [AXISINFOW; MM_MAX_AXES_NAMELEN], }} pub type PAXESLISTW = *mut AXESLISTW; pub type LPAXESLISTW = *mut AXESLISTW; STRUCT!{struct ENUMLOGFONTEXDVA { elfEnumLogfontEx: ENUMLOGFONTEXA, elfDesignVector: DESIGNVECTOR, }} pub type PENUMLOGFONTEXDVA = *mut ENUMLOGFONTEXDVA; pub type LPENUMLOGFONTEXDVA = *mut ENUMLOGFONTEXDVA; STRUCT!{struct ENUMLOGFONTEXDVW { elfEnumLogfontEx: ENUMLOGFONTEXW, elfDesignVector: DESIGNVECTOR, }} pub type PENUMLOGFONTEXDVW = *mut ENUMLOGFONTEXDVW; pub type LPENUMLOGFONTEXDVW = *mut ENUMLOGFONTEXDVW; extern "system" { pub fn CreateFontIndirectExA( penumlfex: *const ENUMLOGFONTEXDVA, ) -> HFONT; pub fn CreateFontIndirectExW( penumlfex: *const ENUMLOGFONTEXDVW, ) -> HFONT; } STRUCT!{struct ENUMTEXTMETRICA { etmNewTextMetricEx: NEWTEXTMETRICEXA, etmAxesList: AXESLISTA, }} pub type PENUMTEXTMETRICA = *mut ENUMTEXTMETRICA; pub type LPENUMTEXTMETRICA = *mut ENUMTEXTMETRICA; STRUCT!{struct ENUMTEXTMETRICW { etmNewTextMetricEx: NEWTEXTMETRICEXW, etmAxesList: AXESLISTW, }} pub type PENUMTEXTMETRICW = *mut ENUMTEXTMETRICW; pub type LPENUMTEXTMETRICW = *mut ENUMTEXTMETRICW; extern "system" { pub fn GetViewportExtEx( hdc: HDC, lpsize: LPSIZE, ) -> BOOL; pub fn GetViewportOrgEx( hdc: HDC, lppoint: LPPOINT, ) -> BOOL; pub fn GetWindowExtEx( hdc: HDC, lpsize: LPSIZE, ) -> BOOL; pub fn GetWindowOrgEx( hdc: HDC, lppoint: LPPOINT, ) -> BOOL; pub fn IntersectClipRect( hdc: HDC, left: c_int, top: c_int, right: c_int, bottom: c_int, ) -> c_int; pub fn InvertRgn( hdc: HDC, hrgn: HRGN, ) -> BOOL; pub fn LineDDA( nXStart: c_int, nYStart: c_int, nXEnd: c_int, nYEnd: c_int, lpLineFunc: LINEDDAPROC, lpData: LPARAM, ) -> BOOL; pub fn LineTo( hdc: HDC, nXEnd: c_int, nYEnd: c_int, ) -> BOOL; pub fn MaskBlt( hdcDest: HDC, xDest: c_int, yDest: c_int, width: c_int, height: c_int, hdcSrc: HDC, xSrc: c_int, ySrc: c_int, hbmMask: HBITMAP, xMask: c_int, yMask: c_int, rop: DWORD, ) -> BOOL; pub fn PlgBlt( hdcDest: HDC, lpPoint: *const POINT, hdcSrc: HDC, xSrc: c_int, ySrc: c_int, width: c_int, height: c_int, hbmMask: HBITMAP, xMask: c_int, yMask: c_int, ) -> BOOL; pub fn OffsetClipRgn( hdc: HDC, x: c_int, y: c_int, ) -> c_int; pub fn OffsetRgn( hrgn: HRGN, x: c_int, y: c_int, ) -> c_int; pub fn PatBlt( hdc: HDC, nXLeft: c_int, nYLeft: c_int, nWidth: c_int, nHeight: c_int, dwRop: DWORD, ) -> BOOL; pub fn Pie( hdc: HDC, nLeftRect: c_int, nTopRect: c_int, nRightRect: c_int, nBottomRect: c_int, nXRadial1: c_int, nYRadial1: c_int, nXRadial2: c_int, nYRadial2: c_int, ) -> BOOL; pub fn PlayMetaFile( hdc: HDC, hmf: HMETAFILE, ) -> BOOL; pub fn PaintRgn( hdc: HDC, hrgn: HRGN, ) -> BOOL; pub fn PolyPolygon( hdc: HDC, lpPoints: *const POINT, lpPolyCounts: *const INT, cCount: DWORD, ) -> BOOL; pub fn PtInRegion( hrgn: HRGN, x: c_int, y: c_int, ) -> BOOL; pub fn PtVisible( hdc: HDC, x: c_int, y: c_int, ) -> BOOL; pub fn RectInRegion( hrgn: HRGN, lprect: *const RECT, ) -> BOOL; pub fn RectVisible( hdc: HDC, lprect: *const RECT, ) -> BOOL; pub fn Rectangle( hdc: HDC, left: c_int, top: c_int, right: c_int, bottom: c_int, ) -> BOOL; pub fn RestoreDC( hdc: HDC, nSavedDC: c_int, ) -> BOOL; pub fn ResetDCA( hdc: HDC, lpdm: *const DEVMODEA, ) -> HDC; pub fn ResetDCW( hdc: HDC, lpdm: *const DEVMODEW, ) -> HDC; pub fn RealizePalette( hdc: HDC, ) -> UINT; pub fn RemoveFontResourceA( lpFileName: LPCSTR, ) -> BOOL; pub fn RemoveFontResourceW( lpFileName: LPCWSTR, ) -> BOOL; pub fn RoundRect( hdc: HDC, nLeftRect: c_int, nTopRect: c_int, nRightRect: c_int, nBottomRect: c_int, nWidth: c_int, nHeight: c_int, ) -> BOOL; pub fn ResizePalette( hpal: HPALETTE, n: UINT, ) -> BOOL; pub fn SaveDC( hdc: HDC, ) -> c_int; pub fn SelectClipRgn( hdc: HDC, hrgn: HRGN, ) -> c_int; pub fn ExtSelectClipRgn( hdc: HDC, hrgn: HRGN, mode: c_int, ) -> c_int; pub fn SetMetaRgn( hdc: HDC, ) -> c_int; pub fn SelectObject( hdc: HDC, h: HGDIOBJ, ) -> HGDIOBJ; pub fn SelectPalette( hdc: HDC, hPal: HPALETTE, bForceBkgd: BOOL, ) -> HPALETTE; pub fn SetBkColor( hdc: HDC, color: COLORREF, ) -> COLORREF; pub fn SetDCBrushColor( hdc: HDC, color: COLORREF, ) -> COLORREF; pub fn SetDCPenColor( hdc: HDC, color: COLORREF, ) -> COLORREF; pub fn SetBkMode( hdc: HDC, mode: c_int, ) -> c_int; pub fn SetBitmapBits( hbm: HBITMAP, cb: DWORD, pvBits: *const VOID, ) -> LONG; pub fn SetBoundsRect( hdc: HDC, lprect: *const RECT, flags: UINT, ) -> UINT; pub fn SetDIBits( hdc: HDC, hbm: HBITMAP, start: UINT, cLines: UINT, lpBits: *const VOID, lpbmi: *const BITMAPINFO, ColorUse: UINT, ) -> c_int; pub fn SetDIBitsToDevice( hdc: HDC, xDest: c_int, yDest: c_int, w: DWORD, h: DWORD, xSrc: c_int, ySrc: c_int, StartScan: UINT, cLines: UINT, lpvBits: *const VOID, lpbmi: *const BITMAPINFO, ColorUse: UINT, ) -> c_int; pub fn SetMapperFlags( hdc: HDC, flags: DWORD, ) -> DWORD; pub fn SetGraphicsMode( hdc: HDC, iMode: c_int, ) -> c_int; pub fn SetMapMode( hdc: HDC, mode: c_int, ) -> c_int; pub fn SetLayout( hdc: HDC, l: DWORD, ) -> DWORD; pub fn GetLayout( hdc: HDC, ) -> DWORD; pub fn SetMetaFileBitsEx( cbBuffer: UINT, lpData: *const BYTE, ) -> HMETAFILE; pub fn SetPaletteEntries( hpal: HPALETTE, iStart: UINT, cEntries: UINT, pPalEntries: *const PALETTEENTRY, ) -> UINT; pub fn SetPixel( hdc: HDC, x: c_int, y: c_int, color: COLORREF, ) -> COLORREF; pub fn SetPixelV( hdc: HDC, x: c_int, y: c_int, color: COLORREF, ) -> BOOL; pub fn SetPixelFormat( hdc: HDC, iPixelFormat: c_int, ppfd: *const PIXELFORMATDESCRIPTOR, ) -> BOOL; pub fn SetPolyFillMode( hdc: HDC, iPolyFillMode: c_int, ) -> c_int; pub fn StretchBlt( hdcDest: HDC, xDest: c_int, yDest: c_int, wDest: c_int, hDest: c_int, hdcSrc: HDC, xSrc: c_int, ySrc: c_int, wSrc: c_int, hSrc: c_int, rop: DWORD, ) -> BOOL; pub fn SetRectRgn( hrgn: HRGN, left: c_int, top: c_int, right: c_int, bottom: c_int, ) -> BOOL; pub fn StretchDIBits( hdc: HDC, XDest: c_int, YDest: c_int, nDestWidth: c_int, nDestHeight: c_int, XSrc: c_int, YSrc: c_int, nSrcWidth: c_int, nSrcHeight: c_int, lpBits: *const VOID, lpBitsInfo: *const BITMAPINFO, iUsage: UINT, dwRop: DWORD, ) -> c_int; pub fn SetROP2( hdc: HDC, rop2: c_int, ) -> c_int; pub fn SetStretchBltMode( hdc: HDC, mode: c_int, ) -> c_int; pub fn SetSystemPaletteUse( hdc: HDC, uuse: UINT, ) -> UINT; pub fn SetTextCharacterExtra( hdc: HDC, extra: c_int, ) -> c_int; pub fn SetTextColor( hdc: HDC, color: COLORREF, ) -> COLORREF; pub fn SetTextAlign( hdc: HDC, align: UINT, ) -> UINT; pub fn SetTextJustification( hdc: HDC, extra: c_int, count: c_int, ) -> BOOL; pub fn UpdateColors( hdc: HDC, ) -> BOOL; } pub type COLOR16 = c_ushort; STRUCT!{struct TRIVERTEX { x: LONG, y: LONG, Red: COLOR16, Green: COLOR16, Blue: COLOR16, Alpha: COLOR16, }} pub type PTRIVERTEX = *mut TRIVERTEX; pub type LPTRIVERTEX = *mut TRIVERTEX; STRUCT!{struct GRADIENT_RECT { UpperLeft: ULONG, LowerRight: ULONG, }} pub type PGRADIENT_RECT = *mut GRADIENT_RECT; pub type LPGRADIENT_RECT = *mut GRADIENT_RECT; STRUCT!{struct BLENDFUNCTION { BlendOp: BYTE, BlendFlags: BYTE, SourceConstantAlpha: BYTE, AlphaFormat: BYTE, }} pub type PBLENDFUNCTION = *mut BLENDFUNCTION; pub const AC_SRC_OVER: BYTE = 0x00; pub const AC_SRC_ALPHA: BYTE = 0x01; extern "system" { pub fn AlphaBlend( hdcDest: HDC, xoriginDest: c_int, yoriginDest: c_int, wDest: c_int, hDest: c_int, hdcSrc: HDC, xoriginSrc: c_int, yoriginSrc: c_int, wSrc: c_int, hSrc: c_int, ftn: BLENDFUNCTION, ) -> BOOL; pub fn TransparentBlt( hdcDest: HDC, xoriginDest: c_int, yoriginDest: c_int, wDest: c_int, hDest: c_int, hdcSrc: HDC, xoriginSrc: c_int, yoriginSrc: c_int, wSrc: c_int, hSrc: c_int, crTransparent: UINT, ) -> BOOL; } pub const GRADIENT_FILL_RECT_H: ULONG = 0x00000000; pub const GRADIENT_FILL_RECT_V: ULONG = 0x00000001; pub const GRADIENT_FILL_TRIANGLE: ULONG = 0x00000002; pub const GRADIENT_FILL_OP_FLAG: ULONG = 0x000000ff; extern "system" { pub fn GradientFill( hdc: HDC, pVertex: PTRIVERTEX, nVertex: ULONG, pMesh: PVOID, nMesh: ULONG, ulMode: ULONG, ) -> BOOL; pub fn GdiAlphaBlend( hdcDest: HDC, xoriginDest: c_int, yoriginDest: c_int, wDest: c_int, hDest: c_int, hdcSrc: HDC, xoriginSrc: c_int, yoriginSrc: c_int, wSrc: c_int, hSrc: c_int, ftn: BLENDFUNCTION, ) -> BOOL; pub fn GdiTransparentBlt( hdcDest: HDC, xoriginDest: c_int, yoriginDest: c_int, wDest: c_int, hDest: c_int, hdcSrc: HDC, xoriginSrc: c_int, yoriginSrc: c_int, wSrc: c_int, hSrc: c_int, crTransparent: UINT, ) -> BOOL; pub fn GdiGradientFill( hdc: HDC, pVertex: PTRIVERTEX, nVertex: ULONG, pMesh: PVOID, nCount: ULONG, ulMode: ULONG, ) -> BOOL; pub fn PlayMetaFileRecord( hdc: HDC, lpHandleTable: LPHANDLETABLE, lpMR: LPMETARECORD, noObjs: UINT, ) -> BOOL; } FN!{stdcall MFENUMPROC( hdc: HDC, lpht: *mut HANDLETABLE, lpMR: *mut METARECORD, nObj: c_int, param: LPARAM, ) -> c_int} extern "system" { pub fn EnumMetaFile( hdc: HDC, hmf: HMETAFILE, mproc: MFENUMPROC, param: LPARAM, ) -> BOOL; } FN!{stdcall ENHMFENUMPROC( hdc: HDC, lpht: *mut HANDLETABLE, lpmr: *const ENHMETARECORD, nHandles: c_int, data: LPARAM, ) -> c_int} extern "system" { pub fn CloseEnhMetaFile( hdc: HDC, ) -> HENHMETAFILE; pub fn CopyEnhMetaFileA( hemfSrc: HENHMETAFILE, lpszFile: LPCSTR, ) -> HENHMETAFILE; pub fn CopyEnhMetaFileW( hemfSrc: HENHMETAFILE, lpszFile: LPCWSTR, ) -> HENHMETAFILE; pub fn CreateEnhMetaFileA( hdcRef: HDC, lpFilename: LPCSTR, lpRect: *const RECT, lpDescription: LPCSTR, ) -> HDC; pub fn CreateEnhMetaFileW( hdcRef: HDC, lpFilename: LPCWSTR, lpRect: *const RECT, lpDescription: LPCWSTR, ) -> HDC; pub fn DeleteEnhMetaFile( hmf: HENHMETAFILE, ) -> BOOL; pub fn EnumEnhMetaFile( hdc: HDC, hmf: HENHMETAFILE, lpProc: ENHMFENUMPROC, param: LPVOID, lpRect: *const RECT, ) -> BOOL; pub fn GetEnhMetaFileA( lpName: LPCSTR, ) -> HENHMETAFILE; pub fn GetEnhMetaFileW( lpName: LPCWSTR, ) -> HENHMETAFILE; pub fn GetEnhMetaFileBits( hEMF: HENHMETAFILE, nSize: UINT, lpData: LPBYTE, ) -> UINT; pub fn GetEnhMetaFileDescriptionA( hemf: HENHMETAFILE, cchBuffer: UINT, lpDescription: LPSTR, ) -> UINT; pub fn GetEnhMetaFileDescriptionW( hemf: HENHMETAFILE, cchBuffer: UINT, lpDescription: LPWSTR, ) -> UINT; pub fn GetEnhMetaFileHeader( hemf: HENHMETAFILE, nSize: UINT, lpEnhMetaHeader: LPENHMETAHEADER, ) -> UINT; pub fn GetEnhMetaFilePaletteEntries( hemf: HENHMETAFILE, nNumEntries: UINT, lpPaletteEntries: LPPALETTEENTRY, ) -> UINT; pub fn GetEnhMetaFilePixelFormat( hemf: HENHMETAFILE, cbBuffer: UINT, ppfd: *mut PIXELFORMATDESCRIPTOR, ) -> UINT; pub fn GetWinMetaFileBits( hemf: HENHMETAFILE, cbData16: UINT, pData16: LPBYTE, iMapMode: INT, hdcRef: HDC, ) -> UINT; pub fn PlayEnhMetaFile( hdc: HDC, hmf: HENHMETAFILE, lprect: *const RECT, ) -> BOOL; pub fn PlayEnhMetaFileRecord( hdc: HDC, pht: LPHANDLETABLE, pmr: *const ENHMETARECORD, cht: UINT, ) -> BOOL; pub fn SetEnhMetaFileBits( nSize: UINT, pb: *const BYTE, ) -> HENHMETAFILE; pub fn SetWinMetaFileBits( nSize: UINT, lpMeta16Data: *const BYTE, hdcRef: HDC, lpMFP: *const METAFILEPICT, ) -> HENHMETAFILE; pub fn GdiComment( hdc: HDC, nSize: UINT, lpData: *const BYTE, ) -> BOOL; pub fn GetTextMetricsA( hdc: HDC, lptm: LPTEXTMETRICA, ) -> BOOL; pub fn GetTextMetricsW( hdc: HDC, lptm: *mut TEXTMETRICW, ) -> BOOL; } STRUCT!{struct DIBSECTION { dsBm: BITMAP, dsBmih: BITMAPINFOHEADER, dsBitfields: [DWORD; 3], dshSection: HANDLE, dsOffset: DWORD, }} pub type PDIBSECTION = *mut DIBSECTION; pub type LPDIBSECTION = *mut DIBSECTION; extern "system" { pub fn AngleArc( hdc: HDC, X: c_int, Y: c_int, dwRadius: DWORD, eStartAngle: FLOAT, eSweepAngle: FLOAT, ) -> BOOL; pub fn PolyPolyline( hdc: HDC, lppt: *const POINT, lpdwPolyPoints: *const DWORD, cCount: DWORD, ) -> BOOL; pub fn GetWorldTransform( hdc: HDC, lpxf: LPXFORM, ) -> BOOL; pub fn SetWorldTransform( hdc: HDC, lpxf: *const XFORM, ) -> BOOL; pub fn ModifyWorldTransform( hdc: HDC, lpxf: *const XFORM, mode: DWORD, ) -> BOOL; pub fn CombineTransform( lpxformResult: LPXFORM, lpxform1: *const XFORM, lpxform2: *const XFORM, ) -> BOOL; } #[inline] pub fn GDI_WIDTHBYTES(bits: DWORD) -> DWORD { ((bits + 31) & !31) / 8 } #[inline] pub fn GDI_DIBWIDTHBYTES(bi: &BITMAPINFOHEADER) -> DWORD { GDI_WIDTHBYTES((bi.biWidth as DWORD) * (bi.biBitCount as DWORD)) } #[inline] pub fn GDI__DIBSIZE(bi: &BITMAPINFOHEADER) -> DWORD { GDI_DIBWIDTHBYTES(bi) * bi.biHeight as DWORD } #[inline] pub fn GDI_DIBSIZE(bi: &BITMAPINFOHEADER) -> DWORD { if bi.biHeight < 0 { GDI__DIBSIZE(bi) * -1i32 as u32 } else { GDI__DIBSIZE(bi) } } extern "system" { pub fn CreateDIBSection( hdc: HDC, lpbmi: *const BITMAPINFO, usage: UINT, ppvBits: *mut *mut c_void, hSection: HANDLE, offset: DWORD, ) -> HBITMAP; pub fn GetDIBColorTable( hdc: HDC, iStart: UINT, cEntries: UINT, prgbq: *mut RGBQUAD, ) -> UINT; pub fn SetDIBColorTable( hdc: HDC, iStart: UINT, cEntries: UINT, prgbq: *const RGBQUAD, ) -> UINT; } pub const CA_NEGATIVE: WORD = 0x0001; pub const CA_LOG_FILTER: WORD = 0x0002; pub const ILLUMINANT_DEVICE_DEFAULT: WORD = 0; pub const ILLUMINANT_A: WORD = 1; pub const ILLUMINANT_B: WORD = 2; pub const ILLUMINANT_C: WORD = 3; pub const ILLUMINANT_D50: WORD = 4; pub const ILLUMINANT_D55: WORD = 5; pub const ILLUMINANT_D65: WORD = 6; pub const ILLUMINANT_D75: WORD = 7; pub const ILLUMINANT_F2: WORD = 8; pub const ILLUMINANT_MAX_INDEX: WORD = ILLUMINANT_F2; pub const ILLUMINANT_TUNGSTEN: WORD = ILLUMINANT_A; pub const ILLUMINANT_DAYLIGHT: WORD = ILLUMINANT_C; pub const ILLUMINANT_FLUORESCENT: WORD = ILLUMINANT_F2; pub const ILLUMINANT_NTSC: WORD = ILLUMINANT_C; pub const RGB_GAMMA_MIN: WORD = 0o2500; // FIXME It is octal in the headers but are the headers actually right? pub const RGB_GAMMA_MAX: WORD = 65000; pub const REFERENCE_WHITE_MIN: WORD = 6000; pub const REFERENCE_WHITE_MAX: WORD = 10000; pub const REFERENCE_BLACK_MIN: WORD = 0; pub const REFERENCE_BLACK_MAX: WORD = 4000; pub const COLOR_ADJ_MIN: SHORT = -100; pub const COLOR_ADJ_MAX: SHORT = 100; STRUCT!{struct COLORADJUSTMENT { caSize: WORD, caFlags: WORD, caIlluminantIndex: WORD, caRedGamma: WORD, caGreenGamma: WORD, caBlueGamma: WORD, caReferenceBlack: WORD, caReferenceWhite: WORD, caContrast: SHORT, caBrightness: SHORT, caColorfulness: SHORT, caRedGreenTint: SHORT, }} pub type PCOLORADJUSTMENT = *mut COLORADJUSTMENT; pub type LPCOLORADJUSTMENT = *mut COLORADJUSTMENT; extern "system" { pub fn SetColorAdjustment( hdc: HDC, lpca: *const COLORADJUSTMENT, ) -> BOOL; pub fn GetColorAdjustment( hdc: HDC, lpca: LPCOLORADJUSTMENT, ) -> BOOL; pub fn CreateHalftonePalette( hdc: HDC, ) -> HPALETTE; } FN!{stdcall ABORTPROC( HDC, c_int, ) -> BOOL} STRUCT!{struct DOCINFOA { cbSize: c_int, lpszDocName: LPCSTR, lpszOutput: LPCSTR, lpszDatatype: LPCSTR, fwType: DWORD, }} pub type LPDOCINFOA = *mut DOCINFOA; STRUCT!{struct DOCINFOW { cbSize: c_int, lpszDocName: LPCWSTR, lpszOutput: LPCWSTR, lpszDatatype: LPCWSTR, fwType: DWORD, }} pub type LPDOCINFOW = *mut DOCINFOW; pub const DI_APPBANDING: DWORD = 0x00000001; pub const DI_ROPS_READ_DESTINATION: DWORD = 0x00000002; extern "system" { pub fn StartDocA( hdc: HDC, lpdi: *const DOCINFOA, ) -> c_int; pub fn StartDocW( hdc: HDC, lpdi: *const DOCINFOW, ) -> c_int; pub fn EndDoc( hdc: HDC, ) -> c_int; pub fn StartPage( hdc: HDC, ) -> c_int; pub fn EndPage( hdc: HDC, ) -> c_int; pub fn AbortDoc( hdc: HDC, ) -> c_int; pub fn SetAbortProc( hdc: HDC, aproc: ABORTPROC, ) -> c_int; pub fn AbortPath( hdc: HDC, ) -> BOOL; pub fn ArcTo( hdc: HDC, nLeftRect: c_int, nTopRect: c_int, nRightRect: c_int, nBottomRect: c_int, nXRadial1: c_int, nYRadial1: c_int, nXRadial2: c_int, nYRadial2: c_int, ) -> BOOL; pub fn BeginPath( hdc: HDC, ) -> BOOL; pub fn CloseFigure( hdc: HDC, ) -> BOOL; pub fn EndPath( hdc: HDC, ) -> BOOL; pub fn FillPath( hdc: HDC, ) -> BOOL; pub fn FlattenPath( hdc: HDC, ) -> BOOL; pub fn GetPath( hdc: HDC, apt: LPPOINT, aj: LPBYTE, cpt: c_int, ) -> c_int; pub fn PathToRegion( hdc: HDC, ) -> HRGN; pub fn PolyDraw( hdc: HDC, lppt: *const POINT, lpbTypes: *const BYTE, cCount: c_int, ) -> BOOL; pub fn SelectClipPath( hdc: HDC, mode: c_int, ) -> BOOL; pub fn SetArcDirection( hdc: HDC, ArcDirection: c_int, ) -> c_int; pub fn SetMiterLimit( hdc: HDC, limit: FLOAT, old: PFLOAT, ) -> BOOL; pub fn StrokeAndFillPath( hdc: HDC, ) -> BOOL; pub fn StrokePath( hdc: HDC, ) -> BOOL; pub fn WidenPath( hdc: HDC, ) -> BOOL; pub fn ExtCreatePen( iPenStyle: DWORD, cWidth: DWORD, plbrush: *const LOGBRUSH, cStyle: DWORD, pstyle: *const DWORD, ) -> HPEN; pub fn GetMiterLimit( hdc: HDC, plimit: PFLOAT, ) -> BOOL; pub fn GetArcDirection( hdc: HDC, ) -> c_int; pub fn GetObjectA( h: HANDLE, c: c_int, pv: LPVOID, ) -> c_int; pub fn GetObjectW( h: HANDLE, c: c_int, pv: LPVOID, ) -> c_int; pub fn MoveToEx( hdc: HDC, X: c_int, Y: c_int, lpPoint:LPPOINT, ) -> BOOL; pub fn TextOutA( hdc: HDC, x: c_int, y: c_int, lpString: LPCSTR, c: c_int, ) -> BOOL; pub fn TextOutW( hdc: HDC, x: c_int, y: c_int, lpString: LPCWSTR, c: c_int, ) -> BOOL; pub fn ExtTextOutA( hdc: HDC, x: c_int, y: c_int, options: UINT, lprect: *const RECT, lpString: LPCSTR, c: UINT, lpDx: *const INT, ) -> BOOL; pub fn ExtTextOutW( hdc: HDC, x: c_int, y: c_int, options: UINT, lprect: *const RECT, lpString: LPCWSTR, c: UINT, lpDx: *const INT, ) -> BOOL; pub fn PolyTextOutA( hdc: HDC, ppt: *const POLYTEXTA, nstrings: c_int, ) -> BOOL; pub fn PolyTextOutW( hdc: HDC, ppt: *const POLYTEXTW, nstrings: c_int, ) -> BOOL; pub fn CreatePolygonRgn( lppt: *const POINT, cPoints: c_int, fnPolyFillMode: c_int, ) -> HRGN; pub fn DPtoLP( hdc: HDC, lppt: *mut POINT, c: c_int, ) -> BOOL; pub fn LPtoDP( hdc: HDC, lppt: LPPOINT, c: c_int, ) -> BOOL; pub fn Polygon( hdc: HDC, lpPoints: *const POINT, nCount: c_int, ) -> BOOL; pub fn Polyline( hdc: HDC, lppt: *const POINT, cCount: c_int, ) -> BOOL; pub fn PolyBezier( hdc: HDC, lppt: *const POINT, cPoints: DWORD, ) -> BOOL; pub fn PolyBezierTo( hdc: HDC, lppt: *const POINT, cPoints: DWORD, ) -> BOOL; pub fn PolylineTo( hdc: HDC, lppt: *const POINT, cCount: DWORD, ) -> BOOL; pub fn SetViewportExtEx( hdc: HDC, x: c_int, y: c_int, lpsz: LPSIZE, ) -> BOOL; pub fn SetViewportOrgEx( hdc: HDC, x: c_int, y: c_int, lppt: *mut POINT, ) -> BOOL; pub fn SetWindowExtEx( hdc: HDC, x: c_int, y: c_int, lppt: LPSIZE, ) -> BOOL; pub fn SetWindowOrgEx( hdc: HDC, x: c_int, y: c_int, lppt: LPPOINT, ) -> BOOL; pub fn OffsetViewportOrgEx( hdc: HDC, x: c_int, y: c_int, lppt: LPPOINT, ) -> BOOL; pub fn OffsetWindowOrgEx( hdc: HDC, x: c_int, y: c_int, lppt: LPPOINT, ) -> BOOL; pub fn ScaleViewportExtEx( hdc: HDC,xn: c_int, dx: c_int, yn: c_int, yd: c_int, lpsz: LPSIZE, ) -> BOOL; pub fn ScaleWindowExtEx( hdc: HDC, xn: c_int, xd: c_int, yn: c_int, yd: c_int, lpsz: LPSIZE, ) -> BOOL; pub fn SetBitmapDimensionEx( hbm: HBITMAP, w: c_int, h: c_int, lpsz: LPSIZE, ) -> BOOL; pub fn SetBrushOrgEx( hdc: HDC, x: c_int, y: c_int, lppt: LPPOINT, ) -> BOOL; pub fn GetTextFaceA( hdc: HDC, c: c_int, lpName: LPSTR, ) -> c_int; pub fn GetTextFaceW( hdc: HDC, c: c_int, lpName: LPWSTR, ) -> c_int; } STRUCT!{struct KERNINGPAIR { wFirst: WORD, wSecond: WORD, iKernAmount: c_int, }} pub type LPKERNINGPAIR = *mut KERNINGPAIR; extern "system" { pub fn GetKerningPairsA( hdc: HDC, nPairs: DWORD, lpKernPair: LPKERNINGPAIR, ) -> DWORD; pub fn GetKerningPairsW( hdc: HDC, nPairs: DWORD, lpKernPair: LPKERNINGPAIR, ) -> DWORD; pub fn GetDCOrgEx( hdc: HDC, lppt: LPPOINT, ) -> BOOL; pub fn FixBrushOrgEx( hdc: HDC, x: c_int, y: c_int, ptl: LPPOINT, ) -> BOOL; pub fn UnrealizeObject( h: HGDIOBJ, ) -> BOOL; pub fn GdiFlush() -> BOOL; pub fn GdiSetBatchLimit( dw: DWORD, ) -> DWORD; pub fn GdiGetBatchLimit() -> DWORD; } pub const ICM_OFF: c_int = 1; pub const ICM_ON: c_int = 2; pub const ICM_QUERY: c_int = 3; pub const ICM_DONE_OUTSIDEDC: c_int = 4; FN!{stdcall ICMENUMPROCA( LPSTR, LPARAM, ) -> c_int} FN!{stdcall ICMENUMPROCW( LPWSTR, LPARAM, ) -> c_int} extern "system" { pub fn SetICMMode( hdc: HDC, mode: c_int, ) -> c_int; pub fn CheckColorsInGamut( hDC: HDC, lpRGBTriples: LPVOID, lpBuffer: LPVOID, nCount: UINT, ) -> BOOL; pub fn GetColorSpace( hdc: HDC, ) -> HCOLORSPACE; pub fn GetLogColorSpaceA( hColorSpace: HCOLORSPACE, lpBuffer: LPLOGCOLORSPACEA, nSize: DWORD, ) -> BOOL; pub fn GetLogColorSpaceW( hColorSpace: HCOLORSPACE, lpBuffer: LPLOGCOLORSPACEW, nSize: DWORD, ) -> BOOL; pub fn CreateColorSpaceA( lpLogColorSpace: LPLOGCOLORSPACEA, ) -> HCOLORSPACE; pub fn CreateColorSpaceW( lpLogColorSpace: LPLOGCOLORSPACEW, ) -> HCOLORSPACE; pub fn SetColorSpace( hdc: HDC, hcs: HCOLORSPACE, ) -> HCOLORSPACE; pub fn DeleteColorSpace( hcs: HCOLORSPACE, ) -> BOOL; pub fn GetICMProfileA( hdc: HDC, pBufSize: LPDWORD, pszFilename: LPSTR, ) -> BOOL; pub fn GetICMProfileW( hdc: HDC, pBufSize: LPDWORD, pszFilename: LPWSTR, ) -> BOOL; pub fn SetICMProfileA( hdc: HDC, lpFileName: LPSTR, ) -> BOOL; pub fn SetICMProfileW( hdc: HDC, lpFileName: LPWSTR, ) -> BOOL; pub fn GetDeviceGammaRamp( hdc: HDC, lpRamp: LPVOID, ) -> BOOL; pub fn SetDeviceGammaRamp( hdc: HDC, lpRamp: LPVOID, ) -> BOOL; pub fn ColorMatchToTarget( hDC: HDC, hdcTarget: HDC, uiAction: UINT, ) -> BOOL; pub fn EnumICMProfilesA( hdc: HDC, iproc: ICMENUMPROCA, param: LPARAM, ) -> c_int; pub fn EnumICMProfilesW( hdc: HDC, iproc: ICMENUMPROCW, param: LPARAM, ) -> c_int; pub fn UpdateICMRegKeyA( reserved: DWORD, lpszCMID: LPSTR, lpszFileName: LPSTR, command: UINT, ) -> BOOL; pub fn UpdateICMRegKeyW( reserved: DWORD, lpszCMID: LPWSTR, lpszFileName: LPWSTR, command: UINT, ) -> BOOL; pub fn ColorCorrectPalette( hDC: HDC, hPalette: HPALETTE, dwFirstEntry: DWORD, dwNumOfEntries: DWORD, ) -> BOOL; } pub const ENHMETA_SIGNATURE: DWORD = 0x464D4520; pub const ENHMETA_STOCK_OBJECT: DWORD = 0x80000000; pub const EMR_HEADER: DWORD = 1; pub const EMR_POLYBEZIER: DWORD = 2; pub const EMR_POLYGON: DWORD = 3; pub const EMR_POLYLINE: DWORD = 4; pub const EMR_POLYBEZIERTO: DWORD = 5; pub const EMR_POLYLINETO: DWORD = 6; pub const EMR_POLYPOLYLINE: DWORD = 7; pub const EMR_POLYPOLYGON: DWORD = 8; pub const EMR_SETWINDOWEXTEX: DWORD = 9; pub const EMR_SETWINDOWORGEX: DWORD = 10; pub const EMR_SETVIEWPORTEXTEX: DWORD = 11; pub const EMR_SETVIEWPORTORGEX: DWORD = 12; pub const EMR_SETBRUSHORGEX: DWORD = 13; pub const EMR_EOF: DWORD = 14; pub const EMR_SETPIXELV: DWORD = 15; pub const EMR_SETMAPPERFLAGS: DWORD = 16; pub const EMR_SETMAPMODE: DWORD = 17; pub const EMR_SETBKMODE: DWORD = 18; pub const EMR_SETPOLYFILLMODE: DWORD = 19; pub const EMR_SETROP2: DWORD = 20; pub const EMR_SETSTRETCHBLTMODE: DWORD = 21; pub const EMR_SETTEXTALIGN: DWORD = 22; pub const EMR_SETCOLORADJUSTMENT: DWORD = 23; pub const EMR_SETTEXTCOLOR: DWORD = 24; pub const EMR_SETBKCOLOR: DWORD = 25; pub const EMR_OFFSETCLIPRGN: DWORD = 26; pub const EMR_MOVETOEX: DWORD = 27; pub const EMR_SETMETARGN: DWORD = 28; pub const EMR_EXCLUDECLIPRECT: DWORD = 29; pub const EMR_INTERSECTCLIPRECT: DWORD = 30; pub const EMR_SCALEVIEWPORTEXTEX: DWORD = 31; pub const EMR_SCALEWINDOWEXTEX: DWORD = 32; pub const EMR_SAVEDC: DWORD = 33; pub const EMR_RESTOREDC: DWORD = 34; pub const EMR_SETWORLDTRANSFORM: DWORD = 35; pub const EMR_MODIFYWORLDTRANSFORM: DWORD = 36; pub const EMR_SELECTOBJECT: DWORD = 37; pub const EMR_CREATEPEN: DWORD = 38; pub const EMR_CREATEBRUSHINDIRECT: DWORD = 39; pub const EMR_DELETEOBJECT: DWORD = 40; pub const EMR_ANGLEARC: DWORD = 41; pub const EMR_ELLIPSE: DWORD = 42; pub const EMR_RECTANGLE: DWORD = 43; pub const EMR_ROUNDRECT: DWORD = 44; pub const EMR_ARC: DWORD = 45; pub const EMR_CHORD: DWORD = 46; pub const EMR_PIE: DWORD = 47; pub const EMR_SELECTPALETTE: DWORD = 48; pub const EMR_CREATEPALETTE: DWORD = 49; pub const EMR_SETPALETTEENTRIES: DWORD = 50; pub const EMR_RESIZEPALETTE: DWORD = 51; pub const EMR_REALIZEPALETTE: DWORD = 52; pub const EMR_EXTFLOODFILL: DWORD = 53; pub const EMR_LINETO: DWORD = 54; pub const EMR_ARCTO: DWORD = 55; pub const EMR_POLYDRAW: DWORD = 56; pub const EMR_SETARCDIRECTION: DWORD = 57; pub const EMR_SETMITERLIMIT: DWORD = 58; pub const EMR_BEGINPATH: DWORD = 59; pub const EMR_ENDPATH: DWORD = 60; pub const EMR_CLOSEFIGURE: DWORD = 61; pub const EMR_FILLPATH: DWORD = 62; pub const EMR_STROKEANDFILLPATH: DWORD = 63; pub const EMR_STROKEPATH: DWORD = 64; pub const EMR_FLATTENPATH: DWORD = 65; pub const EMR_WIDENPATH: DWORD = 66; pub const EMR_SELECTCLIPPATH: DWORD = 67; pub const EMR_ABORTPATH: DWORD = 68; pub const EMR_GDICOMMENT: DWORD = 70; pub const EMR_FILLRGN: DWORD = 71; pub const EMR_FRAMERGN: DWORD = 72; pub const EMR_INVERTRGN: DWORD = 73; pub const EMR_PAINTRGN: DWORD = 74; pub const EMR_EXTSELECTCLIPRGN: DWORD = 75; pub const EMR_BITBLT: DWORD = 76; pub const EMR_STRETCHBLT: DWORD = 77; pub const EMR_MASKBLT: DWORD = 78; pub const EMR_PLGBLT: DWORD = 79; pub const EMR_SETDIBITSTODEVICE: DWORD = 80; pub const EMR_STRETCHDIBITS: DWORD = 81; pub const EMR_EXTCREATEFONTINDIRECTW: DWORD = 82; pub const EMR_EXTTEXTOUTA: DWORD = 83; pub const EMR_EXTTEXTOUTW: DWORD = 84; pub const EMR_POLYBEZIER16: DWORD = 85; pub const EMR_POLYGON16: DWORD = 86; pub const EMR_POLYLINE16: DWORD = 87; pub const EMR_POLYBEZIERTO16: DWORD = 88; pub const EMR_POLYLINETO16: DWORD = 89; pub const EMR_POLYPOLYLINE16: DWORD = 90; pub const EMR_POLYPOLYGON16: DWORD = 91; pub const EMR_POLYDRAW16: DWORD = 92; pub const EMR_CREATEMONOBRUSH: DWORD = 93; pub const EMR_CREATEDIBPATTERNBRUSHPT: DWORD = 94; pub const EMR_EXTCREATEPEN: DWORD = 95; pub const EMR_POLYTEXTOUTA: DWORD = 96; pub const EMR_POLYTEXTOUTW: DWORD = 97; pub const EMR_SETICMMODE: DWORD = 98; pub const EMR_CREATECOLORSPACE: DWORD = 99; pub const EMR_SETCOLORSPACE: DWORD = 100; pub const EMR_DELETECOLORSPACE: DWORD = 101; pub const EMR_GLSRECORD: DWORD = 102; pub const EMR_GLSBOUNDEDRECORD: DWORD = 103; pub const EMR_PIXELFORMAT: DWORD = 104; pub const EMR_RESERVED_105: DWORD = 105; pub const EMR_RESERVED_106: DWORD = 106; pub const EMR_RESERVED_107: DWORD = 107; pub const EMR_RESERVED_108: DWORD = 108; pub const EMR_RESERVED_109: DWORD = 109; pub const EMR_RESERVED_110: DWORD = 110; pub const EMR_COLORCORRECTPALETTE: DWORD = 111; pub const EMR_SETICMPROFILEA: DWORD = 112; pub const EMR_SETICMPROFILEW: DWORD = 113; pub const EMR_ALPHABLEND: DWORD = 114; pub const EMR_SETLAYOUT: DWORD = 115; pub const EMR_TRANSPARENTBLT: DWORD = 116; pub const EMR_RESERVED_117: DWORD = 117; pub const EMR_GRADIENTFILL: DWORD = 118; pub const EMR_RESERVED_119: DWORD = 119; pub const EMR_RESERVED_120: DWORD = 120; pub const EMR_COLORMATCHTOTARGETW: DWORD = 121; pub const EMR_CREATECOLORSPACEW: DWORD = 122; pub const EMR_MIN: DWORD = 1; pub const EMR_MAX: DWORD = 122; STRUCT!{struct EMR { iType: DWORD, nSize: DWORD, }} pub type PEMR = *mut EMR; STRUCT!{struct EMRTEXT { ptlReference: POINTL, nChars: DWORD, offString: DWORD, fOptions: DWORD, rcl: RECTL, offDx: DWORD, }} pub type PEMRTEXT = *mut EMRTEXT; STRUCT!{struct EMRABORTPATH { emr: EMR, }} pub type PEMRABORTPATH = *mut EMRABORTPATH; pub type EMRBEGINPATH = EMRABORTPATH; pub type PEMRBEGINPATH = *mut EMRABORTPATH; pub type EMRENDPATH = EMRABORTPATH; pub type PEMRENDPATH = *mut EMRABORTPATH; pub type EMRCLOSEFIGURE = EMRABORTPATH; pub type PEMRCLOSEFIGURE = *mut EMRABORTPATH; pub type EMRFLATTENPATH = EMRABORTPATH; pub type PEMRFLATTENPATH = *mut EMRABORTPATH; pub type EMRWIDENPATH = EMRABORTPATH; pub type PEMRWIDENPATH = *mut EMRABORTPATH; pub type EMRSETMETARGN = EMRABORTPATH; pub type PEMRSETMETARGN = *mut EMRABORTPATH; pub type EMRSAVEDC = EMRABORTPATH; pub type PEMRSAVEDC = *mut EMRABORTPATH; pub type EMRREALIZEPALETTE = EMRABORTPATH; pub type PEMRREALIZEPALETTE = *mut EMRABORTPATH; STRUCT!{struct EMRSELECTCLIPPATH { emr: EMR, iMode: DWORD, }} pub type PEMRSELECTCLIPPATH = *mut EMRSELECTCLIPPATH; pub type EMRSETBKMODE = EMRSELECTCLIPPATH; pub type PEMRSETBKMODE = *mut EMRSELECTCLIPPATH; pub type EMRSETMAPMODE = EMRSELECTCLIPPATH; pub type PEMRSETMAPMODE = *mut EMRSELECTCLIPPATH; pub type EMRSETLAYOUT = EMRSELECTCLIPPATH; pub type PEMRSETLAYOUT = *mut EMRSELECTCLIPPATH; pub type EMRSETPOLYFILLMODE = EMRSELECTCLIPPATH; pub type PEMRSETPOLYFILLMODE = *mut EMRSELECTCLIPPATH; pub type EMRSETROP2 = EMRSELECTCLIPPATH; pub type PEMRSETROP2 = *mut EMRSELECTCLIPPATH; pub type EMRSETSTRETCHBLTMODE = EMRSELECTCLIPPATH; pub type PEMRSETSTRETCHBLTMODE = *mut EMRSELECTCLIPPATH; pub type EMRSETICMMODE = EMRSELECTCLIPPATH; pub type PEMRSETICMMODE = *mut EMRSELECTCLIPPATH; pub type EMRSETTEXTALIGN = EMRSELECTCLIPPATH; pub type PEMRSETTEXTALIGN = *mut EMRSELECTCLIPPATH; STRUCT!{struct EMRSETMITERLIMIT { emr: EMR, eMiterLimit: FLOAT, }} pub type PEMRSETMITERLIMIT = *mut EMRSETMITERLIMIT; STRUCT!{struct EMRRESTOREDC { emr: EMR, iRelative: LONG, }} pub type PEMRRESTOREDC = *mut EMRRESTOREDC; STRUCT!{struct EMRSETARCDIRECTION { emr: EMR, iArcDirection: DWORD, }} pub type PEMRSETARCDIRECTION = *mut EMRSETARCDIRECTION; STRUCT!{struct EMRSETMAPPERFLAGS { emr: EMR, dwFlags: DWORD, }} pub type PEMRSETMAPPERFLAGS = *mut EMRSETMAPPERFLAGS; STRUCT!{struct EMRSETBKCOLOR { emr: EMR, crColor: COLORREF, }} pub type PEMRSETBKCOLOR = *mut EMRSETBKCOLOR; pub type EMRSETTEXTCOLOR = EMRSETBKCOLOR; pub type PEMRSETTEXTCOLOR = *mut EMRSETBKCOLOR; STRUCT!{struct EMRSELECTOBJECT { emr: EMR, ihObject: DWORD, }} pub type PEMRSELECTOBJECT = *mut EMRSELECTOBJECT; pub type EMRDELETEOBJECT = EMRSELECTOBJECT; pub type PEMRDELETEOBJECT = *mut EMRSELECTOBJECT; STRUCT!{struct EMRSELECTPALETTE { emr: EMR, ihPal: DWORD, }} pub type PEMRSELECTPALETTE = *mut EMRSELECTPALETTE; STRUCT!{struct EMRRESIZEPALETTE { emr: EMR, ihPal: DWORD, cEntries: DWORD, }} pub type PEMRRESIZEPALETTE = *mut EMRRESIZEPALETTE; STRUCT!{struct EMRSETPALETTEENTRIES { emr: EMR, ihPal: DWORD, iStart: DWORD, cEntries: DWORD, aPalEntries: [PALETTEENTRY; 1], }} pub type PEMRSETPALETTEENTRIES = *mut EMRSETPALETTEENTRIES; STRUCT!{struct EMRSETCOLORADJUSTMENT { emr: EMR, ColorAdjustment: COLORADJUSTMENT, }} pub type PEMRSETCOLORADJUSTMENT = *mut EMRSETCOLORADJUSTMENT; STRUCT!{struct EMRGDICOMMENT { emr: EMR, cbData: DWORD, Data: [BYTE; 1], }} pub type PEMRGDICOMMENT = *mut EMRGDICOMMENT; STRUCT!{struct EMREOF { emr: EMR, nPalEntries: DWORD, offPalEntries: DWORD, nSizeLast: DWORD, }} pub type PEMREOF = *mut EMREOF; STRUCT!{struct EMRLINETO { emr: EMR, ptl: POINTL, }} pub type PEMRLINETO = *mut EMRLINETO; pub type EMRMOVETOEX = EMRLINETO; pub type PEMRMOVETOEX = *mut EMRLINETO; STRUCT!{struct EMROFFSETCLIPRGN { emr: EMR, ptlOffset: POINTL, }} pub type PEMROFFSETCLIPRGN = *mut EMROFFSETCLIPRGN; STRUCT!{struct EMRFILLPATH { emr: EMR, rclBounds: RECTL, }} pub type PEMRFILLPATH = *mut EMRFILLPATH; pub type EMRSTROKEANDFILLPATH = EMRFILLPATH; pub type PEMRSTROKEANDFILLPATH = *mut EMRFILLPATH; pub type EMRSTROKEPATH = EMRFILLPATH; pub type PEMRSTROKEPATH = *mut EMRFILLPATH; STRUCT!{struct EMREXCLUDECLIPRECT { emr: EMR, rclClip: RECTL, }} pub type PEMREXCLUDECLIPRECT = *mut EMREXCLUDECLIPRECT; pub type EMRINTERSECTCLIPRECT = EMREXCLUDECLIPRECT; pub type PEMRINTERSECTCLIPRECT = *mut EMREXCLUDECLIPRECT; STRUCT!{struct EMRSETVIEWPORTORGEX { emr: EMR, ptlOrigin: POINTL, }} pub type PEMRSETVIEWPORTORGEX = *mut EMRSETVIEWPORTORGEX; pub type EMRSETWINDOWORGEX = EMRSETVIEWPORTORGEX; pub type PEMRSETWINDOWORGEX = *mut EMRSETVIEWPORTORGEX; pub type EMRSETBRUSHORGEX = EMRSETVIEWPORTORGEX; pub type PEMRSETBRUSHORGEX = *mut EMRSETVIEWPORTORGEX; STRUCT!{struct EMRSETVIEWPORTEXTEX { emr: EMR, szlExtent: SIZEL, }} pub type PEMRSETVIEWPORTEXTEX = *mut EMRSETVIEWPORTEXTEX; pub type EMRSETWINDOWEXTEX = EMRSETVIEWPORTEXTEX; pub type PEMRSETWINDOWEXTEX = *mut EMRSETVIEWPORTEXTEX; STRUCT!{struct EMRSCALEVIEWPORTEXTEX { emr: EMR, xNum: LONG, xDenom: LONG, yNum: LONG, yDenom: LONG, }} pub type PEMRSCALEVIEWPORTEXTEX = *mut EMRSCALEVIEWPORTEXTEX; pub type EMRSCALEWINDOWEXTEX = EMRSCALEVIEWPORTEXTEX; pub type PEMRSCALEWINDOWEXTEX = *mut EMRSCALEVIEWPORTEXTEX; STRUCT!{struct EMRSETWORLDTRANSFORM { emr: EMR, xform: XFORM, }} pub type PEMRSETWORLDTRANSFORM = *mut EMRSETWORLDTRANSFORM; STRUCT!{struct EMRMODIFYWORLDTRANSFORM { emr: EMR, xform: XFORM, iMode: DWORD, }} pub type PEMRMODIFYWORLDTRANSFORM = *mut EMRMODIFYWORLDTRANSFORM; STRUCT!{struct EMRSETPIXELV { emr: EMR, ptlPixel: POINTL, crColor: COLORREF, }} pub type PEMRSETPIXELV = *mut EMRSETPIXELV; STRUCT!{struct EMREXTFLOODFILL { emr: EMR, ptlStart: POINTL, crColor: COLORREF, iMode: DWORD, }} pub type PEMREXTFLOODFILL = *mut EMREXTFLOODFILL; STRUCT!{struct EMRELLIPSE { emr: EMR, rclBox: RECTL, }} pub type PEMRELLIPSE = *mut EMRELLIPSE; pub type EMRRECTANGLE = EMRELLIPSE; pub type PEMRRECTANGLE = *mut EMRELLIPSE; STRUCT!{struct EMRROUNDRECT { emr: EMR, rclBox: RECTL, szlCorner: SIZEL, }} pub type PEMRROUNDRECT = *mut EMRROUNDRECT; STRUCT!{struct EMRARC { emr: EMR, rclBox: RECTL, ptlStart: POINTL, ptlEnd: POINTL, }} pub type PEMRARC = *mut EMRARC; pub type EMRARCTO = EMRARC; pub type PEMRARCTO = *mut EMRARC; pub type EMRCHORD = EMRARC; pub type PEMRCHORD = *mut EMRARC; pub type EMRPIE = EMRARC; pub type PEMRPIE = *mut EMRARC; STRUCT!{struct EMRANGLEARC { emr: EMR, ptlCenter: POINTL, nRadius: DWORD, eStartAngle: FLOAT, eSweepAngle: FLOAT, }} pub type PEMRANGLEARC = *mut EMRANGLEARC; STRUCT!{struct EMRPOLYLINE { emr: EMR, rclBounds: RECTL, cptl: DWORD, aptl: [POINTL; 1], }} pub type PEMRPOLYLINE = *mut EMRPOLYLINE; pub type EMRPOLYBEZIER = EMRPOLYLINE; pub type PEMRPOLYBEZIER = *mut EMRPOLYLINE; pub type EMRPOLYGON = EMRPOLYLINE; pub type PEMRPOLYGON = *mut EMRPOLYLINE; pub type EMRPOLYBEZIERTO = EMRPOLYLINE; pub type PEMRPOLYBEZIERTO = *mut EMRPOLYLINE; pub type EMRPOLYLINETO = EMRPOLYLINE; pub type PEMRPOLYLINETO = *mut EMRPOLYLINE; STRUCT!{struct EMRPOLYLINE16 { emr: EMR, rclBounds: RECTL, cpts: DWORD, apts: [POINTS; 1], }} pub type PEMRPOLYLINE16 = *mut EMRPOLYLINE16; pub type EMRPOLYBEZIER16 = EMRPOLYLINE16; pub type PEMRPOLYBEZIER16 = *mut EMRPOLYLINE16; pub type EMRPOLYGON16 = EMRPOLYLINE16; pub type PEMRPOLYGON16 = *mut EMRPOLYLINE16; pub type EMRPOLYBEZIERTO16 = EMRPOLYLINE16; pub type PEMRPOLYBEZIERTO16 = *mut EMRPOLYLINE16; pub type EMRPOLYLINETO16 = EMRPOLYLINE16; pub type PEMRPOLYLINETO16 = *mut EMRPOLYLINE16; STRUCT!{struct EMRPOLYDRAW { emr: EMR, rclBounds: RECTL, cptl: DWORD, aptl: [POINTL; 1], abTypes: [BYTE; 1], }} pub type PEMRPOLYDRAW = *mut EMRPOLYDRAW; STRUCT!{struct EMRPOLYDRAW16 { emr: EMR, rclBounds: RECTL, cpts: DWORD, apts: [POINTS; 1], abTypes: [BYTE; 1], }} pub type PEMRPOLYDRAW16 = *mut EMRPOLYDRAW16; STRUCT!{struct EMRPOLYPOLYLINE { emr: EMR, rclBounds: RECTL, nPolys: DWORD, cptl: DWORD, aPolyCounts: [DWORD; 1], aptl: [POINTL; 1], }} pub type PEMRPOLYPOLYLINE = *mut EMRPOLYPOLYLINE; pub type EMRPOLYPOLYGON = EMRPOLYPOLYLINE; pub type PEMRPOLYPOLYGON = *mut EMRPOLYPOLYLINE; STRUCT!{struct EMRPOLYPOLYLINE16 { emr: EMR, rclBounds: RECTL, nPolys: DWORD, cpts: DWORD, aPolyCounts: [DWORD; 1], apts: [POINTS; 1], }} pub type PEMRPOLYPOLYLINE16 = *mut EMRPOLYPOLYLINE16; pub type EMRPOLYPOLYGON16 = EMRPOLYPOLYLINE16; pub type PEMRPOLYPOLYGON16 = *mut EMRPOLYPOLYLINE16; STRUCT!{struct EMRINVERTRGN { emr: EMR, rclBounds: RECTL, cbRgnData: DWORD, RgnData: [BYTE; 1], }} pub type PEMRINVERTRGN = *mut EMRINVERTRGN; pub type EMRPAINTRGN = EMRINVERTRGN; pub type PEMRPAINTRGN = *mut EMRINVERTRGN; STRUCT!{struct EMRFILLRGN { emr: EMR, rclBounds: RECTL, cbRgnData: DWORD, ihBrush: DWORD, RgnData: [BYTE; 1], }} pub type PEMRFILLRGN = *mut EMRFILLRGN; STRUCT!{struct EMRFRAMERGN { emr: EMR, rclBounds: RECTL, cbRgnData: DWORD, ihBrush: DWORD, szlStroke: SIZEL, RgnData: [BYTE; 1], }} pub type PEMRFRAMERGN = *mut EMRFRAMERGN; STRUCT!{struct EMREXTSELECTCLIPRGN { emr: EMR, cbRgnData: DWORD, iMode: DWORD, RgnData: [BYTE; 1], }} pub type PEMREXTSELECTCLIPRGN = *mut EMREXTSELECTCLIPRGN; STRUCT!{struct EMREXTTEXTOUTA { emr: EMR, rclBounds: RECTL, iGraphicsMode: DWORD, exScale: FLOAT, eyScale: FLOAT, emrtext: EMRTEXT, }} pub type PEMREXTTEXTOUTA = *mut EMREXTTEXTOUTA; pub type EMREXTTEXTOUTW = EMREXTTEXTOUTA; pub type PEMREXTTEXTOUTW = *mut EMREXTTEXTOUTA; STRUCT!{struct EMRPOLYTEXTOUTA { emr: EMR, rclBounds: RECTL, iGraphicsMode: DWORD, exScale: FLOAT, eyScale: FLOAT, cStrings: LONG, aemrtext: [EMRTEXT; 1], }} pub type PEMRPOLYTEXTOUTA = *mut EMRPOLYTEXTOUTA; pub type EMRPOLYTEXTOUTW = EMRPOLYTEXTOUTA; pub type PEMRPOLYTEXTOUTW = *mut EMRPOLYTEXTOUTA; STRUCT!{struct EMRBITBLT { emr: EMR, rclBounds: RECTL, xDest: LONG, yDest: LONG, cxDest: LONG, cyDest: LONG, dwRop: DWORD, xSrc: LONG, ySrc: LONG, xformSrc: XFORM, crBkColorSrc: COLORREF, iUsageSrc: DWORD, offBmiSrc: DWORD, cbBmiSrc: DWORD, offBitsSrc: DWORD, cbBitsSrc: DWORD, }} pub type PEMRBITBLT = *mut EMRBITBLT; STRUCT!{struct EMRSTRETCHBLT { emr: EMR, rclBounds: RECTL, xDest: LONG, yDest: LONG, cxDest: LONG, cyDest: LONG, dwRop: DWORD, xSrc: LONG, ySrc: LONG, xformSrc: XFORM, crBkColorSrc: COLORREF, iUsageSrc: DWORD, offBmiSrc: DWORD, cbBmiSrc: DWORD, offBitsSrc: DWORD, cbBitsSrc: DWORD, cxSrc: LONG, cySrc: LONG, }} pub type PEMRSTRETCHBLT = *mut EMRSTRETCHBLT; STRUCT!{struct EMRMASKBLT { emr: EMR, rclBounds: RECTL, xDest: LONG, yDest: LONG, cxDest: LONG, cyDest: LONG, dwRop: DWORD, xSrc: LONG, ySrc: LONG, xformSrc: XFORM, crBkColorSrc: COLORREF, iUsageSrc: DWORD, offBmiSrc: DWORD, cbBmiSrc: DWORD, offBitsSrc: DWORD, cbBitsSrc: DWORD, xMask: LONG, yMask: LONG, iUsageMask: DWORD, offBmiMask: DWORD, cbBmiMask: DWORD, offBitsMask: DWORD, cbBitsMask: DWORD, }} pub type PEMRMASKBLT = *mut EMRMASKBLT; STRUCT!{struct EMRPLGBLT { emr: EMR, rclBounds: RECTL, aptlDest: [POINTL; 3], xSrc: LONG, ySrc: LONG, cxSrc: LONG, cySrc: LONG, xformSrc: XFORM, crBkColorSrc: COLORREF, iUsageSrc: DWORD, offBmiSrc: DWORD, cbBmiSrc: DWORD, offBitsSrc: DWORD, cbBitsSrc: DWORD, xMask: LONG, yMask: LONG, iUsageMask: DWORD, offBmiMask: DWORD, cbBmiMask: DWORD, offBitsMask: DWORD, cbBitsMask: DWORD, }} pub type PEMRPLGBLT = *mut EMRPLGBLT; STRUCT!{struct EMRSETDIBITSTODEVICE { emr: EMR, rclBounds: RECTL, xDest: LONG, yDest: LONG, xSrc: LONG, ySrc: LONG, cxSrc: LONG, cySrc: LONG, offBmiSrc: DWORD, cbBmiSrc: DWORD, offBitsSrc: DWORD, cbBitsSrc: DWORD, iUsageSrc: DWORD, iStartScan: DWORD, cScans: DWORD, }} pub type PEMRSETDIBITSTODEVICE = *mut EMRSETDIBITSTODEVICE; STRUCT!{struct EMRSTRETCHDIBITS { emr: EMR, rclBounds: RECTL, xDest: LONG, yDest: LONG, xSrc: LONG, ySrc: LONG, cxSrc: LONG, cySrc: LONG, offBmiSrc: DWORD, cbBmiSrc: DWORD, offBitsSrc: DWORD, cbBitsSrc: DWORD, iUsageSrc: DWORD, dwRop: DWORD, cxDest: LONG, cyDest: LONG, }} pub type PEMRSTRETCHDIBITS = *mut EMRSTRETCHDIBITS; STRUCT!{struct EMREXTCREATEFONTINDIRECTW { emr: EMR, ihFont: DWORD, elfw: EXTLOGFONTW, }} pub type PEMREXTCREATEFONTINDIRECTW = *mut EMREXTCREATEFONTINDIRECTW; STRUCT!{struct EMRCREATEPALETTE { emr: EMR, ihPal: DWORD, lgpl: LOGPALETTE, }} pub type PEMRCREATEPALETTE = *mut EMRCREATEPALETTE; STRUCT!{struct EMRCREATEPEN { emr: EMR, ihPen: DWORD, lopn: LOGPEN, }} pub type PEMRCREATEPEN = *mut EMRCREATEPEN; STRUCT!{struct EMREXTCREATEPEN { emr: EMR, ihPen: DWORD, offBmi: DWORD, cbBmi: DWORD, offBits: DWORD, cbBits: DWORD, elp: EXTLOGPEN32, }} pub type PEMREXTCREATEPEN = *mut EMREXTCREATEPEN; STRUCT!{struct EMRCREATEBRUSHINDIRECT { emr: EMR, ihBrush: DWORD, lb: LOGBRUSH32, }} pub type PEMRCREATEBRUSHINDIRECT = *mut EMRCREATEBRUSHINDIRECT; STRUCT!{struct EMRCREATEMONOBRUSH { emr: EMR, ihBrush: DWORD, iUsage: DWORD, offBmi: DWORD, cbBmi: DWORD, offBits: DWORD, cbBits: DWORD, }} pub type PEMRCREATEMONOBRUSH = *mut EMRCREATEMONOBRUSH; STRUCT!{struct EMRCREATEDIBPATTERNBRUSHPT { emr: EMR, ihBrush: DWORD, iUsage: DWORD, offBmi: DWORD, cbBmi: DWORD, offBits: DWORD, cbBits: DWORD, }} pub type PEMRCREATEDIBPATTERNBRUSHPT = *mut EMRCREATEDIBPATTERNBRUSHPT; STRUCT!{struct EMRFORMAT { dSignature: DWORD, nVersion: DWORD, cbData: DWORD, offData: DWORD, }} pub type PEMRFORMAT = *mut EMRFORMAT; STRUCT!{struct EMRGLSRECORD { emr: EMR, cbData: DWORD, Data: [BYTE; 1], }} pub type PEMRGLSRECORD = *mut EMRGLSRECORD; STRUCT!{struct EMRGLSBOUNDEDRECORD { emr: EMR, rclBounds: RECTL, cbData: DWORD, Data: [BYTE; 1], }} pub type PEMRGLSBOUNDEDRECORD = *mut EMRGLSBOUNDEDRECORD; STRUCT!{struct EMRPIXELFORMAT { emr: EMR, pfd: PIXELFORMATDESCRIPTOR, }} pub type PEMRPIXELFORMAT = *mut EMRPIXELFORMAT; STRUCT!{struct EMRCREATECOLORSPACE { emr: EMR, ihCS: DWORD, lcs: LOGCOLORSPACEA, }} pub type PEMRCREATECOLORSPACE = *mut EMRCREATECOLORSPACE; STRUCT!{struct EMRSETCOLORSPACE { emr: EMR, ihCS: DWORD, }} pub type PEMRSETCOLORSPACE = *mut EMRSETCOLORSPACE; pub type EMRSELECTCOLORSPACE = EMRSETCOLORSPACE; pub type PEMRSELECTCOLORSPACE = *mut EMRSETCOLORSPACE; pub type EMRDELETECOLORSPACE = EMRSETCOLORSPACE; pub type PEMRDELETECOLORSPACE = *mut EMRSETCOLORSPACE; STRUCT!{struct EMREXTESCAPE { emr: EMR, iEscape: INT, cbEscData: INT, EscData: [BYTE; 1], }} pub type PEMREXTESCAPE = *mut EMREXTESCAPE; pub type EMRDRAWESCAPE = EMREXTESCAPE; pub type PEMRDRAWESCAPE = *mut EMREXTESCAPE; STRUCT!{struct EMRNAMEDESCAPE { emr: EMR, iEscape: INT, cbDriver: INT, cbEscData: INT, EscData: [BYTE; 1], }} pub type PEMRNAMEDESCAPE = *mut EMRNAMEDESCAPE; pub const SETICMPROFILE_EMBEDED: DWORD = 0x00000001; STRUCT!{struct EMRSETICMPROFILE { emr: EMR, dwFlags: DWORD, cbName: DWORD, cbData: DWORD, Data: [BYTE; 1], }} pub type PEMRSETICMPROFILE = *mut EMRSETICMPROFILE; pub type EMRSETICMPROFILEA = EMRSETICMPROFILE; pub type PEMRSETICMPROFILEA = *mut EMRSETICMPROFILE; pub type EMRSETICMPROFILEW = EMRSETICMPROFILE; pub type PEMRSETICMPROFILEW = *mut EMRSETICMPROFILE; pub const CREATECOLORSPACE_EMBEDED: DWORD = 0x00000001; STRUCT!{struct EMRCREATECOLORSPACEW { emr: EMR, ihCS: DWORD, lcs: LOGCOLORSPACEW, dwFlags: DWORD, cbData: DWORD, Data: [BYTE; 1], }} pub type PEMRCREATECOLORSPACEW = *mut EMRCREATECOLORSPACEW; pub const COLORMATCHTOTARGET_EMBEDED: DWORD = 0x00000001; STRUCT!{struct EMRCOLORMATCHTOTARGET { emr: EMR, dwAction: DWORD, dwFlags: DWORD, cbName: DWORD, cbData: DWORD, Data: [BYTE; 1], }} pub type PEMRCOLORMATCHTOTARGET = *mut EMRCOLORMATCHTOTARGET; STRUCT!{struct EMRCOLORCORRECTPALETTE { emr: EMR, ihPalette: DWORD, nFirstEntry: DWORD, nPalEntries: DWORD, nReserved: DWORD, }} pub type PEMRCOLORCORRECTPALETTE = *mut EMRCOLORCORRECTPALETTE; STRUCT!{struct EMRALPHABLEND { emr: EMR, rclBounds: RECTL, xDest: LONG, yDest: LONG, cxDest: LONG, cyDest: LONG, dwRop: DWORD, xSrc: LONG, ySrc: LONG, xformSrc: XFORM, crBkColorSrc: COLORREF, iUsageSrc: DWORD, offBmiSrc: DWORD, cbBmiSrc: DWORD, offBitsSrc: DWORD, cbBitsSrc: DWORD, cxSrc: LONG, cySrc: LONG, }} pub type PEMRALPHABLEND = *mut EMRALPHABLEND; STRUCT!{struct EMRGRADIENTFILL { emr: EMR, rclBounds: RECTL, nVer: DWORD, nTri: DWORD, ulMode: ULONG, Ver: [TRIVERTEX; 1], }} pub type PEMRGRADIENTFILL = *mut EMRGRADIENTFILL; STRUCT!{struct EMRTRANSPARENTBLT { emr: EMR, rclBounds: RECTL, xDest: LONG, yDest: LONG, cxDest: LONG, cyDest: LONG, dwRop: DWORD, xSrc: LONG, ySrc: LONG, xformSrc: XFORM, crBkColorSrc: COLORREF, iUsageSrc: DWORD, offBmiSrc: DWORD, cbBmiSrc: DWORD, offBitsSrc: DWORD, cbBitsSrc: DWORD, cxSrc: LONG, cySrc: LONG, }} pub type PEMRTRANSPARENTBLT = *mut EMRTRANSPARENTBLT; pub const GDICOMMENT_IDENTIFIER: DWORD = 0x43494447; pub const GDICOMMENT_WINDOWS_METAFILE: DWORD = 0x80000001; pub const GDICOMMENT_BEGINGROUP: DWORD = 0x00000002; pub const GDICOMMENT_ENDGROUP: DWORD = 0x00000003; pub const GDICOMMENT_MULTIFORMATS: DWORD = 0x40000004; pub const EPS_SIGNATURE: DWORD = 0x46535045; pub const GDICOMMENT_UNICODE_STRING: DWORD = 0x00000040; pub const GDICOMMENT_UNICODE_END: DWORD = 0x00000080; extern "system" { pub fn wglCopyContext( hglrcSrc: HGLRC, hglrcDst: HGLRC, mask: UINT, ) -> BOOL; pub fn wglCreateContext( hdc: HDC, ) -> HGLRC; pub fn wglCreateLayerContext( hdc: HDC, iLayerPlane: c_int, ) -> HGLRC; pub fn wglDeleteContext( hglrc: HGLRC, ) -> BOOL; pub fn wglGetCurrentContext() -> HGLRC; pub fn wglGetCurrentDC() -> HDC; pub fn wglGetProcAddress( lpszProc: LPCSTR, ) -> PROC; pub fn wglMakeCurrent( hdc: HDC, hglrc: HGLRC, ) -> BOOL; pub fn wglShareLists( hglrc1: HGLRC, hglrc2: HGLRC, ) -> BOOL; pub fn wglUseFontBitmapsA( hdc: HDC, first: DWORD, count: DWORD, listBase: DWORD, ) -> BOOL; pub fn wglUseFontBitmapsW( hdc: HDC, first: DWORD, count: DWORD, listBase: DWORD, ) -> BOOL; pub fn SwapBuffers( hdc: HDC, ) -> BOOL; } STRUCT!{struct POINTFLOAT { x: FLOAT, y: FLOAT, }} pub type PPOINTFLOAT = *mut POINTFLOAT; STRUCT!{struct GLYPHMETRICSFLOAT { gmfBlackBoxX: FLOAT, gmfBlackBoxY: FLOAT, gmfptGlyphOrigin: POINTFLOAT, gmfCellIncX: FLOAT, gmfCellIncY: FLOAT, }} pub type PGLYPHMETRICSFLOAT = *mut GLYPHMETRICSFLOAT; pub type LPGLYPHMETRICSFLOAT = *mut GLYPHMETRICSFLOAT; pub const WGL_FONT_LINES: DWORD = 0; pub const WGL_FONT_POLYGONS: DWORD = 1; extern "system" { pub fn wglUseFontOutlinesA( hdc: HDC, first: DWORD, count: DWORD, listBase: DWORD, deviation: FLOAT, extrusion: FLOAT, format: c_int, lpgmf: LPGLYPHMETRICSFLOAT, ) -> BOOL; pub fn wglUseFontOutlinesW( hdc: HDC, first: DWORD, count: DWORD, listBase: DWORD, deviation: FLOAT, extrusion: FLOAT, format: c_int, lpgmf: LPGLYPHMETRICSFLOAT, ) -> BOOL; } STRUCT!{struct LAYERPLANEDESCRIPTOR { nSize: WORD, nVersion: WORD, dwFlags: DWORD, iPixelType: BYTE, cColorBits: BYTE, cRedBits: BYTE, cRedShift: BYTE, cGreenBits: BYTE, cGreenShift: BYTE, cBlueBits: BYTE, cBlueShift: BYTE, cAlphaBits: BYTE, cAlphaShift: BYTE, cAccumBits: BYTE, cAccumRedBits: BYTE, cAccumGreenBits: BYTE, cAccumBlueBits: BYTE, cAccumAlphaBits: BYTE, cDepthBits: BYTE, cStencilBits: BYTE, cAuxBuffers: BYTE, iLayerPlane: BYTE, bReserved: BYTE, crTransparent: COLORREF, }} pub type PLAYERPLANEDESCRIPTOR = *mut LAYERPLANEDESCRIPTOR; pub type LPLAYERPLANEDESCRIPTOR = *mut LAYERPLANEDESCRIPTOR; pub const LPD_DOUBLEBUFFER: DWORD = 0x00000001; pub const LPD_STEREO: DWORD = 0x00000002; pub const LPD_SUPPORT_GDI: DWORD = 0x00000010; pub const LPD_SUPPORT_OPENGL: DWORD = 0x00000020; pub const LPD_SHARE_DEPTH: DWORD = 0x00000040; pub const LPD_SHARE_STENCIL: DWORD = 0x00000080; pub const LPD_SHARE_ACCUM: DWORD = 0x00000100; pub const LPD_SWAP_EXCHANGE: DWORD = 0x00000200; pub const LPD_SWAP_COPY: DWORD = 0x00000400; pub const LPD_TRANSPARENT: DWORD = 0x00001000; pub const LPD_TYPE_RGBA: BYTE = 0; pub const LPD_TYPE_COLORINDEX: BYTE = 1; pub const WGL_SWAP_MAIN_PLANE: UINT = 0x00000001; pub const WGL_SWAP_OVERLAY1: UINT = 0x00000002; pub const WGL_SWAP_OVERLAY2: UINT = 0x00000004; pub const WGL_SWAP_OVERLAY3: UINT = 0x00000008; pub const WGL_SWAP_OVERLAY4: UINT = 0x00000010; pub const WGL_SWAP_OVERLAY5: UINT = 0x00000020; pub const WGL_SWAP_OVERLAY6: UINT = 0x00000040; pub const WGL_SWAP_OVERLAY7: UINT = 0x00000080; pub const WGL_SWAP_OVERLAY8: UINT = 0x00000100; pub const WGL_SWAP_OVERLAY9: UINT = 0x00000200; pub const WGL_SWAP_OVERLAY10: UINT = 0x00000400; pub const WGL_SWAP_OVERLAY11: UINT = 0x00000800; pub const WGL_SWAP_OVERLAY12: UINT = 0x00001000; pub const WGL_SWAP_OVERLAY13: UINT = 0x00002000; pub const WGL_SWAP_OVERLAY14: UINT = 0x00004000; pub const WGL_SWAP_OVERLAY15: UINT = 0x00008000; pub const WGL_SWAP_UNDERLAY1: UINT = 0x00010000; pub const WGL_SWAP_UNDERLAY2: UINT = 0x00020000; pub const WGL_SWAP_UNDERLAY3: UINT = 0x00040000; pub const WGL_SWAP_UNDERLAY4: UINT = 0x00080000; pub const WGL_SWAP_UNDERLAY5: UINT = 0x00100000; pub const WGL_SWAP_UNDERLAY6: UINT = 0x00200000; pub const WGL_SWAP_UNDERLAY7: UINT = 0x00400000; pub const WGL_SWAP_UNDERLAY8: UINT = 0x00800000; pub const WGL_SWAP_UNDERLAY9: UINT = 0x01000000; pub const WGL_SWAP_UNDERLAY10: UINT = 0x02000000; pub const WGL_SWAP_UNDERLAY11: UINT = 0x04000000; pub const WGL_SWAP_UNDERLAY12: UINT = 0x08000000; pub const WGL_SWAP_UNDERLAY13: UINT = 0x10000000; pub const WGL_SWAP_UNDERLAY14: UINT = 0x20000000; pub const WGL_SWAP_UNDERLAY15: UINT = 0x40000000; extern "system" { pub fn wglDescribeLayerPlane( hdc: HDC, iPixelFormat: c_int, iLayerPlane: c_int, nBytes: UINT, plpd: LPLAYERPLANEDESCRIPTOR, ) -> BOOL; pub fn wglSetLayerPaletteEntries( hdc: HDC, iLayerPlane: c_int, iStart: c_int, cEntries: c_int, pcr: *const COLORREF, ) -> c_int; pub fn wglGetLayerPaletteEntries( hdc: HDC, iLayerPlane: c_int, iStart: c_int, cEntries: c_int, pcr: *const COLORREF, ) -> c_int; pub fn wglRealizeLayerPalette( hdc: HDC, iLayerPlane: c_int, bRealize: BOOL, ) -> BOOL; pub fn wglSwapLayerBuffers( hdc: HDC, fuPlanes: UINT, ) -> BOOL; } STRUCT!{struct WGLSWAP { hdc: HDC, uiFlags: UINT, }} pub type PWGLSWAP = *mut WGLSWAP; pub type LPWGLSWAP = *mut WGLSWAP; pub const WGL_SWAPMULTIPLE_MAX: usize = 16; extern "system" { pub fn wglSwapMultipleBuffers( n: UINT, ps: *const WGLSWAP, ) -> DWORD; }