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 |