package nodebox.graphics; public class ContextTransformDelegate implements TransformDelegate { private GraphicsContext context; private Transform transform; private Transform currentTransform; public ContextTransformDelegate(GraphicsContext context) { this.context = context; transform = new Transform(); currentTransform = new Transform(); } public void transform(Grob g, Transform t) { transform(g, t, false); } public void transform(Grob g, Transform t, boolean override) { if (override) { currentTransform = new Transform(); } if (!transform.getAffineTransform().isIdentity()) { Transform revertedTransform = transform.clone(); revertedTransform.invert(); g.transform(revertedTransform); } currentTransform.append(t); Rect bounds = g.getBounds(); double dx = bounds.getX() + bounds.getWidth() / 2; double dy = bounds.getY() + bounds.getHeight() / 2; transform = currentTransform.clone(); if (context.transform() == Transform.Mode.CENTER) { Transform n = new Transform(); n.translate(dx, dy); transform.prepend(n); n = new Transform(); n.translate(-dx, -dy); transform.append(n); } g.transform(transform); } }