1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**************************************************************************\ 2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov* 3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov* Copyright (c) 1998-2000, Microsoft Corp. All Rights Reserved. 4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov* 5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov* Module Name: 6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov* 7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov* GdiplusMatrix.h 8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov* 9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov* Abstract: 10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov* 11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov* GDI+ Matrix class 12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov* 13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov\**************************************************************************/ 14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass Matrix : public GdiplusBase 16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov friend class Graphics; 19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov friend class GraphicsPath; 20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov friend class TextureBrush; 21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov friend class LinearGradientBrush; 22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov friend class PathGradientBrush; 23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov friend class Pen; 24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov friend class Region; 25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Default constructor - set to identity matrix 27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Matrix() 29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov GpMatrix *matrix = NULL; 31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov lastResult = DllExports::GdipCreateMatrix(&matrix); 33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetNativeMatrix(matrix); 35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Matrix(IN REAL m11, 38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN REAL m12, 39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN REAL m21, 40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN REAL m22, 41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN REAL dx, 42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN REAL dy) 43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov GpMatrix *matrix = NULL; 45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov lastResult = DllExports::GdipCreateMatrix2(m11, m12, m21, m22, 47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov dx, dy, &matrix); 48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetNativeMatrix(matrix); 50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Matrix(IN const RectF& rect, 53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN const PointF* dstplg) 54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov GpMatrix *matrix = NULL; 56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov lastResult = DllExports::GdipCreateMatrix3(&rect, 58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov dstplg, 59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov &matrix); 60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetNativeMatrix(matrix); 62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Matrix(IN const Rect& rect, 65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN const Point* dstplg) 66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov GpMatrix *matrix = NULL; 68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov lastResult = DllExports::GdipCreateMatrix3I(&rect, 70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov dstplg, 71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov &matrix); 72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetNativeMatrix(matrix); 74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ~Matrix() 77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov DllExports::GdipDeleteMatrix(nativeMatrix); 79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Matrix *Clone() const 82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov GpMatrix *cloneMatrix = NULL; 84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetStatus(DllExports::GdipCloneMatrix(nativeMatrix, 86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov &cloneMatrix)); 87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (lastResult != Ok) 89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return NULL; 90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return new Matrix(cloneMatrix); 92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Status GetElements(OUT REAL *m) const 95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return SetStatus(DllExports::GdipGetMatrixElements(nativeMatrix, m)); 97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Status SetElements(IN REAL m11, 100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN REAL m12, 101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN REAL m21, 102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN REAL m22, 103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN REAL dx, 104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN REAL dy) 105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return SetStatus(DllExports::GdipSetMatrixElements(nativeMatrix, 107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m11, m12, m21, m22, dx, dy)); 108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov REAL OffsetX() const 111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov REAL elements[6]; 113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (GetElements(&elements[0]) == Ok) 115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return elements[4]; 116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov else 117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return 0.0f; 118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov REAL OffsetY() const 121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov REAL elements[6]; 123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (GetElements(&elements[0]) == Ok) 125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return elements[5]; 126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov else 127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return 0.0f; 128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Status Reset() 131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // set identity matrix elements 133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return SetStatus(DllExports::GdipSetMatrixElements(nativeMatrix, 134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1.0, 0.0, 0.0, 1.0, 0.0, 0.0)); 135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Status Multiply(IN const Matrix *matrix, 138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN MatrixOrder order = MatrixOrderPrepend) 139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return SetStatus(DllExports::GdipMultiplyMatrix(nativeMatrix, 141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov matrix->nativeMatrix, 142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov order)); 143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Status Translate(IN REAL offsetX, 146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN REAL offsetY, 147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN MatrixOrder order = MatrixOrderPrepend) 148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return SetStatus(DllExports::GdipTranslateMatrix(nativeMatrix, offsetX, offsetY, order)); 150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Status Scale(IN REAL scaleX, 153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN REAL scaleY, 154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN MatrixOrder order = MatrixOrderPrepend) 155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return SetStatus(DllExports::GdipScaleMatrix(nativeMatrix, scaleX, scaleY, order)); 157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Status Rotate(IN REAL angle, 160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN MatrixOrder order = MatrixOrderPrepend) 161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return SetStatus(DllExports::GdipRotateMatrix(nativeMatrix, angle, order)); 163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Status RotateAt(IN REAL angle, 166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN const PointF& center, 167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN MatrixOrder order = MatrixOrderPrepend) 168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(order == MatrixOrderPrepend) 170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetStatus(DllExports::GdipTranslateMatrix(nativeMatrix, center.X, center.Y, order)); 172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetStatus(DllExports::GdipRotateMatrix(nativeMatrix, angle, order)); 173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return SetStatus(DllExports::GdipTranslateMatrix(nativeMatrix, - center.X, - center.Y, order)); 174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov else 176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetStatus(DllExports::GdipTranslateMatrix(nativeMatrix, - center.X, - center.Y, order)); 178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetStatus(DllExports::GdipRotateMatrix(nativeMatrix, angle, order)); 179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return SetStatus(DllExports::GdipTranslateMatrix(nativeMatrix, center.X, center.Y, order)); 180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Status Shear(IN REAL shearX, 184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN REAL shearY, 185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN MatrixOrder order = MatrixOrderPrepend) 186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return SetStatus(DllExports::GdipShearMatrix(nativeMatrix, shearX, shearY, order)); 188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Status Invert() 191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return SetStatus(DllExports::GdipInvertMatrix(nativeMatrix)); 193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // float version 196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Status TransformPoints(IN OUT PointF* pts, 197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN INT count = 1) const 198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return SetStatus(DllExports::GdipTransformMatrixPoints(nativeMatrix, pts, count)); 200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Status TransformPoints(IN OUT Point* pts, 203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN INT count = 1) const 204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return SetStatus(DllExports::GdipTransformMatrixPointsI(nativeMatrix, 206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pts, 207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov count)); 208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Status TransformVectors(IN OUT PointF* pts, 211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN INT count = 1) const 212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return SetStatus(DllExports::GdipVectorTransformMatrixPoints(nativeMatrix, pts, count)); 214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Status TransformVectors(IN OUT Point* pts, 217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IN INT count = 1) const 218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return SetStatus(DllExports::GdipVectorTransformMatrixPointsI(nativeMatrix, 220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pts, 221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov count)); 222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov BOOL IsInvertible() const 225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov BOOL result = FALSE; 227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetStatus(DllExports::GdipIsMatrixInvertible(nativeMatrix, &result)); 229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return result; 231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov BOOL IsIdentity() const 234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov BOOL result = FALSE; 236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetStatus(DllExports::GdipIsMatrixIdentity(nativeMatrix, &result)); 238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return result; 240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov BOOL Equals(IN const Matrix *matrix) const 243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov BOOL result = FALSE; 245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetStatus(DllExports::GdipIsMatrixEqual(nativeMatrix, 247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov matrix->nativeMatrix, &result)); 248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return result; 250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Status GetLastStatus() const 253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Status lastStatus = lastResult; 255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov lastResult = Ok; 256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return lastStatus; 258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected: 261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef DCR_USE_NEW_250932 263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate: 265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Matrix(const Matrix &); 266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Matrix& operator=(const Matrix &); 267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected: 268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#else 270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Matrix(const Matrix& matrix) 272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov matrix; 274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetStatus(NotImplemented); 275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetNativeMatrix(NULL); 276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 277ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Matrix& operator=(const Matrix& matrix) 279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 280ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov matrix; 281ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetStatus(NotImplemented); 282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return *this; 283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 284ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Matrix(GpMatrix *nativeMatrix) 288ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 289ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov lastResult = Ok; 290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetNativeMatrix(nativeMatrix); 291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 292ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 293ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov VOID SetNativeMatrix(GpMatrix *nativeMatrix) 294ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 295ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov this->nativeMatrix = nativeMatrix; 296ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 297ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 298ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Status SetStatus(Status status) const 299ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 300ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (status != Ok) 301ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return (lastResult = status); 302ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov else 303ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return status; 304ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 305ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 306ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected: 307ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov GpMatrix *nativeMatrix; 308ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov mutable Status lastResult; 309ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 310