Hi Manuel,
here's your sample application.
The click callback performs zoom around the mouse position (in client
coordinates).
It should not be difficult to adapt the code to your case.
Luca
public class TestBatikZoom {
JSVGCanvas svgCanvas;
public static void main(String[] args) {
TestBatikZoom app = new TestBatikZoom();
app.run();
}
private final class ZoomMouseListener extends MouseAdapter
implements MouseMotionListener{
public void mouseClicked(MouseEvent evt) {
AffineTransform at;
at = svgCanvas.getRenderingTransform();
if (at != null) {
Point2D p2d = new Point2D.Double(evt.getX(),evt.getY());
at.preConcatenate(AffineTransform.getTranslateInstance(-p2d.getX(),
-p2d.getY()));
if(evt.getButton()==3) {
at.preConcatenate(AffineTransform.getScaleInstance(.8, .8));
System.out.println("zoomout");
}
else {
at.preConcatenate(AffineTransform.getScaleInstance(1.25, 1.25));
System.out.println("zoomin");
}
at.preConcatenate(AffineTransform.getTranslateInstance(p2d.getX(),
p2d.getY()));
svgCanvas.setRenderingTransform(at);
}
}
}
public void run() {
JFrame f;
DOMImplementation impl =
SVGDOMImplementation.getDOMImplementation();
String svgNS = SVGDOMImplementation.SVG_NAMESPACE_URI;
Document doc = impl.createDocument(svgNS, "svg", null);
Element rectangle = doc.createElementNS(svgNS, "rect");
rectangle.setAttribute("x", "50");
rectangle.setAttribute("y", "50");
rectangle.setAttribute("width", "100");
rectangle.setAttribute("height", "100");
rectangle.setAttribute("fill", "red");
rectangle.setAttribute("stroke", "blue");
doc.getDocumentElement().appendChild(rectangle);
rectangle = doc.createElementNS(svgNS, "rect");
rectangle.setAttribute("x", "100");
rectangle.setAttribute("y", "100");
rectangle.setAttribute("width", "100");
rectangle.setAttribute("height", "100");
rectangle.setAttribute("fill", "green");
rectangle.setAttribute("stroke", "black");
doc.getDocumentElement().appendChild(rectangle);
doc.getDocumentElement().setAttribute("viewBox", "0 0 200 200");
svgCanvas = new JSVGCanvas();
f = new JFrame("Batik");
f.getContentPane().add(svgCanvas);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
f.setSize(400, 400);
f.setVisible(true);
svgCanvas.setDocument(doc);
ZoomMouseListener listener=new ZoomMouseListener();
svgCanvas.addMouseListener(listener);
svgCanvas.addMouseMotionListener(listener);
}
Manuel Brnjic ha scritto:
So, i have something done, but i have to play with de coordinates ...
because i have no idea where he zooms in when i set the point2D on
200, 400
here is my example-snippet:
if(cmd.equals("Zoom")){
try {
AffineTransform at;
at = canvas.getViewBoxTransform();
if (at != null) {
at = at.createInverse();
Point2D p2d = at.transform(new
Point2D.Double(200.0, 400.0), null);
canvas.setRenderingTransform(at);
}
} catch (NoninvertibleTransformException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]