@Override
	public void scale(VisualizationServer<?, ?> vv, float amount, Point2D at) {
		MutableTransformer layoutTransformer =
			vv.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.LAYOUT);
		MutableTransformer viewTransformer =
			vv.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.VIEW);
		double modelScale = layoutTransformer.getScale();
		double viewScale = viewTransformer.getScale();
		double inverseViewScale = Math.sqrt(crossover) / viewScale;
		double scale = modelScale * viewScale;

		//
		// Use the 'at' value unless the options dictate otherwise
		//
		if (!useMouseRelativeZoom(vv)) {
			at = vv.getCenter();
		}

		if (scale * amount < crossover) {
			// scale the viewTransformer, return the layoutTransformer to crossover value
			viewTransformer.scale(amount, amount, at);
		}
		// just restore the scale, but don't adjust the layout
		else {
			viewTransformer.scale(inverseViewScale, inverseViewScale, at);
		}
		vv.repaint();
	}
An implementation of {@link ScalingControl} that allows us to zoom in and out of the view.
Ghidra/Framework/Graph/src/main/java/ghidra/graph/viewer/VisualGraphScalingControl.java