4 * GDI+ Bitmap, CachedBitmap, CustomLineCap, Font, FontCollection,
\r
5 * FontFamily, Image, InstalledFontCollection, PrivateFontCollection,
\r
6 * Region class definitions.
\r
7 * Implementation of these classes is in gdiplusimpl.h.
\r
9 * This file is part of the w32api package.
\r
12 * Created by Markus Koenig <markus@stber-koenig.de>
\r
14 * THIS SOFTWARE IS NOT COPYRIGHTED
\r
16 * This source code is offered for use in the public domain. You may
\r
17 * use, modify or distribute it freely.
\r
19 * This code is distributed in the hope that it will be useful but
\r
20 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
\r
21 * DISCLAIMED. This includes but is not limited to warranties of
\r
22 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
\r
26 #ifndef __GDIPLUS_HEADERS_H
\r
27 #define __GDIPLUS_HEADERS_H
\r
29 #pragma GCC system_header
\r
33 #error "A C++ compiler is required to include gdiplusheaders.h."
\r
37 * Note: Virtual inline functions (dtors, Clone()) are implemented here: If
\r
38 * these were defined outside class scope, the compiler would always generate
\r
39 * code for them (and the vtable), even if these classes were never used.
\r
44 class FontCollection;
\r
51 class Image: public GdiplusBase
\r
53 friend class Bitmap;
\r
54 friend class Metafile;
\r
55 friend class CachedBitmap;
\r
56 friend class Graphics;
\r
57 friend class TextureBrush;
\r
60 static Image* FromFile(const WCHAR *filename,
\r
61 BOOL useEmbeddedColorManagement = FALSE);
\r
62 static Image* FromStream(IStream *stream,
\r
63 BOOL useEmbeddedColorManagement = FALSE);
\r
65 Image(const WCHAR *filename, BOOL useEmbeddedColorManagement = FALSE);
\r
66 Image(IStream *stream, BOOL useEmbeddedColorManagement = FALSE);
\r
70 DllExports::GdipDisposeImage(nativeImage);
\r
72 virtual Image* Clone() const
\r
74 GpImage *cloneImage = NULL;
\r
75 Status status = updateStatus(DllExports::GdipCloneImage(
\r
76 nativeImage, &cloneImage));
\r
78 Image *result = new Image(cloneImage, lastStatus);
\r
80 DllExports::GdipDisposeImage(cloneImage);
\r
81 lastStatus = OutOfMemory;
\r
89 Status FindFirstItem(ImageItemData *item);
\r
90 Status FindNextItem(ImageItemData *item);
\r
91 Status GetAllPropertyItems(UINT totalBufferSize,
\r
92 UINT numProperties, PropertyItem *allItems);
\r
93 Status GetBounds(RectF *srcRect, Unit *srcUnit);
\r
94 Status GetEncoderParameterList(const CLSID *clsidEncoder,
\r
95 UINT size, EncoderParameters *buffer);
\r
96 UINT GetEncoderParameterListSize(const CLSID *clsidEncoder);
\r
98 UINT GetFrameCount(const GUID *dimensionID);
\r
99 UINT GetFrameDimensionsCount();
\r
100 Status GetFrameDimensionsList(GUID *dimensionIDs, UINT count);
\r
102 REAL GetHorizontalResolution();
\r
103 Status GetItemData(ImageItemData *item);
\r
104 Status GetPalette(ColorPalette *palette, INT size);
\r
105 INT GetPaletteSize();
\r
106 Status GetPhysicalDimension(SizeF *size);
\r
107 PixelFormat GetPixelFormat();
\r
108 UINT GetPropertyCount();
\r
109 Status GetPropertyIdList(UINT numOfProperty, PROPID *list);
\r
110 Status GetPropertyItem(PROPID propId, UINT propSize,
\r
111 PropertyItem *buffer);
\r
112 UINT GetPropertyItemSize(PROPID propId);
\r
113 Status GetPropertySize(UINT *totalBufferSize, UINT *numProperties);
\r
114 Status GetRawFormat(GUID *format);
\r
115 Image* GetThumbnailImage(UINT thumbWidth, UINT thumbHeight,
\r
116 GetThumbnailImageAbort callback, VOID *callbackData);
\r
117 ImageType GetType() const;
\r
118 REAL GetVerticalResolution();
\r
120 Status RemovePropertyItem(PROPID propId);
\r
121 Status RotateFlip(RotateFlipType rotateFlipType);
\r
122 Status Save(IStream *stream, const CLSID *clsidEncoder,
\r
123 const EncoderParameters *encoderParams);
\r
124 Status Save(const WCHAR *filename, const CLSID *clsidEncoder,
\r
125 const EncoderParameters *encoderParams);
\r
126 Status SaveAdd(const EncoderParameters *encoderParams);
\r
127 Status SaveAdd(Image *newImage, const EncoderParameters *encoderParams);
\r
128 Status SelectActiveFrame(const GUID *dimensionID, UINT frameIndex);
\r
129 Status SetAbort(GdiplusAbort *pIAbort);
\r
130 Status SetPalette(const ColorPalette *palette);
\r
131 Status SetPropertyItem(const PropertyItem *item);
\r
133 Status GetLastStatus() const
\r
135 Status result = lastStatus;
\r
141 Image(GpImage *image, Status status):
\r
142 nativeImage(image), lastStatus(status) {}
\r
143 Image(const Image&);
\r
144 Image& operator=(const Image&);
\r
146 Status updateStatus(Status newStatus) const
\r
148 if (newStatus != Ok) lastStatus = newStatus;
\r
152 GpImage *nativeImage;
\r
153 mutable Status lastStatus;
\r
156 class Bitmap: public Image
\r
159 static Bitmap* FromBITMAPINFO(const BITMAPINFO *gdiBitmapInfo,
\r
160 VOID *gdiBitmapData);
\r
161 static Bitmap* FromDirectDrawSurface7(IDirectDrawSurface7 *surface);
\r
162 static Bitmap* FromFile(const WCHAR *filename,
\r
163 BOOL useEmbeddedColorManagement = FALSE);
\r
164 static Bitmap* FromHBITMAP(HBITMAP hbm, HPALETTE hpal);
\r
165 static Bitmap* FromHICON(HICON icon);
\r
166 static Bitmap* FromResource(HINSTANCE hInstance,
\r
167 const WCHAR *bitmapName);
\r
168 static Bitmap* FromStream(IStream *stream,
\r
169 BOOL useEmbeddedColorManagement = FALSE);
\r
170 static Status ApplyEffect(Bitmap **inputs, INT numInputs,
\r
171 Effect *effect, RECT *ROI,
\r
172 RECT *outputRect, Bitmap **output);
\r
173 static Status InitializePalette(ColorPalette *palette,
\r
174 PaletteType paletteType, INT optimalColors,
\r
175 BOOL useTransparentColor, Bitmap *bitmap);
\r
177 Bitmap(const BITMAPINFO *gdiBitmapInfo, VOID *gdiBitmapData);
\r
178 Bitmap(IDirectDrawSurface7 *surface);
\r
179 Bitmap(const WCHAR *filename, BOOL useEmbeddedColorManagement = FALSE);
\r
180 Bitmap(HBITMAP hbm, HPALETTE hpal);
\r
181 Bitmap(HICON hicon);
\r
182 Bitmap(HINSTANCE hInstance, const WCHAR *bitmapName);
\r
183 Bitmap(IStream *stream, BOOL useEmbeddedColorManagement = FALSE);
\r
184 Bitmap(INT width, INT height, Graphics *target);
\r
185 Bitmap(INT width, INT height, PixelFormat format = PixelFormat32bppARGB);
\r
186 Bitmap(INT width, INT height, INT stride, PixelFormat format, BYTE *scan0);
\r
191 virtual Bitmap* Clone() const
\r
193 GpImage *cloneImage = NULL;
\r
194 Status status = updateStatus(DllExports::GdipCloneImage(
\r
195 nativeImage, &cloneImage));
\r
196 if (status == Ok) {
\r
197 Bitmap *result = new Bitmap(cloneImage, lastStatus);
\r
199 DllExports::GdipDisposeImage(cloneImage);
\r
200 lastStatus = OutOfMemory;
\r
208 Bitmap* Clone(const RectF& rect, PixelFormat format) const;
\r
209 Bitmap* Clone(const Rect& rect, PixelFormat format) const;
\r
210 Bitmap* Clone(REAL x, REAL y, REAL width, REAL height,
\r
211 PixelFormat format) const;
\r
212 Bitmap* Clone(INT x, INT y, INT width, INT height,
\r
213 PixelFormat format) const;
\r
215 Status ApplyEffect(Effect *effect, RECT *ROI);
\r
216 Status ConvertFormat(PixelFormat format, DitherType ditherType,
\r
217 PaletteType paletteType, ColorPalette *palette,
\r
218 REAL alphaThresholdPercent);
\r
219 Status GetHBITMAP(const Color& colorBackground, HBITMAP *hbmReturn) const;
\r
220 Status GetHICON(HICON *icon) const;
\r
221 Status GetHistogram(HistogramFormat format, UINT numberOfEntries,
\r
222 UINT *channel0, UINT *channel1,
\r
223 UINT *channel2, UINT *channel3) const;
\r
224 Status GetHistogramSize(HistogramFormat format,
\r
225 UINT *numberOfEntries) const;
\r
226 Status GetPixel(INT x, INT y, Color *color) const;
\r
227 Status LockBits(const Rect *rect, UINT flags, PixelFormat format,
\r
228 BitmapData *lockedBitmapData);
\r
229 Status SetPixel(INT x, INT y, const Color& color);
\r
230 Status SetResolution(REAL xdpi, REAL ydpi);
\r
231 Status UnlockBits(BitmapData *lcokedBitmapData);
\r
234 Bitmap(GpImage *image, Status status): Image(image, status) {}
\r
235 Bitmap(const Bitmap&);
\r
236 Bitmap& operator=(const Bitmap&);
\r
239 class CachedBitmap: public GdiplusBase
\r
241 friend class Graphics;
\r
244 CachedBitmap(Bitmap *bitmap, Graphics *graphics);
\r
247 Status GetLastStatus() const
\r
253 CachedBitmap(const CachedBitmap&);
\r
254 CachedBitmap& operator=(const CachedBitmap&);
\r
256 GpCachedBitmap *nativeCachedBitmap;
\r
260 class CustomLineCap: public GdiplusBase
\r
262 friend class AdjustableArrowCap;
\r
266 CustomLineCap(const GraphicsPath *fillPath,
\r
267 const GraphicsPath *strokePath,
\r
268 LineCap baseCap = LineCapFlat,
\r
269 REAL baseInset = 0.0f);
\r
271 virtual ~CustomLineCap()
\r
273 DllExports::GdipDeleteCustomLineCap(nativeCustomLineCap);
\r
275 virtual CustomLineCap* Clone() const
\r
277 GpCustomLineCap *cloneCustomLineCap = NULL;
\r
278 Status status = updateStatus(DllExports::GdipCloneCustomLineCap(
\r
279 nativeCustomLineCap, &cloneCustomLineCap));
\r
280 if (status == Ok) {
\r
281 CustomLineCap *result = new CustomLineCap(
\r
282 cloneCustomLineCap, lastStatus);
\r
284 DllExports::GdipDeleteCustomLineCap(cloneCustomLineCap);
\r
285 lastStatus = OutOfMemory;
\r
293 LineCap GetBaseCap() const;
\r
294 REAL GetBaseInset() const;
\r
295 Status GetStrokeCaps(LineCap *startCap, LineCap *endCap) const;
\r
296 LineJoin GetStrokeJoin() const;
\r
297 REAL GetWidthScale() const;
\r
298 Status SetBaseCap(LineCap baseCap);
\r
299 Status SetBaseInset(REAL inset);
\r
300 Status SetStrokeCap(LineCap strokeCap);
\r
301 Status SetStrokeCaps(LineCap startCap, LineCap endCap);
\r
302 Status SetStrokeJoin(LineJoin lineJoin);
\r
303 Status SetWidthScale(REAL widthScale);
\r
305 Status GetLastStatus() const
\r
307 Status result = lastStatus;
\r
313 CustomLineCap(GpCustomLineCap *customLineCap, Status status):
\r
314 nativeCustomLineCap(customLineCap), lastStatus(status) {}
\r
315 CustomLineCap(const CustomLineCap&);
\r
316 CustomLineCap& operator=(const CustomLineCap&);
\r
318 Status updateStatus(Status newStatus) const
\r
320 if (newStatus != Ok) lastStatus = newStatus;
\r
324 GpCustomLineCap *nativeCustomLineCap;
\r
325 mutable Status lastStatus;
\r
328 class Font: public GdiplusBase
\r
330 friend class Graphics;
\r
333 Font(const FontFamily *family, REAL emSize,
\r
334 INT style = FontStyleRegular,
\r
335 Unit unit = UnitPoint);
\r
336 Font(HDC hdc, HFONT hfont);
\r
337 Font(HDC hdc, const LOGFONTA *logfont);
\r
338 Font(HDC hdc, const LOGFONTW *logfont);
\r
340 Font(const WCHAR *familyName, REAL emSize,
\r
341 INT style = FontStyleRegular,
\r
342 Unit unit = UnitPoint,
\r
343 const FontCollection *fontCollection = NULL);
\r
345 Font* Clone() const;
\r
347 Status GetFamily(FontFamily *family) const;
\r
348 REAL GetHeight(const Graphics *graphics) const;
\r
349 REAL GetHeight(REAL dpi) const;
\r
350 Status GetLogFontA(const Graphics *graphics, LOGFONTA *logfontA) const;
\r
351 Status GetLogFontW(const Graphics *graphics, LOGFONTW *logfontW) const;
\r
352 REAL GetSize() const;
\r
353 INT GetStyle() const;
\r
354 Unit GetUnit() const;
\r
356 Status GetLastStatus() const
\r
360 BOOL IsAvailable() const
\r
362 return nativeFont != NULL;
\r
366 Font(GpFont *font, Status status):
\r
367 nativeFont(font), lastStatus(status) {}
\r
369 Font& operator=(const Font&);
\r
371 Status updateStatus(Status newStatus) const
\r
373 if (newStatus != Ok) lastStatus = newStatus;
\r
377 GpFont *nativeFont;
\r
378 mutable Status lastStatus;
\r
381 class FontCollection: public GdiplusBase
\r
383 friend class InstalledFontCollection;
\r
384 friend class PrivateFontCollection;
\r
386 friend class FontFamily;
\r
390 virtual ~FontCollection() {}
\r
392 Status GetFamilies(INT numSought, FontFamily *families,
\r
393 INT *numFound) const;
\r
394 INT GetFamilyCount() const;
\r
396 Status GetLastStatus() const
\r
402 FontCollection(const FontCollection&);
\r
403 FontCollection& operator=(const FontCollection&);
\r
405 Status updateStatus(Status newStatus) const
\r
407 return lastStatus = newStatus;
\r
410 GpFontCollection *nativeFontCollection;
\r
411 mutable Status lastStatus;
\r
414 class FontFamily: public GdiplusBase
\r
417 friend class FontCollection;
\r
418 friend class GraphicsPath;
\r
421 static const FontFamily* GenericMonospace();
\r
422 static const FontFamily* GenericSansSerif();
\r
423 static const FontFamily* GenericSerif();
\r
426 FontFamily(const WCHAR *name,
\r
427 const FontCollection *fontCollection = NULL);
\r
429 FontFamily* Clone() const;
\r
431 UINT16 GetCellAscent(INT style) const;
\r
432 UINT16 GetCellDescent(INT style) const;
\r
433 UINT16 GetEmHeight(INT style) const;
\r
434 Status GetFamilyName(WCHAR name[LF_FACESIZE],
\r
435 LANGID language = LANG_NEUTRAL) const;
\r
436 UINT16 GetLineSpacing(INT style) const;
\r
437 BOOL IsStyleAvailable(INT style) const;
\r
439 Status GetLastStatus() const
\r
441 Status result = lastStatus;
\r
445 BOOL IsAvailable() const
\r
447 return nativeFontFamily != NULL;
\r
451 FontFamily(GpFontFamily *fontFamily, Status status):
\r
452 nativeFontFamily(fontFamily), lastStatus(status) {}
\r
453 FontFamily(const FontFamily&);
\r
454 FontFamily& operator=(const FontFamily&);
\r
456 Status updateStatus(Status newStatus) const
\r
458 if (newStatus != Ok) lastStatus = newStatus;
\r
462 GpFontFamily *nativeFontFamily;
\r
463 mutable Status lastStatus;
\r
466 class InstalledFontCollection: public FontCollection
\r
469 InstalledFontCollection();
\r
470 virtual ~InstalledFontCollection() {}
\r
473 class PrivateFontCollection: public FontCollection
\r
476 PrivateFontCollection();
\r
478 virtual ~PrivateFontCollection()
\r
480 DllExports::GdipDeletePrivateFontCollection(&nativeFontCollection);
\r
483 Status AddFontFile(const WCHAR *filename);
\r
484 Status AddMemoryFont(const VOID *memory, INT length);
\r
487 class Region: public GdiplusBase
\r
489 friend class Graphics;
\r
492 static Region* FromHRGN(HRGN hrgn);
\r
495 Region(const RectF& rect);
\r
496 Region(const Rect& rect);
\r
497 Region(const GraphicsPath *path);
\r
498 Region(const BYTE *regionData, INT size);
\r
501 Region* Clone() const;
\r
503 Status Complement(const RectF& rect);
\r
504 Status Complement(const Rect& rect);
\r
505 Status Complement(const Region *region);
\r
506 Status Complement(const GraphicsPath *path);
\r
507 BOOL Equals(const Region *region, const Graphics *graphics) const;
\r
508 Status Exclude(const RectF& rect);
\r
509 Status Exclude(const Rect& rect);
\r
510 Status Exclude(const Region *region);
\r
511 Status Exclude(const GraphicsPath *path);
\r
512 Status GetBounds(RectF *rect, const Graphics *graphics) const;
\r
513 Status GetBounds(Rect *rect, const Graphics *graphics) const;
\r
514 Status GetData(BYTE *buffer, UINT bufferSize, UINT *sizeFilled) const;
\r
515 UINT GetDataSize() const;
\r
516 HRGN GetHRGN(const Graphics *graphics) const;
\r
517 Status GetRegionScans(const Matrix *matrix,
\r
518 RectF *rects, INT *count) const;
\r
519 Status GetRegionScans(const Matrix *matrix,
\r
520 Rect *rects, INT *count) const;
\r
521 UINT GetRegionScansCount(const Matrix *matrix) const;
\r
522 Status Intersect(const RectF& rect);
\r
523 Status Intersect(const Rect& rect);
\r
524 Status Intersect(const Region *region);
\r
525 Status Intersect(const GraphicsPath *path);
\r
526 BOOL IsEmpty(const Graphics *graphics) const;
\r
527 BOOL IsInfinite(const Graphics *graphics) const;
\r
528 BOOL IsVisible(REAL x, REAL y,
\r
529 const Graphics *graphics = NULL) const;
\r
530 BOOL IsVisible(INT x, INT y,
\r
531 const Graphics *graphics = NULL) const;
\r
532 BOOL IsVisible(const PointF& point,
\r
533 const Graphics *graphics = NULL) const;
\r
534 BOOL IsVisible(const Point& point,
\r
535 const Graphics *graphics = NULL) const;
\r
536 BOOL IsVisible(REAL x, REAL y, REAL width, REAL height,
\r
537 const Graphics *graphics = NULL) const;
\r
538 BOOL IsVisible(INT x, INT y, INT width, INT height,
\r
539 const Graphics *graphics = NULL) const;
\r
540 BOOL IsVisible(const RectF& rect,
\r
541 const Graphics *graphics = NULL) const;
\r
542 BOOL IsVisible(const Rect& rect,
\r
543 const Graphics *graphics = NULL) const;
\r
544 Status MakeEmpty();
\r
545 Status MakeInfinite();
\r
546 Status Transform(const Matrix *matrix);
\r
547 Status Translate(REAL dx, REAL dy);
\r
548 Status Translate(INT dx, INT dy);
\r
549 Status Union(const RectF& rect);
\r
550 Status Union(const Rect& rect);
\r
551 Status Union(const Region *region);
\r
552 Status Union(const GraphicsPath *path);
\r
553 Status Xor(const RectF& rect);
\r
554 Status Xor(const Rect& rect);
\r
555 Status Xor(const Region *region);
\r
556 Status Xor(const GraphicsPath *path);
\r
558 Status GetLastStatus() const
\r
560 Status result = lastStatus;
\r
566 Region(GpRegion *region, Status status):
\r
567 nativeRegion(region), lastStatus(status) {}
\r
568 Region(const Region&);
\r
569 Region& operator=(const Region&);
\r
571 Status updateStatus(Status newStatus) const
\r
573 if (newStatus != Ok) lastStatus = newStatus;
\r
577 GpRegion *nativeRegion;
\r
578 mutable Status lastStatus;
\r
581 #endif /* __GDIPLUS_HEADERS_H */
\r