public boolean interacted(AffineTransform root, MouseEvent e,
			MouseEventType t) {
		Point2D.Float src = new Point2D.Float();
		src.setLocation(e.getX(), e.getY());
		try {
			root.invert();
		} catch (NoninvertibleTransformException e1) {
			e1.printStackTrace();
		}

		Point2D pt = root.transform(src, null);

		if (t == MouseEventType.MOUSE_PRESS && Math.abs(pt.getX()) < 10
				&& Math.abs(pt.getY()) < 10) {
			dragging = true;
			last = pt;
			pt.setLocation(pt.getX() + worldx(), pt.getY() + worldy());
		} else if (dragging && t == MouseEventType.MOUSE_DRAG) {
			pt.setLocation(pt.getX() + worldx(), pt.getY() + worldy());
			tweak((float) (pt.getX() - last.getX()),
					(float) (pt.getY() - last.getY()), (float) pt.getX(),
					(float) pt.getY());
			last = pt;
		} else if (dragging && t == MouseEventType.MOUSE_RELEASE) {
			dragging = false;
			last = null;
		} else {
			return false;
		}
		return true;
	}