private static NSRect convert_rect_using_matrices(NSRect aRect, NSAffineTransform matrix1,
NSAffineTransform matrix2)
{
NSRect r = new NSRect();
NSPoint[] p = new NSPoint[4];
NSPoint min, max;
int i;
for (i = 0; i < 4; i++)
p[i] = aRect.Origin;
p[1].X += aRect.Size.Width;
p[2].Y += aRect.Size.Height;
p[3].X += aRect.Size.Width;
p[3].Y += aRect.Size.Height;
for (i = 0; i < 4; i++)
p[i] = matrix1.TransformPoint(p[i]);
min = max = p[0] = matrix2.TransformPoint(p[0]);
for (i = 1; i < 4; i++)
{
p[i] = matrix2.TransformPoint(p[i]);
min.X = Math.Min(min.X, p[i].X);
min.Y = Math.Min(min.Y, p[i].Y);
max.X = Math.Max(max.X, p[i].X);
max.Y = Math.Max(max.Y, p[i].Y);
}
r.Origin = min;
r.Size = NS.MakeSize(max.X - min.X, max.Y - min.Y);
//r.Size.Width = max.X - min.X;
//r.Size.Height = max.Y - min.Y;
return r;
}