Mozilla2:GFXMatrix

From MozillaWiki
Revision as of 21:56, 12 March 2005 by Pavlov (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Matrix Class =

Since we'll be doing scaling, translations and rotates, we need some sort of matrix class. This class is really just an affine transform and might should be renamed to indicate that.

The API

class Matrix {
public:
    Matrix() { reset(); }
    Matrix(const Matrix& m);
    Matrix(double a, double b, double c, double d, double tx, double ty);

    const Matrix& operator *= (const Matrix& m) { return multiply(m); }
    Matrix operator * (const Matrix& m) { return Matrix(*this).multiply(m); }

    const Matrix& reset();
    const Matrix& scale(double x, double y);
    const Matrix& translate(double x, double y);
    const Matrix& rotate(double radians);
    const Matrix& multiply(const Matrix& m);

    void transformDistance(double *dx, double *dy) const;
    void transformPoint(double *x, double *y) const;
};

Notes

Cairo currently uses row vectors to transform points, which is less optimal than if we used column vectors.