I find the following code inside PAffineTransform:
/**
* Scales the transform about the given point by the given scale.
*
* @param scale to transform the transform by
* @param x x coordinate around which the scale should take place
* @param y y coordinate around which the scale should take place
*/
public void scaleAboutPoint(final double scale, final double x, final double y) {
//TODO strange order
translate(x, y);
scale(scale, scale);
translate(-x, -y);
}
Wouldn't it correct to do reverse:
translate(-x, -y);
scale(scale, scale);
translate(x, y);
All used methods are the same as in AffineTransform.
UPDATE
My mistake.
Sequential transform modification means matrix multiplication from the right. So, the last applied modification works first while transforming, because transforming is matrix multiplication from the left.