git-svn-id: file:///srv/caca.zoy.org/var/lib/svn/libpipi/trunk@3072 92316355-f0b4-4df1-b90c-862c8a59935fremotes/tiles
| @@ -0,0 +1,156 @@ | |||
| /**************************************************************************\ | |||
| * | |||
| * Copyright (c) 1998-2000, Microsoft Corp. All Rights Reserved. | |||
| * | |||
| * Module Name: | |||
| * | |||
| * Gdiplus.h | |||
| * | |||
| * Abstract: | |||
| * | |||
| * GDI+ Native C++ public header file | |||
| * | |||
| \**************************************************************************/ | |||
| #ifndef _GDIPLUS_H | |||
| #define _GDIPLUS_H | |||
| struct IDirectDrawSurface7; | |||
| typedef signed short INT16; | |||
| typedef unsigned short UINT16; | |||
| #ifndef DCR_REMOVE_INTERNAL | |||
| #ifndef DCR_USE_NEW_105760 | |||
| #define DCR_USE_NEW_105760 | |||
| #endif | |||
| #ifndef DCR_USE_NEW_127084 | |||
| #define DCR_USE_NEW_127084 | |||
| #endif | |||
| #ifndef DCR_USE_NEW_135429 | |||
| #define DCR_USE_NEW_135429 | |||
| #endif | |||
| #ifndef DCR_USE_NEW_140782 | |||
| #define DCR_USE_NEW_140782 | |||
| #endif | |||
| #ifndef DCR_USE_NEW_140855 | |||
| #define DCR_USE_NEW_140855 | |||
| #endif | |||
| #ifndef DCR_USE_NEW_140857 | |||
| #define DCR_USE_NEW_140857 | |||
| #endif | |||
| #ifndef DCR_USE_NEW_140861 | |||
| #define DCR_USE_NEW_140861 | |||
| #endif | |||
| #ifndef DCR_USE_NEW_145135 | |||
| #define DCR_USE_NEW_145135 | |||
| #endif | |||
| #ifndef DCR_USE_NEW_145138 | |||
| #define DCR_USE_NEW_145138 | |||
| #endif | |||
| #ifndef DCR_USE_NEW_145139 | |||
| #define DCR_USE_NEW_145139 | |||
| #endif | |||
| #ifndef DCR_USE_NEW_145804 | |||
| #define DCR_USE_NEW_145804 | |||
| #endif | |||
| #ifndef DCR_USE_NEW_146933 | |||
| #define DCR_USE_NEW_146933 | |||
| #endif | |||
| #ifndef DCR_USE_NEW_152154 | |||
| #define DCR_USE_NEW_152154 | |||
| #endif | |||
| #ifndef DCR_USE_NEW_175866 | |||
| #define DCR_USE_NEW_175866 | |||
| #endif | |||
| #ifndef DCR_USE_NEW_188922 | |||
| #define DCR_USE_NEW_188922 | |||
| #endif | |||
| #ifndef DCR_USE_NEW_137252 | |||
| #define DCR_USE_NEW_137252 | |||
| #endif | |||
| #ifndef DCR_USE_NEW_202903 | |||
| #define DCR_USE_NEW_202903 | |||
| #endif | |||
| #ifndef DCR_USE_NEW_197819 | |||
| #define DCR_USE_NEW_197819 | |||
| #endif | |||
| #ifndef DCR_USE_NEW_186091 | |||
| #define DCR_USE_NEW_186091 | |||
| #endif | |||
| #ifndef DCR_USE_NEW_125467 | |||
| #define DCR_USE_NEW_125467 | |||
| #endif | |||
| #ifndef DCR_USE_NEW_168772 | |||
| #define DCR_USE_NEW_168772 | |||
| #endif | |||
| #ifndef DCR_USE_NEW_186764 | |||
| #define DCR_USE_NEW_186764 | |||
| #endif | |||
| #ifndef DCR_USE_NEW_174340 | |||
| #define DCR_USE_NEW_174340 | |||
| #endif | |||
| #ifndef DCR_USE_NEW_186151 | |||
| #define DCR_USE_NEW_186151 | |||
| #endif | |||
| #ifndef DCR_USE_NEW_235072 | |||
| #define DCR_USE_NEW_235072 | |||
| #endif | |||
| #endif // DCR_REMOVE_INTERNAL | |||
| namespace Gdiplus | |||
| { | |||
| namespace DllExports | |||
| { | |||
| #include "GdiplusMem.h" | |||
| }; | |||
| #include "GdiplusBase.h" | |||
| // The following headers are used internally as well | |||
| #include "GdiplusEnums.h" | |||
| #include "GdiplusTypes.h" | |||
| #include "GdiplusInit.h" | |||
| #include "GdiplusPixelFormats.h" | |||
| #include "GdiplusColor.h" | |||
| #include "GdiplusMetaHeader.h" | |||
| #include "GdiplusImaging.h" | |||
| #include "GdiplusColorMatrix.h" | |||
| // The rest of these are used only by the application | |||
| #include "GdiplusGpStubs.h" | |||
| #include "GdiplusHeaders.h" | |||
| namespace DllExports | |||
| { | |||
| #include "GdiplusFlat.h" | |||
| }; | |||
| #include "GdiplusImageAttributes.h" | |||
| #include "GdiplusMatrix.h" | |||
| #include "GdiplusBrush.h" | |||
| #include "GdiplusPen.h" | |||
| #include "GdiplusStringFormat.h" | |||
| #include "GdiplusPath.h" | |||
| #include "GdiplusLineCaps.h" | |||
| #include "GdiplusMetafile.h" | |||
| #include "GdiplusGraphics.h" | |||
| #include "GdiplusCachedBitmap.h" | |||
| #include "GdiplusRegion.h" | |||
| #include "GdiplusFontCollection.h" | |||
| #include "GdiplusFontFamily.h" | |||
| #include "GdiplusFont.h" | |||
| #include "GdiplusBitmap.h" | |||
| #include "GdiplusImageCodec.h" | |||
| }; // namespace Gdiplus | |||
| #endif // !_GDIPLUS_HPP | |||
| @@ -0,0 +1,40 @@ | |||
| /**************************************************************************\ | |||
| * | |||
| * Copyright (c) 1998-2000, Microsoft Corp. All Rights Reserved. | |||
| * | |||
| * Module Name: | |||
| * | |||
| * GdiplusBase.h | |||
| * | |||
| * Abstract: | |||
| * | |||
| * Represents the base class for GDIPlus memory allocation. | |||
| * | |||
| \**************************************************************************/ | |||
| #ifndef _GDIPLUSBASE_H | |||
| #define _GDIPLUSBASE_H | |||
| class GdiplusBase | |||
| { | |||
| public: | |||
| void (operator delete)(void* in_pVoid) | |||
| { | |||
| DllExports::GdipFree(in_pVoid); | |||
| } | |||
| void* (operator new)(size_t in_size) | |||
| { | |||
| return DllExports::GdipAlloc(in_size); | |||
| } | |||
| void (operator delete[])(void* in_pVoid) | |||
| { | |||
| DllExports::GdipFree(in_pVoid); | |||
| } | |||
| void* (operator new[])(size_t in_size) | |||
| { | |||
| return DllExports::GdipAlloc(in_size); | |||
| } | |||
| }; | |||
| #endif | |||
| @@ -0,0 +1,951 @@ | |||
| /**************************************************************************\ | |||
| * | |||
| * Copyright (c) 1998-2000, Microsoft Corp. All Rights Reserved. | |||
| * | |||
| * Module Name: | |||
| * | |||
| * GdiplusBrush.h | |||
| * | |||
| * Abstract: | |||
| * | |||
| * Brush API related declarations | |||
| * | |||
| \**************************************************************************/ | |||
| #ifndef _GDIPLUSBRUSH_H | |||
| #define _GDIPLUSBRUSH_H | |||
| //-------------------------------------------------------------------------- | |||
| // Abstract base class for various brush types | |||
| //-------------------------------------------------------------------------- | |||
| class GraphicsPath; | |||
| class Brush : public GdiplusBase | |||
| { | |||
| public: | |||
| friend class Pen; | |||
| friend class Graphics; | |||
| virtual ~Brush() | |||
| { | |||
| DllExports::GdipDeleteBrush(nativeBrush); | |||
| } | |||
| virtual Brush* Clone() const | |||
| { | |||
| GpBrush *brush = NULL; | |||
| SetStatus(DllExports::GdipCloneBrush(nativeBrush, &brush)); | |||
| Brush *newBrush = new Brush(brush, lastResult); | |||
| if (newBrush == NULL) | |||
| { | |||
| DllExports::GdipDeleteBrush(brush); | |||
| } | |||
| return newBrush; | |||
| } | |||
| BrushType GetType() const | |||
| { | |||
| BrushType type = static_cast<BrushType>(-1); | |||
| SetStatus(DllExports::GdipGetBrushType(nativeBrush, &type)); | |||
| return type; | |||
| } | |||
| Status GetLastStatus() const | |||
| { | |||
| Status lastStatus = lastResult; | |||
| lastResult = Ok; | |||
| return lastStatus; | |||
| } | |||
| protected: | |||
| Brush() | |||
| { | |||
| SetStatus(NotImplemented); | |||
| } | |||
| #ifdef DCR_USE_NEW_250932 | |||
| private: | |||
| Brush(const Brush& brush); | |||
| Brush& operator=(const Brush& brush); | |||
| protected: | |||
| #else | |||
| Brush(const Brush& brush) | |||
| { | |||
| brush; | |||
| SetStatus(NotImplemented); | |||
| } | |||
| Brush& operator=(const Brush& brush) | |||
| { | |||
| brush; | |||
| SetStatus(NotImplemented); | |||
| return *this; | |||
| } | |||
| #endif | |||
| Brush(GpBrush* nativeBrush, Status status) | |||
| { | |||
| lastResult = status; | |||
| SetNativeBrush(nativeBrush); | |||
| } | |||
| VOID SetNativeBrush(GpBrush* nativeBrush) | |||
| { | |||
| this->nativeBrush = nativeBrush; | |||
| } | |||
| Status SetStatus(Status status) const | |||
| { | |||
| if (status != Ok) | |||
| return (lastResult = status); | |||
| else | |||
| return status; | |||
| } | |||
| GpBrush* nativeBrush; | |||
| mutable Status lastResult; | |||
| }; | |||
| //-------------------------------------------------------------------------- | |||
| // Represent solid fill brush object | |||
| //-------------------------------------------------------------------------- | |||
| class SolidBrush : public Brush | |||
| { | |||
| public: | |||
| friend class Pen; | |||
| SolidBrush(IN const Color& color) | |||
| { | |||
| GpSolidFill *brush = NULL; | |||
| lastResult = DllExports::GdipCreateSolidFill(color.GetValue(), &brush); | |||
| SetNativeBrush(brush); | |||
| } | |||
| Status GetColor(OUT Color* color) const | |||
| { | |||
| ARGB argb; | |||
| if (color == NULL) | |||
| { | |||
| return SetStatus(InvalidParameter); | |||
| } | |||
| SetStatus(DllExports::GdipGetSolidFillColor((GpSolidFill*)nativeBrush, | |||
| &argb)); | |||
| *color = Color(argb); | |||
| return lastResult; | |||
| } | |||
| Status SetColor(IN const Color& color) | |||
| { | |||
| return SetStatus(DllExports::GdipSetSolidFillColor((GpSolidFill*)nativeBrush, | |||
| color.GetValue())); | |||
| } | |||
| #ifdef DCR_USE_NEW_250932 | |||
| private: | |||
| SolidBrush(const SolidBrush &); | |||
| SolidBrush& operator=(const SolidBrush &); | |||
| #endif | |||
| protected: | |||
| SolidBrush() | |||
| { | |||
| } | |||
| }; | |||
| class TextureBrush : public Brush | |||
| { | |||
| public: | |||
| friend class Pen; | |||
| TextureBrush(IN Image* image, | |||
| IN WrapMode wrapMode = WrapModeTile) | |||
| { | |||
| GpTexture *texture = NULL; | |||
| lastResult = DllExports::GdipCreateTexture( | |||
| image->nativeImage, | |||
| wrapMode, &texture); | |||
| SetNativeBrush(texture); | |||
| } | |||
| // When creating a texture brush from a metafile image, the dstRect | |||
| // is used to specify the size that the metafile image should be | |||
| // rendered at in the device units of the destination graphics. | |||
| // It is NOT used to crop the metafile image, so only the width | |||
| // and height values matter for metafiles. | |||
| TextureBrush(IN Image* image, | |||
| IN WrapMode wrapMode, | |||
| IN const RectF &dstRect) | |||
| { | |||
| GpTexture *texture = NULL; | |||
| lastResult = DllExports::GdipCreateTexture2( | |||
| image->nativeImage, | |||
| wrapMode, | |||
| dstRect.X, | |||
| dstRect.Y, | |||
| dstRect.Width, | |||
| dstRect.Height, | |||
| &texture); | |||
| SetNativeBrush(texture); | |||
| } | |||
| // When creating a texture brush from a metafile image, the dstRect | |||
| // is used to specify the size that the metafile image should be | |||
| // rendered at in the device units of the destination graphics. | |||
| // It is NOT used to crop the metafile image, so only the width | |||
| // and height values matter for metafiles. | |||
| TextureBrush(IN Image *image, | |||
| IN const RectF &dstRect, | |||
| IN const ImageAttributes *imageAttributes = NULL) | |||
| { | |||
| GpTexture *texture = NULL; | |||
| lastResult = DllExports::GdipCreateTextureIA( | |||
| image->nativeImage, | |||
| (imageAttributes)?imageAttributes->nativeImageAttr:NULL, | |||
| dstRect.X, | |||
| dstRect.Y, | |||
| dstRect.Width, | |||
| dstRect.Height, | |||
| &texture | |||
| ); | |||
| SetNativeBrush(texture); | |||
| } | |||
| #ifdef DCR_USE_NEW_145138 | |||
| TextureBrush(IN Image *image, | |||
| IN const Rect &dstRect, | |||
| IN const ImageAttributes *imageAttributes = NULL) | |||
| { | |||
| GpTexture *texture = NULL; | |||
| lastResult = DllExports::GdipCreateTextureIAI( | |||
| image->nativeImage, | |||
| (imageAttributes)?imageAttributes->nativeImageAttr:NULL, | |||
| dstRect.X, | |||
| dstRect.Y, | |||
| dstRect.Width, | |||
| dstRect.Height, | |||
| &texture | |||
| ); | |||
| SetNativeBrush(texture); | |||
| } | |||
| #endif | |||
| // When creating a texture brush from a metafile image, the dstRect | |||
| // is used to specify the size that the metafile image should be | |||
| // rendered at in the device units of the destination graphics. | |||
| // It is NOT used to crop the metafile image, so only the width | |||
| // and height values matter for metafiles. | |||
| TextureBrush( | |||
| IN Image* image, | |||
| IN WrapMode wrapMode, | |||
| #ifdef DCR_USE_NEW_145138 | |||
| const IN Rect &dstRect | |||
| #else | |||
| IN Rect &dstRect | |||
| #endif | |||
| ) | |||
| { | |||
| GpTexture *texture = NULL; | |||
| lastResult = DllExports::GdipCreateTexture2I( | |||
| image->nativeImage, | |||
| wrapMode, | |||
| dstRect.X, | |||
| dstRect.Y, | |||
| dstRect.Width, | |||
| dstRect.Height, | |||
| &texture); | |||
| SetNativeBrush(texture); | |||
| } | |||
| // When creating a texture brush from a metafile image, the dstRect | |||
| // is used to specify the size that the metafile image should be | |||
| // rendered at in the device units of the destination graphics. | |||
| // It is NOT used to crop the metafile image, so only the width | |||
| // and height values matter for metafiles. | |||
| TextureBrush(IN Image* image, | |||
| IN WrapMode wrapMode, | |||
| IN REAL dstX, | |||
| IN REAL dstY, | |||
| IN REAL dstWidth, | |||
| IN REAL dstHeight) | |||
| { | |||
| GpTexture *texture = NULL; | |||
| lastResult = DllExports::GdipCreateTexture2( | |||
| image->nativeImage, | |||
| wrapMode, | |||
| dstX, | |||
| dstY, | |||
| dstWidth, | |||
| dstHeight, | |||
| &texture); | |||
| SetNativeBrush(texture); | |||
| } | |||
| // When creating a texture brush from a metafile image, the dstRect | |||
| // is used to specify the size that the metafile image should be | |||
| // rendered at in the device units of the destination graphics. | |||
| // It is NOT used to crop the metafile image, so only the width | |||
| // and height values matter for metafiles. | |||
| TextureBrush(IN Image* image, | |||
| IN WrapMode wrapMode, | |||
| IN INT dstX, | |||
| IN INT dstY, | |||
| IN INT dstWidth, | |||
| IN INT dstHeight) | |||
| { | |||
| GpTexture *texture = NULL; | |||
| lastResult = DllExports::GdipCreateTexture2I( | |||
| image->nativeImage, | |||
| wrapMode, | |||
| dstX, | |||
| dstY, | |||
| dstWidth, | |||
| dstHeight, | |||
| &texture); | |||
| SetNativeBrush(texture); | |||
| } | |||
| /** | |||
| * Set/get brush transform | |||
| */ | |||
| Status SetTransform(IN const Matrix* matrix) | |||
| { | |||
| return SetStatus(DllExports::GdipSetTextureTransform((GpTexture*)nativeBrush, | |||
| matrix->nativeMatrix)); | |||
| } | |||
| Status GetTransform(OUT Matrix* matrix) const | |||
| { | |||
| return SetStatus(DllExports::GdipGetTextureTransform((GpTexture*)nativeBrush, | |||
| matrix->nativeMatrix)); | |||
| } | |||
| Status ResetTransform() | |||
| { | |||
| return SetStatus(DllExports::GdipResetTextureTransform((GpTexture*)nativeBrush)); | |||
| } | |||
| Status MultiplyTransform(IN const Matrix* matrix, | |||
| IN MatrixOrder order = MatrixOrderPrepend) | |||
| { | |||
| return SetStatus(DllExports::GdipMultiplyTextureTransform((GpTexture*)nativeBrush, | |||
| matrix->nativeMatrix, | |||
| order)); | |||
| } | |||
| Status TranslateTransform(IN REAL dx, | |||
| IN REAL dy, | |||
| IN MatrixOrder order = MatrixOrderPrepend) | |||
| { | |||
| return SetStatus(DllExports::GdipTranslateTextureTransform((GpTexture*)nativeBrush, | |||
| dx, dy, order)); | |||
| } | |||
| Status ScaleTransform(IN REAL sx, | |||
| IN REAL sy, | |||
| IN MatrixOrder order = MatrixOrderPrepend) | |||
| { | |||
| return SetStatus(DllExports::GdipScaleTextureTransform((GpTexture*)nativeBrush, | |||
| sx, sy, order)); | |||
| } | |||
| Status RotateTransform(IN REAL angle, | |||
| IN MatrixOrder order = MatrixOrderPrepend) | |||
| { | |||
| return SetStatus(DllExports::GdipRotateTextureTransform((GpTexture*)nativeBrush, | |||
| angle, order)); | |||
| } | |||
| /** | |||
| * Set/get brush wrapping mode | |||
| */ | |||
| Status SetWrapMode(IN WrapMode wrapMode) | |||
| { | |||
| return SetStatus(DllExports::GdipSetTextureWrapMode((GpTexture*)nativeBrush, | |||
| wrapMode)); | |||
| } | |||
| WrapMode GetWrapMode() const | |||
| { | |||
| WrapMode wrapMode; | |||
| SetStatus(DllExports::GdipGetTextureWrapMode((GpTexture*)nativeBrush, | |||
| &wrapMode)); | |||
| return wrapMode; | |||
| } | |||
| // Get texture brush attributes | |||
| Image *GetImage() const | |||
| { | |||
| GpImage *image; | |||
| SetStatus(DllExports::GdipGetTextureImage((GpTexture *)nativeBrush, | |||
| &image)); | |||
| Image *retimage = new Image(image, lastResult); | |||
| if (retimage == NULL) | |||
| { | |||
| DllExports::GdipDisposeImage(image); | |||
| } | |||
| return retimage; | |||
| } | |||
| #ifdef DCR_USE_NEW_250932 | |||
| private: | |||
| TextureBrush(const TextureBrush &); | |||
| TextureBrush& operator=(const TextureBrush &); | |||
| #endif | |||
| protected: | |||
| TextureBrush() | |||
| { | |||
| } | |||
| }; | |||
| //-------------------------------------------------------------------------- | |||
| // Represent line gradient brush object | |||
| //-------------------------------------------------------------------------- | |||
| class LinearGradientBrush : public Brush | |||
| { | |||
| public: | |||
| friend class Pen; | |||
| LinearGradientBrush(IN const PointF& point1, | |||
| IN const PointF& point2, | |||
| IN const Color& color1, | |||
| IN const Color& color2) | |||
| { | |||
| GpLineGradient *brush = NULL; | |||
| lastResult = DllExports::GdipCreateLineBrush(&point1, | |||
| &point2, | |||
| color1.GetValue(), | |||
| color2.GetValue(), | |||
| WrapModeTile, | |||
| &brush); | |||
| SetNativeBrush(brush); | |||
| } | |||
| LinearGradientBrush(IN const Point& point1, | |||
| IN const Point& point2, | |||
| IN const Color& color1, | |||
| IN const Color& color2) | |||
| { | |||
| GpLineGradient *brush = NULL; | |||
| lastResult = DllExports::GdipCreateLineBrushI(&point1, | |||
| &point2, | |||
| color1.GetValue(), | |||
| color2.GetValue(), | |||
| WrapModeTile, | |||
| &brush); | |||
| SetNativeBrush(brush); | |||
| } | |||
| LinearGradientBrush(IN const RectF& rect, | |||
| IN const Color& color1, | |||
| IN const Color& color2, | |||
| IN LinearGradientMode mode) | |||
| { | |||
| GpLineGradient *brush = NULL; | |||
| lastResult = DllExports::GdipCreateLineBrushFromRect(&rect, | |||
| color1.GetValue(), | |||
| color2.GetValue(), | |||
| mode, | |||
| WrapModeTile, | |||
| &brush); | |||
| SetNativeBrush(brush); | |||
| } | |||
| LinearGradientBrush(IN const Rect& rect, | |||
| IN const Color& color1, | |||
| IN const Color& color2, | |||
| IN LinearGradientMode mode) | |||
| { | |||
| GpLineGradient *brush = NULL; | |||
| lastResult = DllExports::GdipCreateLineBrushFromRectI(&rect, | |||
| color1.GetValue(), | |||
| color2.GetValue(), | |||
| mode, | |||
| WrapModeTile, | |||
| &brush); | |||
| SetNativeBrush(brush); | |||
| } | |||
| LinearGradientBrush(IN const RectF& rect, | |||
| IN const Color& color1, | |||
| IN const Color& color2, | |||
| IN REAL angle, | |||
| IN BOOL isAngleScalable = FALSE) | |||
| { | |||
| GpLineGradient *brush = NULL; | |||
| lastResult = DllExports::GdipCreateLineBrushFromRectWithAngle(&rect, | |||
| color1.GetValue(), | |||
| color2.GetValue(), | |||
| angle, | |||
| isAngleScalable, | |||
| WrapModeTile, | |||
| &brush); | |||
| SetNativeBrush(brush); | |||
| } | |||
| LinearGradientBrush(IN const Rect& rect, | |||
| IN const Color& color1, | |||
| IN const Color& color2, | |||
| IN REAL angle, | |||
| IN BOOL isAngleScalable = FALSE) | |||
| { | |||
| GpLineGradient *brush = NULL; | |||
| lastResult = DllExports::GdipCreateLineBrushFromRectWithAngleI(&rect, | |||
| color1.GetValue(), | |||
| color2.GetValue(), | |||
| angle, | |||
| isAngleScalable, | |||
| WrapModeTile, | |||
| &brush); | |||
| SetNativeBrush(brush); | |||
| } | |||
| // Get/set point attributes | |||
| Status SetLinearPoints(IN const PointF& point1, | |||
| IN const PointF& point2) | |||
| { | |||
| return SetStatus(DllExports::GdipSetLinePoints((GpLineGradient*)nativeBrush, | |||
| &point1, &point2)); | |||
| } | |||
| Status GetLinearPoints(OUT PointF* points) const | |||
| { | |||
| return SetStatus(DllExports::GdipGetLinePoints((GpLineGradient*) nativeBrush, | |||
| points)); | |||
| } | |||
| Status SetLinearPoints(IN const Point& point1, | |||
| IN const Point& point2) | |||
| { | |||
| return SetStatus(DllExports::GdipSetLinePointsI((GpLineGradient*)nativeBrush, | |||
| &point1, &point2)); | |||
| } | |||
| Status GetLinearPoints(OUT Point* points) const | |||
| { | |||
| return SetStatus(DllExports::GdipGetLinePointsI((GpLineGradient*) nativeBrush, | |||
| points)); | |||
| } | |||
| // Get/set color attributes | |||
| Status SetLinearColors(IN const Color& color1, | |||
| IN const Color& color2) | |||
| { | |||
| return SetStatus(DllExports::GdipSetLineColors((GpLineGradient*)nativeBrush, | |||
| color1.GetValue(), | |||
| color2.GetValue())); | |||
| } | |||
| Status GetLinearColors(OUT Color* colors) const | |||
| { | |||
| ARGB argb[2]; | |||
| if (colors == NULL) | |||
| { | |||
| return SetStatus(InvalidParameter); | |||
| } | |||
| SetStatus(DllExports::GdipGetLineColors((GpLineGradient*) nativeBrush, argb)); | |||
| if (lastResult == Ok) | |||
| { | |||
| // use bitwise copy operator for Color copy | |||
| colors[0] = Color(argb[0]); | |||
| colors[1] = Color(argb[1]); | |||
| } | |||
| return lastResult; | |||
| } | |||
| Status GetRectangle(OUT RectF* rect) const | |||
| { | |||
| return SetStatus(DllExports::GdipGetLineRect((GpLineGradient*)nativeBrush, rect)); | |||
| } | |||
| // integer version | |||
| Status GetRectangle(OUT Rect* rect) const | |||
| { | |||
| return SetStatus(DllExports::GdipGetLineRectI((GpLineGradient*)nativeBrush, rect)); | |||
| } | |||
| // Gamma correction in interporlation. | |||
| Status SetGammaCorrection(IN BOOL useGammaCorrection) | |||
| { | |||
| return SetStatus(DllExports::GdipSetLineGammaCorrection((GpLineGradient*)nativeBrush, | |||
| useGammaCorrection)); | |||
| } | |||
| BOOL GetGammaCorrection() const | |||
| { | |||
| BOOL useGammaCorrection; | |||
| SetStatus(DllExports::GdipGetLineGammaCorrection((GpLineGradient*)nativeBrush, | |||
| &useGammaCorrection)); | |||
| return useGammaCorrection; | |||
| } | |||
| INT GetBlendCount() const | |||
| { | |||
| INT count = 0; | |||
| SetStatus(DllExports::GdipGetLineBlendCount((GpLineGradient*) | |||
| nativeBrush, | |||
| &count)); | |||
| return count; | |||
| } | |||
| Status SetBlend(IN const REAL* blendFactors, | |||
| IN const REAL* blendPositions, | |||
| IN INT count) | |||
| { | |||
| return SetStatus(DllExports::GdipSetLineBlend((GpLineGradient*) | |||
| nativeBrush, | |||
| blendFactors, | |||
| blendPositions, | |||
| count)); | |||
| } | |||
| Status GetBlend(OUT REAL* blendFactors, | |||
| OUT REAL* blendPositions, | |||
| IN INT count) const | |||
| { | |||
| return SetStatus(DllExports::GdipGetLineBlend((GpLineGradient*)nativeBrush, | |||
| blendFactors, | |||
| blendPositions, | |||
| count)); | |||
| } | |||
| INT GetInterpolationColorCount() const | |||
| { | |||
| INT count = 0; | |||
| SetStatus(DllExports::GdipGetLinePresetBlendCount((GpLineGradient*) | |||
| nativeBrush, | |||
| &count)); | |||
| return count; | |||
| } | |||
| Status SetInterpolationColors(IN const Color* presetColors, | |||
| IN const REAL* blendPositions, | |||
| IN INT count) | |||
| { | |||
| if ((count <= 0) || !presetColors) | |||
| return SetStatus(InvalidParameter); | |||
| ARGB *argbs = (ARGB*) new BYTE[count*sizeof(ARGB)]; | |||
| if (argbs) | |||
| { | |||
| for (INT i = 0; i < count; i++) | |||
| { | |||
| argbs[i] = presetColors[i].GetValue(); | |||
| } | |||
| Status status = SetStatus(DllExports::GdipSetLinePresetBlend( | |||
| (GpLineGradient*) nativeBrush, | |||
| argbs, | |||
| blendPositions, | |||
| count)); | |||
| delete [] argbs; | |||
| return status; | |||
| } | |||
| else | |||
| { | |||
| return SetStatus(OutOfMemory); | |||
| } | |||
| } | |||
| Status GetInterpolationColors(OUT Color* presetColors, | |||
| OUT REAL* blendPositions, | |||
| IN INT count) const | |||
| { | |||
| if ((count <= 0) || !presetColors) | |||
| return SetStatus(InvalidParameter); | |||
| ARGB* argbs = (ARGB*) new BYTE[count*sizeof(ARGB)]; | |||
| if (!argbs) | |||
| { | |||
| return SetStatus(OutOfMemory); | |||
| } | |||
| Status status = SetStatus(DllExports::GdipGetLinePresetBlend((GpLineGradient*)nativeBrush, | |||
| argbs, | |||
| blendPositions, | |||
| count)); | |||
| if (status == Ok) | |||
| { | |||
| for (INT i = 0; i < count; i++) | |||
| { | |||
| presetColors[i] = Color(argbs[i]); | |||
| } | |||
| } | |||
| delete [] argbs; | |||
| return status; | |||
| } | |||
| Status SetBlendBellShape(IN REAL focus, | |||
| IN REAL scale = 1.0) | |||
| { | |||
| return SetStatus(DllExports::GdipSetLineSigmaBlend((GpLineGradient*)nativeBrush, focus, scale)); | |||
| } | |||
| #ifdef DCR_USE_NEW_145135 | |||
| Status SetBlendTriangularShape( | |||
| IN REAL focus, | |||
| IN REAL scale = 1.0 | |||
| ) | |||
| #else | |||
| Status SetBlendTrianglarShape(IN REAL focus, | |||
| IN REAL scale = 1.0) | |||
| #endif | |||
| { | |||
| return SetStatus(DllExports::GdipSetLineLinearBlend((GpLineGradient*)nativeBrush, focus, scale)); | |||
| } | |||
| /** | |||
| * Set/get brush transform | |||
| */ | |||
| Status SetTransform(IN const Matrix* matrix) | |||
| { | |||
| return SetStatus(DllExports::GdipSetLineTransform((GpLineGradient*)nativeBrush, | |||
| matrix->nativeMatrix)); | |||
| } | |||
| Status GetTransform(OUT Matrix *matrix) const | |||
| { | |||
| return SetStatus(DllExports::GdipGetLineTransform((GpLineGradient*)nativeBrush, | |||
| matrix->nativeMatrix)); | |||
| } | |||
| Status ResetTransform() | |||
| { | |||
| return SetStatus(DllExports::GdipResetLineTransform((GpLineGradient*)nativeBrush)); | |||
| } | |||
| Status MultiplyTransform(IN const Matrix* matrix, | |||
| IN MatrixOrder order = MatrixOrderPrepend) | |||
| { | |||
| return SetStatus(DllExports::GdipMultiplyLineTransform((GpLineGradient*)nativeBrush, | |||
| matrix->nativeMatrix, | |||
| order)); | |||
| } | |||
| Status TranslateTransform(IN REAL dx, | |||
| IN REAL dy, | |||
| IN MatrixOrder order = MatrixOrderPrepend) | |||
| { | |||
| return SetStatus(DllExports::GdipTranslateLineTransform((GpLineGradient*)nativeBrush, | |||
| dx, dy, order)); | |||
| } | |||
| Status ScaleTransform(IN REAL sx, | |||
| IN REAL sy, | |||
| IN MatrixOrder order = MatrixOrderPrepend) | |||
| { | |||
| return SetStatus(DllExports::GdipScaleLineTransform((GpLineGradient*)nativeBrush, | |||
| sx, sy, order)); | |||
| } | |||
| Status RotateTransform(IN REAL angle, | |||
| IN MatrixOrder order = MatrixOrderPrepend) | |||
| { | |||
| return SetStatus(DllExports::GdipRotateLineTransform((GpLineGradient*)nativeBrush, | |||
| angle, order)); | |||
| } | |||
| /** | |||
| * Set/get brush wrapping mode | |||
| */ | |||
| Status SetWrapMode(IN WrapMode wrapMode) | |||
| { | |||
| return SetStatus(DllExports::GdipSetLineWrapMode((GpLineGradient*)nativeBrush, | |||
| wrapMode)); | |||
| } | |||
| WrapMode GetWrapMode() const | |||
| { | |||
| WrapMode wrapMode; | |||
| SetStatus(DllExports::GdipGetLineWrapMode((GpLineGradient*) | |||
| nativeBrush, | |||
| &wrapMode)); | |||
| return wrapMode; | |||
| } | |||
| #ifdef DCR_USE_NEW_250932 | |||
| private: | |||
| LinearGradientBrush(const LinearGradientBrush &); | |||
| LinearGradientBrush& operator=(const LinearGradientBrush &); | |||
| #endif | |||
| protected: | |||
| LinearGradientBrush() | |||
| { | |||
| } | |||
| }; | |||
| //-------------------------------------------------------------------------- | |||
| // PathGradientBrush object is defined | |||
| // in gdipluspath.h. | |||
| //-------------------------------------------------------------------------- | |||
| //-------------------------------------------------------------------------- | |||
| // Represent hatch brush object | |||
| //-------------------------------------------------------------------------- | |||
| class HatchBrush : public Brush | |||
| { | |||
| public: | |||
| friend class Pen; | |||
| // Constructors | |||
| HatchBrush(IN HatchStyle hatchStyle, | |||
| IN const Color& foreColor, | |||
| IN const Color& backColor = Color()) | |||
| { | |||
| GpHatch *brush = NULL; | |||
| lastResult = DllExports::GdipCreateHatchBrush(hatchStyle, | |||
| foreColor.GetValue(), | |||
| backColor.GetValue(), | |||
| &brush); | |||
| SetNativeBrush(brush); | |||
| } | |||
| HatchStyle GetHatchStyle() const | |||
| { | |||
| HatchStyle hatchStyle; | |||
| SetStatus(DllExports::GdipGetHatchStyle((GpHatch*)nativeBrush, | |||
| &hatchStyle)); | |||
| return hatchStyle; | |||
| } | |||
| Status GetForegroundColor(OUT Color* color) const | |||
| { | |||
| ARGB argb; | |||
| if (color == NULL) | |||
| { | |||
| return SetStatus(InvalidParameter); | |||
| } | |||
| Status status = SetStatus(DllExports::GdipGetHatchForegroundColor( | |||
| (GpHatch*)nativeBrush, | |||
| &argb)); | |||
| color->SetValue(argb); | |||
| return status; | |||
| } | |||
| Status GetBackgroundColor(OUT Color *color) const | |||
| { | |||
| ARGB argb; | |||
| if (color == NULL) | |||
| { | |||
| return SetStatus(InvalidParameter); | |||
| } | |||
| Status status = SetStatus(DllExports::GdipGetHatchBackgroundColor( | |||
| (GpHatch*)nativeBrush, | |||
| &argb)); | |||
| color->SetValue(argb); | |||
| return status; | |||
| } | |||
| #ifdef DCR_USE_NEW_250932 | |||
| private: | |||
| HatchBrush(const HatchBrush &); | |||
| HatchBrush& operator=(const HatchBrush &); | |||
| #endif | |||
| protected: | |||
| HatchBrush() | |||
| { | |||
| } | |||
| }; | |||
| #endif | |||
| @@ -0,0 +1,71 @@ | |||
| /************************************************************************** | |||
| * | |||
| * Copyright (c) 2000 Microsoft Corporation | |||
| * | |||
| * Module Name: | |||
| * | |||
| * CachedBitmap class definition | |||
| * | |||
| * Abstract: | |||
| * | |||
| * CachedBitmap is a representation of an accelerated drawing | |||
| * that has restrictions on what operations are allowed in order | |||
| * to accelerate the drawing to the destination. | |||
| * | |||
| **************************************************************************/ | |||
| #ifndef _GDIPLUSCACHEDBITMAP_H | |||
| #define _GDIPLUSCACHEDBITMAP_H | |||
| /************************************************************************** | |||
| * | |||
| * Class Name: | |||
| * | |||
| * CachedBitmap | |||
| * | |||
| * Abstract: | |||
| * | |||
| * An object to store a bitmap prepared for rendering on a particular | |||
| * Graphics object. The memory storage for the CachedBitmap is opaque | |||
| * to the other Engine code, so the only operations supported are | |||
| * initializing the data (with a bitmap) and using the graphics to | |||
| * draw it on the screen with an integer offset. | |||
| * | |||
| * Look for the class definition in GdiplusHeaders.h | |||
| * | |||
| * Created: | |||
| * | |||
| * 04/23/2000 asecchia | |||
| * Created it. | |||
| * | |||
| **************************************************************************/ | |||
| inline | |||
| CachedBitmap::CachedBitmap( | |||
| IN Bitmap *bitmap, | |||
| IN Graphics *graphics) | |||
| { | |||
| nativeCachedBitmap = NULL; | |||
| lastResult = DllExports::GdipCreateCachedBitmap( | |||
| (GpBitmap *)bitmap->nativeImage, | |||
| graphics->nativeGraphics, | |||
| &nativeCachedBitmap | |||
| ); | |||
| } | |||
| inline | |||
| CachedBitmap::~CachedBitmap() | |||
| { | |||
| DllExports::GdipDeleteCachedBitmap(nativeCachedBitmap); | |||
| } | |||
| inline Status | |||
| CachedBitmap::GetLastStatus() const | |||
| { | |||
| Status lastStatus = lastResult; | |||
| lastResult = Ok; | |||
| return (lastStatus); | |||
| } | |||
| #endif | |||
| @@ -0,0 +1,209 @@ | |||
| /**************************************************************************\ | |||
| * | |||
| * Copyright (c) 1998-2000, Microsoft Corp. All Rights Reserved. | |||
| * | |||
| * Module Name: | |||
| * | |||
| * GdiplusColor.h | |||
| * | |||
| * Abstract: | |||
| * | |||
| * Represents a GDI+ color. | |||
| * | |||
| \**************************************************************************/ | |||
| #ifndef _GDIPLUSCOLOR_H | |||
| #define _GDIPLUSCOLOR_H | |||
| //---------------------------------------------------------------------------- | |||
| // Color mode | |||
| //---------------------------------------------------------------------------- | |||
| enum ColorMode | |||
| { | |||
| ColorModeARGB32 = 0, | |||
| ColorModeARGB64 = 1 | |||
| }; | |||
| //---------------------------------------------------------------------------- | |||
| // Color Channel flags | |||
| //---------------------------------------------------------------------------- | |||
| enum ColorChannelFlags | |||
| { | |||
| ColorChannelFlagsC = 0, | |||
| ColorChannelFlagsM, | |||
| ColorChannelFlagsY, | |||
| ColorChannelFlagsK, | |||
| ColorChannelFlagsLast | |||
| }; | |||
| //---------------------------------------------------------------------------- | |||
| // Color | |||
| //---------------------------------------------------------------------------- | |||
| class Color | |||
| { | |||
| public: | |||
| Color() | |||
| { | |||
| Argb = (ARGB)Color::Black; | |||
| } | |||
| // Construct an opaque Color object with | |||
| // the specified R, G, B values. | |||
| Color(IN BYTE r, | |||
| IN BYTE g, | |||
| IN BYTE b) | |||
| { | |||
| Argb = MakeARGB(255, r, g, b); | |||
| } | |||
| // Construct a Color object with | |||
| // the specified A, R, G, B values. | |||
| // | |||
| // NOTE: R, G, B color values are not premultiplied. | |||
| Color(IN BYTE a, | |||
| IN BYTE r, | |||
| IN BYTE g, | |||
| IN BYTE b) | |||
| { | |||
| Argb = MakeARGB(a, r, g, b); | |||
| } | |||
| // Construct a Color object with | |||
| // the specified ARGB values. | |||
| // | |||
| // NOTE: R, G, B color components are not premultiplied. | |||
| Color(IN ARGB argb) | |||
| { | |||
| Argb = argb; | |||
| } | |||
| // Extract A, R, G, B components | |||
| BYTE GetAlpha() const | |||
| { | |||
| return (BYTE) (Argb >> AlphaShift); | |||
| } | |||
| BYTE GetA() const | |||
| { | |||
| return GetAlpha(); | |||
| } | |||
| BYTE GetRed() const | |||
| { | |||
| return (BYTE) (Argb >> RedShift); | |||
| } | |||
| BYTE GetR() const | |||
| { | |||
| return GetRed(); | |||
| } | |||
| BYTE GetGreen() const | |||
| { | |||
| return (BYTE) (Argb >> GreenShift); | |||
| } | |||
| BYTE GetG() const | |||
| { | |||
| return GetGreen(); | |||
| } | |||
| BYTE GetBlue() const | |||
| { | |||
| return (BYTE) (Argb >> BlueShift); | |||
| } | |||
| BYTE GetB() const | |||
| { | |||
| return GetBlue(); | |||
| } | |||
| // Retrieve ARGB values | |||
| ARGB GetValue() const | |||
| { | |||
| return Argb; | |||
| } | |||
| VOID SetValue(IN ARGB argb) | |||
| { | |||
| Argb = argb; | |||
| } | |||
| VOID SetFromCOLORREF(IN COLORREF rgb) | |||
| { | |||
| Argb = MakeARGB(255, GetRValue(rgb), GetGValue(rgb), GetBValue(rgb)); | |||
| } | |||
| COLORREF ToCOLORREF() const | |||
| { | |||
| return RGB(GetRed(), GetGreen(), GetBlue()); | |||
| } | |||
| public: | |||
| // Standard color constants | |||
| enum | |||
| { | |||
| Black = 0xff000000, | |||
| Silver = 0xffc0c0c0, | |||
| Gray = 0xff808080, | |||
| White = 0xffffffff, | |||
| Maroon = 0xff800000, | |||
| Red = 0xffff0000, | |||
| Purple = 0xff800080, | |||
| Fuchsia = 0xffff00ff, | |||
| Green = 0xff008000, | |||
| Lime = 0xff00ff00, | |||
| Olive = 0xff808000, | |||
| Yellow = 0xffffff00, | |||
| Navy = 0xff000080, | |||
| Blue = 0xff0000ff, | |||
| Teal = 0xff008080, | |||
| Aqua = 0xff00ffff | |||
| }; | |||
| // Shift count and bit mask for A, R, G, B components | |||
| enum | |||
| { | |||
| AlphaShift = 24, | |||
| RedShift = 16, | |||
| GreenShift = 8, | |||
| BlueShift = 0 | |||
| }; | |||
| enum | |||
| { | |||
| AlphaMask = 0xff000000, | |||
| RedMask = 0x00ff0000, | |||
| GreenMask = 0x0000ff00, | |||
| BlueMask = 0x000000ff | |||
| }; | |||
| // Assemble A, R, G, B values into a 32-bit integer | |||
| static ARGB MakeARGB(IN BYTE a, | |||
| IN BYTE r, | |||
| IN BYTE g, | |||
| IN BYTE b) | |||
| { | |||
| return (((ARGB) (b) << BlueShift) | | |||
| ((ARGB) (g) << GreenShift) | | |||
| ((ARGB) (r) << RedShift) | | |||
| ((ARGB) (a) << AlphaShift)); | |||
| } | |||
| protected: | |||
| ARGB Argb; | |||
| }; | |||
| #endif | |||
| @@ -0,0 +1,63 @@ | |||
| /**************************************************************************\ | |||
| * | |||
| * Copyright (c) 1998-2000, Microsoft Corp. All Rights Reserved. | |||
| * | |||
| * Module Name: | |||
| * | |||
| * GdiplusColorMatrix.h | |||
| * | |||
| * Abstract: | |||
| * | |||
| * Class for color adjustment object passed to Graphics.DrawImage | |||
| * | |||
| \**************************************************************************/ | |||
| #ifndef _GDIPLUSCOLORMATRIX_H | |||
| #define _GDIPLUSCOLORMATRIX_H | |||
| //---------------------------------------------------------------------------- | |||
| // Color matrix | |||
| //---------------------------------------------------------------------------- | |||
| struct ColorMatrix | |||
| { | |||
| REAL m[5][5]; | |||
| }; | |||
| //---------------------------------------------------------------------------- | |||
| // Color Matrix flags | |||
| //---------------------------------------------------------------------------- | |||
| enum ColorMatrixFlags | |||
| { | |||
| ColorMatrixFlagsDefault = 0, | |||
| ColorMatrixFlagsSkipGrays = 1, | |||
| ColorMatrixFlagsAltGray = 2 | |||
| }; | |||
| //---------------------------------------------------------------------------- | |||
| // Color Adjust Type | |||
| //---------------------------------------------------------------------------- | |||
| enum ColorAdjustType | |||
| { | |||
| ColorAdjustTypeDefault, | |||
| ColorAdjustTypeBitmap, | |||
| ColorAdjustTypeBrush, | |||
| ColorAdjustTypePen, | |||
| ColorAdjustTypeText, | |||
| ColorAdjustTypeCount, // must be immediately after all the individual ones | |||
| ColorAdjustTypeAny // internal use: for querying if any type has recoloring | |||
| }; | |||
| //---------------------------------------------------------------------------- | |||
| // Color Map | |||
| //---------------------------------------------------------------------------- | |||
| struct ColorMap | |||
| { | |||
| Color oldColor; | |||
| Color newColor; | |||
| }; | |||
| #endif | |||
| @@ -0,0 +1,299 @@ | |||
| /**************************************************************************\ | |||
| * | |||
| * Copyright (c) 1998-2000, Microsoft Corp. All Rights Reserved. | |||
| * | |||
| * Module Name: | |||
| * | |||
| * GdiplusFont.h | |||
| * | |||
| * Abstract: | |||
| * | |||
| * Font related declarations | |||
| * | |||
| \**************************************************************************/ | |||
| #ifndef _GDIPLUSFONT_H | |||
| #define _GDIPLUSFONT_H | |||
| inline | |||
| Font::Font(IN HDC hdc) | |||
| { | |||
| GpFont *font = NULL; | |||
| lastResult = DllExports::GdipCreateFontFromDC(hdc, &font); | |||
| #ifndef DCR_USE_NEW_135429 | |||
| if ((INT) lastResult >= 10) | |||
| lastResult = NotFound; | |||
| #endif | |||
| SetNativeFont(font); | |||
| } | |||
| #ifdef DCR_USE_NEW_127084 | |||
| inline | |||
| Font::Font(IN HDC hdc, | |||
| IN const HFONT hfont) | |||
| { | |||
| GpFont *font = NULL; | |||
| if (hfont) | |||
| { | |||
| LOGFONTA lf; | |||
| if(GetObjectA(hfont, sizeof(LOGFONTA), &lf)) | |||
| lastResult = DllExports::GdipCreateFontFromLogfontA(hdc, &lf, &font); | |||
| else | |||
| lastResult = DllExports::GdipCreateFontFromDC(hdc, &font); | |||
| } | |||
| else | |||
| { | |||
| lastResult = DllExports::GdipCreateFontFromDC(hdc, &font); | |||
| } | |||
| #ifndef DCR_USE_NEW_135429 | |||
| if ((INT) lastResult >= 10) | |||
| lastResult = NotFound; | |||
| #endif | |||
| SetNativeFont(font); | |||
| } | |||
| #endif | |||
| inline | |||
| Font::Font(IN HDC hdc, | |||
| IN const LOGFONTW* logfont) | |||
| { | |||
| GpFont *font = NULL; | |||
| if (logfont) | |||
| { | |||
| lastResult = DllExports::GdipCreateFontFromLogfontW(hdc, logfont, &font); | |||
| } | |||
| else | |||
| { | |||
| lastResult = DllExports::GdipCreateFontFromDC(hdc, &font); | |||
| } | |||
| #ifndef DCR_USE_NEW_135429 | |||
| if ((INT) lastResult >= 10) | |||
| lastResult = NotFound; | |||
| #endif | |||
| SetNativeFont(font); | |||
| } | |||
| inline | |||
| Font::Font(IN HDC hdc, | |||
| IN const LOGFONTA* logfont) | |||
| { | |||
| GpFont *font = NULL; | |||
| if (logfont) | |||
| { | |||
| lastResult = DllExports::GdipCreateFontFromLogfontA(hdc, logfont, &font); | |||
| } | |||
| else | |||
| { | |||
| lastResult = DllExports::GdipCreateFontFromDC(hdc, &font); | |||
| } | |||
| #ifndef DCR_USE_NEW_135429 | |||
| if ((INT) lastResult >= 10) | |||
| lastResult = NotFound; | |||
| #endif | |||
| SetNativeFont(font); | |||
| } | |||
| inline | |||
| Font::Font( | |||
| IN const FontFamily * family, | |||
| IN REAL emSize, | |||
| IN INT style, | |||
| IN Unit unit | |||
| ) | |||
| { | |||
| GpFont *font = NULL; | |||
| lastResult = DllExports::GdipCreateFont(family ? family->nativeFamily : NULL, | |||
| emSize, | |||
| style, | |||
| unit, | |||
| &font); | |||
| #ifndef DCR_USE_NEW_135429 | |||
| if ((INT) lastResult >= 10) | |||
| lastResult = NotFound; | |||
| #endif | |||
| SetNativeFont(font); | |||
| } | |||
| inline | |||
| Font::Font( | |||
| IN const WCHAR * familyName, | |||
| IN REAL emSize, | |||
| IN INT style, | |||
| IN Unit unit, | |||
| IN const FontCollection * fontCollection | |||
| ) | |||
| { | |||
| FontFamily family(familyName, fontCollection); | |||
| GpFont * font = NULL; | |||
| lastResult = family.GetLastStatus(); | |||
| if (lastResult == Ok) | |||
| { | |||
| lastResult = DllExports::GdipCreateFont(family.nativeFamily, | |||
| emSize, | |||
| style, | |||
| unit, | |||
| &font); | |||
| } | |||
| #ifndef DCR_USE_NEW_135429 | |||
| if ((INT) lastResult >= 10) | |||
| lastResult = NotFound; | |||
| #endif | |||
| SetNativeFont(font); | |||
| } | |||
| inline Status | |||
| Font::GetLogFontA(IN const Graphics *g, | |||
| OUT LOGFONTA *logfontA) const | |||
| { | |||
| return SetStatus(DllExports::GdipGetLogFontA(nativeFont, g ? g->nativeGraphics : NULL, logfontA)); | |||
| } | |||
| inline Status | |||
| Font::GetLogFontW(IN const Graphics *g, | |||
| OUT LOGFONTW *logfontW) const | |||
| { | |||
| return SetStatus(DllExports::GdipGetLogFontW(nativeFont, g ? g->nativeGraphics : NULL, logfontW)); | |||
| } | |||
| inline Font* | |||
| Font::Clone() const | |||
| { | |||
| GpFont *cloneFont = NULL; | |||
| SetStatus(DllExports::GdipCloneFont(nativeFont, &cloneFont)); | |||
| return new Font(cloneFont, lastResult); | |||
| } | |||
| inline | |||
| Font::~Font() | |||
| { | |||
| DllExports::GdipDeleteFont(nativeFont); | |||
| } | |||
| // Operations | |||
| inline BOOL | |||
| Font::IsAvailable() const | |||
| { | |||
| return (nativeFont ? TRUE : FALSE); | |||
| } | |||
| inline Status | |||
| Font::GetFamily(OUT FontFamily *family) const | |||
| { | |||
| if (family == NULL) | |||
| { | |||
| return SetStatus(InvalidParameter); | |||
| } | |||
| Status status = DllExports::GdipGetFamily(nativeFont, &(family->nativeFamily)); | |||
| family->SetStatus(status); | |||
| return SetStatus(status); | |||
| } | |||
| inline INT | |||
| Font::GetStyle() const | |||
| { | |||
| INT style; | |||
| SetStatus(DllExports::GdipGetFontStyle(nativeFont, &style)); | |||
| return style; | |||
| } | |||
| inline REAL | |||
| Font::GetSize() const | |||
| { | |||
| REAL size; | |||
| SetStatus(DllExports::GdipGetFontSize(nativeFont, &size)); | |||
| return size; | |||
| } | |||
| inline Unit | |||
| Font::GetUnit() const | |||
| { | |||
| Unit unit; | |||
| SetStatus(DllExports::GdipGetFontUnit(nativeFont, &unit)); | |||
| return unit; | |||
| } | |||
| inline REAL | |||
| Font::GetHeight(IN const Graphics *graphics) const | |||
| { | |||
| REAL height; | |||
| SetStatus(DllExports::GdipGetFontHeight( | |||
| nativeFont, | |||
| graphics ? graphics->nativeGraphics : NULL, | |||
| &height | |||
| )); | |||
| return height; | |||
| } | |||
| #ifdef DCR_USE_NEW_125467 | |||
| inline REAL | |||
| Font::GetHeight(IN REAL dpi = 0) const | |||
| { | |||
| REAL height; | |||
| SetStatus(DllExports::GdipGetFontHeightGivenDPI(nativeFont, dpi, &height)); | |||
| return height; | |||
| } | |||
| #endif | |||
| // protected method | |||
| inline | |||
| Font::Font(IN GpFont* font, | |||
| IN Status status) | |||
| { | |||
| lastResult = status; | |||
| SetNativeFont(font); | |||
| } | |||
| // protected method | |||
| inline VOID | |||
| Font::SetNativeFont(GpFont *Font) | |||
| { | |||
| nativeFont = Font; | |||
| } | |||
| inline Status | |||
| Font::GetLastStatus(void) const | |||
| { | |||
| return lastResult; | |||
| } | |||
| // protected method | |||
| inline Status | |||
| Font::SetStatus(IN Status status) const | |||
| { | |||
| if (status != Ok) | |||
| return (lastResult = status); | |||
| else | |||
| return status; | |||
| } | |||
| #endif | |||
| @@ -0,0 +1,149 @@ | |||
| /**************************************************************************\ | |||
| * | |||
| * Copyright (c) 2000, Microsoft Corp. All Rights Reserved. | |||
| * | |||
| * Module Name: | |||
| * | |||
| * GdiplusFontCollection.h | |||
| * | |||
| * Abstract: | |||
| * | |||
| * Font collections (Installed and Private) | |||
| * | |||
| \**************************************************************************/ | |||
| #ifndef _GDIPLUSFONTCOLL_H | |||
| #define _GDIPLUSFONTCOLL_H | |||
| inline | |||
| FontCollection::FontCollection() | |||
| { | |||
| nativeFontCollection = NULL; | |||
| } | |||
| inline | |||
| FontCollection::~FontCollection() | |||
| { | |||
| } | |||
| inline INT | |||
| FontCollection::GetFamilyCount() const | |||
| { | |||
| INT numFound = 0; | |||
| lastResult = DllExports::GdipGetFontCollectionFamilyCount( | |||
| nativeFontCollection, &numFound); | |||
| return numFound; | |||
| } | |||
| inline Status | |||
| FontCollection::GetFamilies( | |||
| IN INT numSought, | |||
| OUT FontFamily * gpfamilies, | |||
| OUT INT * numFound | |||
| ) const | |||
| { | |||
| if (numSought <= 0 || gpfamilies == NULL || numFound == NULL) | |||
| { | |||
| return SetStatus(InvalidParameter); | |||
| } | |||
| *numFound = 0; | |||
| GpFontFamily **nativeFamilyList = new GpFontFamily*[numSought]; | |||
| if (nativeFamilyList == NULL) | |||
| { | |||
| return SetStatus(OutOfMemory); | |||
| } | |||
| Status status = SetStatus(DllExports::GdipGetFontCollectionFamilyList( | |||
| nativeFontCollection, | |||
| numSought, | |||
| nativeFamilyList, | |||
| numFound | |||
| )); | |||
| if (status == Ok) | |||
| { | |||
| for (INT i = 0; i < *numFound; i++) | |||
| { | |||
| DllExports::GdipCloneFontFamily(nativeFamilyList[i], | |||
| &gpfamilies[i].nativeFamily); | |||
| } | |||
| } | |||
| delete [] nativeFamilyList; | |||
| return status; | |||
| } | |||
| inline Status FontCollection::GetLastStatus () const | |||
| { | |||
| return lastResult; | |||
| } | |||
| // protected method | |||
| inline Status | |||
| FontCollection::SetStatus(IN Status status) const | |||
| { | |||
| lastResult = status; | |||
| return lastResult; | |||
| } | |||
| inline | |||
| InstalledFontCollection::InstalledFontCollection() | |||
| { | |||
| nativeFontCollection = NULL; | |||
| lastResult = DllExports::GdipNewInstalledFontCollection(&nativeFontCollection); | |||
| } | |||
| inline | |||
| InstalledFontCollection::~InstalledFontCollection() | |||
| { | |||
| } | |||
| #ifndef DCR_USE_NEW_235072 | |||
| inline Status | |||
| InstalledFontCollection::InstallFontFile(IN const WCHAR* filename) | |||
| { | |||
| return SetStatus(DllExports::GdipInstallFontFile(nativeFontCollection, filename)); | |||
| } | |||
| inline Status | |||
| InstalledFontCollection::UninstallFontFile(IN const WCHAR* filename) | |||
| { | |||
| return SetStatus(DllExports::GdipUninstallFontFile(nativeFontCollection, filename)); | |||
| } | |||
| #endif | |||
| inline | |||
| PrivateFontCollection::PrivateFontCollection() | |||
| { | |||
| nativeFontCollection = NULL; | |||
| lastResult = DllExports::GdipNewPrivateFontCollection(&nativeFontCollection); | |||
| } | |||
| inline | |||
| PrivateFontCollection::~PrivateFontCollection() | |||
| { | |||
| DllExports::GdipDeletePrivateFontCollection(&nativeFontCollection); | |||
| } | |||
| inline Status | |||
| PrivateFontCollection::AddFontFile(IN const WCHAR* filename) | |||
| { | |||
| return SetStatus(DllExports::GdipPrivateAddFontFile(nativeFontCollection, filename)); | |||
| } | |||
| inline Status | |||
| PrivateFontCollection::AddMemoryFont(IN const void* memory, | |||
| IN INT length) | |||
| { | |||
| return SetStatus(DllExports::GdipPrivateAddMemoryFont( | |||
| nativeFontCollection, | |||
| memory, | |||
| length)); | |||
| } | |||
| #endif // _GDIPLUSFONTCOLL_H | |||
| @@ -0,0 +1,271 @@ | |||
| /**************************************************************************\ | |||
| * | |||
| * Copyright (c) 1998-2000, Microsoft Corp. All Rights Reserved. | |||
| * | |||
| * Module Name: | |||
| * | |||
| * GdiplusFontFamily.h | |||
| * | |||
| * Abstract: | |||
| * | |||
| * Font family API related declarations | |||
| * | |||
| \**************************************************************************/ | |||
| #ifndef _GDIPLUS_FONT_FAMILY_H | |||
| #define _GDIPLUS_FONT_FAMILY_H | |||
| inline | |||
| FontFamily::FontFamily() : | |||
| nativeFamily (NULL), | |||
| lastResult (Ok) | |||
| { | |||
| } | |||
| inline | |||
| FontFamily::FontFamily( | |||
| IN const WCHAR* name, | |||
| IN const FontCollection* fontCollection | |||
| ) | |||
| { | |||
| nativeFamily = NULL; | |||
| lastResult = DllExports::GdipCreateFontFamilyFromName( | |||
| name, | |||
| fontCollection ? fontCollection->nativeFontCollection : NULL, | |||
| &nativeFamily | |||
| ); | |||
| #ifndef DCR_USE_NEW_135429 | |||
| if ((INT) lastResult >= 10) | |||
| lastResult = NotFound; | |||
| #endif | |||
| } | |||
| // private method | |||
| inline | |||
| FontFamily::FontFamily( | |||
| IN GpFontFamily *nativeOrig, | |||
| IN Status status | |||
| ) | |||
| { | |||
| lastResult = status; | |||
| nativeFamily = nativeOrig; | |||
| } | |||
| // Generic font family access | |||
| inline const FontFamily * | |||
| FontFamily::GenericSansSerif() | |||
| { | |||
| if (GenericSansSerifFontFamily != NULL) | |||
| { | |||
| return GenericSansSerifFontFamily; | |||
| } | |||
| GenericSansSerifFontFamily = | |||
| (FontFamily*) GenericSansSerifFontFamilyBuffer; | |||
| GenericSansSerifFontFamily->lastResult = | |||
| DllExports::GdipGetGenericFontFamilySansSerif( | |||
| &(GenericSansSerifFontFamily->nativeFamily) | |||
| ); | |||
| #ifndef DCR_USE_NEW_135429 | |||
| if ((INT) GenericSansSerifFontFamily->lastResult >= 10) | |||
| GenericSansSerifFontFamily->lastResult = NotFound; | |||
| #endif | |||
| return GenericSansSerifFontFamily; | |||
| } | |||
| inline const FontFamily * | |||
| FontFamily::GenericSerif() | |||
| { | |||
| if (GenericSerifFontFamily != NULL) | |||
| { | |||
| return GenericSerifFontFamily; | |||
| } | |||
| GenericSerifFontFamily = | |||
| (FontFamily*) GenericSerifFontFamilyBuffer; | |||
| GenericSerifFontFamily->lastResult = | |||
| DllExports::GdipGetGenericFontFamilySerif( | |||
| &(GenericSerifFontFamily->nativeFamily) | |||
| ); | |||
| #ifndef DCR_USE_NEW_135429 | |||
| if ((INT) GenericSerifFontFamily->lastResult >= 10) | |||
| GenericSerifFontFamily->lastResult = NotFound; | |||
| #endif | |||
| return GenericSerifFontFamily; | |||
| } | |||
| inline const FontFamily * | |||
| FontFamily::GenericMonospace() | |||
| { | |||
| if (GenericMonospaceFontFamily != NULL) | |||
| { | |||
| return GenericMonospaceFontFamily; | |||
| } | |||
| GenericMonospaceFontFamily = | |||
| (FontFamily*) GenericMonospaceFontFamilyBuffer; | |||
| GenericMonospaceFontFamily->lastResult = | |||
| DllExports::GdipGetGenericFontFamilyMonospace( | |||
| &(GenericMonospaceFontFamily->nativeFamily) | |||
| ); | |||
| #ifndef DCR_USE_NEW_135429 | |||
| if ((INT) GenericMonospaceFontFamily->lastResult >= 10) | |||
| GenericMonospaceFontFamily->lastResult = NotFound; | |||
| #endif | |||
| return GenericMonospaceFontFamily; | |||
| } | |||
| inline FontFamily::~FontFamily() | |||
| { | |||
| DllExports::GdipDeleteFontFamily (nativeFamily); | |||
| } | |||
| inline FontFamily * | |||
| FontFamily::Clone() const | |||
| { | |||
| GpFontFamily * clonedFamily = NULL; | |||
| SetStatus(DllExports::GdipCloneFontFamily (nativeFamily, &clonedFamily)); | |||
| return new FontFamily(clonedFamily, lastResult); | |||
| } | |||
| inline Status | |||
| FontFamily::GetFamilyName( | |||
| IN WCHAR name[LF_FACESIZE], | |||
| IN LANGID language | |||
| ) const | |||
| { | |||
| return SetStatus(DllExports::GdipGetFamilyName(nativeFamily, | |||
| name, | |||
| language)); | |||
| } | |||
| inline BOOL | |||
| FontFamily::IsStyleAvailable(IN INT style) const | |||
| { | |||
| BOOL StyleAvailable; | |||
| Status status; | |||
| status = SetStatus(DllExports::GdipIsStyleAvailable(nativeFamily, style, &StyleAvailable)); | |||
| if (status != Ok) | |||
| StyleAvailable = FALSE; | |||
| return StyleAvailable; | |||
| } | |||
| inline UINT16 | |||
| FontFamily::GetEmHeight(IN INT style) const | |||
| { | |||
| UINT16 EmHeight; | |||
| SetStatus(DllExports::GdipGetEmHeight(nativeFamily, style, &EmHeight)); | |||
| return EmHeight; | |||
| } | |||
| inline UINT16 | |||
| FontFamily::GetCellAscent(IN INT style) const | |||
| { | |||
| UINT16 CellAscent; | |||
| SetStatus(DllExports::GdipGetCellAscent(nativeFamily, style, &CellAscent)); | |||
| return CellAscent; | |||
| } | |||
| inline UINT16 | |||
| FontFamily::GetCellDescent(IN INT style) const | |||
| { | |||
| UINT16 CellDescent; | |||
| SetStatus(DllExports::GdipGetCellDescent(nativeFamily, style, &CellDescent)); | |||
| return CellDescent; | |||
| } | |||
| inline UINT16 | |||
| FontFamily::GetLineSpacing(IN INT style) const | |||
| { | |||
| UINT16 LineSpacing; | |||
| SetStatus(DllExports::GdipGetLineSpacing(nativeFamily, style, &LineSpacing)); | |||
| return LineSpacing; | |||
| } | |||
| #ifdef TEXTV2 | |||
| // The following APIs return data from the font OS/2 table | |||
| inline INT16 | |||
| FontFamily::GetTypographicAscent(IN INT style) const | |||
| { | |||
| INT16 TypographicAscent; | |||
| SetStatus(DllExports::GdipGetTypographicAscent(nativeFamily, style, &TypographicAscent)); | |||
| return TypographicAscent; | |||
| } | |||
| inline INT16 | |||
| FontFamily::GetTypographicDescent(IN INT style) const | |||
| { | |||
| INT16 TypographicDescent; | |||
| SetStatus(DllExports::GdipGetTypographicDescent(nativeFamily, style, &TypographicDescent)); | |||
| return TypographicDescent; | |||
| } | |||
| inline INT16 | |||
| FontFamily::GetTypographicLineGap(IN INT style) const | |||
| { | |||
| INT16 TypographicLineGap; | |||
| SetStatus(DllExports::GdipGetTypographicLineGap(nativeFamily, style, &TypographicLineGap)); | |||
| return TypographicLineGap; | |||
| } | |||
| #endif | |||
| /////////////////////////////////////////////////////////// | |||
| // GetLastStatus - return last error code and clear error code | |||
| inline Status | |||
| FontFamily::GetLastStatus() const | |||
| { | |||
| Status lastStatus = lastResult; | |||
| lastResult = Ok; | |||
| return lastStatus; | |||
| } | |||
| // protected method | |||
| inline Status | |||
| FontFamily::SetStatus(Status status) const | |||
| { | |||
| if (status != Ok) | |||
| return (lastResult = status); | |||
| else | |||
| return status; | |||
| } | |||
| #endif | |||
| @@ -0,0 +1,107 @@ | |||
| /**************************************************************************\ | |||
| * | |||
| * Copyright (c) 1998-2000, Microsoft Corp. All Rights Reserved. | |||
| * | |||
| * Module Name: | |||
| * | |||
| * GdiplusGpStubs.h | |||
| * | |||
| * Abstract: | |||
| * | |||
| * GDI+ Native C++ public header file | |||
| * | |||
| \**************************************************************************/ | |||
| #ifndef _GDIPLUSGPSTUBS_H | |||
| #define _GDIPLUSGPSTUBS_H | |||
| //--------------------------------------------------------------------------- | |||
| // GDI+ classes for forward reference | |||
| //--------------------------------------------------------------------------- | |||
| class Graphics; | |||
| class Pen; | |||
| class Brush; | |||
| class Matrix; | |||
| class Bitmap; | |||
| class Metafile; | |||
| class GraphicsPath; | |||
| class PathIterator; | |||
| class Region; | |||
| class Image; | |||
| class TextureBrush; | |||
| class HatchBrush; | |||
| class SolidBrush; | |||
| class LinearGradientBrush; | |||
| class PathGradientBrush; | |||
| class Font; | |||
| class FontFamily; | |||
| class FontCollection; | |||
| class InstalledFontCollection; | |||
| class PrivateFontCollection; | |||
| class ImageAttributes; | |||
| class CachedBitmap; | |||
| //--------------------------------------------------------------------------- | |||
| // Internal GDI+ classes for internal type checking | |||
| //--------------------------------------------------------------------------- | |||
| class GpGraphics {}; | |||
| class GpBrush {}; | |||
| class GpTexture : public GpBrush {}; | |||
| class GpSolidFill : public GpBrush {}; | |||
| class GpLineGradient : public GpBrush {}; | |||
| class GpPathGradient : public GpBrush {}; | |||
| class GpHatch : public GpBrush {}; | |||
| class GpPen {}; | |||
| class GpCustomLineCap {}; | |||
| class GpAdjustableArrowCap : public GpCustomLineCap {}; | |||
| class GpImage {}; | |||
| class GpBitmap : public GpImage {}; | |||
| class GpMetafile : public GpImage {}; | |||
| class GpImageAttributes {}; | |||
| class GpPath {}; | |||
| class GpRegion {}; | |||
| class GpPathIterator {}; | |||
| class GpFontFamily {}; | |||
| class GpFont {}; | |||
| class GpStringFormat {}; | |||
| class GpFontCollection {}; | |||
| class GpInstalledFontCollection : public GpFontCollection {}; | |||
| class GpPrivateFontCollection : public GpFontCollection {}; | |||
| class GpCachedBitmap; | |||
| typedef Status GpStatus; | |||
| typedef FillMode GpFillMode; | |||
| typedef WrapMode GpWrapMode; | |||
| typedef Unit GpUnit; | |||
| typedef CoordinateSpace GpCoordinateSpace; | |||
| typedef PointF GpPointF; | |||
| typedef Point GpPoint; | |||
| typedef RectF GpRectF; | |||
| typedef Rect GpRect; | |||
| typedef SizeF GpSizeF; | |||
| typedef HatchStyle GpHatchStyle; | |||
| typedef DashStyle GpDashStyle; | |||
| typedef LineCap GpLineCap; | |||
| typedef DashCap GpDashCap; | |||
| typedef PenAlignment GpPenAlignment; | |||
| typedef LineJoin GpLineJoin; | |||
| typedef PenType GpPenType; | |||
| typedef Matrix GpMatrix; | |||
| typedef BrushType GpBrushType; | |||
| typedef MatrixOrder GpMatrixOrder; | |||
| typedef FlushIntention GpFlushIntention; | |||
| typedef PathData GpPathData; | |||
| #endif // !_GDIPLUSGPSTUBS.HPP | |||
| @@ -0,0 +1,793 @@ | |||
| /**************************************************************************\ | |||
| * | |||
| * 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 class 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 | |||
| @@ -0,0 +1,397 @@ | |||
| /**************************************************************************\ | |||
| * | |||
| * Copyright (c) 1998-2000, Microsoft Corp. All Rights Reserved. | |||
| * | |||
| * Module Name: | |||
| * | |||
| * Image Attributes | |||
| * | |||
| * Abstract: | |||
| * | |||
| * Class for color adjustment object passed to Graphics.DrawImage | |||
| * | |||
| \**************************************************************************/ | |||
| #ifndef _GDIPLUSIMAGEATTRIBUTES_H | |||
| #define _GDIPLUSIMAGEATTRIBUTES_H | |||
| class GpImageAttributes; | |||
| // There are 5 possible sets of color adjustments: | |||
| // ColorAdjustDefault, | |||
| // ColorAdjustBitmap, | |||
| // ColorAdjustBrush, | |||
| // ColorAdjustPen, | |||
| // ColorAdjustText, | |||
| // Bitmaps, Brushes, Pens, and Text will all use any color adjustments | |||
| // that have been set into the default ImageAttributes until their own | |||
| // color adjustments have been set. So as soon as any "Set" method is | |||
| // called for Bitmaps, Brushes, Pens, or Text, then they start from | |||
| // scratch with only the color adjustments that have been set for them. | |||
| // Calling Reset removes any individual color adjustments for a type | |||
| // and makes it revert back to using all the default color adjustments | |||
| // (if any). The SetToIdentity method is a way to force a type to | |||
| // have no color adjustments at all, regardless of what previous adjustments | |||
| // have been set for the defaults or for that type. | |||
| class ImageAttributes : public GdiplusBase | |||
| { | |||
| friend class Graphics; | |||
| friend class TextureBrush; | |||
| public: | |||
| ImageAttributes() | |||
| { | |||
| nativeImageAttr = NULL; | |||
| lastResult = DllExports::GdipCreateImageAttributes(&nativeImageAttr); | |||
| } | |||
| ~ImageAttributes() | |||
| { | |||
| DllExports::GdipDisposeImageAttributes(nativeImageAttr); | |||
| } | |||
| ImageAttributes* Clone() const | |||
| { | |||
| GpImageAttributes* clone; | |||
| SetStatus(DllExports::GdipCloneImageAttributes( | |||
| nativeImageAttr, | |||
| &clone)); | |||
| return new ImageAttributes(clone, lastResult); | |||
| } | |||
| // Set to identity, regardless of what the default color adjustment is. | |||
| Status | |||
| SetToIdentity( | |||
| IN ColorAdjustType type = ColorAdjustTypeDefault | |||
| ) | |||
| { | |||
| return SetStatus(DllExports::GdipSetImageAttributesToIdentity( | |||
| nativeImageAttr, | |||
| type)); | |||
| } | |||
| // Remove any individual color adjustments, and go back to using the default | |||
| Status | |||
| Reset( | |||
| IN ColorAdjustType type = ColorAdjustTypeDefault | |||
| ) | |||
| { | |||
| return SetStatus(DllExports::GdipResetImageAttributes( | |||
| nativeImageAttr, | |||
| type)); | |||
| } | |||
| Status | |||
| SetColorMatrix( | |||
| IN const ColorMatrix *colorMatrix, | |||
| IN ColorMatrixFlags mode = ColorMatrixFlagsDefault, | |||
| IN ColorAdjustType type = ColorAdjustTypeDefault | |||
| ) | |||
| { | |||
| return SetStatus(DllExports::GdipSetImageAttributesColorMatrix( | |||
| nativeImageAttr, | |||
| type, | |||
| TRUE, | |||
| colorMatrix, | |||
| NULL, | |||
| mode)); | |||
| } | |||
| Status ClearColorMatrix( | |||
| IN ColorAdjustType type = ColorAdjustTypeDefault | |||
| ) | |||
| { | |||
| return SetStatus(DllExports::GdipSetImageAttributesColorMatrix( | |||
| nativeImageAttr, | |||
| type, | |||
| FALSE, | |||
| NULL, | |||
| NULL, | |||
| ColorMatrixFlagsDefault)); | |||
| } | |||
| Status | |||
| SetColorMatrices( | |||
| IN const ColorMatrix *colorMatrix, | |||
| IN const ColorMatrix *grayMatrix, | |||
| IN ColorMatrixFlags mode = ColorMatrixFlagsDefault, | |||
| IN ColorAdjustType type = ColorAdjustTypeDefault | |||
| ) | |||
| { | |||
| return SetStatus(DllExports::GdipSetImageAttributesColorMatrix( | |||
| nativeImageAttr, | |||
| type, | |||
| TRUE, | |||
| colorMatrix, | |||
| grayMatrix, | |||
| mode)); | |||
| } | |||
| Status ClearColorMatrices( | |||
| IN ColorAdjustType type = ColorAdjustTypeDefault | |||
| ) | |||
| { | |||
| return SetStatus(DllExports::GdipSetImageAttributesColorMatrix( | |||
| nativeImageAttr, | |||
| type, | |||
| FALSE, | |||
| NULL, | |||
| NULL, | |||
| ColorMatrixFlagsDefault)); | |||
| } | |||
| Status SetThreshold( | |||
| IN REAL threshold, | |||
| IN ColorAdjustType type = ColorAdjustTypeDefault | |||
| ) | |||
| { | |||
| return SetStatus(DllExports::GdipSetImageAttributesThreshold( | |||
| nativeImageAttr, | |||
| type, | |||
| TRUE, | |||
| threshold)); | |||
| } | |||
| Status ClearThreshold( | |||
| IN ColorAdjustType type = ColorAdjustTypeDefault | |||
| ) | |||
| { | |||
| return SetStatus(DllExports::GdipSetImageAttributesThreshold( | |||
| nativeImageAttr, | |||
| type, | |||
| FALSE, | |||
| 0.0)); | |||
| } | |||
| Status SetGamma( | |||
| IN REAL gamma, | |||
| IN ColorAdjustType type = ColorAdjustTypeDefault | |||
| ) | |||
| { | |||
| return SetStatus(DllExports::GdipSetImageAttributesGamma( | |||
| nativeImageAttr, | |||
| type, | |||
| TRUE, | |||
| gamma)); | |||
| } | |||
| Status ClearGamma( | |||
| IN ColorAdjustType type = ColorAdjustTypeDefault | |||
| ) | |||
| { | |||
| return SetStatus(DllExports::GdipSetImageAttributesGamma( | |||
| nativeImageAttr, | |||
| type, | |||
| FALSE, | |||
| 0.0)); | |||
| } | |||
| Status SetNoOp( | |||
| IN ColorAdjustType type = ColorAdjustTypeDefault | |||
| ) | |||
| { | |||
| return SetStatus(DllExports::GdipSetImageAttributesNoOp( | |||
| nativeImageAttr, | |||
| type, | |||
| TRUE)); | |||
| } | |||
| Status ClearNoOp( | |||
| IN ColorAdjustType type = ColorAdjustTypeDefault | |||
| ) | |||
| { | |||
| return SetStatus(DllExports::GdipSetImageAttributesNoOp( | |||
| nativeImageAttr, | |||
| type, | |||
| FALSE)); | |||
| } | |||
| Status SetColorKey( | |||
| IN const Color& colorLow, | |||
| IN const Color& colorHigh, | |||
| IN ColorAdjustType type = ColorAdjustTypeDefault | |||
| ) | |||
| { | |||
| return SetStatus(DllExports::GdipSetImageAttributesColorKeys( | |||
| nativeImageAttr, | |||
| type, | |||
| TRUE, | |||
| colorLow.GetValue(), | |||
| colorHigh.GetValue())); | |||
| } | |||
| Status ClearColorKey( | |||
| IN ColorAdjustType type = ColorAdjustTypeDefault | |||
| ) | |||
| { | |||
| return SetStatus(DllExports::GdipSetImageAttributesColorKeys( | |||
| nativeImageAttr, | |||
| type, | |||
| FALSE, | |||
| NULL, | |||
| NULL)); | |||
| } | |||
| Status SetOutputChannel( | |||
| IN ColorChannelFlags channelFlags, | |||
| IN ColorAdjustType type = ColorAdjustTypeDefault | |||
| ) | |||
| { | |||
| return SetStatus(DllExports::GdipSetImageAttributesOutputChannel( | |||
| nativeImageAttr, | |||
| type, | |||
| TRUE, | |||
| channelFlags)); | |||
| } | |||
| Status ClearOutputChannel( | |||
| IN ColorAdjustType type = ColorAdjustTypeDefault | |||
| ) | |||
| { | |||
| return SetStatus(DllExports::GdipSetImageAttributesOutputChannel( | |||
| nativeImageAttr, | |||
| type, | |||
| FALSE, | |||
| ColorChannelFlagsLast)); | |||
| } | |||
| Status SetOutputChannelColorProfile( | |||
| IN const WCHAR *colorProfileFilename, | |||
| IN ColorAdjustType type = ColorAdjustTypeDefault | |||
| ) | |||
| { | |||
| return SetStatus(DllExports::GdipSetImageAttributesOutputChannelColorProfile( | |||
| nativeImageAttr, | |||
| type, | |||
| TRUE, | |||
| colorProfileFilename)); | |||
| } | |||
| Status ClearOutputChannelColorProfile( | |||
| IN ColorAdjustType type = ColorAdjustTypeDefault | |||
| ) | |||
| { | |||
| return SetStatus(DllExports::GdipSetImageAttributesOutputChannelColorProfile( | |||
| nativeImageAttr, | |||
| type, | |||
| FALSE, | |||
| NULL)); | |||
| } | |||
| Status SetRemapTable( | |||
| IN UINT mapSize, | |||
| IN const ColorMap *map, | |||
| IN ColorAdjustType type = ColorAdjustTypeDefault | |||
| ) | |||
| { | |||
| return SetStatus(DllExports::GdipSetImageAttributesRemapTable( | |||
| nativeImageAttr, | |||
| type, | |||
| TRUE, | |||
| mapSize, | |||
| map)); | |||
| } | |||
| Status ClearRemapTable( | |||
| IN ColorAdjustType type = ColorAdjustTypeDefault | |||
| ) | |||
| { | |||
| return SetStatus(DllExports::GdipSetImageAttributesRemapTable( | |||
| nativeImageAttr, | |||
| type, | |||
| FALSE, | |||
| 0, | |||
| NULL)); | |||
| } | |||
| Status SetBrushRemapTable(IN UINT mapSize, | |||
| IN const ColorMap *map) | |||
| { | |||
| return this->SetRemapTable(mapSize, map, ColorAdjustTypeBrush); | |||
| } | |||
| Status ClearBrushRemapTable() | |||
| { | |||
| return this->ClearRemapTable(ColorAdjustTypeBrush); | |||
| } | |||
| Status SetWrapMode(IN WrapMode wrap, | |||
| IN const Color& color = Color(), | |||
| IN BOOL clamp = FALSE) | |||
| { | |||
| ARGB argb = color.GetValue(); | |||
| return SetStatus(DllExports::GdipSetImageAttributesWrapMode( | |||
| nativeImageAttr, wrap, argb, clamp)); | |||
| } | |||
| #ifndef DCR_USE_NEW_145139 | |||
| Status SetICMMode(IN BOOL on) | |||
| { | |||
| on; | |||
| // This is not implemented. | |||
| // The supported method for doing ICM conversion from the embedded | |||
| // ICC profile is to use the Bitmap constructor from a file or stream | |||
| // and specify TRUE for the useIcm parameter. This will cause the | |||
| // image to be ICM converted when it's loaded from the file/stream | |||
| // if the profile exists. | |||
| return SetStatus(NotImplemented); | |||
| // DllExports::GdipSetImageAttributesICMMode(nativeImageAttr, on) | |||
| } | |||
| #endif | |||
| // The flags of the palette are ignored. | |||
| Status GetAdjustedPalette(IN OUT ColorPalette* colorPalette, | |||
| IN ColorAdjustType colorAdjustType) const | |||
| { | |||
| return SetStatus(DllExports::GdipGetImageAttributesAdjustedPalette( | |||
| nativeImageAttr, colorPalette, colorAdjustType)); | |||
| } | |||
| Status GetLastStatus() const | |||
| { | |||
| Status lastStatus = lastResult; | |||
| lastResult = Ok; | |||
| return lastStatus; | |||
| } | |||
| #ifdef DCR_USE_NEW_250932 | |||
| private: | |||
| ImageAttributes(const ImageAttributes &); | |||
| ImageAttributes& operator=(const ImageAttributes &); | |||
| #endif | |||
| protected: | |||
| ImageAttributes(GpImageAttributes* imageAttr, Status status) | |||
| { | |||
| SetNativeImageAttr(imageAttr); | |||
| lastResult = status; | |||
| } | |||
| VOID SetNativeImageAttr(GpImageAttributes* nativeImageAttr) | |||
| { | |||
| this->nativeImageAttr = nativeImageAttr; | |||
| } | |||
| Status SetStatus(Status status) const | |||
| { | |||
| if (status != Ok) | |||
| return (lastResult = status); | |||
| else | |||
| return status; | |||
| } | |||
| protected: | |||
| GpImageAttributes* nativeImageAttr; | |||
| mutable Status lastResult; | |||
| }; | |||
| #endif | |||
| @@ -0,0 +1,73 @@ | |||
| /**************************************************************************\ | |||
| * | |||
| * Copyright (c) 2000, Microsoft Corp. All Rights Reserved. | |||
| * | |||
| * Module Name: | |||
| * | |||
| * GdiplusImageCodec.h | |||
| * | |||
| * Abstract: | |||
| * | |||
| * APIs for imaging codecs. | |||
| * | |||
| \**************************************************************************/ | |||
| #ifndef _GDIPLUSIMAGECODEC_H | |||
| #define _GDIPLUSIMAGECODEC_H | |||
| //-------------------------------------------------------------------------- | |||
| // Codec Management APIs | |||
| //-------------------------------------------------------------------------- | |||
| inline Status | |||
| GetImageDecodersSize( | |||
| OUT UINT *numDecoders, | |||
| OUT UINT *size) | |||
| { | |||
| return DllExports::GdipGetImageDecodersSize(numDecoders, size); | |||
| } | |||
| inline Status | |||
| GetImageDecoders( | |||
| IN UINT numDecoders, | |||
| IN UINT size, | |||
| OUT ImageCodecInfo *decoders) | |||
| { | |||
| return DllExports::GdipGetImageDecoders(numDecoders, size, decoders); | |||
| } | |||
| inline Status | |||
| GetImageEncodersSize( | |||
| OUT UINT *numEncoders, | |||
| OUT UINT *size) | |||
| { | |||
| return DllExports::GdipGetImageEncodersSize(numEncoders, size); | |||
| } | |||
| inline Status | |||
| GetImageEncoders( | |||
| IN UINT numEncoders, | |||
| IN UINT size, | |||
| OUT ImageCodecInfo *encoders) | |||
| { | |||
| return DllExports::GdipGetImageEncoders(numEncoders, size, encoders); | |||
| } | |||
| inline Status | |||
| AddImageCodec( | |||
| IN const ImageCodecInfo* codec) | |||
| { | |||
| return DllExports::GdipAddImageCodec(codec); | |||
| } | |||
| inline Status | |||
| RemoveImageCodec( | |||
| IN const ImageCodecInfo* codec) | |||
| { | |||
| return DllExports::GdipRemoveImageCodec(codec); | |||
| } | |||
| #endif // _GDIPLUSIMAGECODEC_H | |||
| @@ -0,0 +1,540 @@ | |||
| /**************************************************************************\ | |||
| * | |||
| * Copyright (c) 1999-2000 Microsoft Corporation | |||
| * | |||
| * Module Name: | |||
| * | |||
| * GdiplusImaging.h | |||
| * | |||
| * Abstract: | |||
| * | |||
| * GUIDs defined and used by the imaging library | |||
| * | |||
| \**************************************************************************/ | |||
| #ifndef _GDIPLUSIMAGING_H | |||
| #define _GDIPLUSIMAGING_H | |||
| //--------------------------------------------------------------------------- | |||
| // Image file format identifiers | |||
| //--------------------------------------------------------------------------- | |||
| DEFINE_GUID(ImageFormatUndefined, 0xb96b3ca9,0x0728,0x11d3,0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e); | |||
| DEFINE_GUID(ImageFormatMemoryBMP, 0xb96b3caa,0x0728,0x11d3,0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e); | |||
| DEFINE_GUID(ImageFormatBMP, 0xb96b3cab,0x0728,0x11d3,0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e); | |||
| DEFINE_GUID(ImageFormatEMF, 0xb96b3cac,0x0728,0x11d3,0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e); | |||
| DEFINE_GUID(ImageFormatWMF, 0xb96b3cad,0x0728,0x11d3,0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e); | |||
| DEFINE_GUID(ImageFormatJPEG, 0xb96b3cae,0x0728,0x11d3,0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e); | |||
| DEFINE_GUID(ImageFormatPNG, 0xb96b3caf,0x0728,0x11d3,0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e); | |||
| DEFINE_GUID(ImageFormatGIF, 0xb96b3cb0,0x0728,0x11d3,0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e); | |||
| DEFINE_GUID(ImageFormatTIFF, 0xb96b3cb1,0x0728,0x11d3,0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e); | |||
| DEFINE_GUID(ImageFormatEXIF, 0xb96b3cb2,0x0728,0x11d3,0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e); | |||
| #ifndef DCR_USE_NEW_140855 | |||
| DEFINE_GUID(ImageFormatPhotoCD, 0xb96b3cb3,0x0728,0x11d3,0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e); | |||
| DEFINE_GUID(ImageFormatFlashPIX, 0xb96b3cb4,0x0728,0x11d3,0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e); | |||
| #endif | |||
| DEFINE_GUID(ImageFormatIcon, 0xb96b3cb5,0x0728,0x11d3,0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e); | |||
| //--------------------------------------------------------------------------- | |||
| // Predefined multi-frame dimension IDs | |||
| //--------------------------------------------------------------------------- | |||
| DEFINE_GUID(FrameDimensionTime, 0x6aedbd6d,0x3fb5,0x418a,0x83,0xa6,0x7f,0x45,0x22,0x9d,0xc8,0x72); | |||
| DEFINE_GUID(FrameDimensionResolution, 0x84236f7b,0x3bd3,0x428f,0x8d,0xab,0x4e,0xa1,0x43,0x9c,0xa3,0x15); | |||
| DEFINE_GUID(FrameDimensionPage, 0x7462dc86,0x6180,0x4c7e,0x8e,0x3f,0xee,0x73,0x33,0xa7,0xa4,0x83); | |||
| //--------------------------------------------------------------------------- | |||
| // Property sets | |||
| //--------------------------------------------------------------------------- | |||
| DEFINE_GUID(FormatIDImageInformation, 0xe5836cbe,0x5eef,0x4f1d,0xac,0xde,0xae,0x4c,0x43,0xb6,0x08,0xce); | |||
| DEFINE_GUID(FormatIDJpegAppHeaders, 0x1c4afdcd,0x6177,0x43cf,0xab,0xc7,0x5f,0x51,0xaf,0x39,0xee,0x85); | |||
| #ifndef DCR_USE_NEW_140855 | |||
| //--------------------------------------------------------------------------- | |||
| // Decoder parameter sets | |||
| //--------------------------------------------------------------------------- | |||
| DEFINE_GUID(DecoderTransColor, 0xb7a98c8f,0xdce7,0x457d,0xbf,0xa5,0xce,0xa7,0x1b,0xd1,0x4d,0xd6); | |||
| DEFINE_GUID(DecoderTransRange, 0xabeed189,0xd988,0x4d03,0xb4,0x25,0x57,0x10,0x55,0xc7,0x6a,0xd1); | |||
| DEFINE_GUID(DecoderOutputChannel, 0x2ff8f51e,0x724d,0x45fe,0x86,0xce,0x17,0x77,0xa0,0x56,0xda,0x60); | |||
| DEFINE_GUID(DecoderIconRes, 0x5c656eec,0xe94f,0x45ba,0xa6,0xf6,0x10,0x62,0xe8,0x5f,0x4a,0x7f); | |||
| #endif | |||
| //--------------------------------------------------------------------------- | |||
| // Encoder parameter sets | |||
| //--------------------------------------------------------------------------- | |||
| DEFINE_GUID(EncoderCompression, 0xe09d739d,0xccd4,0x44ee,0x8e,0xba,0x3f,0xbf,0x8b,0xe4,0xfc,0x58); | |||
| DEFINE_GUID(EncoderColorDepth, 0x66087055,0xad66,0x4c7c,0x9a,0x18,0x38,0xa2,0x31,0x0b,0x83,0x37); | |||
| DEFINE_GUID(EncoderScanMethod, 0x3a4e2661,0x3109,0x4e56,0x85,0x36,0x42,0xc1,0x56,0xe7,0xdc,0xfa); | |||
| DEFINE_GUID(EncoderVersion, 0x24d18c76,0x814a,0x41a4,0xbf,0x53,0x1c,0x21,0x9c,0xcc,0xf7,0x97); | |||
| DEFINE_GUID(EncoderRenderMethod, 0x6d42c53a,0x229a,0x4825,0x8b,0xb7,0x5c,0x99,0xe2,0xb9,0xa8,0xb8); | |||
| DEFINE_GUID(EncoderQuality, 0x1d5be4b5,0xfa4a,0x452d,0x9c,0xdd,0x5d,0xb3,0x51,0x05,0xe7,0xeb); | |||
| DEFINE_GUID(EncoderTransformation,0x8d0eb2d1,0xa58e,0x4ea8,0xaa,0x14,0x10,0x80,0x74,0xb7,0xb6,0xf9); | |||
| DEFINE_GUID(EncoderLuminanceTable,0xedb33bce,0x0266,0x4a77,0xb9,0x04,0x27,0x21,0x60,0x99,0xe7,0x17); | |||
| DEFINE_GUID(EncoderChrominanceTable,0xf2e455dc,0x09b3,0x4316,0x82,0x60,0x67,0x6a,0xda,0x32,0x48,0x1c); | |||
| DEFINE_GUID(EncoderSaveFlag,0x292266fc,0xac40,0x47bf,0x8c, 0xfc, 0xa8, 0x5b, 0x89, 0xa6, 0x55, 0xde); | |||
| DEFINE_GUID(CodecIImageBytes,0x025d1823,0x6c7d,0x447b,0xbb, 0xdb, 0xa3, 0xcb, 0xc3, 0xdf, 0xa2, 0xfc); | |||
| MIDL_INTERFACE("025D1823-6C7D-447B-BBDB-A3CBC3DFA2FC") | |||
| IImageBytes : public IUnknown | |||
| { | |||
| public: | |||
| // Return total number of bytes in the IStream | |||
| STDMETHOD(CountBytes)( | |||
| OUT UINT *pcb | |||
| ) = 0; | |||
| // Locks "cb" bytes, starting from "ulOffset" in the stream, and returns the | |||
| // pointer to the beginning of the locked memory chunk in "ppvBytes" | |||
| STDMETHOD(LockBytes)( | |||
| IN UINT cb, | |||
| IN ULONG ulOffset, | |||
| OUT const VOID ** ppvBytes | |||
| ) = 0; | |||
| // Unlocks "cb" bytes, pointed by "pvBytes", starting from "ulOffset" in the | |||
| // stream | |||
| STDMETHOD(UnlockBytes)( | |||
| IN const VOID *pvBytes, | |||
| IN UINT cb, | |||
| IN ULONG ulOffset | |||
| ) = 0; | |||
| }; | |||
| //-------------------------------------------------------------------------- | |||
| // ImageCodecInfo structure | |||
| //-------------------------------------------------------------------------- | |||
| class ImageCodecInfo | |||
| { | |||
| public: | |||
| CLSID Clsid; | |||
| GUID FormatID; | |||
| const WCHAR* CodecName; | |||
| const WCHAR* DllName; | |||
| const WCHAR* FormatDescription; | |||
| const WCHAR* FilenameExtension; | |||
| const WCHAR* MimeType; | |||
| DWORD Flags; | |||
| DWORD Version; | |||
| DWORD SigCount; | |||
| DWORD SigSize; | |||
| const BYTE* SigPattern; | |||
| const BYTE* SigMask; | |||
| }; | |||
| //-------------------------------------------------------------------------- | |||
| // Information flags about image codecs | |||
| //-------------------------------------------------------------------------- | |||
| enum ImageCodecFlags | |||
| { | |||
| ImageCodecFlagsEncoder = 0x00000001, | |||
| ImageCodecFlagsDecoder = 0x00000002, | |||
| ImageCodecFlagsSupportBitmap = 0x00000004, | |||
| ImageCodecFlagsSupportVector = 0x00000008, | |||
| ImageCodecFlagsSeekableEncode = 0x00000010, | |||
| ImageCodecFlagsBlockingDecode = 0x00000020, | |||
| ImageCodecFlagsBuiltin = 0x00010000, | |||
| ImageCodecFlagsSystem = 0x00020000, | |||
| ImageCodecFlagsUser = 0x00040000 | |||
| }; | |||
| //--------------------------------------------------------------------------- | |||
| // Access modes used when calling Image::LockBits | |||
| //--------------------------------------------------------------------------- | |||
| enum ImageLockMode | |||
| { | |||
| ImageLockModeRead = 0x0001, | |||
| ImageLockModeWrite = 0x0002, | |||
| ImageLockModeUserInputBuf= 0x0004 | |||
| }; | |||
| //--------------------------------------------------------------------------- | |||
| // Information about image pixel data | |||
| //--------------------------------------------------------------------------- | |||
| class BitmapData | |||
| { | |||
| public: | |||
| UINT Width; | |||
| UINT Height; | |||
| INT Stride; | |||
| PixelFormat PixelFormat1; | |||
| VOID* Scan0; | |||
| UINT_PTR Reserved; | |||
| }; | |||
| //--------------------------------------------------------------------------- | |||
| // Image flags | |||
| //--------------------------------------------------------------------------- | |||
| enum ImageFlags | |||
| { | |||
| ImageFlagsNone = 0, | |||
| // Low-word: shared with SINKFLAG_x | |||
| ImageFlagsScalable = 0x0001, | |||
| ImageFlagsHasAlpha = 0x0002, | |||
| ImageFlagsHasTranslucent = 0x0004, | |||
| ImageFlagsPartiallyScalable = 0x0008, | |||
| // Low-word: color space definition | |||
| ImageFlagsColorSpaceRGB = 0x0010, | |||
| ImageFlagsColorSpaceCMYK = 0x0020, | |||
| ImageFlagsColorSpaceGRAY = 0x0040, | |||
| ImageFlagsColorSpaceYCBCR = 0x0080, | |||
| ImageFlagsColorSpaceYCCK = 0x0100, | |||
| // Low-word: image size info | |||
| ImageFlagsHasRealDPI = 0x1000, | |||
| ImageFlagsHasRealPixelSize = 0x2000, | |||
| // High-word | |||
| ImageFlagsReadOnly = 0x00010000, | |||
| ImageFlagsCaching = 0x00020000 | |||
| }; | |||
| enum RotateFlipType | |||
| { | |||
| RotateNoneFlipNone = 0, | |||
| Rotate90FlipNone = 1, | |||
| Rotate180FlipNone = 2, | |||
| Rotate270FlipNone = 3, | |||
| RotateNoneFlipX = 4, | |||
| Rotate90FlipX = 5, | |||
| Rotate180FlipX = 6, | |||
| Rotate270FlipX = 7, | |||
| RotateNoneFlipY = Rotate180FlipX, | |||
| Rotate90FlipY = Rotate270FlipX, | |||
| Rotate180FlipY = RotateNoneFlipX, | |||
| Rotate270FlipY = Rotate90FlipX, | |||
| RotateNoneFlipXY = Rotate180FlipNone, | |||
| Rotate90FlipXY = Rotate270FlipNone, | |||
| Rotate180FlipXY = RotateNoneFlipNone, | |||
| Rotate270FlipXY = Rotate90FlipNone | |||
| }; | |||
| //--------------------------------------------------------------------------- | |||
| // Encoder Parameter structure | |||
| //--------------------------------------------------------------------------- | |||
| class EncoderParameter | |||
| { | |||
| public: | |||
| GUID Guid; // GUID of the parameter | |||
| ULONG NumberOfValues; // Number of the parameter values | |||
| ULONG Type; // Value type, like ValueTypeLONG etc. | |||
| VOID* Value; // A pointer to the parameter values | |||
| }; | |||
| //--------------------------------------------------------------------------- | |||
| // Encoder Parameters structure | |||
| //--------------------------------------------------------------------------- | |||
| class EncoderParameters | |||
| { | |||
| public: | |||
| UINT Count; // Number of parameters in this structure | |||
| EncoderParameter Parameter[1]; // Parameter values | |||
| }; | |||
| //--------------------------------------------------------------------------- | |||
| // Property Item | |||
| //--------------------------------------------------------------------------- | |||
| class PropertyItem | |||
| { | |||
| public: | |||
| PROPID id; // ID of this property | |||
| ULONG length; // Length of the property value, in bytes | |||
| WORD type; // Type of the value, as one of TAG_TYPE_XXX | |||
| // defined above | |||
| VOID* value; // property value | |||
| }; | |||
| #ifdef DCR_USE_NEW_140857 | |||
| //--------------------------------------------------------------------------- | |||
| // Image property types | |||
| //--------------------------------------------------------------------------- | |||
| #define PropertyTagTypeByte 1 | |||
| #define PropertyTagTypeASCII 2 | |||
| #define PropertyTagTypeShort 3 | |||
| #define PropertyTagTypeLong 4 | |||
| #define PropertyTagTypeRational 5 | |||
| #define PropertyTagTypeUndefined 7 | |||
| #define PropertyTagTypeSLONG 9 | |||
| #define PropertyTagTypeSRational 10 | |||
| #endif | |||
| //--------------------------------------------------------------------------- | |||
| // Image property ID tags | |||
| //--------------------------------------------------------------------------- | |||
| #define PropertyTagExifIFD 0x8769 | |||
| #define PropertyTagGpsIFD 0x8825 | |||
| #define PropertyTagNewSubfileType 0x00FE | |||
| #define PropertyTagSubfileType 0x00FF | |||
| #define PropertyTagImageWidth 0x0100 | |||
| #define PropertyTagImageHeight 0x0101 | |||
| #define PropertyTagBitsPerSample 0x0102 | |||
| #define PropertyTagCompression 0x0103 | |||
| #define PropertyTagPhotometricInterp 0x0106 | |||
| #define PropertyTagThreshHolding 0x0107 | |||
| #define PropertyTagCellWidth 0x0108 | |||
| #define PropertyTagCellHeight 0x0109 | |||
| #define PropertyTagFillOrder 0x010A | |||
| #define PropertyTagDocumentName 0x010D | |||
| #define PropertyTagImageDescription 0x010E | |||
| #define PropertyTagEquipMake 0x010F | |||
| #define PropertyTagEquipModel 0x0110 | |||
| #define PropertyTagStripOffsets 0x0111 | |||
| #define PropertyTagOrientation 0x0112 | |||
| #define PropertyTagSamplesPerPixel 0x0115 | |||
| #define PropertyTagRowsPerStrip 0x0116 | |||
| #define PropertyTagStripBytesCount 0x0117 | |||
| #define PropertyTagMinSampleValue 0x0118 | |||
| #define PropertyTagMaxSampleValue 0x0119 | |||
| #define PropertyTagXResolution 0x011A // Image resolution in width direction | |||
| #define PropertyTagYResolution 0x011B // Image resolution in height direction | |||
| #define PropertyTagPlanarConfig 0x011C // Image data arrangement | |||
| #define PropertyTagPageName 0x011D | |||
| #define PropertyTagXPosition 0x011E | |||
| #define PropertyTagYPosition 0x011F | |||
| #define PropertyTagFreeOffset 0x0120 | |||
| #define PropertyTagFreeByteCounts 0x0121 | |||
| #define PropertyTagGrayResponseUnit 0x0122 | |||
| #define PropertyTagGrayResponseCurve 0x0123 | |||
| #define PropertyTagT4Option 0x0124 | |||
| #define PropertyTagT6Option 0x0125 | |||
| #define PropertyTagResolutionUnit 0x0128 // Unit of X and Y resolution | |||
| #define PropertyTagPageNumber 0x0129 | |||
| #define PropertyTagTransferFuncition 0x012D | |||
| #define PropertyTagSoftwareUsed 0x0131 | |||
| #define PropertyTagDateTime 0x0132 | |||
| #define PropertyTagArtist 0x013B | |||
| #define PropertyTagHostComputer 0x013C | |||
| #define PropertyTagPredictor 0x013D | |||
| #define PropertyTagWhitePoint 0x013E | |||
| #define PropertyTagPrimaryChromaticities 0x013F | |||
| #define PropertyTagColorMap 0x0140 | |||
| #define PropertyTagHalftoneHints 0x0141 | |||
| #define PropertyTagTileWidth 0x0142 | |||
| #define PropertyTagTileLength 0x0143 | |||
| #define PropertyTagTileOffset 0x0144 | |||
| #define PropertyTagTileByteCounts 0x0145 | |||
| #define PropertyTagInkSet 0x014C | |||
| #define PropertyTagInkNames 0x014D | |||
| #define PropertyTagNumberOfInks 0x014E | |||
| #define PropertyTagDotRange 0x0150 | |||
| #define PropertyTagTargetPrinter 0x0151 | |||
| #define PropertyTagExtraSamples 0x0152 | |||
| #define PropertyTagSampleFormat 0x0153 | |||
| #define PropertyTagSMinSampleValue 0x0154 | |||
| #define PropertyTagSMaxSampleValue 0x0155 | |||
| #define PropertyTagTransferRange 0x0156 | |||
| #define PropertyTagJPEGProc 0x0200 | |||
| #define PropertyTagJPEGInterFormat 0x0201 | |||
| #define PropertyTagJPEGInterLength 0x0202 | |||
| #define PropertyTagJPEGRestartInterval 0x0203 | |||
| #define PropertyTagJPEGLosslessPredictors 0x0205 | |||
| #define PropertyTagJPEGPointTransforms 0x0206 | |||
| #define PropertyTagJPEGQTables 0x0207 | |||
| #define PropertyTagJPEGDCTables 0x0208 | |||
| #define PropertyTagJPEGACTables 0x0209 | |||
| #define PropertyTagYCbCrCoefficients 0x0211 | |||
| #define PropertyTagYCbCrSubsampling 0x0212 | |||
| #define PropertyTagYCbCrPositioning 0x0213 | |||
| #define PropertyTagREFBlackWhite 0x0214 | |||
| #define PropertyTagICCProfile 0x8773 // This TAG is defined by ICC | |||
| // for embedded ICC in TIFF | |||
| #define PropertyTagGamma 0x0301 | |||
| #define PropertyTagICCProfileDescriptor 0x0302 | |||
| #define PropertyTagSRGBRenderingIntent 0x0303 | |||
| #define PropertyTagImageTitle 0x0320 | |||
| #define PropertyTagCopyright 0x8298 | |||
| // Extra TAGs (Like Adobe Image Information tags etc.) | |||
| #define PropertyTagResolutionXUnit 0x5001 | |||
| #define PropertyTagResolutionYUnit 0x5002 | |||
| #define PropertyTagResolutionXLengthUnit 0x5003 | |||
| #define PropertyTagResolutionYLengthUnit 0x5004 | |||
| #define PropertyTagPrintFlags 0x5005 | |||
| #define PropertyTagPrintFlagsVersion 0x5006 | |||
| #define PropertyTagPrintFlagsCrop 0x5007 | |||
| #define PropertyTagPrintFlagsBleedWidth 0x5008 | |||
| #define PropertyTagPrintFlagsBleedWidthScale 0x5009 | |||
| #define PropertyTagHalftoneLPI 0x500A | |||
| #define PropertyTagHalftoneLPIUnit 0x500B | |||
| #define PropertyTagHalftoneDegree 0x500C | |||
| #define PropertyTagHalftoneShape 0x500D | |||
| #define PropertyTagHalftoneMisc 0x500E | |||
| #define PropertyTagHalftoneScreen 0x500F | |||
| #define PropertyTagJPEGQuality 0x5010 | |||
| #define PropertyTagGridSize 0x5011 | |||
| #define PropertyTagThumbnailFormat 0x5012 // 1 = JPEG, 0 = RAW RGB | |||
| #define PropertyTagThumbnailWidth 0x5013 | |||
| #define PropertyTagThumbnailHeight 0x5014 | |||
| #define PropertyTagThumbnailColorDepth 0x5015 | |||
| #define PropertyTagThumbnailPlanes 0x5016 | |||
| #define PropertyTagThumbnailRawBytes 0x5017 | |||
| #define PropertyTagThumbnailSize 0x5018 | |||
| #define PropertyTagThumbnailCompressedSize 0x5019 | |||
| #define PropertyTagColorTransferFunction 0x501A | |||
| #define PropertyTagThumbnailData 0x501B// RAW thumbnail bits in | |||
| // JPEG format or RGB format | |||
| // depends on | |||
| // PropertyTagThumbnailFormat | |||
| // Thumbnail related TAGs | |||
| #define PropertyTagThumbnailImageWidth 0x5020 // Thumbnail width | |||
| #define PropertyTagThumbnailImageHeight 0x5021 // Thumbnail height | |||
| #define PropertyTagThumbnailBitsPerSample 0x5022 // Number of bits per | |||
| // component | |||
| #define PropertyTagThumbnailCompression 0x5023 // Compression Scheme | |||
| #define PropertyTagThumbnailPhotometricInterp 0x5024 // Pixel composition | |||
| #define PropertyTagThumbnailImageDescription 0x5025 // Image Tile | |||
| #define PropertyTagThumbnailEquipMake 0x5026 // Manufacturer of Image | |||
| // Input equipment | |||
| #define PropertyTagThumbnailEquipModel 0x5027 // Model of Image input | |||
| // equipment | |||
| #define PropertyTagThumbnailStripOffsets 0x5028 // Image data location | |||
| #define PropertyTagThumbnailOrientation 0x5029 // Orientation of image | |||
| #define PropertyTagThumbnailSamplesPerPixel 0x502A // Number of components | |||
| #define PropertyTagThumbnailRowsPerStrip 0x502B // Number of rows per strip | |||
| #define PropertyTagThumbnailStripBytesCount 0x502C // Bytes per compressed | |||
| // strip | |||
| #define PropertyTagThumbnailResolutionX 0x502D // Resolution in width | |||
| // direction | |||
| #define PropertyTagThumbnailResolutionY 0x502E // Resolution in height | |||
| // direction | |||
| #define PropertyTagThumbnailPlanarConfig 0x502F // Image data arrangement | |||
| #define PropertyTagThumbnailResolutionUnit 0x5030 // Unit of X and Y | |||
| // Resolution | |||
| #define PropertyTagThumbnailTransferFunction 0x5031 // Transfer function | |||
| #define PropertyTagThumbnailSoftwareUsed 0x5032 // Software used | |||
| #define PropertyTagThumbnailDateTime 0x5033 // File change date and | |||
| // time | |||
| #define PropertyTagThumbnailArtist 0x5034 // Person who created the | |||
| // image | |||
| #define PropertyTagThumbnailWhitePoint 0x5035 // White point chromaticity | |||
| #define PropertyTagThumbnailPrimaryChromaticities 0x5036 | |||
| // Chromaticities of | |||
| // primaries | |||
| #define PropertyTagThumbnailYCbCrCoefficients 0x5037 // Color space transforma- | |||
| // tion coefficients | |||
| #define PropertyTagThumbnailYCbCrSubsampling 0x5038 // Subsampling ratio of Y | |||
| // to C | |||
| #define PropertyTagThumbnailYCbCrPositioning 0x5039 // Y and C position | |||
| #define PropertyTagThumbnailRefBlackWhite 0x503A // Pair of black and white | |||
| // reference values | |||
| #define PropertyTagThumbnailCopyRight 0x503B // CopyRight holder | |||
| #define PropertyTagLuminanceTable 0x5090 | |||
| #define PropertyTagChrominanceTable 0x5091 | |||
| #define PropertyTagFrameDelay 0x5100 | |||
| #define PropertyTagLoopCount 0x5101 | |||
| #define PropertyTagPixelUnit 0x5110 // Unit specifier for pixel/unit | |||
| #define PropertyTagPixelPerUnitX 0x5111 // Pixels per unit in X | |||
| #define PropertyTagPixelPerUnitY 0x5112 // Pixels per unit in Y | |||
| #define PropertyTagPaletteHistogram 0x5113 // Palette histogram | |||
| // EXIF specific tag | |||
| #define PropertyTagExifExposureTime 0x829A | |||
| #define PropertyTagExifFNumber 0x829D | |||
| #define PropertyTagExifExposureProg 0x8822 | |||
| #define PropertyTagExifSpectralSense 0x8824 | |||
| #define PropertyTagExifISOSpeed 0x8827 | |||
| #define PropertyTagExifOECF 0x8828 | |||
| #define PropertyTagExifVer 0x9000 | |||
| #define PropertyTagExifDTOrig 0x9003 // Date & time of original | |||
| #define PropertyTagExifDTDigitized 0x9004 // Date & time of digital data generation | |||
| #define PropertyTagExifCompConfig 0x9101 | |||
| #define PropertyTagExifCompBPP 0x9102 | |||
| #define PropertyTagExifShutterSpeed 0x9201 | |||
| #define PropertyTagExifAperture 0x9202 | |||
| #define PropertyTagExifBrightness 0x9203 | |||
| #define PropertyTagExifExposureBias 0x9204 | |||
| #define PropertyTagExifMaxAperture 0x9205 | |||
| #define PropertyTagExifSubjectDist 0x9206 | |||
| #define PropertyTagExifMeteringMode 0x9207 | |||
| #define PropertyTagExifLightSource 0x9208 | |||
| #define PropertyTagExifFlash 0x9209 | |||
| #define PropertyTagExifFocalLength 0x920A | |||
| #define PropertyTagExifMakerNote 0x927C | |||
| #define PropertyTagExifUserComment 0x9286 | |||
| #define PropertyTagExifDTSubsec 0x9290 // Date & Time subseconds | |||
| #define PropertyTagExifDTOrigSS 0x9291 // Date & Time original subseconds | |||
| #define PropertyTagExifDTDigSS 0x9292 // Date & TIme digitized subseconds | |||
| #define PropertyTagExifFPXVer 0xA000 | |||
| #define PropertyTagExifColorSpace 0xA001 | |||
| #define PropertyTagExifPixXDim 0xA002 | |||
| #define PropertyTagExifPixYDim 0xA003 | |||
| #define PropertyTagExifRelatedWav 0xA004 // related sound file | |||
| #define PropertyTagExifInterop 0xA005 | |||
| #define PropertyTagExifFlashEnergy 0xA20B | |||
| #define PropertyTagExifSpatialFR 0xA20C // Spatial Frequency Response | |||
| #define PropertyTagExifFocalXRes 0xA20E // Focal Plane X Resolution | |||
| #define PropertyTagExifFocalYRes 0xA20F // Focal Plane Y Resolution | |||
| #define PropertyTagExifFocalResUnit 0xA210 // Focal Plane Resolution Unit | |||
| #define PropertyTagExifSubjectLoc 0xA214 | |||
| #define PropertyTagExifExposureIndex 0xA215 | |||
| #define PropertyTagExifSensingMethod 0xA217 | |||
| #define PropertyTagExifFileSource 0xA300 | |||
| #define PropertyTagExifSceneType 0xA301 | |||
| #define PropertyTagExifCfaPattern 0xA302 | |||
| #define PropertyTagGpsVer 0x0000 | |||
| #define PropertyTagGpsLatitudeRef 0x0001 | |||
| #define PropertyTagGpsLatitude 0x0002 | |||
| #define PropertyTagGpsLongitudeRef 0x0003 | |||
| #define PropertyTagGpsLongitude 0x0004 | |||
| #define PropertyTagGpsAltitudeRef 0x0005 | |||
| #define PropertyTagGpsAltitude 0x0006 | |||
| #define PropertyTagGpsGpsTime 0x0007 | |||
| #define PropertyTagGpsGpsSatellites 0x0008 | |||
| #define PropertyTagGpsGpsStatus 0x0009 | |||
| #define PropertyTagGpsGpsMeasureMode 0x00A | |||
| #define PropertyTagGpsGpsDop 0x000B // Measurement precision | |||
| #define PropertyTagGpsSpeedRef 0x000C | |||
| #define PropertyTagGpsSpeed 0x000D | |||
| #define PropertyTagGpsTrackRef 0x000E | |||
| #define PropertyTagGpsTrack 0x000F | |||
| #define PropertyTagGpsImgDirRef 0x0010 | |||
| #define PropertyTagGpsImgDir 0x0011 | |||
| #define PropertyTagGpsMapDatum 0x0012 | |||
| #define PropertyTagGpsDestLatRef 0x0013 | |||
| #define PropertyTagGpsDestLat 0x0014 | |||
| #define PropertyTagGpsDestLongRef 0x0015 | |||
| #define PropertyTagGpsDestLong 0x0016 | |||
| #define PropertyTagGpsDestBearRef 0x0017 | |||
| #define PropertyTagGpsDestBear 0x0018 | |||
| #define PropertyTagGpsDestDistRef 0x0019 | |||
| #define PropertyTagGpsDestDist 0x001A | |||
| #endif | |||
| @@ -0,0 +1,99 @@ | |||
| /************************************************************************** | |||
| * | |||
| * Copyright (c) 2000 Microsoft Corporation | |||
| * | |||
| * Module Name: | |||
| * | |||
| * Gdiplus init | |||
| * | |||
| * Abstract: | |||
| * | |||
| * GDI+ startup/shutdown API's | |||
| * | |||
| * Created: | |||
| * | |||
| * 09/02/2000 agodfrey | |||
| * Created it. | |||
| * | |||
| **************************************************************************/ | |||
| #ifndef _GDIPLUSINIT_H | |||
| #define _GDIPLUSINIT_H | |||
| // Used for debug event notification (debug builds only) | |||
| enum DebugEventLevel | |||
| { | |||
| DebugEventLevelFatal, | |||
| DebugEventLevelWarning | |||
| }; | |||
| // Callback function that GDI+ can call, on debug builds, for assertions | |||
| // and warnings. | |||
| typedef VOID (WINAPI *DebugEventProc)(DebugEventLevel level, CHAR *message); | |||
| // Notification functions which the user must call appropriately if | |||
| // "SuppressBackgroundThread" (below) is set. | |||
| typedef Status (WINAPI *NotificationHookProc)(OUT ULONG_PTR *token); | |||
| typedef VOID (WINAPI *NotificationUnhookProc)(ULONG_PTR token); | |||
| // Input structure for GdiplusStartup() | |||
| struct GdiplusStartupInput | |||
| { | |||
| UINT32 GdiplusVersion; // Must be 1 | |||
| DebugEventProc DebugEventCallback; // Ignored on free builds | |||
| BOOL SuppressBackgroundThread; // FALSE unless you're prepared to call | |||
| // the hook/unhook functions properly | |||
| BOOL SuppressExternalCodecs; // FALSE unless you want GDI+ only to use | |||
| // its internal image codecs. | |||
| GdiplusStartupInput( | |||
| DebugEventProc debugEventCallback = NULL, | |||
| BOOL suppressBackgroundThread = FALSE, | |||
| BOOL suppressExternalCodecs = FALSE) | |||
| { | |||
| GdiplusVersion = 1; | |||
| DebugEventCallback = debugEventCallback; | |||
| SuppressBackgroundThread = suppressBackgroundThread; | |||
| SuppressExternalCodecs = suppressExternalCodecs; | |||
| } | |||
| }; | |||
| // Output structure for GdiplusStartup() | |||
| struct GdiplusStartupOutput | |||
| { | |||
| // The following 2 fields are NULL if SuppressBackgroundThread is FALSE. | |||
| // Otherwise, they are functions which must be called appropriately to | |||
| // replace the background thread. | |||
| // | |||
| // These should be called on the application's main message loop - i.e. | |||
| // a message loop which is active for the lifetime of GDI+. | |||
| // "NotificationHook" should be called before starting the loop, | |||
| // and "NotificationUnhook" should be called after the loop ends. | |||
| NotificationHookProc NotificationHook; | |||
| NotificationUnhookProc NotificationUnhook; | |||
| }; | |||
| // GDI+ initialization. Must be called before GDI+ API's are used. | |||
| // | |||
| // token - may not be NULL - accepts a token to be passed in the corresponding | |||
| // GdiplusShutdown call. | |||
| // input - may not be NULL | |||
| // output - may be NULL only if input->SuppressBackgroundThread is FALSE. | |||
| extern "C" Status WINAPI GdiplusStartup( | |||
| OUT ULONG_PTR *token, | |||
| const GdiplusStartupInput *input, | |||
| OUT GdiplusStartupOutput *output); | |||
| // GDI+ termination. Must be called before GDI+ is unloaded. GDI+ API's may not | |||
| // be called after this. | |||
| extern "C" VOID WINAPI GdiplusShutdown(ULONG_PTR token); | |||
| #endif | |||
| @@ -0,0 +1,253 @@ | |||
| /**************************************************************************\ | |||
| * | |||
| * Copyright (c) 2000, Microsoft Corp. All Rights Reserved. | |||
| * | |||
| * Module Name: | |||
| * | |||
| * GdiplusLineCaps.h | |||
| * | |||
| * Abstract: | |||
| * | |||
| * APIs for Custom Line Caps | |||
| * | |||
| \**************************************************************************/ | |||
| #ifndef _GDIPLUSLINECAPS_H | |||
| #define _GDIPLUSLINECAPS_H | |||
| inline | |||
| CustomLineCap::CustomLineCap( | |||
| IN const GraphicsPath* fillPath, | |||
| IN const GraphicsPath* strokePath, | |||
| IN LineCap baseCap, | |||
| IN REAL baseInset | |||
| ) | |||
| { | |||
| nativeCap = NULL; | |||
| GpPath* nativeFillPath = NULL; | |||
| GpPath* nativeStrokePath = NULL; | |||
| if(fillPath) | |||
| nativeFillPath = fillPath->nativePath; | |||
| if(strokePath) | |||
| nativeStrokePath = strokePath->nativePath; | |||
| lastResult = DllExports::GdipCreateCustomLineCap( | |||
| nativeFillPath, nativeStrokePath, | |||
| baseCap, baseInset, &nativeCap); | |||
| } | |||
| inline | |||
| CustomLineCap::CustomLineCap() | |||
| { | |||
| // This is used for default constructor for subclasses. | |||
| // So don't create a nativeCap. | |||
| nativeCap = NULL; | |||
| lastResult = Ok; | |||
| } | |||
| inline | |||
| CustomLineCap::~CustomLineCap() | |||
| { | |||
| DllExports::GdipDeleteCustomLineCap(nativeCap); | |||
| } | |||
| inline Status | |||
| CustomLineCap::SetStrokeCaps( | |||
| IN LineCap startCap, | |||
| IN LineCap endCap) | |||
| { | |||
| return SetStatus(DllExports::GdipSetCustomLineCapStrokeCaps(nativeCap, | |||
| startCap, endCap)); | |||
| } | |||
| inline Status | |||
| CustomLineCap::GetStrokeCaps( | |||
| OUT LineCap* startCap, | |||
| OUT LineCap* endCap) const | |||
| { | |||
| return SetStatus(DllExports::GdipGetCustomLineCapStrokeCaps(nativeCap, | |||
| startCap, endCap)); | |||
| } | |||
| inline Status | |||
| CustomLineCap::SetStrokeJoin( | |||
| IN LineJoin lineJoin) | |||
| { | |||
| return SetStatus(DllExports::GdipSetCustomLineCapStrokeJoin(nativeCap, lineJoin)); | |||
| } | |||
| inline LineJoin | |||
| CustomLineCap::GetStrokeJoin() const | |||
| { | |||
| LineJoin lineJoin; | |||
| SetStatus(DllExports::GdipGetCustomLineCapStrokeJoin(nativeCap, &lineJoin)); | |||
| return lineJoin; | |||
| } | |||
| inline Status | |||
| CustomLineCap::SetBaseCap(IN LineCap baseCap) | |||
| { | |||
| return SetStatus(DllExports::GdipSetCustomLineCapBaseCap(nativeCap, baseCap)); | |||
| } | |||
| inline LineCap | |||
| CustomLineCap::GetBaseCap() const | |||
| { | |||
| LineCap baseCap; | |||
| SetStatus(DllExports::GdipGetCustomLineCapBaseCap(nativeCap, &baseCap)); | |||
| return baseCap; | |||
| } | |||
| inline Status | |||
| CustomLineCap::SetBaseInset(IN REAL inset) | |||
| { | |||
| return SetStatus(DllExports::GdipSetCustomLineCapBaseInset(nativeCap, inset)); | |||
| } | |||
| inline REAL | |||
| CustomLineCap::GetBaseInset() const | |||
| { | |||
| REAL inset; | |||
| SetStatus(DllExports::GdipGetCustomLineCapBaseInset(nativeCap, &inset)); | |||
| return inset; | |||
| } | |||
| inline Status | |||
| CustomLineCap::SetWidthScale(IN REAL widthScale) | |||
| { | |||
| return SetStatus(DllExports::GdipSetCustomLineCapWidthScale(nativeCap, widthScale)); | |||
| } | |||
| inline REAL | |||
| CustomLineCap::GetWidthScale() const | |||
| { | |||
| REAL widthScale; | |||
| SetStatus(DllExports::GdipGetCustomLineCapWidthScale(nativeCap, &widthScale)); | |||
| return widthScale; | |||
| } | |||
| inline CustomLineCap* | |||
| CustomLineCap::Clone() const | |||
| { | |||
| GpCustomLineCap *newNativeLineCap = NULL; | |||
| SetStatus(DllExports::GdipCloneCustomLineCap(nativeCap, &newNativeLineCap)); | |||
| if (lastResult == Ok) | |||
| { | |||
| CustomLineCap *newLineCap = new CustomLineCap(newNativeLineCap, lastResult); | |||
| if (newLineCap == NULL) | |||
| { | |||
| SetStatus(DllExports::GdipDeleteCustomLineCap(newNativeLineCap)); | |||
| } | |||
| return newLineCap; | |||
| } | |||
| return NULL; | |||
| } | |||
| class AdjustableArrowCap : public CustomLineCap | |||
| { | |||
| public: | |||
| AdjustableArrowCap( | |||
| IN REAL height, | |||
| IN REAL width, | |||
| IN BOOL isFilled = TRUE | |||
| ) | |||
| { | |||
| GpAdjustableArrowCap* cap = NULL; | |||
| lastResult = DllExports::GdipCreateAdjustableArrowCap( | |||
| height, width, isFilled, &cap); | |||
| SetNativeCap(cap); | |||
| } | |||
| Status SetHeight(IN REAL height) | |||
| { | |||
| GpAdjustableArrowCap* cap = (GpAdjustableArrowCap*) nativeCap; | |||
| return SetStatus(DllExports::GdipSetAdjustableArrowCapHeight( | |||
| cap, height)); | |||
| } | |||
| REAL GetHeight() const | |||
| { | |||
| GpAdjustableArrowCap* cap = (GpAdjustableArrowCap*) nativeCap; | |||
| REAL height; | |||
| SetStatus(DllExports::GdipGetAdjustableArrowCapHeight( | |||
| cap, &height)); | |||
| return height; | |||
| } | |||
| Status SetWidth(IN REAL width) | |||
| { | |||
| GpAdjustableArrowCap* cap = (GpAdjustableArrowCap*) nativeCap; | |||
| return SetStatus(DllExports::GdipSetAdjustableArrowCapWidth( | |||
| cap, width)); | |||
| } | |||
| REAL GetWidth() const | |||
| { | |||
| GpAdjustableArrowCap* cap = (GpAdjustableArrowCap*) nativeCap; | |||
| REAL width; | |||
| SetStatus(DllExports::GdipGetAdjustableArrowCapWidth( | |||
| cap, &width)); | |||
| return width; | |||
| } | |||
| Status SetMiddleInset(IN REAL middleInset) | |||
| { | |||
| GpAdjustableArrowCap* cap = (GpAdjustableArrowCap*) nativeCap; | |||
| return SetStatus(DllExports::GdipSetAdjustableArrowCapMiddleInset( | |||
| cap, middleInset)); | |||
| } | |||
| REAL GetMiddleInset() const | |||
| { | |||
| GpAdjustableArrowCap* cap = (GpAdjustableArrowCap*) nativeCap; | |||
| REAL middleInset; | |||
| SetStatus(DllExports::GdipGetAdjustableArrowCapMiddleInset( | |||
| cap, &middleInset)); | |||
| return middleInset; | |||
| } | |||
| Status SetFillState(IN BOOL isFilled) | |||
| { | |||
| GpAdjustableArrowCap* cap = (GpAdjustableArrowCap*) nativeCap; | |||
| return SetStatus(DllExports::GdipSetAdjustableArrowCapFillState( | |||
| cap, isFilled)); | |||
| } | |||
| BOOL IsFilled() const | |||
| { | |||
| GpAdjustableArrowCap* cap = (GpAdjustableArrowCap*) nativeCap; | |||
| BOOL isFilled; | |||
| SetStatus(DllExports::GdipGetAdjustableArrowCapFillState( | |||
| cap, &isFilled)); | |||
| return isFilled; | |||
| } | |||
| #ifdef DCR_USE_NEW_250932 | |||
| private: | |||
| AdjustableArrowCap(const AdjustableArrowCap &); | |||
| AdjustableArrowCap& operator=(const AdjustableArrowCap &); | |||
| #endif | |||
| }; | |||
| #endif | |||
| @@ -0,0 +1,309 @@ | |||
| /**************************************************************************\ | |||
| * | |||
| * Copyright (c) 1998-2000, Microsoft Corp. All Rights Reserved. | |||
| * | |||
| * Module Name: | |||
| * | |||
| * GdiplusMatrix.h | |||
| * | |||
| * Abstract: | |||
| * | |||
| * GDI+ Matrix class | |||
| * | |||
| \**************************************************************************/ | |||
| class Matrix : public GdiplusBase | |||
| { | |||
| public: | |||
| friend class Graphics; | |||
| friend class GraphicsPath; | |||
| friend class TextureBrush; | |||
| friend class LinearGradientBrush; | |||
| friend class PathGradientBrush; | |||
| friend class Pen; | |||
| friend class Region; | |||
| // Default constructor - set to identity matrix | |||
| Matrix() | |||
| { | |||
| GpMatrix *matrix = NULL; | |||
| lastResult = DllExports::GdipCreateMatrix(&matrix); | |||
| SetNativeMatrix(matrix); | |||
| } | |||
| Matrix(IN REAL m11, | |||
| IN REAL m12, | |||
| IN REAL m21, | |||
| IN REAL m22, | |||
| IN REAL dx, | |||
| IN REAL dy) | |||
| { | |||
| GpMatrix *matrix = NULL; | |||
| lastResult = DllExports::GdipCreateMatrix2(m11, m12, m21, m22, | |||
| dx, dy, &matrix); | |||
| SetNativeMatrix(matrix); | |||
| } | |||
| Matrix(IN const RectF& rect, | |||
| IN const PointF* dstplg) | |||
| { | |||
| GpMatrix *matrix = NULL; | |||
| lastResult = DllExports::GdipCreateMatrix3(&rect, | |||
| dstplg, | |||
| &matrix); | |||
| SetNativeMatrix(matrix); | |||
| } | |||
| Matrix(IN const Rect& rect, | |||
| IN const Point* dstplg) | |||
| { | |||
| GpMatrix *matrix = NULL; | |||
| lastResult = DllExports::GdipCreateMatrix3I(&rect, | |||
| dstplg, | |||
| &matrix); | |||
| SetNativeMatrix(matrix); | |||
| } | |||
| ~Matrix() | |||
| { | |||
| DllExports::GdipDeleteMatrix(nativeMatrix); | |||
| } | |||
| Matrix *Clone() const | |||
| { | |||
| GpMatrix *cloneMatrix = NULL; | |||
| SetStatus(DllExports::GdipCloneMatrix(nativeMatrix, | |||
| &cloneMatrix)); | |||
| if (lastResult != Ok) | |||
| return NULL; | |||
| return new Matrix(cloneMatrix); | |||
| } | |||
| Status GetElements(OUT REAL *m) const | |||
| { | |||
| return SetStatus(DllExports::GdipGetMatrixElements(nativeMatrix, m)); | |||
| } | |||
| Status SetElements(IN REAL m11, | |||
| IN REAL m12, | |||
| IN REAL m21, | |||
| IN REAL m22, | |||
| IN REAL dx, | |||
| IN REAL dy) | |||
| { | |||
| return SetStatus(DllExports::GdipSetMatrixElements(nativeMatrix, | |||
| m11, m12, m21, m22, dx, dy)); | |||
| } | |||
| REAL OffsetX() const | |||
| { | |||
| REAL elements[6]; | |||
| if (GetElements(&elements[0]) == Ok) | |||
| return elements[4]; | |||
| else | |||
| return 0.0f; | |||
| } | |||
| REAL OffsetY() const | |||
| { | |||
| REAL elements[6]; | |||
| if (GetElements(&elements[0]) == Ok) | |||
| return elements[5]; | |||
| else | |||
| return 0.0f; | |||
| } | |||
| Status Reset() | |||
| { | |||
| // set identity matrix elements | |||
| return SetStatus(DllExports::GdipSetMatrixElements(nativeMatrix, | |||
| 1.0, 0.0, 0.0, 1.0, 0.0, 0.0)); | |||
| } | |||
| Status Multiply(IN const Matrix *matrix, | |||
| IN MatrixOrder order = MatrixOrderPrepend) | |||
| { | |||
| return SetStatus(DllExports::GdipMultiplyMatrix(nativeMatrix, | |||
| matrix->nativeMatrix, | |||
| order)); | |||
| } | |||
| Status Translate(IN REAL offsetX, | |||
| IN REAL offsetY, | |||
| IN MatrixOrder order = MatrixOrderPrepend) | |||
| { | |||
| return SetStatus(DllExports::GdipTranslateMatrix(nativeMatrix, offsetX, offsetY, order)); | |||
| } | |||
| Status Scale(IN REAL scaleX, | |||
| IN REAL scaleY, | |||
| IN MatrixOrder order = MatrixOrderPrepend) | |||
| { | |||
| return SetStatus(DllExports::GdipScaleMatrix(nativeMatrix, scaleX, scaleY, order)); | |||
| } | |||
| Status Rotate(IN REAL angle, | |||
| IN MatrixOrder order = MatrixOrderPrepend) | |||
| { | |||
| return SetStatus(DllExports::GdipRotateMatrix(nativeMatrix, angle, order)); | |||
| } | |||
| Status RotateAt(IN REAL angle, | |||
| IN const PointF& center, | |||
| IN MatrixOrder order = MatrixOrderPrepend) | |||
| { | |||
| if(order == MatrixOrderPrepend) | |||
| { | |||
| SetStatus(DllExports::GdipTranslateMatrix(nativeMatrix, center.X, center.Y, order)); | |||
| SetStatus(DllExports::GdipRotateMatrix(nativeMatrix, angle, order)); | |||
| return SetStatus(DllExports::GdipTranslateMatrix(nativeMatrix, - center.X, - center.Y, order)); | |||
| } | |||
| else | |||
| { | |||
| SetStatus(DllExports::GdipTranslateMatrix(nativeMatrix, - center.X, - center.Y, order)); | |||
| SetStatus(DllExports::GdipRotateMatrix(nativeMatrix, angle, order)); | |||
| return SetStatus(DllExports::GdipTranslateMatrix(nativeMatrix, center.X, center.Y, order)); | |||
| } | |||
| } | |||
| Status Shear(IN REAL shearX, | |||
| IN REAL shearY, | |||
| IN MatrixOrder order = MatrixOrderPrepend) | |||
| { | |||
| return SetStatus(DllExports::GdipShearMatrix(nativeMatrix, shearX, shearY, order)); | |||
| } | |||
| Status Invert() | |||
| { | |||
| return SetStatus(DllExports::GdipInvertMatrix(nativeMatrix)); | |||
| } | |||
| // float version | |||
| Status TransformPoints(IN OUT PointF* pts, | |||
| IN INT count = 1) const | |||
| { | |||
| return SetStatus(DllExports::GdipTransformMatrixPoints(nativeMatrix, pts, count)); | |||
| } | |||
| Status TransformPoints(IN OUT Point* pts, | |||
| IN INT count = 1) const | |||
| { | |||
| return SetStatus(DllExports::GdipTransformMatrixPointsI(nativeMatrix, | |||
| pts, | |||
| count)); | |||
| } | |||
| Status TransformVectors(IN OUT PointF* pts, | |||
| IN INT count = 1) const | |||
| { | |||
| return SetStatus(DllExports::GdipVectorTransformMatrixPoints(nativeMatrix, pts, count)); | |||
| } | |||
| Status TransformVectors(IN OUT Point* pts, | |||
| IN INT count = 1) const | |||
| { | |||
| return SetStatus(DllExports::GdipVectorTransformMatrixPointsI(nativeMatrix, | |||
| pts, | |||
| count)); | |||
| } | |||
| BOOL IsInvertible() const | |||
| { | |||
| BOOL result = FALSE; | |||
| SetStatus(DllExports::GdipIsMatrixInvertible(nativeMatrix, &result)); | |||
| return result; | |||
| } | |||
| BOOL IsIdentity() const | |||
| { | |||
| BOOL result = FALSE; | |||
| SetStatus(DllExports::GdipIsMatrixIdentity(nativeMatrix, &result)); | |||
| return result; | |||
| } | |||
| BOOL Equals(IN const Matrix *matrix) const | |||
| { | |||
| BOOL result = FALSE; | |||
| SetStatus(DllExports::GdipIsMatrixEqual(nativeMatrix, | |||
| matrix->nativeMatrix, &result)); | |||
| return result; | |||
| } | |||
| Status GetLastStatus() const | |||
| { | |||
| Status lastStatus = lastResult; | |||
| lastResult = Ok; | |||
| return lastStatus; | |||
| } | |||
| protected: | |||
| #ifdef DCR_USE_NEW_250932 | |||
| private: | |||
| Matrix(const Matrix &); | |||
| Matrix& operator=(const Matrix &); | |||
| protected: | |||
| #else | |||
| Matrix(const Matrix& matrix) | |||
| { | |||
| matrix; | |||
| SetStatus(NotImplemented); | |||
| SetNativeMatrix(NULL); | |||
| } | |||
| Matrix& operator=(const Matrix& matrix) | |||
| { | |||
| matrix; | |||
| SetStatus(NotImplemented); | |||
| return *this; | |||
| } | |||
| #endif | |||
| Matrix(GpMatrix *nativeMatrix) | |||
| { | |||
| lastResult = Ok; | |||
| SetNativeMatrix(nativeMatrix); | |||
| } | |||
| VOID SetNativeMatrix(GpMatrix *nativeMatrix) | |||
| { | |||
| this->nativeMatrix = nativeMatrix; | |||
| } | |||
| Status SetStatus(Status status) const | |||
| { | |||
| if (status != Ok) | |||
| return (lastResult = status); | |||
| else | |||
| return status; | |||
| } | |||
| protected: | |||
| GpMatrix *nativeMatrix; | |||
| mutable Status lastResult; | |||
| }; | |||
| @@ -0,0 +1,49 @@ | |||
| /**************************************************************************\ | |||
| * | |||
| * Copyright (c) 1998-2000, Microsoft Corp. All Rights Reserved. | |||
| * | |||
| * Module Name: | |||
| * | |||
| * GdiplusMem.h | |||
| * | |||
| * Abstract: | |||
| * | |||
| * Flat GDI+ Memory Allocators - header file | |||
| * | |||
| \**************************************************************************/ | |||
| // TODO: this file style needs to be made internally consistent with the way | |||
| // it handles breaking the long argument lists across multiple lines | |||
| #ifndef _GDIPLUSMEM_H | |||
| #define _GDIPLUSMEM_H | |||
| #define WINGDIPAPI __stdcall | |||
| // currently, only C++ wrapper API's force const. | |||
| #ifdef _GDIPLUS_H | |||
| #define GDIPCONST const | |||
| #else | |||
| #define GDIPCONST | |||
| #endif | |||
| #ifdef __cplusplus | |||
| extern "C" { | |||
| #endif | |||
| //---------------------------------------------------------------------------- | |||
| // Memory Allocation APIs | |||
| //---------------------------------------------------------------------------- | |||
| void* WINGDIPAPI | |||
| GdipAlloc(size_t size); | |||
| void WINGDIPAPI | |||
| GdipFree(void* ptr); | |||
| #ifdef __cplusplus | |||
| } | |||
| #endif | |||
| #endif // !_GDIPLUSMEM_H | |||
| @@ -0,0 +1,213 @@ | |||
| /**************************************************************************\ | |||
| * | |||
| * Copyright (c) 1998-2000, Microsoft Corp. All Rights Reserved. | |||
| * | |||
| * Module Name: | |||
| * | |||
| * Metafile headers | |||
| * | |||
| * Abstract: | |||
| * | |||
| * Declarations for various metafile header structures. | |||
| * | |||
| \**************************************************************************/ | |||
| #ifndef _GDIPLUSMETAHEADER_H | |||
| #define _GDIPLUSMETAHEADER_H | |||
| typedef struct | |||
| { | |||
| DWORD iType; // Record type EMR_HEADER | |||
| DWORD nSize; // Record size in bytes. This may be greater | |||
| // than the sizeof(ENHMETAHEADER). | |||
| RECTL rclBounds; // Inclusive-inclusive bounds in device units | |||
| RECTL rclFrame; // Inclusive-inclusive Picture Frame of metafile in .01 mm units | |||
| DWORD dSignature; // Signature. Must be ENHMETA_SIGNATURE. | |||
| DWORD nVersion; // Version number | |||
| DWORD nBytes; // Size of the metafile in bytes | |||
| DWORD nRecords; // Number of records in the metafile | |||
| WORD nHandles; // Number of handles in the handle table | |||
| // Handle index zero is reserved. | |||
| WORD sReserved; // Reserved. Must be zero. | |||
| DWORD nDescription; // Number of chars in the unicode description string | |||
| // This is 0 if there is no description string | |||
| DWORD offDescription; // Offset to the metafile description record. | |||
| // This is 0 if there is no description string | |||
| DWORD nPalEntries; // Number of entries in the metafile palette. | |||
| SIZEL szlDevice; // Size of the reference device in pels | |||
| SIZEL szlMillimeters; // Size of the reference device in millimeters | |||
| } ENHMETAHEADER3; | |||
| // Aldus Placeable Metafiles | |||
| // Placeable Metafiles were created by Aldus Corporation as a non-standard | |||
| // way of specifying how a metafile is mapped and scaled on an output device. | |||
| // Placeable metafiles are quite wide-spread, but not directly supported by | |||
| // the Windows API. To playback a placeable metafile using the Windows API, | |||
| // you will first need to strip the placeable metafile header from the file. | |||
| // This is typically performed by copying the metafile to a temporary file | |||
| // starting at file offset 22 (0x16). The contents of the temporary file may | |||
| // then be used as input to the Windows GetMetaFile(), PlayMetaFile(), | |||
| // CopyMetaFile(), etc. GDI functions. | |||
| // Each placeable metafile begins with a 22-byte header, | |||
| // followed by a standard metafile: | |||
| #include <pshpack2.h> // set structure packing to 2 | |||
| typedef struct | |||
| { | |||
| INT16 Left; | |||
| INT16 Top; | |||
| INT16 Right; | |||
| INT16 Bottom; | |||
| } APMRect16; | |||
| typedef struct | |||
| { | |||
| UINT32 Key; // GDIP_WMF_ALDUSKEY | |||
| INT16 Hmf; // Metafile HANDLE number (always 0) | |||
| APMRect16 BoundingBox; // Coordinates in metafile units | |||
| INT16 Inch; // Number of metafile units per inch | |||
| UINT32 Reserved; // Reserved (always 0) | |||
| INT16 Checksum; // Checksum value for previous 10 WORDs | |||
| } APMFileHeader; | |||
| #include <poppack.h> | |||
| // Key contains a special identification value that indicates the presence | |||
| // of a placeable metafile header and is always 0x9AC6CDD7. | |||
| // Handle is used to stored the handle of the metafile in memory. When written | |||
| // to disk, this field is not used and will always contains the value 0. | |||
| // Left, Top, Right, and Bottom contain the coordinates of the upper-left | |||
| // and lower-right corners of the image on the output device. These are | |||
| // measured in twips. | |||
| // A twip (meaning "twentieth of a point") is the logical unit of measurement | |||
| // used in Windows Metafiles. A twip is equal to 1/1440 of an inch. Thus 720 | |||
| // twips equal 1/2 inch, while 32,768 twips is 22.75 inches. | |||
| // Inch contains the number of twips per inch used to represent the image. | |||
| // Normally, there are 1440 twips per inch; however, this number may be | |||
| // changed to scale the image. A value of 720 indicates that the image is | |||
| // double its normal size, or scaled to a factor of 2:1. A value of 360 | |||
| // indicates a scale of 4:1, while a value of 2880 indicates that the image | |||
| // is scaled down in size by a factor of two. A value of 1440 indicates | |||
| // a 1:1 scale ratio. | |||
| // Reserved is not used and is always set to 0. | |||
| // Checksum contains a checksum value for the previous 10 WORDs in the header. | |||
| // This value can be used in an attempt to detect if the metafile has become | |||
| // corrupted. The checksum is calculated by XORing each WORD value to an | |||
| // initial value of 0. | |||
| // If the metafile was recorded with a reference Hdc that was a display. | |||
| #define GDIP_EMFPLUSFLAGS_DISPLAY 0x00000001 | |||
| class MetafileHeader | |||
| { | |||
| public: | |||
| MetafileType Type; | |||
| UINT Size; // Size of the metafile (in bytes) | |||
| UINT Version; // EMF+, EMF, or WMF version | |||
| UINT EmfPlusFlags; | |||
| REAL DpiX; | |||
| REAL DpiY; | |||
| INT X; // Bounds in device units | |||
| INT Y; | |||
| INT Width; | |||
| INT Height; | |||
| union | |||
| { | |||
| METAHEADER WmfHeader; | |||
| ENHMETAHEADER3 EmfHeader; | |||
| }; | |||
| INT EmfPlusHeaderSize; // size of the EMF+ header in file | |||
| INT LogicalDpiX; // Logical Dpi of reference Hdc | |||
| INT LogicalDpiY; // usually valid only for EMF+ files | |||
| public: | |||
| // Get the metafile type | |||
| MetafileType GetType() const { return Type; } | |||
| // Get the size of the metafile in BYTEs | |||
| UINT GetMetafileSize() const { return Size; } | |||
| // If IsEmfPlus, this is the EMF+ version; else it is the WMF or EMF version | |||
| UINT GetVersion() const { return Version; } | |||
| // Get the EMF+ flags associated with the metafile | |||
| UINT GetEmfPlusFlags() const { return EmfPlusFlags; } | |||
| // Get the X Dpi of the metafile | |||
| REAL GetDpiX() const { return DpiX; } | |||
| // Get the Y Dpi of the metafile | |||
| REAL GetDpiY() const { return DpiY; } | |||
| // Get the bounds of the metafile in device units | |||
| VOID GetBounds (OUT Rect *rect) const | |||
| { | |||
| rect->X = X; | |||
| rect->Y = Y; | |||
| rect->Width = Width; | |||
| rect->Height = Height; | |||
| } | |||
| // Is it any type of WMF (standard or Aldus Placeable Metafile)? | |||
| BOOL IsWmf() const | |||
| { | |||
| return ((Type == MetafileTypeWmf) || (Type == MetafileTypeWmfAldus)); | |||
| } | |||
| // Is this an Aldus Placeable Metafile? | |||
| BOOL IsWmfAldus() const { return (Type == MetafileTypeWmf); } | |||
| // Is this an EMF (not an EMF+)? | |||
| BOOL IsEmf() const { return (Type == MetafileTypeEmf); } | |||
| // Is this an EMF or EMF+ file? | |||
| BOOL IsEmfOrEmfPlus() const { return (Type >= MetafileTypeEmf); } | |||
| // Is this an EMF+ file? | |||
| BOOL IsEmfPlus() const { return (Type >= MetafileTypeEmfPlusOnly); } | |||
| // Is this an EMF+ dual (has dual, down-level records) file? | |||
| BOOL IsEmfPlusDual() const { return (Type == MetafileTypeEmfPlusDual); } | |||
| // Is this an EMF+ only (no dual records) file? | |||
| BOOL IsEmfPlusOnly() const { return (Type == MetafileTypeEmfPlusOnly); } | |||
| // If it's an EMF+ file, was it recorded against a display Hdc? | |||
| BOOL IsDisplay() const | |||
| { | |||
| return (IsEmfPlus() && | |||
| ((EmfPlusFlags & GDIP_EMFPLUSFLAGS_DISPLAY) != 0)); | |||
| } | |||
| // Get the WMF header of the metafile (if it is a WMF) | |||
| const METAHEADER * GetWmfHeader() const | |||
| { | |||
| if (IsWmf()) | |||
| { | |||
| return &WmfHeader; | |||
| } | |||
| return NULL; | |||
| } | |||
| // Get the EMF header of the metafile (if it is an EMF) | |||
| const ENHMETAHEADER3 * GetEmfHeader() const | |||
| { | |||
| if (IsEmfOrEmfPlus()) | |||
| { | |||
| return &EmfHeader; | |||
| } | |||
| return NULL; | |||
| } | |||
| }; | |||
| #endif | |||
| @@ -0,0 +1,374 @@ | |||
| /**************************************************************************\ | |||
| * | |||
| * Copyright (c) 1998-2000, Microsoft Corp. All Rights Reserved. | |||
| * | |||
| * Module Name: | |||
| * | |||
| * GdiplusMetafile.h | |||
| * | |||
| * Abstract: | |||
| * | |||
| * Metafile related declarations | |||
| * | |||
| \**************************************************************************/ | |||
| #ifndef _GDIPLUSMETAFILE_H | |||
| #define _GDIPLUSMETAFILE_H | |||
| class Metafile : public Image | |||
| { | |||
| public: | |||
| friend class Image; | |||
| // Read a metafile | |||
| Metafile() | |||
| { | |||
| SetNativeImage(NULL); | |||
| lastResult = Ok; | |||
| } | |||
| // Playback a metafile from a HMETAFILE | |||
| // If deleteWmf is TRUE, then when the metafile is deleted, | |||
| // the hWmf will also be deleted. Otherwise, it won't be. | |||
| Metafile(IN HMETAFILE hWmf, | |||
| IN const APMFileHeader * apmFileHeader, | |||
| IN BOOL deleteWmf = FALSE) | |||
| { | |||
| GpMetafile * metafile = NULL; | |||
| lastResult = DllExports::GdipCreateMetafileFromWmf(hWmf, deleteWmf, apmFileHeader, &metafile); | |||
| SetNativeImage(metafile); | |||
| } | |||
| // Playback a metafile from a HENHMETAFILE | |||
| // If deleteEmf is TRUE, then when the metafile is deleted, | |||
| // the hEmf will also be deleted. Otherwise, it won't be. | |||
| Metafile(IN HENHMETAFILE hEmf, | |||
| IN BOOL deleteEmf = FALSE) | |||
| { | |||
| GpMetafile * metafile = NULL; | |||
| lastResult = DllExports::GdipCreateMetafileFromEmf(hEmf, deleteEmf, &metafile); | |||
| SetNativeImage(metafile); | |||
| } | |||
| // Playback a metafile from a file | |||
| Metafile(IN const WCHAR* filename) | |||
| { | |||
| GpMetafile * metafile = NULL; | |||
| lastResult = DllExports::GdipCreateMetafileFromFile(filename, &metafile); | |||
| SetNativeImage(metafile); | |||
| } | |||
| // Playback a WMF metafile from a file | |||
| Metafile(IN const WCHAR* filename, | |||
| IN const APMFileHeader * apmFileHeader | |||
| ) | |||
| { | |||
| GpMetafile * metafile = NULL; | |||
| lastResult = DllExports::GdipCreateMetafileFromWmfFile(filename, apmFileHeader, &metafile); | |||
| SetNativeImage(metafile); | |||
| } | |||
| // Playback a metafile from a stream | |||
| Metafile(IN IStream* stream) | |||
| { | |||
| GpMetafile * metafile = NULL; | |||
| lastResult = DllExports::GdipCreateMetafileFromStream(stream, &metafile); | |||
| SetNativeImage(metafile); | |||
| } | |||
| // Record a metafile to memory | |||
| Metafile( | |||
| IN HDC referenceHdc, | |||
| IN EmfType type = EmfTypeEmfPlusDual, | |||
| IN const WCHAR * description = NULL | |||
| ) | |||
| { | |||
| GpMetafile * metafile = NULL; | |||
| lastResult = DllExports::GdipRecordMetafile( | |||
| referenceHdc, type, NULL, MetafileFrameUnitGdi, | |||
| description, &metafile); | |||
| SetNativeImage(metafile); | |||
| } | |||
| // Record a metafile to memory | |||
| Metafile( | |||
| IN HDC referenceHdc, | |||
| IN const RectF & frameRect, | |||
| IN MetafileFrameUnit frameUnit = MetafileFrameUnitGdi, | |||
| IN EmfType type = EmfTypeEmfPlusDual, | |||
| IN const WCHAR * description = NULL | |||
| ) | |||
| { | |||
| GpMetafile * metafile = NULL; | |||
| lastResult = DllExports::GdipRecordMetafile( | |||
| referenceHdc, type, &frameRect, frameUnit, | |||
| description, &metafile); | |||
| SetNativeImage(metafile); | |||
| } | |||
| // Record a metafile to memory | |||
| Metafile( | |||
| IN HDC referenceHdc, | |||
| IN const Rect & frameRect, | |||
| IN MetafileFrameUnit frameUnit = MetafileFrameUnitGdi, | |||
| IN EmfType type = EmfTypeEmfPlusDual, | |||
| IN const WCHAR * description = NULL | |||
| ) | |||
| { | |||
| GpMetafile * metafile = NULL; | |||
| lastResult = DllExports::GdipRecordMetafileI( | |||
| referenceHdc, type, &frameRect, frameUnit, | |||
| description, &metafile); | |||
| SetNativeImage(metafile); | |||
| } | |||
| // Record a metafile to a file | |||
| Metafile( | |||
| IN const WCHAR* fileName, | |||
| IN HDC referenceHdc, | |||
| IN EmfType type = EmfTypeEmfPlusDual, | |||
| IN const WCHAR * description = NULL | |||
| ) | |||
| { | |||
| GpMetafile * metafile = NULL; | |||
| lastResult = DllExports::GdipRecordMetafileFileName(fileName, | |||
| referenceHdc, type, NULL, MetafileFrameUnitGdi, | |||
| description, &metafile); | |||
| SetNativeImage(metafile); | |||
| } | |||
| // Record a metafile to a file | |||
| Metafile( | |||
| IN const WCHAR* fileName, | |||
| IN HDC referenceHdc, | |||
| IN const RectF & frameRect, | |||
| IN MetafileFrameUnit frameUnit = MetafileFrameUnitGdi, | |||
| IN EmfType type = EmfTypeEmfPlusDual, | |||
| IN const WCHAR * description = NULL | |||
| ) | |||
| { | |||
| GpMetafile * metafile = NULL; | |||
| lastResult = DllExports::GdipRecordMetafileFileName(fileName, | |||
| referenceHdc, type, &frameRect, frameUnit, | |||
| description, &metafile); | |||
| SetNativeImage(metafile); | |||
| } | |||
| // Record a metafile to a file | |||
| Metafile( | |||
| IN const WCHAR* fileName, | |||
| IN HDC referenceHdc, | |||
| IN const Rect & frameRect, | |||
| IN MetafileFrameUnit frameUnit = MetafileFrameUnitGdi, | |||
| IN EmfType type = EmfTypeEmfPlusDual, | |||
| IN const WCHAR * description = NULL | |||
| ) | |||
| { | |||
| GpMetafile * metafile = NULL; | |||
| lastResult = DllExports::GdipRecordMetafileFileNameI(fileName, | |||
| referenceHdc, type, &frameRect, frameUnit, | |||
| description, &metafile); | |||
| SetNativeImage(metafile); | |||
| } | |||
| // Record a metafile to a stream | |||
| Metafile( | |||
| IN IStream * stream, | |||
| IN HDC referenceHdc, | |||
| IN EmfType type = EmfTypeEmfPlusDual, | |||
| IN const WCHAR * description = NULL | |||
| ) | |||
| { | |||
| GpMetafile * metafile = NULL; | |||
| lastResult = DllExports::GdipRecordMetafileStream(stream, | |||
| referenceHdc, type, NULL, MetafileFrameUnitGdi, | |||
| description, &metafile); | |||
| SetNativeImage(metafile); | |||
| } | |||
| // Record a metafile to a stream | |||
| Metafile( | |||
| IN IStream * stream, | |||
| IN HDC referenceHdc, | |||
| IN const RectF & frameRect, | |||
| IN MetafileFrameUnit frameUnit = MetafileFrameUnitGdi, | |||
| IN EmfType type = EmfTypeEmfPlusDual, | |||
| IN const WCHAR * description = NULL | |||
| ) | |||
| { | |||
| GpMetafile * metafile = NULL; | |||
| lastResult = DllExports::GdipRecordMetafileStream(stream, | |||
| referenceHdc, type, &frameRect, frameUnit, | |||
| description, &metafile); | |||
| SetNativeImage(metafile); | |||
| } | |||
| // Write a metafile to a stream with down-level GDI records | |||
| Metafile( | |||
| IN IStream * stream, | |||
| IN HDC referenceHdc, | |||
| IN const Rect & frameRect, | |||
| IN MetafileFrameUnit frameUnit = MetafileFrameUnitGdi, | |||
| IN EmfType type = EmfTypeEmfPlusDual, | |||
| IN const WCHAR * description = NULL | |||
| ) | |||
| { | |||
| GpMetafile * metafile = NULL; | |||
| lastResult = DllExports::GdipRecordMetafileStreamI(stream, | |||
| referenceHdc, type, &frameRect, frameUnit, | |||
| description, &metafile); | |||
| SetNativeImage(metafile); | |||
| } | |||
| static Status GetMetafileHeader( | |||
| IN HMETAFILE hWmf, | |||
| IN const APMFileHeader * apmFileHeader, | |||
| OUT MetafileHeader * header | |||
| ) | |||
| { | |||
| return DllExports::GdipGetMetafileHeaderFromWmf(hWmf, apmFileHeader, header); | |||
| } | |||
| static Status GetMetafileHeader( | |||
| IN HENHMETAFILE hEmf, | |||
| OUT MetafileHeader * header | |||
| ) | |||
| { | |||
| return DllExports::GdipGetMetafileHeaderFromEmf(hEmf, header); | |||
| } | |||
| static Status GetMetafileHeader( | |||
| IN const WCHAR* filename, | |||
| OUT MetafileHeader * header | |||
| ) | |||
| { | |||
| return DllExports::GdipGetMetafileHeaderFromFile(filename, header); | |||
| } | |||
| static Status GetMetafileHeader( | |||
| IN IStream * stream, | |||
| OUT MetafileHeader * header | |||
| ) | |||
| { | |||
| return DllExports::GdipGetMetafileHeaderFromStream(stream, header); | |||
| } | |||
| Status GetMetafileHeader( | |||
| OUT MetafileHeader * header | |||
| ) const | |||
| { | |||
| return SetStatus(DllExports::GdipGetMetafileHeaderFromMetafile( | |||
| (GpMetafile *)nativeImage, | |||
| header)); | |||
| } | |||
| // Once this method is called, the Metafile object is in an invalid state | |||
| // and can no longer be used. It is the responsiblity of the caller to | |||
| // invoke DeleteEnhMetaFile to delete this hEmf. | |||
| HENHMETAFILE GetHENHMETAFILE() | |||
| { | |||
| HENHMETAFILE hEmf; | |||
| SetStatus(DllExports::GdipGetHemfFromMetafile((GpMetafile *)nativeImage, &hEmf)); | |||
| return hEmf; | |||
| } | |||
| // Used in conjuction with Graphics::EnumerateMetafile to play an EMF+ | |||
| // The data must be DWORD aligned if it's an EMF or EMF+. It must be | |||
| // WORD aligned if it's a WMF. | |||
| Status | |||
| PlayRecord( | |||
| IN EmfPlusRecordType recordType, | |||
| IN UINT flags, | |||
| IN UINT dataSize, | |||
| IN const BYTE * data | |||
| ) const | |||
| { | |||
| return SetStatus(DllExports::GdipPlayMetafileRecord( | |||
| (GpMetafile *)nativeImage, | |||
| recordType, | |||
| flags, | |||
| dataSize, | |||
| data)); | |||
| } | |||
| // If you're using a printer HDC for the metafile, but you want the | |||
| // metafile rasterized at screen resolution, then use this API to set | |||
| // the rasterization dpi of the metafile to the screen resolution, | |||
| // e.g. 96 dpi or 120 dpi. | |||
| Status SetDownLevelRasterizationLimit( | |||
| IN UINT metafileRasterizationLimitDpi | |||
| ) | |||
| { | |||
| return SetStatus(DllExports::GdipSetMetafileDownLevelRasterizationLimit( | |||
| (GpMetafile *)nativeImage, | |||
| metafileRasterizationLimitDpi)); | |||
| } | |||
| UINT GetDownLevelRasterizationLimit() const | |||
| { | |||
| UINT metafileRasterizationLimitDpi = 0; | |||
| SetStatus(DllExports::GdipGetMetafileDownLevelRasterizationLimit( | |||
| (GpMetafile *)nativeImage, | |||
| &metafileRasterizationLimitDpi)); | |||
| return metafileRasterizationLimitDpi; | |||
| } | |||
| static UINT EmfToWmfBits( | |||
| IN HENHMETAFILE hemf, | |||
| IN UINT cbData16, | |||
| IN LPBYTE pData16, | |||
| IN INT iMapMode = MM_ANISOTROPIC, | |||
| IN EmfToWmfBitsFlags eFlags = EmfToWmfBitsFlagsDefault | |||
| ) | |||
| { | |||
| return DllExports::GdipEmfToWmfBits( | |||
| hemf, | |||
| cbData16, | |||
| pData16, | |||
| iMapMode, | |||
| eFlags); | |||
| } | |||
| #ifdef DCR_USE_NEW_250932 | |||
| private: | |||
| Metafile(const Metafile &); | |||
| Metafile& operator=(const Metafile &); | |||
| #endif | |||
| }; | |||
| #endif // !_METAFILE_H | |||
| @@ -0,0 +1,519 @@ | |||
| /**************************************************************************\ | |||
| * | |||
| * Copyright (c) 1998-2000, Microsoft Corp. All Rights Reserved. | |||
| * | |||
| * Module Name: | |||
| * | |||
| * GdiplusPen.h | |||
| * | |||
| * Abstract: | |||
| * | |||
| * Pen API related declarations | |||
| * | |||
| \**************************************************************************/ | |||
| #ifndef _GDIPLUSPEN_H | |||
| #define _GDIPLUSPEN_H | |||
| //-------------------------------------------------------------------------- | |||
| // class for various pen types | |||
| //-------------------------------------------------------------------------- | |||
| class Pen : public GdiplusBase | |||
| { | |||
| public: | |||
| friend class GraphicsPath; | |||
| friend class Graphics; | |||
| // abstract Clone() can't be implemented here because it can't | |||
| // new an object with pure virtual functions | |||
| // Constructors | |||
| Pen(IN const Color& color, | |||
| IN REAL width = 1.0f) | |||
| { | |||
| Unit unit = UnitWorld; | |||
| nativePen = NULL; | |||
| lastResult = DllExports::GdipCreatePen1(color.GetValue(), | |||
| width, unit, &nativePen); | |||
| } | |||
| Pen(IN const Brush* brush, | |||
| IN REAL width = 1.0f) | |||
| { | |||
| Unit unit = UnitWorld; | |||
| nativePen = NULL; | |||
| lastResult = DllExports::GdipCreatePen2(brush->nativeBrush, | |||
| width, unit, &nativePen); | |||
| } | |||
| ~Pen() | |||
| { | |||
| DllExports::GdipDeletePen(nativePen); | |||
| } | |||
| Pen* Clone() const | |||
| { | |||
| GpPen *clonePen = NULL; | |||
| lastResult = DllExports::GdipClonePen(nativePen, &clonePen); | |||
| return new Pen(clonePen, lastResult); | |||
| } | |||
| Status SetWidth(IN REAL width) | |||
| { | |||
| return SetStatus(DllExports::GdipSetPenWidth(nativePen, width)); | |||
| } | |||
| REAL GetWidth() const | |||
| { | |||
| REAL width; | |||
| SetStatus(DllExports::GdipGetPenWidth(nativePen, &width)); | |||
| return width; | |||
| } | |||
| // Set/get line caps: start, end, and dash | |||
| // Line cap and join APIs by using LineCap and LineJoin enums. | |||
| #ifdef DCR_USE_NEW_197819 | |||
| Status SetLineCap(IN LineCap startCap, | |||
| IN LineCap endCap, | |||
| IN DashCap dashCap) | |||
| { | |||
| return SetStatus(DllExports::GdipSetPenLineCap197819(nativePen, | |||
| startCap, endCap, dashCap)); | |||
| } | |||
| #else | |||
| Status SetLineCap(IN LineCap startCap, | |||
| IN LineCap endCap, | |||
| IN LineCap dashCap) | |||
| { | |||
| return SetStatus(DllExports::GdipSetPenLineCap(nativePen, | |||
| startCap, endCap, dashCap)); | |||
| } | |||
| #endif // DCR_USE_NEW_197819 | |||
| Status SetStartCap(IN LineCap startCap) | |||
| { | |||
| return SetStatus(DllExports::GdipSetPenStartCap(nativePen, startCap)); | |||
| } | |||
| Status SetEndCap(IN LineCap endCap) | |||
| { | |||
| return SetStatus(DllExports::GdipSetPenEndCap(nativePen, endCap)); | |||
| } | |||
| #ifdef DCR_USE_NEW_197819 | |||
| Status SetDashCap(IN DashCap dashCap) | |||
| { | |||
| return SetStatus(DllExports::GdipSetPenDashCap197819(nativePen, | |||
| dashCap)); | |||
| } | |||
| #else | |||
| Status SetDashCap(IN LineCap dashCap) | |||
| { | |||
| return SetStatus(DllExports::GdipSetPenDashCap(nativePen, dashCap)); | |||
| } | |||
| #endif // DCR_USE_NEW_197819 | |||
| LineCap GetStartCap() const | |||
| { | |||
| LineCap startCap; | |||
| SetStatus(DllExports::GdipGetPenStartCap(nativePen, &startCap)); | |||
| return startCap; | |||
| } | |||
| LineCap GetEndCap() const | |||
| { | |||
| LineCap endCap; | |||
| SetStatus(DllExports::GdipGetPenEndCap(nativePen, &endCap)); | |||
| return endCap; | |||
| } | |||
| #ifdef DCR_USE_NEW_197819 | |||
| DashCap GetDashCap() const | |||
| { | |||
| DashCap dashCap; | |||
| SetStatus(DllExports::GdipGetPenDashCap197819(nativePen, | |||
| &dashCap)); | |||
| return dashCap; | |||
| } | |||
| #else | |||
| LineCap GetDashCap() const | |||
| { | |||
| LineCap dashCap; | |||
| SetStatus(DllExports::GdipGetPenDashCap(nativePen, &dashCap)); | |||
| return dashCap; | |||
| } | |||
| #endif // DCR_USE_NEW_197819 | |||
| // Set/get line join | |||
| Status SetLineJoin(IN LineJoin lineJoin) | |||
| { | |||
| return SetStatus(DllExports::GdipSetPenLineJoin(nativePen, lineJoin)); | |||
| } | |||
| LineJoin GetLineJoin() const | |||
| { | |||
| LineJoin lineJoin; | |||
| SetStatus(DllExports::GdipGetPenLineJoin(nativePen, &lineJoin)); | |||
| return lineJoin; | |||
| } | |||
| Status SetCustomStartCap(IN const CustomLineCap* customCap) | |||
| { | |||
| GpCustomLineCap* nativeCap = NULL; | |||
| if(customCap) | |||
| nativeCap = customCap->nativeCap; | |||
| return SetStatus(DllExports::GdipSetPenCustomStartCap(nativePen, nativeCap)); | |||
| } | |||
| Status GetCustomStartCap(OUT CustomLineCap* customCap) const | |||
| { | |||
| if(!customCap) | |||
| return SetStatus(InvalidParameter); | |||
| return SetStatus(DllExports::GdipGetPenCustomStartCap(nativePen, &(customCap->nativeCap))); | |||
| } | |||
| Status SetCustomEndCap(IN const CustomLineCap* customCap) | |||
| { | |||
| GpCustomLineCap* nativeCap = NULL; | |||
| if(customCap) | |||
| nativeCap = customCap->nativeCap; | |||
| return SetStatus(DllExports::GdipSetPenCustomEndCap(nativePen, nativeCap)); | |||
| } | |||
| Status GetCustomEndCap(OUT CustomLineCap* customCap) const | |||
| { | |||
| if(!customCap) | |||
| return SetStatus(InvalidParameter); | |||
| return SetStatus(DllExports::GdipGetPenCustomEndCap(nativePen, &(customCap->nativeCap))); | |||
| } | |||
| Status SetMiterLimit(IN REAL miterLimit) | |||
| { | |||
| return SetStatus(DllExports::GdipSetPenMiterLimit(nativePen, miterLimit)); | |||
| } | |||
| REAL GetMiterLimit() const | |||
| { | |||
| REAL miterLimit; | |||
| SetStatus(DllExports::GdipGetPenMiterLimit(nativePen, &miterLimit)); | |||
| return miterLimit; | |||
| } | |||
| // Set/get pen mode | |||
| Status SetAlignment(IN PenAlignment penAlignment) | |||
| { | |||
| return SetStatus(DllExports::GdipSetPenMode(nativePen, penAlignment)); | |||
| } | |||
| PenAlignment GetAlignment() const | |||
| { | |||
| PenAlignment penAlignment; | |||
| SetStatus(DllExports::GdipGetPenMode(nativePen, &penAlignment)); | |||
| return penAlignment; | |||
| } | |||
| // Set/get pen transform | |||
| Status SetTransform(IN const Matrix* matrix) | |||
| { | |||
| return SetStatus(DllExports::GdipSetPenTransform(nativePen, | |||
| matrix->nativeMatrix)); | |||
| } | |||
| Status GetTransform(OUT Matrix* matrix) const | |||
| { | |||
| return SetStatus(DllExports::GdipGetPenTransform(nativePen, matrix->nativeMatrix)); | |||
| } | |||
| Status ResetTransform() | |||
| { | |||
| return SetStatus(DllExports::GdipResetPenTransform(nativePen)); | |||
| } | |||
| Status MultiplyTransform(IN const Matrix* matrix, | |||
| IN MatrixOrder order = MatrixOrderPrepend) | |||
| { | |||
| return SetStatus(DllExports::GdipMultiplyPenTransform(nativePen, | |||
| matrix->nativeMatrix, | |||
| order)); | |||
| } | |||
| Status TranslateTransform(IN REAL dx, | |||
| IN REAL dy, | |||
| IN MatrixOrder order = MatrixOrderPrepend) | |||
| { | |||
| return SetStatus(DllExports::GdipTranslatePenTransform(nativePen, | |||
| dx, dy, order)); | |||
| } | |||
| Status ScaleTransform(IN REAL sx, | |||
| IN REAL sy, | |||
| IN MatrixOrder order = MatrixOrderPrepend) | |||
| { | |||
| return SetStatus(DllExports::GdipScalePenTransform(nativePen, | |||
| sx, sy, order)); | |||
| } | |||
| Status RotateTransform(IN REAL angle, | |||
| IN MatrixOrder order = MatrixOrderPrepend) | |||
| { | |||
| return SetStatus(DllExports::GdipRotatePenTransform(nativePen, | |||
| angle, order)); | |||
| } | |||
| PenType GetPenType() const | |||
| { | |||
| PenType type; | |||
| SetStatus(DllExports::GdipGetPenFillType(nativePen, &type)); | |||
| return type; | |||
| } | |||
| Status SetColor(IN const Color& color) | |||
| { | |||
| return SetStatus(DllExports::GdipSetPenColor(nativePen, | |||
| color.GetValue())); | |||
| } | |||
| Status SetBrush(IN const Brush* brush) | |||
| { | |||
| return SetStatus(DllExports::GdipSetPenBrushFill(nativePen, | |||
| brush->nativeBrush)); | |||
| } | |||
| Status GetColor(OUT Color* color) const | |||
| { | |||
| if (color == NULL) | |||
| { | |||
| return SetStatus(InvalidParameter); | |||
| } | |||
| PenType type = GetPenType(); | |||
| if (type != PenTypeSolidColor) | |||
| { | |||
| return WrongState; | |||
| } | |||
| ARGB argb; | |||
| SetStatus(DllExports::GdipGetPenColor(nativePen, | |||
| &argb)); | |||
| if (lastResult == Ok) | |||
| { | |||
| color->SetValue(argb); | |||
| } | |||
| return lastResult; | |||
| } | |||
| Brush* GetBrush() const | |||
| { | |||
| PenType type = GetPenType(); | |||
| Brush* brush = NULL; | |||
| switch(type) | |||
| { | |||
| case PenTypeSolidColor: | |||
| brush = new SolidBrush(); | |||
| break; | |||
| case PenTypeHatchFill: | |||
| brush = new HatchBrush(); | |||
| break; | |||
| case PenTypeTextureFill: | |||
| brush = new TextureBrush(); | |||
| break; | |||
| case PenTypePathGradient: | |||
| brush = new Brush(); | |||
| break; | |||
| case PenTypeLinearGradient: | |||
| brush = new LinearGradientBrush(); | |||
| break; | |||
| default: | |||
| break; | |||
| } | |||
| if(brush) | |||
| { | |||
| GpBrush* nativeBrush; | |||
| SetStatus(DllExports::GdipGetPenBrushFill(nativePen, &nativeBrush)); | |||
| brush->SetNativeBrush(nativeBrush); | |||
| } | |||
| return brush; | |||
| } | |||
| DashStyle GetDashStyle() const | |||
| { | |||
| DashStyle dashStyle; | |||
| SetStatus(DllExports::GdipGetPenDashStyle(nativePen, &dashStyle)); | |||
| return dashStyle; | |||
| } | |||
| Status SetDashStyle(IN DashStyle dashStyle) | |||
| { | |||
| return SetStatus(DllExports::GdipSetPenDashStyle(nativePen, dashStyle)); | |||
| } | |||
| REAL GetDashOffset() const | |||
| { | |||
| REAL dashOffset; | |||
| SetStatus(DllExports::GdipGetPenDashOffset(nativePen, &dashOffset)); | |||
| return dashOffset; | |||
| } | |||
| Status SetDashOffset(IN REAL dashOffset) | |||
| { | |||
| return SetStatus(DllExports::GdipSetPenDashOffset(nativePen, dashOffset)); | |||
| } | |||
| Status SetDashPattern(IN const REAL* dashArray, IN INT count) | |||
| { | |||
| return SetStatus(DllExports::GdipSetPenDashArray(nativePen, dashArray, | |||
| count)); | |||
| } | |||
| INT GetDashPatternCount() const | |||
| { | |||
| INT count = 0; | |||
| SetStatus(DllExports::GdipGetPenDashCount(nativePen, &count)); | |||
| return count; | |||
| } | |||
| Status GetDashPattern(OUT REAL* dashArray, | |||
| IN INT count) const | |||
| { | |||
| if (dashArray == NULL || count <= 0) | |||
| return SetStatus(InvalidParameter); | |||
| return SetStatus(DllExports::GdipGetPenDashArray(nativePen, | |||
| dashArray, | |||
| count)); | |||
| } | |||
| Status SetCompoundArray(IN const REAL* compoundArray, | |||
| IN INT count) | |||
| { | |||
| return SetStatus(DllExports::GdipSetPenCompoundArray(nativePen, compoundArray, | |||
| count)); | |||
| } | |||
| INT GetCompoundArrayCount() const | |||
| { | |||
| INT count = 0; | |||
| SetStatus(DllExports::GdipGetPenCompoundCount(nativePen, &count)); | |||
| return count; | |||
| } | |||
| Status GetCompoundArray(OUT REAL* compoundArray, | |||
| IN INT count) const | |||
| { | |||
| if (compoundArray == NULL || count <= 0) | |||
| return SetStatus(InvalidParameter); | |||
| return SetStatus(DllExports::GdipGetPenCompoundArray(nativePen, | |||
| compoundArray, | |||
| count)); | |||
| } | |||
| Status GetLastStatus() const | |||
| { | |||
| Status lastStatus = lastResult; | |||
| lastResult = Ok; | |||
| return lastStatus; | |||
| } | |||
| protected: | |||
| #ifdef DCR_USE_NEW_250932 | |||
| private: | |||
| Pen(const Pen &); | |||
| Pen& operator=(const Pen &); | |||
| protected: | |||
| #else | |||
| Pen(const Pen& pen) | |||
| { | |||
| pen; | |||
| SetStatus(NotImplemented); | |||
| SetNativePen(NULL); | |||
| } | |||
| Pen& operator=(const Pen& pen) | |||
| { | |||
| pen; | |||
| SetStatus(NotImplemented); | |||
| return *this; | |||
| } | |||
| #endif | |||
| Pen(GpPen* nativePen, Status status) | |||
| { | |||
| lastResult = status; | |||
| SetNativePen(nativePen); | |||
| } | |||
| VOID SetNativePen(GpPen* nativePen) | |||
| { | |||
| this->nativePen = nativePen; | |||
| } | |||
| Status SetStatus(Status status) const | |||
| { | |||
| if (status != Ok) | |||
| return (lastResult = status); | |||
| else | |||
| return status; | |||
| } | |||
| protected: | |||
| GpPen* nativePen; | |||
| mutable Status lastResult; | |||
| }; | |||
| #endif | |||
| @@ -0,0 +1,201 @@ | |||
| /**************************************************************************\ | |||
| * | |||
| * Copyright (c) 1998-2000, Microsoft Corp. All Rights Reserved. | |||
| * | |||
| * Module Name: | |||
| * | |||
| * Gdiplus pixel formats | |||
| * | |||
| * Abstract: | |||
| * | |||
| * Definitions for color types, palettes, pixel format IDs. | |||
| * | |||
| \**************************************************************************/ | |||
| #ifndef _GDIPLUSPIXELFORMATS_H | |||
| #define _GDIPLUSPIXELFORMATS_H | |||
| /* | |||
| * 32-bit and 64-bit ARGB pixel value | |||
| */ | |||
| typedef DWORD ARGB; | |||
| typedef DWORDLONG ARGB64; | |||
| #define ALPHA_SHIFT 24 | |||
| #define RED_SHIFT 16 | |||
| #define GREEN_SHIFT 8 | |||
| #define BLUE_SHIFT 0 | |||
| #define ALPHA_MASK ((ARGB) 0xff << ALPHA_SHIFT) | |||
| /* | |||
| * In-memory pixel data formats: | |||
| * bits 0-7 = format index | |||
| * bits 8-15 = pixel size (in bits) | |||
| * bits 16-23 = flags | |||
| * bits 24-31 = reserved | |||
| */ | |||
| #ifndef DCR_USE_NEW_105760 | |||
| enum PixelFormat | |||
| { | |||
| PixelFormatIndexed = 0x00010000, // Indexes into a palette | |||
| PixelFormatGDI = 0x00020000, // Is a GDI-supported format | |||
| PixelFormatAlpha = 0x00040000, // Has an alpha component | |||
| PixelFormatPAlpha = 0x00080000, // Uses pre-multiplied alpha | |||
| PixelFormatExtended = 0x00100000, // Uses extended color (16 bits per channel) | |||
| PixelFormatCanonical = 0x00200000, // ? | |||
| PixelFormatUndefined = 0, | |||
| PixelFormatDontCare = 0, | |||
| PixelFormat1bppIndexed = 1 | ( 1 << 8) | PixelFormatIndexed | |||
| | PixelFormatGDI, | |||
| PixelFormat4bppIndexed = 2 | ( 4 << 8) | PixelFormatIndexed | |||
| | PixelFormatGDI, | |||
| PixelFormat8bppIndexed = 3 | ( 8 << 8) | PixelFormatIndexed | |||
| | PixelFormatGDI, | |||
| PixelFormat16bppGrayScale = 4 | (16 << 8) | PixelFormatExtended, | |||
| PixelFormat16bppRGB555 = 5 | (16 << 8) | PixelFormatGDI, | |||
| PixelFormat16bppRGB565 = 6 | (16 << 8) | PixelFormatGDI, | |||
| PixelFormat16bppARGB1555 = 7 | (16 << 8) | PixelFormatAlpha | |||
| | PixelFormatGDI, | |||
| PixelFormat24bppRGB = 8 | (24 << 8) | PixelFormatGDI, | |||
| PixelFormat32bppRGB = 9 | (32 << 8) | PixelFormatGDI, | |||
| PixelFormat32bppARGB = 10 | (32 << 8) | PixelFormatAlpha | |||
| | PixelFormatGDI | |||
| | PixelFormatCanonical, | |||
| PixelFormat32bppPARGB = 11 | (32 << 8) | PixelFormatAlpha | |||
| | PixelFormatPAlpha | |||
| | PixelFormatGDI, | |||
| PixelFormat48bppRGB = 12 | (48 << 8) | PixelFormatExtended, | |||
| PixelFormat64bppARGB = 13 | (64 << 8) | PixelFormatAlpha | |||
| | PixelFormatCanonical | |||
| | PixelFormatExtended, | |||
| PixelFormat64bppPARGB = 14 | (64 << 8) | PixelFormatAlpha | |||
| | PixelFormatPAlpha | |||
| | PixelFormatExtended, | |||
| PixelFormat24bppBGR = 15 | (24 << 8) | PixelFormatGDI, | |||
| PixelFormatMax = 16 | |||
| }; | |||
| #else | |||
| typedef INT PixelFormat; | |||
| #define PixelFormatIndexed 0x00010000 // Indexes into a palette | |||
| #define PixelFormatGDI 0x00020000 // Is a GDI-supported format | |||
| #define PixelFormatAlpha 0x00040000 // Has an alpha component | |||
| #define PixelFormatPAlpha 0x00080000 // Uses pre-multiplied alpha | |||
| #define PixelFormatExtended 0x00100000 // Uses extended color (16 bits per channel) | |||
| #define PixelFormatCanonical 0x00200000 // ? | |||
| #define PixelFormatUndefined 0 | |||
| #define PixelFormatDontCare 0 | |||
| #define PixelFormat1bppIndexed (1 | ( 1 << 8) | PixelFormatIndexed | PixelFormatGDI) | |||
| #define PixelFormat4bppIndexed (2 | ( 4 << 8) | PixelFormatIndexed | PixelFormatGDI) | |||
| #define PixelFormat8bppIndexed (3 | ( 8 << 8) | PixelFormatIndexed | PixelFormatGDI) | |||
| #define PixelFormat16bppGrayScale (4 | (16 << 8) | PixelFormatExtended) | |||
| #define PixelFormat16bppRGB555 (5 | (16 << 8) | PixelFormatGDI) | |||
| #define PixelFormat16bppRGB565 (6 | (16 << 8) | PixelFormatGDI) | |||
| #define PixelFormat16bppARGB1555 (7 | (16 << 8) | PixelFormatAlpha | PixelFormatGDI) | |||
| #define PixelFormat24bppRGB (8 | (24 << 8) | PixelFormatGDI) | |||
| #define PixelFormat32bppRGB (9 | (32 << 8) | PixelFormatGDI) | |||
| #define PixelFormat32bppARGB (10 | (32 << 8) | PixelFormatAlpha | PixelFormatGDI | PixelFormatCanonical) | |||
| #define PixelFormat32bppPARGB (11 | (32 << 8) | PixelFormatAlpha | PixelFormatPAlpha | PixelFormatGDI) | |||
| #define PixelFormat48bppRGB (12 | (48 << 8) | PixelFormatExtended) | |||
| #define PixelFormat64bppARGB (13 | (64 << 8) | PixelFormatAlpha | PixelFormatCanonical | PixelFormatExtended) | |||
| #define PixelFormat64bppPARGB (14 | (64 << 8) | PixelFormatAlpha | PixelFormatPAlpha | PixelFormatExtended) | |||
| #define PixelFormatMax 15 | |||
| #endif | |||
| /* | |||
| * Return the pixel size for the specified format (in bits) | |||
| */ | |||
| inline UINT | |||
| GetPixelFormatSize( | |||
| PixelFormat pixfmt | |||
| ) | |||
| { | |||
| return (pixfmt >> 8) & 0xff; | |||
| } | |||
| /* | |||
| * Determine if the specified pixel format is an indexed color format | |||
| */ | |||
| inline BOOL | |||
| IsIndexedPixelFormat( | |||
| PixelFormat pixfmt | |||
| ) | |||
| { | |||
| return (pixfmt & PixelFormatIndexed) != 0; | |||
| } | |||
| /* | |||
| * Determine if the pixel format can have alpha channel | |||
| */ | |||
| inline BOOL | |||
| IsAlphaPixelFormat( | |||
| PixelFormat pixfmt | |||
| ) | |||
| { | |||
| return (pixfmt & PixelFormatAlpha) != 0; | |||
| } | |||
| /* | |||
| * Determine if the pixel format is an extended format, | |||
| * i.e. supports 16-bit per channel | |||
| */ | |||
| inline BOOL | |||
| IsExtendedPixelFormat( | |||
| PixelFormat pixfmt | |||
| ) | |||
| { | |||
| return (pixfmt & PixelFormatExtended) != 0; | |||
| } | |||
| /* | |||
| * Determine if the pixel format is canonical format: | |||
| * PixelFormat32bppARGB | |||
| * PixelFormat32bppPARGB | |||
| * PixelFormat64bppARGB | |||
| * PixelFormat64bppPARGB | |||
| */ | |||
| inline BOOL | |||
| IsCanonicalPixelFormat( | |||
| PixelFormat pixfmt | |||
| ) | |||
| { | |||
| return (pixfmt & PixelFormatCanonical) != 0; | |||
| } | |||
| /* | |||
| * Color palette | |||
| * palette entries are limited to 32bpp ARGB pixel format | |||
| */ | |||
| enum PaletteFlags | |||
| { | |||
| PaletteFlagsHasAlpha = 0x0001, | |||
| PaletteFlagsGrayScale = 0x0002, | |||
| PaletteFlagsHalftone = 0x0004 | |||
| }; | |||
| struct ColorPalette | |||
| { | |||
| public: | |||
| UINT Flags; // palette flags | |||
| UINT Count; // number of color entries | |||
| ARGB Entries[1]; // palette color entries | |||
| }; | |||
| #endif | |||
| @@ -0,0 +1,498 @@ | |||
| /**************************************************************************\ | |||
| * | |||
| * Copyright (c) 1998-2000, Microsoft Corp. All Rights Reserved. | |||
| * | |||
| * Module Name: | |||
| * | |||
| * GdiplusRegion.h | |||
| * | |||
| * Abstract: | |||
| * | |||
| * Region API related declarations | |||
| * | |||
| \**************************************************************************/ | |||
| #ifndef _GDIPLUSREGION_H | |||
| #define _GDIPLUSREGION_H | |||
| /** | |||
| * Construct a new region object | |||
| */ | |||
| inline | |||
| Region::Region() | |||
| { | |||
| GpRegion *region = NULL; | |||
| lastResult = DllExports::GdipCreateRegion(®ion); | |||
| SetNativeRegion(region); | |||
| } | |||
| inline | |||
| Region::Region(IN const RectF& rect) | |||
| { | |||
| GpRegion *region = NULL; | |||
| lastResult = DllExports::GdipCreateRegionRect(&rect, ®ion); | |||
| SetNativeRegion(region); | |||
| } | |||
| inline | |||
| Region::Region(IN const Rect& rect) | |||
| { | |||
| GpRegion *region = NULL; | |||
| lastResult = DllExports::GdipCreateRegionRectI(&rect, ®ion); | |||
| SetNativeRegion(region); | |||
| } | |||
| inline | |||
| Region::Region(IN const GraphicsPath* path) | |||
| { | |||
| GpRegion *region = NULL; | |||
| lastResult = DllExports::GdipCreateRegionPath(path->nativePath, ®ion); | |||
| SetNativeRegion(region); | |||
| } | |||
| inline | |||
| Region::Region(IN const BYTE* regionData, IN INT size) | |||
| { | |||
| GpRegion *region = NULL; | |||
| lastResult = DllExports::GdipCreateRegionRgnData(regionData, size, ®ion); | |||
| SetNativeRegion(region); | |||
| } | |||
| inline | |||
| Region::Region(IN HRGN hRgn) | |||
| { | |||
| GpRegion *region = NULL; | |||
| lastResult = DllExports::GdipCreateRegionHrgn(hRgn, ®ion); | |||
| SetNativeRegion(region); | |||
| } | |||
| inline | |||
| Region* Region::FromHRGN(IN HRGN hRgn) | |||
| { | |||
| GpRegion *region = NULL; | |||
| if (DllExports::GdipCreateRegionHrgn(hRgn, ®ion) == Ok) | |||
| { | |||
| Region* newRegion = new Region(region); | |||
| if (newRegion == NULL) | |||
| { | |||
| DllExports::GdipDeleteRegion(region); | |||
| } | |||
| return newRegion; | |||
| } | |||
| else | |||
| return NULL; | |||
| } | |||
| inline | |||
| Region::~Region() | |||
| { | |||
| DllExports::GdipDeleteRegion(nativeRegion); | |||
| } | |||
| /** | |||
| * Make a copy of the region object | |||
| */ | |||
| inline Region* | |||
| Region::Clone() const | |||
| { | |||
| GpRegion *region = NULL; | |||
| SetStatus(DllExports::GdipCloneRegion(nativeRegion, ®ion)); | |||
| return new Region(region); | |||
| } | |||
| inline Status | |||
| Region::MakeInfinite() | |||
| { | |||
| return SetStatus(DllExports::GdipSetInfinite(nativeRegion)); | |||
| } | |||
| inline Status | |||
| Region::MakeEmpty() | |||
| { | |||
| return SetStatus(DllExports::GdipSetEmpty(nativeRegion)); | |||
| } | |||
| /** | |||
| * Region operations | |||
| */ | |||
| inline Status | |||
| Region::Intersect(IN const RectF& rect) | |||
| { | |||
| return SetStatus(DllExports::GdipCombineRegionRect(nativeRegion, &rect, CombineModeIntersect)); | |||
| } | |||
| inline Status | |||
| Region::Intersect(IN const Rect& rect) | |||
| { | |||
| return SetStatus(DllExports::GdipCombineRegionRectI(nativeRegion, &rect, CombineModeIntersect)); | |||
| } | |||
| inline Status | |||
| Region::Intersect(IN const GraphicsPath* path) | |||
| { | |||
| return SetStatus(DllExports::GdipCombineRegionPath(nativeRegion, path->nativePath, CombineModeIntersect)); | |||
| } | |||
| inline Status | |||
| Region::Intersect(IN const Region* region) | |||
| { | |||
| return SetStatus(DllExports::GdipCombineRegionRegion(nativeRegion, region->nativeRegion, CombineModeIntersect)); | |||
| } | |||
| inline Status | |||
| Region::Union(IN const RectF& rect) | |||
| { | |||
| return SetStatus(DllExports::GdipCombineRegionRect(nativeRegion, &rect, CombineModeUnion)); | |||
| } | |||
| inline Status | |||
| Region::Union(IN const Rect& rect) | |||
| { | |||
| return SetStatus(DllExports::GdipCombineRegionRectI(nativeRegion, &rect, CombineModeUnion)); | |||
| } | |||
| inline Status | |||
| Region::Union(IN const GraphicsPath* path) | |||
| { | |||
| return SetStatus(DllExports::GdipCombineRegionPath(nativeRegion, path->nativePath, CombineModeUnion)); | |||
| } | |||
| inline Status | |||
| Region::Union(IN const Region* region) | |||
| { | |||
| return SetStatus(DllExports::GdipCombineRegionRegion(nativeRegion, region->nativeRegion, CombineModeUnion)); | |||
| } | |||
| inline Status | |||
| Region::Xor(IN const RectF& rect) | |||
| { | |||
| return SetStatus(DllExports::GdipCombineRegionRect(nativeRegion, &rect, CombineModeXor)); | |||
| } | |||
| inline Status | |||
| Region::Xor(IN const Rect& rect) | |||
| { | |||
| return SetStatus(DllExports::GdipCombineRegionRectI(nativeRegion, &rect, CombineModeXor)); | |||
| } | |||
| inline Status | |||
| Region::Xor(IN const GraphicsPath* path) | |||
| { | |||
| return SetStatus(DllExports::GdipCombineRegionPath(nativeRegion, path->nativePath, CombineModeXor)); | |||
| } | |||
| inline Status | |||
| Region::Xor(IN const Region* region) | |||
| { | |||
| return SetStatus(DllExports::GdipCombineRegionRegion(nativeRegion, region->nativeRegion, CombineModeXor)); | |||
| } | |||
| inline Status | |||
| Region::Exclude(IN const RectF& rect) | |||
| { | |||
| return SetStatus(DllExports::GdipCombineRegionRect(nativeRegion, &rect, CombineModeExclude)); | |||
| } | |||
| inline Status | |||
| Region::Exclude(IN const Rect& rect) | |||
| { | |||
| return SetStatus(DllExports::GdipCombineRegionRectI(nativeRegion, &rect, CombineModeExclude)); | |||
| } | |||
| inline Status | |||
| Region::Exclude(IN const GraphicsPath* path) | |||
| { | |||
| return SetStatus(DllExports::GdipCombineRegionPath(nativeRegion, path->nativePath, CombineModeExclude)); | |||
| } | |||
| inline Status | |||
| Region::Exclude(IN const Region* region) | |||
| { | |||
| return SetStatus(DllExports::GdipCombineRegionRegion(nativeRegion, | |||
| region->nativeRegion, CombineModeExclude)); | |||
| } | |||
| inline Status | |||
| Region::Complement(IN const RectF& rect) | |||
| { | |||
| return SetStatus(DllExports::GdipCombineRegionRect(nativeRegion, &rect, CombineModeComplement)); | |||
| } | |||
| inline Status | |||
| Region::Complement(IN const Rect& rect) | |||
| { | |||
| return SetStatus(DllExports::GdipCombineRegionRectI(nativeRegion, &rect, CombineModeComplement)); | |||
| } | |||
| inline Status | |||
| Region::Complement(IN const GraphicsPath* path) | |||
| { | |||
| return SetStatus(DllExports::GdipCombineRegionPath(nativeRegion, | |||
| path->nativePath, CombineModeComplement)); | |||
| } | |||
| inline Status | |||
| Region::Complement(IN const Region* region) | |||
| { | |||
| return SetStatus(DllExports::GdipCombineRegionRegion(nativeRegion, | |||
| region->nativeRegion, CombineModeComplement)); | |||
| } | |||
| /** | |||
| * Transform operations | |||
| */ | |||
| inline Status | |||
| Region::Translate(IN REAL dx, | |||
| IN REAL dy) | |||
| { | |||
| return SetStatus(DllExports::GdipTranslateRegion(nativeRegion, dx, dy)); | |||
| } | |||
| inline Status | |||
| Region::Translate(IN INT dx, | |||
| IN INT dy) | |||
| { | |||
| return SetStatus(DllExports::GdipTranslateRegionI(nativeRegion, dx, dy)); | |||
| } | |||
| inline Status | |||
| Region::Transform(IN const Matrix* matrix) | |||
| { | |||
| return SetStatus(DllExports::GdipTransformRegion(nativeRegion, matrix->nativeMatrix)); | |||
| } | |||
| /** | |||
| * Get region attributes | |||
| */ | |||
| inline Status | |||
| Region::GetBounds(OUT RectF* rect, | |||
| IN const Graphics* g) const | |||
| { | |||
| return SetStatus(DllExports::GdipGetRegionBounds(nativeRegion, | |||
| g->nativeGraphics, | |||
| rect)); | |||
| } | |||
| inline Status | |||
| Region::GetBounds(OUT Rect* rect, | |||
| IN const Graphics* g) const | |||
| { | |||
| return SetStatus(DllExports::GdipGetRegionBoundsI(nativeRegion, | |||
| g->nativeGraphics, | |||
| rect)); | |||
| } | |||
| inline HRGN | |||
| Region::GetHRGN(IN const Graphics* g) const | |||
| { | |||
| HRGN hrgn; | |||
| SetStatus(DllExports::GdipGetRegionHRgn(nativeRegion, | |||
| g->nativeGraphics, | |||
| &hrgn)); | |||
| return hrgn; | |||
| } | |||
| inline BOOL | |||
| Region::IsEmpty(IN const Graphics *g) const | |||
| { | |||
| BOOL booln = FALSE; | |||
| SetStatus(DllExports::GdipIsEmptyRegion(nativeRegion, | |||
| g->nativeGraphics, | |||
| &booln)); | |||
| return booln; | |||
| } | |||
| inline BOOL | |||
| Region::IsInfinite(IN const Graphics *g) const | |||
| { | |||
| BOOL booln = FALSE; | |||
| SetStatus(DllExports::GdipIsInfiniteRegion(nativeRegion, | |||
| g->nativeGraphics, | |||
| &booln)); | |||
| return booln; | |||
| } | |||
| inline BOOL | |||
| Region::Equals(IN const Region* region, | |||
| IN const Graphics* g) const | |||
| { | |||
| BOOL booln = FALSE; | |||
| SetStatus(DllExports::GdipIsEqualRegion(nativeRegion, | |||
| region->nativeRegion, | |||
| g->nativeGraphics, | |||
| &booln)); | |||
| return booln; | |||
| } | |||
| // Get the size of the buffer needed for the GetData method | |||
| inline UINT | |||
| Region::GetDataSize() const | |||
| { | |||
| UINT bufferSize = 0; | |||
| SetStatus(DllExports::GdipGetRegionDataSize(nativeRegion, &bufferSize)); | |||
| return bufferSize; | |||
| } | |||
| // 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. | |||
| inline Status | |||
| Region::GetData(OUT BYTE* buffer, | |||
| IN UINT bufferSize, | |||
| OUT UINT* sizeFilled) const | |||
| { | |||
| return SetStatus(DllExports::GdipGetRegionData(nativeRegion, buffer, bufferSize, sizeFilled)); | |||
| } | |||
| /** | |||
| * Hit testing operations | |||
| */ | |||
| inline BOOL | |||
| Region::IsVisible(IN const PointF& point, | |||
| IN const Graphics* g) const | |||
| { | |||
| BOOL booln = FALSE; | |||
| SetStatus(DllExports::GdipIsVisibleRegionPoint(nativeRegion, | |||
| point.X, point.Y, | |||
| (g == NULL) ? NULL : g->nativeGraphics, | |||
| &booln)); | |||
| return booln; | |||
| } | |||
| inline BOOL | |||
| Region::IsVisible(IN const RectF& rect, | |||
| IN const Graphics* g) const | |||
| { | |||
| BOOL booln = FALSE; | |||
| SetStatus(DllExports::GdipIsVisibleRegionRect(nativeRegion, rect.X, | |||
| rect.Y, rect.Width, | |||
| rect.Height, | |||
| (g == NULL) ? NULL : g->nativeGraphics, | |||
| &booln)); | |||
| return booln; | |||
| } | |||
| inline BOOL | |||
| Region::IsVisible(IN const Point& point, | |||
| IN const Graphics* g) const | |||
| { | |||
| BOOL booln = FALSE; | |||
| SetStatus(DllExports::GdipIsVisibleRegionPointI(nativeRegion, | |||
| point.X, | |||
| point.Y, | |||
| (g == NULL) ? NULL : g->nativeGraphics, | |||
| &booln)); | |||
| return booln; | |||
| } | |||
| inline BOOL | |||
| Region::IsVisible(IN const Rect& rect, | |||
| IN const Graphics* g) const | |||
| { | |||
| BOOL booln = FALSE; | |||
| SetStatus(DllExports::GdipIsVisibleRegionRectI(nativeRegion, | |||
| rect.X, | |||
| rect.Y, | |||
| rect.Width, | |||
| rect.Height, | |||
| (g == NULL) ? NULL : g->nativeGraphics, | |||
| &booln)); | |||
| return booln; | |||
| } | |||
| inline UINT | |||
| Region::GetRegionScansCount(IN const Matrix* matrix) const | |||
| { | |||
| UINT count = 0; | |||
| SetStatus(DllExports::GdipGetRegionScansCount(nativeRegion, | |||
| &count, | |||
| matrix->nativeMatrix)); | |||
| return count; | |||
| } | |||
| inline Status | |||
| Region::GetRegionScans( | |||
| IN const Matrix* matrix, | |||
| OUT RectF* rects, | |||
| IN OUT INT* count) const | |||
| { | |||
| return SetStatus(DllExports::GdipGetRegionScans(nativeRegion, | |||
| rects, | |||
| count, | |||
| matrix->nativeMatrix)); | |||
| } | |||
| // If rects is NULL, return the count of rects in the region. | |||
| // Otherwise, assume rects is big enough to hold all the region rects | |||
| // and fill them in and return the number of rects filled in. | |||
| // The rects are returned in the units specified by the matrix | |||
| // (which is typically a world-to-device transform). | |||
| // Note that the number of rects returned can vary, depending on the | |||
| // matrix that is used. | |||
| inline Status | |||
| Region::GetRegionScans( | |||
| IN const Matrix* matrix, | |||
| OUT Rect* rects, // NULL to just get the count | |||
| IN OUT INT* count) const | |||
| { | |||
| return SetStatus(DllExports::GdipGetRegionScansI(nativeRegion, | |||
| rects, | |||
| count, | |||
| matrix->nativeMatrix)); | |||
| } | |||
| // protected method | |||
| inline Region::Region(GpRegion* nativeRegion) | |||
| { | |||
| SetNativeRegion(nativeRegion); | |||
| } | |||
| // protected method | |||
| inline VOID Region::SetNativeRegion(GpRegion* nativeRegion) | |||
| { | |||
| this->nativeRegion = nativeRegion; | |||
| } | |||
| inline Status Region::GetLastStatus() const | |||
| { | |||
| Status lastStatus = lastResult; | |||
| lastResult = Ok; | |||
| return lastStatus; | |||
| } | |||
| #endif // !_GDIPLUSREGION_H | |||
| @@ -0,0 +1,381 @@ | |||
| /**************************************************************************\ | |||
| * | |||
| * Copyright (c) 1998-2000, Microsoft Corp. All Rights Reserved. | |||
| * | |||
| * Module Name: | |||
| * | |||
| * GdiplusStringFormat.h | |||
| * | |||
| * Abstract: | |||
| * | |||
| * String format specification for DrawString and text APIs | |||
| * | |||
| \**************************************************************************/ | |||
| #ifndef _GDIPLUSSTRINGFORMAT_H | |||
| #define _GDIPLUSSTRINGFORMAT_H | |||
| class StringFormat : public GdiplusBase | |||
| { | |||
| public: | |||
| friend class Graphics; | |||
| friend class GraphicsPath; | |||
| StringFormat( | |||
| IN INT formatFlags = 0, | |||
| IN LANGID language = LANG_NEUTRAL | |||
| ) | |||
| { | |||
| nativeFormat = NULL; | |||
| lastError = DllExports::GdipCreateStringFormat( | |||
| formatFlags, | |||
| language, | |||
| &nativeFormat | |||
| ); | |||
| } | |||
| static const StringFormat *GenericDefault(); | |||
| static const StringFormat *GenericTypographic(); | |||
| // Constructor based on existing string format | |||
| StringFormat( | |||
| IN const StringFormat *format | |||
| ) | |||
| { | |||
| nativeFormat = NULL; | |||
| lastError = DllExports::GdipCloneStringFormat( | |||
| format ? format->nativeFormat : NULL, | |||
| &nativeFormat | |||
| ); | |||
| } | |||
| StringFormat *Clone() const | |||
| { | |||
| GpStringFormat *clonedStringFormat = NULL; | |||
| lastError = DllExports::GdipCloneStringFormat( | |||
| nativeFormat, | |||
| &clonedStringFormat | |||
| ); | |||
| if (lastError == Ok) | |||
| return new StringFormat(clonedStringFormat, lastError); | |||
| else | |||
| return NULL; | |||
| } | |||
| ~StringFormat() | |||
| { | |||
| DllExports::GdipDeleteStringFormat(nativeFormat); | |||
| } | |||
| Status SetFormatFlags(IN INT flags) | |||
| { | |||
| return SetStatus(DllExports::GdipSetStringFormatFlags( | |||
| nativeFormat, | |||
| flags | |||
| )); | |||
| } | |||
| INT GetFormatFlags() const | |||
| { | |||
| INT flags; | |||
| SetStatus(DllExports::GdipGetStringFormatFlags(nativeFormat, &flags)); | |||
| return flags; | |||
| } | |||
| #ifndef DCR_USE_NEW_152154 | |||
| Status SetLineSpacing( | |||
| IN REAL amount = 1.0f, | |||
| IN LineSpacing method = LineSpacingRecommended | |||
| ) | |||
| { | |||
| return SetStatus(DllExports::GdipSetStringFormatLineSpacing( | |||
| nativeFormat, | |||
| amount, | |||
| method | |||
| )); | |||
| } | |||
| #endif | |||
| Status SetAlignment(IN StringAlignment align) | |||
| { | |||
| return SetStatus(DllExports::GdipSetStringFormatAlign( | |||
| nativeFormat, | |||
| align | |||
| )); | |||
| } | |||
| StringAlignment GetAlignment() const | |||
| { | |||
| StringAlignment alignment; | |||
| SetStatus(DllExports::GdipGetStringFormatAlign( | |||
| nativeFormat, | |||
| &alignment | |||
| )); | |||
| return alignment; | |||
| } | |||
| Status SetLineAlignment(IN StringAlignment align) | |||
| { | |||
| return SetStatus(DllExports::GdipSetStringFormatLineAlign( | |||
| nativeFormat, | |||
| align | |||
| )); | |||
| } | |||
| StringAlignment GetLineAlignment() const | |||
| { | |||
| StringAlignment alignment; | |||
| SetStatus(DllExports::GdipGetStringFormatLineAlign( | |||
| nativeFormat, | |||
| &alignment | |||
| )); | |||
| return alignment; | |||
| } | |||
| Status SetHotkeyPrefix(IN HotkeyPrefix hotkeyPrefix) | |||
| { | |||
| return SetStatus(DllExports::GdipSetStringFormatHotkeyPrefix( | |||
| nativeFormat, | |||
| (INT)hotkeyPrefix | |||
| )); | |||
| } | |||
| HotkeyPrefix GetHotkeyPrefix() const | |||
| { | |||
| HotkeyPrefix hotkeyPrefix; | |||
| SetStatus(DllExports::GdipGetStringFormatHotkeyPrefix( | |||
| nativeFormat, | |||
| (INT*)&hotkeyPrefix | |||
| )); | |||
| return hotkeyPrefix; | |||
| } | |||
| Status SetTabStops( | |||
| IN REAL firstTabOffset, | |||
| IN INT count, | |||
| IN const REAL *tabStops | |||
| ) | |||
| { | |||
| return SetStatus(DllExports::GdipSetStringFormatTabStops( | |||
| nativeFormat, | |||
| firstTabOffset, | |||
| count, | |||
| tabStops | |||
| )); | |||
| } | |||
| INT GetTabStopCount() const | |||
| { | |||
| INT count; | |||
| SetStatus(DllExports::GdipGetStringFormatTabStopCount(nativeFormat, &count)); | |||
| return count; | |||
| } | |||
| Status GetTabStops( | |||
| IN INT count, | |||
| OUT REAL *firstTabOffset, | |||
| OUT REAL *tabStops | |||
| ) const | |||
| { | |||
| return SetStatus(DllExports::GdipGetStringFormatTabStops( | |||
| nativeFormat, | |||
| count, | |||
| firstTabOffset, | |||
| tabStops | |||
| )); | |||
| } | |||
| #ifdef DCR_USE_NEW_146933 | |||
| Status SetDigitSubstitution( | |||
| IN LANGID language, | |||
| IN StringDigitSubstitute substitute | |||
| ) | |||
| { | |||
| return SetStatus(DllExports::GdipSetStringFormatDigitSubstitution( | |||
| nativeFormat, | |||
| language, | |||
| substitute | |||
| )); | |||
| } | |||
| LANGID GetDigitSubstitutionLanguage( | |||
| ) const | |||
| { | |||
| LANGID language; | |||
| SetStatus(DllExports::GdipGetStringFormatDigitSubstitution( | |||
| nativeFormat, | |||
| &language, | |||
| NULL | |||
| )); | |||
| return language; | |||
| } | |||
| StringDigitSubstitute GetDigitSubstitutionMethod( | |||
| ) const | |||
| { | |||
| StringDigitSubstitute substitute; | |||
| SetStatus(DllExports::GdipGetStringFormatDigitSubstitution( | |||
| nativeFormat, | |||
| NULL, | |||
| &substitute | |||
| )); | |||
| return substitute; | |||
| } | |||
| #endif // DCR_USE_NEW_146933 | |||
| // String trimming. How to handle more text than can be displayed | |||
| // in the limits available. | |||
| Status SetTrimming(IN StringTrimming trimming) | |||
| { | |||
| return SetStatus(DllExports::GdipSetStringFormatTrimming( | |||
| nativeFormat, | |||
| trimming | |||
| )); | |||
| } | |||
| StringTrimming GetTrimming() const | |||
| { | |||
| StringTrimming trimming; | |||
| SetStatus(DllExports::GdipGetStringFormatTrimming( | |||
| nativeFormat, | |||
| &trimming | |||
| )); | |||
| return trimming; | |||
| } | |||
| #ifdef DCR_USE_NEW_174340 | |||
| Status SetMeasurableCharacterRanges( | |||
| IN INT rangeCount, | |||
| IN const CharacterRange *ranges | |||
| ) | |||
| { | |||
| return SetStatus(DllExports::GdipSetStringFormatMeasurableCharacterRanges( | |||
| nativeFormat, | |||
| rangeCount, | |||
| ranges | |||
| )); | |||
| } | |||
| INT GetMeasurableCharacterRangeCount() | |||
| { | |||
| INT count; | |||
| SetStatus(DllExports::GdipGetStringFormatMeasurableCharacterRangeCount( | |||
| nativeFormat, | |||
| &count | |||
| )); | |||
| return count; | |||
| } | |||
| #endif | |||
| // GetLastStatus - return last error code and clear error code | |||
| Status GetLastStatus() const | |||
| { | |||
| Status lastStatus = lastError; | |||
| lastError = Ok; | |||
| return lastStatus; | |||
| } | |||
| protected: | |||
| Status SetStatus(GpStatus newStatus) const | |||
| { | |||
| if (newStatus == Ok) | |||
| { | |||
| return Ok; | |||
| } | |||
| else | |||
| { | |||
| return lastError = newStatus; | |||
| } | |||
| } | |||
| // Not allowed and move to private | |||
| StringFormat(const StringFormat &source) | |||
| { | |||
| nativeFormat = NULL; | |||
| lastError = DllExports::GdipCloneStringFormat( | |||
| source.nativeFormat, | |||
| &nativeFormat | |||
| ); | |||
| } | |||
| StringFormat& operator=(const StringFormat &source) | |||
| { | |||
| DllExports::GdipDeleteStringFormat(nativeFormat); | |||
| lastError = DllExports::GdipCloneStringFormat( | |||
| source.nativeFormat, | |||
| &nativeFormat | |||
| ); | |||
| return *this; | |||
| } | |||
| // private constructor for copy | |||
| StringFormat(GpStringFormat * clonedStringFormat, Status status) | |||
| { | |||
| lastError = status; | |||
| nativeFormat = clonedStringFormat; | |||
| } | |||
| GpStringFormat *nativeFormat; | |||
| mutable Status lastError; | |||
| }; | |||
| // Generic constant string formats. | |||
| static BYTE GenericTypographicStringFormatBuffer[sizeof(StringFormat)] = {0}; | |||
| static BYTE GenericDefaultStringFormatBuffer[sizeof(StringFormat)] = {0}; | |||
| static StringFormat *GenericTypographicStringFormat = NULL; | |||
| static StringFormat *GenericDefaultStringFormat = NULL; | |||
| // Define the generic string formats | |||
| inline const StringFormat *StringFormat::GenericDefault() | |||
| { | |||
| if (GenericDefaultStringFormat != NULL) | |||
| { | |||
| return GenericDefaultStringFormat; | |||
| } | |||
| GenericDefaultStringFormat = | |||
| (StringFormat*)GenericDefaultStringFormatBuffer; | |||
| GenericDefaultStringFormat->lastError = | |||
| DllExports::GdipStringFormatGetGenericDefault( | |||
| &(GenericDefaultStringFormat->nativeFormat) | |||
| ); | |||
| return GenericDefaultStringFormat; | |||
| } | |||
| inline const StringFormat *StringFormat::GenericTypographic() | |||
| { | |||
| if (GenericTypographicStringFormat != NULL) | |||
| { | |||
| return GenericTypographicStringFormat; | |||
| } | |||
| GenericTypographicStringFormat = | |||
| (StringFormat*)GenericTypographicStringFormatBuffer; | |||
| GenericTypographicStringFormat->lastError = | |||
| DllExports::GdipStringFormatGetGenericTypographic( | |||
| &GenericTypographicStringFormat->nativeFormat | |||
| ); | |||
| return GenericTypographicStringFormat; | |||
| } | |||
| #endif // !_GDIPLUSSTRINGFORMAT_H | |||
| @@ -0,0 +1,826 @@ | |||
| /**************************************************************************\ | |||
| * | |||
| * Copyright (c) 1998-2000, Microsoft Corp. All Rights Reserved. | |||
| * | |||
| * Module Name: | |||
| * | |||
| * GdiplusTypes.h | |||
| * | |||
| * Abstract: | |||
| * | |||
| * Basic types used by GDI+ | |||
| * | |||
| \**************************************************************************/ | |||
| #ifndef _GDIPLUSTYPES_H | |||
| #define _GDIPLUSTYPES_H | |||
| #ifndef DCR_USE_NEW_175866 | |||
| //-------------------------------------------------------------------------- | |||
| // LIB version initialization functions | |||
| //-------------------------------------------------------------------------- | |||
| typedef VOID (__cdecl *DEBUGEVENTFUNCTION)(INT level, CHAR *message); | |||
| extern "C" BOOL __stdcall InitializeGdiplus(DEBUGEVENTFUNCTION); | |||
| extern "C" VOID __stdcall UninitializeGdiplus(); | |||
| #endif | |||
| //-------------------------------------------------------------------------- | |||
| // Callback functions | |||
| //-------------------------------------------------------------------------- | |||
| extern "C" { | |||
| typedef BOOL (CALLBACK * ImageAbort)(VOID *); | |||
| typedef ImageAbort DrawImageAbort; | |||
| typedef ImageAbort GetThumbnailImageAbort; | |||
| } | |||
| // Callback for EnumerateMetafile methods. The parameters are: | |||
| // recordType WMF, EMF, or EMF+ record type | |||
| // flags (always 0 for WMF/EMF records) | |||
| // dataSize size of the record data (in bytes), or 0 if no data | |||
| // data pointer to the record data, or NULL if no data | |||
| // callbackData pointer to callbackData, if any | |||
| // This method can then call Metafile::PlayRecord to play the | |||
| // record that was just enumerated. If this method returns | |||
| // FALSE, the enumeration process is aborted. Otherwise, it continues. | |||
| extern "C" { | |||
| typedef BOOL (CALLBACK * EnumerateMetafileProc)(EmfPlusRecordType,UINT,UINT,const BYTE*,VOID*); | |||
| } | |||
| //-------------------------------------------------------------------------- | |||
| // Primitive data types | |||
| // | |||
| // NOTE: | |||
| // Types already defined in standard header files: | |||
| // INT8 | |||
| // UINT8 | |||
| // INT16 | |||
| // UINT16 | |||
| // INT32 | |||
| // UINT32 | |||
| // INT64 | |||
| // UINT64 | |||
| // | |||
| // Avoid using the following types: | |||
| // LONG - use INT | |||
| // ULONG - use UINT | |||
| // DWORD - use UINT32 | |||
| //-------------------------------------------------------------------------- | |||
| typedef float REAL; | |||
| #define REAL_MAX FLT_MAX | |||
| #define REAL_MIN FLT_MIN | |||
| #define REAL_TOLERANCE (FLT_MIN * 100) | |||
| #define REAL_EPSILON 1.192092896e-07F /* FLT_EPSILON */ | |||
| //-------------------------------------------------------------------------- | |||
| // Forward declarations of various internal classes | |||
| //-------------------------------------------------------------------------- | |||
| class Size; | |||
| class SizeF; | |||
| class Point; | |||
| class PointF; | |||
| class Rect; | |||
| class RectF; | |||
| class CharacterRange; | |||
| //-------------------------------------------------------------------------- | |||
| // Return values from any GDI+ API | |||
| //-------------------------------------------------------------------------- | |||
| enum Status | |||
| { | |||
| Ok = 0, | |||
| GenericError = 1, | |||
| InvalidParameter = 2, | |||
| OutOfMemory = 3, | |||
| ObjectBusy = 4, | |||
| InsufficientBuffer = 5, | |||
| NotImplemented = 6, | |||
| Win32Error = 7, | |||
| WrongState = 8, | |||
| Aborted = 9, | |||
| #ifdef DCR_USE_NEW_135429 | |||
| FileNotFound = 10, | |||
| ValueOverflow = 11, | |||
| AccessDenied = 12, | |||
| UnknownImageFormat = 13, | |||
| FontFamilyNotFound = 14, | |||
| FontStyleNotFound = 15, | |||
| NotTrueTypeFont = 16, | |||
| #else | |||
| NotFound = 10, | |||
| ValueOverflow = 11, | |||
| #endif | |||
| UnsupportedGdiplusVersion = 17, | |||
| GdiplusNotInitialized | |||
| }; | |||
| //-------------------------------------------------------------------------- | |||
| // Represents a dimension in a 2D coordinate system | |||
| // (floating-point coordinates) | |||
| //-------------------------------------------------------------------------- | |||
| class SizeF | |||
| { | |||
| public: | |||
| // Default constructor | |||
| SizeF() | |||
| { | |||
| Width = Height = 0.0f; | |||
| } | |||
| SizeF(IN const SizeF& size) | |||
| { | |||
| Width = size.Width; | |||
| Height = size.Height; | |||
| } | |||
| SizeF(IN REAL width, | |||
| IN REAL height) | |||
| { | |||
| Width = width; | |||
| Height = height; | |||
| } | |||
| SizeF operator+(IN const SizeF& sz) const | |||
| { | |||
| return SizeF(Width + sz.Width, | |||
| Height + sz.Height); | |||
| } | |||
| SizeF operator-(IN const SizeF& sz) const | |||
| { | |||
| return SizeF(Width - sz.Width, | |||
| Height - sz.Height); | |||
| } | |||
| BOOL Equals(IN const SizeF& sz) const | |||
| { | |||
| return (Width == sz.Width) && (Height == sz.Height); | |||
| } | |||
| BOOL Empty() const | |||
| { | |||
| return (Width == 0.0f && Height == 0.0f); | |||
| } | |||
| public: | |||
| REAL Width; | |||
| REAL Height; | |||
| }; | |||
| //-------------------------------------------------------------------------- | |||
| // Represents a dimension in a 2D coordinate system | |||
| // (integer coordinates) | |||
| //-------------------------------------------------------------------------- | |||
| class Size | |||
| { | |||
| public: | |||
| // Default constructor | |||
| Size() | |||
| { | |||
| Width = Height = 0; | |||
| } | |||
| Size(IN const Size& size) | |||
| { | |||
| Width = size.Width; | |||
| Height = size.Height; | |||
| } | |||
| Size(IN INT width, | |||
| IN INT height) | |||
| { | |||
| Width = width; | |||
| Height = height; | |||
| } | |||
| Size operator+(IN const Size& sz) const | |||
| { | |||
| return Size(Width + sz.Width, | |||
| Height + sz.Height); | |||
| } | |||
| Size operator-(IN const Size& sz) const | |||
| { | |||
| return Size(Width - sz.Width, | |||
| Height - sz.Height); | |||
| } | |||
| BOOL Equals(IN const Size& sz) const | |||
| { | |||
| return (Width == sz.Width) && (Height == sz.Height); | |||
| } | |||
| BOOL Empty() const | |||
| { | |||
| return (Width == 0 && Height == 0); | |||
| } | |||
| public: | |||
| INT Width; | |||
| INT Height; | |||
| }; | |||
| //-------------------------------------------------------------------------- | |||
| // Represents a location in a 2D coordinate system | |||
| // (floating-point coordinates) | |||
| //-------------------------------------------------------------------------- | |||
| class PointF | |||
| { | |||
| public: | |||
| PointF() | |||
| { | |||
| X = Y = 0.0f; | |||
| } | |||
| PointF(IN const PointF &point) | |||
| { | |||
| X = point.X; | |||
| Y = point.Y; | |||
| } | |||
| PointF(IN const SizeF &size) | |||
| { | |||
| X = size.Width; | |||
| Y = size.Height; | |||
| } | |||
| PointF(IN REAL x, | |||
| IN REAL y) | |||
| { | |||
| X = x; | |||
| Y = y; | |||
| } | |||
| PointF operator+(IN const PointF& point) const | |||
| { | |||
| return PointF(X + point.X, | |||
| Y + point.Y); | |||
| } | |||
| PointF operator-(IN const PointF& point) const | |||
| { | |||
| return PointF(X - point.X, | |||
| Y - point.Y); | |||
| } | |||
| BOOL Equals(IN const PointF& point) | |||
| { | |||
| return (X == point.X) && (Y == point.Y); | |||
| } | |||
| public: | |||
| REAL X; | |||
| REAL Y; | |||
| }; | |||
| //-------------------------------------------------------------------------- | |||
| // Represents a location in a 2D coordinate system | |||
| // (integer coordinates) | |||
| //-------------------------------------------------------------------------- | |||
| class Point | |||
| { | |||
| public: | |||
| Point() | |||
| { | |||
| X = Y = 0; | |||
| } | |||
| Point(IN const Point &point) | |||
| { | |||
| X = point.X; | |||
| Y = point.Y; | |||
| } | |||
| Point(IN const Size &size) | |||
| { | |||
| X = size.Width; | |||
| Y = size.Height; | |||
| } | |||
| Point(IN INT x, | |||
| IN INT y) | |||
| { | |||
| X = x; | |||
| Y = y; | |||
| } | |||
| Point operator+(IN const Point& point) const | |||
| { | |||
| return Point(X + point.X, | |||
| Y + point.Y); | |||
| } | |||
| Point operator-(IN const Point& point) const | |||
| { | |||
| return Point(X - point.X, | |||
| Y - point.Y); | |||
| } | |||
| BOOL Equals(IN const Point& point) | |||
| { | |||
| return (X == point.X) && (Y == point.Y); | |||
| } | |||
| public: | |||
| INT X; | |||
| INT Y; | |||
| }; | |||
| //-------------------------------------------------------------------------- | |||
| // Represents a rectangle in a 2D coordinate system | |||
| // (floating-point coordinates) | |||
| //-------------------------------------------------------------------------- | |||
| class RectF | |||
| { | |||
| public: | |||
| // Default constructor | |||
| RectF() | |||
| { | |||
| X = Y = Width = Height = 0.0f; | |||
| } | |||
| RectF(IN REAL x, | |||
| IN REAL y, | |||
| IN REAL width, | |||
| IN REAL height) | |||
| { | |||
| X = x; | |||
| Y = y; | |||
| Width = width; | |||
| Height = height; | |||
| } | |||
| RectF(IN const PointF& location, | |||
| IN const SizeF& size) | |||
| { | |||
| X = location.X; | |||
| Y = location.Y; | |||
| Width = size.Width; | |||
| Height = size.Height; | |||
| } | |||
| RectF* Clone() const | |||
| { | |||
| return new RectF(X, Y, Width, Height); | |||
| } | |||
| VOID GetLocation(OUT PointF* point) const | |||
| { | |||
| point->X = X; | |||
| point->Y = Y; | |||
| } | |||
| VOID GetSize(OUT SizeF* size) const | |||
| { | |||
| size->Width = Width; | |||
| size->Height = Height; | |||
| } | |||
| VOID GetBounds(OUT RectF* rect) const | |||
| { | |||
| rect->X = X; | |||
| rect->Y = Y; | |||
| rect->Width = Width; | |||
| rect->Height = Height; | |||
| } | |||
| // Return the left, top, right, and bottom | |||
| // coordinates of the rectangle | |||
| REAL GetLeft() const | |||
| { | |||
| return X; | |||
| } | |||
| REAL GetTop() const | |||
| { | |||
| return Y; | |||
| } | |||
| REAL GetRight() const | |||
| { | |||
| return X+Width; | |||
| } | |||
| REAL GetBottom() const | |||
| { | |||
| return Y+Height; | |||
| } | |||
| // Determine if the rectangle is empty | |||
| BOOL IsEmptyArea() const | |||
| { | |||
| return (Width <= REAL_EPSILON) || (Height <= REAL_EPSILON); | |||
| } | |||
| BOOL Equals(IN const RectF & rect) const | |||
| { | |||
| return X == rect.X && | |||
| Y == rect.Y && | |||
| Width == rect.Width && | |||
| Height == rect.Height; | |||
| } | |||
| BOOL Contains(IN REAL x, | |||
| IN REAL y) const | |||
| { | |||
| return x >= X && x < X+Width && | |||
| y >= Y && y < Y+Height; | |||
| } | |||
| BOOL Contains(IN const PointF& pt) const | |||
| { | |||
| return Contains(pt.X, pt.Y); | |||
| } | |||
| BOOL Contains(IN const RectF& rect) const | |||
| { | |||
| return (X <= rect.X) && (rect.GetRight() <= GetRight()) && | |||
| (Y <= rect.Y) && (rect.GetBottom() <= GetBottom()); | |||
| } | |||
| VOID Inflate(IN REAL dx, | |||
| IN REAL dy) | |||
| { | |||
| X -= dx; | |||
| Y -= dy; | |||
| Width += 2*dx; | |||
| Height += 2*dy; | |||
| } | |||
| VOID Inflate(IN const PointF& point) | |||
| { | |||
| Inflate(point.X, point.Y); | |||
| } | |||
| // Intersect the current rect with the specified object | |||
| BOOL Intersect(IN const RectF& rect) | |||
| { | |||
| return Intersect(*this, *this, rect); | |||
| } | |||
| // Intersect rect a and b and save the result into c | |||
| // Notice that c may be the same object as a or b. | |||
| static BOOL Intersect(OUT RectF& c, | |||
| IN const RectF& a, | |||
| IN const RectF& b) | |||
| { | |||
| REAL right = min(a.GetRight(), b.GetRight()); | |||
| REAL bottom = min(a.GetBottom(), b.GetBottom()); | |||
| REAL left = max(a.GetLeft(), b.GetLeft()); | |||
| REAL top = max(a.GetTop(), b.GetTop()); | |||
| c.X = left; | |||
| c.Y = top; | |||
| c.Width = right - left; | |||
| c.Height = bottom - top; | |||
| return !c.IsEmptyArea(); | |||
| } | |||
| // Determine if the specified rect intersects with the | |||
| // current rect object. | |||
| BOOL IntersectsWith(IN const RectF& rect) const | |||
| { | |||
| return (GetLeft() < rect.GetRight() && | |||
| GetTop() < rect.GetTop() && | |||
| GetRight() > rect.GetLeft() && | |||
| GetBottom() > rect.GetTop()); | |||
| } | |||
| static BOOL Union(OUT RectF& c, | |||
| IN const RectF& a, | |||
| IN const RectF& b) | |||
| { | |||
| REAL right = max(a.GetRight(), b.GetRight()); | |||
| REAL bottom = max(a.GetBottom(), b.GetBottom()); | |||
| REAL left = min(a.GetLeft(), b.GetLeft()); | |||
| REAL top = min(a.GetTop(), b.GetTop()); | |||
| c.X = left; | |||
| c.Y = top; | |||
| c.Width = right - left; | |||
| c.Height = bottom - top; | |||
| return !c.IsEmptyArea(); | |||
| } | |||
| VOID Offset(IN const PointF& point) | |||
| { | |||
| Offset(point.X, point.Y); | |||
| } | |||
| VOID Offset(IN REAL dx, | |||
| IN REAL dy) | |||
| { | |||
| X += dx; | |||
| Y += dy; | |||
| } | |||
| public: | |||
| REAL X; | |||
| REAL Y; | |||
| REAL Width; | |||
| REAL Height; | |||
| }; | |||
| //-------------------------------------------------------------------------- | |||
| // Represents a rectangle in a 2D coordinate system | |||
| // (integer coordinates) | |||
| //-------------------------------------------------------------------------- | |||
| class Rect | |||
| { | |||
| public: | |||
| // Default constructor | |||
| Rect() | |||
| { | |||
| X = Y = Width = Height = 0; | |||
| } | |||
| Rect(IN INT x, | |||
| IN INT y, | |||
| IN INT width, | |||
| IN INT height) | |||
| { | |||
| X = x; | |||
| Y = y; | |||
| Width = width; | |||
| Height = height; | |||
| } | |||
| Rect(IN const Point& location, | |||
| IN const Size& size) | |||
| { | |||
| X = location.X; | |||
| Y = location.Y; | |||
| Width = size.Width; | |||
| Height = size.Height; | |||
| } | |||
| Rect* Clone() const | |||
| { | |||
| return new Rect(X, Y, Width, Height); | |||
| } | |||
| VOID GetLocation(OUT Point* point) const | |||
| { | |||
| point->X = X; | |||
| point->Y = Y; | |||
| } | |||
| VOID GetSize(OUT Size* size) const | |||
| { | |||
| size->Width = Width; | |||
| size->Height = Height; | |||
| } | |||
| VOID GetBounds(OUT Rect* rect) const | |||
| { | |||
| rect->X = X; | |||
| rect->Y = Y; | |||
| rect->Width = Width; | |||
| rect->Height = Height; | |||
| } | |||
| // Return the left, top, right, and bottom | |||
| // coordinates of the rectangle | |||
| INT GetLeft() const | |||
| { | |||
| return X; | |||
| } | |||
| INT GetTop() const | |||
| { | |||
| return Y; | |||
| } | |||
| INT GetRight() const | |||
| { | |||
| return X+Width; | |||
| } | |||
| INT GetBottom() const | |||
| { | |||
| return Y+Height; | |||
| } | |||
| // Determine if the rectangle is empty | |||
| BOOL IsEmptyArea() const | |||
| { | |||
| return (Width <= 0) || (Height <= 0); | |||
| } | |||
| BOOL Equals(IN const Rect & rect) const | |||
| { | |||
| return X == rect.X && | |||
| Y == rect.Y && | |||
| Width == rect.Width && | |||
| Height == rect.Height; | |||
| } | |||
| BOOL Contains(IN INT x, | |||
| IN INT y) const | |||
| { | |||
| return x >= X && x < X+Width && | |||
| y >= Y && y < Y+Height; | |||
| } | |||
| BOOL Contains(IN const Point& pt) const | |||
| { | |||
| return Contains(pt.X, pt.Y); | |||
| } | |||
| BOOL Contains(IN Rect& rect) const | |||
| { | |||
| return (X <= rect.X) && (rect.GetRight() <= GetRight()) && | |||
| (Y <= rect.Y) && (rect.GetBottom() <= GetBottom()); | |||
| } | |||
| VOID Inflate(IN INT dx, | |||
| IN INT dy) | |||
| { | |||
| X -= dx; | |||
| Y -= dy; | |||
| Width += 2*dx; | |||
| Height += 2*dy; | |||
| } | |||
| VOID Inflate(IN const Point& point) | |||
| { | |||
| Inflate(point.X, point.Y); | |||
| } | |||
| // Intersect the current rect with the specified object | |||
| BOOL Intersect(IN const Rect& rect) | |||
| { | |||
| return Intersect(*this, *this, rect); | |||
| } | |||
| // Intersect rect a and b and save the result into c | |||
| // Notice that c may be the same object as a or b. | |||
| static BOOL Intersect(OUT Rect& c, | |||
| IN const Rect& a, | |||
| IN const Rect& b) | |||
| { | |||
| INT right = min(a.GetRight(), b.GetRight()); | |||
| INT bottom = min(a.GetBottom(), b.GetBottom()); | |||
| INT left = max(a.GetLeft(), b.GetLeft()); | |||
| INT top = max(a.GetTop(), b.GetTop()); | |||
| c.X = left; | |||
| c.Y = top; | |||
| c.Width = right - left; | |||
| c.Height = bottom - top; | |||
| return !c.IsEmptyArea(); | |||
| } | |||
| // Determine if the specified rect intersects with the | |||
| // current rect object. | |||
| BOOL IntersectsWith(IN const Rect& rect) const | |||
| { | |||
| return (GetLeft() < rect.GetRight() && | |||
| GetTop() < rect.GetTop() && | |||
| GetRight() > rect.GetLeft() && | |||
| GetBottom() > rect.GetTop()); | |||
| } | |||
| static BOOL Union(OUT Rect& c, | |||
| IN const Rect& a, | |||
| IN const Rect& b) | |||
| { | |||
| INT right = max(a.GetRight(), b.GetRight()); | |||
| INT bottom = max(a.GetBottom(), b.GetBottom()); | |||
| INT left = min(a.GetLeft(), b.GetLeft()); | |||
| INT top = min(a.GetTop(), b.GetTop()); | |||
| c.X = left; | |||
| c.Y = top; | |||
| c.Width = right - left; | |||
| c.Height = bottom - top; | |||
| return !c.IsEmptyArea(); | |||
| } | |||
| VOID Offset(IN const Point& point) | |||
| { | |||
| Offset(point.X, point.Y); | |||
| } | |||
| VOID Offset(IN INT dx, | |||
| IN INT dy) | |||
| { | |||
| X += dx; | |||
| Y += dy; | |||
| } | |||
| public: | |||
| INT X; | |||
| INT Y; | |||
| INT Width; | |||
| INT Height; | |||
| }; | |||
| // A user must mange memory for PathData. | |||
| class PathData | |||
| { | |||
| public: | |||
| PathData() | |||
| { | |||
| Count = 0; | |||
| Points = NULL; | |||
| Types = NULL; | |||
| } | |||
| ~PathData() | |||
| { | |||
| if (Points != NULL) | |||
| { | |||
| delete Points; | |||
| } | |||
| if (Types != NULL) | |||
| { | |||
| delete Types; | |||
| } | |||
| } | |||
| #ifdef DCR_USE_NEW_250932 | |||
| private: | |||
| PathData(const PathData &); | |||
| PathData& operator=(const PathData &); | |||
| #endif | |||
| public: | |||
| INT Count; | |||
| PointF* Points; | |||
| BYTE* Types; | |||
| }; | |||
| //----------------------------- | |||
| // text character range | |||
| //----------------------------- | |||
| class CharacterRange | |||
| { | |||
| public: | |||
| CharacterRange( | |||
| INT first, | |||
| INT length | |||
| ) : | |||
| First (first), | |||
| Length (length) | |||
| {} | |||
| CharacterRange() : First(0), Length(0) | |||
| {} | |||
| CharacterRange & operator = (const CharacterRange &rhs) | |||
| { | |||
| First = rhs.First; | |||
| Length = rhs.Length; | |||
| return *this; | |||
| } | |||
| INT First; | |||
| INT Length; | |||
| }; | |||
| #endif // !_GDIPLUSTYPES_HPP | |||