DOMMatrix* DOMMatrix::ScaleNonUniformSelf(double aScaleX, double aScaleY, double aScaleZ, double aOriginX, double aOriginY, double aOriginZ) { if (aScaleX == 1.0 && aScaleY == 1.0 && aScaleZ == 1.0) { return this; } TranslateSelf(aOriginX, aOriginY, aOriginZ); if (mMatrix3D || aScaleZ != 1.0 || aOriginZ != 0) { Ensure3DMatrix(); gfx::Matrix4x4 m; m._11 = aScaleX; m._22 = aScaleY; m._33 = aScaleZ; *mMatrix3D = m * *mMatrix3D; } else { gfx::Matrix m; m._11 = aScaleX; m._22 = aScaleY; *mMatrix2D = m * *mMatrix2D; } TranslateSelf(-aOriginX, -aOriginY, -aOriginZ); return this; }
DOMMatrix* DOMMatrix::RotateSelf(double aAngle, double aOriginX, double aOriginY) { if (fmod(aAngle, 360) == 0) { return this; } TranslateSelf(aOriginX, aOriginY); if (mMatrix3D) { RotateAxisAngleSelf(0, 0, 1, aAngle); } else { *mMatrix2D = mMatrix2D->PreRotate(aAngle * radPerDegree); } TranslateSelf(-aOriginX, -aOriginY); return this; }