--- /dev/null
+/////////////////////////////////////////////////////////////////////////////
+// Name: matrix.h
+// Purpose: wxTransformMatrix class. NOT YET USED
+// Author: Chris Breeze, Julian Smart
+// Modified by:
+// Created: 01/02/97
+// RCS-ID: $Id$
+// Copyright: (c) Julian Smart and Markus Holzem
+// Licence: wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+
+#ifndef __MATRIXH__
+#define __MATRIXH__
+
+#ifdef __GNUG__
+#pragma interface "matrix.h"
+#endif
+
+#include "wx/object.h"
+
+// A simple 3x3 matrix. This may be replaced by a more general matrix
+// class some day.
+//
+// Note: this is intended to be used in wxDC at some point to replace
+// the current system of scaling/translation. It is not yet used.
+
+class WXDLLEXPORT wxTransformMatrix: public wxObject
+{
+public:
+ wxTransformMatrix(void);
+ wxTransformMatrix(const wxTransformMatrix& mat);
+
+ double GetValue(int row, int col) const;
+ void SetValue(int row, int col, double value);
+
+ void operator = (const wxTransformMatrix& mat);
+ bool operator == (const wxTransformMatrix& mat);
+ bool operator != (const wxTransformMatrix& mat);
+
+ double& operator()(int row, int col);
+ double operator()(int row, int col) const;
+
+ // Invert matrix
+ bool Invert(void);
+
+ // Make into identity matrix
+ bool Identity(void);
+
+ // Is the matrix the identity matrix?
+ // Only returns a flag, which is set whenever an operation
+ // is done.
+ inline bool IsIdentity(void) const { return m_isIdentity; };
+
+ // This does an actual check.
+ inline bool IsIdentity1(void) const ;
+
+ // Isotropic scaling
+ bool Scale(double scale);
+
+ // Translate
+ bool Translate(double x, double y);
+
+ // Rotate
+ bool Rotate(double angle);
+
+ // Transform X value from logical to device
+ inline double TransformX(double x) const;
+
+ // Transform Y value from logical to device
+ inline double TransformY(double y) const;
+
+ // Transform a point from logical to device coordinates
+ bool TransformPoint(double x, double y, double& tx, double& ty) const;
+
+ // Transform a point from device to logical coordinates.
+
+ // Example of use:
+ // wxTransformMatrix mat = dc.GetTransformation();
+ // mat.Invert();
+ // mat.InverseTransformPoint(x, y, x1, y1);
+ // OR (shorthand:)
+ // dc.LogicalToDevice(x, y, x1, y1);
+ // The latter is slightly less efficient if we're doing several
+ // conversions, since the matrix is inverted several times.
+
+ // N.B. 'this' matrix is the inverse at this point
+
+ bool InverseTransformPoint(double x, double y, double& tx, double& ty) const;
+
+public:
+ double m_matrix[3][3];
+ bool m_isIdentity;
+/*
+ double m11, m21, m31;
+ double m12, m22, m32;
+ double m13, m23, m33;
+*/
+};
+
+// Transform X value from logical to device
+inline double wxTransformMatrix::TransformX(double x) const
+{
+// return (m_isIdentity ? x : (x * m_matrix[0][0] + y * m_matrix[1][0] + m_matrix[2][0]));
+ return 0;
+}
+
+// Transform Y value from logical to device
+inline double wxTransformMatrix::TransformY(double y) const
+{
+// return (m_isIdentity ? y : (x * m_matrix[0][1] + y * m_matrix[1][1] + m_matrix[2][1]));
+ return 0;
+}
+
+// Is the matrix the identity matrix?
+// Perhaps there's some kind of optimization we can do to make this
+// a faster operation. E.g. each operation (scale, translate etc.)
+// checks whether it's still the identity matrix and sets a flag.
+inline bool wxTransformMatrix::IsIdentity1(void) const
+{
+ return
+ (m_matrix[0][0] == 1.0 &&
+ m_matrix[1][1] == 1.0 &&
+ m_matrix[2][2] == 1.0 &&
+ m_matrix[1][0] == 0.0 &&
+ m_matrix[2][0] == 0.0 &&
+ m_matrix[0][1] == 0.0 &&
+ m_matrix[2][1] == 0.0 &&
+ m_matrix[0][2] == 0.0 &&
+ m_matrix[1][2] == 0.0) ;
+}
+
+// Calculates the determinant of a 2 x 2 matrix
+inline double wxCalculateDet(double a11, double a21, double a12, double a22)
+{
+ return a11 * a22 - a12 * a21;
+}
+
+#endif
+ // __MATRIXH__