Add a .gitattributes with "* text=auto" so that new lines are
[pdfium.git] / core / src / fxge / Microsoft SDK / include / GdiPlusHeaders.h
1 /**************************************************************************\
2 *
3 * Copyright (c) 1998-2000, Microsoft Corp.  All Rights Reserved.
4 *
5 * Module Name:
6 *
7 *   GdiplusHeaders.h
8 *
9 * Abstract:
10 *
11 *   GDI+ Native C++ public header file
12 *
13 \**************************************************************************/
14
15 #ifndef _GDIPLUSHEADERS_H
16 #define _GDIPLUSHEADERS_H
17
18 //--------------------------------------------------------------------------
19 // Abstract base class for regions
20 //--------------------------------------------------------------------------
21
22 //  Include the class declarations here and have inline class implementation
23 //  in separate file to avoid circular references.
24
25 class Region : public GdiplusBase
26 {
27 public:
28     friend class Graphics;
29
30     Region();
31     Region(IN const RectF& rect);
32     Region(IN const Rect& rect);
33     Region(IN const GraphicsPath* path);
34     Region(IN const BYTE* regionData, IN INT size);
35     Region(IN HRGN hRgn);
36     static Region* FromHRGN(IN HRGN hRgn);
37
38     ~Region();
39     Region* Clone() const;
40
41     Status MakeInfinite();
42     Status MakeEmpty();
43
44     // Get the size of the buffer needed for the GetData method
45     UINT GetDataSize() const;
46
47     // buffer     - where to put the data
48     // bufferSize - how big the buffer is (should be at least as big as GetDataSize())
49     // sizeFilled - if not NULL, this is an OUT param that says how many bytes
50     //              of data were written to the buffer.
51     Status GetData(OUT BYTE* buffer,
52                    IN UINT bufferSize,
53                    OUT UINT* sizeFilled = NULL) const;
54
55     Status Intersect(IN const Rect& rect);
56     Status Intersect(IN const RectF& rect);
57     Status Intersect(IN const GraphicsPath* path);
58     Status Intersect(IN const Region* region);
59     Status Union(IN const Rect& rect);
60     Status Union(IN const RectF& rect);
61     Status Union(IN const GraphicsPath* path);
62     Status Union(IN const Region* region);
63     Status Xor(IN const Rect& rect);
64     Status Xor(IN const RectF& rect);
65     Status Xor(IN const GraphicsPath* path);
66     Status Xor(IN const Region* region);
67     Status Exclude(IN const Rect& rect);
68     Status Exclude(IN const RectF& rect);
69     Status Exclude(IN const GraphicsPath* path);
70     Status Exclude(IN const Region* region);
71     Status Complement(IN const Rect& rect);
72     Status Complement(IN const RectF& rect);
73     Status Complement(IN const GraphicsPath* path);
74     Status Complement(IN const Region* region);
75     Status Translate(IN REAL dx,
76                      IN REAL dy);
77     Status Translate(IN INT dx,
78                      IN INT dy);
79     Status Transform(IN const Matrix* matrix);
80
81     Status GetBounds(OUT Rect* rect,
82                      IN const Graphics* g) const;
83
84     Status GetBounds(OUT RectF* rect,
85                      IN const Graphics* g) const;
86
87     HRGN   GetHRGN  (IN const Graphics * g) const;
88
89     BOOL IsEmpty(IN const Graphics *g) const;
90     BOOL IsInfinite(IN const Graphics *g) const;
91
92     BOOL IsVisible(IN INT x,
93                    IN INT y,
94                    IN const Graphics* g = NULL) const
95     {
96         return IsVisible(Point(x, y), g);
97     }
98
99     BOOL IsVisible(IN const Point& point,
100                    IN const Graphics* g = NULL) const;
101
102     BOOL IsVisible(IN REAL x,
103                    IN REAL y,
104                    IN const Graphics* g = NULL) const
105     {
106         return IsVisible(PointF(x, y), g);
107     }
108
109     BOOL IsVisible(IN const PointF& point,
110                    IN const Graphics* g = NULL) const;
111
112     BOOL IsVisible(IN INT x,
113                    IN INT y,
114                    IN INT width,
115                    IN INT height,
116                    IN const Graphics* g) const
117     {
118         return IsVisible(Rect(x, y, width, height), g);
119     }
120
121     BOOL IsVisible(IN const Rect& rect,
122                    IN const Graphics* g = NULL) const;
123
124     BOOL IsVisible(IN REAL x,
125                    IN REAL y,
126                    IN REAL width,
127                    IN REAL height,
128                    IN const Graphics* g = NULL) const
129     {
130         return IsVisible(RectF(x, y, width, height), g);
131     }
132
133     BOOL IsVisible(IN const RectF& rect,
134                    IN const Graphics* g = NULL) const;
135
136     BOOL Equals(IN const Region* region,
137                 IN const Graphics* g) const;
138
139     UINT GetRegionScansCount(IN const Matrix* matrix) const;
140     Status GetRegionScans(IN const Matrix* matrix,
141                           OUT RectF* rects,
142                           OUT INT* count) const;
143     Status GetRegionScans(IN const Matrix* matrix,
144                           OUT Rect*  rects,
145                           OUT INT* count) const;
146     Status GetLastStatus() const;
147
148 protected:
149
150 #ifdef DCR_USE_NEW_250932
151
152 private:
153     Region(const Region &region);
154     Region& operator=(const Region &region);
155 protected:
156
157 #else
158     Region(const Region &region)
159     {
160         region; // reference parameter
161         SetStatus(NotImplemented);
162     }
163
164     Region& operator=(const Region &region)
165     {
166        region;  // reference parameter
167        SetStatus(NotImplemented);
168        return *this;
169     }
170 #endif
171
172     Status SetStatus(Status status) const
173     {
174         if (status != Ok)
175             return (lastResult = status);
176         else
177             return status;
178     }
179
180     Region(GpRegion* nativeRegion);
181
182     VOID SetNativeRegion(GpRegion* nativeRegion);
183
184 protected:
185     GpRegion* nativeRegion;
186     mutable Status lastResult;
187 };
188
189
190 //--------------------------------------------------------------------------
191 // Abstract base class for FontFamily
192 //--------------------------------------------------------------------------
193
194 class FontFamily : public GdiplusBase
195 {
196 public:
197     friend class Font;
198     friend class Graphics;
199     friend class GraphicsPath;
200     friend class FontCollection;
201
202     FontFamily();
203
204     FontFamily(
205         IN const WCHAR          *name,
206         IN const FontCollection *fontCollection = NULL
207     );
208
209     ~FontFamily();
210
211     static const FontFamily *GenericSansSerif();
212     static const FontFamily *GenericSerif();
213     static const FontFamily *GenericMonospace();
214
215     Status GetFamilyName(
216         OUT WCHAR        name[LF_FACESIZE],
217         IN LANGID        language = 0
218     ) const;
219
220 //  Copy operator
221     FontFamily * Clone() const;
222
223     BOOL    IsAvailable() const
224     {
225         return (nativeFamily != NULL);
226     };
227
228     BOOL    IsStyleAvailable(IN INT style) const;
229
230     UINT16  GetEmHeight     (IN INT style) const;
231     UINT16  GetCellAscent   (IN INT style) const;
232     UINT16  GetCellDescent  (IN INT style) const;
233     UINT16  GetLineSpacing  (IN INT style) const;
234
235     ///////////////////////////////////////////////////////////
236
237     Status GetLastStatus() const;
238
239 #ifdef DCR_USE_NEW_250932
240
241 private:
242     FontFamily(const FontFamily &);
243     FontFamily& operator=(const FontFamily &);
244
245 #endif
246
247 protected:
248     Status SetStatus(Status status) const;
249
250     // private constructor for copy
251     FontFamily(GpFontFamily * nativeFamily, Status status);
252
253 ///////////////////////////////////////
254 //  Data members
255 protected:
256
257     GpFontFamily    *nativeFamily;
258     mutable Status   lastResult;
259 };
260
261 static FontFamily *GenericSansSerifFontFamily = NULL;
262 static FontFamily *GenericSerifFontFamily     = NULL;
263 static FontFamily *GenericMonospaceFontFamily = NULL;
264
265 static BYTE GenericSansSerifFontFamilyBuffer[sizeof(FontFamily)] = {0};
266 static BYTE GenericSerifFontFamilyBuffer    [sizeof(FontFamily)] = {0};
267 static BYTE GenericMonospaceFontFamilyBuffer[sizeof(FontFamily)] = {0};
268
269
270 //--------------------------------------------------------------------------
271 // Abstract base class for fonts
272 //--------------------------------------------------------------------------
273
274 class Font : public GdiplusBase
275 {
276 public:
277     friend class Graphics;
278
279     Font(IN HDC hdc);
280     Font(IN HDC hdc,
281          IN const LOGFONTA* logfont);
282     Font(IN HDC hdc,
283          IN const LOGFONTW* logfont);
284 #ifdef DCR_USE_NEW_127084
285     Font(IN HDC hdc,
286          IN const HFONT hfont);
287 #endif
288     Font(
289         IN const FontFamily * family,
290         IN REAL         emSize,
291         IN INT          style   = FontStyleRegular,
292         IN Unit         unit    = UnitPoint
293     );
294
295     Font(
296         IN const WCHAR *           familyName,
297         IN REAL                    emSize,
298         IN INT                     style   = FontStyleRegular,
299         IN Unit                    unit    = UnitPoint,
300         IN const FontCollection *  fontCollection = NULL
301     );
302
303     Status GetLogFontA(IN const Graphics* g,
304                        OUT  LOGFONTA * logfontA) const;
305     Status GetLogFontW(IN const Graphics* g,
306                        OUT LOGFONTW * logfontW) const;
307
308     Font* Clone() const;
309     ~Font();
310     BOOL        IsAvailable()   const;
311     INT         GetStyle()      const;
312     REAL        GetSize()       const;
313     Unit        GetUnit()       const;
314     Status      GetLastStatus() const;
315     REAL        GetHeight(IN const Graphics *graphics = NULL) const;
316 #ifdef DCR_USE_NEW_125467
317     REAL        GetHeight(IN REAL dpi) const;
318 #endif
319
320     Status GetFamily(OUT FontFamily *family) const;
321
322 #ifdef DCR_USE_NEW_250932
323
324 private:
325     Font(const Font &);
326     Font& operator=(const Font &);
327
328 #endif
329
330 protected:
331     Font(GpFont* font, Status status);
332     VOID SetNativeFont(GpFont *Font);
333     Status SetStatus(Status status) const;
334
335 protected:
336     /*
337      * handle to native line texture object
338      */
339
340     GpFont* nativeFont;
341     mutable Status lastResult;
342 };
343
344 //--------------------------------------------------------------------------
345 // Abstract base classes for font collections
346 //--------------------------------------------------------------------------
347
348 class FontCollection : public GdiplusBase
349 {
350 public:
351     friend class FontFamily;
352
353     FontCollection();
354     virtual ~FontCollection();
355
356     INT GetFamilyCount() const;     // number of enumerable families in the collection
357
358     Status GetFamilies(             // enumerate the fonts in a collection
359         IN INT           numSought,
360         OUT FontFamily * gpfamilies,
361         OUT INT        * numFound
362     ) const;
363
364     Status GetLastStatus() const;
365
366 #ifdef DCR_USE_NEW_250932
367
368 private:
369     FontCollection(const FontCollection &);
370     FontCollection& operator=(const FontCollection &);
371
372 #endif
373
374 protected:
375     Status SetStatus(Status status) const ;
376
377     GpFontCollection *nativeFontCollection;
378     mutable Status    lastResult;
379 };
380
381
382 class InstalledFontCollection : public FontCollection
383 {
384 public:
385     InstalledFontCollection();
386     ~InstalledFontCollection();
387
388 #ifdef DCR_USE_NEW_250932
389
390 private:
391     InstalledFontCollection(const InstalledFontCollection &);
392     InstalledFontCollection& operator=(const InstalledFontCollection &);
393
394 #endif
395
396 protected:
397 #ifndef DCR_USE_NEW_235072
398     Status InstallFontFile(IN const WCHAR* filename);
399     Status UninstallFontFile(IN const WCHAR* filename);
400 #endif
401     Status SetStatus(Status status) const ;
402 };
403
404
405 class PrivateFontCollection : public FontCollection
406 {
407 public:
408     PrivateFontCollection();
409     ~PrivateFontCollection();
410
411     Status AddFontFile(IN const WCHAR* filename);
412     Status AddMemoryFont(IN const VOID* memory,
413                          IN INT length);
414
415 #ifdef DCR_USE_NEW_250932
416
417 private:
418     PrivateFontCollection(const PrivateFontCollection &);
419     PrivateFontCollection& operator=(const PrivateFontCollection &);
420
421 #endif
422 };
423
424
425 //--------------------------------------------------------------------------
426 // Abstract base class for bitmap image and metafile
427 //--------------------------------------------------------------------------
428
429 // !!! Note:
430 //  Include the class declarations here and have the inline class
431 //  implementation in a separate file.  This is done to resolve a
432 //  circular dependency since one of the Bitmap methods needs to
433 //  access the private member nativeGraphics of the Graphics object.
434
435 class Image : public GdiplusBase
436 {
437 public:
438     friend class Brush;
439     friend class TextureBrush;
440     friend class Graphics;
441
442 #ifndef DCR_USE_NEW_140782
443     Image(
444         IN const WCHAR* filename
445     );
446
447     Image(
448         IN IStream* stream
449     );
450
451     static Image* FromFile(
452         IN const WCHAR* filename
453     );
454
455     static Image* FromStream(
456         IN IStream* stream
457     );
458 #else
459     Image(
460         IN const WCHAR* filename,
461         IN BOOL useEmbeddedColorManagement = FALSE
462     );
463
464     Image(
465         IN IStream* stream,
466         IN BOOL useEmbeddedColorManagement = FALSE
467     );
468
469     static Image* FromFile(
470         IN const WCHAR* filename,
471         IN BOOL useEmbeddedColorManagement = FALSE
472     );
473
474     static Image* FromStream(
475         IN IStream* stream,
476         IN BOOL useEmbeddedColorManagement = FALSE
477     );
478 #endif
479
480     virtual ~Image();
481     virtual Image* Clone();
482
483     Status Save(IN const WCHAR* filename,
484                 IN const CLSID* clsidEncoder,
485                 IN const EncoderParameters *encoderParams = NULL);
486     Status Save(IN IStream* stream,
487                 IN const CLSID* clsidEncoder,
488                 IN const EncoderParameters *encoderParams = NULL);
489     Status SaveAdd(IN const EncoderParameters* encoderParams);
490     Status SaveAdd(IN Image* newImage,
491                    IN const EncoderParameters* encoderParams);
492
493     ImageType GetType() const;
494     Status GetPhysicalDimension(OUT SizeF* size);
495     Status GetBounds(OUT RectF* srcRect,
496                      OUT Unit* srcUnit);
497
498     UINT GetWidth();
499     UINT GetHeight();
500     REAL GetHorizontalResolution();
501     REAL GetVerticalResolution();
502     UINT GetFlags();
503     Status GetRawFormat(OUT GUID *format);
504     PixelFormat GetPixelFormat();
505
506     INT GetPaletteSize();
507     Status GetPalette(OUT ColorPalette* palette,
508                       IN INT size);
509     Status SetPalette(IN const ColorPalette* palette);
510
511     Image* GetThumbnailImage(IN UINT thumbWidth,
512                              IN UINT thumbHeight,
513                              IN GetThumbnailImageAbort callback = NULL,
514                              IN VOID* callbackData = NULL);
515     UINT GetFrameDimensionsCount();
516     Status GetFrameDimensionsList(OUT GUID* dimensionIDs,
517                                   IN UINT count);
518     UINT GetFrameCount(IN const GUID* dimensionID);
519     Status SelectActiveFrame(IN const GUID* dimensionID,
520                              IN UINT frameIndex);
521     Status RotateFlip(IN RotateFlipType rotateFlipType);
522     UINT GetPropertyCount();
523     Status GetPropertyIdList(IN UINT numOfProperty,
524                              OUT PROPID* list);
525     UINT GetPropertyItemSize(IN PROPID propId);
526     Status GetPropertyItem(IN PROPID propId,
527                            IN UINT propSize,
528                            OUT PropertyItem* buffer);
529     Status GetPropertySize(OUT UINT* totalBufferSize,
530                            OUT UINT* numProperties);
531     Status GetAllPropertyItems(IN UINT totalBufferSize,
532                                IN UINT numProperties,
533                                OUT PropertyItem* allItems);
534     Status RemovePropertyItem(IN PROPID propId);
535     Status SetPropertyItem(IN const PropertyItem* item);
536
537     UINT  GetEncoderParameterListSize(IN const CLSID* clsidEncoder);
538     Status GetEncoderParameterList(IN const CLSID* clsidEncoder,
539                                    IN UINT size,
540                                    OUT EncoderParameters* buffer);
541
542     // Support for Middle East localization (right-to-left mirroring)
543     ImageLayout GetLayout() const;
544     Status SetLayout(IN const ImageLayout layout);
545
546     Status GetLastStatus() const;
547
548 protected:
549
550     Image() {}
551
552     Image(GpImage *nativeImage, Status status);
553
554     VOID SetNativeImage(GpImage* nativeImage);
555
556     Status SetStatus(Status status) const
557     {
558         if (status != Ok)
559             return (lastResult = status);
560         else
561             return status;
562     }
563
564     GpImage* nativeImage;
565     mutable Status lastResult;
566     mutable Status loadStatus;
567
568 #ifdef DCR_USE_NEW_250932
569
570 private:
571
572 #else
573
574 protected:
575
576 #endif
577
578     // Disable copy constructor and assignment operator
579
580     Image(IN const Image& C);
581     Image& operator=(IN const Image& C);
582 };
583
584 class Bitmap : public Image
585 {
586 public:
587     friend class Image;
588     friend class CachedBitmap;
589
590     Bitmap(
591         IN const WCHAR *filename,
592         IN BOOL useEmbeddedColorManagement = FALSE
593     );
594
595     Bitmap(
596         IN IStream *stream,
597         IN BOOL useEmbeddedColorManagement = FALSE
598     );
599
600     static Bitmap* FromFile(
601         IN const WCHAR *filename,
602         IN BOOL useEmbeddedColorManagement = FALSE
603     );
604
605     static Bitmap* FromStream(
606         IN IStream *stream,
607         IN BOOL useEmbeddedColorManagement = FALSE
608     );
609
610     Bitmap(IN INT width,
611            IN INT height,
612            IN INT stride, PixelFormat format,
613            IN BYTE* scan0);
614     Bitmap(IN INT width,
615            IN INT height,
616            IN PixelFormat format = PixelFormat32bppARGB);
617     Bitmap(IN INT width,
618            IN INT height,
619            IN  Graphics* target);
620
621     Bitmap* Clone(IN const Rect& rect,
622                   IN PixelFormat format);
623     Bitmap* Clone(IN INT x,
624                   IN INT y,
625                   IN INT width,
626                   IN INT height,
627                   IN PixelFormat format);
628     Bitmap* Clone(IN const RectF& rect,
629                   IN PixelFormat format);
630     Bitmap* Clone(IN REAL x,
631                   IN REAL y,
632                   IN REAL width,
633                   IN REAL height,
634                   IN PixelFormat format);
635
636     Status LockBits(IN const Rect& rect,
637                     IN UINT flags,
638                     IN PixelFormat format,
639                     OUT BitmapData* lockedBitmapData);
640     Status UnlockBits(IN BitmapData* lockedBitmapData);
641     Status GetPixel(IN INT x,
642                     IN INT y,
643                     OUT Color *color);
644     Status SetPixel(IN INT x,
645                     IN INT y,
646                     IN const Color &color);
647     Status SetResolution(IN REAL xdpi,
648                          IN REAL ydpi);
649
650     // GDI interop:
651
652     Bitmap(IN IDirectDrawSurface7* surface);
653     Bitmap(IN const BITMAPINFO* gdiBitmapInfo,
654            IN VOID* gdiBitmapData);
655     Bitmap(IN HBITMAP hbm,
656            IN HPALETTE hpal);
657     Bitmap(IN HICON hicon);
658     Bitmap(IN HINSTANCE hInstance,
659            IN const WCHAR * bitmapName);
660     static Bitmap* FromDirectDrawSurface7(IN IDirectDrawSurface7* surface);
661     static Bitmap* FromBITMAPINFO(IN const BITMAPINFO* gdiBitmapInfo,
662                                   IN VOID* gdiBitmapData);
663     static Bitmap* FromHBITMAP(IN HBITMAP hbm,
664                                IN HPALETTE hpal);
665     static Bitmap* FromHICON(IN HICON hicon);
666     static Bitmap* FromResource(IN HINSTANCE hInstance,
667                                 IN const WCHAR * bitmapName);
668
669     Status GetHBITMAP(IN const Color& colorBackground,
670                       OUT HBITMAP *hbmReturn);
671     Status GetHICON(HICON *hicon);
672
673 #ifdef DCR_USE_NEW_250932
674 private:
675     Bitmap(const Bitmap &);
676     Bitmap& operator=(const Bitmap &);
677 #endif
678
679 protected:
680     Bitmap(GpBitmap *nativeBitmap);
681 };
682
683 class CustomLineCap : public GdiplusBase
684 {
685 public:
686     friend class Pen;
687
688     CustomLineCap(
689         IN const GraphicsPath* fillPath,
690         IN const GraphicsPath* strokePath,
691         IN LineCap baseCap = LineCapFlat,
692         IN REAL baseInset = 0
693         );
694     virtual ~CustomLineCap();
695
696     CustomLineCap* Clone() const;
697
698     Status SetStrokeCap(IN LineCap strokeCap)
699     {
700         // This changes both start and and caps.
701
702         return SetStrokeCaps(strokeCap, strokeCap);
703     }
704
705     Status SetStrokeCaps(IN LineCap startCap,
706                          IN LineCap endCap);
707     Status GetStrokeCaps(OUT LineCap* startCap,
708                          OUT LineCap* endCap) const;
709     Status SetStrokeJoin(IN LineJoin lineJoin);
710     LineJoin GetStrokeJoin() const;
711     Status SetBaseCap(IN LineCap baseCap);
712     LineCap GetBaseCap() const;
713     Status SetBaseInset(IN REAL inset);
714     REAL GetBaseInset() const;
715     Status SetWidthScale(IN REAL widthScale);
716     REAL GetWidthScale() const;
717
718 protected:
719     CustomLineCap();
720
721 #ifdef DCR_USE_NEW_250932
722
723 private:
724     CustomLineCap(const CustomLineCap &);
725     CustomLineCap& operator=(const CustomLineCap &);
726 protected:
727
728 #else
729
730     CustomLineCap(const CustomLineCap& customLineCap)
731     {
732         customLineCap;
733         SetStatus(NotImplemented);
734     }
735
736     CustomLineCap& operator=(const CustomLineCap& customLineCap)
737     {
738         customLineCap;
739         SetStatus(NotImplemented);
740         return *this;
741     }
742
743 #endif
744
745     CustomLineCap(GpCustomLineCap* nativeCap, Status status)
746     {
747         lastResult = status;
748         SetNativeCap(nativeCap);
749     }
750
751     VOID SetNativeCap(GpCustomLineCap* nativeCap)
752     {
753         this->nativeCap = nativeCap;
754     }
755
756     Status SetStatus(Status status) const
757     {
758         if (status != Ok)
759             return (lastResult = status);
760         else
761             return status;
762     }
763
764 protected:
765     GpCustomLineCap* nativeCap;
766     mutable Status lastResult;
767 };
768
769 class CachedBitmap : public GdiplusBase
770 {
771     friend Graphics;
772
773 public:
774     CachedBitmap(IN Bitmap *bitmap,
775                  IN Graphics *graphics);
776     virtual ~CachedBitmap();
777
778     Status GetLastStatus() const;
779
780 #ifdef DCR_USE_NEW_250932
781
782 private:
783     CachedBitmap(const CachedBitmap &);
784     CachedBitmap& operator=(const CachedBitmap &);
785
786 #endif
787
788 protected:
789     GpCachedBitmap *nativeCachedBitmap;
790     mutable Status lastResult;
791 };
792
793 #endif  // !_GDIPLUSHEADERS.HPP