summaryrefslogtreecommitdiffstats
path: root/winsup/w32api/include/gdiplus/gdiplusheaders.h
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/w32api/include/gdiplus/gdiplusheaders.h')
-rwxr-xr-xwinsup/w32api/include/gdiplus/gdiplusheaders.h581
1 files changed, 581 insertions, 0 deletions
diff --git a/winsup/w32api/include/gdiplus/gdiplusheaders.h b/winsup/w32api/include/gdiplus/gdiplusheaders.h
new file mode 100755
index 000000000..92de81ae4
--- /dev/null
+++ b/winsup/w32api/include/gdiplus/gdiplusheaders.h
@@ -0,0 +1,581 @@
+/*
+ * gdiplusheaders.h
+ *
+ * GDI+ Bitmap, CachedBitmap, CustomLineCap, Font, FontCollection,
+ * FontFamily, Image, InstalledFontCollection, PrivateFontCollection,
+ * Region class definitions.
+ * Implementation of these classes is in gdiplusimpl.h.
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_HEADERS_H
+#define __GDIPLUS_HEADERS_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifndef __cplusplus
+#error "A C++ compiler is required to include gdiplusheaders.h."
+#endif
+
+/*
+ * Note: Virtual inline functions (dtors, Clone()) are implemented here: If
+ * these were defined outside class scope, the compiler would always generate
+ * code for them (and the vtable), even if these classes were never used.
+ */
+
+class Bitmap;
+class Effect;
+class FontCollection;
+class FontFamily;
+class Graphics;
+class GraphicsPath;
+class Matrix;
+class Pen;
+
+class Image: public GdiplusBase
+{
+ friend class Bitmap;
+ friend class Metafile;
+ friend class CachedBitmap;
+ friend class Graphics;
+ friend class TextureBrush;
+
+public:
+ static Image* FromFile(const WCHAR *filename,
+ BOOL useEmbeddedColorManagement = FALSE);
+ static Image* FromStream(IStream *stream,
+ BOOL useEmbeddedColorManagement = FALSE);
+
+ Image(const WCHAR *filename, BOOL useEmbeddedColorManagement = FALSE);
+ Image(IStream *stream, BOOL useEmbeddedColorManagement = FALSE);
+
+ virtual ~Image()
+ {
+ DllExports::GdipDisposeImage(nativeImage);
+ }
+ virtual Image* Clone() const
+ {
+ GpImage *cloneImage = NULL;
+ Status status = updateStatus(DllExports::GdipCloneImage(
+ nativeImage, &cloneImage));
+ if (status == Ok) {
+ Image *result = new Image(cloneImage, lastStatus);
+ if (!result) {
+ DllExports::GdipDisposeImage(cloneImage);
+ lastStatus = OutOfMemory;
+ }
+ return result;
+ } else {
+ return NULL;
+ }
+ }
+
+ Status FindFirstItem(ImageItemData *item);
+ Status FindNextItem(ImageItemData *item);
+ Status GetAllPropertyItems(UINT totalBufferSize,
+ UINT numProperties, PropertyItem *allItems);
+ Status GetBounds(RectF *srcRect, Unit *srcUnit);
+ Status GetEncoderParameterList(const CLSID *clsidEncoder,
+ UINT size, EncoderParameters *buffer);
+ UINT GetEncoderParameterListSize(const CLSID *clsidEncoder);
+ UINT GetFlags();
+ UINT GetFrameCount(const GUID *dimensionID);
+ UINT GetFrameDimensionsCount();
+ Status GetFrameDimensionsList(GUID *dimensionIDs, UINT count);
+ UINT GetHeight();
+ REAL GetHorizontalResolution();
+ Status GetItemData(ImageItemData *item);
+ Status GetPalette(ColorPalette *palette, INT size);
+ INT GetPaletteSize();
+ Status GetPhysicalDimension(SizeF *size);
+ PixelFormat GetPixelFormat();
+ UINT GetPropertyCount();
+ Status GetPropertyIdList(UINT numOfProperty, PROPID *list);
+ Status GetPropertyItem(PROPID propId, UINT propSize,
+ PropertyItem *buffer);
+ UINT GetPropertyItemSize(PROPID propId);
+ Status GetPropertySize(UINT *totalBufferSize, UINT *numProperties);
+ Status GetRawFormat(GUID *format);
+ Image* GetThumbnailImage(UINT thumbWidth, UINT thumbHeight,
+ GetThumbnailImageAbort callback, VOID *callbackData);
+ ImageType GetType() const;
+ REAL GetVerticalResolution();
+ UINT GetWidth();
+ Status RemovePropertyItem(PROPID propId);
+ Status RotateFlip(RotateFlipType rotateFlipType);
+ Status Save(IStream *stream, const CLSID *clsidEncoder,
+ const EncoderParameters *encoderParams);
+ Status Save(const WCHAR *filename, const CLSID *clsidEncoder,
+ const EncoderParameters *encoderParams);
+ Status SaveAdd(const EncoderParameters *encoderParams);
+ Status SaveAdd(Image *newImage, const EncoderParameters *encoderParams);
+ Status SelectActiveFrame(const GUID *dimensionID, UINT frameIndex);
+ Status SetAbort(GdiplusAbort *pIAbort);
+ Status SetPalette(const ColorPalette *palette);
+ Status SetPropertyItem(const PropertyItem *item);
+
+ Status GetLastStatus() const
+ {
+ Status result = lastStatus;
+ lastStatus = Ok;
+ return result;
+ }
+
+private:
+ Image(GpImage *image, Status status):
+ nativeImage(image), lastStatus(status) {}
+ Image(const Image&);
+ Image& operator=(const Image&);
+
+ Status updateStatus(Status newStatus) const
+ {
+ if (newStatus != Ok) lastStatus = newStatus;
+ return newStatus;
+ }
+
+ GpImage *nativeImage;
+ mutable Status lastStatus;
+};
+
+class Bitmap: public Image
+{
+public:
+ static Bitmap* FromBITMAPINFO(const BITMAPINFO *gdiBitmapInfo,
+ VOID *gdiBitmapData);
+ static Bitmap* FromDirectDrawSurface7(IDirectDrawSurface7 *surface);
+ static Bitmap* FromFile(const WCHAR *filename,
+ BOOL useEmbeddedColorManagement = FALSE);
+ static Bitmap* FromHBITMAP(HBITMAP hbm, HPALETTE hpal);
+ static Bitmap* FromHICON(HICON icon);
+ static Bitmap* FromResource(HINSTANCE hInstance,
+ const WCHAR *bitmapName);
+ static Bitmap* FromStream(IStream *stream,
+ BOOL useEmbeddedColorManagement = FALSE);
+ static Status ApplyEffect(Bitmap **inputs, INT numInputs,
+ Effect *effect, RECT *ROI,
+ RECT *outputRect, Bitmap **output);
+ static Status InitializePalette(ColorPalette *palette,
+ PaletteType paletteType, INT optimalColors,
+ BOOL useTransparentColor, Bitmap *bitmap);
+
+ Bitmap(const BITMAPINFO *gdiBitmapInfo, VOID *gdiBitmapData);
+ Bitmap(IDirectDrawSurface7 *surface);
+ Bitmap(const WCHAR *filename, BOOL useEmbeddedColorManagement = FALSE);
+ Bitmap(HBITMAP hbm, HPALETTE hpal);
+ Bitmap(HICON hicon);
+ Bitmap(HINSTANCE hInstance, const WCHAR *bitmapName);
+ Bitmap(IStream *stream, BOOL useEmbeddedColorManagement = FALSE);
+ Bitmap(INT width, INT height, Graphics *target);
+ Bitmap(INT width, INT height, PixelFormat format = PixelFormat32bppARGB);
+ Bitmap(INT width, INT height, INT stride, PixelFormat format, BYTE *scan0);
+
+ virtual ~Bitmap()
+ {
+ }
+ virtual Bitmap* Clone() const
+ {
+ GpImage *cloneImage = NULL;
+ Status status = updateStatus(DllExports::GdipCloneImage(
+ nativeImage, &cloneImage));
+ if (status == Ok) {
+ Bitmap *result = new Bitmap(cloneImage, lastStatus);
+ if (!result) {
+ DllExports::GdipDisposeImage(cloneImage);
+ lastStatus = OutOfMemory;
+ }
+ return result;
+ } else {
+ return NULL;
+ }
+ }
+
+ Bitmap* Clone(const RectF& rect, PixelFormat format) const;
+ Bitmap* Clone(const Rect& rect, PixelFormat format) const;
+ Bitmap* Clone(REAL x, REAL y, REAL width, REAL height,
+ PixelFormat format) const;
+ Bitmap* Clone(INT x, INT y, INT width, INT height,
+ PixelFormat format) const;
+
+ Status ApplyEffect(Effect *effect, RECT *ROI);
+ Status ConvertFormat(PixelFormat format, DitherType ditherType,
+ PaletteType paletteType, ColorPalette *palette,
+ REAL alphaThresholdPercent);
+ Status GetHBITMAP(const Color& colorBackground, HBITMAP *hbmReturn) const;
+ Status GetHICON(HICON *icon) const;
+ Status GetHistogram(HistogramFormat format, UINT numberOfEntries,
+ UINT *channel0, UINT *channel1,
+ UINT *channel2, UINT *channel3) const;
+ Status GetHistogramSize(HistogramFormat format,
+ UINT *numberOfEntries) const;
+ Status GetPixel(INT x, INT y, Color *color) const;
+ Status LockBits(const Rect *rect, UINT flags, PixelFormat format,
+ BitmapData *lockedBitmapData);
+ Status SetPixel(INT x, INT y, const Color& color);
+ Status SetResolution(REAL xdpi, REAL ydpi);
+ Status UnlockBits(BitmapData *lcokedBitmapData);
+
+private:
+ Bitmap(GpImage *image, Status status): Image(image, status) {}
+ Bitmap(const Bitmap&);
+ Bitmap& operator=(const Bitmap&);
+};
+
+class CachedBitmap: public GdiplusBase
+{
+ friend class Graphics;
+
+public:
+ CachedBitmap(Bitmap *bitmap, Graphics *graphics);
+ ~CachedBitmap();
+
+ Status GetLastStatus() const
+ {
+ return lastStatus;
+ }
+
+private:
+ CachedBitmap(const CachedBitmap&);
+ CachedBitmap& operator=(const CachedBitmap&);
+
+ GpCachedBitmap *nativeCachedBitmap;
+ Status lastStatus;
+};
+
+class CustomLineCap: public GdiplusBase
+{
+ friend class AdjustableArrowCap;
+ friend class Pen;
+
+public:
+ CustomLineCap(const GraphicsPath *fillPath,
+ const GraphicsPath *strokePath,
+ LineCap baseCap = LineCapFlat,
+ REAL baseInset = 0.0f);
+
+ virtual ~CustomLineCap()
+ {
+ DllExports::GdipDeleteCustomLineCap(nativeCustomLineCap);
+ }
+ virtual CustomLineCap* Clone() const
+ {
+ GpCustomLineCap *cloneCustomLineCap = NULL;
+ Status status = updateStatus(DllExports::GdipCloneCustomLineCap(
+ nativeCustomLineCap, &cloneCustomLineCap));
+ if (status == Ok) {
+ CustomLineCap *result = new CustomLineCap(
+ cloneCustomLineCap, lastStatus);
+ if (!result) {
+ DllExports::GdipDeleteCustomLineCap(cloneCustomLineCap);
+ lastStatus = OutOfMemory;
+ }
+ return result;
+ } else {
+ return NULL;
+ }
+ }
+
+ LineCap GetBaseCap() const;
+ REAL GetBaseInset() const;
+ Status GetStrokeCaps(LineCap *startCap, LineCap *endCap) const;
+ LineJoin GetStrokeJoin() const;
+ REAL GetWidthScale() const;
+ Status SetBaseCap(LineCap baseCap);
+ Status SetBaseInset(REAL inset);
+ Status SetStrokeCap(LineCap strokeCap);
+ Status SetStrokeCaps(LineCap startCap, LineCap endCap);
+ Status SetStrokeJoin(LineJoin lineJoin);
+ Status SetWidthScale(REAL widthScale);
+
+ Status GetLastStatus() const
+ {
+ Status result = lastStatus;
+ lastStatus = Ok;
+ return result;
+ }
+
+private:
+ CustomLineCap(GpCustomLineCap *customLineCap, Status status):
+ nativeCustomLineCap(customLineCap), lastStatus(status) {}
+ CustomLineCap(const CustomLineCap&);
+ CustomLineCap& operator=(const CustomLineCap&);
+
+ Status updateStatus(Status newStatus) const
+ {
+ if (newStatus != Ok) lastStatus = newStatus;
+ return newStatus;
+ }
+
+ GpCustomLineCap *nativeCustomLineCap;
+ mutable Status lastStatus;
+};
+
+class Font: public GdiplusBase
+{
+ friend class Graphics;
+
+public:
+ Font(const FontFamily *family, REAL emSize,
+ INT style = FontStyleRegular,
+ Unit unit = UnitPoint);
+ Font(HDC hdc, HFONT hfont);
+ Font(HDC hdc, const LOGFONTA *logfont);
+ Font(HDC hdc, const LOGFONTW *logfont);
+ Font(HDC hdc);
+ Font(const WCHAR *familyName, REAL emSize,
+ INT style = FontStyleRegular,
+ Unit unit = UnitPoint,
+ const FontCollection *fontCollection = NULL);
+ ~Font();
+ Font* Clone() const;
+
+ Status GetFamily(FontFamily *family) const;
+ REAL GetHeight(const Graphics *graphics) const;
+ REAL GetHeight(REAL dpi) const;
+ Status GetLogFontA(const Graphics *graphics, LOGFONTA *logfontA) const;
+ Status GetLogFontW(const Graphics *graphics, LOGFONTW *logfontW) const;
+ REAL GetSize() const;
+ INT GetStyle() const;
+ Unit GetUnit() const;
+
+ Status GetLastStatus() const
+ {
+ return lastStatus;
+ }
+ BOOL IsAvailable() const
+ {
+ return nativeFont != NULL;
+ }
+
+private:
+ Font(GpFont *font, Status status):
+ nativeFont(font), lastStatus(status) {}
+ Font(const Font&);
+ Font& operator=(const Font&);
+
+ Status updateStatus(Status newStatus) const
+ {
+ if (newStatus != Ok) lastStatus = newStatus;
+ return newStatus;
+ }
+
+ GpFont *nativeFont;
+ mutable Status lastStatus;
+};
+
+class FontCollection: public GdiplusBase
+{
+ friend class InstalledFontCollection;
+ friend class PrivateFontCollection;
+ friend class Font;
+ friend class FontFamily;
+
+public:
+ FontCollection();
+ virtual ~FontCollection() {}
+
+ Status GetFamilies(INT numSought, FontFamily *families,
+ INT *numFound) const;
+ INT GetFamilyCount() const;
+
+ Status GetLastStatus() const
+ {
+ return lastStatus;
+ }
+
+private:
+ FontCollection(const FontCollection&);
+ FontCollection& operator=(const FontCollection&);
+
+ Status updateStatus(Status newStatus) const
+ {
+ return lastStatus = newStatus;
+ }
+
+ GpFontCollection *nativeFontCollection;
+ mutable Status lastStatus;
+};
+
+class FontFamily: public GdiplusBase
+{
+ friend class Font;
+ friend class FontCollection;
+ friend class GraphicsPath;
+
+public:
+ static const FontFamily* GenericMonospace();
+ static const FontFamily* GenericSansSerif();
+ static const FontFamily* GenericSerif();
+
+ FontFamily();
+ FontFamily(const WCHAR *name,
+ const FontCollection *fontCollection = NULL);
+ ~FontFamily();
+ FontFamily* Clone() const;
+
+ UINT16 GetCellAscent(INT style) const;
+ UINT16 GetCellDescent(INT style) const;
+ UINT16 GetEmHeight(INT style) const;
+ Status GetFamilyName(WCHAR name[LF_FACESIZE],
+ LANGID language = LANG_NEUTRAL) const;
+ UINT16 GetLineSpacing(INT style) const;
+ BOOL IsStyleAvailable(INT style) const;
+
+ Status GetLastStatus() const
+ {
+ Status result = lastStatus;
+ lastStatus = Ok;
+ return result;
+ }
+ BOOL IsAvailable() const
+ {
+ return nativeFontFamily != NULL;
+ }
+
+private:
+ FontFamily(GpFontFamily *fontFamily, Status status):
+ nativeFontFamily(fontFamily), lastStatus(status) {}
+ FontFamily(const FontFamily&);
+ FontFamily& operator=(const FontFamily&);
+
+ Status updateStatus(Status newStatus) const
+ {
+ if (newStatus != Ok) lastStatus = newStatus;
+ return newStatus;
+ }
+
+ GpFontFamily *nativeFontFamily;
+ mutable Status lastStatus;
+};
+
+class InstalledFontCollection: public FontCollection
+{
+public:
+ InstalledFontCollection();
+ virtual ~InstalledFontCollection() {}
+};
+
+class PrivateFontCollection: public FontCollection
+{
+public:
+ PrivateFontCollection();
+
+ virtual ~PrivateFontCollection()
+ {
+ DllExports::GdipDeletePrivateFontCollection(&nativeFontCollection);
+ }
+
+ Status AddFontFile(const WCHAR *filename);
+ Status AddMemoryFont(const VOID *memory, INT length);
+};
+
+class Region: public GdiplusBase
+{
+ friend class Graphics;
+
+public:
+ static Region* FromHRGN(HRGN hrgn);
+
+ Region();
+ Region(const RectF& rect);
+ Region(const Rect& rect);
+ Region(const GraphicsPath *path);
+ Region(const BYTE *regionData, INT size);
+ Region(HRGN hrgn);
+ ~Region();
+ Region* Clone() const;
+
+ Status Complement(const RectF& rect);
+ Status Complement(const Rect& rect);
+ Status Complement(const Region *region);
+ Status Complement(const GraphicsPath *path);
+ BOOL Equals(const Region *region, const Graphics *graphics) const;
+ Status Exclude(const RectF& rect);
+ Status Exclude(const Rect& rect);
+ Status Exclude(const Region *region);
+ Status Exclude(const GraphicsPath *path);
+ Status GetBounds(RectF *rect, const Graphics *graphics) const;
+ Status GetBounds(Rect *rect, const Graphics *graphics) const;
+ Status GetData(BYTE *buffer, UINT bufferSize, UINT *sizeFilled) const;
+ UINT GetDataSize() const;
+ HRGN GetHRGN(const Graphics *graphics) const;
+ Status GetRegionScans(const Matrix *matrix,
+ RectF *rects, INT *count) const;
+ Status GetRegionScans(const Matrix *matrix,
+ Rect *rects, INT *count) const;
+ UINT GetRegionScansCount(const Matrix *matrix) const;
+ Status Intersect(const RectF& rect);
+ Status Intersect(const Rect& rect);
+ Status Intersect(const Region *region);
+ Status Intersect(const GraphicsPath *path);
+ BOOL IsEmpty(const Graphics *graphics) const;
+ BOOL IsInfinite(const Graphics *graphics) const;
+ BOOL IsVisible(REAL x, REAL y,
+ const Graphics *graphics = NULL) const;
+ BOOL IsVisible(INT x, INT y,
+ const Graphics *graphics = NULL) const;
+ BOOL IsVisible(const PointF& point,
+ const Graphics *graphics = NULL) const;
+ BOOL IsVisible(const Point& point,
+ const Graphics *graphics = NULL) const;
+ BOOL IsVisible(REAL x, REAL y, REAL width, REAL height,
+ const Graphics *graphics = NULL) const;
+ BOOL IsVisible(INT x, INT y, INT width, INT height,
+ const Graphics *graphics = NULL) const;
+ BOOL IsVisible(const RectF& rect,
+ const Graphics *graphics = NULL) const;
+ BOOL IsVisible(const Rect& rect,
+ const Graphics *graphics = NULL) const;
+ Status MakeEmpty();
+ Status MakeInfinite();
+ Status Transform(const Matrix *matrix);
+ Status Translate(REAL dx, REAL dy);
+ Status Translate(INT dx, INT dy);
+ Status Union(const RectF& rect);
+ Status Union(const Rect& rect);
+ Status Union(const Region *region);
+ Status Union(const GraphicsPath *path);
+ Status Xor(const RectF& rect);
+ Status Xor(const Rect& rect);
+ Status Xor(const Region *region);
+ Status Xor(const GraphicsPath *path);
+
+ Status GetLastStatus() const
+ {
+ Status result = lastStatus;
+ lastStatus = Ok;
+ return result;
+ }
+
+private:
+ Region(GpRegion *region, Status status):
+ nativeRegion(region), lastStatus(status) {}
+ Region(const Region&);
+ Region& operator=(const Region&);
+
+ Status updateStatus(Status newStatus) const
+ {
+ if (newStatus != Ok) lastStatus = newStatus;
+ return newStatus;
+ }
+
+ GpRegion *nativeRegion;
+ mutable Status lastStatus;
+};
+
+#endif /* __GDIPLUS_HEADERS_H */