Just wanted to share a bit of code I put together for determining the bounds of the SVG document when displayed in the JSVGComponent. We had a need to detect "out of bounds" conditions for MouseEvents and I was a bit stumped about how to get the bounds of the SVG doc in the component. I found that I could deduce the bounds via the viewBox attribute if present in the document. You can drop this method into anything that extends JSVGComponent to make it work. Perhaps there is a more standard way to get this info, but I couldn't find it in the API docs. Anyway I hope someone finds it useful.
/** * Initialize the shape of the viewBox- this is the area (in AWT * coords) in the JComponent where the SVG is visible. If no * viewBox is available we try to make this function fail * gracefully- no crashes. */ public Shape getViewBoxShape() { Document doc = getSVGDocument(); if (doc == null) return null;
Element root = doc.getDocumentElement(); String viewBox = root.getAttribute("viewBox");
if (viewBox == null) return null;
// break viewBox string up into its 4 numbers // example: viewBox="0 0 25400 19100"
String[] nums = viewBox.split("\\s+"); if (nums.length != 4) return null; // fail gracefully!
float x = Float.parseFloat(nums[0]); float y = Float.parseFloat(nums[1]); float width = Float.parseFloat(nums[2]); float height = Float.parseFloat(nums[3]);
// construct a rectangle that describes the viewBox Rectangle2D rect = new Rectangle2D.Float(x, y, width, height);
// locate the viewBox in AWT coordinate space of this JComponent AffineTransform aft = getViewBoxTransform(); return aft.createTransformedShape(rect); }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]