diff options
| author | su_v <suv-sf@users.sourceforge.net> | 2012-09-23 17:19:33 +0000 |
|---|---|---|
| committer | ~suv <suv-sf@users.sourceforge.net> | 2012-09-23 17:19:33 +0000 |
| commit | 89bb2602a15a830b7e2133307a8ec6a08ebd0f84 (patch) | |
| tree | 9d99114076f755d5098b353b1cd26215e74abe61 /src/extension/internal/uemf.h | |
| parent | Add libunicode-convert: routines for converting between Unicode and nonunicod... (diff) | |
| download | inkscape-89bb2602a15a830b7e2133307a8ec6a08ebd0f84.tar.gz inkscape-89bb2602a15a830b7e2133307a8ec6a08ebd0f84.zip | |
Fixes bug #988601: omnibus patch for EMF input/output support (cross-platform)
(bzr r11668.1.8)
Diffstat (limited to 'src/extension/internal/uemf.h')
| -rw-r--r-- | src/extension/internal/uemf.h | 2933 |
1 files changed, 2933 insertions, 0 deletions
diff --git a/src/extension/internal/uemf.h b/src/extension/internal/uemf.h new file mode 100644 index 000000000..b09dc5d99 --- /dev/null +++ b/src/extension/internal/uemf.h @@ -0,0 +1,2933 @@ +/** + @file uemf.h Structures and functions prototypes for EMF files. + + EMF file Record structure information has been derived from Mingw, Wine, and libEMF header files, and from + Microsoft's EMF Information pdf, release date March 28,2012, link from here: + + http://msdn2.microsoft.com/en-us/library/cc230514.aspx + + If the direct link fails the document may be found + by searching for: "[MS-EMF]: Enhanced Metafile Format" + +*/ + +/* +File: uemf.h +Version: 0.0.8 +Date: 14-SEP-2012 +Author: David Mathog, Biology Division, Caltech +email: mathog@caltech.edu +Copyright: 2012 David Mathog and California Institute of Technology (Caltech) +*/ + +#ifndef _UEMF_ +#define _UEMF_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include <stdint.h> +#include <stdbool.h> +#include "uemf_endian.h" + + + +// *********************************************************************************** +// defines not placed yet + +#define U_PAN_CULTURE_LATIN 0 + +#define U_SYSPAL_ERROR 0 +#define U_SYSPAL_STATIC 1 +#define U_SYSPAL_NOSTATIC 2 + +#define U_ELF_VENDOR_SIZE 4 + + +// *********************************************************************************** +// Value enumerations and other predefined constants, alphabetical order by group + + + +/** \defgroup Font_struct_widths Font name and style widths in characters + For U_LOGFONT and U_LOGFONT_PANOSE, + @{ +*/ +#define U_LF_FACESIZE 32 //!< U_LOGFONT lfFaceName and U_LOGFONT_PANOSE elfStyle fields maximum width +#define U_LF_FULLFACESIZE 64 //!< U_LOGFONT_PANOSE elfFullName field maximum width +/** @} */ + +/** \defgroup U_EMR_Qualifiers RecordType Enumeration + (RecordType Enumeration) + For U_EMR iType field + @{ +*/ +#define U_EMR_HEADER 1 //!< U_EMRHEADER record +#define U_EMR_POLYBEZIER 2 //!< U_EMRPOLYBEZIER record +#define U_EMR_POLYGON 3 //!< U_EMRPOLYGON record +#define U_EMR_POLYLINE 4 //!< U_EMRPOLYLINE record +#define U_EMR_POLYBEZIERTO 5 //!< U_EMRPOLYBEZIERTO record +#define U_EMR_POLYLINETO 6 //!< U_EMRPOLYLINETO record +#define U_EMR_POLYPOLYLINE 7 //!< U_EMRPOLYPOLYLINE record +#define U_EMR_POLYPOLYGON 8 //!< U_EMRPOLYPOLYGON record +#define U_EMR_SETWINDOWEXTEX 9 //!< U_EMRSETWINDOWEXTEX record +#define U_EMR_SETWINDOWORGEX 10 //!< U_EMRSETWINDOWORGEX record +#define U_EMR_SETVIEWPORTEXTEX 11 //!< U_EMRSETVIEWPORTEXTEX record +#define U_EMR_SETVIEWPORTORGEX 12 //!< U_EMRSETVIEWPORTORGEX record +#define U_EMR_SETBRUSHORGEX 13 //!< U_EMRSETBRUSHORGEX record +#define U_EMR_EOF 14 //!< U_EMREOF record +#define U_EMR_SETPIXELV 15 //!< U_EMRSETPIXELV record +#define U_EMR_SETMAPPERFLAGS 16 //!< U_EMRSETMAPPERFLAGS record +#define U_EMR_SETMAPMODE 17 //!< U_EMRSETMAPMODE record +#define U_EMR_SETBKMODE 18 //!< U_EMRSETBKMODE record +#define U_EMR_SETPOLYFILLMODE 19 //!< U_EMRSETPOLYFILLMODE record +#define U_EMR_SETROP2 20 //!< U_EMRSETROP2 record +#define U_EMR_SETSTRETCHBLTMODE 21 //!< U_EMRSETSTRETCHBLTMODE record +#define U_EMR_SETTEXTALIGN 22 //!< U_EMRSETTEXTALIGN record +#define U_EMR_SETCOLORADJUSTMENT 23 //!< U_EMRSETCOLORADJUSTMENT record +#define U_EMR_SETTEXTCOLOR 24 //!< U_EMRSETTEXTCOLOR record +#define U_EMR_SETBKCOLOR 25 //!< U_EMRSETBKCOLOR record +#define U_EMR_OFFSETCLIPRGN 26 //!< U_EMROFFSETCLIPRGN record +#define U_EMR_MOVETOEX 27 //!< U_EMRMOVETOEX record +#define U_EMR_SETMETARGN 28 //!< U_EMRSETMETARGN record +#define U_EMR_EXCLUDECLIPRECT 29 //!< U_EMREXCLUDECLIPRECT record +#define U_EMR_INTERSECTCLIPRECT 30 //!< U_EMRINTERSECTCLIPRECT record +#define U_EMR_SCALEVIEWPORTEXTEX 31 //!< U_EMRSCALEVIEWPORTEXTEX record +#define U_EMR_SCALEWINDOWEXTEX 32 //!< U_EMRSCALEWINDOWEXTEX record +#define U_EMR_SAVEDC 33 //!< U_EMRSAVEDC record +#define U_EMR_RESTOREDC 34 //!< U_EMRRESTOREDC record +#define U_EMR_SETWORLDTRANSFORM 35 //!< U_EMRSETWORLDTRANSFORM record +#define U_EMR_MODIFYWORLDTRANSFORM 36 //!< U_EMRMODIFYWORLDTRANSFORM record +#define U_EMR_SELECTOBJECT 37 //!< U_EMRSELECTOBJECT record +#define U_EMR_CREATEPEN 38 //!< U_EMRCREATEPEN record +#define U_EMR_CREATEBRUSHINDIRECT 39 //!< U_EMRCREATEBRUSHINDIRECT record +#define U_EMR_DELETEOBJECT 40 //!< U_EMRDELETEOBJECT record +#define U_EMR_ANGLEARC 41 //!< U_EMRANGLEARC record +#define U_EMR_ELLIPSE 42 //!< U_EMRELLIPSE record +#define U_EMR_RECTANGLE 43 //!< U_EMRRECTANGLE record +#define U_EMR_ROUNDRECT 44 //!< U_EMRROUNDRECT record +#define U_EMR_ARC 45 //!< U_EMRARC record +#define U_EMR_CHORD 46 //!< U_EMRCHORD record +#define U_EMR_PIE 47 //!< U_EMRPIE record +#define U_EMR_SELECTPALETTE 48 //!< U_EMRSELECTPALETTE record +#define U_EMR_CREATEPALETTE 49 //!< U_EMRCREATEPALETTE record +#define U_EMR_SETPALETTEENTRIES 50 //!< U_EMRSETPALETTEENTRIES record +#define U_EMR_RESIZEPALETTE 51 //!< U_EMRRESIZEPALETTE record +#define U_EMR_REALIZEPALETTE 52 //!< U_EMRREALIZEPALETTE record +#define U_EMR_EXTFLOODFILL 53 //!< U_EMREXTFLOODFILL record +#define U_EMR_LINETO 54 //!< U_EMRLINETO record +#define U_EMR_ARCTO 55 //!< U_EMRARCTO record +#define U_EMR_POLYDRAW 56 //!< U_EMRPOLYDRAW record +#define U_EMR_SETARCDIRECTION 57 //!< U_EMRSETARCDIRECTION record +#define U_EMR_SETMITERLIMIT 58 //!< U_EMRSETMITERLIMIT record +#define U_EMR_BEGINPATH 59 //!< U_EMRBEGINPATH record +#define U_EMR_ENDPATH 60 //!< U_EMRENDPATH record +#define U_EMR_CLOSEFIGURE 61 //!< U_EMRCLOSEFIGURE record +#define U_EMR_FILLPATH 62 //!< U_EMRFILLPATH record +#define U_EMR_STROKEANDFILLPATH 63 //!< U_EMRSTROKEANDFILLPATH record +#define U_EMR_STROKEPATH 64 //!< U_EMRSTROKEPATH record +#define U_EMR_FLATTENPATH 65 //!< U_EMRFLATTENPATH record +#define U_EMR_WIDENPATH 66 //!< U_EMRWIDENPATH record +#define U_EMR_SELECTCLIPPATH 67 //!< U_EMRSELECTCLIPPATH record +#define U_EMR_ABORTPATH 68 //!< U_EMRABORTPATH record +#define U_EMR_UNDEF69 69 //!< U_EMRUNDEF69 record +#define U_EMR_COMMENT 70 //!< U_EMRCOMMENT record +#define U_EMR_FILLRGN 71 //!< U_EMRFILLRGN record +#define U_EMR_FRAMERGN 72 //!< U_EMRFRAMERGN record +#define U_EMR_INVERTRGN 73 //!< U_EMRINVERTRGN record +#define U_EMR_PAINTRGN 74 //!< U_EMRPAINTRGN record +#define U_EMR_EXTSELECTCLIPRGN 75 //!< U_EMREXTSELECTCLIPRGN record +#define U_EMR_BITBLT 76 //!< U_EMRBITBLT record +#define U_EMR_STRETCHBLT 77 //!< U_EMRSTRETCHBLT record +#define U_EMR_MASKBLT 78 //!< U_EMRMASKBLT record +#define U_EMR_PLGBLT 79 //!< U_EMRPLGBLT record +#define U_EMR_SETDIBITSTODEVICE 80 //!< U_EMRSETDIBITSTODEVICE record +#define U_EMR_STRETCHDIBITS 81 //!< U_EMRSTRETCHDIBITS record +#define U_EMR_EXTCREATEFONTINDIRECTW 82 //!< U_EMREXTCREATEFONTINDIRECTW record +#define U_EMR_EXTTEXTOUTA 83 //!< U_EMREXTTEXTOUTA record +#define U_EMR_EXTTEXTOUTW 84 //!< U_EMREXTTEXTOUTW record +#define U_EMR_POLYBEZIER16 85 //!< U_EMRPOLYBEZIER16 record +#define U_EMR_POLYGON16 86 //!< U_EMRPOLYGON16 record +#define U_EMR_POLYLINE16 87 //!< U_EMRPOLYLINE16 record +#define U_EMR_POLYBEZIERTO16 88 //!< U_EMRPOLYBEZIERTO16 record +#define U_EMR_POLYLINETO16 89 //!< U_EMRPOLYLINETO16 record +#define U_EMR_POLYPOLYLINE16 90 //!< U_EMRPOLYPOLYLINE16 record +#define U_EMR_POLYPOLYGON16 91 //!< U_EMRPOLYPOLYGON16 record +#define U_EMR_POLYDRAW16 92 //!< U_EMRPOLYDRAW16 record +#define U_EMR_CREATEMONOBRUSH 93 //!< U_EMRCREATEMONOBRUSH record +#define U_EMR_CREATEDIBPATTERNBRUSHPT 94 //!< U_EMRCREATEDIBPATTERNBRUSHPT record +#define U_EMR_EXTCREATEPEN 95 //!< U_EMREXTCREATEPEN record +#define U_EMR_POLYTEXTOUTA 96 //!< U_EMRPOLYTEXTOUTA record +#define U_EMR_POLYTEXTOUTW 97 //!< U_EMRPOLYTEXTOUTW record +#define U_EMR_SETICMMODE 98 //!< U_EMRSETICMMODE record +#define U_EMR_CREATECOLORSPACE 99 //!< U_EMRCREATECOLORSPACE record +#define U_EMR_SETCOLORSPACE 100 //!< U_EMRSETCOLORSPACE record +#define U_EMR_DELETECOLORSPACE 101 //!< U_EMRDELETECOLORSPACE record +#define U_EMR_GLSRECORD 102 //!< U_EMRGLSRECORD record +#define U_EMR_GLSBOUNDEDRECORD 103 //!< U_EMRGLSBOUNDEDRECORD record +#define U_EMR_PIXELFORMAT 104 //!< U_EMRPIXELFORMAT record +#define U_EMR_DRAWESCAPE 105 //!< U_EMRDRAWESCAPE record +#define U_EMR_EXTESCAPE 106 //!< U_EMREXTESCAPE record +#define U_EMR_UNDEF107 107 //!< U_EMRUNDEF107 record +#define U_EMR_SMALLTEXTOUT 108 //!< U_EMRSMALLTEXTOUT record +#define U_EMR_FORCEUFIMAPPING 109 //!< U_EMRFORCEUFIMAPPING record +#define U_EMR_NAMEDESCAPE 110 //!< U_EMRNAMEDESCAPE record +#define U_EMR_COLORCORRECTPALETTE 111 //!< U_EMRCOLORCORRECTPALETTE record +#define U_EMR_SETICMPROFILEA 112 //!< U_EMRSETICMPROFILEA record +#define U_EMR_SETICMPROFILEW 113 //!< U_EMRSETICMPROFILEW record +#define U_EMR_ALPHABLEND 114 //!< U_EMRALPHABLEND record +#define U_EMR_SETLAYOUT 115 //!< U_EMRSETLAYOUT record +#define U_EMR_TRANSPARENTBLT 116 //!< U_EMRTRANSPARENTBLT record +#define U_EMR_UNDEF117 117 //!< U_EMRUNDEF117 record +#define U_EMR_GRADIENTFILL 118 //!< U_EMRGRADIENTFILL record +#define U_EMR_SETLINKEDUFIS 119 //!< U_EMRSETLINKEDUFIS record +#define U_EMR_SETTEXTJUSTIFICATION 120 //!< U_EMRSETTEXTJUSTIFICATION record +#define U_EMR_COLORMATCHTOTARGETW 121 //!< U_EMRCOLORMATCHTOTARGETW record +#define U_EMR_CREATECOLORSPACEW 122 //!< U_EMRCREATECOLORSPACEW record + +#define U_EMR_MIN 1 //!< Minimum U_EMR_ value. +#define U_EMR_MAX 122 //!< Maximum U_EMR_ value. Not much beyond 104 is implemented +/** @} */ + +/** \defgroup U_DRAW_PROPERTIES + Used in draw_properties(). These are the bit definitions. + @{ +*/ +#define U_DRAW_NOTEMPTY 0x01 //!< Path has at least a MOVETO in it +#define U_DRAW_VISIBLE 0x02 //!< Path has at least a LINE in it +#define U_DRAW_CLOSED 0x04 //!< Path has been closed +#define U_DRAW_ONLYTO 0x08 //!< Path so far contains only *TO operations +#define U_DRAW_FORCE 0x10 //!< Path MUST be drawn +#define U_DRAW_ALTERS 0x20 //!< Alters draw parameters (pen, brush, coordinates...) +#define U_DRAW_PATH 0x40 //!< An explicit path is being used (with a BEGIN and END) + +/** @} */ +/** \defgroup U_EMRSETARCDIRECTION_Qualifiers ArcDirection Enumeration + For U_EMRSETARCDIRECTION iArcDirection field + @{ +*/ +#define U_AD_COUNTERCLOCKWISE 1 +#define U_AD_CLOCKWISE 2 +/** @} */ + +/** \defgroup U_PANOSE_bArmStyle_Qualifiers ArmStyle Enumeration + For U_PANOSE bArmStyle field + @{ +*/ +#define U_PAN_STRAIGHT_ARMS_HORZ 2 +#define U_PAN_STRAIGHT_ARMS_WEDGE 3 +#define U_PAN_STRAIGHT_ARMS_VERT 4 +#define U_PAN_STRAIGHT_ARMS_SINGLE_SERIF 5 +#define U_PAN_STRAIGHT_ARMS_DOUBLE_SERIF 6 +#define U_PAN_BENT_ARMS_HORZ 7 +#define U_PAN_BENT_ARMS_WEDGE 8 +#define U_PAN_BENT_ARMS_VERT 9 +#define U_PAN_BENT_ARMS_SINGLE_SERIF 10 +#define U_PAN_BENT_ARMS_DOUBLE_SERIF 11 +/** @} */ + +/** \defgroup U_EMRSETBKMODE_iMode_Qualifiers BackgroundMode enumeration + For U_EMRSETBKMODE iMode field + @{ +*/ +#define U_TRANSPARENT 1 +#define U_OPAQUE 2 +/** @} */ + +/** \defgroup U_BITMAPINFOHEADER_biBitCount_Qualifiers BitCount Enumeration + For U_BITMAPINFOHEADER biBitCount field. + @{ +*/ +#define U_BCBM_EXPLICIT 0 //!< Derived from JPG or PNG compressed image or ? +#define U_BCBM_MONOCHROME 1 //!< 2 colors. bmiColors array has two entries +#define U_BCBM_COLOR4 4 //!< 2^4 colors. bmiColors array has 16 entries +#define U_BCBM_COLOR8 8 //!< 2^8 colors. bmiColors array has 256 entries +#define U_BCBM_COLOR16 16 //!< 2^16 colors. bmiColors is not used. Pixels are 5 bits B,G,R with 1 unused bit +#define U_BCBM_COLOR24 24 //!< 2^24 colors. bmiColors is not used. Pixels are U_RGBTRIPLE. +#define U_BCBM_COLOR32 32 //!< 2^32 colors. bmiColors is not used. Pixels are U_RGBQUAD. +/** @} */ + +/** \defgroup U_BITMAPINFOHEADER_biCompression_Qualifiers BI_Compression Enumeration + For U_BITMAPINFOHEADER biCompression field + @{ +*/ +#define U_BI_RGB 0 //!< This is the only one supported by UEMF at present +#define U_BI_RLE8 1 +#define U_BI_RLE4 2 +#define U_BI_BITFIELDS 3 +#define U_BI_JPEG 4 +#define U_BI_PNG 5 +/** @} */ + +/** \defgroup U_COLORADJUSTMENT_caFlags_Qualifiers ColorAdjustment Enumeration + For U_COLORADJUSTMENT caFlags field + @{ +*/ +#define U_CA_NEGATIVE 0x0001 +#define U_CA_LOG_FILTER 0x0002 +/** @} */ + +/** \defgroup U_EMRCOLORMATCHTOTARGETW_dwAction_Qualifiers ColorMatchToTarget Enumeration + For U_EMRCOLORMATCHTOTARGETW dwFlags field + @{ +*/ +#define U_COLORMATCHTOTARGET_NOTEMBEDDED 0 +#define U_COLORMATCHTOTARGET_EMBEDDED 1 +/** @} */ + +/** \defgroup U_EMRCOLORMATCHTOTARGETW_dwAction_Qualifiers ColorSpace Enumeration + For U_EMRCOLORMATCHTOTARGETW dwAction field + @{ +*/ +#define U_CS_ENABLE 1 +#define U_CS_DISABLE 2 +#define U_CS_DELETE_TRANSFORM 3 +/** @} */ + +/** \defgroup U_PANOSE_bContrast_Qualifiers Contrast Enumeration + For U_PANOSE bContrast field + @{ +*/ +#define U_PAN_CONTRAST_NONE 2 +#define U_PAN_CONTRAST_VERY_LOW 3 +#define U_PAN_CONTRAST_LOW 4 +#define U_PAN_CONTRAST_MEDIUM_LOW 5 +#define U_PAN_CONTRAST_MEDIUM 6 +#define U_PAN_CONTRAST_MEDIUM_HIGH 7 +#define U_PAN_CONTRAST_HIGH 8 +#define U_PAN_CONTRAST_VERY_HIGH 9 +/** @} */ + +/** \defgroup U_DIBITS_iUsageSrc_Qualifiers DIBColors Enumeration + For U_EMRSETDIBITSTODEIVCE and U_EMRSTRETCHDIBITS iUsageSrc fields. + @{ +*/ +#define U_DIB_RGB_COLORS 0 +#define U_DIB_PAL_COLORS 1 +/** @} */ + +/** \defgroup U_EMR_COMMENT_PublicCommentIdentifier_Qualifiers EmrComment Enumeration + For U_EMR_COMMENT_* PublicCommentIdentifier fields + @{ +*/ +#define U_EMR_COMMENT_IDENTIFIER 0x43494447 +#define U_EMR_COMMENT_WINDOWS_METAFILE 0x80000001 +#define U_EMR_COMMENT_BEGINGROUP 0x00000002 +#define U_EMR_COMMENT_ENDGROUP 0x00000003 +#define U_EMR_COMMENT_MULTIFORMATS 0x40000004 +#define U_EMR_COMMENT_UNICODE_STRING 0x00000040 +#define U_EMR_COMMENT_UNICODE_END 0x00000080 +/** @} */ + +/** \defgroup U_EMRTEXT_foptions_Qualifiers ExtTextOutOptions Enumeration + For U_EMRTEXT foptions field + @{ +*/ +#define U_ETO_NONE 0x00000000 +#define U_ETO_GRAYED 0x00000001 +#define U_ETO_OPAQUE 0x00000002 +#define U_ETO_CLIPPED 0x00000004 +#define U_ETO_GLYPH_INDEX 0x00000010 +#define U_ETO_RTLREADING 0x00000080 +#define U_ETO_NO_RECT 0x00000100 +#define U_ETO_SMALL_CHARS 0x00000200 // For EMRSMALLTEXTOUT ONLY, does not affect EMRTEXTOUTA or EMRTEXTOUTW +#define U_ETO_NUMERICSLOCAL 0x00000400 +#define U_ETO_NUMERICSLATIN 0x00000800 +#define U_ETO_IGNORELANGUAGE 0x00001000 +#define U_ETO_PDY 0x00002000 +#define U_ETO_REVERSE_INDEX_MAP 0x00010000 +/** @} */ + +/** \defgroup U_PANOSE_bFamilyType_Qualifiers FamilyType Enumeration + For U_PANOSE bFamilyType field + @{ +*/ +#define U_PAN_FAMILY_TEXT_DISPLAY 2 +#define U_PAN_FAMILY_SCRIPT 3 +#define U_PAN_FAMILY_DECORATIVE 4 +#define U_PAN_FAMILY_PICTORIAL 5 +/** @} */ + +/** \defgroup U_EMREXTFLOODFILL_iMode_Qualifiers FloodFill Enumeration + For U_EMREXTFLOODFILL iMode field + @{ +*/ +#define U_FLOODFILLBORDER 0x00000000 +#define U_FLOODFILLSURFACE 0x00000000 +/** @} */ + +/** \defgroup U_DESIGNVECTOR_Signature_Qualifiers Signature Enumeration + For U_DESIGNVECTOR Signature field + @{ +*/ +#define U_ENHMETA_SIGNATURE 0x464D4520 //!< also for U_EMRHEADER dSignature field +#define U_EPS_SIGNATURE 0x46535045 +/** @} */ + +/** \defgroup U_EMRGRADIENTFILL_ulMode_Qualifiers GradientFill Enumeration + For U_EMRGRADIENTFILL ulMode field + @{ +*/ +#define U_GRADIENT_FILL_RECT_H 0x00000000 +#define U_GRADIENT_FILL_RECT_V 0x00000001 +#define U_GRADIENT_FILL_TRIANGLE 0x00000002 +/** @} */ + +/** \defgroup U_EMREXTTEXTOUT_iGraphicsMode_Qualifiers GraphicsMode Enumeration + For U_EMREXTTEXTOUTA/U_EMREXTTEXTOUTW and all other iGraphicsMode fields + @{ +*/ +#define U_GM_COMPATIBLE 1 +#define U_GM_ADVANCED 2 +#define U_GM_LAST 2 +/** @} */ + +/** \defgroup U_LOGBRUSH_lbHatch_Qualifiers HatchStyle Enumeration + For U_LOGBRUSH lbHatch field + @{ +*/ +#define U_HS_HORIZONTAL 0 +#define U_HS_VERTICAL 1 +#define U_HS_FDIAGONAL 2 +#define U_HS_BDIAGONAL 3 +#define U_HS_CROSS 4 +#define U_HS_DIAGCROSS 5 +#define U_HS_SOLIDCLR 6 +#define U_HS_DITHEREDCLR 7 +#define U_HS_SOLIDTEXTCLR 8 +#define U_HS_DITHEREDTEXTCLR 9 +#define U_HS_SOLIDBKCLR 10 +#define U_HS_DITHEREDBKCLR 11 +/** @} */ + +/** \defgroup U_EMRSETICMMODE_iMode_Qualifiers ICMMode Enumeration + For EMF U_EMR_SETICMMODE iMode field + @{ +*/ +#define U_ICM_OFF 1 +#define U_ICM_ON 2 +#define U_ICM_QUERY 3 +/** @} */ + +/** \defgroup U_COLORADJUSTMENT_caIlluminantIndex_Qualifiers Illuminant Enumeration + For U_COLORADJUSTMENT caIlluminantIndex field + @{ +*/ +#define U_ILLUMINANT_DEVICE_DEFAULT 0 +#define U_ILLUMINANT_A 1 +#define U_ILLUMINANT_B 2 +#define U_ILLUMINANT_C 3 +#define U_ILLUMINANT_D50 4 +#define U_ILLUMINANT_D55 5 +#define U_ILLUMINANT_D65 6 +#define U_ILLUMINANT_D75 7 +#define U_ILLUMINANT_F2 8 +#define U_ILLUMINANT_MAX_INDEX ILLUMINANT_F2 +#define U_ILLUMINANT_TUNGSTEN ILLUMINANT_A +#define U_ILLUMINANT_DAYLIGHT ILLUMINANT_C +#define U_ILLUMINANT_FLUORESCENT ILLUMINANT_F2 +#define U_ILLUMINANT_NTSC ILLUMINANT_C +/** @} */ + +/** \defgroup U_LOGBRUSH_lbStyle_Qualifiers LB_Style Enumeration + For U_LOGBRUSH lbStyle field + @{ +*/ +#define U_BS_SOLID 0 +#define U_BS_NULL 1 +#define U_BS_HOLLOW 1 +#define U_BS_HATCHED 2 +#define U_BS_PATTERN 3 +#define U_BS_INDEXED 4 +#define U_BS_DIBPATTERN 5 +#define U_BS_DIBPATTERNPT 6 +#define U_BS_PATTERN8X8 7 +#define U_BS_DIBPATTERN8X8 8 +#define U_BS_MONOPATTERN 9 +/** @} */ + +/** \defgroup _LOGCOLORSPACE_lcsCSType_Qualifiers LCS_CSType Enumeration + For U_LOGCOLORSPACEA/U_LOGCOLORSPACEW lcsCSType field + @{ +*/ +#define U_LCS_CALIBRATED_RGB 0x00000000L +#define U_LCS_DEVICE_RGB 0x00000001L +#define U_LCS_DEVICE_CMYK 0x00000002L +/** @} */ + +/** \defgroup U_LOGCOLORSPACE_lcsIntent_Qualifiers LCS_Intent Enumeration + For U_LOGCOLORSPACEA/U_LOGCOLORSPACEW lcsIntent field + @{ +*/ +#define U_LCS_GM_BUSINESS 0x00000001L +#define U_LCS_GM_GRAPHICS 0x00000002L +#define U_LCS_GM_IMAGES 0x00000004L +#define U_LCS_GM_ABS_COLORIMETRIC 0x00000008L +/** @} */ + +/** \defgroup U_PANOSE_bLetterForm_Qualifiers Letterform Enumeration + For U_PANOSE bLetterForm field + @{ +*/ +#define U_PAN_LETT_NORMAL_COMPACT 2 +#define U_PAN_LETT_NORMAL_WEIGHTED 3 +#define U_PAN_LETT_NORMAL_BOXED 4 +#define U_PAN_LETT_NORMAL_FLATTENED 5 +#define U_PAN_LETT_NORMAL_ROUNDED 6 +#define U_PAN_LETT_NORMAL_OFF_CENTER 7 +#define U_PAN_LETT_NORMAL_SQUARE 8 +#define U_PAN_LETT_OBLIQUE_COMPACT 9 +#define U_PAN_LETT_OBLIQUE_WEIGHTED 10 +#define U_PAN_LETT_OBLIQUE_BOXED 11 +#define U_PAN_LETT_OBLIQUE_FLATTENED 12 +#define U_PAN_LETT_OBLIQUE_ROUNDED 13 +#define U_PAN_LETT_OBLIQUE_OFF_CENTER 14 +#define U_PAN_LETT_OBLIQUE_SQUARE 15 +/** @} */ + +/** \defgroup U_LOGFONT_lfWeight_Qualifiers LF_Weight Enumeration + For U_LOGFONT lfWeight field + @{ +*/ +#define U_FW_DONTCARE 0 +#define U_FW_THIN 100 +#define U_FW_EXTRALIGHT 200 +#define U_FW_ULTRALIGHT 200 +#define U_FW_LIGHT 300 +#define U_FW_NORMAL 400 +#define U_FW_REGULAR 400 +#define U_FW_MEDIUM 500 +#define U_FW_SEMIBOLD 600 +#define U_FW_DEMIBOLD 600 +#define U_FW_BOLD 700 +#define U_FW_EXTRABOLD 800 +#define U_FW_ULTRABOLD 800 +#define U_FW_HEAVY 900 +#define U_FW_BLACK 900 +/** @} */ + +/** \defgroup U_LOGFONT_lfItalic_Qualifiers LF_Italic Enumeration + For U_LOGFONT lfItalic field + @{ +*/ +#define U_FW_NOITALIC 0 +#define U_FW_ITALIC 1 +/** @} */ + +/** \defgroup U_LOGFONT_lfunderline_Qualifiers LF_Underline Enumeration + For U_LOGFONT lfunderline field + @{ +*/ +#define U_FW_NOUNDERLINE 0 +#define U_FW_UNDERLINE 1 +/** @} */ + +/** \defgroup U_LOGFONT_lfStrikeOut_Qualifiers LF_StrikeOut Enumeration + For U_LOGFONT lfStrikeOut field + @{ +*/ +#define U_FW_NOSTRIKEOUT 0 +#define U_FW_STRIKEOUT 1 +/** @} */ + +/** \defgroup U_LOGFONT_lfCharSet_Qualifiers LF_CharSet Enumeration + For U_LOGFONT lfCharSet field + @{ +*/ +#define U_ANSI_CHARSET (uint8_t)0 /* CP1252, ansi-0, iso8859-{1,15} */ +#define U_DEFAULT_CHARSET (uint8_t)1 +#define U_SYMBOL_CHARSET (uint8_t)2 +#define U_SHIFTJIS_CHARSET (uint8_t)128 /* CP932 */ +#define U_HANGEUL_CHARSET (uint8_t)129 /* CP949, ksc5601.1987-0 */ +#define U_HANGUL_CHARSET U_HANGEUL_CHARSET +#define U_GB2312_CHARSET (uint8_t)134 /* CP936, gb2312.1980-0 */ +#define U_CHINESEBIG5_CHARSET (uint8_t)136 /* CP950, big5.et-0 */ +#define U_GREEK_CHARSET (uint8_t)161 /* CP1253 */ +#define U_TURKISH_CHARSET (uint8_t)162 /* CP1254, -iso8859-9 */ +#define U_HEBREW_CHARSET (uint8_t)177 /* CP1255, -iso8859-8 */ +#define U_ARABIC_CHARSET (uint8_t)178 /* CP1256, -iso8859-6 */ +#define U_BALTIC_CHARSET (uint8_t)186 /* CP1257, -iso8859-13 */ +#define U_RUSSIAN_CHARSET (uint8_t)204 /* CP1251, -iso8859-5 */ +#define U_EE_CHARSET (uint8_t)238 /* CP1250, -iso8859-2 */ +#define U_EASTEUROPE_CHARSET U_EE_CHARSET +#define U_THAI_CHARSET (uint8_t)222 /* CP874, iso8859-11, tis620 */ +#define U_JOHAB_CHARSET (uint8_t)130 /* korean (johab) CP1361 */ +#define U_MAC_CHARSET (uint8_t)77 +#define U_OEM_CHARSET (uint8_t)255 +/* I don't know if the values of *_CHARSET macros are defined in Windows + * or if we can choose them as we want. -- srtxg + */ +#define U_VISCII_CHARSET (uint8_t)240 /* viscii1.1-1 */ +#define U_TCVN_CHARSET (uint8_t)241 /* tcvn-0 */ +#define U_KOI8_CHARSET (uint8_t)242 /* koi8-{r,u,ru} */ +#define U_ISO3_CHARSET (uint8_t)243 /* iso8859-3 */ +#define U_ISO4_CHARSET (uint8_t)244 /* iso8859-4 */ +#define U_ISO10_CHARSET (uint8_t)245 /* iso8859-10 */ +#define U_CELTIC_CHARSET (uint8_t)246 /* iso8859-14 */ +/** @} */ + +/** \defgroup U_LOGFONT_lfOutPrecision_Qualifiers LF_OutPrecision Enumeration + For U_LOGFONT lfOutPrecision field + @{ +*/ +#define U_OUT_DEFAULT_PRECIS 0 +#define U_OUT_STRING_PRECIS 1 +#define U_OUT_CHARACTER_PRECIS 2 +#define U_OUT_STROKE_PRECIS 3 +#define U_OUT_TT_PRECIS 4 +#define U_OUT_DEVICE_PRECIS 5 +#define U_OUT_RASTER_PRECIS 6 +#define U_OUT_TT_ONLY_PRECIS 7 +#define U_OUT_OUTLINE_PRECIS 8 +/** @} */ + +/** \defgroup U_LOGFONT_lfClipPrecision_Qualifiers LF_ClipPrecision Enumeration + For U_LOGFONT lfClipPrecision field + @{ +*/ +#define U_CLIP_DEFAULT_PRECIS 0x00 +#define U_CLIP_CHARACTER_PRECIS 0x01 +#define U_CLIP_STROKE_PRECIS 0x02 +#define U_CLIP_MASK 0x0F +#define U_CLIP_LH_ANGLES 0x10 +#define U_CLIP_TT_ALWAYS 0x20 +#define U_CLIP_EMBEDDED 0x80 +/** @} */ + +/** \defgroup U_LOGFONT_lfQuality_Qualifiers LF_Quality Enumeration + For For U_LOGFONT lfQuality field + @{ +*/ +#define U_DEFAULT_QUALITY 0 +#define U_DRAFT_QUALITY 1 +#define U_PROOF_QUALITY 2 +#define U_NONANTIALIASED_QUALITY 3 +#define U_ANTIALIASED_QUALITY 4 +/** @} */ + +/** \defgroup U_LOGFONT_lfPitchAndFamily_Qualifiers LF_PitchAndFamily Enumeration + For U_LOGFONT lfPitchAndFamily field + @{ +*/ +#define U_DEFAULT_PITCH 0x00 +#define U_FIXED_PITCH 0x01 +#define U_VARIABLE_PITCH 0x02 +#define U_MONO_FONT 0x08 +#define U_FF_DONTCARE 0x00 +#define U_FF_ROMAN 0x10 +#define U_FF_SWISS 0x20 +#define U_FF_MODERN 0x30 +#define U_FF_SCRIPT 0x40 +#define U_FF_DECORATIVE 0x50 +/** @} */ + +/** \defgroup U_EMRSETMAPMODE_iMode_Qualifiers MapMode Enumeration + For U_EMRSETMAPMODE iMode field + @{ +*/ +#define U_MM_TEXT 1 +#define U_MM_LOMETRIC 2 +#define U_MM_HIMETRIC 3 +#define U_MM_LOENGLISH 4 +#define U_MM_HIENGLISH 5 +#define U_MM_TWIPS 6 +#define U_MM_ISOTROPIC 7 +#define U_MM_ANISOTROPIC 8 +#define U_MM_MIN U_MM_TEXT +#define U_MM_MAX U_MM_ANISOTROPIC +#define U_MM_MAX_FIXEDSCALE U_MM_TWIPS +/** @} */ + + +/** \defgroup U_PANOSE_bMidline_Qualifiers MidLine Enumeration + For U_PANOSE bMidline field + @{ +*/ +#define U_PAN_MIDLINE_STANDARD_TRIMMED 2 +#define U_PAN_MIDLINE_STANDARD_POINTED 3 +#define U_PAN_MIDLINE_STANDARD_SERIFED 4 +#define U_PAN_MIDLINE_HIGH_TRIMMED 5 +#define U_PAN_MIDLINE_HIGH_POINTED 6 +#define U_PAN_MIDLINE_HIGH_SERIFED 7 +#define U_PAN_MIDLINE_CONSTANT_TRIMMED 8 +#define U_PAN_MIDLINE_CONSTANT_POINTED 9 +#define U_PAN_MIDLINE_CONSTANT_SERIFED 10 +#define U_PAN_MIDLINE_LOW_TRIMMED 11 +#define U_PAN_MIDLINE_LOW_POINTED 12 +#define U_PAN_MIDLINE_LOW_SERIFED 13 +/** @} */ + +/** \defgroup U_EMRSETLAYOUT_iMode_Qualifiers Mirroring Enumeration + For U_EMRSETLAYOUT iMode field + @{ +*/ +#define U_LAYOUT_LTR 0x00000000 +#define U_LAYOUT_RTL 0x00000001 +#define U_LAYOUT_BITMAPORIENTATIONPRESERVED 0x00000008 +#define U_NOMIRRORBITMAP 0x80000000 +/** @} */ + +/** \defgroup U_EMRMODIFYWORLDTRANSFORM_iMode_Qualifiers ModifyWorldTransformMode Enumeration + For U_EMRMODIFYWORLDTRANSFORM iMode + @{ +*/ +#define U_MWT_IDENTITY 1 +#define U_MWT_LEFTMULTIPLY 2 +#define U_MWT_RIGHTMULTIPLY 3 +#define U_MWT_MIN U_MWT_IDENTITY +#define U_MWT_MAX U_MWT_RIGHTMULTIPLY +/** @} */ + +/** \defgroup U_PANOSE_common_Qualifiers PanoseCommon Enumeration + Used by all PAN_* enumerations, but only defined once here. + See also U_PAN_ALL1 after the U_PANOSE structure + @{ +*/ +#define U_PAN_ANY 0 +#define U_PAN_NO_FIT 1 +/** @} */ + +/** \defgroup U_PANOSE_index PanoseIndex Enumeration + Fositions of each field in U_PANOSE structure. + @{ +*/ +#define U_PANOSE_COUNT 10 +#define U_PANOSE_FAMILYTYPE_INDEX 0 +#define U_PAN_SERIFSTYLE_INDEX 1 +#define U_PAN_WEIGHT_INDEX 2 +#define U_PAN_PROPORTION_INDEX 3 +#define U_PAN_CONTRAST_INDEX 4 +#define U_PAN_STROKEVARIATION_INDEX 5 +#define U_PAN_ARMSTYLE_INDEX 6 +#define U_PAN_LETTERFORM_INDEX 7 +#define U_PAN_MIDLINE_INDEX 8 +#define U_PAN_XHEIGHT_INDEX 9 +/** @} */ + +/** \defgroup U_*LOGPEN_elpPenStyle_Qualifiers PenStyle Enumeration + For U_LOGPEN lopnStyle and U_EXTLOGPEN elpPenStyle fields + @{ +*/ +#define U_PS_SOLID 0x00000000 +#define U_PS_DASH 0x00000001 //!< This only works when NO other U_PS is set. Line width is minimum no matter what pen is set to. +#define U_PS_DOT 0x00000002 //!< This only works when NO other U_PS is set. Line width is minimum no matter what pen is set to. +#define U_PS_DASHDOT 0x00000003 //!< This only works when NO other U_PS is set. Line width is minimum no matter what pen is set to. +#define U_PS_DASHDOTDOT 0x00000004 //!< This only works when NO other U_PS is set. Line width is minimum no matter what pen is set to. +#define U_PS_NULL 0x00000005 +#define U_PS_INSIDEFRAME 0x00000006 +#define U_PS_USERSTYLE 0x00000007 +#define U_PS_ALTERNATE 0x00000008 +#define U_PS_STYLE_MASK 0x0000000f + +#define U_PS_ENDCAP_ROUND 0x00000000 //!< These are only with U_PS_GEOMETRIC +#define U_PS_ENDCAP_SQUARE 0x00000100 +#define U_PS_ENDCAP_FLAT 0x00000200 +#define U_PS_ENDCAP_MASK 0x00000f00 + +#define U_PS_JOIN_ROUND 0x00000000 //!< These are only with U_PS_GEOMETRIC +#define U_PS_JOIN_BEVEL 0x00001000 +#define U_PS_JOIN_MITER 0x00002000 +#define U_PS_JOIN_MASK 0x0000f000 + +#define U_PS_COSMETIC 0x00000000 //!< width may only be 1 pixel. (If set higher it is still drawn as 1). +#define U_PS_GEOMETRIC 0x00010000 //!< width may be >1 pixel, but style may only be U_PS_SOLID or U_PS_NULL. +#define U_PS_TYPE_MASK 0x000f0000 +/** @} */ + +/** \defgroup U_PIXELFORMATDESCRIPTOR_dwFlags_Qualifiers PFD_dwFlags Enumeration + For U_PIXELFORMATDESCRIPTOR dwFlags field + @{ +*/ +#define U_PFD_DOUBLEBUFFER 0x00000001 +#define U_PFD_STEREO 0x00000002 +#define U_PFD_DRAW_TO_WINDOW 0x00000004 +#define U_PFD_DRAW_TO_BITMAP 0x00000008 +#define U_PFD_SUPPORT_GDI 0x00000010 +#define U_PFD_SUPPORT_OPENGL 0x00000020 +#define U_PFD_GENERIC_FORMAT 0x00000040 +#define U_PFD_NEED_PALETTE 0x00000080 +#define U_PFD_NEED_SYSTEM_PALETTE 0x00000100 +#define U_PFD_SWAP_EXCHANGE 0x00000200 +#define U_PFD_SWAP_COPY 0x00000400 +#define U_PFD_SWAP_LAYER_BUFFERS 0x00000800 +#define U_PFD_GENERIC_ACCELERATED 0x00001000 +/** @} */ + +/** \defgroup U_PIXELFORMATDESCRIPTOR_iLayerType_Qualifiers PFD_iLayerType Enumeration + For U_PIXELFORMATDESCRIPTOR iLayerType field + @{ +*/ +#define U_PFD_MAIN_PLANE 0 +#define U_PFD_OVERLAY_PLANE 1 +#define U_PFD_UNDERLAY_PLANE (-1) +/** @} */ + +/** \defgroup U_PIXELFORMATDESCRIPTOR_iPixelType_Qualifiers PFD_iPixelType Enumeration + For U_PIXELFORMATDESCRIPTOR iPixelType field + @{ +*/ +#define U_PFD_TYPE_RGBA 0 +#define U_PFD_TYPE_COLORINDEX 1 +/** @} */ + +/** \defgroup U_EMRPOLY_iMode_Qualifiers Point Enumeration + For U_EMRPOLYDRAW and U_EMRPOLAYDRAW16 abTypes fields. + @{ +*/ +#define U_PT_CLOSEFIGURE 0x0001 +#define U_PT_LINETO 0x0002 +#define U_PT_BEZIERTO 0x0004 +#define U_PT_MOVETO 0x0006 +/** @} */ + +/** \defgroup U_EMRSETPOLYFILLMODE_iMode_Qualifiers PolygonFillMode Enumeration + For U_EMRSETPOLYFILLMODE iMode field + @{ +*/ +#define U_ALTERNATE 1 +#define U_WINDING 2 +#define U_POLYFILL_LAST 2 +/** @} */ + +/** \defgroup U_BITMAPV5HEADER_bV5CSType_Qualifiers Profile Enumeration + For U_BITMAPV5HEADER bV5CSType field + @{ +*/ +#define U_PROFILE_LINKED 'LINK' +#define U_PROFILE_EMBEDDED 'MBED' +/** @} */ + +/** \defgroup U_PANOSE_bProportion_Qualifiers Proportion Enumeration + For U_PANOSE bProportion field + @{ +*/ +#define U_PAN_PROP_OLD_STYLE 2 +#define U_PAN_PROP_MODERN 3 +#define U_PAN_PROP_EVEN_WIDTH 4 +#define U_PAN_PROP_EXPANDED 5 +#define U_PAN_PROP_CONDENSED 6 +#define U_PAN_PROP_VERY_EXPANDED 7 +#define U_PAN_PROP_VERY_CONDENSED 8 +#define U_PAN_PROP_MONOSPACED 9 +/** @} */ + +/** \defgroup U_EMR_dwROP_Qualifiers Ternary Raster Operation enumeration + For U_EMR* dwROP fields. + + These codes specify: + 1. an order of operands (composed of various orders and combinations of: Dest, Src, Pen) + (There are 3, hence "Ternary Raster Operation") + 2. an order of operators to apply to the operands (composed of Not, Xor, Or, And) + Only a few of the more common operations are provided here. + When the Operation does not use a Src operand the corresponding source bitmap may be + omitted from the record. + + For more details see: + http://wiki.winehq.org/TernaryRasterOps + @{ +*/ +#define U_SRCCOPY 0xcc0020 +#define U_SRCPAINT 0xee0086 +#define U_SRCAND 0x8800c6 +#define U_SRCINVERT 0x660046 +#define U_SRCERASE 0x440328 +#define U_NOTSRCCOPY 0x330008 +#define U_NOTSRCERASE 0x1100a6 +#define U_MERGECOPY 0xc000ca +#define U_MERGEPAINT 0xbb0226 +#define U_PATCOPY 0xf00021 +#define U_PATPAINT 0xfb0a09 +#define U_PATINVERT 0x5a0049 +#define U_DSTINVERT 0x550009 +#define U_BLACKNESS 0x000042 +#define U_WHITENESS 0xff0062 +/** @} */ + +/** \defgroup U_EMRSETROP2_iMode_Qualifiers Binary Raster Operation Enumeration + For U_EMRSETROP2 iMode field + + These codes specify: + 1. an order of operands (composed of various orders and combinations of: Dest, Pen) + (There are 2, hence "Binary Raster Operation") + 2. an order of operators to apply to the operands (composed of Not, Xor, Or, And) + Only a few of the more common operations are provided here. + + The default is U_R2_COPYPEN. If this value is changed to something else all subsequenty + draw operations will use the altered logic. For instance, if it is set to U_R2_BLACK and + a red rectangle is drawn it will appear as a black rectangle. + + @{ +*/ +#define U_R2_BLACK 1 +#define U_R2_NOTMERGEPEN 2 +#define U_R2_MASKNOTPEN 3 +#define U_R2_NOTCOPYPEN 4 +#define U_R2_MASKPENNOT 5 +#define U_R2_NOT 6 +#define U_R2_XORPEN 7 +#define U_R2_NOTMASKPEN 8 +#define U_R2_MASKPEN 9 +#define U_R2_NOTXORPEN 10 +#define U_R2_NOP 11 +#define U_R2_MERGENOTPEN 12 +#define U_R2_COPYPEN 13 +#define U_R2_MERGEPENNOT 14 +#define U_R2_MERGEPEN 15 +#define U_R2_WHITE 16 +#define U_R2_LAST 16 +/** @} */ + +/** \defgroup U_EMRSELECTCLIP_iMode_Qualifiers RegionMode Enumeration + For U_EMRSELECTCLIPPATH and U_EMREXTSELECTCLIPRGN iMode field + @{ +*/ +#define U_RGN_AND 1 +#define U_RGN_OR 2 +#define U_RGN_XOR 3 +#define U_RGN_DIFF 4 +#define U_RGN_COPY 5 +#define U_RGN_MIN U_RGN_AND +#define U_RGN_MAX U_RGN_COPY +/** @} */ + +/** \defgroup U_PANOSE_bSerifStyle_Qualifiers SerifType Enumeration + For U_PANOSE bSerifStyle field + @{ +*/ +#define U_PAN_SERIF_COVE 2 +#define U_PAN_SERIF_OBTUSE_COVE 3 +#define U_PAN_SERIF_SQUARE_COVE 4 +#define U_PAN_SERIF_OBTUSE_SQUARE_COVE 5 +#define U_PAN_SERIF_SQUARE 6 +#define U_PAN_SERIF_THIN 7 +#define U_PAN_SERIF_BONE 8 +#define U_PAN_SERIF_EXAGGERATED 9 +#define U_PAN_SERIF_TRIANGLE 10 +#define U_PAN_SERIF_NORMAL_SANS 11 +#define U_PAN_SERIF_OBTUSE_SANS 12 +#define U_PAN_SERIF_PERP_SANS 13 +#define U_PAN_SERIF_FLARED 14 +#define U_PAN_SERIF_ROUNDED 15 +/** @} */ + +/** \defgroup U_EMRSELECTOBJECT_ihObject_Qualifiers StockObject Enumeration + For U_EMRSELECTOBJECT ihObject field. + @{ +*/ +#define U_STOCK_OBJECT 0x80000000 +#define U_WHITE_BRUSH 0x80000000 +#define U_LTGRAY_BRUSH 0x80000001 +#define U_GRAY_BRUSH 0x80000002 +#define U_DKGRAY_BRUSH 0x80000003 +#define U_BLACK_BRUSH 0x80000004 +#define U_NULL_BRUSH 0x80000005 +#define U_HOLLOW_BRUSH 0x80000005 +#define U_WHITE_PEN 0x80000006 +#define U_BLACK_PEN 0x80000007 +#define U_NULL_PEN 0x80000008 +#define U_OEM_FIXED_FONT 0x8000000A +#define U_ANSI_FIXED_FONT 0x8000000B +#define U_ANSI_VAR_FONT 0x8000000C +#define U_SYSTEM_FONT 0x8000000D +#define U_DEVICE_DEFAULT_FONT 0x8000000E +#define U_DEFAULT_PALETTE 0x8000000F +#define U_SYSTEM_FIXED_FONT 0x80000010 +#define U_DEFAULT_GUI_FONT 0x80000011 +#define U_STOCK_LAST 0x80000011 +/** @} */ + +/** \defgroup U_EMRSETSTRETCHBLTMODE_iMode_Qualifiers StretchMode Enumeration + For EMF U_EMRSETSTRETCHBLTMODE iMode field + @{ +*/ +#define U_BLACKONWHITE 1 +#define U_WHITEONBLACK 2 +#define U_COLORONCOLOR 3 +#define U_HALFTONE 4 +#define U_MAXSTRETCHBLTMODE 4 +#define U_STRETCH_ANDSCANS 1 +#define U_STRETCH_ORSCANS 2 +#define U_STRETCH_DELETESCANS 3 +#define U_STRETCH_HALFTONE 4 +/** @} */ + +/** \defgroup U_PANOSE_bStrokeVariation_Qualifiers StrokeVariation Enumeration + For U_PANOSE bStrokeVariation field + @{ +*/ +#define U_PAN_STROKE_GRADUAL_DIAG 2 +#define U_PAN_STROKE_GRADUAL_TRAN 3 +#define U_PAN_STROKE_GRADUAL_VERT 4 +#define U_PAN_STROKE_GRADUAL_HORZ 5 +#define U_PAN_STROKE_RAPID_VERT 6 +#define U_PAN_STROKE_RAPID_HORZ 7 +#define U_PAN_STROKE_INSTANT_VERT 8 +/** @} */ + +/** \defgroup U_EMRSETTEXTALIGN_iMode_Qualifiers TextAlignment Enumeration + For U_EMRSETTEXTALIGN iMode field + + Recall that EMF coordinates have UL closest to {0,0}, LR is below and to the right of UL and so has LARGER + {x,y} coordinates. In the following "TOP" is on the horizontal line defined by LR, as it has larger y coordinates, + which when viewing the EMF file, would actually be on the BOTTOM of the bounding rectangle. Similarly, left and right + are reversed. + + Microsoft documentation (WMF manual, section 2.1.2.3) says that the text starts on certain edges of the bounding rectangle. + That is apparently not true, whether the bounding rectangle is {0,0,-1,-1}, which is effectively no bounding rectangle, + or if a valid bounding rectangle is specified. In all cases the text (in Windows XP Preview) starts, has center at, or ends + at the center point. Vertical offsets seem to be defined analogously, but with respect to the height of the font. The bounding + rectangle defined for the U_EMRTEXT record appears to be ignored. + + Microsoft documentation (EMF manual,section 2.2.5) says that the same rectangle is used for "clipping or opaquing" by ExtTextOutA/W. + That does not seem to occur either. + + @{ +*/ +// Horizontal text flags +#define U_TA_DEFAULT 0x00 // default alignment +#define U_TA_NOUPDATECP 0x00 // Reference point does not move +#define U_TA_UPDATECP 0x01 // Reference point moves to end of next text drawn. +#define U_TA_LEFT 0x00 // Reference point is on left edge of bounding rectangle +#define U_TA_RIGHT 0x02 // Reference point is on right edge of bounding rectangle +#define U_TA_CENTER 0x06 // Reference point is on center vertical line of bounding rectangle +#define U_TA_TOP 0x00 // Reference point is on top edge of bounding rectangle +#define U_TA_BOTTOM 0x08 // Reference point is on bottom edge of bounding rectangle +#define U_TA_BASEBIT 0x10 // Reference point is on baseline of text if this bit is set, for 0x10 <-> 0x18 +#define U_TA_BASELINE 0x18 // Reference point is on baseline of text +#define U_TA_RTLREADING 0x100 // Set for Right to Left languages like Hebrew and Arabic +#define U_TA_MASK U_TA_BASELINE+U_TA_CENTER+U_TA_UPDATECP+U_TA_RTLREADING +// Vertical text flags +#define U_VTA_BASELINE U_TA_BASELINE // for vertical text +#define U_VTA_LEFT U_TA_BOTTOM +#define U_VTA_RIGHT U_TA_TOP +#define U_VTA_CENTER U_TA_CENTER +#define U_VTA_BOTTOM U_TA_RIGHT +#define U_VTA_TOP U_TA_LEFT +/** @} */ + +/** \defgroup U_PANOSE_bWeight_Qualifiers Weight Enumeration + For U_PANOSE bWeight field + @{ +*/ +#define U_PAN_WEIGHT_VERY_LIGHT 2 +#define U_PAN_WEIGHT_LIGHT 3 +#define U_PAN_WEIGHT_THIN 4 +#define U_PAN_WEIGHT_BOOK 5 +#define U_PAN_WEIGHT_MEDIUM 6 +#define U_PAN_WEIGHT_DEMI 7 +#define U_PAN_WEIGHT_BOLD 8 +#define U_PAN_WEIGHT_HEAVY 9 +#define U_PAN_WEIGHT_BLACK 10 +#define U_PAN_WEIGHT_NORD 11 +/** @} */ + +/** \defgroup U_PANOSE_bXHeight_Qualifiers XHeight Enumeration + For U_PANOSE bXHeight field + @{ +*/ +#define U_PAN_XHEIGHT_CONSTANT_SMALL 2 +#define U_PAN_XHEIGHT_CONSTANT_STANDARD 3 +#define U_PAN_XHEIGHT_CONSTANT_LARGE 4 +#define U_PAN_XHEIGHT_DUCKING_SMALL 5 +#define U_PAN_XHEIGHT_DUCKING_STANDARD 6 +#define U_PAN_XHEIGHT_DUCKING_LARGE 7 +/** @} */ + +/** \defgroup U_BLEND_Op_Qualifiers Blend Enumeration + For U_BLEND Op field + @{ +*/ +#define U_AC_SRC_GLOBAL 0 +#define U_AC_SRC_CONST 0 +#define U_AC_SRC_ALPHA 1 +/** @} */ + + +// *************************************************************************** +/** \defgroup Miscellaneous_values Miscellaneous Values + @{ +*/ +#define U_NONE 0 //!< Generic for nothing selected for all flag fields +#define U_PI 3.14159265358979323846 //!< pi +#define U_READ 1 +#define U_WRITE 0 +#define U_ENHMETA_VERSION 0x00010000 //!< U_EMRHEADER nVersion field +#define U_DV_SGNTR 0x08007664 //!< For U_DESIGNVECTOR Signature field +#define U_LP_VERSION 0x0300 //!< For U_LOGPALETTE palVersion field +#define U_RDH_RECTANGLES 1 //!< For U_RGNDATAHEADER iType field +#define U_RDH_OBJSIZE 0x20 //!< For U_RGNDATAHEADER dwSIze field +#define U_RGB_GAMMA_MIN (uint16_t)02500 //!< For U_COLORADJUSTMENT ca[Red|Green|Blue]Gamma fields +#define U_RGB_GAMMA_MAX (uint16_t)65000 //!< For U_COLORADJUSTMENT ca[Red|Green|Blue]Gamma fields +#define U_REFERENCE_WHITE_MIN (uint16_t)6000 //!< For U_COLORADJUSTMENT caReferenceWhite field +#define U_REFERENCE_WHITE_MAX (uint16_t)10000 //!< For U_COLORADJUSTMENT caReferenceWhite field +#define U_REFERENCE_BLACK_MIN (uint16_t)0 //!< For U_COLORADJUSTMENT caReferenceBlack field +#define U_REFERENCE_BLACK_MAX (uint16_t)4000 //!< For U_COLORADJUSTMENT caReferenceBlack field +#define U_COLOR_ADJ_MIN ((int16_t)-100) //!< For U_COLORADJUSTMENT ca[Contrast|Brightness|Colorfulness|RedGreenTint] fields +#define U_COLOR_ADJ_MAX (int16_t) 100 //!< For U_COLORADJUSTMENT ca[Contrast|Brightness|Colorfulness|RedGreenTint] fields +#define U_MAX_PATH 1024 //!< longest path name for a file +#define U_LCS_SIGNATURE 0x50534F43 //!< logColorSpace Signature +#define U_LCS_VERSION 0x400 //!< logColorSpace Version +#define U_REC_FREE 1 //!< used with emf_append +#define U_REC_KEEP 0 //!< used with emf_append +/** Solaris 8 has problems with round/roundf, just use this everywhere */ +#define U_ROUND(A) ( (A) > 0 ? floor((A)+0.5) : ( (A) < 0 ? -floor(-(A)+0.5) : (A) ) ) + +/** @} */ + +// *************************************************************************** +// Macros + +/** \defgroup Common_macros Common Macros + @{ +*/ +// Color U_BGR(A), byte order lo to hi: {B,G,R,A} corresponding to U_RGBQUAD. Set/Get Macros. +// These are used in EMF structures and the byte order must be the same in memory or on disk. +#define U_BGR(r,g,b) (U_RGBQUAD){b,g,r,0} //!< Set any BGR color with an {r,g,b} triplet +#define U_BGRA(r,g,b,a) (U_RGBQUAD){b,g,r,a} //!< Set any BGRA color with an {r,g,b,a} quad +#define U_WHITE U_BGR(255,255,255) //!< Set BGR white. +#define U_BLACK U_BGR(0,0,0) //!< Set BGR black. +#define U_BGRAGetR(rgb) ((U_RGBQUAD)rgb).Red //!< Color BGR Get Red Macro. +#define U_BGRAGetG(rgb) ((U_RGBQUAD)rgb).Green //!< Color BGR Get Green Macro. +#define U_BGRAGetB(rgb) ((U_RGBQUAD)rgb).Blue //!< Color BGR Get Blue Macro. +#define U_BGRAGetA(rgb) ((U_RGBQUAD)rgb).Reserved //!< Color BGR Get A/reserved Macro. + +#define U_PALETTERGB(r,g,b) U_RGB(r,g,b,0x02)) //!< Set any Palette RGB color. +#define U_PALETTEINDEX(i) ((U_COLORREF)(0x01000000 | (uint16_t)(i)))\ + //!< Get RGB from Palette by index. + +// Color U_RGB(A), byte order lo to hi: {R,G,B,A} corresponding to U_COLORREF. Set/Get Macros. +// These are used in EMF structures and the byte order must be the same in memory or on disk. +// These MAY be used in PNG and other libraries if these enforce byte order in memory,otherwise +// U_swap4 may need to also be employed. +#define U_RGB(r,g,b) (U_COLORREF){r,g,b,0} //!< Set any RGB color with an {r,g,b} triplet +#define U_RGBA(r,g,b,a) (U_COLORREF){r,g,b,a} //!< Set any RGBA color with an {r,g,b,a} quad +#define U_RGBAGetR(rgb) ((U_COLORREF)rgb).Red //!< Color RGB Get Red Macro. +#define U_RGBAGetG(rgb) ((U_COLORREF)rgb).Green //!< Color RGB Get Green Macro. +#define U_RGBAGetB(rgb) ((U_COLORREF)rgb).Blue //!< Color RGB Get Blue Macro. +#define U_RGBAGetA(rgb) ((U_COLORREF)rgb).Reserved //!< Color RGBA Get A/reserved Macro. + +// color type conversions +#define U_RGB2BGR(rgb) (U_RGBQUAD){ U_RGBAGetB(rgb),U_RGBAGetG(rgb),U_RGBAGetR(rgb),0} //!< Set any BGR color from an RGB color +#define U_BGR2RGB(rgb) (U_COLORREF){U_BGRAGetR(rgb),U_BGRAGetG(rgb),U_BGRAGetB(rgb),0} //!< Set any RGB color from an BGR color +#define U_RGBA2BGRA(rgb) (U_RGBQUAD){ U_RGBAGetB(rgb),U_RGBAGetG(rgb),U_RGBAGetR(rgb),U_RGBAGetA(rgb)} //!< Set any BGRA color from an RGBA color +#define U_BGRA2RGBA(rgb) (U_COLORREF){U_BGRAGetR(rgb),U_BGRAGetG(rgb),U_BGRAGetB(rgb),U_BGRAGetA(rgb)} //!< Set any RGBA color from an BGRA color + +// Color CMYK Get/Set Macros +#define U_CMYK(c,m,y,k)\ + ((COLOREF)((((uint8_t)(k)|((uint16_t)((uint8_t)(y))<<8))|(((uint32_t)(uint8_t)(m))<<16))|(((uint32_t)(uint8_t)(c))<<24))) \ + //!< Color CMYK Set Macro. +#define U_GetKValue(cmyk) ((uint8_t) (cmyk) ) //!< Color CMYK Get K Macro. +#define U_GetYValue(cmyk) ((uint8_t) ((cymk) >> 8)) //!< Color CMYK Get Y Macro. +#define U_GetMValue(cmyk) ((uint8_t) ((cymk) >> 16)) //!< Color CMYK Get M Macro. +#define U_GetCValue(cmyk) ((uint8_t) ((cymk) >> 24)) //!< Color CMYK Get C Macro. + +// Other macros +#define U_Gamma(A) (A < U_RGB_GAMMA_MIN ? U_RGB_GAMMA_MIN : (A > U_RGB_GAMMA_MAX ? U_RGB_GAMMA_MAX: A)) \ + //!< Gamma set Macro (enforce range). +#define U_PM(A,B) ((A)<-(B)?-(B):((A)>(B)?(B):(A))) //!< Plus/Minus Range Macro (B must be postitive!). +#define U_MNMX(A,B,C) ((A)<(B)?(B):((A)>(C)?(C):(A))) //!< Min/Max Range Macro (B <= A <= C). +#define U_MIN(A,B) ((A)>(B)?(B):(A)) //!< Minimum of A,B +#define U_MAX(A,B) ((A)>(B)?(A):(B)) //!< Maximum of A,B + +// basic EMR macros. +#define U_EMRTYPE(A) (((PU_EMR)A)->iType) //!< Get iType from U_EMR* record +#define U_EMRSIZE(A) (((PU_EMR)A)->nSize) //!< Get nSize from U_EMR* record + +// Utility macro +#define UP4(A) (4 * ((A + 3 ) / 4)) //!< Round up to nearest multiple of 4 +/** @} */ + +typedef float U_FLOAT; + +typedef uint32_t U_CBBITS; // Describes byte count of TYPE +typedef uint32_t U_CBBITSMSK; +typedef uint32_t U_CBBITSSRC; +typedef uint32_t U_CBBMI; +typedef uint32_t U_CBBMIMSK; +typedef uint32_t U_CBBMISRC; +typedef uint32_t U_CBDATA; +typedef uint32_t U_CBNAME; +typedef uint32_t U_CBPLENTRIES; +typedef uint32_t U_CBPXLFMT; +typedef uint32_t U_CBRGNDATA; +typedef uint32_t U_CBSTR; // bytes in an 8 or 16 bit string + +typedef uint32_t U_OFFBITS; // Describes byte offset to TYPE, always measured from the start of the RECORD (not the struct) +typedef uint32_t U_OFFBITSMSK; +typedef uint32_t U_OFFBITSSRC; +typedef uint32_t U_OFFBMI; +typedef uint32_t U_OFFBMIMSK; +typedef uint32_t U_OFFBMISRC; +typedef uint32_t U_OFFDATA; +typedef uint32_t U_OFFDESC; +typedef uint32_t U_OFFDX; +typedef uint32_t U_OFFPLENTRIES; +typedef uint32_t U_OFFPXLFMT; +typedef uint32_t U_OFFSTR; // String of either 8 or 16 bit characters +typedef uint8_t U_DATA; // any binary sort of data, not otherwise classified. + +// "Types" For array components in structures, where not otherwise defined as a structure +typedef uint32_t U_FNTAXES; // Font Axes For U_DESIGNVECTOR +typedef uint32_t U_STYLEENTRY; // StyleEntry For U_EXTLOGPEN +typedef uint32_t U_POLYCOUNTS; // aPolyCounts For U_EMRPOLYPOLYLINE etc. + +// "Counts" for array components in structures +typedef uint32_t U_NUM_FNTAXES; // Number of U_FNTAXES +typedef uint32_t U_NUM_LOGPLTNTRY; // Number of U_LOGPLTENTRY +typedef uint32_t U_NUM_RECTL; // Number of U_RECTL +typedef uint32_t U_NUM_POINTL; // Number of U_POINTL +typedef uint32_t U_NUM_POINT16; // Number of U_POINT16 +typedef uint32_t U_NUM_STYLEENTRY; // Number of U_STYLEENTRY +typedef uint32_t U_NUM_POLYCOUNTS; // Number of U_POLYCOUNTS +typedef uint32_t U_NUM_EMRTEXT; // Number of U_EMRTEXT +typedef uint32_t U_NUM_STR; // Number of 8 or 16 bit characters in string +typedef uint32_t U_NUM_TRIVERTEX; // Number of U_TRIVERTEX +typedef uint32_t U_NUM_GRADOBJ; // Number of U_GRADIENT4 OR U_GRADIENT3 (determined at run time) +typedef uint32_t U_NUM_RGBQUAD; // Number of U_RGBQUAD (in bmciColors in U_BITMAPCOREINFO) + + +/** + \brief Pair of values indicating x and y sizes. + Microsoft name: SIZE Object + Microsoft name: SIZEL Object +*/ +typedef struct { + int32_t cx; //!< X size + int32_t cy; //!< Y size +} U_SIZE, U_SIZEL, *PU_SIZE, *PU_SIZEL; + +/** + \brief Used for any generic pair of floats + Microsoft name: (none) +*/ +typedef struct { + float x; //!< X value + float y; //!< Y value +} U_PAIRF, *PU_PAIRF; + +/** + \brief Used for any generic pair of uint32_t + Microsoft name: POINT Object +*/ +typedef struct { + int32_t x; //!< X value + int32_t y; //!< Y value +} U_PAIR, *PU_PAIR, U_POINT, *PU_POINT, U_POINTL, *PU_POINTL; + +/** + \brief Point type for 16 bit EMR drawing functions. + Microsoft name: POINTS Object + Microsoft name: POINTS16 Object +*/ +typedef struct { + int16_t x; //!< X size (16 bit) + int16_t y; //!< Y size (16 bit) +} U_POINT16, *PU_POINT16; + +/** + \brief Coordinates of the upper left, lower right corner. + Note that the coordinate system is 0,0 in the upper left corner + of the screen an N,M in the lower right corner. + Microsoft name: RECT Object +*/ +typedef struct { + int32_t left; //!< left coordinate + int32_t top; //!< top coordinate + int32_t right; //!< right coordinate + int32_t bottom; //!< bottom coordinate +} U_RECT, *PU_RECT, + U_RECTL, *PU_RECTL; + +#define U_RCL_DEF (U_RECTL){0,0,-1,-1} //!< Use this when no bounds are needed. + +/* ************************************************************ + EMF structures OTHER than those corresponding to complete U_EMR_* records + ************************************************************ */ + +/** + \brief For U_BITMAPINFO bmiColors field + NOTE that the color order is BGR, even though the name is RGB! + Microsoft name: RGBQUAD Object +*/ +typedef struct { + uint8_t Blue; //!< Blue color (0-255) + uint8_t Green; //!< Green color (0-255) + uint8_t Red; //!< Red color (0-255) + uint8_t Reserved; //!< Not used +} U_RGBQUAD, *PU_RGBQUAD; + +/** + \brief For U_BITMAPINFO crColor field + NOTE that the color order is RGB reserved, flipped around from the preceding. + Microsoft name: COLORREF Object +*/ +typedef struct { + uint8_t Red; //!< Red color (0-255) + uint8_t Green; //!< Green color (0-255) + uint8_t Blue; //!< Blue color (0-255) + uint8_t Reserved; //!< Not used +} U_COLORREF, *PU_COLORREF; + +/** + \brief For U_POINT28_4 x and y fields. + Microsoft name: BitFIX28_4 Object. +*/ +typedef struct { + signed IntValue :28; //!< Signed integral bit field + unsigned FracValue :4; //!< Unsigned integral bit field +} U_BITFIX28_4, *PU_BITFIX28_4; + +/** + \brief For U_LCS_GAMMARGB lcsGamma* fields + Microsoft name:(unknown) Object +*/ +typedef struct { + unsigned ignoreHi :8; //!< not used + unsigned intPart :8; //!< integer part + unsigned fracPart :8; //!< fraction part + unsigned ignoreLo :8; //!< not used +} U_LCS_GAMMA, *PU_LCS_GAMMA; + +/** + \brief For U_LOGCOLORSPACEA and U_LOGCOLORSPACEW lcsGammaRGB field + Microsoft name:(unknown) Object +*/ +typedef struct { + U_LCS_GAMMA lcsGammaRed; //!< Red Gamma + U_LCS_GAMMA lcsGammaGreen; //!< Green Gamma + U_LCS_GAMMA lcsGammaBlue; //!< Blue Gamma +} U_LCS_GAMMARGB, *PU_LCS_GAMMARGB; + +/** + \brief For U_EMRSETOLORADJUSTMENT ColorAdjustment field + Note, range constants are: RGB_GAMMA_[MIN|MAX],REFERENCE_[WHITE|BLACK]_[MIN|MAX],COLOR_ADJ_[MIN|MAX] + Microsoft name: ColorAdjustment Object +*/ +typedef struct { + uint16_t caSize; //!< Size of this structure in bytes + uint16_t caFlags; //!< ColorAdjustment Enumeration + uint16_t caIlluminantIndex; //!< Illuminant Enumeration + uint16_t caRedGamma; //!< Red Gamma correction (range:2500:65000, 10000 is no correction) + uint16_t caGreenGamma; //!< Green Gamma correction (range:2500:65000, 10000 is no correction) + uint16_t caBlueGamma; //!< Blue Gamma correction (range:2500:65000, 10000 is no correction) + uint16_t caReferenceBlack; //!< Values less than this are black (range:0:4000) + uint16_t caReferenceWhite; //!< Values more than this are white (range:6000:10000) + int16_t caContrast; //!< Contrast adjustment (range:-100:100, 0 is no correction) + int16_t caBrightness; //!< Brightness adjustment (range:-100:100, 0 is no correction) + int16_t caColorfulness; //!< Colorfulness adjustment (range:-100:100, 0 is no correction) + int16_t caRedGreenTint; //!< Tine adjustment (range:-100:100, 0 is no correction) +} U_COLORADJUSTMENT, *PU_COLORADJUSTMENT; + +/** + \brief For ? (not implemented yet) + Microsoft name: DesignVector Object +*/ +typedef struct { + uint32_t Signature; //!< Must be 0x08007664 (AKA: DV_SGNTR) + U_NUM_FNTAXES NumAxes; //!< Number of elements in Values, 0-16 + U_FNTAXES Values[1]; //!< Optional. Array of font axes for opentype font +} U_DESIGNVECTOR,*PU_DESIGNVECTOR; + +/** + \brief For U_EMR_COMMENT_MULTIFORMATS record, where an array of these is used + Microsoft name: EmrFormat Object +*/ +typedef struct { + uint32_t signature; //!< FormatSignature Enumeration + uint32_t nVersion; //!< Must be 1 if signature is EPS, else ignored + U_CBDATA cbData; //!< Data size in bytes + U_OFFDATA offData; //!< Offset in bytes to the Data from the start of the RECORD +} U_EMRFORMAT, *PU_EMRFORMAT; + +/** + \brief For U_EMR[POLY]EXTTEXTOUT[A|W] emrtext field + Differs from implementation in Mingw and Wine in that the core struct has a fixed size. + Optional and movable components must be handled with offsets. + Microsoft name: EmrText Object + Following invariant core there may/must be: + U_RECTL rcl; (Optional, absent when fOptions & U_ETO_NO_RECT) grayed/clipping/opaque rectangle + + U_OFFDX offDx; (required) but position isn't static. Offset in bytes to the character spacing array measured + from the start of the RECORD, NOT from the start of this structure. + + The order of the next two may be reversed, they are found from their offsets. + + char string (required) String buffer holding nChars (padded to a multiple of 4 bytes in length). + + uint32_t Dx[1] (required) character spacing, array with one entry per glyph. + +*/ +typedef struct { + U_POINTL ptlReference; //!< String start coordinates + U_NUM_STR nChars; //!< Number of characters in the string + U_OFFSTR offString; //!< Offset in bytes to the string from the start of the RECORD + uint32_t fOptions; //!< ExtTextOutOptions Enumeration +} U_EMRTEXT, *PU_EMRTEXT; + +/** + \brief For U_EPS_DATA Points field + Microsoft name: Point28_4 Object +*/ +typedef struct { + U_BITFIX28_4 x; //!< X coordinate + U_BITFIX28_4 y; //!< Y coordinate +} U_POINT28_4, *PU_POINT28_4; + +/** + \brief For embedding EPS in EMF via U_EMRFORMAT offData array in U_EMR_COMMENT_MULTIFORMATS + Microsoft name: EpsData Object +*/ +typedef struct { + uint32_t sizeData; //!< Size in bytes of this object + uint32_t version; //!< Must be 1 + U_POINT28_4 Points[3]; //!< Defines parallelogram, UL, UR, LL corners, LR is derived. + U_RECTL PostScriptData; //!< Record may include optional clipping/opaque rectangle +} U_EPS_DATA, *PU_EPS_DATA; + +/** + \brief For GRADIENT_[TRIANGLE|U_RECT] + Microsoft name: TriVertex Object +*/ +typedef struct { + int32_t x; //!< X coord + int32_t y; //!< Y coord + uint16_t Red; //!< Red component + uint16_t Green; //!< Green component + uint16_t Blue; //!< Bule component + uint16_t Alpha; //!< Alpha Transparency +} U_TRIVERTEX, *PU_TRIVERTEX; + + +/** + \brief For U_EMRGRADIENTFILL GradObj field + + Gradient object notes. The next two structures are used to define the shape with reference to an existing array + of points stored in an array of TriVertex objects in the U_EMRGRADIENTFILL record. The tricky part + is that these two structures are different sizes. In some implementations (MingW) the array is cast to uint32_t + and basically the cast is then ignored. For libUEMF we leave this out of the structure entirely and get to it with offsets. + + Microsoft name: GradientTriangle Object +*/ +typedef struct { + uint32_t Vertex1; //!< Index of Vertex1 in an array of U_TRIVERTEX objects + uint32_t Vertex2; //!< Index of Vertex2 in an array of U_TRIVERTEX objects + uint32_t Vertex3; //!< Index of Vertex3 in an array of U_TRIVERTEX objects +} U_GRADIENT3, *PU_GRADIENT3; + +/** + \brief For U_EMRGRADIENTFILL GradObj field + Microsoft name: GradientRectangle Object +*/ +typedef struct { + uint32_t UpperLeft; //!< Index of UL corner in an array of U_TRIVERTEX objects + uint32_t LowerRight; //!< Index of LR corner in an array of U_TRIVERTEX objects +} U_GRADIENT4, *PU_GRADIENT4; + +/** + \brief For U_EMRCREATEBRUSHINDIRECT lb field + Microsoft name: LogBrushEx Object +*/ +typedef struct { //!< In MS documentation this is LogBrushEx Object + uint32_t lbStyle; //!< LB_Style Enumeration + U_COLORREF lbColor; //!< Brush color + uint32_t lbHatch; //!< HatchStyle Enumeration +} U_LOGBRUSH, *PU_LOGBRUSH; +typedef U_LOGBRUSH U_PATTERN, *PU_PATTERN; + +/** + \brief For U_LOGFONT_PANOSE elfLogFont field + Microsoft name: LogFont Object +*/ +typedef struct { + int32_t lfHeight; //!< Height in Logical units + int32_t lfWidth; //!< Average Width in Logical units + int32_t lfEscapement; //!< Angle in 0.1 degrees betweem escapement vector and X axis + int32_t lfOrientation; //!< Angle in 0.1 degrees between baseline and X axis + int32_t lfWeight; //!< LF_Weight Enumeration + uint8_t lfItalic; //!< LF_Italic Enumeration + uint8_t lfUnderline; //!< LF_Underline Enumeration + uint8_t lfStrikeOut; //!< LF_StrikeOut Enumeration + uint8_t lfCharSet; //!< LF_CharSet Enumeration + uint8_t lfOutPrecision; //!< LF_OutPrecision Enumeration + uint8_t lfClipPrecision; //!< LF_ClipPrecision Enumeration + uint8_t lfQuality; //!< LF_Quality Enumeration + uint8_t lfPitchAndFamily; //!< LF_PitchAndFamily Enumeration + uint16_t lfFaceName[U_LF_FACESIZE]; //!< Name of font. If <U_LF_FACESIZE chars must be null terminated +} U_LOGFONT, *PU_LOGFONT; + +/** + \brief For U_LOGFONT_PANOSE elfPanose field + Microsoft name: Panose Object +*/ +typedef struct { + uint8_t bFamilyType; //!< FamilyType Enumeration + uint8_t bSerifStyle; //!< SerifType Enumeration + uint8_t bWeight; //!< Weight Enumeration + uint8_t bProportion; //!< Proportion Enumeration + uint8_t bContrast; //!< Contrast Enumeration + uint8_t bStrokeVariation; //!< StrokeVariation Enumeration + uint8_t bArmStyle; //!< ArmStyle Enumeration + uint8_t bLetterform; //!< Letterform Enumeration + uint8_t bMidline; //!< Midline Enumeration + uint8_t bXHeight; //!< XHeight Enumeration +} U_PANOSE, *PU_PANOSE; + +#define U_PAN_ALL0 (U_PANOSE){0,0,0,0,0,0,0,0,0,0} // all U_PAN_ANY, have not seen this in an EMF file +#define U_PAN_ALL1 (U_PANOSE){1,1,1,1,1,1,1,1,1,1} // all U_PAN_NO_FIT, this is what createfont() would have made + +// Microsoft name: LogFontEx Object (not implemented) +// Microsoft name: LogFontExDv Object (not implemented) + +/** + \brief For U_EMREXTCREATEFONTINDIRECTW elfw field + Microsoft name: LogFont_Panose Object +*/ +typedef struct { + U_LOGFONT elfLogFont; //!< Basic font attributes + uint16_t elfFullName[U_LF_FULLFACESIZE]; //!< Font full name + uint16_t elfStyle[U_LF_FACESIZE]; //!< Font style (if <U_LF_FACESIZE characters, null terminate string) + uint32_t elfVersion; //!< Ignore + uint32_t elfStyleSize; //!< Font hinting starting at this point size, if 0, starts at Height + uint32_t elfMatch; //!< Ignore + uint32_t elfReserved; //!< Must be 0, Ignore + uint8_t elfVendorId[U_ELF_VENDOR_SIZE]; //!< Ignore + uint32_t elfCulture; //!< Must be 0, Ignore + U_PANOSE elfPanose; //!< Panose Object. If all zero, it is ignored. + uint16_t elfPadding; //!< Ignore +} U_LOGFONT_PANOSE, *PU_LOGFONT_PANOSE; + +/** + \brief For U_LOGPALETTE palPalEntry field(s) + Microsoft name: LogPaletteEntry Object +*/ +typedef struct { + uint8_t peReserved; //!< Ignore + uint8_t peRed; //!< Palette entry Red Intensity + uint8_t peGreen; //!< Palette entry Green Intensity + uint8_t peBlue; //!< Palette entry Blue Intensity +} U_LOGPLTNTRY, *PU_LOGPLTNTRY; + +/** + \brief For U_EMRCREATEPALETTE lgpl field + Microsoft name: LogPalette Object +*/ +typedef struct { + uint16_t palVersion; //!< Must be 0x0300 (AKA: U_LP_VERSION) + uint16_t palNumEntries; //!< Number of U_LOGPLTNTRY objects + U_LOGPLTNTRY palPalEntry[1]; //!< PC_Entry Enumeration +} U_LOGPALETTE, *PU_LOGPALETTE; + +/** + \brief For U_EMRCREATEPEN lopn field + Microsoft name: LogPen Object +*/ +typedef struct { + uint32_t lopnStyle; //!< PenStyle Enumeration + U_POINT lopnWidth; //!< Width of pen set by X, Y is ignored + U_COLORREF lopnColor; //!< Pen color value +} U_LOGPEN, *PU_LOGPEN; + +// Microsoft name: LogPenEx Object (not implemented) + +/** + \brief For U_EMRPIXELFORMAT pfd field + Microsoft name: PixelFormatDescriptor Object +*/ +typedef struct { + uint16_t nSize; //!< Structure size in bytes + uint16_t nVersion; //!< must be 1 + uint32_t dwFlags; //!< PFD_dwFlags Enumeration + uint8_t iPixelType; //!< PFD_iPixelType Enumeration + uint8_t cColorBits; //!< RGBA: total bits per pixel + uint8_t cRedBits; //!< Red bits per pixel + uint8_t cRedShift; //!< Red shift to data bits + uint8_t cGreenBits; //!< Green bits per pixel + uint8_t cGreenShift; //!< Green shift to data bits + uint8_t cBlueBits; //!< Blue bits per pixel + uint8_t cBlueShift; //!< Blue shift to data bits + uint8_t cAlphaBits; //!< Alpha bits per pixel + uint8_t cAlphaShift; //!< Alpha shift to data bits + uint8_t cAccumBits; //!< Accumulator buffer, total bitplanes + uint8_t cAccumRedBits; //!< Red accumulator buffer bitplanes + uint8_t cAccumGreenBits; //!< Green accumulator buffer bitplanes + uint8_t cAccumBlueBits; //!< Blue accumulator buffer bitplanes + uint8_t cAccumAlphaBits; //!< Alpha accumulator buffer bitplanes + uint8_t cDepthBits; //!< Depth of Z-buffer + uint8_t cStencilBits; //!< Depth of stencil buffer + uint8_t cAuxBuffers; //!< Depth of auxilliary buffers (not supported) + uint8_t iLayerType; //!< PFD_iLayerType Enumeration, may be ignored + uint8_t bReserved; //!< Bits 0:3/4:7 are number of Overlay/Underlay planes + uint32_t dwLayerMask; //!< may be ignored + uint32_t dwVisibleMask; //!< color or index of underlay plane + uint32_t dwDamageMask; //!< may be ignored +} U_PIXELFORMATDESCRIPTOR, *PU_PIXELFORMATDESCRIPTOR; + +/** + \brief For U_RGNDATA rdb field + Microsoft name: RegionDataHeader Object (RGNDATAHEADER) +*/ +typedef struct { + uint32_t dwSize; //!< Size in bytes, must be 0x20 (AKA: U_RDH_OBJSIZE) + uint32_t iType; //!< Must be 1 (AKA: U_RDH_RECTANGLES) + U_NUM_RECTL nCount; //!< Number of rectangles in region + uint32_t nRgnSize; //!< Size in bytes of rectangle buffer + U_RECTL rclBounds; //!< Region bounds +} U_RGNDATAHEADER,*PU_RGNDATAHEADER; + +/** + \brief For U_EMRFILLRGN RgnData field(s) + Microsoft name: RegionData Object +*/ +typedef struct { + U_RGNDATAHEADER rdh; //!< Data description + U_RECTL Buffer[1]; //!< Array of U_RECTL elements +} U_RGNDATA,*PU_RGNDATA; + +// Microsoft name: UniversalFontId Object (not implemented) + +/** + \brief For U_EMR[FILLRGN|STRETCHBLT|MASKBLT|PLGBLT] xformSrc field + Microsoft name: Xform Object +*/ +typedef struct { + U_FLOAT eM11; //!< Matrix element M11 + U_FLOAT eM12; //!< Matrix element M12 + U_FLOAT eM21; //!< Matrix element M21 + U_FLOAT eM22; //!< Matrix element M22 + U_FLOAT eDx; //!< X offset in logical units + U_FLOAT eDy; //!< Y offset in logical units +} U_XFORM , *PU_XFORM; + +/** + \brief For U_CIEXYZTRIPLE (all) fields + Microsoft name: CIEXYZ Object +*/ +typedef struct { + int32_t ciexyzX; //!< CIE color space X component + int32_t ciexyzY; //!< CIE color space Y component + int32_t ciexyzZ; //!< CIE color space Z component +} U_CIEXYZ, *PU_CIEXYZ; + +/** + \brief For U_LOGCOLORSPACEA and U_LOGCOLORSPACEW lcsEndpints field + defines a CIE colorspace + Microsoft name: CIEXYZTRIPLE Object +*/ +typedef struct { + U_CIEXYZ ciexyzRed; //!< CIE XYZ coord of red endpoint of colorspace + U_CIEXYZ ciexyzGreen; //!< CIE XYZ coord of green endpoint of colorspace + U_CIEXYZ ciexyzBlue; //!< CIE XYZ coord of blue endpoint of colorspace +} U_CIEXYZTRIPLE, *PU_CIEXYZTRIPLE; + +/** + \brief For U_EMRCREATECOLORSPACE lcs field + Microsoft name: LOGCOLORSPACEA Object +*/ +typedef struct { + uint32_t lcsSignature; //!< must be U_LCS_SIGNATURE + uint32_t lcsVersion; //!< must be U_LCS_VERSION + uint32_t lcsSize; //!< Size in bytes of this structure + int32_t lcsCSType; //!< LCS_CSType Enumeration + int32_t lcsIntent; //!< LCS_Intent Enumeration + U_CIEXYZTRIPLE lcsEndpoints; //!< CIE XYZ color space endpoints + U_LCS_GAMMARGB lcsGammaRGB; //!< Gamma For RGB + char lcsFilename[U_MAX_PATH]; //!< Names an external color profile file, otherwise empty string +} U_LOGCOLORSPACEA, *PU_LOGCOLORSPACEA; + +/** + \brief For U_EMRCREATECOLORSPACEW lcs field + Microsoft name: LOGCOLORSPACEW Object +*/ +typedef struct { + uint32_t lcsSignature; //!< must be U_LCS_SIGNATURE + uint32_t lcsVersion; //!< must be U_LCS_VERSION + uint32_t lcsSize; //!< Size in bytes of this structure + int32_t lcsCSType; //!< lcsCSType Enumeration + int32_t lcsIntent; //!< lcsIntent Enumeration + U_CIEXYZTRIPLE lcsEndpoints; //!< CIE XYZ color space endpoints + U_LCS_GAMMARGB lcsGammaRGB; //!< Gamma For RGB + uint16_t lcsFilename[U_MAX_PATH]; //!< Could name an external color profile file, otherwise empty string +} U_LOGCOLORSPACEW, *PU_LOGCOLORSPACEW; + +/** + \brief For U_EMREXTCREATEPEN lopn field + Microsoft name: EXTLOGPEN Object +*/ +typedef struct { + uint32_t elpPenStyle; //!< PenStyle Enumeration + uint32_t elpWidth; //!< Width in logical units (elpPenStyle & U_PS_GEOMETRIC) or 1 (pixel) + uint32_t elpBrushStyle; //!< LB_Style Enumeration + U_COLORREF elpColor; //!< Pen color + uint32_t elpHatch; //!< HatchStyle Enumeration + U_NUM_STYLEENTRY elpNumEntries; //!< Count of StyleEntry array + U_STYLEENTRY elpStyleEntry[1]; //!< Array of StyleEntry (For user specified dot/dash patterns) +} U_EXTLOGPEN, *PU_EXTLOGPEN; + +/** + \brief For U_BITMAPINFO bmiHeader field + Microsoft name: BITMAPINFOHEADER Object +*/ +typedef struct { + uint32_t biSize; //!< Structure size in bytes + int32_t biWidth; //!< Bitmap width in pixels + int32_t biHeight; //!< Bitmap height in pixels, may be negative. + //!< abs(biHeight) is bitmap height + //!< bitmap may appear in two orientations: + //!< biHeight > 0 origin is LL corner, may be compressed, this is height after decompression. + //!< biHeight < 0 origin is UL corner, may not be compressed + uint16_t biPlanes; //!< Planes (must be 1) + uint16_t biBitCount; //!< BitCount Enumeration (determines number of RBG colors) + uint32_t biCompression; //!< BI_Compression Enumeration + uint32_t biSizeImage; //!< Image size in bytes or 0 = "default size (calculated from geometry?)" + int32_t biXPelsPerMeter; //!< X Resolution in pixels/meter + int32_t biYPelsPerMeter; //!< Y Resolution in pixels/meter + U_NUM_RGBQUAD biClrUsed; //!< Number of bmciColors in U_BITMAPINFO/U_BITMAPCOREINFO that are used by the bitmap + uint32_t biClrImportant; //!< Number of bmciColors needed (0 means all). +} U_BITMAPINFOHEADER, *PU_BITMAPINFOHEADER; + +#if 0 +// Do EMF files ever use any of these??? + +// Microsoft name: BITMAPV4HEADER Object +typedef struct { + uint32_t bV4Size; + int32_t bV4Width; + int32_t bV4Height; + uint16_t bV4Planes; + uint16_t bV4BitCount; + uint32_t bV4Compression; + uint32_t bV4SizeImage; + int32_t bV4XPelsPerMeter; + int32_t bV4YPelsPerMeter; + uint32_t bV4ClrUsed; + uint32_t bV4ClrImportant; + uint32_t bV4RedMask; + uint32_t bV4GreenMask; + uint32_t bV4BlueMask; + uint32_t bV4AlphaMask; + uint32_t bV4CSType; + U_CIEXYZTRIPLE bV4EndPoints; + uint32_t bV4GammaRed; + uint32_t bV4GammaGreen; + uint32_t bV4GammaBlue; +} U_BITMAPV4HEADER, *PU_BITMAPV4HEADER; //!< For ? + +// Microsoft name: BITMAPV5HEADER Object +typedef struct { + uint32_t bV5Size; + int32_t bV5Width; + int32_t bV5Height; + uint16_t bV5Planes; + uint16_t bV5BitCount; + uint32_t bV5Compression; + uint32_t bV5SizeImage; + int32_t bV5XPelsPerMeter; + int32_t bV5YPelsPerMeter; + uint32_t bV5ClrUsed; + uint32_t bV5ClrImportant; + uint32_t bV5RedMask; + uint32_t bV5GreenMask; + uint32_t bV5BlueMask; + uint32_t bV5AlphaMask; + uint32_t bV5CSType; + U_CIEXYZTRIPLE bV5Endpoints; + uint32_t bV5GammaRed; + uint32_t bV5GammaGreen; + uint32_t bV5GammaBlue; + uint32_t bV5Intent; + uint32_t bV5ProfileData; + uint32_t bV5ProfileSize; + uint32_t bV5Reserved; +} U_BITMAPV5HEADER, *PU_BITMAPV5HEADER; //!< For ? + +// Microsoft name: BITMAPCOREHEADER Object +typedef struct { + uint32_t bcSize; //!< Structure size in bytes + uint16_t bcWidth; //!< Bitmap width in pixels + uint16_t bcHeight; //!< Bitmap height in pixels + uint16_t bcPlanes; //!< Planes (must be 1) + uint16_t bcBitCount; //!< BitCount Enumeration +} U_BITMAPCOREHEADER, *PU_BITMAPCOREHEADER; //!< For U_BITMAPCOREINFO + +// Microsoft name: BITMAPCOREINFO Object +// Description of a simple Device Independent Bitmap (DIB) - no compression or color maps +typedef struct { + U_BITMAPCOREHEADER bmciHeader; //!< Geometry and pixel properties + U_RGBTRIPLE bmciColors[1]; //!< Color table +} U_BITMAPCOREINFO, *PU_BITMAPCOREINFO; //!< For ? + +// Microsoft name: RGBTRIPLE Object +// NOTE that the color order is BGR, even though the name is RGB! +typedef struct { + uint8_t rgbtBlue; //!< Blue color (0-255) + uint8_t rgbtGreen; //!< Green color (0-255) + uint8_t rgbtRed; //!< Red color (0-255) +} U_RGBTRIPLE, *PU_RGBTRIPLE; //!< For U_BITMAPCOREINFO bmciColors field + + +#endif // elements possibly never used by an EMF file + +/** + \brief For U_EMR_* OffBmi* fields + Description of a Bitmap which in some cases is a Device Independent Bitmap (DIB) + Microsoft name: BITMAPINFO Object +*/ +typedef struct { + U_BITMAPINFOHEADER bmiHeader; //!< Geometry and pixel properties + U_RGBQUAD bmiColors[1]; //!< Color table. 24 bit images do not use color table values. +} U_BITMAPINFO, *PU_BITMAPINFO; + +/** + \brief U_EMRALPHABLEND Blend field +*/ +typedef struct { + uint8_t Operation; //!< Must be 0 + uint8_t Flags; //!< Must be 0 + uint8_t Global; //!< Alpha for whole thing if Op is U_AC_SRC_GLOBAL (AKA U_AC_SRC_GLOBAL) + uint8_t Op; //!< Blend Enumeration +} U_BLEND, *PU_BLEND; +# + +/** + General form of an EMF record. + Microsoft name: ENHMETARECORD Object + For generic cast of other U_EMR_* records +*/ +typedef struct { + uint32_t iType; //!< Type of EMR record + uint32_t nSize; //!< Size of entire record in bytes (multiple of 4). + uint32_t dParm[1]; //!< Data in record +} U_ENHMETARECORD, *PU_ENHMETARECORD; + +/** First two fields of all EMF records + For accessing iType and nSize files in all U_EMR* records + Microsoft name: EMR Object +*/ +typedef struct { + uint32_t iType; //!< Type of EMR record + uint32_t nSize; //!< Size of entire record in bytes (multiple of 4). +} U_EMR, *PU_EMR; + +typedef struct { + U_EMR emr; //!< U_EMR + U_PAIR pair; //!< pair of 32 bit values +} U_EMRGENERICPAIR, *PU_EMRGENERICPAIR; + + + + +// *********************************************************************************** +// The following have U_EMR_# records + +/* Index 1 */ +/** + \brief The firstU_ENHMETARECORD record in the metafile. + + Microsoft names instead: Header, HeaderExtension1, and HeaderExtension2 objects. These are + used nowhere else, so they are combined here, along with the first two fields which were not listed in the Header. + + Note also that three fields in this file (nBytes, nRecords, nHandles) must be (re)set after the entire EMF + is constructed, since typically they are not known until then. bOpenGL may or may not be knowable when this + header is written. + + Note also that rclBounds and rclFrame are supposed to be the region bounding the drawn content within the + EMF. This is generally smaller than the size from szlDevice. However, since libUEMF does not actually draw + anything it has no way of knowing what these values are. Instead when it creates a header it sets these to + match the szl* fields. +*/ +typedef struct { + U_EMR emr; //!< U_EMR + U_RECTL rclBounds; //!< Bounding rectangle in device units + U_RECTL rclFrame; //!< Bounding rectangle in 0.01 mm units + uint32_t dSignature; //!< FormatSignature Enumeration (must be U_ENHMETA_SIGNATURE) + uint32_t nVersion; //!< Must be U_ENHMETA_VERSION (0x00010000) + uint32_t nBytes; //!< Length in bytes of the Metafile + uint32_t nRecords; //!< Records in the Metafile + uint16_t nHandles; //!< Number of graphics objects used in the Metafile + uint16_t sReserved; //!< Must be 0 + uint32_t nDescription; //!< Characters in the Description field, 0 if no description + uint32_t offDescription; //!< Offset in bytes to Description field + uint32_t nPalEntries; //!< Number of Palette entries (in U_EMR_EOF record). + U_SIZEL szlDevice; //!< Reference device size in pixels + U_SIZEL szlMillimeters; //!< Reference device size in 0.01 mm + /** Fields for winver >= win95 */ + U_CBPXLFMT cbPixelFormat; //!< Size in bytes of PixelFormatDescriptor, 0 if no PFD + U_OFFPXLFMT offPixelFormat; //!< Offset in bytes to PixelFormatDescriptor from the start of the RECORD, 0 if no PFD + uint32_t bOpenGL; //!< nonZero if OpenGL commands are included + /** Fields for winver >= win98 */ + U_SIZEL szlMicrometers; //!< Size of the display device in micrometer + //!< Record may include optional Description, UTF-16BE string + //!< Record may include optional PxlFmtDescriptor, U_PIXELFORMATDESCRIPTOR +} U_EMRHEADER, *PU_EMRHEADER; + +/* Index 2,3,4,5,6*/ +typedef struct { + U_EMR emr; //!< U_EMR + U_RECTL rclBounds; //!< bounding rectangle in device units + U_NUM_POINTL cptl; //!< Number of points to draw + U_POINTL aptl[1]; //!< array of points +} U_EMRPOLYBEZIER, *PU_EMRPOLYBEZIER, + U_EMRPOLYGON, *PU_EMRPOLYGON, + U_EMRPOLYLINE, *PU_EMRPOLYLINE, + U_EMRPOLYBEZIERTO, *PU_EMRPOLYBEZIERTO, + U_EMRPOLYLINETO, *PU_EMRPOLYLINETO; + +/* Index 7,8 */ +typedef struct { + U_EMR emr; //!< U_EMR + U_RECTL rclBounds; //!< bounding rectangle in device units + U_NUM_POLYCOUNTS nPolys; //!< Number of elements in aPolyCounts + U_NUM_POINTL cptl; //!< Total number of points (over all poly) + U_POLYCOUNTS aPolyCounts[1]; //!< Number of points in each poly (sequential) +// This will appear somewhere but is not really part of the core structure. +// U_POINTL aptl[1]; //!< array of points +} U_EMRPOLYPOLYLINE, *PU_EMRPOLYPOLYLINE, + U_EMRPOLYPOLYGON, *PU_EMRPOLYPOLYGON; + +/* Index 9,11 (numbers interleave with next one) */ +typedef struct { + U_EMR emr; //!< U_EMR + U_SIZEL szlExtent; //!< H & V extent in logical units +} U_EMRSETWINDOWEXTEX, *PU_EMRSETWINDOWEXTEX, + U_EMRSETVIEWPORTEXTEX, *PU_EMRSETVIEWPORTEXTEX; + +/* Index 10,12,13 */ +typedef struct { + U_EMR emr; //!< U_EMR + U_POINTL ptlOrigin; //!< H & V origin in logical units +} U_EMRSETWINDOWORGEX, *PU_EMRSETWINDOWORGEX, + U_EMRSETVIEWPORTORGEX, *PU_EMRSETVIEWPORTORGEX, + U_EMRSETBRUSHORGEX, *PU_EMRSETBRUSHORGEX; + +/* Index 14 +*/ +/** +This is a very odd structure because the nSizeLast follows an optional variable size field. Consequently +even though nSizeLast has a name it cannot actually be accessed by it! Following the core appear these fields: + + U_LOGPLTNTRY PalEntries[1]; Record may include optional array of PalEntries + + uint32_t nSizeLast; Mandatory, but position isn't fixed. Must have same value as emr.nSize in header record +*/ +typedef struct { + U_EMR emr; //!< U_EMR + U_CBPLENTRIES cbPalEntries; //!< Number of palette entries + U_OFFPLENTRIES offPalEntries; //!< Offset in bytes to array of palette entries +} U_EMREOF, *PU_EMREOF; + +/* Index 15 */ +typedef struct { + U_EMR emr; //!< U_EMR + U_POINTL ptlPixel; //!< Pixel coordinates (logical) + U_COLORREF crColor; //!< Pixel color +} U_EMRSETPIXELV, *PU_EMRSETPIXELV; + +/* Index 16 */ +typedef struct { + U_EMR emr; //!< U_EMR + uint32_t dwFlags; //!< must be 1 +} U_EMRSETMAPPERFLAGS, *PU_EMRSETMAPPERFLAGS; + +/* Index 17,18,19,20,21,22,67,98,115 */ +typedef struct { + U_EMR emr; //!< U_EMR + uint32_t iMode; //!< enumeration varies with type +} U_EMRSETMAPMODE, *PU_EMRSETMAPMODE, //!< MapMode enumeration + U_EMRSETBKMODE, *PU_EMRSETBKMODE, //!< BackgroundMode Enumeration + U_EMRSETPOLYFILLMODE, *PU_EMRSETPOLYFILLMODE, //!< PolygonFillMode Enumeration + U_EMRSETROP2, *PU_EMRSETROP2, //!< Binary Raster Operation Enumeration + U_EMRSETSTRETCHBLTMODE, *PU_EMRSETSTRETCHBLTMODE, //!< StretchMode Enumeration + U_EMRSETTEXTALIGN, *PU_EMRSETTEXTALIGN, //!< TextAlignment enumeration + U_EMRSELECTCLIPPATH, *PU_EMRSELECTCLIPPATH, //!< RegionMode Enumeration + U_EMRSETICMMODE, *PU_ERMSETICMMODE, //!< ICMMode Enumeration + U_EMRSETLAYOUT, *PU_EMRSETLAYOUT; //!< Mirroring Enumeration + +/* Index 23 */ +typedef struct { + U_EMR emr; //!< U_EMR + U_COLORADJUSTMENT ColorAdjustment; //!< Color Adjustment +} U_EMRSETCOLORADJUSTMENT, *PU_EMRSETCOLORADJUSTMENT; + +/* Index 24, 25 */ +typedef struct { + U_EMR emr; //!< U_EMR + U_COLORREF crColor; //!< Color +} U_EMRSETTEXTCOLOR, *PU_EMRSETTEXTCOLOR, + U_EMRSETBKCOLOR, *PU_EMRSETBKCOLOR; + +/* Index 26 */ +typedef struct { + U_EMR emr; //!< U_EMR + U_POINTL ptlOffset; //!< Clipping region +} U_EMROFFSETCLIPRGN, *PU_EMROFFSETCLIPRGN; + +/* Index 27, 54 */ +typedef struct { + U_EMR emr; //!< U_EMR + U_POINTL ptl; //!< Point coordinates +} U_EMRMOVETOEX, *PU_EMRMOVETOEX, + U_EMRLINETO, *PU_EMRLINETO; + +/* Index 28,33,52,59,60,61,65,66,68 */ +typedef struct { + U_EMR emr; //!< U_EMR +} + U_EMRSETMETARGN, *PU_EMRSETMETARGN, + U_EMRSAVEDC, *PU_EMRSAVEDC, + U_EMRREALIZEPALETTE, *PU_EMRREALIZEPALETTE, + U_EMRBEGINPATH, *PU_EMRBEGINPATH, + U_EMRENDPATH, *PU_EMRENDPATH, + U_EMRCLOSEFIGURE, *PU_EMRCLOSEFIGURE, + U_EMRFLATTENPATH, *PU_EMRFLATTENPATH, + U_EMRWIDENPATH, *PU_EMRWIDENPATH, + U_EMRABORTPATH, *PU_EMRABORTPATH; + +/* Index 29,30 */ +typedef struct { + U_EMR emr; //!< U_EMR + U_RECTL rclClip; //!< Clipping Region +} U_EMREXCLUDECLIPRECT, *PU_EMREXCLUDECLIPRECT, + U_EMRINTERSECTCLIPRECT, *PU_EMRINTERSECTCLIPRECT; + +/* Index 31,32 */ +typedef struct { + U_EMR emr; //!< U_EMR + int32_t xNum; //!< Horizontal multiplier (!=0) + int32_t xDenom; //!< Horizontal divisor (!=0) + int32_t yNum; //!< Vertical multiplier (!=0) + int32_t yDenom; //!< Vertical divisor (!=0) +} U_EMRSCALEVIEWPORTEXTEX, *PU_EMRSCALEVIEWPORTEXTEX, + U_EMRSCALEWINDOWEXTEX, *PU_EMRSCALEWINDOWEXTEX; + +/* Index 33 (see 28) */ + +/* Index 34 */ +typedef struct { + U_EMR emr; //!< U_EMR + int32_t iRelative; //!< DC to restore. -1 is preceding +} U_EMRRESTOREDC, *PU_EMRRESTOREDC; + +/* Index 35 */ +typedef struct { + U_EMR emr; //!< U_EMR + U_XFORM xform; //!< Transform +} U_EMRSETWORLDTRANSFORM, *PU_EMRSETWORLDTRANSFORM; + +/* Index 36 */ +typedef struct { + U_EMR emr; //!< U_EMR + U_XFORM xform; //!< Transform + uint32_t iMode; //!< ModifyWorldTransformMode Enumeration +} U_EMRMODIFYWORLDTRANSFORM, *PU_EMRMODIFYWORLDTRANSFORM; + +/* Index 37,40 */ +typedef struct { + U_EMR emr; //!< U_EMR + uint32_t ihObject; //!< Number of a stock or created object +} U_EMRDELETEOBJECT, *PU_EMRDELETEOBJECT, + U_EMRSELECTOBJECT, *PU_EMRSELECTOBJECT; + +/* Index 38 */ +typedef struct { + U_EMR emr; //!< U_EMR + uint32_t ihPen; //!< Index to place object in EMF object table (this entry must not yet exist) + U_LOGPEN lopn; //!< Pen properties +} U_EMRCREATEPEN, *PU_EMRCREATEPEN; + +/* Index 39 */ +typedef struct { + U_EMR emr; //!< U_EMR + uint32_t ihBrush; //!< Index to place object in EMF object table (this entry must not yet exist) + U_LOGBRUSH lb; //!< Brush properties +} U_EMRCREATEBRUSHINDIRECT, *PU_EMRCREATEBRUSHINDIRECT; + +/* Index 40 see 37 */ + +/* Index 41 */ +typedef struct { + U_EMR emr; //!< U_EMR + U_POINTL ptlCenter; //!< Center in logical units + uint32_t nRadius; //!< Radius in logical units + U_FLOAT eStartAngle; //!< Starting angle in degrees (counter clockwise from x axis) + U_FLOAT eSweepAngle; //!< Sweep angle in degrees +} U_EMRANGLEARC, *PU_EMRANGLEARC; + +/* Index 42,43 */ +typedef struct { + U_EMR emr; //!< U_EMR + U_RECTL rclBox; //!< bounding rectangle in logical units +} U_EMRELLIPSE, *PU_EMRELLIPSE, + U_EMRRECTANGLE, *PU_EMRRECTANGLE; + +/* Index 44 */ +typedef struct { + U_EMR emr; //!< U_EMR + U_RECTL rclBox; //!< bounding rectangle in logical units + U_SIZEL szlCorner; //!< W & H in logical units of ellipse used to round corner +} U_EMRROUNDRECT, *PU_EMRROUNDRECT; + +/* Index 45, 46 ,47, 55 */ +typedef struct { + U_EMR emr; //!< U_EMR + U_RECTL rclBox; //!< bounding rectangle in logical units + U_POINTL ptlStart; //!< Start point in logical units + U_POINTL ptlEnd; //!< End point in logical units +} U_EMRARC, *PU_EMRARC, + U_EMRCHORD, *PU_EMRCHORD, + U_EMRPIE, *PU_EMRPIE, + U_EMRARCTO, *PU_EMRARCTO; + +/* Index 48 */ +typedef struct { + U_EMR emr; //!< U_EMR + uint32_t ihPal; //!< Index of a Palette object in the EMF object table +} U_EMRSELECTPALETTE, *PU_EMRSELECTPALETTE; + +/* Index 49 */ +typedef struct { + U_EMR emr; //!< U_EMR + uint32_t ihPal; //!< Index to place object in EMF object table (this entry must not yet exist) + U_LOGPALETTE lgpl; //!< Palette properties +} U_EMRCREATEPALETTE, *PU_EMRCREATEPALETTE; + +/* Index 50 */ +typedef struct { + U_EMR emr; //!< U_EMR + uint32_t ihPal; //!< Index of a Palette object in the EMF object table + uint32_t iStart; //!< First Palette entry in selected object to set + U_NUM_LOGPLTNTRY cEntries; //!< Number of Palette entries in selected object to set + U_LOGPLTNTRY aPalEntries[1]; //!< Values to set with +} U_EMRSETPALETTEENTRIES, *PU_EMRSETPALETTEENTRIES; + +/* Index 51 */ +typedef struct { + U_EMR emr; //!< U_EMR + uint32_t ihPal; //!< Index of a Palette object in the EMF object table + uint32_t cEntries; //!< Number to expand or truncate the Palette entry list to. +} U_EMRRESIZEPALETTE, *PU_EMRRESIZEPALETTE; + +/* Index 52 (see 28) */ + +/* Index 53 */ +typedef struct { + U_EMR emr; //!< U_EMR + U_POINTL ptlStart; //!< Start point in logical units + U_COLORREF crColor; //!< Color to fill with + uint32_t iMode; //!< FloodFill Enumeration +} U_EMREXTFLOODFILL, *PU_EMREXTFLOODFILL; + +/* Index 54 (see 27) */ + +/* Index 55 (see 45) */ + +/* Index 56 */ +typedef struct { + U_EMR emr; //!< U_EMR + U_RECTL rclBounds; //!< Bounding rectangle in device units + U_NUM_POINTL cptl; //!< Number of U_POINTL objects + U_POINTL aptl[1]; //!< Array of U_POINTL objects + uint8_t abTypes[1]; //!< Array of Point Enumeration +} U_EMRPOLYDRAW, *PU_EMRPOLYDRAW; + +/* Index 57 */ +typedef struct { + U_EMR emr; //!< U_EMR + uint32_t iArcDirection; //!< ArcDirection Enumeration +} U_EMRSETARCDIRECTION, *PU_EMRSETARCDIRECTION; + +/* Index 58 +IMPORTANT!!!! The Microsoft structure uses a float for the miterlimit but the EMF file record +uses an unsigned int. The latter form is used in this structure. +*/ +typedef struct { + U_EMR emr; //!< U_EMR + uint32_t eMiterLimit; //!< Miter limit (max value of mitered length / line width) +} U_EMRSETMITERLIMIT, *PU_EMRSETMITERLIMIT; + +/* Index 59,60,61 (see 28) */ + +/* Index 62,63,64 */ +typedef struct { + U_EMR emr; //!< U_EMR + U_RECTL rclBounds; //!< Bounding rectangle in device units +} U_EMRFILLPATH, *PU_EMRFILLPATH, + U_EMRSTROKEANDFILLPATH, *PU_EMRSTROKEANDFILLPATH, + U_EMRSTROKEPATH, *PU_EMRSTROKEPATH; + +/* Index 65,66 (see 28) */ +/* Index 67 (see 17) */ +/* Index 68 (see 28) */ +/* Index 69 (not a defined U_EMR record type ) */ + +/* Index 70 */ +typedef struct { + U_EMR emr; //!< U_EMR + U_CBDATA cbData; //!< Number of bytes in comment + uint8_t Data[1]; //!< Comment (any binary data, interpretation is program specific) +} U_EMRCOMMENT, *PU_EMRCOMMENT; //!< AKA GDICOMMENT + +/* Index 71 */ +typedef struct { + U_EMR emr; //!< U_EMR + U_RECTL rclBounds; //!< Bounding rectangle in device units + U_CBRGNDATA cbRgnData; //!< Size in bytes of Region data + uint32_t ihBrush; //!< Index of a Brush object in the EMF object table + U_RGNDATA RgnData[1]; //!< Variable size U_RGNDATA structure +} U_EMRFILLRGN, *PU_EMRFILLRGN; + +/* Index 72 */ +typedef struct { + U_EMR emr; //!< U_EMR + U_RECTL rclBounds; //!< Bounding rectangle in device units + U_CBRGNDATA cbRgnData; //!< Size in bytes of Region data + uint32_t ihBrush; //!< Index of a Brush object in the EMF object table + U_SIZEL szlStroke; //!< W & H of Brush stroke + U_RGNDATA RgnData[1]; //!< Variable size U_RGNDATA structure +} U_EMRFRAMERGN, *PU_EMRFRAMERGN; + +/* Index 73,74 */ +typedef struct { + U_EMR emr; //!< U_EMR + U_RECTL rclBounds; //!< Bounding rectangle in device units + U_CBRGNDATA cbRgnData; //!< Size in bytes of Region data + U_RGNDATA RgnData[1]; //!< Variable size U_RGNDATA structure +} U_EMRINVERTRGN, *PU_EMRINVERTRGN, + U_EMRPAINTRGN, *PU_EMRPAINTRGN; + +/* Index 75 */ +typedef struct { + U_EMR emr; //!< U_EMR + U_CBRGNDATA cbRgnData; //!< Size in bytes of Region data + uint32_t iMode; //!< RegionMode Enumeration + U_RGNDATA RgnData[1]; //!< Variable size U_RGNDATA structure +} U_EMREXTSELECTCLIPRGN, *PU_EMREXTSELECTCLIPRGN; + +/* Index 76 */ +typedef struct { + U_EMR emr; //!< U_EMR + U_RECTL rclBounds; //!< Bounding rectangle in device units + U_POINTL Dest; //!< Destination UL corner in logical units + U_POINTL cDest; //!< Destination width in logical units + uint32_t dwRop; //!< Ternary Raster Operation enumeration + U_POINTL Src; //!< Source retangle UL corner in logical units + U_XFORM xformSrc; //!< Source bitmap transform (world to page coordinates) + U_COLORREF crBkColorSrc; //!< Source bitmap background color + uint32_t iUsageSrc; //!< DIBcolors Enumeration + U_OFFBMISRC offBmiSrc; //!< Offset in bytes to U_BITMAPINFO (within bitmapbuffer) + U_CBBMISRC cbBmiSrc; //!< Size in bytes of U_BITMAPINFO + U_OFFBITSSRC offBitsSrc; //!< Offset in bytes to the bitmap (within bitmapbuffer) + U_CBBITS cbBitsSrc; //!< Size in bytes of bitmap + //!< Record may include optional bitmapbuffer +} U_EMRBITBLT, *PU_EMRBITBLT; + +/* Index 77 */ +typedef struct { + U_EMR emr; //!< U_EMR + U_RECTL rclBounds; //!< Bounding rectangle in device units + U_POINTL Dest; //!< Destination UL corner in logical units + U_POINTL cDest; //!< Destination width in logical units + uint32_t dwRop; //!< Ternary Raster Operation enumeration + U_POINTL Src; //!< Source UL corner in logical units + U_XFORM xformSrc; //!< Transform to apply to source + U_COLORREF crBkColorSrc; //!< Background color + uint32_t iUsageSrc; //!< DIBcolors Enumeration + U_OFFBMISRC offBmiSrc; //!< Offset in bytes to U_BITMAPINFO (within bitmapbuffer) + U_CBBMISRC cbBmiSrc; //!< Size in bytes of U_BITMAPINFO + U_OFFBITSSRC offBitsSrc; //!< Offset in bytes to the bitmap (within bitmapbuffer) + U_CBBITS cbBitsSrc; //!< Size in bytes of bitmap + U_POINTL cSrc; //!< Src W & H in logical units + //!< Record may include optional bitmapbuffer +} U_EMRSTRETCHBLT, *PU_EMRSTRETCHBLT; + +/* Index 78 */ +typedef struct { + U_EMR emr; //!< U_EMR + U_RECTL rclBounds; //!< Bounding rectangle in device units + U_POINTL Dest; //!< Destination UL corner in logical units + U_POINTL cDest; //!< Destination width in logical units + uint32_t dwRop; //!< Ternary Raster Operation enumeration + U_POINTL Src; //!< Source UL corner in logical units + U_XFORM xformSrc; //!< Transform to apply to source + U_COLORREF crBkColorSrc; //!< Background color + uint32_t iUsageSrc; //!< DIBcolors Enumeration + U_OFFBMISRC offBmiSrc; //!< Offset in bytes to U_BITMAPINFO (within srcbitmapbuffer) + U_CBBMISRC cbBmiSrc; //!< Size in bytes of U_BITMAPINFO + U_OFFBITSSRC offBitsSrc; //!< Offset in bytes to the src bitmap (within srcbitmapbuffer) + U_CBBITS cbBitsSrc; //!< Size in bytes of src bitmap + U_POINTL Mask; //!< Mask UL corner in logical units + uint32_t iUsageMask; //!< DIBcolors Enumeration + U_OFFBMIMSK offBmiMask; //!< Offset in bytes to U_BITMAPINFO (within maskbitmapbuffer) + U_CBBMIMSK cbBmiMask; //!< Size in bytes of U_BITMAPINFO + U_OFFBITSMSK offBitsMask; //!< Offset in bytes to the mask bitmap (within maskbitmapbuffer) + U_CBBITSMSK cbBitsMask; //!< Size in bytes of bitmap + //!< Record may include optional Source and mask bitmapbuffers +} U_EMRMASKBLT, *PU_EMRMASKBLT; + +/* Index 79 */ +typedef struct { + U_EMR emr; //!< U_EMR + U_RECTL rclBounds; //!< Bounding rectangle in device units + U_POINTL aptlDst[3]; //!< Defines parallelogram, UL, UR, LL corners, LR is derived. + U_POINTL Src; //!< Source UL corner in logical units + U_POINTL cSrc; //!< Src W & H in logical units + U_XFORM xformSrc; //!< Transform to apply to source + U_COLORREF crBkColorSrc; //!< Background color + uint32_t iUsageSrc; //!< DIBcolors Enumeration + U_OFFBMISRC offBmiSrc; //!< Offset in bytes to U_BITMAPINFO (within srcbitmapbuffer) + U_CBBMISRC cbBmiSrc; //!< Size in bytes of U_BITMAPINFO + U_OFFBITSSRC offBitsSrc; //!< Offset in bytes to the src bitmap (within srcbitmapbuffer) + U_CBBITS cbBitsSrc; //!< Size in bytes of src bitmap + U_POINTL Mask; //!< Mask UL corner in logical units + uint32_t iUsageMask; //!< DIBcolors Enumeration + U_OFFBMIMSK offBmiMask; //!< Offset in bytes to U_BITMAPINFO (within maskbitmapbuffer) + U_CBBMIMSK cbBmiMask; //!< Size in bytes of U_BITMAPINFO + U_OFFBITSMSK offBitsMask; //!< Offset in bytes to the mask bitmap (within maskbitmapbuffer) + U_CBBITSMSK cbBitsMask; //!< Size in bytes of bitmap + //!< Record may include optional Source and mask bitmapbuffers +} U_EMRPLGBLT, *PU_EMRPLGBLT; + +/* Index 80 */ +typedef struct { + U_EMR emr; //!< U_EMR + U_RECTL rclBounds; //!< Bounding rectangle in device units + U_POINTL Dest; //!< Destination UL corner in logical units + U_POINTL Src; //!< Source LL corner in logical units + U_POINTL cSrc; //!< Src W & H in logical units + U_OFFBMISRC offBmiSrc; //!< Offset in bytes to U_BITMAPINFO (within bitmapbuffer) + U_CBBMISRC cbBmiSrc; //!< Size in bytes of U_BITMAPINFO + U_OFFBITSSRC offBitsSrc; //!< Offset in bytes to bitmap + U_CBBITS cbBitsSrc; //!< Size in bytes of bitmap + uint32_t iUsageSrc; //!< DIBColors Enumeration + uint32_t iStartScan; //!< First scan line + uint32_t cScans; //!< Number of scan lines + //!< Record may includes optional bitmapbuffer +} U_EMRSETDIBITSTODEVICE, *PU_EMRSETDIBITSTODEVICE; + +/* Index 81 */ +typedef struct { + U_EMR emr; //!< U_EMR + U_RECTL rclBounds; //!< Bounding rectangle in device units + U_POINTL Dest; //!< Destination UL corner in logical units + U_POINTL Src; //!< Source UL corner in logical units + U_POINTL cSrc; //!< Source W & H in logical units + U_OFFBMISRC offBmiSrc; //!< Offset in bytes to U_BITMAPINFO (within bitmapbuffer) + U_CBBMISRC cbBmiSrc; //!< Size in bytes of U_BITMAPINFO + U_OFFBITSSRC offBitsSrc; //!< Offset in bytes to bitmap + U_CBBITS cbBitsSrc; //!< Size in bytes of bitmap + uint32_t iUsageSrc; //!< DIBColors Enumeration + uint32_t dwRop; //!< Ternary Raster Operation enumeration + U_POINTL cDest; //!< Destination W & H in logical units + //!< Record may includes optional bitmapbuffer +} U_EMRSTRETCHDIBITS, *PU_EMRSTRETCHDIBITS; + +/* Index 82 */ +typedef struct { + U_EMR emr; //!< U_EMR + uint32_t ihFont; //!< Index of the font in the EMF object table + U_LOGFONT_PANOSE elfw; //!< Font parameters, either U_LOGFONT or U_LOGFONT_PANOSE, the latter is bigger so use that type here +} U_EMREXTCREATEFONTINDIRECTW, *PU_EMREXTCREATEFONTINDIRECTW; + +/* Index 83,84 */ +/** +Variable and optional fields may follow core structure in record: + + U_RECTL rcl; absent when fOptions & U_ETO_NO_RECT) grayed/clipping/opaque rectangle + + U_OFFDX offDx; (required) Offset in bytes to the character spacing array from the start of the RECORD + + uint32_t Dx (optional) character spacing array (Required, but position is not static.) +*/ +typedef struct { + U_EMR emr; //!< U_EMR + U_RECTL rclBounds; //!< Bounding rectangle in device units + uint32_t iGraphicsMode; //!< GraphicsMode Enumeration + U_FLOAT exScale; //!< scale to 0.01 mm units ( only if iGraphicsMode & U_GM_COMPATIBLE) + U_FLOAT eyScale; //!< scale to 0.01 mm units ( only if iGraphicsMode & U_GM_COMPATIBLE) + U_EMRTEXT emrtext; //!< Text parameters +// U_RECTL rcl; absent when fOptions & U_ETO_NO_RECT) grayed/clipping/opaque rectangle +// U_OFFDX offDx; (required) but position isn't static. Offset in bytes to the character spacing array from the start of the RECORD +// Record may include optional Dx, character spacing, array of uint32_t +} U_EMREXTTEXTOUTA, *PU_EMREXTTEXTOUTA, + U_EMREXTTEXTOUTW, *PU_EMREXTTEXTOUTW; + +/* Index 85,86,87,88,89 */ +typedef struct { + U_EMR emr; //!< U_EMR + U_RECTL rclBounds; //!< Bounding rectangle in device units + U_NUM_POINT16 cpts; //!< Number of POINT16 in array + U_POINT16 apts[1]; //!< Array of POINT16 +} U_EMRPOLYBEZIER16,*PU_EMRPOLYBEZIER16, + U_EMRPOLYGON16,*PU_EMRPOLYGON16, + U_EMRPOLYLINE16,*PU_EMRPOLYLINE16, + U_EMRPOLYBEZIERTO16,*PU_EMRPOLYBEZIERTO16, + U_EMRPOLYLINETO16,*PU_EMRPOLYLINETO16; + +/* Index 90,91 */ +typedef struct { + U_EMR emr; //!< U_EMR + U_RECTL rclBounds; //!< Bounding rectangle in device units + U_NUM_POLYCOUNTS nPolys; //!< Number of elements in aPolyCounts + U_NUM_POINT16 cpts; //!< Total number of points (over all poly) + U_POLYCOUNTS aPolyCounts[1]; //!< Number of points in each poly (sequential) +// This will appear somewhere but is not really part of the core structure. +// U_POINT16 apts[1]; //!< array of point16 +} U_EMRPOLYPOLYLINE16,*PU_EMRPOLYPOLYLINE16, + U_EMRPOLYPOLYGON16,*PU_EMRPOLYPOLYGON16; + +/* Index 92 */ +typedef struct { + U_EMR emr; //!< U_EMR + U_RECTL rclBounds; //!< Bounding rectangle in device units + U_NUM_POINT16 cpts; //!< Total number of points (over all poly) + U_POINT16 apts[1]; //!< array of points + uint8_t abTypes[1]; //!< Array of Point Enumeration +} U_EMRPOLYDRAW16,*PU_EMRPOLYDRAW16; + +/* Index 93 */ +typedef struct { + U_EMR emr; //!< U_EMR + uint32_t ihBrush; //!< Index to place object in EMF object table (this entry must not yet exist) + uint32_t iUsage; //!< DIBcolors Enumeration + U_OFFBMI offBmi; //!< Offset in bytes to U_BITMAPINFO (within DIBbitmapbuffer) + U_CBBMI cbBmi; //!< Size in bytes of U_BITMAPINFO + U_OFFBITS offBits; //!< Offset in bytes to the DIB bitmap data (within DIBbitmapbuffer + U_CBBITS cbBits; //!< Size in bytes of DIB bitmap + //!< Record may include optional DIB bitmapbuffer +} U_EMRCREATEMONOBRUSH, *PU_EMRCREATEMONOBRUSH; + +/* Index 94 */ +typedef struct { + U_EMR emr; //!< U_EMR + uint32_t ihBrush; //!< Index to place object in EMF object table (this entry must not yet exist) + uint32_t iUsage; //!< DIBcolors Enumeration + U_OFFBMI offBmi; //!< Offset in bytes to U_BITMAPINFO (within DIB bitmapbuffer) + U_CBBMI cbBmi; //!< Size in bytes of U_BITMAPINFO + U_OFFBITS offBits; //!< Offset in bytes to the DIB bitmap data (within DIB bitmapbuffer + U_CBBITS cbBits; //!< Size in bytes of DIB bitmap + //!< Record may include optional DIB bitmapbuffer +} U_EMRCREATEDIBPATTERNBRUSHPT, *PU_EMRCREATEDIBPATTERNBRUSHPT; + +/* Index 95 */ +typedef struct { + U_EMR emr; //!< U_EMR + uint32_t ihPen; //!< Index to place object in EMF object table (this entry must not yet exist) + U_OFFBMI offBmi; //!< Offset in bytes to U_BITMAPINFO (within DIB bitmapbuffer) + U_CBBMI cbBmi; //!< Size in bytes of U_BITMAPINFO + U_OFFBITS offBits; //!< Offset in bytes to the DIB bitmap data (within DIB bitmapbuffer + U_CBBITS cbBits; //!< Size in bytes of DIB bitmap + U_EXTLOGPEN elp; //!< Pen parameters (Size is Variable!!!!) + //!< Record may include optional DIB bitmap +} U_EMREXTCREATEPEN, *PU_EMREXTCREATEPEN; + +/* Index 96.97 */ +typedef struct { + U_EMR emr; //!< U_EMR + U_RECTL rclBounds; //!< Bounding rectangle in device units + uint32_t iGraphicsMode; //!< GraphicsMode Enumeration + U_FLOAT exScale; //!< scale to 0.01 mm units ( only if iGraphicsMode & U_GM_COMPATIBLE) + U_FLOAT eyScale; //!< scale to 0.01 mm units ( only if iGraphicsMode & U_GM_COMPATIBLE) + U_NUM_EMRTEXT cStrings; //!< Number of U_EMRTEXT in array + U_EMRTEXT emrtext[1]; //!< Text parameters +} U_EMRPOLYTEXTOUTA, *PU_EMRPOLYTEXTOUTA, + U_EMRPOLYTEXTOUTW, *PU_EMRPOLYTEXTOUTW; + +/* Index 98 (see 17) */ + +/* Index 99 */ +typedef struct { + U_EMR emr; //!< U_EMR + uint32_t ihCS; //!< Index to place object in EMF object table (this entry must not yet exist) + U_LOGCOLORSPACEA lcs; //!< ColorSpace parameters +} U_EMRCREATECOLORSPACE, *PU_EMRCREATECOLORSPACE; + +/* Index 100,101 */ +typedef struct { + U_EMR emr; //!< U_EMR + uint32_t ihCS; //!< Index of object in EMF object table +} U_EMRDELETECOLORSPACE, *PU_EMRDELETECOLORSPACE, + U_EMRSETCOLORSPACE, *PU_EMRSETCOLORSPACE; + +/* Index 102 */ +typedef struct { + U_EMR emr; //!< U_EMR + U_CBDATA cbData; //!< Size of OpenGL data in bytes + U_DATA Data[1]; //!< OpenGL data +} U_EMRGLSRECORD, *PU_EMRGLSRECORD; + +/* Index 103 */ +typedef struct { + U_EMR emr; //!< U_EMR + U_RECTL rclBounds; //!< Bounding rectangle in device units + U_CBDATA cbData; //!< Size of OpenGL data in bytes + U_DATA Data[1]; //!< OpenGL data +} U_EMRGLSBOUNDEDRECORD, *PU_EMRGLSBOUNDEDRECORD; + +/* Index 104 */ +typedef struct { + U_EMR emr; //!< U_EMR + U_PIXELFORMATDESCRIPTOR pfd; //!< PixelFormatDescriptor +} U_EMRPIXELFORMAT, *PU_EMRPIXELFORMAT; + +/* Index 105 */ +typedef struct { + U_EMR emr; //!< U_EMR + U_CBDATA cjIn; //!< Number of bytes to send to printer driver + U_DATA Data[1]; //!< Data to send +} U_EMRDRAWESCAPE, *PU_EMRDRAWESCAPE; + +/* Index 106 */ +typedef struct { + U_EMR emr; //!< U_EMR + U_CBDATA cjIn; //!< Number of bytes to send to printer driver + U_DATA Data[1]; //!< Data to send +} U_EMREXTESCAPE, *PU_EMREXTESCAPE; + +/* Index 107 (not implemented ) */ + +/* Index 108 */ +typedef struct { + U_EMR emr; //!< U_EMR + U_POINTL Dest; //!< Where to draw the text + U_NUM_STR cChars; //!< Characters in TextString (not null terminated) + uint32_t fuOptions; //!< ExtTextOutOptions Enumeration + uint32_t iGraphicsMode; //!< GraphicsMode Enumeration + U_FLOAT exScale; //!< scale on X axis + U_FLOAT eyScale; //!< scale on Y axis +//!< the tail end of this record is variable. +//!< U_RECTL rclBounds; Record may include optional Bounding rectangle (absent when: fuOPtions & ETO_NO_U_RECT) +//!< uint32_t TextString; text to output (fuOptions & ETO_SMALL_CHARS ? 8 bit : 16 bit) +} U_EMRSMALLTEXTOUT, *PU_EMRSMALLTEXTOUT; + +/* Index 109 (not implemented ) */ + +/* Index 110 */ +typedef struct { + U_EMR emr; //!< U_EMR + U_CBDATA cbDriver; //!< Number of bytes in driver name (note, BYTES, not CHARACTERS) + U_CBDATA cbData; //!< Number of bytes in data + uint16_t Driver[1]; //!< Driver name in uint16_t characters, null terminated + uint8_t Data[1]; //!< Data for printer driver +} U_EMRNAMEDESCAPE, *PU_EMRNAMEDESCAPE; + +/* Index 111-113 (not implemented ) */ + +/* Index 114 */ +typedef struct { + U_EMR emr; //!< U_EMR + U_RECTL rclBounds; //!< Bounding rectangle in device units + U_POINTL Dest; //!< Destination UL corner in logical units + U_POINTL cDest; //!< Destination W & H in logical units + U_BLEND Blend; //!< Blend Function + U_POINTL Src; //!< Source UL corner in logical units + U_XFORM xformSrc; //!< Transform to apply to source + U_COLORREF crBkColorSrc; //!< Background color + uint32_t iUsageSrc; //!< DIBcolors Enumeration + U_OFFBMISRC offBmiSrc; //!< Offset in bytes to U_BITMAPINFO (within bitmapbuffer) + U_CBBMISRC cbBmiSrc; //!< Size in bytes of U_BITMAPINFO + U_OFFBITSSRC offBitsSrc; //!< Offset in bytes to the bitmap (within bitmapbuffer) + U_CBBITS cbBitsSrc; //!< Size in bytes of bitmap + U_POINTL cSrc; //!< Source W & H in logical units + //!< Record may include optional DIB bitmap +} U_EMRALPHABLEND, *PU_EMRALPHABLEND; + +/* Index 115 (see 17) */ + +/* Index 116 */ +typedef struct { + U_EMR emr; //!< U_EMR + U_RECTL rclBounds; //!< Bounding rectangle in device units + U_POINTL Dest; //!< Destination UL corner in logical units + U_POINTL cDest; //!< Destination W & H in logical units + uint32_t TColor; //!< Bitmap color to be treated as transparent + U_POINTL Src; //!< Source UL corner in logical units + U_XFORM xformSrc; //!< Transform to apply to source + U_COLORREF crBkColorSrc; //!< Background color + uint32_t iUsageSrc; //!< DIBcolors Enumeration + U_OFFBMISRC offBmiSrc; //!< Offset in bytes to U_BITMAPINFO (within bitmapbuffer) + U_CBBMISRC cbBmiSrc; //!< Size in bytes of U_BITMAPINFO + U_OFFBITSSRC offBitsSrc; //!< Offset in bytes to the bitmap (within bitmapbuffer) + U_CBBITS cbBitsSrc; //!< Size in bytes of bitmap + U_POINTL cSrc; //!< Source W & H in logical units + //!< Record may includes optional bitmapbuffer +} U_EMRTRANSPARENTBLT, *PU_EMRTRANSPARENTBLT; + +/* Index 117 (not a defined U_EMR record type ) */ + +/* Index 118 */ +typedef struct { + U_EMR emr; //!< U_EMR + U_RECTL rclBounds; //!< Bounding rectangle in device units + U_NUM_TRIVERTEX nTriVert; //!< Number of TriVertex objects + U_NUM_GRADOBJ nGradObj; //!< Number of gradient triangle/rectangle objects + uint32_t ulMode; //!< Gradientfill Enumeration (determines Triangle/Rectangle) +//parts that are required but which are not included in the core structure +// U_TRIVERTEX TriVert[1]; Array of TriVertex objects +// uint32_t GradObj[1]; Array of gradient objects (each has 2 or 3 indices into TriVert array) +} U_EMRGRADIENTFILL, *PU_EMRGRADIENTFILL; + +/* Index 119,120 (not implemented ) */ + +/* Index 121 */ +typedef struct { + U_EMR emr; //!< U_EMR + uint32_t dwAction; //!< ColorSpace Enumeration + uint32_t dwFlags; //!< ColorMatchToTarget Enumeration + U_CBNAME cbName; //!< Number of bytes in in UTF16 name of the color profile + U_CBDATA cbData; //!< Number of bytes of the target profile + uint8_t Data[1]; //!< Data of size cbName+cbData: Name in UTF16 then color profile data +} U_EMRCOLORMATCHTOTARGETW, *PU_EMRCOLORMATCHTOTARGETW; + +/* Index 122 */ +typedef struct { + U_EMR emr; //!< U_EMR + uint32_t ihCS; //!< Index of the logical color space object in the EMF object table + U_LOGCOLORSPACEW lcs; //!< Description of the color profile + uint32_t dwFlags; //!< If low bit set Data is present + U_CBDATA cbData; //!< Number of bytes of theData field. + uint8_t Data[1]; //!< (Optional, dwFlags & 1) color profile data +} U_EMRCREATECOLORSPACEW, *PU_EMRCREATECOLORSPACEW; + +// ************************************************************************************************ +// Utility function structures + +typedef struct { + FILE *fp; //!< Open file + size_t allocated; //!< Size of the buffer + size_t used; //!< Amount consumed + uint32_t records; //!< Number of records already contained + uint16_t ignore; //!< size padding,not used + uint32_t PalEntries; //!< Number of PalEntries (set from U_EMREOF) + uint32_t chunk; //!< Number of bytes to add when more space is needed + char *buf; //!< Buffer for constructing the EMF in memory +} EMFTRACK; + +/** + The various create functions need a place to put their handles, which here are stored in the table below. + We don't actually do anything much with these handles, that is up to whatever program finally plays back the EMF, but + we do need to keep track of the numbers so that they are not accidentally reused. This structure is used for that, + and all *_set functions that touch a handle reference it. + + Stock objects are not used in this limited model, so libUEMF cannot detect if a handle is still in use. Nor can it + tell when a handle has been deselected, but selecting another handle for the same type of graphic object, and thus + made deleteable. End user code must keep track of this for itself. +*/ +typedef struct { + uint32_t *table; //!< Array Buffer for constructing the EMF in memory + uint32_t *stack; //!< handles are either on the stack or in the table + size_t allocated; //!< Slots in the buffer + size_t chunk; //!< Number to add if a realloc is required + uint32_t sptr; //!< Pointer to next available handle in the stack + uint32_t top; //!< Highest slot occupied (currently) + uint32_t peak; //!< Highest slot occupied (ever) +} EMFHANDLES; + +/** + 2 x 2 matrix, used by xform_alt_set() function. +*/ +typedef struct { + double M11; + double M12; + double M21; + double M22; +} U_MAT2X2, *PU_MAT2X2; + +// ************************************************************************************************ +// Prototypes + +int memprobe(void *buf, size_t size); +void wchar8show(const char *src); +void wchar16show(const uint16_t *src); +void wchar32show(const uint32_t *src); +void wchartshow(const wchar_t *src); +void dumpeht(char *string, unsigned int *handle, EMFHANDLES *eht); + + +size_t wchar16len(const uint16_t *src); +size_t wchar32len(const uint32_t *src); +void wchar16strncpy(uint16_t *dst, const uint16_t *src, size_t nchars); +void wchar16strncpypad(uint16_t *dst, const uint16_t *src, size_t nchars); +uint16_t *U_Utf8ToUtf16le(const char *src, size_t max, size_t *len); +uint32_t *U_Utf8ToUtf32le(const char *src, size_t max, size_t *len); +uint32_t *U_Latin1ToUtf32le(const char *src, size_t max, size_t *len); +uint16_t *U_Utf32leToUtf16le(const uint32_t *src, size_t max, size_t *len); +char *U_Utf32leToUtf8(const uint32_t *src, size_t max, size_t *len); +uint32_t *U_Utf16leToUtf32le(const uint16_t *src, size_t max, size_t *len); +char *U_Utf16leToUtf8(const uint16_t *src, size_t max, size_t *len); +uint16_t U_Utf16le(const uint16_t src); +int U_Utf16leEdit(uint16_t *src, uint16_t old, uint16_t sub); +uint32_t *dx_set(int32_t height, uint32_t weight, uint32_t members); +char *U_strdup(const char *s); +uint32_t emr_properties(uint32_t type); +int emr_arc_points(PU_ENHMETARECORD record, int *f1, int f2, PU_PAIRF center, PU_PAIRF start, PU_PAIRF end, PU_PAIRF size); +int RGBA_to_DIB( char **px, uint32_t *cbPx, PU_RGBQUAD *ct, int *numCt, + char *rgba_px, int w, int h, int stride, uint32_t colortype, int use_ct, int invert); +int get_DIB_params( void *pEmr, uint32_t offBitsSrc, uint32_t offBmiSrc, + char **px, PU_RGBQUAD *ct, uint32_t *numCt, + uint32_t *width, uint32_t *height, uint32_t *colortype, uint32_t *invert ); +int DIB_to_RGBA(char *px, PU_RGBQUAD ct, int numCt, + char **rgba_px, int w, int h, uint32_t colortype, int use_ct, int invert); + +int device_size(const int xmm, const int ymm, const float dpmm, U_SIZEL *szlDev, U_SIZEL *szlMm); +int drawing_size(const int xmm, const int yum, const float dpmm, U_RECTL *rclBounds, U_RECTL *rclFrame); + +int emf_start(const char *name, const uint32_t initsize, const uint32_t chunksize, EMFTRACK **et); +int emf_finish(EMFTRACK *et, EMFHANDLES *eht); +int emf_free(EMFTRACK **et); +int emf_append(U_ENHMETARECORD *rec, EMFTRACK *et, int freerec); +int emf_readdata(const char *filename, char **contents, size_t *length); +FILE *emf_fopen(const char *filename, const int mode); + +int htable_create(uint32_t initsize, uint32_t chunksize, EMFHANDLES **eht); +int htable_delete(uint32_t *ih, EMFHANDLES *eht); +int htable_insert(uint32_t *ih, EMFHANDLES *eht); +int htable_free(EMFHANDLES **eht); + +U_RECTL rectl_set(U_POINTL ul, U_POINTL lr); +U_SIZEL sizel_set(int32_t x, int32_t y); +U_POINTL point32_set(int32_t x, int32_t y); +#define point_set point32_set +#define pointl_set point32_set +U_POINT16 point16_set(int16_t x, int16_t y); +U_PANOSE panose_set(uint8_t bFamilyType, uint8_t bSerifStyle, uint8_t bWeight, uint8_t bProportion, + uint8_t bContrast, uint8_t bStrokeVariation, uint8_t bArmStyle, uint8_t bLetterform, + uint8_t bMidline, uint8_t bXHeight ); +U_COLORREF colorref_set(uint8_t red, uint8_t green, uint8_t blue); +U_LOGBRUSH logbrush_set(uint32_t lbStyle, U_COLORREF lbColor, int32_t lbHatch); +U_XFORM xform_set(U_FLOAT eM11, U_FLOAT eM12, U_FLOAT eM21, U_FLOAT eM22, U_FLOAT eDx, U_FLOAT eDy); +U_XFORM xform_alt_set(U_FLOAT scale, U_FLOAT ratio, U_FLOAT rot, U_FLOAT axisrot, U_FLOAT eDx, U_FLOAT eDy); +U_LOGPEN logpen_set( uint32_t lopnStyle, U_POINT lopnWidth, U_COLORREF lopnColor ); +PU_EXTLOGPEN extlogpen_set(uint32_t elpPenStyle, uint32_t elpWidth, uint32_t elpBrushStyle, + U_COLORREF elpColor, int32_t elpHatch, U_NUM_STYLEENTRY elpNumEntries, U_STYLEENTRY *elpStyleEntry ); +U_LOGFONT_PANOSE logfont_panose_set(U_LOGFONT elfLogFont, uint16_t *elfFullName, + uint16_t *elfStyle, uint32_t elfStyleSize, U_PANOSE elfPanose); +U_LOGFONT logfont_set( int32_t lfHeight, int32_t lfWidth, int32_t lfEscapement, int32_t lfOrientation, + int32_t lfWeight, uint8_t lfItalic, uint8_t lfUnderline, uint8_t lfStrikeOut, + uint8_t lfCharSet, uint8_t lfOutPrecision, uint8_t lfClipPrecision, + uint8_t lfQuality, uint8_t lfPitchAndFamily, uint16_t *lfFaceName); +char *emrtext_set(U_POINTL ptlReference, U_NUM_STR NumString, uint32_t cbChar, void *String, uint32_t fOptions, U_RECTL rcl, uint32_t *Dx); +U_LOGPLTNTRY logpltntry_set(uint8_t peReserved,uint8_t peRed,uint8_t peGreen,uint8_t peBlue); +PU_LOGPALETTE logpalette_set(U_NUM_LOGPLTNTRY palNumEntries,PU_LOGPLTNTRY *palPalEntry); +U_RGNDATAHEADER rgndataheader_set( U_NUM_RECTL nCount, U_RECTL rcBound); +PU_RGNDATA rgndata_set( U_RGNDATAHEADER rdh, PU_RECTL Buffer); +U_BITMAPINFOHEADER bitmapinfoheader_set(int32_t biWidth, int32_t biHeight, + uint16_t biPlanes, uint16_t biBitCount, uint32_t biCompression, + uint32_t biSizeImage, int32_t biXPelsPerMeter, + int32_t biYPelsPerMeter, U_NUM_RGBQUAD biClrUsed, uint32_t biClrImportant); +PU_BITMAPINFO bitmapinfo_set(U_BITMAPINFOHEADER BmiHeader, PU_RGBQUAD BmiColors); +U_LOGCOLORSPACEA logcolorspacea_set(int32_t lcsCSType, int32_t lcsIntent, + U_CIEXYZTRIPLE lcsEndpoints, U_LCS_GAMMARGB lcsGammaRGB, char *lcsFilename); +U_LOGCOLORSPACEW logcolorspacew_set(int32_t lcsCSType, int32_t lcsIntent, + U_CIEXYZTRIPLE lcsEndpoints, U_LCS_GAMMARGB lcsGammaRGB, uint16_t *lcsFilename); +U_COLORADJUSTMENT coloradjustment_set(uint16_t Size, uint16_t Flags, uint16_t IlluminantIndex, + uint16_t RedGamma, uint16_t GreenGamma, uint16_t BlueGamma, + uint16_t ReferenceBlack, uint16_t ReferenceWhite, + int16_t Contrast, int16_t Brightness, int16_t Colorfulness, int16_t RedGreenTint); +U_PIXELFORMATDESCRIPTOR pixelformatdescriptor_set( uint32_t dwFlags, uint8_t iPixelType, uint8_t cColorBits, + uint8_t cRedBits, uint8_t cRedShift, + uint8_t cGreenBits, uint8_t cGreenShift, + uint8_t cBlueBits, uint8_t cBlueShift, + uint8_t cAlphaBits, uint8_t cAlphaShift, + uint8_t cAccumBits, uint8_t cAccumRedBits, uint8_t cAccumGreenBits, uint8_t cAccumBlueBits, + uint8_t cAccumAlphaBits, uint8_t cDepthBits, uint8_t cStencilBits, + uint8_t cAuxBuffers, uint8_t iLayerType, uint8_t bReserved, uint32_t dwLayerMask, + uint32_t dwVisibleMask, uint32_t dwDamageMask); + +PU_POINT points_transform(PU_POINT points, int count, U_XFORM xform); +PU_POINT16 point16_transform(PU_POINT16 points, int count, U_XFORM xform); +PU_TRIVERTEX trivertex_transform(PU_TRIVERTEX tv, int count, U_XFORM xform); +PU_POINT point16_to_point(PU_POINT16 points, int count); +PU_POINT16 point_to_point16(PU_POINT points, int count); + +U_RECT findbounds(uint32_t count, PU_POINT pts, uint32_t width); +U_RECT findbounds16(uint32_t count, PU_POINT16 pts, uint32_t width); +char *emr_dup(char *emr); + +char *textcomment_set(char *string); + +// These generate the handle and then call the underlying function +char *deleteobject_set(uint32_t *ihObject, EMFHANDLES *eht); +char *selectobject_set(uint32_t ihObject, EMFHANDLES *eht); +char *createpen_set(uint32_t *ihPen, EMFHANDLES *eht, U_LOGPEN lopn ); +char *extcreatepen_set(uint32_t *ihPen, EMFHANDLES *eht, + PU_BITMAPINFO Bmi, const uint32_t cbPx, char *Px, PU_EXTLOGPEN elp); +char *createbrushindirect_set(uint32_t *ihBrush, EMFHANDLES *eht, U_LOGBRUSH lb ); +char *createdibpatternbrushpt_set(uint32_t *ihBrush, EMFHANDLES *eht, uint32_t iUsage, + PU_BITMAPINFO Bmi, const uint32_t cbPx, const char *Px); +char *createmonobrush_set(uint32_t *ihBrush, EMFHANDLES *eht, uint32_t iUsage, + PU_BITMAPINFO Bmi, const uint32_t cbPx, const char *Px); +char *extcreatefontindirectw_set(uint32_t *ihFont, EMFHANDLES *eht, const char *elf, const char *elfw); +char *createpalette_set(uint32_t *ihPal, EMFHANDLES *eht, U_LOGPALETTE lgpl); +char *setpaletteentries_set(uint32_t *ihPal, EMFHANDLES *eht, uint32_t iStart, U_NUM_LOGPLTNTRY cEntries, PU_LOGPLTNTRY aPalEntries); +char *fillrgn_set(uint32_t *ihBrush, EMFHANDLES *eht, U_RECTL rclBounds,PU_RGNDATA RgnData); +char *framergn_set(uint32_t *ihBrush, EMFHANDLES *eht, U_RECTL rclBounds, U_SIZEL szlStroke, PU_RGNDATA RgnData); +char *createcolorspace_set(uint32_t *ihCS, EMFHANDLES *eht, U_LOGCOLORSPACEA lcs); +char *createcolorspacew_set(uint32_t *ihCS, EMFHANDLES *eht, U_LOGCOLORSPACEW lcs, uint32_t dwFlags, U_CBDATA cbData, uint8_t *Data); + +char *U_EMRHEADER_set( const U_RECTL rclBounds, const U_RECTL rclFrame, U_PIXELFORMATDESCRIPTOR* const pfmtDesc, + U_CBSTR nDesc, uint16_t* const Description, const U_SIZEL szlDevice, const U_SIZEL szlMillimeters, + const uint32_t bOpenGL); +char *U_EMRPOLYBEZIER_set( const U_RECTL rclBounds, const uint32_t count, const U_POINTL *points); +char *U_EMRPOLYGON_set( const U_RECTL rclBounds, const uint32_t count, const U_POINTL *points); +char *U_EMRPOLYLINE_set( const U_RECTL rclBounds, const uint32_t count, const U_POINTL *points); +char *U_EMRPOLYBEZIERTO_set(const U_RECTL rclBounds, const uint32_t count, const U_POINTL *points); +char *U_EMRPOLYLINETO_set( const U_RECTL rclBounds, const uint32_t count, const U_POINTL *points); + +char *U_EMRPOLYPOLYLINE_set(const U_RECTL rclBounds, const uint32_t nPolys, const uint32_t *aPolyCounts, + const uint32_t cptl, const U_POINTL *points); +char *U_EMRPOLYPOLYGON_set(const U_RECTL rclBounds, const uint32_t nPolys, const uint32_t *aPolyCounts, + const uint32_t cptl, const U_POINTL *points); +char *U_EMRSETWINDOWEXTEX_set(const U_SIZEL szlExtent); +char *U_EMRSETWINDOWORGEX_set(const U_POINTL ptlOrigin); +char *U_EMRSETVIEWPORTEXTEX_set(const U_SIZEL szlExtent); +char *U_EMRSETVIEWPORTORGEX_set(const U_POINTL ptlOrigin); +char *U_EMRSETBRUSHORGEX_set(const U_POINTL ptlOrigin); +char *U_EMREOF_set(const U_CBPLENTRIES cbPalEntries, const PU_LOGPLTNTRY PalEntries, EMFTRACK *et); +char *U_EMRSETPIXELV_set(const U_POINTL ptlPixel, const U_COLORREF crColor); +char *U_EMRSETMAPPERFLAGS_set(void); +char *U_EMRSETMAPMODE_set(const uint32_t iMode); +char *U_EMRSETBKMODE_set(const uint32_t iMode); +char *U_EMRSETPOLYFILLMODE_set(const uint32_t iMode); +char *U_EMRSETROP2_set(const uint32_t iMode); +char *U_EMRSETSTRETCHBLTMODE_set(const uint32_t iMode); +char *U_EMRSETTEXTALIGN_set(const uint32_t iMode); +char *U_EMRSETCOLORADJUSTMENT_set(const U_COLORADJUSTMENT ColorAdjustment); +char *U_EMRSETTEXTCOLOR_set(const U_COLORREF crColor); +char *U_EMRSETBKCOLOR_set(const U_COLORREF crColor); +char *U_EMROFFSETCLIPRGN_set(const U_POINTL ptl); +char *U_EMRMOVETOEX_set(const U_POINTL ptl); +char *U_EMRSETMETARGN_set(void); +char *U_EMREXCLUDECLIPRECT_set(const U_RECTL rclClip); +char *U_EMRINTERSECTCLIPRECT_set(const U_RECTL rclClip); +char *U_EMRSCALEVIEWPORTEXTEX_set(const int32_t xNum, const int32_t xDenom, const int32_t yNum, const int32_t yDenom); +char *U_EMRSCALEWINDOWEXTEX_set(const int32_t xNum, const int32_t xDenom, const int32_t yNum, const int32_t yDenom); +char *U_EMRSAVEDC_set(void); +char *U_EMRRESTOREDC_set(const int32_t iRelative); +char *U_EMRSETWORLDTRANSFORM_set(const U_XFORM xform); +char *U_EMRMODIFYWORLDTRANSFORM_set(const U_XFORM xform, const uint32_t iMode); +char *U_EMRSELECTOBJECT_set(const uint32_t ihObject); // better to call selectobject_set() +char *U_EMRCREATEPEN_set(const uint32_t ihPen, const U_LOGPEN lopn ); +char *U_EMRCREATEBRUSHINDIRECT_set(const uint32_t ihBrush, const U_LOGBRUSH lb); +char *U_EMRDELETEOBJECT_set(const uint32_t ihObject); // better to call deleteobject_set() +char *U_EMRANGLEARC_set(const U_POINTL ptlCenter, const uint32_t nRadius, const U_FLOAT eStartAngle, const U_FLOAT eSweepAngle); +char *U_EMRELLIPSE_set(const U_RECTL rclBox); +char *U_EMRRECTANGLE_set(const U_RECTL rclBox); +char *U_EMRROUNDRECT_set(const U_RECTL rclBox, const U_SIZEL szlCorner); +char *U_EMRARC_set(const U_RECTL rclBox, const U_POINTL ptlStart, const U_POINTL ptlEnd); +char *U_EMRCHORD_set(const U_RECTL rclBox, const U_POINTL ptlStart, const U_POINTL ptlEnd); +char *U_EMRPIE_set(const U_RECTL rclBox, const U_POINTL ptlStart, const U_POINTL ptlEnd); +char *U_EMRSELECTPALETTE_set(const uint32_t ihPal); +char *U_EMRCREATEPALETTE_set(const uint32_t ihPal, const U_LOGPALETTE lgpl); +char *U_EMRSETPALETTEENTRIES_set(const uint32_t ihPal, const uint32_t iStart, const U_NUM_LOGPLTNTRY cEntries, const PU_LOGPLTNTRY aPalEntries); +char *U_EMRRESIZEPALETTE_set(const uint32_t ihPal, const uint32_t cEntries); +char *U_EMRREALIZEPALETTE_set(void); +char *U_EMREXTFLOODFILL_set(const U_POINTL ptlStart, const U_COLORREF crColor, const uint32_t iMode); +char *U_EMRLINETO_set(const U_POINTL ptl); +char *U_EMRARCTO_set(const U_RECTL rclBox, const U_POINTL ptlStart, const U_POINTL ptlEnd); +char *U_EMRPOLYDRAW_set(const U_RECTL rclBounds,const U_NUM_POINTL cptl,const U_POINTL *aptl,const uint8_t *abTypes); +char *U_EMRSETARCDIRECTION_set(const uint32_t iArcDirection); +char *U_EMRSETMITERLIMIT_set(const uint32_t eMiterLimit); +char *U_EMRBEGINPATH_set(void); +char *U_EMRENDPATH_set(void); +char *U_EMRCLOSEFIGURE_set(void); +char *U_EMRFILLPATH_set(const U_RECTL rclBox); +char *U_EMRSTROKEANDFILLPATH_set(const U_RECTL rclBox); +char *U_EMRSTROKEPATH_set(const U_RECTL rclBox); +char *U_EMRFLATTENPATH_set(void); +char *U_EMRWIDENPATH_set(void); +char *U_EMRSELECTCLIPPATH_set(const uint32_t iMode); +char *U_EMRABORTPATH_set(void); +// EMR_ENDEF69 +char *U_EMRCOMMENT_set(const U_CBDATA cbData, const char *Data); +char *U_EMRFILLRGN_set(const U_RECTL rclBounds, const uint32_t ihBrush, const PU_RGNDATA RgnData); +char *U_EMRFRAMERGN_set(const U_RECTL rclBounds, const uint32_t ihBrush, const U_SIZEL szlStroke, const PU_RGNDATA RgnData); +char *U_EMRINVERTRGN_set(const PU_RGNDATA RgnData); +char *U_EMRPAINTRGN_set(const PU_RGNDATA RgnData); +char *U_EMREXTSELECTCLIPRGN_set(const uint32_t iMode, const PU_RGNDATA RgnData); +char *U_EMRBITBLT_set(const U_RECTL rclBounds, const U_POINTL Dest, const U_POINTL cDest, + const U_POINTL Src, const U_XFORM xformSrc, const U_COLORREF crBkColorSrc, + const uint32_t iUsageSrc, const uint32_t dwRop, + const PU_BITMAPINFO Bmi, const uint32_t cbPx, char *Px); +char *U_EMRSTRETCHBLT_set(U_RECTL rclBounds, U_POINTL Dest, U_POINTL cDest, + const U_POINTL Src, const U_POINTL cSrc, const U_XFORM xformSrc, const U_COLORREF crBkColorSrc, const uint32_t iUsageSrc, + const uint32_t dwRop, + const PU_BITMAPINFO Bmi, const uint32_t cbPx, char *Px); +char *U_EMRMASKBLT_set(U_RECTL rclBounds, U_POINTL Dest, U_POINTL cDest, + const U_POINTL Src, const U_XFORM xformSrc, const U_COLORREF crBkColorSrc, const uint32_t iUsageSrc, + const U_POINTL Mask, const uint32_t iUsageMask, + const uint32_t dwRop, + const PU_BITMAPINFO Bmi, const uint32_t cbPx, char *Px, + const PU_BITMAPINFO BmiMsk, const uint32_t cbMsk, char *Msk); +char *U_EMRPLGBLT_set(const U_RECTL rclBounds, const PU_POINTL aptlDst, + const U_POINTL Src, const U_POINTL cSrc, const U_XFORM xformSrc, const U_COLORREF crBkColorSrc, const uint32_t iUsageSrc, + const U_POINTL Mask, const uint32_t iUsageMask, + const PU_BITMAPINFO Bmi, const uint32_t cbPx, char *Px, + const PU_BITMAPINFO BmiMsk, const uint32_t cbMsk, char *Msk); +char *U_EMRSETDIBITSTODEVICE_set(const U_RECTL rclBounds, const U_POINTL Dest, + const U_POINTL Src, const U_POINTL cSrc, const uint32_t iUsageSrc, + const uint32_t iStartScan, const uint32_t cScans, + const PU_BITMAPINFO Bmi, const uint32_t cbPx, char *Px); +char *U_EMRSTRETCHDIBITS_set(const U_RECTL rclBounds, const U_POINTL Dest, const U_POINTL cDest, + const U_POINTL Src, const U_POINTL cSrc, const uint32_t iUsageSrc, + const uint32_t dwRop, + const PU_BITMAPINFO Bmi, const uint32_t cbPx, char *Px); +char *U_EMREXTCREATEFONTINDIRECTW_set( uint32_t ihFont, const char *elf, const char *elfw); +char *U_EMREXTTEXTOUTA_set(U_RECTL rclBounds, uint32_t iGraphicsMode, U_FLOAT exScale, U_FLOAT eyScale, PU_EMRTEXT emrtext); +char *U_EMREXTTEXTOUTW_set(U_RECTL rclBounds, uint32_t iGraphicsMode, U_FLOAT exScale, U_FLOAT eyScale, PU_EMRTEXT emrtext); +char *U_EMRPOLYBEZIER16_set(const U_RECTL rclBounds, const uint32_t cpts, const U_POINT16 *points); +char *U_EMRPOLYGON16_set(const U_RECTL rclBounds, const uint32_t cpts, const U_POINT16 *points); +char *U_EMRPOLYLINE16_set(const U_RECTL rclBounds, const uint32_t cpts, const U_POINT16 *points); +char *U_EMRPOLYBEZIERTO16_set(const U_RECTL rclBounds, const uint32_t cpts, const U_POINT16 *points); +char *U_EMRPOLYLINETO16_set(const U_RECTL rclBounds, const uint32_t cpts, const U_POINT16 *points); +char *U_EMRPOLYPOLYLINE16_set(const U_RECTL rclBounds, const uint32_t nPolys, const uint32_t *aPolyCounts,const uint32_t cpts, const U_POINT16 *points); +char *U_EMRPOLYPOLYGON16_set(const U_RECTL rclBounds, const uint32_t nPolys, const uint32_t *aPolyCounts,const uint32_t cpts, const U_POINT16 *points); +char *U_EMRPOLYDRAW16_set(const U_RECTL rclBounds,const U_NUM_POINT16 cpts, const U_POINT16 *aptl, const uint8_t *abTypes); +char *U_EMRCREATEMONOBRUSH_set(const uint32_t ihBrush, const uint32_t iUsage, + const PU_BITMAPINFO Bmi, const uint32_t cbPx, const char *Px); +char *U_EMRCREATEDIBPATTERNBRUSHPT_set(const uint32_t ihBrush, const uint32_t iUsage, + const PU_BITMAPINFO Bmi, const uint32_t cbPx, const char *Px); +char *U_EMREXTCREATEPEN_set(const uint32_t ihPen, const PU_BITMAPINFO Bmi, const uint32_t cbPx, char *Px, const PU_EXTLOGPEN elp ); +// U_EMRPOLYTEXTOUTA_set 96 NOT IMPLEMENTED, denigrated after Windows NT +// U_EMRPOLYTEXTOUTW_set 97 NOT IMPLEMENTED, denigrated after Windows NT +char *U_EMRSETICMMODE_set(const uint32_t iMode); +char *U_EMRCREATECOLORSPACE_set(const uint32_t ihCS, const U_LOGCOLORSPACEA lcs); +char *U_EMRSETCOLORSPACE_set(const uint32_t ihCS ); +char *U_EMRDELETECOLORSPACE_set(const uint32_t ihCS); +// U_EMRGLSRECORD_set 102 Not implemented +// U_EMRGLSBOUNDEDRECORD_set 103 Not implemented +char *U_EMRPIXELFORMAT_set(const U_PIXELFORMATDESCRIPTOR pfd); +char *U_EMRSMALLTEXTOUT_set(const U_POINTL Dest, const U_NUM_STR cChars, const uint32_t fuOptions, const uint32_t iGraphicsMode, + const U_FLOAT exScale, const U_FLOAT eyScale, const U_RECTL rclBounds, const char *TextString); +// U_EMRDRAWESCAPE_set 105 Not implemented +// U_EMREXTESCAPE_set 106 Not implemented +// U_EMRUNDEF107_set 107 Not implemented +// U_EMRSMALLTEXTOUT_set 108 +// U_EMRFORCEUFIMAPPING_set 109 Not implemented +// U_EMRNAMEDESCAPE_set 110 Not implemented +// U_EMRCOLORCORRECTPALETTE_set 111 Not implemented +// U_EMRSETICMPROFILEA_set 112 Not implemented +// U_EMRSETICMPROFILEW_set 113 Not implemented +char *U_EMRALPHABLEND_set(const U_RECTL rclBounds, const U_POINTL Dest, const U_POINTL cDest, + const U_POINTL Src, const U_POINTL cSrc, const U_XFORM xformSrc, + const U_COLORREF crBkColorSrc, const uint32_t iUsageSrc, + const U_BLEND Blend, + const PU_BITMAPINFO Bmi, const uint32_t cbPx, char *Px); +char *U_EMRSETLAYOUT_set(const uint32_t iMode); +char *U_EMRTRANSPARENTBLT_set(const U_RECTL rclBounds, const U_POINTL Dest, const U_POINTL cDest, + const U_POINTL Src, const U_POINTL cSrc, const U_XFORM xformSrc, + const U_COLORREF crBkColorSrc, const uint32_t iUsageSrc, const uint32_t TColor, + const PU_BITMAPINFO Bmi, const uint32_t cbPx, char *Px); +// U_EMRUNDEF117_set 117 Not implemented +char *U_EMRGRADIENTFILL_set(const U_RECTL rclBounds, const U_NUM_TRIVERTEX nTriVert, const U_NUM_GRADOBJ nGradObj, + const uint32_t ulMode, const PU_TRIVERTEX TriVert, const uint32_t *GradObj ); +// U_EMRSETLINKEDUFIS_set 119 Not implemented +// U_EMRSETTEXTJUSTIFICATION_set 120 Not implemented (denigrated) +// U_EMRCOLORMATCHTOTARGETW_set 121 Not implemented +char *U_EMRCREATECOLORSPACEW_set(const uint32_t ihCS, const U_LOGCOLORSPACEW lcs, const uint32_t dwFlags, + const U_CBDATA cbData, const uint8_t *Data); + +#ifdef __cplusplus +} +#endif + +#endif /* _UEMF_ */ |
