| /**************************************************************************\ | |
| * | |
| * Copyright (c) 1998-2000, Microsoft Corp. All Rights Reserved. | |
| * | |
| * Module Name: | |
| * | |
| * GdiplusHeaders.h | |
| * | |
| * Abstract: | |
| * | |
| * GDI+ Native C++ public header file | |
| * | |
| \**************************************************************************/ | |
| #ifndef _GDIPLUSHEADERS_H | |
| #define _GDIPLUSHEADERS_H | |
| //-------------------------------------------------------------------------- | |
| // Abstract base class for regions | |
| //-------------------------------------------------------------------------- | |
| // Include the class declarations here and have inline class implementation | |
| // in separate file to avoid circular references. | |
| class Region : public GdiplusBase | |
| { | |
| public: | |
| friend class Graphics; | |
| Region(); | |
| Region(IN const RectF& rect); | |
| Region(IN const Rect& rect); | |
| Region(IN const GraphicsPath* path); | |
| Region(IN const BYTE* regionData, IN INT size); | |
| Region(IN HRGN hRgn); | |
| static Region* FromHRGN(IN HRGN hRgn); | |
| ~Region(); | |
| Region* Clone() const; | |
| Status MakeInfinite(); | |
| Status MakeEmpty(); | |
| // Get the size of the buffer needed for the GetData method | |
| UINT GetDataSize() const; | |
| // buffer - where to put the data | |
| // bufferSize - how big the buffer is (should be at least as big as GetDataSize()) | |
| // sizeFilled - if not NULL, this is an OUT param that says how many bytes | |
| // of data were written to the buffer. | |
| Status GetData(OUT BYTE* buffer, | |
| IN UINT bufferSize, | |
| OUT UINT* sizeFilled = NULL) const; | |
| Status Intersect(IN const Rect& rect); | |
| Status Intersect(IN const RectF& rect); | |
| Status Intersect(IN const GraphicsPath* path); | |
| Status Intersect(IN const Region* region); | |
| Status Union(IN const Rect& rect); | |
| Status Union(IN const RectF& rect); | |
| Status Union(IN const GraphicsPath* path); | |
| Status Union(IN const Region* region); | |
| Status Xor(IN const Rect& rect); | |
| Status Xor(IN const RectF& rect); | |
| Status Xor(IN const GraphicsPath* path); | |
| Status Xor(IN const Region* region); | |
| Status Exclude(IN const Rect& rect); | |
| Status Exclude(IN const RectF& rect); | |
| Status Exclude(IN const GraphicsPath* path); | |
| Status Exclude(IN const Region* region); | |
| Status Complement(IN const Rect& rect); | |
| Status Complement(IN const RectF& rect); | |
| Status Complement(IN const GraphicsPath* path); | |
| Status Complement(IN const Region* region); | |
| Status Translate(IN REAL dx, | |
| IN REAL dy); | |
| Status Translate(IN INT dx, | |
| IN INT dy); | |
| Status Transform(IN const Matrix* matrix); | |
| Status GetBounds(OUT Rect* rect, | |
| IN const Graphics* g) const; | |
| Status GetBounds(OUT RectF* rect, | |
| IN const Graphics* g) const; | |
| HRGN GetHRGN (IN const Graphics * g) const; | |
| BOOL IsEmpty(IN const Graphics *g) const; | |
| BOOL IsInfinite(IN const Graphics *g) const; | |
| BOOL IsVisible(IN INT x, | |
| IN INT y, | |
| IN const Graphics* g = NULL) const | |
| { | |
| return IsVisible(Point(x, y), g); | |
| } | |
| BOOL IsVisible(IN const Point& point, | |
| IN const Graphics* g = NULL) const; | |
| BOOL IsVisible(IN REAL x, | |
| IN REAL y, | |
| IN const Graphics* g = NULL) const | |
| { | |
| return IsVisible(PointF(x, y), g); | |
| } | |
| BOOL IsVisible(IN const PointF& point, | |
| IN const Graphics* g = NULL) const; | |
| BOOL IsVisible(IN INT x, | |
| IN INT y, | |
| IN INT width, | |
| IN INT height, | |
| IN const Graphics* g) const | |
| { | |
| return IsVisible(Rect(x, y, width, height), g); | |
| } | |
| BOOL IsVisible(IN const Rect& rect, | |
| IN const Graphics* g = NULL) const; | |
| BOOL IsVisible(IN REAL x, | |
| IN REAL y, | |
| IN REAL width, | |
| IN REAL height, | |
| IN const Graphics* g = NULL) const | |
| { | |
| return IsVisible(RectF(x, y, width, height), g); | |
| } | |
| BOOL IsVisible(IN const RectF& rect, | |
| IN const Graphics* g = NULL) const; | |
| BOOL Equals(IN const Region* region, | |
| IN const Graphics* g) const; | |
| UINT GetRegionScansCount(IN const Matrix* matrix) const; | |
| Status GetRegionScans(IN const Matrix* matrix, | |
| OUT RectF* rects, | |
| OUT INT* count) const; | |
| Status GetRegionScans(IN const Matrix* matrix, | |
| OUT Rect* rects, | |
| OUT INT* count) const; | |
| Status GetLastStatus() const; | |
| protected: | |
| #ifdef DCR_USE_NEW_250932 | |
| private: | |
| Region(const Region ®ion); | |
| Region& operator=(const Region ®ion); | |
| protected: | |
| #else | |
| Region(const Region ®ion) | |
| { | |
| region; // reference parameter | |
| SetStatus(NotImplemented); | |
| } | |
| Region& operator=(const Region ®ion) | |
| { | |
| region; // reference parameter | |
| SetStatus(NotImplemented); | |
| return *this; | |
| } | |
| #endif | |
| Status SetStatus(Status status) const | |
| { | |
| if (status != Ok) | |
| return (lastResult = status); | |
| else | |
| return status; | |
| } | |
| Region(GpRegion* nativeRegion); | |
| VOID SetNativeRegion(GpRegion* nativeRegion); | |
| protected: | |
| GpRegion* nativeRegion; | |
| mutable Status lastResult; | |
| }; | |
| //-------------------------------------------------------------------------- | |
| // Abstract base class for FontFamily | |
| //-------------------------------------------------------------------------- | |
| class FontFamily : public GdiplusBase | |
| { | |
| public: | |
| friend class Font; | |
| friend class Graphics; | |
| friend class GraphicsPath; | |
| friend class FontCollection; | |
| FontFamily(); | |
| FontFamily( | |
| IN const WCHAR *name, | |
| IN const FontCollection *fontCollection = NULL | |
| ); | |
| ~FontFamily(); | |
| static const FontFamily *GenericSansSerif(); | |
| static const FontFamily *GenericSerif(); | |
| static const FontFamily *GenericMonospace(); | |
| Status GetFamilyName( | |
| OUT WCHAR name[LF_FACESIZE], | |
| IN LANGID language = 0 | |
| ) const; | |
| // Copy operator | |
| FontFamily * Clone() const; | |
| BOOL IsAvailable() const | |
| { | |
| return (nativeFamily != NULL); | |
| }; | |
| BOOL IsStyleAvailable(IN INT style) const; | |
| UINT16 GetEmHeight (IN INT style) const; | |
| UINT16 GetCellAscent (IN INT style) const; | |
| UINT16 GetCellDescent (IN INT style) const; | |
| UINT16 GetLineSpacing (IN INT style) const; | |
| /////////////////////////////////////////////////////////// | |
| Status GetLastStatus() const; | |
| #ifdef DCR_USE_NEW_250932 | |
| private: | |
| FontFamily(const FontFamily &); | |
| FontFamily& operator=(const FontFamily &); | |
| #endif | |
| protected: | |
| Status SetStatus(Status status) const; | |
| // private constructor for copy | |
| FontFamily(GpFontFamily * nativeFamily, Status status); | |
| /////////////////////////////////////// | |
| // Data members | |
| protected: | |
| GpFontFamily *nativeFamily; | |
| mutable Status lastResult; | |
| }; | |
| static FontFamily *GenericSansSerifFontFamily = NULL; | |
| static FontFamily *GenericSerifFontFamily = NULL; | |
| static FontFamily *GenericMonospaceFontFamily = NULL; | |
| static BYTE GenericSansSerifFontFamilyBuffer[sizeof(FontFamily)] = {0}; | |
| static BYTE GenericSerifFontFamilyBuffer [sizeof(FontFamily)] = {0}; | |
| static BYTE GenericMonospaceFontFamilyBuffer[sizeof(FontFamily)] = {0}; | |
| //-------------------------------------------------------------------------- | |
| // Abstract base class for fonts | |
| //-------------------------------------------------------------------------- | |
| class Font : public GdiplusBase | |
| { | |
| public: | |
| friend class Graphics; | |
| Font(IN HDC hdc); | |
| Font(IN HDC hdc, | |
| IN const LOGFONTA* logfont); | |
| Font(IN HDC hdc, | |
| IN const LOGFONTW* logfont); | |
| #ifdef DCR_USE_NEW_127084 | |
| Font(IN HDC hdc, | |
| IN const HFONT hfont); | |
| #endif | |
| Font( | |
| IN const FontFamily * family, | |
| IN REAL emSize, | |
| IN INT style = FontStyleRegular, | |
| IN Unit unit = UnitPoint | |
| ); | |
| Font( | |
| IN const WCHAR * familyName, | |
| IN REAL emSize, | |
| IN INT style = FontStyleRegular, | |
| IN Unit unit = UnitPoint, | |
| IN const FontCollection * fontCollection = NULL | |
| ); | |
| Status GetLogFontA(IN const Graphics* g, | |
| OUT LOGFONTA * logfontA) const; | |
| Status GetLogFontW(IN const Graphics* g, | |
| OUT LOGFONTW * logfontW) const; | |
| Font* Clone() const; | |
| ~Font(); | |
| BOOL IsAvailable() const; | |
| INT GetStyle() const; | |
| REAL GetSize() const; | |
| Unit GetUnit() const; | |
| Status GetLastStatus() const; | |
| REAL GetHeight(IN const Graphics *graphics = NULL) const; | |
| #ifdef DCR_USE_NEW_125467 | |
| REAL GetHeight(IN REAL dpi) const; | |
| #endif | |
| Status GetFamily(OUT FontFamily *family) const; | |
| #ifdef DCR_USE_NEW_250932 | |
| private: | |
| Font(const Font &); | |
| Font& operator=(const Font &); | |
| #endif | |
| protected: | |
| Font(GpFont* font, Status status); | |
| VOID SetNativeFont(GpFont *Font); | |
| Status SetStatus(Status status) const; | |
| protected: | |
| /* | |
| * handle to native line texture object | |
| */ | |
| GpFont* nativeFont; | |
| mutable Status lastResult; | |
| }; | |
| //-------------------------------------------------------------------------- | |
| // Abstract base classes for font collections | |
| //-------------------------------------------------------------------------- | |
| class FontCollection : public GdiplusBase | |
| { | |
| public: | |
| friend class FontFamily; | |
| FontCollection(); | |
| virtual ~FontCollection(); | |
| INT GetFamilyCount() const; // number of enumerable families in the collection | |
| Status GetFamilies( // enumerate the fonts in a collection | |
| IN INT numSought, | |
| OUT FontFamily * gpfamilies, | |
| OUT INT * numFound | |
| ) const; | |
| Status GetLastStatus() const; | |
| #ifdef DCR_USE_NEW_250932 | |
| private: | |
| FontCollection(const FontCollection &); | |
| FontCollection& operator=(const FontCollection &); | |
| #endif | |
| protected: | |
| Status SetStatus(Status status) const ; | |
| GpFontCollection *nativeFontCollection; | |
| mutable Status lastResult; | |
| }; | |
| class InstalledFontCollection : public FontCollection | |
| { | |
| public: | |
| InstalledFontCollection(); | |
| ~InstalledFontCollection(); | |
| #ifdef DCR_USE_NEW_250932 | |
| private: | |
| InstalledFontCollection(const InstalledFontCollection &); | |
| InstalledFontCollection& operator=(const InstalledFontCollection &); | |
| #endif | |
| protected: | |
| #ifndef DCR_USE_NEW_235072 | |
| Status InstallFontFile(IN const WCHAR* filename); | |
| Status UninstallFontFile(IN const WCHAR* filename); | |
| #endif | |
| Status SetStatus(Status status) const ; | |
| }; | |
| class PrivateFontCollection : public FontCollection | |
| { | |
| public: | |
| PrivateFontCollection(); | |
| ~PrivateFontCollection(); | |
| Status AddFontFile(IN const WCHAR* filename); | |
| Status AddMemoryFont(IN const VOID* memory, | |
| IN INT length); | |
| #ifdef DCR_USE_NEW_250932 | |
| private: | |
| PrivateFontCollection(const PrivateFontCollection &); | |
| PrivateFontCollection& operator=(const PrivateFontCollection &); | |
| #endif | |
| }; | |
| //-------------------------------------------------------------------------- | |
| // Abstract base class for bitmap image and metafile | |
| //-------------------------------------------------------------------------- | |
| // !!! Note: | |
| // Include the class declarations here and have the inline class | |
| // implementation in a separate file. This is done to resolve a | |
| // circular dependency since one of the Bitmap methods needs to | |
| // access the private member nativeGraphics of the Graphics object. | |
| class Image : public GdiplusBase | |
| { | |
| public: | |
| friend class Brush; | |
| friend class TextureBrush; | |
| friend class Graphics; | |
| #ifndef DCR_USE_NEW_140782 | |
| Image( | |
| IN const WCHAR* filename | |
| ); | |
| Image( | |
| IN IStream* stream | |
| ); | |
| static Image* FromFile( | |
| IN const WCHAR* filename | |
| ); | |
| static Image* FromStream( | |
| IN IStream* stream | |
| ); | |
| #else | |
| Image( | |
| IN const WCHAR* filename, | |
| IN BOOL useEmbeddedColorManagement = FALSE | |
| ); | |
| Image( | |
| IN IStream* stream, | |
| IN BOOL useEmbeddedColorManagement = FALSE | |
| ); | |
| static Image* FromFile( | |
| IN const WCHAR* filename, | |
| IN BOOL useEmbeddedColorManagement = FALSE | |
| ); | |
| static Image* FromStream( | |
| IN IStream* stream, | |
| IN BOOL useEmbeddedColorManagement = FALSE | |
| ); | |
| #endif | |
| virtual ~Image(); | |
| virtual Image* Clone(); | |
| Status Save(IN const WCHAR* filename, | |
| IN const CLSID* clsidEncoder, | |
| IN const EncoderParameters *encoderParams = NULL); | |
| Status Save(IN IStream* stream, | |
| IN const CLSID* clsidEncoder, | |
| IN const EncoderParameters *encoderParams = NULL); | |
| Status SaveAdd(IN const EncoderParameters* encoderParams); | |
| Status SaveAdd(IN Image* newImage, | |
| IN const EncoderParameters* encoderParams); | |
| ImageType GetType() const; | |
| Status GetPhysicalDimension(OUT SizeF* size); | |
| Status GetBounds(OUT RectF* srcRect, | |
| OUT Unit* srcUnit); | |
| UINT GetWidth(); | |
| UINT GetHeight(); | |
| REAL GetHorizontalResolution(); | |
| REAL GetVerticalResolution(); | |
| UINT GetFlags(); | |
| Status GetRawFormat(OUT GUID *format); | |
| PixelFormat GetPixelFormat(); | |
| INT GetPaletteSize(); | |
| Status GetPalette(OUT ColorPalette* palette, | |
| IN INT size); | |
| Status SetPalette(IN const ColorPalette* palette); | |
| Image* GetThumbnailImage(IN UINT thumbWidth, | |
| IN UINT thumbHeight, | |
| IN GetThumbnailImageAbort callback = NULL, | |
| IN VOID* callbackData = NULL); | |
| UINT GetFrameDimensionsCount(); | |
| Status GetFrameDimensionsList(OUT GUID* dimensionIDs, | |
| IN UINT count); | |
| UINT GetFrameCount(IN const GUID* dimensionID); | |
| Status SelectActiveFrame(IN const GUID* dimensionID, | |
| IN UINT frameIndex); | |
| Status RotateFlip(IN RotateFlipType rotateFlipType); | |
| UINT GetPropertyCount(); | |
| Status GetPropertyIdList(IN UINT numOfProperty, | |
| OUT PROPID* list); | |
| UINT GetPropertyItemSize(IN PROPID propId); | |
| Status GetPropertyItem(IN PROPID propId, | |
| IN UINT propSize, | |
| OUT PropertyItem* buffer); | |
| Status GetPropertySize(OUT UINT* totalBufferSize, | |
| OUT UINT* numProperties); | |
| Status GetAllPropertyItems(IN UINT totalBufferSize, | |
| IN UINT numProperties, | |
| OUT PropertyItem* allItems); | |
| Status RemovePropertyItem(IN PROPID propId); | |
| Status SetPropertyItem(IN const PropertyItem* item); | |
| UINT GetEncoderParameterListSize(IN const CLSID* clsidEncoder); | |
| Status GetEncoderParameterList(IN const CLSID* clsidEncoder, | |
| IN UINT size, | |
| OUT EncoderParameters* buffer); | |
| // Support for Middle East localization (right-to-left mirroring) | |
| ImageLayout GetLayout() const; | |
| Status SetLayout(IN const ImageLayout layout); | |
| Status GetLastStatus() const; | |
| protected: | |
| Image() {} | |
| Image(GpImage *nativeImage, Status status); | |
| VOID SetNativeImage(GpImage* nativeImage); | |
| Status SetStatus(Status status) const | |
| { | |
| if (status != Ok) | |
| return (lastResult = status); | |
| else | |
| return status; | |
| } | |
| GpImage* nativeImage; | |
| mutable Status lastResult; | |
| mutable Status loadStatus; | |
| #ifdef DCR_USE_NEW_250932 | |
| private: | |
| #else | |
| protected: | |
| #endif | |
| // Disable copy constructor and assignment operator | |
| Image(IN const Image& C); | |
| Image& operator=(IN const Image& C); | |
| }; | |
| class Bitmap : public Image | |
| { | |
| public: | |
| friend class Image; | |
| friend class CachedBitmap; | |
| Bitmap( | |
| IN const WCHAR *filename, | |
| IN BOOL useEmbeddedColorManagement = FALSE | |
| ); | |
| Bitmap( | |
| IN IStream *stream, | |
| IN BOOL useEmbeddedColorManagement = FALSE | |
| ); | |
| static Bitmap* FromFile( | |
| IN const WCHAR *filename, | |
| IN BOOL useEmbeddedColorManagement = FALSE | |
| ); | |
| static Bitmap* FromStream( | |
| IN IStream *stream, | |
| IN BOOL useEmbeddedColorManagement = FALSE | |
| ); | |
| Bitmap(IN INT width, | |
| IN INT height, | |
| IN INT stride, PixelFormat format, | |
| IN BYTE* scan0); | |
| Bitmap(IN INT width, | |
| IN INT height, | |
| IN PixelFormat format = PixelFormat32bppARGB); | |
| Bitmap(IN INT width, | |
| IN INT height, | |
| IN Graphics* target); | |
| Bitmap* Clone(IN const Rect& rect, | |
| IN PixelFormat format); | |
| Bitmap* Clone(IN INT x, | |
| IN INT y, | |
| IN INT width, | |
| IN INT height, | |
| IN PixelFormat format); | |
| Bitmap* Clone(IN const RectF& rect, | |
| IN PixelFormat format); | |
| Bitmap* Clone(IN REAL x, | |
| IN REAL y, | |
| IN REAL width, | |
| IN REAL height, | |
| IN PixelFormat format); | |
| Status LockBits(IN const Rect& rect, | |
| IN UINT flags, | |
| IN PixelFormat format, | |
| OUT BitmapData* lockedBitmapData); | |
| Status UnlockBits(IN BitmapData* lockedBitmapData); | |
| Status GetPixel(IN INT x, | |
| IN INT y, | |
| OUT Color *color); | |
| Status SetPixel(IN INT x, | |
| IN INT y, | |
| IN const Color &color); | |
| Status SetResolution(IN REAL xdpi, | |
| IN REAL ydpi); | |
| // GDI interop: | |
| Bitmap(IN IDirectDrawSurface7* surface); | |
| Bitmap(IN const BITMAPINFO* gdiBitmapInfo, | |
| IN VOID* gdiBitmapData); | |
| Bitmap(IN HBITMAP hbm, | |
| IN HPALETTE hpal); | |
| Bitmap(IN HICON hicon); | |
| Bitmap(IN HINSTANCE hInstance, | |
| IN const WCHAR * bitmapName); | |
| static Bitmap* FromDirectDrawSurface7(IN IDirectDrawSurface7* surface); | |
| static Bitmap* FromBITMAPINFO(IN const BITMAPINFO* gdiBitmapInfo, | |
| IN VOID* gdiBitmapData); | |
| static Bitmap* FromHBITMAP(IN HBITMAP hbm, | |
| IN HPALETTE hpal); | |
| static Bitmap* FromHICON(IN HICON hicon); | |
| static Bitmap* FromResource(IN HINSTANCE hInstance, | |
| IN const WCHAR * bitmapName); | |
| Status GetHBITMAP(IN const Color& colorBackground, | |
| OUT HBITMAP *hbmReturn); | |
| Status GetHICON(HICON *hicon); | |
| #ifdef DCR_USE_NEW_250932 | |
| private: | |
| Bitmap(const Bitmap &); | |
| Bitmap& operator=(const Bitmap &); | |
| #endif | |
| protected: | |
| Bitmap(GpBitmap *nativeBitmap); | |
| }; | |
| class CustomLineCap : public GdiplusBase | |
| { | |
| public: | |
| friend class Pen; | |
| CustomLineCap( | |
| IN const GraphicsPath* fillPath, | |
| IN const GraphicsPath* strokePath, | |
| IN LineCap baseCap = LineCapFlat, | |
| IN REAL baseInset = 0 | |
| ); | |
| virtual ~CustomLineCap(); | |
| CustomLineCap* Clone() const; | |
| Status SetStrokeCap(IN LineCap strokeCap) | |
| { | |
| // This changes both start and and caps. | |
| return SetStrokeCaps(strokeCap, strokeCap); | |
| } | |
| Status SetStrokeCaps(IN LineCap startCap, | |
| IN LineCap endCap); | |
| Status GetStrokeCaps(OUT LineCap* startCap, | |
| OUT LineCap* endCap) const; | |
| Status SetStrokeJoin(IN LineJoin lineJoin); | |
| LineJoin GetStrokeJoin() const; | |
| Status SetBaseCap(IN LineCap baseCap); | |
| LineCap GetBaseCap() const; | |
| Status SetBaseInset(IN REAL inset); | |
| REAL GetBaseInset() const; | |
| Status SetWidthScale(IN REAL widthScale); | |
| REAL GetWidthScale() const; | |
| protected: | |
| CustomLineCap(); | |
| #ifdef DCR_USE_NEW_250932 | |
| private: | |
| CustomLineCap(const CustomLineCap &); | |
| CustomLineCap& operator=(const CustomLineCap &); | |
| protected: | |
| #else | |
| CustomLineCap(const CustomLineCap& customLineCap) | |
| { | |
| customLineCap; | |
| SetStatus(NotImplemented); | |
| } | |
| CustomLineCap& operator=(const CustomLineCap& customLineCap) | |
| { | |
| customLineCap; | |
| SetStatus(NotImplemented); | |
| return *this; | |
| } | |
| #endif | |
| CustomLineCap(GpCustomLineCap* nativeCap, Status status) | |
| { | |
| lastResult = status; | |
| SetNativeCap(nativeCap); | |
| } | |
| VOID SetNativeCap(GpCustomLineCap* nativeCap) | |
| { | |
| this->nativeCap = nativeCap; | |
| } | |
| Status SetStatus(Status status) const | |
| { | |
| if (status != Ok) | |
| return (lastResult = status); | |
| else | |
| return status; | |
| } | |
| protected: | |
| GpCustomLineCap* nativeCap; | |
| mutable Status lastResult; | |
| }; | |
| class CachedBitmap : public GdiplusBase | |
| { | |
| friend Graphics; | |
| public: | |
| CachedBitmap(IN Bitmap *bitmap, | |
| IN Graphics *graphics); | |
| virtual ~CachedBitmap(); | |
| Status GetLastStatus() const; | |
| #ifdef DCR_USE_NEW_250932 | |
| private: | |
| CachedBitmap(const CachedBitmap &); | |
| CachedBitmap& operator=(const CachedBitmap &); | |
| #endif | |
| protected: | |
| GpCachedBitmap *nativeCachedBitmap; | |
| mutable Status lastResult; | |
| }; | |
| #endif // !_GDIPLUSHEADERS.HPP |