Add a .gitattributes with "* text=auto" so that new lines are
[pdfium.git] / core / src / fxge / Microsoft SDK / include / GdiPlusEnums.h
1 /**************************************************************************\
2 *
3 * Copyright (c) 1998-2000, Microsoft Corp.  All Rights Reserved.
4 *
5 * Module Name:
6 *
7 *   GdiplusEnums.h
8 *
9 * Abstract:
10 *
11 *   Various enumeration types
12 *
13 \**************************************************************************/
14
15 #ifndef _GDIPLUSENUMS_H
16 #define _GDIPLUSENUMS_H
17
18
19 //--------------------------------------------------------------------------
20 // Default bezier flattening tolerance in device pixels.
21 //--------------------------------------------------------------------------
22
23 const float FlatnessDefault = 1.0f/4.0f;
24
25 //--------------------------------------------------------------------------
26 // Graphics and Container State cookies
27 //--------------------------------------------------------------------------
28
29 typedef UINT     GraphicsState;
30 typedef UINT     GraphicsContainer;
31
32 //--------------------------------------------------------------------------
33 // Fill mode constants
34 //--------------------------------------------------------------------------
35
36 enum FillMode
37 {
38     FillModeAlternate,        // 0
39     FillModeWinding           // 1
40 };
41
42 //--------------------------------------------------------------------------
43 // Quality mode constants
44 //--------------------------------------------------------------------------
45
46 enum QualityMode
47 {
48     QualityModeInvalid   = -1,
49     QualityModeDefault   = 0,
50     QualityModeLow       = 1, // for apps that need the best performance
51     QualityModeHigh      = 2  // for apps that need the best rendering quality
52 };
53
54 //--------------------------------------------------------------------------
55 // Alpha compositing mode constants
56 //--------------------------------------------------------------------------
57
58 enum CompositingMode
59 {
60     CompositingModeSourceOver,    // 0
61     CompositingModeSourceCopy     // 1
62 };
63
64 //--------------------------------------------------------------------------
65 // Alpha compositing quality constants
66 //--------------------------------------------------------------------------
67
68 enum CompositingQuality
69 {
70     CompositingQualityInvalid          = QualityModeInvalid,
71     CompositingQualityDefault          = QualityModeDefault,
72     CompositingQualityHighSpeed        = QualityModeLow,
73     CompositingQualityHighQuality      = QualityModeHigh,
74     CompositingQualityGammaCorrected,
75     CompositingQualityAssumeLinear
76 };
77
78 //--------------------------------------------------------------------------
79 // Unit constants
80 //--------------------------------------------------------------------------
81
82 enum Unit
83 {
84     UnitWorld,      // 0 -- World coordinate (non-physical unit)
85     UnitDisplay,    // 1 -- Variable -- for PageTransform only
86     UnitPixel,      // 2 -- Each unit is one device pixel.
87     UnitPoint,      // 3 -- Each unit is a printer's point, or 1/72 inch.
88     UnitInch,       // 4 -- Each unit is 1 inch.
89     UnitDocument,   // 5 -- Each unit is 1/300 inch.
90     UnitMillimeter  // 6 -- Each unit is 1 millimeter.
91 };
92
93 //--------------------------------------------------------------------------
94 // MetafileFrameUnit
95 //
96 // The frameRect for creating a metafile can be specified in any of these
97 // units.  There is an extra frame unit value (MetafileFrameUnitGdi) so
98 // that units can be supplied in the same units that GDI expects for
99 // frame rects -- these units are in .01 (1/100ths) millimeter units
100 // as defined by GDI.
101 //--------------------------------------------------------------------------
102 enum MetafileFrameUnit
103 {
104     MetafileFrameUnitPixel      = UnitPixel,
105     MetafileFrameUnitPoint      = UnitPoint,
106     MetafileFrameUnitInch       = UnitInch,
107     MetafileFrameUnitDocument   = UnitDocument,
108     MetafileFrameUnitMillimeter = UnitMillimeter,
109     MetafileFrameUnitGdi                        // GDI compatible .01 MM units
110 };
111
112 //--------------------------------------------------------------------------
113 // Coordinate space identifiers
114 //--------------------------------------------------------------------------
115
116 enum CoordinateSpace
117 {
118     CoordinateSpaceWorld,     // 0
119     CoordinateSpacePage,      // 1
120     CoordinateSpaceDevice     // 2
121 };
122
123 //--------------------------------------------------------------------------
124 // Various wrap modes for brushes
125 //--------------------------------------------------------------------------
126
127 enum WrapMode
128 {
129     WrapModeTile,        // 0
130     WrapModeTileFlipX,   // 1
131     WrapModeTileFlipY,   // 2
132     WrapModeTileFlipXY,  // 3
133     WrapModeClamp        // 4
134 };
135
136 //--------------------------------------------------------------------------
137 // Various hatch styles
138 //--------------------------------------------------------------------------
139
140 enum HatchStyle
141 {
142     HatchStyleHorizontal,                   // 0
143     HatchStyleVertical,                     // 1
144     HatchStyleForwardDiagonal,              // 2
145     HatchStyleBackwardDiagonal,             // 3
146     HatchStyleCross,                        // 4
147     HatchStyleDiagonalCross,                // 5
148     HatchStyle05Percent,                    // 6
149     HatchStyle10Percent,                    // 7
150     HatchStyle20Percent,                    // 8
151     HatchStyle25Percent,                    // 9
152     HatchStyle30Percent,                    // 10
153     HatchStyle40Percent,                    // 11
154     HatchStyle50Percent,                    // 12
155     HatchStyle60Percent,                    // 13
156     HatchStyle70Percent,                    // 14
157     HatchStyle75Percent,                    // 15
158     HatchStyle80Percent,                    // 16
159     HatchStyle90Percent,                    // 17
160     HatchStyleLightDownwardDiagonal,        // 18
161     HatchStyleLightUpwardDiagonal,          // 19
162     HatchStyleDarkDownwardDiagonal,         // 20
163     HatchStyleDarkUpwardDiagonal,           // 21
164     HatchStyleWideDownwardDiagonal,         // 22
165     HatchStyleWideUpwardDiagonal,           // 23
166     HatchStyleLightVertical,                // 24
167     HatchStyleLightHorizontal,              // 25
168     HatchStyleNarrowVertical,               // 26
169     HatchStyleNarrowHorizontal,             // 27
170     HatchStyleDarkVertical,                 // 28
171     HatchStyleDarkHorizontal,               // 29
172     HatchStyleDashedDownwardDiagonal,       // 30
173     HatchStyleDashedUpwardDiagonal,         // 31
174     HatchStyleDashedHorizontal,             // 32
175     HatchStyleDashedVertical,               // 33
176     HatchStyleSmallConfetti,                // 34
177     HatchStyleLargeConfetti,                // 35
178     HatchStyleZigZag,                       // 36
179     HatchStyleWave,                         // 37
180     HatchStyleDiagonalBrick,                // 38
181     HatchStyleHorizontalBrick,              // 39
182     HatchStyleWeave,                        // 40
183     HatchStylePlaid,                        // 41
184     HatchStyleDivot,                        // 42
185     HatchStyleDottedGrid,                   // 43
186     HatchStyleDottedDiamond,                // 44
187     HatchStyleShingle,                      // 45
188     HatchStyleTrellis,                      // 46
189     HatchStyleSphere,                       // 47
190     HatchStyleSmallGrid,                    // 48
191     HatchStyleSmallCheckerBoard,            // 49
192     HatchStyleLargeCheckerBoard,            // 50
193     HatchStyleOutlinedDiamond,              // 51
194     HatchStyleSolidDiamond,                 // 52
195
196     HatchStyleTotal,    // must be after all unique hatch styles
197
198     HatchStyleLargeGrid = HatchStyleCross,  // 4  an alias for the cross style
199
200     HatchStyleMin       = HatchStyleHorizontal,
201     HatchStyleMax       = HatchStyleTotal - 1,
202 };
203
204 //--------------------------------------------------------------------------
205 // Dash style constants
206 //--------------------------------------------------------------------------
207
208 enum DashStyle
209 {
210     DashStyleSolid,          // 0
211     DashStyleDash,           // 1
212     DashStyleDot,            // 2
213     DashStyleDashDot,        // 3
214     DashStyleDashDotDot,     // 4
215     DashStyleCustom          // 5
216 };
217
218 //--------------------------------------------------------------------------
219 // Dash cap constants
220 //--------------------------------------------------------------------------
221
222 enum DashCap
223 {
224     DashCapFlat             = 0,
225     DashCapRound            = 2,
226     DashCapTriangle         = 3
227 };
228
229 //--------------------------------------------------------------------------
230 // Line cap constants (only the lowest 8 bits are used).
231 //--------------------------------------------------------------------------
232
233 enum LineCap
234 {
235     LineCapFlat             = 0,
236     LineCapSquare           = 1,
237     LineCapRound            = 2,
238     LineCapTriangle         = 3,
239
240     LineCapNoAnchor         = 0x10, // corresponds to flat cap
241     LineCapSquareAnchor     = 0x11, // corresponds to square cap
242     LineCapRoundAnchor      = 0x12, // corresponds to round cap
243     LineCapDiamondAnchor    = 0x13, // corresponds to triangle cap
244     LineCapArrowAnchor      = 0x14, // no correspondence
245
246     LineCapCustom           = 0xff, // custom cap
247
248     LineCapAnchorMask       = 0xf0  // mask to check for anchor or not.
249 };
250
251 //--------------------------------------------------------------------------
252 // Custom Line cap type constants
253 //--------------------------------------------------------------------------
254
255 enum CustomLineCapType
256 {
257     CustomLineCapTypeDefault         = 0,
258     CustomLineCapTypeAdjustableArrow = 1
259 };
260
261 //--------------------------------------------------------------------------
262 // Line join constants
263 //--------------------------------------------------------------------------
264
265 enum LineJoin
266 {
267     LineJoinMiter        = 0,
268     LineJoinBevel        = 1,
269     LineJoinRound        = 2,
270     LineJoinMiterClipped = 3
271 };
272
273 //--------------------------------------------------------------------------
274 // Path point types (only the lowest 8 bits are used.)
275 //  The lowest 3 bits are interpreted as point type
276 //  The higher 5 bits are reserved for flags.
277 //--------------------------------------------------------------------------
278
279 enum PathPointType
280 {
281     PathPointTypeStart           = 0,    // move
282     PathPointTypeLine            = 1,    // line
283     PathPointTypeBezier          = 3,    // default Beizer (= cubic Bezier)
284     PathPointTypePathTypeMask    = 0x07, // type mask (lowest 3 bits).
285     PathPointTypeDashMode        = 0x10, // currently in dash mode.
286     PathPointTypePathMarker      = 0x20, // a marker for the path.
287     PathPointTypeCloseSubpath    = 0x80, // closed flag
288
289     // Path types used for advanced path.
290
291     PathPointTypeBezier2    = 2,    // quadratic Beizer
292     PathPointTypeBezier3    = 3,    // cubic Bezier
293     PathPointTypeBezier4    = 4,    // quartic (4th order) Beizer
294     PathPointTypeBezier5    = 5,    // quintic (5th order) Bezier
295     PathPointTypeBezier6    = 6     // hexaic (6th order) Bezier
296 };
297
298
299 //--------------------------------------------------------------------------
300 // WarpMode constants
301 //--------------------------------------------------------------------------
302
303 enum WarpMode
304 {
305     WarpModePerspective,    // 0
306     WarpModeBilinear        // 1
307 };
308
309 //--------------------------------------------------------------------------
310 // LineGradient Mode
311 //--------------------------------------------------------------------------
312
313 enum LinearGradientMode
314 {
315     LinearGradientModeHorizontal,         // 0
316     LinearGradientModeVertical,           // 1
317     LinearGradientModeForwardDiagonal,    // 2
318     LinearGradientModeBackwardDiagonal    // 3
319 };
320
321 //--------------------------------------------------------------------------
322 // Region Comine Modes
323 //--------------------------------------------------------------------------
324
325 enum CombineMode
326 {
327     CombineModeReplace,     // 0
328     CombineModeIntersect,   // 1
329     CombineModeUnion,       // 2
330     CombineModeXor,         // 3
331     CombineModeExclude,     // 4
332     CombineModeComplement   // 5 (does exclude from)
333 };
334
335 //--------------------------------------------------------------------------
336  // Image types
337 //--------------------------------------------------------------------------
338
339 enum ImageType
340 {
341     ImageTypeUnknown,   // 0
342     ImageTypeBitmap,    // 1
343     ImageTypeMetafile   // 2
344 };
345
346 //--------------------------------------------------------------------------
347 // Interpolation modes
348 //--------------------------------------------------------------------------
349
350 enum InterpolationMode
351 {
352     InterpolationModeInvalid          = QualityModeInvalid,
353     InterpolationModeDefault          = QualityModeDefault,
354     InterpolationModeLowQuality       = QualityModeLow,
355     InterpolationModeHighQuality      = QualityModeHigh,
356     InterpolationModeBilinear,
357     InterpolationModeBicubic,
358     InterpolationModeNearestNeighbor,
359     InterpolationModeHighQualityBilinear,
360     InterpolationModeHighQualityBicubic
361 };
362
363 //--------------------------------------------------------------------------
364 // Pen types
365 //--------------------------------------------------------------------------
366 enum PenAlignment
367 {
368     PenAlignmentCenter       = 0,
369     PenAlignmentInset        = 1,
370     PenAlignmentOutset       = 2,
371     PenAlignmentLeft         = 3,
372     PenAlignmentRight        = 4
373 };
374
375 //--------------------------------------------------------------------------
376 // Brush types
377 //--------------------------------------------------------------------------
378
379 enum BrushType
380 {
381    BrushTypeSolidColor       = 0,
382    BrushTypeHatchFill        = 1,
383    BrushTypeTextureFill      = 2,
384    BrushTypePathGradient     = 3,
385    BrushTypeLinearGradient   = 4
386 };
387
388 //--------------------------------------------------------------------------
389 // Pen's Fill types
390 //--------------------------------------------------------------------------
391
392 enum PenType
393 {
394    PenTypeSolidColor       = BrushTypeSolidColor,
395    PenTypeHatchFill        = BrushTypeHatchFill,
396    PenTypeTextureFill      = BrushTypeTextureFill,
397    PenTypePathGradient     = BrushTypePathGradient,
398    PenTypeLinearGradient   = BrushTypeLinearGradient,
399    PenTypeUnknown          = -1
400 };
401
402 //--------------------------------------------------------------------------
403 // Matrix Order
404 //--------------------------------------------------------------------------
405
406 enum MatrixOrder
407 {
408     MatrixOrderPrepend    = 0,
409     MatrixOrderAppend     = 1
410 };
411
412 //--------------------------------------------------------------------------
413 // Generic font families
414 //--------------------------------------------------------------------------
415
416 enum GenericFontFamily
417 {
418     GenericFontFamilySerif,
419     GenericFontFamilySansSerif,
420     GenericFontFamilyMonospace
421
422 };
423
424 //--------------------------------------------------------------------------
425 // FontStyle: face types and common styles
426 //--------------------------------------------------------------------------
427
428 //  These should probably be flags
429
430 //  Must have:
431 //      Regular = 0
432 //      Bold = 1
433 //      Italic = 2
434 //      BoldItalic = 3
435
436 enum FontStyle
437 {
438     FontStyleRegular    = 0,
439     FontStyleBold       = 1,
440     FontStyleItalic     = 2,
441     FontStyleBoldItalic = 3,
442     FontStyleUnderline  = 4,
443     FontStyleStrikeout  = 8
444 };
445
446 //---------------------------------------------------------------------------
447 // Smoothing Mode
448 //---------------------------------------------------------------------------
449
450 enum SmoothingMode
451 {
452     SmoothingModeInvalid     = QualityModeInvalid,
453     SmoothingModeDefault     = QualityModeDefault,
454     SmoothingModeHighSpeed   = QualityModeLow,
455     SmoothingModeHighQuality = QualityModeHigh,
456     SmoothingModeNone,
457     SmoothingModeAntiAlias
458 };
459
460 //---------------------------------------------------------------------------
461 // Pixel Format Mode
462 //---------------------------------------------------------------------------
463
464 enum PixelOffsetMode
465 {
466     PixelOffsetModeInvalid     = QualityModeInvalid,
467     PixelOffsetModeDefault     = QualityModeDefault,
468     PixelOffsetModeHighSpeed   = QualityModeLow,
469     PixelOffsetModeHighQuality = QualityModeHigh,
470     PixelOffsetModeNone,    // no pixel offset
471     PixelOffsetModeHalf     // offset by -0.5, -0.5 for fast anti-alias perf
472 };
473
474 //---------------------------------------------------------------------------
475 // Text Rendering Hint
476 //---------------------------------------------------------------------------
477
478 enum TextRenderingHint
479 {
480 #ifdef DCR_USE_NEW_186764
481     TextRenderingHintSystemDefault = 0,            // Glyph with system default rendering hint
482     TextRenderingHintSingleBitPerPixelGridFit,     // Glyph bitmap with hinting
483 #else
484     TextRenderingHintSingleBitPerPixelGridFit = 0, // Glyph bitmap with hinting
485 #endif // DCR_USE_NEW_186764
486     TextRenderingHintSingleBitPerPixel,            // Glyph bitmap without hinting
487     TextRenderingHintAntiAliasGridFit,             // Glyph anti-alias bitmap with hinting
488     TextRenderingHintAntiAlias,                    // Glyph anti-alias bitmap without hinting
489     TextRenderingHintClearTypeGridFit              // Glyph CT bitmap with hinting
490 };
491
492 //---------------------------------------------------------------------------
493 // Metafile Types
494 //---------------------------------------------------------------------------
495 enum MetafileType
496 {
497     MetafileTypeInvalid,            // Invalid metafile
498     MetafileTypeWmf,                // Standard WMF
499     MetafileTypeWmfAldus,           // Aldus Placeable Metafile format
500     MetafileTypeEmf,                // EMF (not EMF+)
501     MetafileTypeEmfPlusOnly,        // EMF+ without dual, down-level records
502     MetafileTypeEmfPlusDual         // EMF+ with dual, down-level records
503 };
504
505 // Specifies the type of EMF to record
506 enum EmfType
507 {
508     EmfTypeEmfOnly     = MetafileTypeEmf,          // no EMF+, only EMF
509     EmfTypeEmfPlusOnly = MetafileTypeEmfPlusOnly,  // no EMF, only EMF+
510     EmfTypeEmfPlusDual = MetafileTypeEmfPlusDual   // both EMF+ and EMF
511 };
512
513 // All persistent objects must have a type listed here
514 enum ObjectType
515 {
516     ObjectTypeInvalid,
517     ObjectTypeBrush,
518     ObjectTypePen,
519     ObjectTypePath,
520     ObjectTypeRegion,
521     ObjectTypeImage,
522     ObjectTypeFont,
523     ObjectTypeStringFormat,
524     ObjectTypeImageAttributes,
525     ObjectTypeCustomLineCap,
526
527     ObjectTypeMax = ObjectTypeCustomLineCap,
528     ObjectTypeMin = ObjectTypeBrush
529 };
530
531 inline BOOL
532 ObjectTypeIsValid(
533     ObjectType      type
534     )
535 {
536     return ((type >= ObjectTypeMin) && (type <= ObjectTypeMax));
537 }
538
539 //---------------------------------------------------------------------------
540 // EMF+ Records
541 //---------------------------------------------------------------------------
542
543 // We have to change the WMF record numbers so that they don't conflict with
544 // the EMF and EMF+ record numbers.
545 enum EmfPlusRecordType;
546 #define GDIP_EMFPLUS_RECORD_BASE        0x00004000
547 #define GDIP_WMF_RECORD_BASE            0x00010000
548 #define GDIP_WMF_RECORD_TO_EMFPLUS(n)   ((EmfPlusRecordType)((n) | GDIP_WMF_RECORD_BASE))
549 #define GDIP_EMFPLUS_RECORD_TO_WMF(n)   ((n) & (~GDIP_WMF_RECORD_BASE))
550 #define GDIP_IS_WMF_RECORDTYPE(n)       (((n) & GDIP_WMF_RECORD_BASE) != 0)
551
552 enum EmfPlusRecordType
553 {
554    // Since we have to enumerate GDI records right along with GDI+ records,
555    // we list all the GDI records here so that they can be part of the
556    // same enumeration type which is used in the enumeration callback.
557
558     WmfRecordTypeSetBkColor              = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETBKCOLOR),
559     WmfRecordTypeSetBkMode               = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETBKMODE),
560     WmfRecordTypeSetMapMode              = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETMAPMODE),
561     WmfRecordTypeSetROP2                 = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETROP2),
562     WmfRecordTypeSetRelAbs               = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETRELABS),
563     WmfRecordTypeSetPolyFillMode         = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETPOLYFILLMODE),
564     WmfRecordTypeSetStretchBltMode       = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETSTRETCHBLTMODE),
565     WmfRecordTypeSetTextCharExtra        = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETTEXTCHAREXTRA),
566     WmfRecordTypeSetTextColor            = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETTEXTCOLOR),
567     WmfRecordTypeSetTextJustification    = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETTEXTJUSTIFICATION),
568     WmfRecordTypeSetWindowOrg            = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETWINDOWORG),
569     WmfRecordTypeSetWindowExt            = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETWINDOWEXT),
570     WmfRecordTypeSetViewportOrg          = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETVIEWPORTORG),
571     WmfRecordTypeSetViewportExt          = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETVIEWPORTEXT),
572     WmfRecordTypeOffsetWindowOrg         = GDIP_WMF_RECORD_TO_EMFPLUS(META_OFFSETWINDOWORG),
573     WmfRecordTypeScaleWindowExt          = GDIP_WMF_RECORD_TO_EMFPLUS(META_SCALEWINDOWEXT),
574     WmfRecordTypeOffsetViewportOrg       = GDIP_WMF_RECORD_TO_EMFPLUS(META_OFFSETVIEWPORTORG),
575     WmfRecordTypeScaleViewportExt        = GDIP_WMF_RECORD_TO_EMFPLUS(META_SCALEVIEWPORTEXT),
576     WmfRecordTypeLineTo                  = GDIP_WMF_RECORD_TO_EMFPLUS(META_LINETO),
577     WmfRecordTypeMoveTo                  = GDIP_WMF_RECORD_TO_EMFPLUS(META_MOVETO),
578     WmfRecordTypeExcludeClipRect         = GDIP_WMF_RECORD_TO_EMFPLUS(META_EXCLUDECLIPRECT),
579     WmfRecordTypeIntersectClipRect       = GDIP_WMF_RECORD_TO_EMFPLUS(META_INTERSECTCLIPRECT),
580     WmfRecordTypeArc                     = GDIP_WMF_RECORD_TO_EMFPLUS(META_ARC),
581     WmfRecordTypeEllipse                 = GDIP_WMF_RECORD_TO_EMFPLUS(META_ELLIPSE),
582     WmfRecordTypeFloodFill               = GDIP_WMF_RECORD_TO_EMFPLUS(META_FLOODFILL),
583     WmfRecordTypePie                     = GDIP_WMF_RECORD_TO_EMFPLUS(META_PIE),
584     WmfRecordTypeRectangle               = GDIP_WMF_RECORD_TO_EMFPLUS(META_RECTANGLE),
585     WmfRecordTypeRoundRect               = GDIP_WMF_RECORD_TO_EMFPLUS(META_ROUNDRECT),
586     WmfRecordTypePatBlt                  = GDIP_WMF_RECORD_TO_EMFPLUS(META_PATBLT),
587     WmfRecordTypeSaveDC                  = GDIP_WMF_RECORD_TO_EMFPLUS(META_SAVEDC),
588     WmfRecordTypeSetPixel                = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETPIXEL),
589     WmfRecordTypeOffsetClipRgn           = GDIP_WMF_RECORD_TO_EMFPLUS(META_OFFSETCLIPRGN),
590     WmfRecordTypeTextOut                 = GDIP_WMF_RECORD_TO_EMFPLUS(META_TEXTOUT),
591     WmfRecordTypeBitBlt                  = GDIP_WMF_RECORD_TO_EMFPLUS(META_BITBLT),
592     WmfRecordTypeStretchBlt              = GDIP_WMF_RECORD_TO_EMFPLUS(META_STRETCHBLT),
593     WmfRecordTypePolygon                 = GDIP_WMF_RECORD_TO_EMFPLUS(META_POLYGON),
594     WmfRecordTypePolyline                = GDIP_WMF_RECORD_TO_EMFPLUS(META_POLYLINE),
595     WmfRecordTypeEscape                  = GDIP_WMF_RECORD_TO_EMFPLUS(META_ESCAPE),
596     WmfRecordTypeRestoreDC               = GDIP_WMF_RECORD_TO_EMFPLUS(META_RESTOREDC),
597     WmfRecordTypeFillRegion              = GDIP_WMF_RECORD_TO_EMFPLUS(META_FILLREGION),
598     WmfRecordTypeFrameRegion             = GDIP_WMF_RECORD_TO_EMFPLUS(META_FRAMEREGION),
599     WmfRecordTypeInvertRegion            = GDIP_WMF_RECORD_TO_EMFPLUS(META_INVERTREGION),
600     WmfRecordTypePaintRegion             = GDIP_WMF_RECORD_TO_EMFPLUS(META_PAINTREGION),
601     WmfRecordTypeSelectClipRegion        = GDIP_WMF_RECORD_TO_EMFPLUS(META_SELECTCLIPREGION),
602     WmfRecordTypeSelectObject            = GDIP_WMF_RECORD_TO_EMFPLUS(META_SELECTOBJECT),
603     WmfRecordTypeSetTextAlign            = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETTEXTALIGN),
604     WmfRecordTypeDrawText                = GDIP_WMF_RECORD_TO_EMFPLUS(0x062F),  // META_DRAWTEXT
605     WmfRecordTypeChord                   = GDIP_WMF_RECORD_TO_EMFPLUS(META_CHORD),
606     WmfRecordTypeSetMapperFlags          = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETMAPPERFLAGS),
607     WmfRecordTypeExtTextOut              = GDIP_WMF_RECORD_TO_EMFPLUS(META_EXTTEXTOUT),
608     WmfRecordTypeSetDIBToDev             = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETDIBTODEV),
609     WmfRecordTypeSelectPalette           = GDIP_WMF_RECORD_TO_EMFPLUS(META_SELECTPALETTE),
610     WmfRecordTypeRealizePalette          = GDIP_WMF_RECORD_TO_EMFPLUS(META_REALIZEPALETTE),
611     WmfRecordTypeAnimatePalette          = GDIP_WMF_RECORD_TO_EMFPLUS(META_ANIMATEPALETTE),
612     WmfRecordTypeSetPalEntries           = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETPALENTRIES),
613     WmfRecordTypePolyPolygon             = GDIP_WMF_RECORD_TO_EMFPLUS(META_POLYPOLYGON),
614     WmfRecordTypeResizePalette           = GDIP_WMF_RECORD_TO_EMFPLUS(META_RESIZEPALETTE),
615     WmfRecordTypeDIBBitBlt               = GDIP_WMF_RECORD_TO_EMFPLUS(META_DIBBITBLT),
616     WmfRecordTypeDIBStretchBlt           = GDIP_WMF_RECORD_TO_EMFPLUS(META_DIBSTRETCHBLT),
617     WmfRecordTypeDIBCreatePatternBrush   = GDIP_WMF_RECORD_TO_EMFPLUS(META_DIBCREATEPATTERNBRUSH),
618     WmfRecordTypeStretchDIB              = GDIP_WMF_RECORD_TO_EMFPLUS(META_STRETCHDIB),
619     WmfRecordTypeExtFloodFill            = GDIP_WMF_RECORD_TO_EMFPLUS(META_EXTFLOODFILL),
620     WmfRecordTypeSetLayout               = GDIP_WMF_RECORD_TO_EMFPLUS(0x0149),  // META_SETLAYOUT
621     WmfRecordTypeResetDC                 = GDIP_WMF_RECORD_TO_EMFPLUS(0x014C),  // META_RESETDC
622     WmfRecordTypeStartDoc                = GDIP_WMF_RECORD_TO_EMFPLUS(0x014D),  // META_STARTDOC
623     WmfRecordTypeStartPage               = GDIP_WMF_RECORD_TO_EMFPLUS(0x004F),  // META_STARTPAGE
624     WmfRecordTypeEndPage                 = GDIP_WMF_RECORD_TO_EMFPLUS(0x0050),  // META_ENDPAGE
625     WmfRecordTypeAbortDoc                = GDIP_WMF_RECORD_TO_EMFPLUS(0x0052),  // META_ABORTDOC
626     WmfRecordTypeEndDoc                  = GDIP_WMF_RECORD_TO_EMFPLUS(0x005E),  // META_ENDDOC
627     WmfRecordTypeDeleteObject            = GDIP_WMF_RECORD_TO_EMFPLUS(META_DELETEOBJECT),
628     WmfRecordTypeCreatePalette           = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEPALETTE),
629     WmfRecordTypeCreateBrush             = GDIP_WMF_RECORD_TO_EMFPLUS(0x00F8),  // META_CREATEBRUSH
630     WmfRecordTypeCreatePatternBrush      = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEPATTERNBRUSH),
631     WmfRecordTypeCreatePenIndirect       = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEPENINDIRECT),
632     WmfRecordTypeCreateFontIndirect      = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEFONTINDIRECT),
633     WmfRecordTypeCreateBrushIndirect     = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEBRUSHINDIRECT),
634     WmfRecordTypeCreateBitmapIndirect    = GDIP_WMF_RECORD_TO_EMFPLUS(0x02FD),  // META_CREATEBITMAPINDIRECT
635     WmfRecordTypeCreateBitmap            = GDIP_WMF_RECORD_TO_EMFPLUS(0x06FE),  // META_CREATEBITMAP
636     WmfRecordTypeCreateRegion            = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEREGION),
637
638     EmfRecordTypeHeader                  = EMR_HEADER,
639     EmfRecordTypePolyBezier              = EMR_POLYBEZIER,
640     EmfRecordTypePolygon                 = EMR_POLYGON,
641     EmfRecordTypePolyline                = EMR_POLYLINE,
642     EmfRecordTypePolyBezierTo            = EMR_POLYBEZIERTO,
643     EmfRecordTypePolyLineTo              = EMR_POLYLINETO,
644     EmfRecordTypePolyPolyline            = EMR_POLYPOLYLINE,
645     EmfRecordTypePolyPolygon             = EMR_POLYPOLYGON,
646     EmfRecordTypeSetWindowExtEx          = EMR_SETWINDOWEXTEX,
647     EmfRecordTypeSetWindowOrgEx          = EMR_SETWINDOWORGEX,
648     EmfRecordTypeSetViewportExtEx        = EMR_SETVIEWPORTEXTEX,
649     EmfRecordTypeSetViewportOrgEx        = EMR_SETVIEWPORTORGEX,
650     EmfRecordTypeSetBrushOrgEx           = EMR_SETBRUSHORGEX,
651     EmfRecordTypeEOF                     = EMR_EOF,
652     EmfRecordTypeSetPixelV               = EMR_SETPIXELV,
653     EmfRecordTypeSetMapperFlags          = EMR_SETMAPPERFLAGS,
654     EmfRecordTypeSetMapMode              = EMR_SETMAPMODE,
655     EmfRecordTypeSetBkMode               = EMR_SETBKMODE,
656     EmfRecordTypeSetPolyFillMode         = EMR_SETPOLYFILLMODE,
657     EmfRecordTypeSetROP2                 = EMR_SETROP2,
658     EmfRecordTypeSetStretchBltMode       = EMR_SETSTRETCHBLTMODE,
659     EmfRecordTypeSetTextAlign            = EMR_SETTEXTALIGN,
660     EmfRecordTypeSetColorAdjustment      = EMR_SETCOLORADJUSTMENT,
661     EmfRecordTypeSetTextColor            = EMR_SETTEXTCOLOR,
662     EmfRecordTypeSetBkColor              = EMR_SETBKCOLOR,
663     EmfRecordTypeOffsetClipRgn           = EMR_OFFSETCLIPRGN,
664     EmfRecordTypeMoveToEx                = EMR_MOVETOEX,
665     EmfRecordTypeSetMetaRgn              = EMR_SETMETARGN,
666     EmfRecordTypeExcludeClipRect         = EMR_EXCLUDECLIPRECT,
667     EmfRecordTypeIntersectClipRect       = EMR_INTERSECTCLIPRECT,
668     EmfRecordTypeScaleViewportExtEx      = EMR_SCALEVIEWPORTEXTEX,
669     EmfRecordTypeScaleWindowExtEx        = EMR_SCALEWINDOWEXTEX,
670     EmfRecordTypeSaveDC                  = EMR_SAVEDC,
671     EmfRecordTypeRestoreDC               = EMR_RESTOREDC,
672     EmfRecordTypeSetWorldTransform       = EMR_SETWORLDTRANSFORM,
673     EmfRecordTypeModifyWorldTransform    = EMR_MODIFYWORLDTRANSFORM,
674     EmfRecordTypeSelectObject            = EMR_SELECTOBJECT,
675     EmfRecordTypeCreatePen               = EMR_CREATEPEN,
676     EmfRecordTypeCreateBrushIndirect     = EMR_CREATEBRUSHINDIRECT,
677     EmfRecordTypeDeleteObject            = EMR_DELETEOBJECT,
678     EmfRecordTypeAngleArc                = EMR_ANGLEARC,
679     EmfRecordTypeEllipse                 = EMR_ELLIPSE,
680     EmfRecordTypeRectangle               = EMR_RECTANGLE,
681     EmfRecordTypeRoundRect               = EMR_ROUNDRECT,
682     EmfRecordTypeArc                     = EMR_ARC,
683     EmfRecordTypeChord                   = EMR_CHORD,
684     EmfRecordTypePie                     = EMR_PIE,
685     EmfRecordTypeSelectPalette           = EMR_SELECTPALETTE,
686     EmfRecordTypeCreatePalette           = EMR_CREATEPALETTE,
687     EmfRecordTypeSetPaletteEntries       = EMR_SETPALETTEENTRIES,
688     EmfRecordTypeResizePalette           = EMR_RESIZEPALETTE,
689     EmfRecordTypeRealizePalette          = EMR_REALIZEPALETTE,
690     EmfRecordTypeExtFloodFill            = EMR_EXTFLOODFILL,
691     EmfRecordTypeLineTo                  = EMR_LINETO,
692     EmfRecordTypeArcTo                   = EMR_ARCTO,
693     EmfRecordTypePolyDraw                = EMR_POLYDRAW,
694     EmfRecordTypeSetArcDirection         = EMR_SETARCDIRECTION,
695     EmfRecordTypeSetMiterLimit           = EMR_SETMITERLIMIT,
696     EmfRecordTypeBeginPath               = EMR_BEGINPATH,
697     EmfRecordTypeEndPath                 = EMR_ENDPATH,
698     EmfRecordTypeCloseFigure             = EMR_CLOSEFIGURE,
699     EmfRecordTypeFillPath                = EMR_FILLPATH,
700     EmfRecordTypeStrokeAndFillPath       = EMR_STROKEANDFILLPATH,
701     EmfRecordTypeStrokePath              = EMR_STROKEPATH,
702     EmfRecordTypeFlattenPath             = EMR_FLATTENPATH,
703     EmfRecordTypeWidenPath               = EMR_WIDENPATH,
704     EmfRecordTypeSelectClipPath          = EMR_SELECTCLIPPATH,
705     EmfRecordTypeAbortPath               = EMR_ABORTPATH,
706     EmfRecordTypeReserved_069            = 69,  // Not Used
707     EmfRecordTypeGdiComment              = EMR_GDICOMMENT,
708     EmfRecordTypeFillRgn                 = EMR_FILLRGN,
709     EmfRecordTypeFrameRgn                = EMR_FRAMERGN,
710     EmfRecordTypeInvertRgn               = EMR_INVERTRGN,
711     EmfRecordTypePaintRgn                = EMR_PAINTRGN,
712     EmfRecordTypeExtSelectClipRgn        = EMR_EXTSELECTCLIPRGN,
713     EmfRecordTypeBitBlt                  = EMR_BITBLT,
714     EmfRecordTypeStretchBlt              = EMR_STRETCHBLT,
715     EmfRecordTypeMaskBlt                 = EMR_MASKBLT,
716     EmfRecordTypePlgBlt                  = EMR_PLGBLT,
717     EmfRecordTypeSetDIBitsToDevice       = EMR_SETDIBITSTODEVICE,
718     EmfRecordTypeStretchDIBits           = EMR_STRETCHDIBITS,
719     EmfRecordTypeExtCreateFontIndirect   = EMR_EXTCREATEFONTINDIRECTW,
720     EmfRecordTypeExtTextOutA             = EMR_EXTTEXTOUTA,
721     EmfRecordTypeExtTextOutW             = EMR_EXTTEXTOUTW,
722     EmfRecordTypePolyBezier16            = EMR_POLYBEZIER16,
723     EmfRecordTypePolygon16               = EMR_POLYGON16,
724     EmfRecordTypePolyline16              = EMR_POLYLINE16,
725     EmfRecordTypePolyBezierTo16          = EMR_POLYBEZIERTO16,
726     EmfRecordTypePolylineTo16            = EMR_POLYLINETO16,
727     EmfRecordTypePolyPolyline16          = EMR_POLYPOLYLINE16,
728     EmfRecordTypePolyPolygon16           = EMR_POLYPOLYGON16,
729     EmfRecordTypePolyDraw16              = EMR_POLYDRAW16,
730     EmfRecordTypeCreateMonoBrush         = EMR_CREATEMONOBRUSH,
731     EmfRecordTypeCreateDIBPatternBrushPt = EMR_CREATEDIBPATTERNBRUSHPT,
732     EmfRecordTypeExtCreatePen            = EMR_EXTCREATEPEN,
733     EmfRecordTypePolyTextOutA            = EMR_POLYTEXTOUTA,
734     EmfRecordTypePolyTextOutW            = EMR_POLYTEXTOUTW,
735     EmfRecordTypeSetICMMode              = 98,  // EMR_SETICMMODE,
736     EmfRecordTypeCreateColorSpace        = 99,  // EMR_CREATECOLORSPACE,
737     EmfRecordTypeSetColorSpace           = 100, // EMR_SETCOLORSPACE,
738     EmfRecordTypeDeleteColorSpace        = 101, // EMR_DELETECOLORSPACE,
739     EmfRecordTypeGLSRecord               = 102, // EMR_GLSRECORD,
740     EmfRecordTypeGLSBoundedRecord        = 103, // EMR_GLSBOUNDEDRECORD,
741     EmfRecordTypePixelFormat             = 104, // EMR_PIXELFORMAT,
742     EmfRecordTypeDrawEscape              = 105, // EMR_RESERVED_105,
743     EmfRecordTypeExtEscape               = 106, // EMR_RESERVED_106,
744     EmfRecordTypeStartDoc                = 107, // EMR_RESERVED_107,
745     EmfRecordTypeSmallTextOut            = 108, // EMR_RESERVED_108,
746     EmfRecordTypeForceUFIMapping         = 109, // EMR_RESERVED_109,
747     EmfRecordTypeNamedEscape             = 110, // EMR_RESERVED_110,
748     EmfRecordTypeColorCorrectPalette     = 111, // EMR_COLORCORRECTPALETTE,
749     EmfRecordTypeSetICMProfileA          = 112, // EMR_SETICMPROFILEA,
750     EmfRecordTypeSetICMProfileW          = 113, // EMR_SETICMPROFILEW,
751     EmfRecordTypeAlphaBlend              = 114, // EMR_ALPHABLEND,
752     EmfRecordTypeSetLayout               = 115, // EMR_SETLAYOUT,
753     EmfRecordTypeTransparentBlt          = 116, // EMR_TRANSPARENTBLT,
754     EmfRecordTypeReserved_117            = 117, // Not Used
755     EmfRecordTypeGradientFill            = 118, // EMR_GRADIENTFILL,
756     EmfRecordTypeSetLinkedUFIs           = 119, // EMR_RESERVED_119,
757     EmfRecordTypeSetTextJustification    = 120, // EMR_RESERVED_120,
758     EmfRecordTypeColorMatchToTargetW     = 121, // EMR_COLORMATCHTOTARGETW,
759     EmfRecordTypeCreateColorSpaceW       = 122, // EMR_CREATECOLORSPACEW,
760     EmfRecordTypeMax                     = 122,
761     EmfRecordTypeMin                     = 1,
762
763     // That is the END of the GDI EMF records.
764
765     // Now we start the list of EMF+ records.  We leave quite
766     // a bit of room here for the addition of any new GDI
767     // records that may be added later.
768
769     EmfPlusRecordTypeInvalid = GDIP_EMFPLUS_RECORD_BASE,
770     EmfPlusRecordTypeHeader,
771     EmfPlusRecordTypeEndOfFile,
772
773     EmfPlusRecordTypeComment,
774
775     EmfPlusRecordTypeGetDC,    // the application grabbed the metafile dc
776
777     EmfPlusRecordTypeMultiFormatStart,
778     EmfPlusRecordTypeMultiFormatSection,
779     EmfPlusRecordTypeMultiFormatEnd,
780
781     // For all persistent objects
782     EmfPlusRecordTypeObject, // brush,pen,path,region,image,font,string-format
783
784     // Drawing Records
785     EmfPlusRecordTypeClear,
786     EmfPlusRecordTypeFillRects,
787     EmfPlusRecordTypeDrawRects,
788     EmfPlusRecordTypeFillPolygon,
789     EmfPlusRecordTypeDrawLines,
790     EmfPlusRecordTypeFillEllipse,
791     EmfPlusRecordTypeDrawEllipse,
792     EmfPlusRecordTypeFillPie,
793     EmfPlusRecordTypeDrawPie,
794     EmfPlusRecordTypeDrawArc,
795     EmfPlusRecordTypeFillRegion,
796     EmfPlusRecordTypeFillPath,
797     EmfPlusRecordTypeDrawPath,
798     EmfPlusRecordTypeFillClosedCurve,
799     EmfPlusRecordTypeDrawClosedCurve,
800     EmfPlusRecordTypeDrawCurve,
801     EmfPlusRecordTypeDrawBeziers,
802     EmfPlusRecordTypeDrawImage,
803     EmfPlusRecordTypeDrawImagePoints,
804     EmfPlusRecordTypeDrawString,
805
806     // Graphics State Records
807     EmfPlusRecordTypeSetRenderingOrigin,
808     EmfPlusRecordTypeSetAntiAliasMode,
809     EmfPlusRecordTypeSetTextRenderingHint,
810 #ifdef DCR_USE_NEW_188922
811    EmfPlusRecordTypeSetTextContrast,
812 #else
813    EmfPlusRecordTypeSetGammaValue,
814 #endif // DCR_USE_NEW_188922
815     EmfPlusRecordTypeSetInterpolationMode,
816     EmfPlusRecordTypeSetPixelOffsetMode,
817     EmfPlusRecordTypeSetCompositingMode,
818     EmfPlusRecordTypeSetCompositingQuality,
819     EmfPlusRecordTypeSave,
820     EmfPlusRecordTypeRestore,
821     EmfPlusRecordTypeBeginContainer,
822     EmfPlusRecordTypeBeginContainerNoParams,
823     EmfPlusRecordTypeEndContainer,
824     EmfPlusRecordTypeSetWorldTransform,
825     EmfPlusRecordTypeResetWorldTransform,
826     EmfPlusRecordTypeMultiplyWorldTransform,
827     EmfPlusRecordTypeTranslateWorldTransform,
828     EmfPlusRecordTypeScaleWorldTransform,
829     EmfPlusRecordTypeRotateWorldTransform,
830     EmfPlusRecordTypeSetPageTransform,
831     EmfPlusRecordTypeResetClip,
832     EmfPlusRecordTypeSetClipRect,
833     EmfPlusRecordTypeSetClipPath,
834     EmfPlusRecordTypeSetClipRegion,
835     EmfPlusRecordTypeOffsetClip,
836
837     // New record types must be added here (at the end) -- do not add above,
838     // since that will invalidate previous metafiles!
839     EmfPlusRecordTypeDrawDriverString,
840
841     // Have this here so you don't need to keep changing the value of
842     // EmfPlusRecordTypeMax every time you add a new record.
843
844     EmfPlusRecordTotal,
845
846     EmfPlusRecordTypeMax = EmfPlusRecordTotal-1,
847     EmfPlusRecordTypeMin = EmfPlusRecordTypeHeader,
848 };
849
850 //---------------------------------------------------------------------------
851 // StringFormatFlags
852 //---------------------------------------------------------------------------
853
854 //---------------------------------------------------------------------------
855 // String format flags
856 //
857 //  DirectionRightToLeft          - For horizontal text, the reading order is
858 //                                  right to left. This value is called
859 //                                  the base embedding level by the Unicode
860 //                                  bidirectional engine.
861 //                                  For vertical text, columns are read from
862 //                                  right to left.
863 //                                  By default, horizontal or vertical text is
864 //                                  read from left to right.
865 //
866 //  DirectionVertical             - Individual lines of text are vertical. In
867 //                                  each line, characters progress from top to
868 //                                  bottom.
869 //                                  By default, lines of text are horizontal,
870 //                                  each new line below the previous line.
871 //
872 //  NoFitBlackBox                 - Allows parts of glyphs to overhang the
873 //                                  bounding rectangle.
874 //                                  By default glyphs are first aligned
875 //                                  inside the margines, then any glyphs which
876 //                                  still overhang the bounding box are
877 //                                  repositioned to avoid any overhang.
878 //                                  For example when an italic
879 //                                  lower case letter f in a font such as
880 //                                  Garamond is aligned at the far left of a
881 //                                  rectangle, the lower part of the f will
882 //                                  reach slightly further left than the left
883 //                                  edge of the rectangle. Setting this flag
884 //                                  will ensure the character aligns visually
885 //                                  with the lines above and below, but may
886 //                                  cause some pixels outside the formatting
887 //                                  rectangle to be clipped or painted.
888 //
889 #ifndef DCR_USE_NEW_137252
890 //  NumberContextArabic           - Causes any initial numeric in the string to
891 //                                  be analysed for bidirection layout as if
892 //                                  it was preceeded by Arabic text.
893 //
894 //  DisableKashidaJustification   - Arabic text will not be justified by the
895 //                                  insertion of kashidas (i.e. extending the
896 //                                  joining line between characters). Instead
897 //                                  Arabic script will be justified by the
898 //                                  widening of the whitespace between words.
899 //
900 #endif
901 //  DisplayFormatControl          - Causes control characters such as the
902 //                                  left-to-right mark to be shown in the
903 //                                  output with a representative glyph.
904 //
905 #ifndef DCR_USE_NEW_137252
906 //  DisableKerning                - Disables Truetype and OpenType kerning.
907 //
908 //  DisableLigatures              - Disables Truetype and OpenType ligatures.
909 //
910 //  LayoutLegacyBidi              - Causes the bidirection algorithm to use
911 //                                  slightly different classifications for
912 //                                  '+', '-' and '/' that make their layout
913 //                                  much closer to that expected by files
914 //                                  generated in Windows or by Windows
915 //                                  applications.
916 //
917 //  NoChanges                     - A text imager created with this flag set
918 //                                  does not support those APIs that change
919 //                                  it's contents or formatting, but for most
920 //                                  simple text will be significantly faster in
921 //                                  performing measurement and drawing
922 //                                  functions.
923 //
924 #endif
925 //  NoFontFallback                - Disables fallback to alternate fonts for
926 //                                  characters not supported in the requested
927 //                                  font. Any missing characters will be
928 //                                  be displayed with the fonts missing glyph,
929 //                                  usually an open square.
930 //
931 //  NoWrap                        - Disables wrapping of text between lines
932 //                                  when formatting within a rectangle.
933 //                                  NoWrap is implied when a point is passed
934 //                                  instead of a rectangle, or when the
935 //                                  specified rectangle has a zero line length.
936 //
937 //  NoClip                        - By default text is clipped to the
938 //                                  formatting rectangle. Setting NoClip
939 //                                  allows overhanging pixels to affect the
940 //                                  device outside the formatting rectangle.
941 //                                  Pixels at the end of the line may be
942 //                                  affected if the glyphs overhang their
943 //                                  cells, and either the NoFitBlackBox flag
944 //                                  has been set, or the glyph extends to far
945 //                                  to be fitted.
946 //                                  Pixels above/before the first line or
947 //                                  below/after the last line may be affected
948 //                                  if the glyphs extend beyond their cell
949 //                                  ascent / descent. This can occur rarely
950 //                                  with unusual diacritic mark combinations.
951
952 //---------------------------------------------------------------------------
953
954 enum StringFormatFlags
955 {
956     StringFormatFlagsDirectionRightToLeft        = 0x00000001,
957     StringFormatFlagsDirectionVertical           = 0x00000002,
958     StringFormatFlagsNoFitBlackBox               = 0x00000004,
959 #ifndef DCR_USE_NEW_137252
960     StringFormatFlagsNumberContextArabic         = 0x00000008,
961     StringFormatFlagsDisableKashidaJustification = 0x00000010,
962 #endif
963     StringFormatFlagsDisplayFormatControl        = 0x00000020,
964 #ifndef DCR_USE_NEW_137252
965     StringFormatFlagsDisableKerning              = 0x00000040,
966     StringFormatFlagsDisableLigatures            = 0x00000080,
967     StringFormatFlagsLayoutLegacyBidi            = 0x00000100,
968     StringFormatFlagsNoChanges                   = 0x00000200,
969 #endif
970     StringFormatFlagsNoFontFallback              = 0x00000400,
971     StringFormatFlagsMeasureTrailingSpaces       = 0x00000800,
972     StringFormatFlagsNoWrap                      = 0x00001000,
973     StringFormatFlagsLineLimit                   = 0x00002000,
974
975     StringFormatFlagsNoClip                      = 0x00004000
976 };
977
978 //---------------------------------------------------------------------------
979 // StringTrimming
980 //---------------------------------------------------------------------------
981
982 enum StringTrimming {
983     StringTrimmingNone              = 0,
984     StringTrimmingCharacter         = 1,
985     StringTrimmingWord              = 2,
986     StringTrimmingEllipsisCharacter = 3,
987     StringTrimmingEllipsisWord      = 4,
988     StringTrimmingEllipsisPath      = 5
989 };
990
991 #ifndef DCR_USE_NEW_137252
992 //---------------------------------------------------------------------------
993 // String units
994 //
995 // String units are like length units in CSS, they may be absolute, or
996 // they may be relative to a font size.
997 //
998 //---------------------------------------------------------------------------
999
1000 enum StringUnit {
1001     StringUnitWorld        = UnitWorld,
1002     StringUnitDisplay      = UnitDisplay,
1003     StringUnitPixel        = UnitPixel,
1004     StringUnitPoint        = UnitPoint,
1005     StringUnitInch         = UnitInch,
1006     StringUnitDocument     = UnitDocument,
1007     StringUnitMillimeter   = UnitMillimeter,
1008     StringUnitEm           = 32
1009 };
1010 #endif
1011
1012 #ifndef DCR_USE_NEW_152154
1013 //---------------------------------------------------------------------------
1014 // Line spacing flags
1015 //---------------------------------------------------------------------------
1016
1017 enum LineSpacing {
1018     LineSpacingWorld                = UnitWorld,
1019     LineSpacingDisplay              = UnitDisplay,
1020     LineSpacingPixel                = UnitPixel,
1021     LineSpacingPoint                = UnitPoint,
1022     LineSpacingInch                 = UnitInch,
1023     LineSpacingDocument             = UnitDocument,
1024     LineSpacingMillimeter           = UnitMillimeter,
1025
1026     LineSpacingRecommended          = 32,
1027     LineSpacingAtLeast              = 33,
1028     LineSpacingAtLeastMultiple      = 34,
1029     LineSpacingCell                 = 35,
1030     LineSpacingCellAtLeast          = 36,
1031     LineSpacingCellAtLeastMultiple  = 37
1032 };
1033
1034 /// The following methods of linespacing are relative to the font size
1035 //
1036 // =========== Method ===========  =============== Relative to ===============
1037 //
1038 // LineSpacingRecommended          recommended line spacing specified by font
1039 // LineSpacingAtLeast              max(recommended, tallest glyph cell)
1040 // LineSpacingAtLeastMultiple      smallest multiple of recommended big enough
1041 //                                 for all glyph cells on the line
1042 // LineSpacingCell                 cell height
1043 // LineSpacingCellAtLeast          max(font cell height, tallest glyph cell)
1044 // LineSpacingCellAtLeastMultiple  smallest multiple of cell height big enough
1045 //                                 for all glyph cells on the line
1046 #endif
1047
1048
1049 //---------------------------------------------------------------------------
1050 // National language digit substitution
1051 //---------------------------------------------------------------------------
1052
1053 enum StringDigitSubstitute
1054 {
1055     StringDigitSubstituteUser        = 0,  // As NLS setting
1056     StringDigitSubstituteNone        = 1,
1057     StringDigitSubstituteNational    = 2,
1058     StringDigitSubstituteTraditional = 3
1059 };
1060
1061 //---------------------------------------------------------------------------
1062 // Hotkey prefix interpretation
1063 //---------------------------------------------------------------------------
1064
1065 enum HotkeyPrefix
1066 {
1067     HotkeyPrefixNone        = 0,
1068     HotkeyPrefixShow        = 1,
1069     HotkeyPrefixHide        = 2
1070 };
1071
1072 //---------------------------------------------------------------------------
1073 // Text alignment flags
1074 //---------------------------------------------------------------------------
1075
1076 enum StringAlignment
1077 {
1078     // Left edge for left-to-right text,
1079     // right for right-to-left text,
1080     // and top for vertical
1081     StringAlignmentNear   = 0,
1082     StringAlignmentCenter = 1,
1083     StringAlignmentFar    = 2
1084 };
1085
1086 //---------------------------------------------------------------------------
1087 // DriverStringOptions
1088 //---------------------------------------------------------------------------
1089
1090 enum DriverStringOptions
1091 {
1092     DriverStringOptionsCmapLookup             = 1,
1093     DriverStringOptionsVertical               = 2,
1094     DriverStringOptionsRealizedAdvance        = 4,
1095 #ifndef DCR_USE_NEW_137252
1096     DriverStringOptionsCompensateResolution   = 8
1097 #endif
1098 };
1099
1100 //---------------------------------------------------------------------------
1101 // Flush Intention flags
1102 //---------------------------------------------------------------------------
1103
1104 enum FlushIntention
1105 {
1106     FlushIntentionFlush = 0,        // Flush all batched rendering operations
1107     FlushIntentionSync = 1          // Flush all batched rendering operations
1108                                     // and wait for them to complete
1109 };
1110
1111 #ifndef DCR_USE_NEW_175866
1112
1113 //---------------------------------------------------------------------------
1114 // Window Change Notification types
1115 //---------------------------------------------------------------------------
1116
1117 enum WindowNotifyEnum
1118 {
1119    WindowNotifyEnumEnable = 0,
1120    WindowNotifyEnumDisable,
1121    WindowNotifyEnumPalette,
1122    WindowNotifyEnumDisplay,
1123    WindowNotifyEnumSysColor
1124 };
1125
1126 #endif
1127
1128 //---------------------------------------------------------------------------
1129 // Image encoder parameter related types
1130 //---------------------------------------------------------------------------
1131
1132 #ifdef DCR_USE_NEW_145804
1133 enum EncoderParameterValueType
1134 {
1135     EncoderParameterValueTypeByte           = 1,    // 8-bit unsigned int
1136     EncoderParameterValueTypeASCII          = 2,    // 8-bit byte containing one 7-bit ASCII
1137                                                     // code. NULL terminated.
1138     EncoderParameterValueTypeShort          = 3,    // 16-bit unsigned int
1139     EncoderParameterValueTypeLong           = 4,    // 32-bit unsigned int
1140     EncoderParameterValueTypeRational       = 5,    // Two Longs. The first Long is the
1141                                                     // numerator, the second Long expresses the
1142                                                     // denomintor.
1143     EncoderParameterValueTypeLongRange      = 6,    // Two longs which specify a range of
1144                                                     // integer values. The first Long specifies
1145                                                     // the lower end and the second one
1146                                                     // specifies the higher end. All values
1147                                                     // are inclusive at both ends
1148     EncoderParameterValueTypeUndefined      = 7,    // 8-bit byte that can take any value
1149                                                     // depending on field definition
1150     EncoderParameterValueTypeRationalRange  = 8     // Two Rationals. The first Rational
1151                                                     // specifies the lower end and the second
1152                                                     // specifies the higher end. All values
1153                                                     // are inclusive at both ends
1154 };
1155 #else
1156 enum ValueType
1157 {
1158     ValueTypeByte           = 1,    // 8-bit unsigned int
1159     ValueTypeASCII          = 2,    // 8-bit byte containing one 7-bit ASCII
1160                                     // code. NULL terminated.
1161     ValueTypeShort          = 3,    // 16-bit unsigned int
1162     ValueTypeLong           = 4,    // 32-bit unsigned int
1163     ValueTypeRational       = 5,    // Two Longs. The first Long is the
1164                                     // numerator, the second Long expresses the
1165                                     // denomintor.
1166     ValueTypeLongRange      = 6,    // Two longs which specify a range of
1167                                     // integer values. The first Long specifies
1168                                     // the lower end and the second one
1169                                     // specifies the higher end. All values
1170                                     // are inclusive at both ends
1171     ValueTypeUndefined      = 7,    // 8-bit byte that can take any value
1172                                     // depending on field definition
1173     ValueTypeRationalRange  = 8     // Two Rationals. The first Rational
1174                                     // specifies the lower end and the second
1175                                     // specifies the higher end. All values
1176                                     // are inclusive at both ends
1177 };
1178 #endif
1179
1180 //---------------------------------------------------------------------------
1181 // Image encoder value types
1182 //---------------------------------------------------------------------------
1183
1184 enum EncoderValue
1185 {
1186     EncoderValueColorTypeCMYK,
1187     EncoderValueColorTypeYCCK,
1188     EncoderValueCompressionLZW,
1189     EncoderValueCompressionCCITT3,
1190     EncoderValueCompressionCCITT4,
1191     EncoderValueCompressionRle,
1192     EncoderValueCompressionNone,
1193     EncoderValueScanMethodInterlaced,
1194     EncoderValueScanMethodNonInterlaced,
1195     EncoderValueVersionGif87,
1196     EncoderValueVersionGif89,
1197     EncoderValueRenderProgressive,
1198     EncoderValueRenderNonProgressive,
1199     EncoderValueTransformRotate90,
1200     EncoderValueTransformRotate180,
1201     EncoderValueTransformRotate270,
1202     EncoderValueTransformFlipHorizontal,
1203     EncoderValueTransformFlipVertical,
1204     #ifdef DCR_USE_NEW_140861
1205     EncoderValueMultiFrame,
1206     #else
1207     EncodeValueMultiFrame,
1208     #endif
1209     EncoderValueLastFrame,
1210     EncoderValueFlush,
1211     #ifdef DCR_USE_NEW_140861
1212     EncoderValueFrameDimensionTime,
1213     EncoderValueFrameDimensionResolution,
1214     EncoderValueFrameDimensionPage
1215     #else
1216     EncodeValueFrameDimensionTime,
1217     EncodeValueFrameDimensionResolution,
1218     EncodeValueFrameDimensionPage
1219     #endif
1220 };
1221
1222 //---------------------------------------------------------------------------
1223 // Graphics layout values (support for Middle East localization)
1224 //---------------------------------------------------------------------------
1225
1226 enum GraphicsLayout
1227 {
1228     GraphicsLayoutNormal,
1229     GraphicsLayoutMirrored,
1230     GraphicsLayoutMirroredIgnoreImages,
1231     GraphicsLayoutMirroredForceImages
1232 };
1233
1234 //---------------------------------------------------------------------------
1235 // Image layout values (support for Middle East localization)
1236 //---------------------------------------------------------------------------
1237
1238 enum ImageLayout
1239 {
1240     ImageLayoutNormal,
1241     ImageLayoutIgnoreMirrored
1242 };
1243
1244 enum EmfToWmfBitsFlags
1245 {
1246     EmfToWmfBitsFlagsDefault    = 0x00000000,
1247     EmfToWmfBitsFlagsEmbedEmf   = 0x00000001,
1248     EmfToWmfBitsFlagsIncludeAPM = 0x00000002,
1249     EmfToWmfBitsFlagsNoXORClip  = 0x00000004
1250 };
1251
1252 #endif // !_GDIPLUSENUMS_H